iso15765-2 0.1.0

ISO-TP trait define.
Documentation
#[cfg(feature = "std2004")]
mod std2004;
#[cfg(feature = "std2004")]
pub use std2004::*;
#[cfg(feature = "std2016")]
mod std2016;
#[cfg(feature = "std2016")]
pub use std2016::*;

use crate::{can::constants::CONSECUTIVE_FRAME_SIZE, frame::Frame};

fn parse_frame_util<const FIRST_FRAME_SIZE: usize>(
    data: &[u8],
    offset: &mut usize,
    sequence: &mut u8,
    results: &mut Vec<Frame>,
    length: usize,
) {
    loop {
        match *offset {
            0 => {
                *offset += FIRST_FRAME_SIZE;
                let frame = Frame::FirstFrame {
                    length: length as u32,
                    data: Vec::from(&data[..*offset]),
                };
                results.push(frame);
            }
            _ => {
                if *offset + CONSECUTIVE_FRAME_SIZE >= length {
                    let frame = Frame::ConsecutiveFrame {
                        sequence: *sequence,
                        data: Vec::from(&data[*offset..length]),
                    };
                    results.push(frame);
                    break;
                }

                let frame = Frame::ConsecutiveFrame {
                    sequence: *sequence,
                    data: Vec::from(&data[*offset..*offset + CONSECUTIVE_FRAME_SIZE]),
                };
                *offset += CONSECUTIVE_FRAME_SIZE;
                if *sequence >= 0x0F {
                    *sequence = 0;
                } else {
                    *sequence += 1;
                }

                results.push(frame);
            }
        }
    }
}