use core::convert::TryFrom;
use num_enum::{IntoPrimitive, TryFromPrimitive, TryFromPrimitiveError};
use crate::address_enum_ops;
use crate::common::Address;
#[derive(Clone, Copy, Debug, Eq, PartialEq, PartialOrd, Ord, IntoPrimitive, TryFromPrimitive)]
#[repr(u16)]
pub(super) enum EepromAddress {
Base = 0x2400,
OffsetCompensation = 0x2410,
PixelOffsetAverage = 0x2411,
OffsetCompensationRowStart = 0x2412,
OffsetCompensationColumnStart = 0x2418,
SensitivityScale = 0x2420,
PixelSensitivityAverage = 0x2421,
PixelSensitivityCompensationRowStart = 0x2422,
PixelSensitivityCompensationColumnStart = 0x2428,
Gain = 0x2430,
Ptat25 = 0x2431,
PtatConstants = 0x2432,
VddConstants = 0x2433,
AverageVoltageConstants = 0x2434,
InterlacedModeCompensation = 0x2435,
AmbientTemperatureAverageConstantsEvenColumns = 0x2436,
AmbientTemperatureAverageConstantsOddColumns = 0x2437,
VAndTaScale = 0x2438,
CompensationPixelSensitivity = 0x2439,
CompensationPixelOffset = 0x243A,
CompensationPixelConstants = 0x243B,
AmbientTemperatureSensitivityConstant = 0x243C,
ObjectTemperatureSensitivityRangeConstants1 = 0x243D,
ObjectTemperatureSensitivityRangeConstants2 = 0x243E,
CornerTemperatures = 0x243F,
PixelCalibrationStart = 0x2440,
End = 0x273F,
}
address_enum_ops!(EepromAddress);
impl TryFrom<Address> for EepromAddress {
type Error = TryFromPrimitiveError<EepromAddress>;
fn try_from(value: Address) -> Result<Self, Self::Error> {
let raw_address: u16 = value.into();
Self::try_from(raw_address)
}
}
impl From<EepromAddress> for Address {
fn from(eeprom_address: EepromAddress) -> Self {
let raw_address: u16 = eeprom_address.into();
raw_address.into()
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, PartialOrd, Ord, IntoPrimitive, TryFromPrimitive)]
#[repr(u16)]
pub enum RamAddress {
Base = 0x0400,
AmbientTemperatureVoltageBe = 0x0700,
CompensationPixelZero = 0x0708,
Gain = 0x070A,
AmbientTemperatureVoltage = 0x0720,
CompensationPixelOne = 0x0728,
PixelSupplyVoltage = 0x072A,
End = 0x073F,
}
address_enum_ops!(RamAddress);
impl TryFrom<Address> for RamAddress {
type Error = TryFromPrimitiveError<RamAddress>;
fn try_from(value: Address) -> Result<Self, Self::Error> {
let raw_address: u16 = value.into();
Self::try_from(raw_address)
}
}
impl From<RamAddress> for Address {
fn from(ram_address: RamAddress) -> Self {
let raw_address: u16 = ram_address.into();
raw_address.into()
}
}