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

source

pub const DEFAULT_BUFFER_SIZE: usize = 1_024usize

Default number of frames to buffer in memory while waiting for RS.

source

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.

source

pub fn buffer_size(self, size: usize) -> Self

Limits the number of block waiting in memory for RS. See FrameDecoderBuilder::DEFAULT_BUFFER_SIZE.

source

pub fn attached_sync_marker(self, asm: &[u8]) -> Self

Set the CADU Attached Sync Marker used to synchronize the incoming stream. Defaults to ASM;

source

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.

source

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.

source

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.

source

pub fn pn_decode(self, pn: Option<fn(_: &[u8]) -> Vec<u8>>) -> Self

Set PN implementation.

source

pub fn build(self, reader: impl Read + Send + 'static) -> DecodedFrameIter

Returns a DecodedFrameIter configured according to the provided options.

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.