use bitcraft::{bitenum, bitstruct};
bitenum! {
pub enum PowerState(2) {
SLEEP = 0,
IDLE = 1,
ACTIVE = 2,
TURBO = 3,
}
}
bitstruct! {
pub struct ControlRegister(u32) {
pub enabled: bool = 1, pub interrupts: bool = 1, pub dma_ready: bool = 1, pub power: PowerState = 2, pub error_code: u8 = 4, pub target_freq: u16 = 16, pub reserved: u8 = 7, }
}
#[test]
fn test_control_register_example() {
let mut reg = ControlRegister::default()
.with_enabled(true)
.with_interrupts(false)
.with_power(PowerState::SLEEP)
.with_target_freq(1200);
assert_eq!(reg.to_bits() & 0x1, 1); assert_eq!(reg.power(), PowerState::SLEEP);
assert_eq!(reg.target_freq(), 1200);
reg.set_power(PowerState::TURBO);
reg.set_target_freq(2400);
reg.set_interrupts(true);
assert_eq!(reg.power(), PowerState::TURBO);
assert_eq!(reg.target_freq(), 2400);
assert!(reg.interrupts());
assert!(reg.enabled());
assert_eq!(reg.to_bits() & 0x1F, 0x1B); }