Added defmt logging

This commit is contained in:
2026-01-16 22:33:53 +01:00
parent d30a261e74
commit 6ca19f88fa
4 changed files with 91 additions and 4 deletions

70
Cargo.lock generated
View File

@@ -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",

View File

@@ -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]

View File

@@ -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)
}

View File

@@ -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)