diff --git a/Cargo.lock b/Cargo.lock index bed9e90..bb0b7a0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,6 +2,12 @@ # It is not intended for manual editing. version = 4 +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + [[package]] name = "convert_case" version = "0.6.0" @@ -11,6 +17,47 @@ dependencies = [ "unicode-segmentation", ] +[[package]] +name = "defmt" +version = "0.3.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0963443817029b2024136fc4dd07a5107eb8f977eaf18fcd1fdeb11306b64ad" +dependencies = [ + "defmt 1.0.1", +] + +[[package]] +name = "defmt" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "548d977b6da32fa1d1fda2876453da1e7df63ad0304c8b3dae4dbe7b96f39b78" +dependencies = [ + "bitflags", + "defmt-macros", +] + +[[package]] +name = "defmt-macros" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d4fc12a85bcf441cfe44344c4b72d58493178ce635338a3f3b78943aceb258e" +dependencies = [ + "defmt-parser", + "proc-macro-error2", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "defmt-parser" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10d60334b3b2e7c9d91ef8150abfb6fa4c1c39ebbcf4a81c2e346aad939fee3e" +dependencies = [ + "thiserror", +] + [[package]] name = "enum_stringify" version = "0.6.4" @@ -94,6 +141,28 @@ dependencies = [ "toml_edit", ] +[[package]] +name = "proc-macro-error-attr2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5" +dependencies = [ + "proc-macro2", + "quote", +] + +[[package]] +name = "proc-macro-error2" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802" +dependencies = [ + "proc-macro-error-attr2", + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "proc-macro2" version = "1.0.103" @@ -107,6 +176,7 @@ dependencies = [ name = "protocol_300" version = "0.1.0" dependencies = [ + "defmt 0.3.100", "enum_stringify", "log", "num_enum", diff --git a/Cargo.toml b/Cargo.toml index a72e8dd..cb2029f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,8 +11,10 @@ categories = ["encoding", "decoding"] [features] default = ["std"] -std = ["serde/std", "serde_json/std", "thiserror/std", "num_enum/std"] +std = ["serde/std", "serde_json/std", "thiserror/std", "num_enum/std", "log"] json = ["serde_json"] +defmt = ["dep:defmt"] +log = ["dep:log"] [dependencies] serde = { version = "1.0", default-features = false} @@ -21,7 +23,8 @@ thiserror = {version="2.0.17", default-features = false} # chrono = { version = "0.4", features = ["serde"] } enum_stringify = "0.6.4" num_enum = {version="0.7.5", default-features = false} -log = { version = "0.4" } +log = { version = "0.4", optional = true } +defmt = { version = "0.3", optional = true } [lints.clippy] diff --git a/src/message.rs b/src/message.rs index 5df011e..9b2db82 100644 --- a/src/message.rs +++ b/src/message.rs @@ -1,3 +1,7 @@ +#[cfg(feature = "defmt")] +use defmt::{warn, error}; + +#[cfg(feature = "log")] use log::{warn, error}; extern crate alloc; @@ -223,7 +227,11 @@ impl Protocol300Message { // Fail if the checksums do not match if checksum != checksum_calculated { + #[cfg(feature = "log")] error!("Failed to decode message: checksum mismatch - received: 0x{checksum:02X}, calculated: 0x{checksum_calculated:02X}, address: 0x{data_address:04X}, message_id: {message_identifier}, function: {function_code}"); + #[cfg(feature = "defmt")] + error!("Failed to decode message: checksum mismatch - received: 0x{:02X}, calculated: 0x{:02X}, address: 0x{:04X}, message_id: {}, function: {}", checksum, checksum_calculated, data_address, defmt::Debug2Format(&message_identifier), defmt::Debug2Format(&function_code)); + return Err(MessageDecodingError::Checksum) } diff --git a/src/transmission.rs b/src/transmission.rs index 7d652d0..c0746c1 100644 --- a/src/transmission.rs +++ b/src/transmission.rs @@ -1,6 +1,12 @@ use crate::{Protocol300Message, message}; use thiserror::Error; -use log::error; + +#[cfg(feature = "defmt")] +use defmt::{error}; + +#[cfg(feature = "log")] +use log::{error}; + extern crate alloc; use alloc::vec; @@ -36,7 +42,7 @@ impl Protocol300Transmission { [0x16, 0x00, 0x00] => Ok(Self::Init), [0x41, ..] => Ok(Self::Message(Protocol300Message::try_from_bytes(bytes)?)), _ => { - error!("Failed to parse Protocol300 transmission: invalid byte sequence (length: {}, first byte: 0x{:02X?})", + error!("Failed to parse Protocol300 transmission: invalid byte sequence (length: {}, first byte: 0x{:02X})", bytes.len(), bytes.first().unwrap_or(&0x00)); Err(FromBytesError::InvalidByte)