Skip to content

Commit

Permalink
cleanup
Browse files Browse the repository at this point in the history
Signed-off-by: Andrei Gherghescu <[email protected]>
  • Loading branch information
andrei-ng committed Jan 9, 2025
1 parent 4358bf7 commit 69638a1
Show file tree
Hide file tree
Showing 6 changed files with 159 additions and 239 deletions.
46 changes: 31 additions & 15 deletions examples/tui/src/app.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ use std::vec;
use ublox::{
EsfAlgStatus, EsfSensorFaults, EsfSensorStatusCalibration, EsfSensorStatusTime, EsfSensorType,
EsfStatusFusionMode, EsfStatusImuInit, EsfStatusInsInit, EsfStatusMountAngle,
EsfStatusWheelTickInit,
EsfStatusWheelTickInit, GpsFix, NavPvtFlags, NavPvtFlags2,
};

pub struct TabsState<'a> {
Expand Down Expand Up @@ -38,7 +38,7 @@ pub struct Server<'a> {

pub enum UbxStatus {
Pvt(Box<NavPvtWidgetState>),
MonVer(Box<MonVersionState>),
MonVer(Box<MonVersionWidgetState>),
EsfAlgImu(EsfAlgImuAlignmentWidgetState),
EsfAlgSensors(EsfSensorsWidgetState),
EsfAlgStatus(EsfAlgStatusWidgetState),
Expand All @@ -48,7 +48,15 @@ pub enum UbxStatus {
#[allow(dead_code)]
pub struct NavPvtWidgetState {
pub time_tag: f64,
pub utc_date_time: String,
pub year: u16,
pub month: u8,
pub day: u8,
pub hour: u8,
pub min: u8,
pub sec: u8,
pub valid: u8,
pub time_accuracy: u32,
pub nanosecond: i32,
pub utc_time_accuracy: u32,
pub lat: f64,
pub lon: f64,
Expand All @@ -63,20 +71,29 @@ pub struct NavPvtWidgetState {
pub pdop: f64,
pub satellites_used: u8,

pub position_fix_type: String,
pub fix_flags: String,
pub time_date_confirmation: String,
pub position_fix_type: GpsFix,
pub fix_flags: NavPvtFlags,
pub invalid_llh: bool,
pub position_accuracy: (f64, f64),
pub velocity_accuracy: f64,
pub heading_accuracy: f64,
pub magnetic_declination_accuracy: f64,
pub flags2: NavPvtFlags2,
}

impl Default for NavPvtWidgetState {
fn default() -> Self {
Self {
time_tag: f64::NAN,
year: 0,
month: 0,
day: 0,
hour: 0,
min: 0,
sec: 0,
valid: 0,
time_accuracy: 0,
nanosecond: 0,
lat: f64::NAN,
lon: f64::NAN,
height: f64::NAN,
Expand All @@ -94,10 +111,9 @@ impl Default for NavPvtWidgetState {
velocity_accuracy: f64::NAN,
heading_accuracy: f64::NAN,
magnetic_declination_accuracy: f64::NAN,
position_fix_type: "No Fix".to_string(),
fix_flags: "???".to_string(),
utc_date_time: "N/A".to_string(),
time_date_confirmation: "Date: ?, Time: ?".to_string(),
position_fix_type: GpsFix::NoFix,
fix_flags: NavPvtFlags::empty(),
flags2: NavPvtFlags2::empty(),
}
}
}
Expand Down Expand Up @@ -175,16 +191,16 @@ impl Default for EsfAlgImuAlignmentWidgetState {
}

#[derive(Debug, Default)]
pub struct MonVersionState {
pub software_version: String,
pub hardware_version: String,
pub struct MonVersionWidgetState {
pub software_version: [u8; 30],
pub hardware_version: [u8; 10],
pub extensions: String,
}

pub struct App<'a> {
pub title: &'a str,
pub pvt_state: NavPvtWidgetState,
pub mon_ver_state: MonVersionState,
pub mon_ver_state: MonVersionWidgetState,
pub esf_sensors_state: EsfSensorsWidgetState,
pub esf_alg_state: EsfAlgStatusWidgetState,
pub esf_alg_imu_alignment_state: EsfAlgImuAlignmentWidgetState,
Expand All @@ -198,7 +214,7 @@ impl<'a> App<'a> {
App {
title,
pvt_state: NavPvtWidgetState::default(),
mon_ver_state: MonVersionState::default(),
mon_ver_state: MonVersionWidgetState::default(),
esf_sensors_state: EsfSensorsWidgetState::default(),
esf_alg_state: EsfAlgStatusWidgetState::default(),
esf_alg_imu_alignment_state: EsfAlgImuAlignmentWidgetState::default(),
Expand Down
2 changes: 1 addition & 1 deletion examples/tui/src/cli.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ pub fn parse_args() -> clap::ArgMatches {
.value_name("tui-rate")
.long("tui-rate")
.required(false)
.default_value("250")
.default_value("100")
.value_parser(value_parser!(u64))
.help("TUI refresh rate in milliseconds"),
)
Expand Down
74 changes: 27 additions & 47 deletions examples/tui/src/device.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ use ublox::*;

use crate::app::{
EsfAlgImuAlignmentWidgetState, EsfAlgStatusWidgetState, EsfSensorWidget, EsfSensorsWidgetState,
MonVersionState, NavPvtWidgetState, UbxStatus,
MonVersionWidgetState, NavPvtWidgetState, UbxStatus,
};

pub struct Device {
Expand Down Expand Up @@ -225,20 +225,27 @@ impl Device {
info!("Opened uBlox device, waiting for messages...");
thread::spawn(move || loop {
let res = self.update(|packet| match packet {
PacketRef::MonVer(packet) => {
trace!("{:?}", packet);
PacketRef::MonVer(pkg) => {
trace!("{:?}", pkg);
info!(
"SW version: {} HW version: {}; Extensions: {:?}",
packet.software_version(),
packet.hardware_version(),
packet.extension().collect::<Vec<&str>>()
pkg.software_version(),
pkg.hardware_version(),
pkg.extension().collect::<Vec<&str>>()
);
let mut state = MonVersionState::default();
state.software_version = packet.software_version().to_string();
state.hardware_version = packet.hardware_version().to_string();
for s in packet.extension() {
let mut state = MonVersionWidgetState::default();

state
.software_version
.copy_from_slice(pkg.software_version_raw());
state
.hardware_version
.copy_from_slice(pkg.hardware_version_raw());

for s in pkg.extension() {
state.extensions.push_str(s);
}

sender.send(UbxStatus::MonVer(Box::new(state))).unwrap();
},
PacketRef::NavPvt(pkg) => {
Expand All @@ -247,49 +254,22 @@ impl Device {
..Default::default()
};

if pkg.flags2().contains(NavPvtFlags2::CONFIRMED_DATE) {
state.time_date_confirmation = "Date: CONFIRMED".to_string();
} else {
state.time_date_confirmation = "Date: ?".to_string();
}

if pkg.flags2().contains(NavPvtFlags2::CONFIRMED_TIME) {
state.time_date_confirmation.push_str(",Time: CONFIRMED");
} else {
state.time_date_confirmation.push_str(",Time: ?");
}
state.flags2 = pkg.flags2();

if pkg.flags2().contains(NavPvtFlags2::CONFIRMED_AVAI) {
state.utc_date_time = format!(
"{:02}-{:02}-{} {:02}:{:02}:{:02} {:09}",
pkg.day(),
pkg.month(),
pkg.year(),
pkg.hour(),
pkg.min(),
pkg.sec(),
pkg.nanosecond(),
);
state.day = pkg.day();
state.month = pkg.month();
state.year = pkg.year();
state.hour = pkg.hour();
state.min = pkg.min();
state.sec = pkg.sec();
state.nanosecond = pkg.nanosecond();

state.utc_time_accuracy = pkg.time_accuracy();
}

state.position_fix_type = match pkg.fix_type() {
GpsFix::DeadReckoningOnly => "DR",
GpsFix::Fix2D => "2D Fix",
GpsFix::Fix3D => "3D Fix",
GpsFix::GPSPlusDeadReckoning => "3D + DR",
GpsFix::TimeOnlyFix => "Time Only",
_ => "No Fix",
}
.to_string();

if pkg.flags().contains(NavPvtFlags::GPS_FIX_OK) {
state.fix_flags = "FixOK".to_string();
}
if pkg.flags().contains(NavPvtFlags::DIFF_SOLN) {
state.fix_flags.push_str(" + DGNSS");
}
state.position_fix_type = pkg.fix_type();
state.fix_flags = pkg.flags();

state.lat = pkg.lat_degrees();
state.lon = pkg.lon_degrees();
Expand Down
Loading

0 comments on commit 69638a1

Please sign in to comment.