Skip to content

Commit 0176621

Browse files
committed
also add bus load and circle time for windows
1 parent c1731d4 commit 0176621

File tree

1 file changed

+16
-7
lines changed

1 file changed

+16
-7
lines changed

src/event_handler/can_handler.rs

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,8 @@ use chrono::Utc;
44
use pcan_basic::socket::usb::UsbCanSocket;
55
use slint::{Model, VecModel, Weak};
66
use slint::{ModelRc, SharedString};
7-
use socketcan::CanInterface;
87
#[cfg(target_os = "linux")]
9-
use socketcan::{CanSocket, EmbeddedFrame, Frame, Socket};
8+
use socketcan::{CanInterface, CanSocket, EmbeddedFrame, Frame, Socket};
109
use std::collections::HashMap;
1110
use std::fmt::Write;
1211
use std::rc::Rc;
@@ -136,8 +135,17 @@ impl<'a> CanHandler<'a> {
136135
#[cfg(target_os = "windows")]
137136
fn process_ui_events(&mut self, dbc: DBC) {
138137
use pcan_basic::socket::RecvCan;
139-
138+
let mut start_bus_load = Instant::now();
139+
let mut total_bits = 0;
140140
loop {
141+
let busload = if start_bus_load.elapsed() >= Duration::from_millis(1000) {
142+
start_bus_load = Instant::now();
143+
let bus_load = (total_bits as f64 / 250000_f64) * 100.0;
144+
total_bits = 0;
145+
bus_load
146+
} else {
147+
0.0
148+
};
141149
let _ = self.ui_handle.upgrade_in_event_loop(move |ui| unsafe {
142150
if ui.get_is_new_dbc() {
143151
if ui.get_is_first_open() {
@@ -147,6 +155,9 @@ impl<'a> CanHandler<'a> {
147155
}
148156
ui.set_is_new_dbc(false);
149157
}
158+
if busload > 0.0 {
159+
ui.set_bus_load(busload as i32);
160+
}
150161
});
151162
unsafe {
152163
if NEW_DBC_CHECK {
@@ -155,6 +166,7 @@ impl<'a> CanHandler<'a> {
155166
}
156167
}
157168
if let Ok(frame) = self.iface.recv_frame() {
169+
total_bits += (frame.dlc() as u32 + 6) * 8; // Data length + overhead (approximation)
158170
let id = frame.can_id();
159171
let frame_id = id & !0x80000000;
160172
for message in dbc.messages() {
@@ -178,8 +190,6 @@ impl<'a> CanHandler<'a> {
178190
});
179191
}
180192
}
181-
} else {
182-
sleep(Duration::from_millis(50));
183193
}
184194
}
185195
}
@@ -193,10 +203,9 @@ impl<'a> CanHandler<'a> {
193203
for (message_count, message) in messages.iter().enumerate() {
194204
if message.can_id == format!("{:08X}", frame_id) {
195205
let now = Utc::now().timestamp_micros();
196-
let can_data = messages.row_data(message_count).unwrap();
197206
let can_signals = Self::create_can_signals(&message, &signal_data);
198207
let circle_time =
199-
(now - (can_data.time_stamp).parse::<i64>().unwrap()) as f32 / 1000.0;
208+
(now - (message.time_stamp).parse::<i64>().unwrap()) as f32 / 1000.0;
200209
messages.set_row_data(
201210
message_count,
202211
CanData {

0 commit comments

Comments
 (0)