view dump-pvt @ 64:8e85919405df

gnss-galileo: add a valid bit to each ephemeris This is easier than trying to guess whether the ephemeris contains any meaningful values. Signed-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
author Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
date Wed, 22 Jan 2020 10:10:26 -0500
parents abe411fe4cf3
children
line wrap: on
line source


	/* 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);

	}