{"record":{"id":"0f133486a3b34ec7","repo":"embassy-rs/embassy","slug":"not-implemented-0f1334","errorCode":null,"errorMessage":"not implemented","messagePattern":"not implemented","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"error","filePath":"embassy-stm32/src/can/fd/message_ram/txevent_element.rs","lineNumber":73,"sourceCode":"    }\n}\n\n#[derive(Clone, Copy, Debug, PartialEq)]\npub(crate) enum EventType {\n    //_Reserved = 0b00,\n    TxEvent = 0b01,\n    TxDespiteAbort = 0b10,\n    //_Reserved = 0b10,\n}\n\n#[doc = \"Reader of field `EFC`\"]\npub(crate) type EFC_R = generic::R<u8, EventType>;\nimpl EFC_R {\n    pub fn event_type(&self) -> EventType {\n        match self.bits() {\n            0b01 => EventType::TxEvent,\n            0b10 => EventType::TxDespiteAbort,\n            _ => unimplemented!(),\n        }\n    }\n    pub fn is_tx_event(&self) -> bool {\n        self.event_type() == EventType::TxEvent\n    }\n    pub fn is_despite_abort(&self) -> bool {\n        self.event_type() == EventType::TxDespiteAbort\n    }\n}\n\n#[doc = \"Reader of field `MM`\"]\npub(crate) type MM_R = generic::R<u8, u8>;\n\nimpl R {\n    #[doc = \"Byte 0 - Bits 0:28 - ID\"]\n    #[inline(always)]\n    pub fn id(&self) -> ID_R {\n        ID_R::new(((self.bits[0]) & 0x1FFFFFFF))","sourceCodeStart":55,"sourceCodeEnd":91,"githubUrl":"https://github.com/embassy-rs/embassy/blob/463a07b963419a1bfe61d5d597c44acb810afb8b/embassy-stm32/src/can/fd/message_ram/txevent_element.rs#L55-L91","documentation":"event_type decodes the Tx event FIFO element's EFC field, handling only 0b01 (TxEvent) and 0b10 (TxDespiteAbort); the reserved 0b00/0b11 encodings hit unimplemented!. Reading an uninitialized or corrupt tx event element panics.","triggerScenarios":"Calling is_tx_event or is_despite_abort on a TxEventFifoElement whose EFC bits are 0b00 or 0b11 — typically an empty/never-written event FIFO slot.","commonSituations":"Draining the Tx event FIFO without checking the fill level (rx FIFO status), so stale/uninitialized elements are read.","solutions":["Check the Tx event FIFO fill level (TXEFS) before reading elements; only read valid entries","Initialize event FIFO elements to 0b01/0b10 on setup if firmware requires","Change event_type to return Option<EventType> and treat reserved values as no-event","Avoid reading event elements for messages that were sent without event storage enabled"],"exampleFix":"// before\nlet ev = tx_event_fifo.read_element(i);\nif ev.efc().is_tx_event() { ... } // panics on empty slot\n// after\nif tx_event_fifo.fill_level() > 0 {\n    let ev = tx_event_fifo.read_element(i);\n    ...\n}","handlingStrategy":"type-guard","validationCode":"fn event_bits_valid(bits: u8) -> bool { bits == 0b01 || bits == 0b10 }","typeGuard":"fn decode_event(bits: u8) -> Option<EventType> { match bits { 0b01 => Some(EventType::TxEvent), 0b10 => Some(EventType::TxDespiteAbort), _ => None } }","tryCatchPattern":"// check Tx event FIFO fill level before reading elements","preventionTips":["Check TXEFS fill level before popping tx event elements","Only enable event storage for transmissions you intend to read back","Treat EFC 0b00/0b11 as empty slots in your driver wrapper"],"tags":["rust","embedded","stm32","can","fdcan","enum-decode"],"backgroundTag":"unsupported-enum-value","analyzedSha":"463a07b963419a1bfe61d5d597c44acb810afb8b","analyzedAt":"2026-09-10T13:38:26.660Z","contentChangedAt":"2026-09-10T13:38:26.660Z","schemaVersion":2},"datasetVersion":"2026-09-16T04:17:20.429Z"}