TcpLaser.h 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. /*************************
  2. sick 511 �״� tcpЭ�����ӿ��ư�
  3. *************************/
  4. #pragma once
  5. #include "Laser.h"
  6. #include <sys/types.h>
  7. #include <sys/socket.h>
  8. #include <netinet/in.h>
  9. #include <arpa/inet.h>
  10. #include <mutex>
  11. #define LASER_DATA_TIME_OUT 10000
  12. class CTcpLaser :
  13. public Laser_base
  14. {
  15. public:
  16. CTcpLaser(int id, Laser_proto::laser_parameter laser_param);
  17. ~CTcpLaser();
  18. //雷达链接设备,为3个线程添加线程执行函数。
  19. virtual Error_manager connect_laser();
  20. //雷达断开链接,释放3个线程
  21. virtual Error_manager disconnect_laser();
  22. //对外的接口函数,负责接受并处理任务单,
  23. //input:p_laser_task 雷达任务单,基类的指针,指向子类的实例,(多态)
  24. //注:这个函数为虚函数,实际的处理任务的代码由子类重载并实现。
  25. virtual Error_manager execute_task(Task_Base* p_laser_task);
  26. //检查雷达状态,是否正常运行
  27. virtual Error_manager check_laser();
  28. //雷达的启动接口函数, 让雷达进行扫描,一般需要子类重载,不同的雷达开始方式不同。
  29. virtual Error_manager start_scan();
  30. //雷达的停止接口函数, 让雷达停止扫描,一般需要子类重载,不同的雷达结束方式不同。
  31. virtual Error_manager stop_scan();
  32. //结束任务单,stop之后,要检查线程状态和数据结果,然后才能 end_task
  33. virtual Error_manager end_task();
  34. protected:
  35. //接受二进制消息的功能函数,每次只接受一个CBinaryData
  36. // 纯虚函数,必须由子类重载,
  37. virtual bool receive_buf_to_queue(Binary_buf& data);
  38. //将二进制消息转化为三维点云的功能函数,每次只转化一个CBinaryData,
  39. // 纯虚函数,必须由子类重载,
  40. virtual Buf_type transform_buf_to_points(Binary_buf* pData, std::vector<CPoint3D>& points);
  41. private:
  42. bool Send(const char* sendbuf, int len); // ����ָ��
  43. int Recv(char* recvbuf, int len); // ��������
  44. static int FindHead(char* buf, int b_len);
  45. static int FindTail(char* buf, int b_len);
  46. private:
  47. bool GetData(Binary_buf* pData, std::vector<float>& distance,
  48. float& freq, float& start_angle);
  49. long Str0x2Long(const char* data, int len);
  50. private:
  51. #pragma region udp��ر���
  52. int m_socket;
  53. //WSADATA m_wsd;
  54. struct sockaddr_in m_send_addr;
  55. std::mutex m_mutex;
  56. clock_t m_last_data_time;
  57. #pragma endregion
  58. };