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 TargetPlatform {
    Generic,
    Server,
    Embedded,
    Desktop,
}

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

pub fn set_platform(p: TargetPlatform) {
    let val = match p {
        TargetPlatform::Generic => 0,
        TargetPlatform::Server => 1,
        TargetPlatform::Embedded => 2,
        TargetPlatform::Desktop => 3,
    };
    PLATFORM.store(val, Ordering::Release);
}

pub fn get_platform() -> TargetPlatform {
    match PLATFORM.load(Ordering::Acquire) {
        1 => TargetPlatform::Server,
        2 => TargetPlatform::Embedded,
        3 => TargetPlatform::Desktop,
        _ => TargetPlatform::Generic,
    }
}