pub struct Register;
impl Register {
pub const RDA5807M_REG_CHIPID: u8 = 0x00;
pub const RDA5807M_REG_CONFIG: u8 = 0x02;
pub const RDA5807M_REG_TUNING: u8 = 0x03;
pub const RDA5807M_REG_GPIO: u8 = 0x04;
pub const RDA5807M_REG_VOLUME: u8 = 0x05;
pub const RDA5807M_REG_I2S: u8 = 0x06;
pub const RDA5807M_REG_BLEND: u8 = 0x07;
pub const RDA5807M_REG_FREQ: u8 = 0x08;
pub const RDA5807M_REG_STATUS: u8 = 0x0A;
pub const RDA5807M_REG_RSSI: u8 = 0x0B;
pub const RDA5807M_REG_RDSA: u8 = 0x0C;
pub const RDA5807M_REG_RDSB: u8 = 0x0D;
pub const RDA5807M_REG_RDSC: u8 = 0x0E;
pub const RDA5807M_REG_RDSD: u8 = 0x0F;
}
pub struct ConfigBitFlags;
impl ConfigBitFlags {
pub const DHIZ: u16 = 1 << 15;
pub const DMUTE: u16 = 1 << 14;
pub const MONO: u16 = 1 << 13;
pub const BASS: u16 = 1 << 12;
pub const RCLKNOCAL: u16 = 1 << 11;
pub const RCLKDIRECT: u16 = 1 << 10;
pub const SEEKUP: u16 = 1 << 9;
pub const SEEK: u16 = 1 << 8;
pub const SKMODE: u16 = 1 << 7;
pub const CLK_32768_KHZ: u16 = 0b0000_0000_0000_0000;
pub const CLK_12_MHZ: u16 = 0b0000_0000_0001_0000;
pub const CLK_24_MHZ: u16 = 0b0000_0000_0101_0000;
pub const CLK_13_MHZ: u16 = 0b0000_0000_0010_0000;
pub const CLK_26_MHZ: u16 = 0b0000_0000_0110_0000;
pub const CLK_192_MHZ: u16 = 0b0000_0000_0011_0000;
pub const CLK_384_MHZ: u16 = 0b0000_0000_0111_0000;
pub const RDS: u16 = 1 << 3;
pub const NEW: u16 = 1 << 2;
pub const RESET: u16 = 1 << 1;
pub const ENABLE: u16 = 1;
}
pub struct TuningBitFlag;
impl TuningBitFlag {
pub const CHAN_MASK: u16 = 0b1111_1111_1100_0000;
pub const CHAN_SHIFT: u8 = 6;
pub const TUNE: u16 = 1 << 4;
pub const BAND_MASK: u16 = 0b0000_0000_0000_1100;
pub const BAND_SHIFT: u8 = 2;
pub const BAND_87_108_MHZ: u16 = 0b0000_0000_0000_0000;
pub const BAND_76_91_MHZ: u16 = 0b0000_0000_0000_0100;
pub const BAND_76_108_MHZ: u16 = 0b0000_0000_0000_1000;
pub const BAND_65_76_MHZ: u16 = 0b0000_0000_0000_1100;
pub const SPACE_MASK: u16 = 0b0000_0000_0000_0011;
pub const SPACE_100_KHZ: u16 = 0b0000_0000_0000_0000;
pub const SPACE_200_KHZ: u16 = 0b0000_0000_0000_0001;
pub const SPACE_50_KHZ: u16 = 0b0000_0000_0000_0010;
pub const SPACE_25_KHZ: u16 = 0b0000_0000_0000_0011;
}
pub struct VolumeBitFlag;
impl VolumeBitFlag {
pub const INT_MODE: u16 = 1 << 15;
pub const SEEK_MODE_MASK: u16 = 0b0110_0000_0000_0000;
pub const SEEK_MODE_SHIFT: u8 = 13;
pub const RSVD: u16 = 1 << 12;
pub const SEEK_TH_MASK: u16 = 0b0000_1111_0000_0000;
pub const SEEK_TH_SHIFT: u8 = 8;
pub const LNA_PORT_SEL_MASK: u16 = 0b0000_0000_1100_0000;
pub const LNA_PORT_SEL_SHIFT: u8 = 6;
pub const LNA_ICSEL_BIT_MASK: u16 = 0b0000_0000_0011_0000;
pub const LNA_ICSEL_BIT_SHIFT: u8 = 4;
pub const VOLUME_MASK: u16 = 0b0000_0000_0000_1111;
}
#[derive(Debug, Default)]
pub struct VolumeRegister {
pub int_mode: bool,
pub seek_mode: u8,
pub rsvd: bool,
pub seek_th: u8,
pub lna_port_sel: u8,
pub lna_icsel: u8,
pub volume: u8,
}
impl VolumeRegister {
pub fn from_u16(data: u16) -> Self {
VolumeRegister {
int_mode: (data & VolumeBitFlag::INT_MODE) != 0,
seek_mode: ((data & VolumeBitFlag::SEEK_MODE_MASK) >> VolumeBitFlag::SEEK_MODE_SHIFT)
as u8,
rsvd: (data & VolumeBitFlag::RSVD) != 0,
seek_th: ((data & VolumeBitFlag::SEEK_TH_MASK) >> VolumeBitFlag::SEEK_TH_SHIFT) as u8,
lna_port_sel: ((data & VolumeBitFlag::LNA_PORT_SEL_MASK)
>> VolumeBitFlag::LNA_PORT_SEL_SHIFT) as u8,
lna_icsel: ((data & VolumeBitFlag::LNA_ICSEL_BIT_MASK)
>> VolumeBitFlag::LNA_ICSEL_BIT_SHIFT) as u8,
volume: (data & VolumeBitFlag::VOLUME_MASK) as u8,
}
}
}
pub struct StatusBitFlag;
impl StatusBitFlag {
pub const RDSR: u16 = 1 << 15;
pub const STC: u16 = 1 << 14;
pub const SF: u16 = 1 << 13;
pub const RDDS: u16 = 1 << 12;
pub const BLK_E: u16 = 1 << 11;
pub const ST: u16 = 1 << 10;
pub const READ_CHAN_MASK: u16 = 0b0000_0011_1111_1111;
}
#[derive(Debug, Default)]
pub struct StatusRegister {
pub rdsr: bool,
pub stc: bool,
pub sf: bool,
pub rdss: bool,
pub blk_e: bool,
pub st: bool,
pub readchan: u16,
}
impl StatusRegister {
pub fn from_u16(data: u16) -> Self {
StatusRegister {
rdsr: (data & StatusBitFlag::RDSR) != 0,
stc: (data & StatusBitFlag::STC) != 0,
sf: (data & StatusBitFlag::SF) != 0,
rdss: (data & StatusBitFlag::RDDS) != 0,
blk_e: (data & StatusBitFlag::BLK_E) != 0,
st: (data & StatusBitFlag::ST) != 0,
readchan: data & StatusBitFlag::READ_CHAN_MASK,
}
}
}
pub struct RssiBitFlag;
impl RssiBitFlag {
pub const RSSI_MASK: u16 = 0b1111_1110_0000_0000;
pub const RSSI_SHIFT: u8 = 9;
}