From b086057ba096920abef3870ad0cefa2c80a343e2 Mon Sep 17 00:00:00 2001 From: Quentin ADAM Date: Tue, 19 May 2020 01:33:28 +0200 Subject: [PATCH] add packet sending support --- Cargo.lock | 7 +++++++ Cargo.toml | 1 + src/lib.rs | 28 ++++++++++++++++++++++++++++ 3 files changed, 36 insertions(+) diff --git a/Cargo.lock b/Cargo.lock index bac6220..41a7df9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -42,6 +42,11 @@ name = "cfg-if" version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "hex" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "lazy_static" version = "1.4.0" @@ -133,6 +138,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" name = "rn2903" version = "0.2.0" dependencies = [ + "hex 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "serialport 3.3.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -192,6 +198,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" "checksum cc 1.0.48 (registry+https://github.com/rust-lang/crates.io-index)" = "f52a465a666ca3d838ebbf08b241383421412fe7ebb463527bba275526d89f76" "checksum cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" +"checksum hex 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "644f9158b2f133fd50f5fb3242878846d9eb792e445c893805ff0e3824006e35" "checksum lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" "checksum libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)" = "d515b1f41455adea1313a4a2ac8a8a477634fbae63cc6100e3aebb207ce61558" "checksum libudev 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ea626d3bdf40a1c5aee3bcd4f40826970cae8d80a8fec934c82a63840094dcfe" diff --git a/Cargo.toml b/Cargo.toml index c9ac9e7..4202d58 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,4 +14,5 @@ categories = ["api-bindings", "embedded", "hardware-support"] [dependencies] serialport = "3.3" quick-error = "1" +hex = "0.4.2" diff --git a/src/lib.rs b/src/lib.rs index 96f88c4..d1eb40c 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -32,6 +32,7 @@ // a `Result`. #[macro_use] extern crate quick_error; +use hex; use std::io; quick_error! { @@ -80,6 +81,16 @@ quick_error! { description(err.description()) from() } + + TransmissionUnsuccessful { + description("the radio transmission was unsuccessful") + display("if transmission was unsuccessful (interrupted by radio Watchdog Timer time-out)") + } + + InvalidParam { + description("the parameter is not valid") + display("the parameter is not valid") + } } } @@ -466,6 +477,23 @@ impl Rn2903 { )), } } + + pub fn radio_tx(&mut self, send: String) -> Result>> { + let result = self.transact(&format!("radio tx {}", hex::encode(send)).into_bytes())?; + match &result[..] { + b"ok" => { + let sresult = self.read_line()?; + match &sresult[..] { + b"radio_tx_ok" => return Ok(None), + b"radio_err" => return Err(Error::TransmissionUnsuccessful), + v => return Err(Error::bad_response("nok", bytes_to_string(v))), + } + } + b"invalid_param" => return Err(Error::InvalidParam), + b"busy" => return Err(Error::TransceiverBusy), + v => return Err(Error::bad_response("ok | busy", bytes_to_string(v))), + }; + } } /// # MAC API Functions