@@ -2491,6 +2491,70 @@ void SFE_UBLOX_GNSS::processUBXpacket(ubxPacket *msg)
2491
2491
}
2492
2492
}
2493
2493
}
2494
+ else if (msg->id == UBX_NAV_PVAT && msg->len == UBX_NAV_PVAT_LEN)
2495
+ {
2496
+ //Parse various byte fields into storage - but only if we have memory allocated for it
2497
+ if (packetUBXNAVPVAT != NULL)
2498
+ {
2499
+ packetUBXNAVPVAT->data.iTOW = extractLong(msg, 0);
2500
+ packetUBXNAVPVAT->data.version = extractByte(msg, 4);
2501
+ packetUBXNAVPVAT->data.valid.all = extractByte(msg, 5);
2502
+ packetUBXNAVPVAT->data.year = extractInt(msg, 6);
2503
+ packetUBXNAVPVAT->data.month = extractByte(msg, 8);
2504
+ packetUBXNAVPVAT->data.day = extractByte(msg, 9);
2505
+ packetUBXNAVPVAT->data.hour = extractByte(msg, 10);
2506
+ packetUBXNAVPVAT->data.min = extractByte(msg, 11);
2507
+ packetUBXNAVPVAT->data.sec = extractByte(msg, 12);
2508
+ packetUBXNAVPVAT->data.tAcc = extractLong(msg, 16);
2509
+ packetUBXNAVPVAT->data.nano = extractSignedLong(msg, 20); //Includes milliseconds
2510
+ packetUBXNAVPVAT->data.fixType = extractByte(msg, 24);
2511
+ packetUBXNAVPVAT->data.flags.all = extractByte(msg, 25);
2512
+ packetUBXNAVPVAT->data.flags2.all = extractByte(msg, 26);
2513
+ packetUBXNAVPVAT->data.numSV = extractByte(msg, 27);
2514
+ packetUBXNAVPVAT->data.lon = extractSignedLong(msg, 28);
2515
+ packetUBXNAVPVAT->data.lat = extractSignedLong(msg, 32);
2516
+ packetUBXNAVPVAT->data.height = extractSignedLong(msg, 36);
2517
+ packetUBXNAVPVAT->data.hMSL = extractSignedLong(msg, 40);
2518
+ packetUBXNAVPVAT->data.hAcc = extractLong(msg, 44);
2519
+ packetUBXNAVPVAT->data.vAcc = extractLong(msg, 48);
2520
+ packetUBXNAVPVAT->data.velN = extractSignedLong(msg, 52);
2521
+ packetUBXNAVPVAT->data.velE = extractSignedLong(msg, 56);
2522
+ packetUBXNAVPVAT->data.velD = extractSignedLong(msg, 60);
2523
+ packetUBXNAVPVAT->data.gSpeed = extractSignedLong(msg, 64);
2524
+ packetUBXNAVPVAT->data.sAcc = extractLong(msg, 68);
2525
+ packetUBXNAVPVAT->data.vehRoll = extractSignedLong(msg, 72);
2526
+ packetUBXNAVPVAT->data.vehPitch = extractSignedLong(msg, 76);
2527
+ packetUBXNAVPVAT->data.vehHeading = extractSignedLong(msg, 80);
2528
+ packetUBXNAVPVAT->data.motHeading = extractSignedLong(msg, 84);
2529
+ packetUBXNAVPVAT->data.accRoll = extractInt(msg, 88);
2530
+ packetUBXNAVPVAT->data.accPitch = extractInt(msg, 90);
2531
+ packetUBXNAVPVAT->data.accHeading = extractInt(msg, 92);
2532
+ packetUBXNAVPVAT->data.magDec = extractSignedInt(msg, 94);
2533
+ packetUBXNAVPVAT->data.magAcc = extractInt(msg, 96);
2534
+ packetUBXNAVPVAT->data.errEllipseOrient = extractInt(msg, 98);
2535
+ packetUBXNAVPVAT->data.errEllipseMajor = extractLong(msg, 100);
2536
+ packetUBXNAVPVAT->data.errEllipseMinor = extractLong(msg, 104);
2537
+
2538
+
2539
+ //Mark all datums as fresh (not read before)
2540
+ packetUBXNAVPVAT->moduleQueried.moduleQueried1.all = 0xFFFFFFFF;
2541
+ packetUBXNAVPVAT->moduleQueried.moduleQueried2.all = 0xFFFFFFFF;
2542
+
2543
+ //Check if we need to copy the data for the callback
2544
+ if ((packetUBXNAVPVAT->callbackData != NULL) // If RAM has been allocated for the copy of the data
2545
+ && (packetUBXNAVPVAT->automaticFlags.flags.bits.callbackCopyValid == false)) // AND the data is stale
2546
+ {
2547
+ memcpy(&packetUBXNAVPVAT->callbackData->iTOW, &packetUBXNAVPVAT->data.iTOW, sizeof(UBX_NAV_PVAT_data_t));
2548
+ packetUBXNAVPVAT->automaticFlags.flags.bits.callbackCopyValid = true;
2549
+ }
2550
+
2551
+ //Check if we need to copy the data into the file buffer
2552
+ if (packetUBXNAVPVAT->automaticFlags.flags.bits.addToFileBuffer)
2553
+ {
2554
+ storePacket(msg);
2555
+ }
2556
+ }
2557
+ }
2494
2558
else if (msg->id == UBX_NAV_CLOCK && msg->len == UBX_NAV_CLOCK_LEN)
2495
2559
{
2496
2560
//Parse various byte fields into storage - but only if we have memory allocated for it
0 commit comments