Mercurial > ublox > ublox8
changeset 95:2a518c6d77c6
dump-pvt: dump UBX-NAV-PVT messages
Signed-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
author | Josef 'Jeff' Sipek <jeffpc@josefsipek.net> |
---|---|
date | Thu, 07 Sep 2023 20:07:59 -0400 |
parents | 7e07763a98a7 |
children | a79efd17d4d6 |
files | CMakeLists.txt dump-pvt dump-pvt.c |
diffstat | 3 files changed, 136 insertions(+), 101 deletions(-) [+] |
line wrap: on
line diff
--- a/CMakeLists.txt Tue Feb 23 07:56:26 2021 -0500 +++ b/CMakeLists.txt Thu Sep 07 20:07:59 2023 -0400 @@ -1,5 +1,5 @@ # -# Copyright (c) 2019-2021 Josef 'Jeff' Sipek <jeffpc@josefsipek.net> +# Copyright (c) 2019-2021,2023 Josef 'Jeff' Sipek <jeffpc@josefsipek.net> # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -90,6 +90,15 @@ ublox8 ) +add_executable(dump-pvt + dump-common.c + dump-pvt.c +) + +target_link_libraries(dump-pvt + ublox8 +) + add_executable(dump-uniqid dump-common.c dump-uniqid.c
--- a/dump-pvt Tue Feb 23 07:56:26 2021 -0500 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,100 +0,0 @@ - - /* FIXME: for now, we just print it - to demonstrate correctness */ - if ((hdr.class == UBX_CLASS_NAV) && (hdr.id == 0x07)) { - /* UBX-NAV-PVT */ - struct ubx_nav_pvt msg; - char fix_type[16]; - - memcpy(&msg, raw, hdr.len); - - msg.itow = le32_to_cpu(msg.itow); - msg.year = le16_to_cpu(msg.year); - msg.time_acc = le32_to_cpu(msg.time_acc); - msg.nsec = le32_to_cpu(msg.nsec); - msg.lon = le32_to_cpu(msg.lon); - msg.lat = le32_to_cpu(msg.lat); - msg.height_ell = le32_to_cpu(msg.height_ell); - msg.height_msl = le32_to_cpu(msg.height_msl); - msg.horiz_acc = le32_to_cpu(msg.horiz_acc); - msg.vert_acc = le32_to_cpu(msg.vert_acc); - msg.vel_n = le32_to_cpu(msg.vel_n); - msg.vel_e = le32_to_cpu(msg.vel_e); - msg.vel_d = le32_to_cpu(msg.vel_d); - msg.gspeed = le32_to_cpu(msg.gspeed); - msg.motion_heading = le32_to_cpu(msg.motion_heading); - msg.speed_acc = le32_to_cpu(msg.speed_acc); - msg.head_acc = le32_to_cpu(msg.head_acc); - msg.pdop = le16_to_cpu(msg.pdop); - msg.vehicle_heading = le32_to_cpu(msg.vehicle_heading); - msg.mag_dec = le16_to_cpu(msg.mag_dec); - msg.mag_dec_acc = le16_to_cpu(msg.mag_dec_acc); - - switch (msg.fix_type) { - case 0: - strcpy(fix_type, "no"); - break; - case 1: - strcpy(fix_type, "dead-reckoning"); - break; - case 2: - strcpy(fix_type, "2D"); - break; - case 3: - strcpy(fix_type, "3D"); - break; - case 4: - strcpy(fix_type, "GNSS + dead-reckoning"); - break; - case 5: - strcpy(fix_type, "time-only"); - break; - default: - snprintf(fix_type, sizeof(fix_type), "<%u>", - msg.fix_type); - break; - } - - fprintf(stderr, "UBX-NAV-PVT @ %u " - "valid d%s t%s fr%s m%s f%s vh%s , " - "%04u-%02u-%02u %02u:%02u:%02u +- %uns , " - "%s fix diff-corr %sapplied , " - "UTC validity %savailable d%s t%s , " - "%u SVs , " - "lat %.7f lon %.7f alt %.3f MSL %.3f ellipsoid , " - "acc horiz %u vert %u , " - "NED vel %d %d %d gspeed %d acc %u , " - "head motion %.5f vehicle %.5f acc %.5f , " - "mag dec %.2f acc %.2f , " - "PDOP %.2f\n", - msg.itow, - (msg.valid & 0x01) ? "Y" : "N", - (msg.valid & 0x02) ? "Y" : "N", - (msg.valid & 0x04) ? "Y" : "N", - (msg.valid & 0x08) ? "Y" : "N", - (msg.flags & 0x01) ? "Y" : "N", - (msg.flags & 0x20) ? "Y" : "N", - msg.year, msg.month, msg.day, - msg.hour, msg.min, msg.sec, - msg.time_acc, - fix_type, - (msg.flags & 0x02) ? "" : "not-", - (msg.flags2 & 0x20) ? "" : "not-", - (msg.flags2 & 0x40) ? "Y" : "N", - (msg.flags2 & 0x80) ? "Y" : "N", - msg.num_sv, - ((int32_t) msg.lat) * 1e-7, - ((int32_t) msg.lon) * 1e-7, - ((int32_t) msg.height_msl) / 1000., - ((int32_t) msg.height_ell) / 1000., - msg.horiz_acc, msg.vert_acc, - msg.vel_n, msg.vel_e, msg.vel_d, msg.gspeed, - msg.speed_acc, - ((int32_t) msg.motion_heading) * 1e-5, - ((int32_t) msg.vehicle_heading) * 1e-5, - ((int32_t) msg.head_acc) * 1e-5, - ((int32_t) msg.mag_dec) / 100., - msg.mag_dec_acc / 100., - msg.pdop * 0.01); - - } -
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dump-pvt.c Thu Sep 07 20:07:59 2023 -0400 @@ -0,0 +1,126 @@ +/* + * Copyright (c) 2019-2020,2023 Josef 'Jeff' Sipek <jeffpc@josefsipek.net> + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#include "dump-common.h" + +void process_ubx_message(const struct ubx_header *header, + const uint8_t *raw, size_t len, + enum ubx_msg_id msgid, + uint64_t tick) +{ + struct ubx_nav_pvt msg; + char fix_type[32]; + + if (msgid != UBX_NAV_PVT) + return; + + memcpy(&msg, raw, len); + + msg.itow = le32_to_cpu(msg.itow); + msg.year = le16_to_cpu(msg.year); + msg.time_acc = le32_to_cpu(msg.time_acc); + msg.nsec = le32_to_cpu(msg.nsec); + msg.lon = le32_to_cpu(msg.lon); + msg.lat = le32_to_cpu(msg.lat); + msg.height_ell = le32_to_cpu(msg.height_ell); + msg.height_msl = le32_to_cpu(msg.height_msl); + msg.horiz_acc = le32_to_cpu(msg.horiz_acc); + msg.vert_acc = le32_to_cpu(msg.vert_acc); + msg.vel_n = le32_to_cpu(msg.vel_n); + msg.vel_e = le32_to_cpu(msg.vel_e); + msg.vel_d = le32_to_cpu(msg.vel_d); + msg.gspeed = le32_to_cpu(msg.gspeed); + msg.motion_heading = le32_to_cpu(msg.motion_heading); + msg.speed_acc = le32_to_cpu(msg.speed_acc); + msg.head_acc = le32_to_cpu(msg.head_acc); + msg.pdop = le16_to_cpu(msg.pdop); + msg.vehicle_heading = le32_to_cpu(msg.vehicle_heading); + msg.mag_dec = le16_to_cpu(msg.mag_dec); + msg.mag_dec_acc = le16_to_cpu(msg.mag_dec_acc); + + switch (msg.fix_type) { + case 0: + strcpy(fix_type, "no"); + break; + case 1: + strcpy(fix_type, "dead-reckoning"); + break; + case 2: + strcpy(fix_type, "2D"); + break; + case 3: + strcpy(fix_type, "3D"); + break; + case 4: + strcpy(fix_type, "GNSS + dead-reckoning"); + break; + case 5: + strcpy(fix_type, "time-only"); + break; + default: + snprintf(fix_type, sizeof(fix_type), "<%u>", + msg.fix_type); + break; + } + + fprintf(stderr, "UBX-NAV-PVT @ %u " + "valid d%s t%s fr%s m%s f%s vh%s , " + "%04u-%02u-%02u %02u:%02u:%02u +- %uns , " + "%s fix diff-corr %sapplied , " + "UTC validity %savailable d%s t%s , " + "%u SVs , " + "lat %.7f lon %.7f alt %.3f MSL %.3f ellipsoid , " + "acc horiz %u vert %u , " + "NED vel %d %d %d gspeed %d acc %u , " + "head motion %.5f vehicle %.5f acc %.5f , " + "mag dec %.2f acc %.2f , " + "PDOP %.2f\n", + msg.itow, + (msg.valid & 0x01) ? "Y" : "N", + (msg.valid & 0x02) ? "Y" : "N", + (msg.valid & 0x04) ? "Y" : "N", + (msg.valid & 0x08) ? "Y" : "N", + (msg.flags & 0x01) ? "Y" : "N", + (msg.flags & 0x20) ? "Y" : "N", + msg.year, msg.month, msg.day, + msg.hour, msg.min, msg.sec, + msg.time_acc, + fix_type, + (msg.flags & 0x02) ? "" : "not-", + (msg.flags2 & 0x20) ? "" : "not-", + (msg.flags2 & 0x40) ? "Y" : "N", + (msg.flags2 & 0x80) ? "Y" : "N", + msg.num_sv, + ((int32_t) msg.lat) * 1e-7, + ((int32_t) msg.lon) * 1e-7, + ((int32_t) msg.height_msl) / 1000., + ((int32_t) msg.height_ell) / 1000., + msg.horiz_acc, msg.vert_acc, + msg.vel_n, msg.vel_e, msg.vel_d, msg.gspeed, + msg.speed_acc, + ((int32_t) msg.motion_heading) * 1e-5, + ((int32_t) msg.vehicle_heading) * 1e-5, + ((int32_t) msg.head_acc) * 1e-5, + ((int32_t) msg.mag_dec) / 100., + msg.mag_dec_acc / 100., + msg.pdop * 0.01); +}