use crate::Uid;
#[derive(Copy, Clone, Debug, PartialEq)]
pub struct VersionInfo {
pub hardware: DetailedVersionInfo,
pub software: DetailedVersionInfo,
pub uid: Uid,
pub production_batch_number: [u8; 5],
pub production_calendar_week: u8,
pub production_year: u8,
}
impl VersionInfo {
pub fn parse(v: &[u8; 28]) -> Self {
let hardware = DetailedVersionInfo::parse(v[..7].try_into().unwrap());
let software = DetailedVersionInfo::parse(v[7..14].try_into().unwrap());
let uid: Uid = v[14..21].try_into().unwrap();
let production_batch_number: [u8; 5] = v[21..26].try_into().unwrap();
let production_calendar_week = v[26];
let production_year = v[27];
Self {
hardware,
software,
uid,
production_batch_number,
production_calendar_week,
production_year,
}
}
}
#[derive(Copy, Clone, Debug, PartialEq)]
pub struct DetailedVersionInfo {
pub vendor_id: u8,
pub r#type: u8,
pub sub_type: u8,
pub major_version: u8,
pub minor_version: u8,
pub storage_size: u8,
pub protocol_type: u8,
}
impl DetailedVersionInfo {
pub fn parse(v: &[u8; 7]) -> Self {
let [
vendor_id,
r#type,
sub_type,
major_version,
minor_version,
storage_size,
protocol_type,
] = *v;
Self {
vendor_id,
r#type,
sub_type,
major_version,
minor_version,
storage_size,
protocol_type,
}
}
}