232 {
233 int sub_index = 3;
234 uint8_t check_sum = 0;
236
237 for (int i = 0; i < dataLength - 1; ++i) {
238 check_sum ^= data[i];
239 }
240
241 if (check_sum == data[dataLength - 1]) {
242 double m_gnssMsg_longitude =
243 (toValue<int32_t>(data, sub_index)) * 0.0000001;
244 double m_gnssMsg_lon_sigma = (toValue<int16_t>(data, sub_index)) * 0.001;
245 double m_gnssMsg_latitude = (toValue<int32_t>(data, sub_index)) * 0.0000001;
246 double m_gnssMsg_lat_sigma = (toValue<int16_t>(data, sub_index)) * 0.001;
247 double m_gnssMsg_altitude = (toValue<int32_t>(data, sub_index)) * 0.001;
248 double m_gnssMsg_alt_sigma = (toValue<int16_t>(data, sub_index)) * 0.001;
249
250 double m_gnssMsg_gps_fix = toValue<uint16_t>(data, sub_index);
251 float m_gnssMsg_rtk_age = toValue<uint16_t>(data, sub_index);
252 uint8_t m_gnssMsg_flags_pos = data[sub_index++];
253 uint8_t m_gnssMsg_flags_vel = data[sub_index++];
254 uint8_t m_gnssMsg_flags_attitude = data[sub_index++];
255 uint8_t m_gnssMsg_flags_time = data[sub_index++];
256
257 double m_gnssMsg_hor_vel = (toValue<int16_t>(data, sub_index)) * 0.01;
258 double m_gnssMsg_track_angle = (toValue<int16_t>(data, sub_index)) * 0.01;
259 double m_gnssMsg_ver_vel = (toValue<int16_t>(data, sub_index)) * 0.01;
260 double m_gnssMsg_latency_vel = (toValue<int16_t>(data, sub_index)) * 0.001;
261 double m_gnssMsg_base_length = (toValue<int16_t>(data, sub_index)) * 0.001;
262
263 double m_gnssMsg_yaw = (toValue<int16_t>(data, sub_index)) * 0.01;
264 double m_gnssMsg_yaw_sigma = (toValue<int16_t>(data, sub_index)) * 0.001;
265 double m_gnssMsg_pitch = (toValue<int16_t>(data, sub_index)) * 0.001;
266 double m_gnssMsg_pitch_sigma = (toValue<int16_t>(data, sub_index)) * 0.001;
267
268 uint16_t utc_year_m = toValue<uint16_t>(data, sub_index);
269 uint16_t utc_year = (utc_year_m & 0x3f) + 2000;
270
271 uint8_t utc_mon = data[sub_index++];
272 uint8_t utc_day = data[sub_index++];
273 uint8_t utc_hour = data[sub_index++];
274 uint8_t utc_min = data[sub_index++];
275 float utc_sec = toValue<uint16_t>(data, sub_index) * 0.001;
276
277 double m_gnssMsg_ts_pos = toValue<uint32_t>(data, sub_index);
278 double m_gnssMsg_ts_vel = toValue<uint32_t>(data, sub_index);
279 double m_gnssMsg_ts_heading = toValue<uint32_t>(data, sub_index);
280 double m_gnssMsg_state = data[sub_index++];
281 double m_gnssMsg_num_master = data[sub_index++];
282 sub_index++;
283
284 double m_gnssMsg_gdop = (toValue<int16_t>(data, sub_index)) * 0.01;
285 double m_gnssMsg_pdop = (toValue<int16_t>(data, sub_index)) * 0.01;
286 double m_gnssMsg_hdop = (toValue<int16_t>(data, sub_index)) * 0.01;
287 double m_gnssMsg_htdop = (toValue<int16_t>(data, sub_index)) * 0.01;
288 double m_gnssMsg_tdop = (toValue<int16_t>(data, sub_index)) * 0.01;
289 double m_gnssMsg_num_reserve = data[sub_index++];
290
292
294
299
300
301
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 } else {
349 pos += 3;
350 }
351}