LivoxLaser.h 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. #ifndef __LIVOX_MID_40_LIDAR__H
  2. #define __LIVOX_MID_40_LIDAR__H
  3. #include "Laser.h"
  4. #include "livox_def.h"
  5. #include "livox_sdk.h"
  6. #include <map>
  7. class CLivoxLaser :public CLaser
  8. {
  9. protected:
  10. typedef enum {
  11. kDeviceStateDisconnect = 0,
  12. kDeviceStateConnect = 1,
  13. kDeviceStateSampling = 2,
  14. } DeviceState;
  15. typedef struct {
  16. uint8_t handle;
  17. DeviceState device_state;
  18. DeviceInfo info;
  19. } DeviceItem;
  20. public:
  21. CLivoxLaser(int id, Automatic::stLaserCalibParam laser_param);
  22. ~CLivoxLaser();
  23. virtual bool Connect();
  24. virtual void Disconnect();
  25. virtual bool Start();
  26. virtual bool Stop();
  27. protected:
  28. virtual bool RecvData(CBinaryData& data);
  29. virtual DATA_type Data2PointXYZ(CBinaryData* pData, std::vector<CPoint3D>& points);
  30. virtual bool IsScanComplete();
  31. virtual void UpdataHandle();
  32. virtual eLaserStatu GetStatu();
  33. protected:
  34. static void InitLivox();
  35. static void LidarDataCallback(uint8_t handle, LivoxEthPacket *data, uint32_t data_num, void *laser);
  36. static void OnDeviceChange(const DeviceInfo *info, DeviceEvent type);
  37. static void OnDeviceBroadcast(const BroadcastDeviceInfo *info);
  38. static void OnSampleCallback(uint8_t status, uint8_t handle, uint8_t response, void *data);
  39. protected:
  40. uint8_t m_handle;
  41. unsigned int m_frame_maxnum;
  42. threadsafe_queue<CBinaryData*> m_queue_livox_data;
  43. static DeviceItem g_devices[kMaxLidarCount];
  44. static std::map<uint8_t,std::string> g_handle_sn;
  45. static std::map<std::string, uint8_t> g_sn_handle;
  46. static std::map<std::string, CLivoxLaser*> g_sn_laser;
  47. static CLivoxLaser* g_all_laser[kMaxLidarCount];
  48. static unsigned int g_count[kMaxLidarCount];
  49. };
  50. #endif