| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- #ifndef RB_LIDAR_H
- #define RB_LIDAR_H
- #ifdef __cplusplus
- extern "C" {
- #endif
- #include <stdint.h> // 包含标准整数类型
- #include <pthread.h> // 用于线程支持
- typedef void (*callback_t)(const char* data, int length);
- // 配置常量
- #define CONFIG_BLOCK_COUNT (16)
- #define CONFIG_UDP_BLOCKS (12)
- #define FRAME_POINT_COUNT (3600)
- #define SUBPKT_BUF_COUNT (200)
- // 结构体对齐设置
- #pragma pack(push)
- #pragma pack(1)
- // 原始点数据结构
- typedef struct {
- uint16_t dist_0; // 第一个距离
- uint8_t rssi_0; // 第一个RSSI值
- uint16_t dist_1; // 第二个距离
- uint8_t rssi_1; // 第二个RSSI值
- } raw_point_t;
- // 子包结构
- typedef struct {
- uint16_t header; // 子包头
- uint16_t azimuth; // 方位角
- raw_point_t point[CONFIG_BLOCK_COUNT]; // 点数据数组
- } sub_packet_t;
- // UDP包结构
- typedef struct {
- sub_packet_t sub_packet[CONFIG_UDP_BLOCKS]; // 子包数组
- uint32_t timestamp; // 时间戳
- uint16_t factory_byte; // 工厂字节
- } udp_packet_t;
- // 点数据结构
- typedef struct {
- uint16_t azimuth; // 方位角
- uint16_t dist; // 距离
- uint16_t rssi; // RSSI值
- uint32_t timestamp; // 时间戳
- } point_data_t;
- // 帧数据结构
- typedef struct {
- point_data_t pointcloud[FRAME_POINT_COUNT]; // 深度数据点云
- } frame_data_t;
- #pragma pack(pop)
- // RBLidar 结构体
- typedef struct {
- char* ip;
- int port;
- callback_t callback;
- sub_packet_t* buffer[2]; // 双缓冲区
- int current; // 当前缓冲区索引
- int valid_count[2]; // 每个缓冲区中有效数据的数量
- pthread_mutex_t mutex;
- pthread_cond_t cond;
- } RBLidar;
- // 创建 RBLidar 实例
- RBLidar* rblidar_create(const char* ip, int port, callback_t callback);
- // 释放 RBLidar 实例
- void rblidar_destroy(RBLidar* lidar);
- #ifdef __cplusplus
- }
- #endif
- #endif // RB_LIDAR_H
|