Skip to content

Commit

Permalink
Add checking CAN ID and CAN data input of transmission
Browse files Browse the repository at this point in the history
  • Loading branch information
TuEmb committed Sep 20, 2024
1 parent 316902a commit afa9fea
Show file tree
Hide file tree
Showing 5 changed files with 94 additions and 0 deletions.
28 changes: 28 additions & 0 deletions src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,34 @@ async fn main() -> io::Result<()> {
std::process::exit(0);
});

ui.on_can_id_check_string(move |is_extended, can_id| is_valid_can_id(is_extended, &can_id));

ui.on_can_data_check_string(move |can_data| is_valid_can_data(&can_data));

ui.run().unwrap();
Ok(())
}

fn is_valid_can_id(is_extended: bool, can_id: &str) -> bool {
// Try to parse the string as a hex number
match u32::from_str_radix(can_id, 16) {
Ok(id) => {
if is_extended {
id <= 0x1FFFFFFF // Extended CAN ID (29-bit max)
} else {
id <= 0x7FF // Standard CAN ID (11-bit max)
}
}
Err(_) => false, // If parsing fails, it's not a valid hex string
}
}

fn is_valid_can_data(can_data: &str) -> bool {
// CAN data is valid if it's a hex string of even length up to 16 characters (8 bytes)
if can_data.len() % 2 != 0 || can_data.len() > 16 {
return false;
}

// Try to parse the data as hex
can_data.chars().all(|c| c.is_ascii_hexdigit())
}
8 changes: 8 additions & 0 deletions ui/app.slint
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@ export component AppWindow inherits Window {
callback filter_id(CanData, bool);
callback start(string, int, string);
callback can_transmit(bool, string, string);
callback can_id_check_string(bool, string) -> bool;
callback can_data_check_string(string) -> bool;
title: @tr("CAN VIEWER (version 0.2.2)");
icon: @image-url("images/can_viewer_128px.png");
background: #1a1f2b;
Expand Down Expand Up @@ -126,6 +128,12 @@ export component AppWindow inherits Window {
can_transmit(is_extended, can_id, can_data) => {
can_transmit(is_extended, can_id, can_data)
}
can_id_check_string(is_extended, id) => {
can_id_check_string(is_extended, id)
}
can_data_check_string(data) => {
can_data_check_string(data)
}
}
}
}
Expand Down
58 changes: 58 additions & 0 deletions ui/debug_page.slint
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,21 @@ export struct raw_can {
data: string
}

export component VerificationIcon inherits Rectangle {
in property <bool> is_ok: true;
if is_ok:
Image {
source: @image-url("images/green_tick.png");
width: 25px;
height: 25px;
}
if !is_ok:
Image {
source: @image-url("images/red_cross.png");
width: 25px;
height: 25px;
}
}

export component StartPauseButton inherits Rectangle {
callback clicked();
Expand Down Expand Up @@ -40,18 +55,35 @@ export component StartPauseButton inherits Rectangle {

export component CanTransmitData inherits Rectangle {
callback send(bool, string, string);
out property <bool> can_id_check: false;
out property <bool> can_data_check: false;
callback can_id_check_string(bool, string) -> bool;
callback can_data_check_string(string) -> bool;
HorizontalLayout {
is_extended := MyCheckBox {
text: "Extended Frame";
}
can_id := LineEdit {
placeholder-text: "ID (hex) - eg: 1814FF12";
edited => {
can_id_check = can_id_check_string(is_extended.checked, can_id.text);
}
}
VerificationIcon {
is_ok: can_id_check;
}
can_data := LineEdit {
placeholder-text: "data (hex) - eg: 1A2B3C4D";
edited => {
can_data_check = can_data_check_string(can_data.text);
}
}
VerificationIcon {
is_ok: can_data_check;
}
Button {
text: "send";
enabled: can_id_check && can_data_check;
clicked => {
send(is_extended.checked, can_id.text, can_data.text)
}
Expand All @@ -71,6 +103,8 @@ export component debugPage inherits Rectangle {
{id: "181FF1FA", len: 4, data: "00 01 02 03 04 05 06 07"}];
callback change_state(bool);
callback can_transmit(bool, string, string);
callback can_id_check_string(bool, string) -> bool;
callback can_data_check_string(string) -> bool;

VerticalLayout {
HorizontalLayout {
Expand Down Expand Up @@ -180,21 +214,45 @@ export component debugPage inherits Rectangle {
send(is_extended, can_id, can_data) => {
can_transmit(is_extended, can_id, can_data);
}
can_id_check_string(is_extended, id) => {
can_id_check_string(is_extended, id)
}
can_data_check_string(data) => {
can_data_check_string(data)
}
}
CanTransmitData {
send(is_extended, can_id, can_data) => {
can_transmit(is_extended, can_id, can_data);
}
can_id_check_string(is_extended, id) => {
can_id_check_string(is_extended, id)
}
can_data_check_string(data) => {
can_data_check_string(data)
}
}
CanTransmitData {
send(is_extended, can_id, can_data) => {
can_transmit(is_extended, can_id, can_data);
}
can_id_check_string(is_extended, id) => {
can_id_check_string(is_extended, id)
}
can_data_check_string(data) => {
can_data_check_string(data)
}
}
CanTransmitData {
send(is_extended, can_id, can_data) => {
can_transmit(is_extended, can_id, can_data);
}
can_id_check_string(is_extended, id) => {
can_id_check_string(is_extended, id)
}
can_data_check_string(data) => {
can_data_check_string(data)
}
}
}
}
Expand Down
Binary file added ui/images/green_tick.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added ui/images/red_cross.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit afa9fea

Please sign in to comment.