From 2fbe224e8bb5c2e5b5839ccf5bc68e04c664b02f Mon Sep 17 00:00:00 2001 From: eneller Date: Sun, 25 Aug 2024 18:33:44 +0200 Subject: [PATCH] Initial Commit --- .gitignore | 1 + Cargo.lock | 206 +++++++++++++++++++++++++++++++++++++++++++++++++++ Cargo.toml | 7 ++ src/main.rs | 61 +++++++++++++++ watchdog.ino | 48 ++++++++++++ 5 files changed, 323 insertions(+) create mode 100644 .gitignore create mode 100644 Cargo.lock create mode 100644 Cargo.toml create mode 100644 src/main.rs create mode 100644 watchdog.ino diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/target diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..091582c --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,206 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + +[[package]] +name = "heartbeat" +version = "0.1.0" +dependencies = [ + "serialport", +] + +[[package]] +name = "io-kit-sys" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "617ee6cf8e3f66f3b4ea67a4058564628cde41901316e19f559e14c7c72c5e7b" +dependencies = [ + "core-foundation-sys", + "mach2", +] + +[[package]] +name = "libc" +version = "0.2.158" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439" + +[[package]] +name = "libudev" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78b324152da65df7bb95acfcaab55e3097ceaab02fb19b228a9eb74d55f135e0" +dependencies = [ + "libc", + "libudev-sys", +] + +[[package]] +name = "libudev-sys" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c8469b4a23b962c1396b9b451dda50ef5b283e8dd309d69033475fa9b334324" +dependencies = [ + "libc", + "pkg-config", +] + +[[package]] +name = "mach2" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19b955cdeb2a02b9117f121ce63aa52d08ade45de53e48fe6a38b39c10f6f709" +dependencies = [ + "libc", +] + +[[package]] +name = "nix" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b" +dependencies = [ + "bitflags 1.3.2", + "cfg-if", + "libc", +] + +[[package]] +name = "pkg-config" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" + +[[package]] +name = "proc-macro2" +version = "1.0.86" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "serialport" +version = "4.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "241ebb629ed9bf598b2b392ba42aa429f9ef2a0099001246a36ac4c084ee183f" +dependencies = [ + "bitflags 2.6.0", + "cfg-if", + "core-foundation-sys", + "io-kit-sys", + "libudev", + "mach2", + "nix", + "scopeguard", + "unescaper", + "winapi", +] + +[[package]] +name = "syn" +version = "2.0.76" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "578e081a14e0cefc3279b0472138c513f37b41a08d5a3cca9b6e4e8ceb6cd525" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "thiserror" +version = "1.0.63" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.63" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "unescaper" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c878a167baa8afd137494101a688ef8c67125089ff2249284bd2b5f9bfedb815" +dependencies = [ + "thiserror", +] + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..75d237a --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "heartbeat" +version = "0.1.0" +edition = "2021" + +[dependencies] +serialport = "4.5.0" diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..5224a3e --- /dev/null +++ b/src/main.rs @@ -0,0 +1,61 @@ +use serialport::{available_ports, SerialPortType}; + +fn main() { + match available_ports() { + Ok(ports) => { + match ports.len() { + 0 => println!("No ports found."), + 1 => println!("Found 1 port:"), + n => println!("Found {} ports:", n), + }; + for p in ports { + println!(" {}", p.port_name); + match p.port_type { + SerialPortType::UsbPort(info) => { + println!(" Type: USB"); + println!(" VID:{:04x} PID:{:04x}", info.vid, info.pid); + println!( + " Serial Number: {}", + info.serial_number.as_ref().map_or("", String::as_str) + ); + println!( + " Manufacturer: {}", + info.manufacturer.as_ref().map_or("", String::as_str) + ); + println!( + " Product: {}", + info.product.as_ref().map_or("", String::as_str) + ); + #[cfg(feature = "usbportinfo-interface")] + println!( + " Interface: {}", + info.interface + .as_ref() + .map_or("".to_string(), |x| format!("{:02x}", *x)) + ); + } + SerialPortType::BluetoothPort => { + println!(" Type: Bluetooth"); + } + SerialPortType::PciPort => { + println!(" Type: PCI"); + } + SerialPortType::Unknown => { + println!(" Type: Unknown"); + } + } + } + } + Err(e) => { + eprintln!("{:?}", e); + eprintln!("Error listing serial ports"); + } + } +} + +fn setup(){ + //TODO find serial port of microcontroller and connect to it +} +fn heartbeat(){ + //TODO send heartbeat every interval, then sleep and repeat +} diff --git a/watchdog.ino b/watchdog.ino new file mode 100644 index 0000000..695cc89 --- /dev/null +++ b/watchdog.ino @@ -0,0 +1,48 @@ +const int MAX_SILENCE_MILLIS = 2000; + +unsigned long startTimeMillis; +void setup() +{ + Serial.begin(9600); + waitForSerial(); + //NOTE might want to replace this initialization with a check in the first loop, so we dont instantly reboot + startTimeMillis = millis(); + +} + +void loop() { + unsigned long currentTimeMillis = millis(); + unsigned long tickMillis = currentTimeMillis - startTimeMillis; + if (tickMillis > MAX_SILENCE_MILLIS){rst();} + if (Serial.available() > 0) { // if something has been written to the serial port + startTimeMillis = millis(); + + + int value = Serial.parseInt(); + + if(value > 0) + { + Serial.print("Number: "); + Serial.print(value); + Serial.print(", hex: "); + Serial.print(value, HEX); + Serial.print(", bin: "); + Serial.println(value, BIN); + } + } +} + + +void rst(){ + //TODO connect the RST pins on the motherboard + Serial.println("Error!"); + waitForSerial(); +} + +/* +busy wait for first serial signal +*/ +void waitForSerial(){ + while(Serial.available() == 0){} +} +