embassy-rs/embassy · error
not implemented
Error message
not implemented
What it means
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.
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
Example fix
// before
let ev = tx_event_fifo.read_element(i);
if ev.efc().is_tx_event() { ... } // panics on empty slot
// after
if tx_event_fifo.fill_level() > 0 {
let ev = tx_event_fifo.read_element(i);
...
} Defensive patterns
Strategy: type-guard
Validate before calling
fn event_bits_valid(bits: u8) -> bool { bits == 0b01 || bits == 0b10 } Type guard
fn decode_event(bits: u8) -> Option<EventType> { match bits { 0b01 => Some(EventType::TxEvent), 0b10 => Some(EventType::TxDespiteAbort), _ => None } } Try / catch
// check Tx event FIFO fill level before reading elements
Prevention
- 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
When it happens
Trigger: 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.
Common situations: Draining the Tx event FIFO without checking the fill level (rx FIFO status), so stale/uninitialized elements are read.
Related errors
- not implemented
- Standard Filter Slot Too High!
- Invalid FilterConfig (TooManyFilters)! A FilterConfig must…
- Invalid FilterConfig (EmptyFilterConfig)! A FilterConfig…
- EEPROM regions for chip
AI-assisted analysis of embassy-rs/embassy@463a07b963 (2026-09-10).
Data as JSON: /api/errors/0f133486a3b34ec7.
Report an issue: GitHub.
Appendix: source
Thrown at embassy-stm32/src/can/fd/message_ram/txevent_element.rs:73
}
}
#[derive(Clone, Copy, Debug, PartialEq)]
pub(crate) enum EventType {
//_Reserved = 0b00,
TxEvent = 0b01,
TxDespiteAbort = 0b10,
//_Reserved = 0b10,
}
#[doc = "Reader of field `EFC`"]
pub(crate) type EFC_R = generic::R<u8, EventType>;
impl EFC_R {
pub fn event_type(&self) -> EventType {
match self.bits() {
0b01 => EventType::TxEvent,
0b10 => EventType::TxDespiteAbort,
_ => unimplemented!(),
}
}
pub fn is_tx_event(&self) -> bool {
self.event_type() == EventType::TxEvent
}
pub fn is_despite_abort(&self) -> bool {
self.event_type() == EventType::TxDespiteAbort
}
}
#[doc = "Reader of field `MM`"]
pub(crate) type MM_R = generic::R<u8, u8>;
impl R {
#[doc = "Byte 0 - Bits 0:28 - ID"]
#[inline(always)]
pub fn id(&self) -> ID_R {
ID_R::new(((self.bits[0]) & 0x1FFFFFFF))View on GitHub (pinned to 463a07b963)