Skip to content

Commit 50ff730

Browse files
[CPP-41]Refactor velocity subtab with new paradigm fix bug in deque. (#27)
* Adding some tracking tab unittests. * [CPP-41]Refactor velocity subtab with new paradigm fix bug in deque. * Switch ProtoMsgSender -> MessageSender * Create type for arc mutex. * Respond to review requests.
1 parent 4db5fed commit 50ff730

File tree

18 files changed

+1318
-442
lines changed

18 files changed

+1318
-442
lines changed

console_backend/benches/cpu_benches.rs

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,10 @@ use std::{
99
};
1010

1111
extern crate console_backend;
12-
use console_backend::{process_messages, types::SharedState};
12+
use console_backend::{
13+
process_messages,
14+
types::{ClientSender, SharedState},
15+
};
1316

1417
const BENCH_FILEPATH: &str = "./tests/data/piksi-relay.sbp";
1518
const BENCHMARK_TIME_LIMIT: u64 = 10000;
@@ -45,7 +48,7 @@ fn run_process_messages(file_in_name: &str, failure: bool) {
4548
assert!(iter_count > 0);
4649
});
4750
{
48-
let (client_send, client_recv) = mpsc::channel::<Vec<u8>>();
51+
let (client_send_, client_recv) = mpsc::channel::<Vec<u8>>();
4952
client_recv_tx
5053
.send(client_recv)
5154
.expect("sending client recv handle should succeed");
@@ -54,8 +57,10 @@ fn run_process_messages(file_in_name: &str, failure: bool) {
5457
}
5558
let messages = sbp::iter_messages(Box::new(fs::File::open(file_in_name).unwrap()));
5659
let shared_state = SharedState::new();
57-
let shared_state = Arc::new(Mutex::new(shared_state));
58-
process_messages::process_messages(messages, &shared_state, client_send);
60+
let client_send = ClientSender {
61+
inner: client_send_,
62+
};
63+
process_messages::process_messages(messages, shared_state, client_send);
5964
}
6065
recv_thread.join().expect("join should succeed");
6166
}

console_backend/src/constants.rs

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,10 @@ use std::{
66

77
use crate::types::Error;
88

9-
// Tracking Tab constants.
9+
// Common constants.
1010
pub const NUM_POINTS: usize = 200;
11+
12+
// Tracking Signals Tab constants.
1113
pub const NUM_SATELLITES: usize = 60;
1214
pub const TRK_RATE: f64 = 2.0;
1315
pub const GLO_SLOT_SAT_MAX: u8 = 90;
@@ -30,6 +32,15 @@ pub const QZS_L2C_M: &str = "QZS L2C M";
3032
pub const SBAS_L1: &str = "SBAS L1";
3133
pub const SHOW_LEGEND: &str = "Show Legend";
3234

35+
// Solution Velocity Tab constants.
36+
pub const HORIZONTAL_COLOR: &str = "#E41A1C";
37+
pub const VERTICAL_COLOR: &str = "#377EB8";
38+
pub const MPS: &str = "m/s";
39+
pub const MPH: &str = "mph";
40+
pub const KPH: &str = "kph";
41+
pub const MPS2MPH: f64 = 2.236934;
42+
pub const MPS2KPH: f64 = 3.600000;
43+
3344
#[repr(u8)]
3445
#[derive(Debug, Clone, Copy, Eq, Hash, PartialEq)]
3546
pub enum SignalCodes {

console_backend/src/lib.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@ pub mod console_backend_capnp {
22
include!(concat!(env!("OUT_DIR"), "/console_backend_capnp.rs"));
33
}
44
pub mod constants;
5+
pub mod main_tab;
56
pub mod process_messages;
67
pub mod server;
7-
pub mod tracking_tab;
8+
pub mod solution_velocity_tab;
9+
pub mod tracking_signals_tab;
810
pub mod types;

console_backend/src/main_tab.rs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
// use std::sync::{Arc, Mutex};
2+
3+
use crate::solution_velocity_tab::SolutionVelocityTab;
4+
use crate::tracking_signals_tab::TrackingSignalsTab;
5+
use crate::types::*;
6+
7+
pub struct MainTab<'a> {
8+
pub tracking_signals_tab: TrackingSignalsTab,
9+
pub solution_velocity_tab: SolutionVelocityTab<'a>,
10+
}
11+
12+
impl<'a> MainTab<'a> {
13+
pub fn new(shared_state: SharedState) -> MainTab<'a> {
14+
MainTab {
15+
tracking_signals_tab: TrackingSignalsTab::new(shared_state.clone()),
16+
solution_velocity_tab: SolutionVelocityTab::new(shared_state),
17+
}
18+
}
19+
}

console_backend/src/process_messages.rs

Lines changed: 21 additions & 111 deletions
Original file line numberDiff line numberDiff line change
@@ -1,143 +1,53 @@
1-
use capnp::message::Builder;
2-
use capnp::serialize;
3-
use ordered_float::OrderedFloat;
41
use sbp::messages::SBP;
5-
use std::sync::{mpsc, Arc, Mutex};
62

7-
use crate::console_backend_capnp as m;
8-
9-
use crate::tracking_tab::*;
10-
use crate::types::SharedState;
3+
use crate::main_tab::*;
4+
use crate::types::*;
115

126
pub fn process_messages(
137
messages: impl Iterator<Item = sbp::Result<SBP>>,
14-
shared_state: &Arc<Mutex<SharedState>>,
15-
client_send_clone: mpsc::Sender<Vec<u8>>,
8+
shared_state: SharedState,
9+
client_send_clone: ClientSender,
1610
) {
17-
let mut hpoints: Vec<(f64, OrderedFloat<f64>)> = vec![];
18-
let mut vpoints: Vec<(f64, OrderedFloat<f64>)> = vec![];
19-
let mut tow: f64;
20-
let shared_state_clone = Arc::clone(&shared_state);
21-
let mut tracking_signals = TrackingSignalsTab::new(&shared_state_clone);
22-
11+
let mut main = MainTab::new(shared_state);
2312
for message in messages {
2413
match message {
2514
Ok(SBP::MsgTrackingState(msg)) => {
26-
tracking_signals
27-
.handle_msg_tracking_state(msg.states.clone(), client_send_clone.clone());
15+
main.tracking_signals_tab
16+
.handle_msg_tracking_state(msg.states.clone(), &mut client_send_clone.clone());
2817
}
2918
Ok(SBP::MsgObs(msg)) => {
30-
tracking_signals.handle_obs(
19+
main.tracking_signals_tab.handle_obs(
3120
ObservationMsg::MsgObs(msg.clone()),
32-
client_send_clone.clone(),
21+
&mut client_send_clone.clone(),
3322
);
3423
}
3524
Ok(SBP::MsgMeasurementState(msg)) => {
36-
tracking_signals
37-
.handle_msg_measurement_state(msg.states.clone(), client_send_clone.clone());
25+
main.tracking_signals_tab.handle_msg_measurement_state(
26+
msg.states.clone(),
27+
&mut client_send_clone.clone(),
28+
);
3829
}
3930
Ok(SBP::MsgObsDepA(_msg)) => {
4031
//CPP-85 Unhandled for tracking signals plot tab.
4132
println!("The message type, MsgObsDepA, is not handled in the Tracking->SignalsPlot tab.");
4233
}
4334
Ok(SBP::MsgObsDepB(msg)) => {
44-
tracking_signals.handle_obs(
35+
main.tracking_signals_tab.handle_obs(
4536
ObservationMsg::MsgObsDepB(msg.clone()),
46-
client_send_clone.clone(),
37+
&mut client_send_clone.clone(),
4738
);
4839
}
4940
Ok(SBP::MsgObsDepC(msg)) => {
50-
tracking_signals.handle_obs(
41+
main.tracking_signals_tab.handle_obs(
5142
ObservationMsg::MsgObsDepC(msg.clone()),
52-
client_send_clone.clone(),
43+
&mut client_send_clone.clone(),
5344
);
5445
}
55-
56-
Ok(SBP::MsgVelNED(velocity_ned)) => {
57-
let n = velocity_ned.n as f64;
58-
let e = velocity_ned.e as f64;
59-
let d = velocity_ned.d as f64;
60-
61-
let h_vel = f64::sqrt(f64::powi(n, 2) + f64::powi(e, 2)) / 1000.0;
62-
let v_vel = (-1.0 * d) / 1000.0;
63-
64-
tow = velocity_ned.tow as f64 / 1000.0;
65-
66-
let mut _min = 0.0;
67-
let mut _max = 1.0;
68-
{
69-
let vmin = vpoints
70-
.iter()
71-
.min_by_key(|i| i.1)
72-
.unwrap_or(&(0.0, OrderedFloat(0.0)));
73-
let vmax = vpoints
74-
.iter()
75-
.max_by_key(|i| i.1)
76-
.unwrap_or(&(1.0, OrderedFloat(0.0)));
77-
let hmin = hpoints
78-
.iter()
79-
.min_by_key(|i| i.1)
80-
.unwrap_or(&(0.0, OrderedFloat(0.0)));
81-
let hmax = hpoints
82-
.iter()
83-
.max_by_key(|i| i.1)
84-
.unwrap_or(&(1.0, OrderedFloat(0.0)));
85-
86-
if vmin.1.into_inner() < hmin.1.into_inner() {
87-
_min = vmin.1.into_inner();
88-
} else {
89-
_min = hmin.1.into_inner();
90-
}
91-
if vmax.1.into_inner() > hmax.1.into_inner() {
92-
_max = vmax.1.into_inner();
93-
} else {
94-
_max = hmax.1.into_inner();
95-
}
96-
}
97-
98-
if hpoints.len() >= 200 {
99-
hpoints.remove(0);
100-
}
101-
if vpoints.len() >= 200 {
102-
vpoints.remove(0);
103-
}
104-
hpoints.push((tow, OrderedFloat(h_vel)));
105-
vpoints.push((tow, OrderedFloat(v_vel)));
106-
107-
let mut builder = Builder::new_default();
108-
let msg = builder.init_root::<m::message::Builder>();
109-
110-
let mut velocity_status = msg.init_velocity_status();
111-
112-
velocity_status.set_min(_min);
113-
velocity_status.set_max(_max);
114-
115-
{
116-
let mut hvel_points = velocity_status
117-
.reborrow()
118-
.init_hpoints(hpoints.len() as u32);
119-
for (i, (x, OrderedFloat(y))) in hpoints.iter().enumerate() {
120-
let mut point_val = hvel_points.reborrow().get(i as u32);
121-
point_val.set_x(*x);
122-
point_val.set_y(*y);
123-
}
124-
}
125-
{
126-
let mut vvel_points = velocity_status
127-
.reborrow()
128-
.init_vpoints(vpoints.len() as u32);
129-
for (i, (x, OrderedFloat(y))) in vpoints.iter().enumerate() {
130-
let mut point_val = vvel_points.reborrow().get(i as u32);
131-
point_val.set_x(*x);
132-
point_val.set_y(*y);
133-
}
134-
}
135-
136-
let mut msg_bytes: Vec<u8> = vec![];
137-
serialize::write_message(&mut msg_bytes, &builder).unwrap();
138-
139-
client_send_clone.send(msg_bytes).unwrap();
46+
Ok(SBP::MsgVelNED(msg)) => {
47+
main.solution_velocity_tab
48+
.handle_vel_ned(msg.clone(), &mut client_send_clone.clone());
14049
}
50+
14151
_ => {
14252
// no-op
14353
}

0 commit comments

Comments
 (0)