236 {
237 int sub_index = 3;
238 uint8_t check_sum = 0;
240
241 for (int i = 0; i < dataLength - 1; ++i) {
242 check_sum ^= data[i];
243 }
244
245 if (check_sum == data[dataLength - 1]) {
246 double m_gnssMsg_longitude =
247 (toValue<int32_t>(data, sub_index)) * 0.0000001;
248 double m_gnssMsg_lon_sigma = (toValue<int16_t>(data, sub_index)) * 0.001;
249 double m_gnssMsg_latitude = (toValue<int32_t>(data, sub_index)) * 0.0000001;
250 double m_gnssMsg_lat_sigma = (toValue<int16_t>(data, sub_index)) * 0.001;
251 double m_gnssMsg_altitude = (toValue<int32_t>(data, sub_index)) * 0.001;
252 double m_gnssMsg_alt_sigma = (toValue<int16_t>(data, sub_index)) * 0.001;
253
254 double m_gnssMsg_gps_fix = toValue<uint16_t>(data, sub_index);
255 float m_gnssMsg_rtk_age = toValue<uint16_t>(data, sub_index);
256 uint8_t m_gnssMsg_flags_pos = data[sub_index++];
257 uint8_t m_gnssMsg_flags_vel = data[sub_index++];
258 uint8_t m_gnssMsg_flags_attitude = data[sub_index++];
259 uint8_t m_gnssMsg_flags_time = data[sub_index++];
260
261 double m_gnssMsg_hor_vel = (toValue<int16_t>(data, sub_index)) * 0.01;
262 double m_gnssMsg_track_angle = (toValue<int16_t>(data, sub_index)) * 0.01;
263 double m_gnssMsg_ver_vel = (toValue<int16_t>(data, sub_index)) * 0.01;
264 double m_gnssMsg_latency_vel = (toValue<int16_t>(data, sub_index)) * 0.001;
265 double m_gnssMsg_base_length = (toValue<int16_t>(data, sub_index)) * 0.001;
266
267 double m_gnssMsg_yaw = (toValue<int16_t>(data, sub_index)) * 0.01;
268 double m_gnssMsg_yaw_sigma = (toValue<int16_t>(data, sub_index)) * 0.001;
269 double m_gnssMsg_pitch = (toValue<int16_t>(data, sub_index)) * 0.001;
270 double m_gnssMsg_pitch_sigma = (toValue<int16_t>(data, sub_index)) * 0.001;
271
272 uint16_t utc_year_m = toValue<uint16_t>(data, sub_index);
273 uint16_t utc_year = (utc_year_m & 0x3f) + 2000;
274
275 uint8_t utc_mon = data[sub_index++];
276 uint8_t utc_day = data[sub_index++];
277 uint8_t utc_hour = data[sub_index++];
278 uint8_t utc_min = data[sub_index++];
279 float utc_sec = toValue<uint16_t>(data, sub_index) * 0.001;
280
281 double m_gnssMsg_ts_pos = toValue<uint32_t>(data, sub_index);
282 double m_gnssMsg_ts_vel = toValue<uint32_t>(data, sub_index);
283 double m_gnssMsg_ts_heading = toValue<uint32_t>(data, sub_index);
284 double m_gnssMsg_state = data[sub_index++];
285 double m_gnssMsg_num_master = data[sub_index++];
286 sub_index++;
287
288 double m_gnssMsg_gdop = (toValue<int16_t>(data, sub_index)) * 0.01;
289 double m_gnssMsg_pdop = (toValue<int16_t>(data, sub_index)) * 0.01;
290 double m_gnssMsg_hdop = (toValue<int16_t>(data, sub_index)) * 0.01;
291 double m_gnssMsg_htdop = (toValue<int16_t>(data, sub_index)) * 0.01;
292 double m_gnssMsg_tdop = (toValue<int16_t>(data, sub_index)) * 0.01;
293 double m_gnssMsg_num_reserve = data[sub_index++];
294
296
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351 } else {
352 pos += 3;
353 }
354}