Struct ccsds::FrameDecoderBuilder
source · pub struct FrameDecoderBuilder { /* private fields */ }Expand description
Builds a DecodedFrameIter that will return all frames decoded from the stream read from reader.
Reads are only performed when a Frame is requested from the returned iterator, i.e., when Iterator::next is called. More bytes than the size of the frame may be read if the underlying stream is not synchronized.
Frames will generated in the order in which they occur in the original byte stream.
IO is performed concurrently so the iterator can be returned immediately. All PN and RS decoding is likewise performed concurrently.
Implementations§
source§impl FrameDecoderBuilder
impl FrameDecoderBuilder
sourcepub const DEFAULT_BUFFER_SIZE: usize = 1_024usize
pub const DEFAULT_BUFFER_SIZE: usize = 1_024usize
Default number of frames to buffer in memory while waiting for RS.
sourcepub fn new(cadu_length: i32) -> Self
pub fn new(cadu_length: i32) -> Self
Create a new DecodedFrameIter with default values suitable for decoding most (all?) CCSDS compatible frame streams.
cadu_length should be the length of the attached sync marker and the Reed-Solomon
code block, if the stream uses Reed-Solomon, or the length of the transfer frame.
You must include the length of the RS codeblock if the stream uses RS, even if you
have disabled RS FEC.
Given the interleave for a spacecraft, for most cases all that should be necessary
is the following:
use ccsds::FrameDecoderBuilder;
let r = &[0u8; 1][..]; // implements Read
let decoded_frames = FrameDecoderBuilder::new(1024)
.reed_solomon_interleave(4)
.build(r);It is possible, however, to twidle with default implementations using the provided builder functions.
sourcepub fn buffer_size(self, size: usize) -> Self
pub fn buffer_size(self, size: usize) -> Self
Limits the number of block waiting in memory for RS. See FrameDecoderBuilder::DEFAULT_BUFFER_SIZE.
sourcepub fn attached_sync_marker(self, asm: &[u8]) -> Self
pub fn attached_sync_marker(self, asm: &[u8]) -> Self
Set the CADU Attached Sync Marker used to synchronize the incoming stream. Defaults to ASM;
sourcepub fn reed_solomon_interleave(self, interleave: u8) -> Self
pub fn reed_solomon_interleave(self, interleave: u8) -> Self
Use the default Reed-Solomon with the specified interleave value.
For more control over Reed-Solomon, see reed_solomon.
§Panics
If interleave is 0.
sourcepub fn reed_solomon(
self,
rs: Option<Box<dyn ReedSolomon + Sync>>,
interleave: u8
) -> Self
pub fn reed_solomon( self, rs: Option<Box<dyn ReedSolomon + Sync>>, interleave: u8 ) -> Self
Set the Reed-Solomon per-CADU implementation to use. Defaults to DefaultReedSolomon.
§Panics
If interleave is 0.
sourcepub fn reed_solomon_threads(self, num: usize) -> Self
pub fn reed_solomon_threads(self, num: usize) -> Self
Set the number of threads to use for Reed-Solomon. If not explicitly set, the number of threads is chosen automatically.
sourcepub fn build(self, reader: impl Read + Send + 'static) -> DecodedFrameIter ⓘ
pub fn build(self, reader: impl Read + Send + 'static) -> DecodedFrameIter ⓘ
Returns a DecodedFrameIter configured according to the provided options.