use crate::{Command, SerializationError};
pub const ADDRESS: u8 = 0x31;
#[allow(clippy::enum_variant_names)]
#[derive(Debug, Clone, Copy)]
pub enum Commands {
SetGate { port: u8, state: bool },
SetCv { port: u8, value: i16 },
SetCvSlew { port: u8, ms: u16 },
}
impl Command for Commands {
const MAX_LENGTH: usize = 4;
fn to_bytes<'a>(&self, buffer: &'a mut [u8]) -> Result<&'a [u8], SerializationError> {
match *self {
Self::SetGate { port, state } => {
if buffer.len() < 3 {
return Err(SerializationError::BufferTooSmall);
}
buffer[0] = 0x00;
buffer[1] = port;
buffer[2] = state as u8;
Ok(&buffer[..3])
}
Self::SetCv { port, value } => {
if buffer.len() < 4 {
return Err(SerializationError::BufferTooSmall);
}
let value_bytes = value.to_be_bytes(); buffer[0] = 0x11;
buffer[1] = port;
buffer[2] = value_bytes[0];
buffer[3] = value_bytes[1];
Ok(&buffer[..4])
}
Self::SetCvSlew { port, ms } => {
if buffer.len() < 4 {
return Err(SerializationError::BufferTooSmall);
}
let ms_bytes = ms.to_be_bytes();
buffer[0] = 0x12;
buffer[1] = port;
buffer[2] = ms_bytes[0];
buffer[3] = ms_bytes[1];
Ok(&buffer[..4])
}
}
}
}