LivoxLaser.h 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  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. protected:
  33. static void InitLivox();
  34. static void LidarDataCallback(uint8_t handle, LivoxEthPacket *data, uint32_t data_num, void *laser);
  35. static void OnDeviceChange(const DeviceInfo *info, DeviceEvent type);
  36. static void OnDeviceBroadcast(const BroadcastDeviceInfo *info);
  37. static void OnSampleCallback(uint8_t status, uint8_t handle, uint8_t response, void *data);
  38. protected:
  39. uint8_t m_handle;
  40. unsigned int m_frame_maxnum;
  41. threadsafe_queue<CBinaryData*> m_queue_livox_data;
  42. static DeviceItem g_devices[kMaxLidarCount];
  43. static std::map<uint8_t,std::string> g_handle_sn;
  44. static std::map<std::string, uint8_t> g_sn_handle;
  45. static std::map<std::string, CLivoxLaser*> g_sn_laser;
  46. static CLivoxLaser* g_all_laser[kMaxLidarCount];
  47. static unsigned int g_count[kMaxLidarCount];
  48. };
  49. #endif