1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
pub const RPLIDAR_ANS_TYPE_DEVINFO : u8 = 0x4;
#[derive(Debug, Copy, Clone, PartialEq)]
#[repr(packed)]
#[repr(C)]
pub struct RplidarResponseDeviceInfo {
pub model: u8,
pub firmware_version: u16,
pub hardware_version: u8,
pub serialnum: [u8;16]
}
pub const RPLIDAR_ANS_TYPE_DEVHEALTH : u8 = 0x6;
#[derive(Debug, Copy, Clone, PartialEq)]
#[repr(packed)]
#[repr(C)]
pub struct RplidarResponseDeviceHealth {
pub status: u8,
pub error_code: u16
}
pub const RPLIDAR_HEALTH_STATUS_OK : u8 = 0;
pub const RPLIDAR_HEALTH_STATUS_WARNING : u8 = 1;
pub const RPLIDAR_HEALTH_STATUS_ERROR : u8 = 2;
pub const RPLIDAR_ANS_TYPE_MEASUREMENT : u8 = 0x81;
#[derive(Debug, Copy, Clone, PartialEq)]
#[repr(packed)]
#[repr(C)]
pub struct RplidarResponseMeasurementNode {
pub sync_quality: u8,
pub angle_q6_checkbit: u16,
pub distance_q2: u16,
}
pub const RPLIDAR_RESP_MEASUREMENT_SYNCBIT : u8 = 1;
pub const RPLIDAR_RESP_MEASUREMENT_QUALITY_SHIFT : usize = 2;
pub const RPLIDAR_RESP_MEASUREMENT_ANGLE_SHIFT : usize = 1;
pub const RPLIDAR_ANS_TYPE_MEASUREMENT_CAPSULED : u8 = 0x82;
#[derive(Debug, Copy, Clone, PartialEq)]
#[repr(packed)]
#[repr(C)]
pub struct RplidarResponseCabinNodes {
pub distance_angle_1: u16,
pub distance_angle_2: u16,
pub offset_angles_q3: u8
}
#[derive(Debug, Copy, Clone, PartialEq)]
#[repr(packed)]
#[repr(C)]
pub struct RplidarResponseCapsuleMeasurementNodes {
pub s_checksum_1: u8,
pub s_checksum_2: u8,
pub start_angle_sync_q6: u16,
pub cabins: [RplidarResponseCabinNodes;16],
}
pub const RPLIDAR_RESP_MEASUREMENT_EXP_SYNC_1 : u8 = 0xA;
pub const RPLIDAR_RESP_MEASUREMENT_EXP_SYNC_2 : u8 = 0x5;
pub const RPLIDAR_ANS_TYPE_MEASUREMENT_HQ : u8 = 0x83;
#[derive(Debug, Copy, Clone, PartialEq)]
#[repr(packed)]
#[repr(C)]
pub struct RplidarResponseMeasurementNodeHq {
pub angle_z_q14: u16,
pub dist_mm_q2: u32,
pub quality: u8,
pub flag: u8,
}
#[derive(Debug, Copy, Clone, PartialEq)]
#[repr(packed)]
#[repr(C)]
pub struct RplidarResponseHqCapsuledMeasurementNodes {
pub sync_byte: u8,
pub timestamp: u64,
pub nodes: [RplidarResponseMeasurementNodeHq;16],
pub crc32: u32
}
pub const RPLIDAR_RESP_HQ_FLAG_SYNCBIT : u8 = 1;
pub const RPLIDAR_RESP_MEASUREMENT_HQ_SYNC : u8 = 0xA5;
pub const RPLIDAR_ANS_TYPE_MEASUREMENT_CAPSULED_ULTRA : u8 = 0x84;
#[derive(Debug, Copy, Clone, PartialEq)]
#[repr(packed)]
#[repr(C)]
pub struct RplidarResponseUltraCapsuleMeasurementNodes {
pub s_checksum_1: u8,
pub s_checksum_2: u8,
pub start_angle_sync_q6: u16,
pub ultra_cabins: [u32;32],
}
pub const RPLIDAR_ANS_TYPE_GET_LIDAR_CONF : u8 = 0x20;
pub const RPLIDAR_ANS_TYPE_ACC_BOARD_FLAG : u8 = 0xFF;
pub const RPLIDAR_RESP_ACC_BOARD_FLAG_MOTOR_CTRL_SUPPORT_MASK : u32 = (0x1);