#ifndef __LIVOX_MID_40_LIDAR__H #define __LIVOX_MID_40_LIDAR__H #include "Laser.h" #include "livox_def.h" #include "livox_sdk.h" #include class CLivoxLaser :public CLaser { protected: typedef enum { kDeviceStateDisconnect = 0, kDeviceStateConnect = 1, kDeviceStateSampling = 2, } DeviceState; typedef struct { uint8_t handle; DeviceState device_state; DeviceInfo info; } DeviceItem; public: CLivoxLaser(int id, Automatic::stLaserCalibParam laser_param); ~CLivoxLaser(); virtual bool Connect(); virtual void Disconnect(); virtual bool Start(); virtual bool Stop(); protected: virtual bool RecvData(CBinaryData& data); virtual DATA_type Data2PointXYZ(CBinaryData* pData, std::vector& points); virtual bool IsScanComplete(); virtual void UpdataHandle(); protected: static void InitLivox(); static void LidarDataCallback(uint8_t handle, LivoxEthPacket *data, uint32_t data_num, void *laser); static void OnDeviceChange(const DeviceInfo *info, DeviceEvent type); static void OnDeviceBroadcast(const BroadcastDeviceInfo *info); static void OnSampleCallback(uint8_t status, uint8_t handle, uint8_t response, void *data); protected: uint8_t m_handle; unsigned int m_frame_maxnum; threadsafe_queue m_queue_livox_data; static DeviceItem g_devices[kMaxLidarCount]; static std::map g_handle_sn; static std::map g_sn_handle; static std::map g_sn_laser; static CLivoxLaser* g_all_laser[kMaxLidarCount]; static unsigned int g_count[kMaxLidarCount]; }; #endif