91 {
92
95 % 36000;
96 }
98 const RawBlock &raw_block = packet->blocks[block_idx];
99
100 int32_t azimuth_diff_b = 0;
102 if (block_idx < BLOCKS_PER_PACKET - 1) {
105 azimuth_diff_b = azimuth_diff_b < 0 ? azimuth_diff_b + 36000
106 : azimuth_diff_b;
107
108 } else {
111
112 azimuth_diff_b = azimuth_diff_b < 0 ? azimuth_diff_b + 36000
113 : azimuth_diff_b;
114 }
115 } else {
116
117 if (block_idx < BLOCKS_PER_PACKET - 2) {
120 azimuth_diff_b = azimuth_diff_b < 0 ? azimuth_diff_b + 36000
121 : azimuth_diff_b;
122
123 } else {
126
127 azimuth_diff_b = azimuth_diff_b < 0 ? azimuth_diff_b + 36000
128 : azimuth_diff_b;
129 }
130 }
131
132
133 for (size_t scan_fir_idx = 0; scan_fir_idx < SCANS_PER_FIRING_C32;
134 ++scan_fir_idx) {
135 size_t byte_idx = RAW_SCAN_SIZE * scan_fir_idx;
136
137 firings.
azimuth[block_idx * 32 + scan_fir_idx]
139 + scan_fir_idx * azimuth_diff_b / FIRING_TOFFSET_C32;
140 firings.
azimuth[block_idx * 32 + scan_fir_idx]
141 = firings.
azimuth[block_idx * 32 + scan_fir_idx] % 36000;
142
143 TwoBytes raw_distance{};
144 raw_distance.bytes[0] = raw_block.data[byte_idx];
145 raw_distance.bytes[1] = raw_block.data[byte_idx + 1];
146 firings.
distance[block_idx * 32 + scan_fir_idx]
147 = static_cast<double>(raw_distance.distance)
148 * DISTANCE_RESOLUTION * distance_unit_;
149
150
151 firings.
intensity[block_idx * 32 + scan_fir_idx]
152 = static_cast<double>(raw_block.data[byte_idx + 2]);
153 }
154 }
155 return;
156}
optional uint32 return_mode
uint16_t azimuth[SCANS_PER_PACKET]
double intensity[SCANS_PER_PACKET]
uint16_t firing_azimuth[BLOCKS_PER_PACKET]
double distance[SCANS_PER_PACKET]