pub struct Encoder { /* private fields */ }Expand description
Encode raw defmt frames for sending over the wire.
defmt emits “log frames”, which are sequences of bytes. The raw log frame data is then encoded prior to sending over the wire.
Encoder will encode the frames according to the currently selected
encoding-* Cargo feature. See Cargo.toml for the supported encodings
and their tradeoffs.
Encodings may perform two functions:
- Framing: Adds extra data to allow the encoder to know when each frame starts and ends in the stream. Unframed log frames already contain enough information for the decoder to know when they end, so framing is optional. However, without framing the decoder must receive all bytes intact or it may “lose sync”. With framing, it can recover from missing/corrupted data, and can start decoding from the “middle” of an already-running stream.
- Compression: The frame data has rather low entropy (for example, it contains many zero bytes due to encoding all integers in fixed with, and will likely contain many repetitions). Compression can decrease the on-the-wire required bandwidth.
defmt provides the Encoder separately instead of feeding already-encoded bytes
to the Logger because Logger implementations may decide to allow
concurrent logging from multiple “contexts” such as threads or interrupt
priority levels. In this case, the Logger implementation needs to create one
Encoder for each such context.
Implementations§
source§impl Encoder
impl Encoder
sourcepub fn start_frame(&mut self, write: impl FnMut(&[u8]))
pub fn start_frame(&mut self, write: impl FnMut(&[u8]))
Start encoding a log frame.
Logger impls will typically call this from acquire().
You may only call start_frame when no frame is currently being encoded.
Failure to do so may result in corrupted data on the wire.
The write closure will be called with the encoded data that must
be sent on the wire. It may be called zero, one, or multiple times.
sourcepub fn end_frame(&mut self, write: impl FnMut(&[u8]))
pub fn end_frame(&mut self, write: impl FnMut(&[u8]))
Finish encoding a log frame.
Logger impls will typically call this from release().
You may only call end_frame when a frame is currently being encoded.
Failure to do so may result in corrupted data on the wire.
The write closure will be called with the encoded data that must
be sent on the wire. It may be called zero, one, or multiple times.
sourcepub fn write(&mut self, data: &[u8], write: impl FnMut(&[u8]))
pub fn write(&mut self, data: &[u8], write: impl FnMut(&[u8]))
Write part of data for a log frame.
Logger impls will typically call this from write().
You may only call write when a frame is currently being encoded.
Failure to do so may result in corrupted data on the wire.
The write closure will be called with the encoded data that must
be sent on the wire. It may be called zero, one, or multiple times.