use crate::Rotation;
#[repr(u16)]
#[derive(Clone, Copy)]
pub enum MemoryConverterEndianness {
LittleEndian = 0,
BigEndian = 1,
}
#[repr(u16)]
#[derive(Clone, Copy)]
pub enum MemoryConverterBitPerPixel {
BitsPerPixel2 = 0b00,
BitsPerPixel3 = 0b01,
BitsPerPixel4 = 0b10,
BitsPerPixel8 = 0b11,
}
#[repr(u16)]
#[derive(Clone, Copy)]
pub enum MemoryConverterRotation {
Rotate0 = 0b00,
Rotate90 = 0b01,
Rotate180 = 0b10,
Rotate270 = 0b11,
}
#[derive(Clone, Copy)]
pub struct MemoryConverterSetting {
pub endianness: MemoryConverterEndianness,
pub bit_per_pixel: MemoryConverterBitPerPixel,
pub rotation: MemoryConverterRotation,
}
impl Default for MemoryConverterSetting {
fn default() -> Self {
Self {
endianness: MemoryConverterEndianness::LittleEndian,
bit_per_pixel: MemoryConverterBitPerPixel::BitsPerPixel4,
rotation: MemoryConverterRotation::Rotate0,
}
}
}
impl MemoryConverterSetting {
pub(crate) fn into_arg(self) -> u16 {
let endianness = self.endianness as u16;
let bit_per_pixel = self.bit_per_pixel as u16;
let rotation = self.rotation as u16;
(endianness << 8) | (bit_per_pixel << 4) | rotation
}
}
impl From<&Rotation> for MemoryConverterRotation {
fn from(rotation: &Rotation) -> Self {
match rotation {
Rotation::Rotate0 => MemoryConverterRotation::Rotate0,
Rotation::Rotate90 => MemoryConverterRotation::Rotate90,
Rotation::Rotate180 => MemoryConverterRotation::Rotate180,
Rotation::Rotate270 => MemoryConverterRotation::Rotate270,
}
}
}