hardware 0.0.9

A no_std bare-metal hardware abstraction layer — all port I/O, memory and swap allocations are guarded at runtime. Do not consider this dependency stable before x.1.x
Documentation
use core::sync::atomic::{AtomicU8, Ordering};

#[derive(Copy, Clone, PartialEq, Eq, Debug)]
pub enum CpuPowerState {
    Active,
    Idle,
    DeepIdle,
    Offline,
}

static STATE: AtomicU8 = AtomicU8::new(0);

pub fn set_state(s: CpuPowerState) {
    let val = match s {
        CpuPowerState::Active => 0,
        CpuPowerState::Idle => 1,
        CpuPowerState::DeepIdle => 2,
        CpuPowerState::Offline => 3,
    };
    STATE.store(val, Ordering::Release);
}

pub fn get_state() -> CpuPowerState {
    match STATE.load(Ordering::Acquire) {
        1 => CpuPowerState::Idle,
        2 => CpuPowerState::DeepIdle,
        3 => CpuPowerState::Offline,
        _ => CpuPowerState::Active,
    }
}