#[cfg(not(feature = "brightness-12bit"))]
mod inner {
pub type Brightness = u8;
pub const MAX_BRIGHTNESS: u32 = 255;
pub const DUTY_SCALE_NUM: u32 = 257;
#[inline]
pub fn to_u32(b: Brightness) -> u32 {
b as u32
}
#[inline]
pub fn from_u32_clamped(v: u32) -> Brightness {
v.min(MAX_BRIGHTNESS) as u8
}
#[inline]
pub fn from_percent(pct: u8) -> Brightness {
let p = pct.min(100) as u32;
let x = (p << 8).wrapping_sub(p).wrapping_add(50);
(x.wrapping_add(x << 3).wrapping_add(x << 5) >> 12) as u8
}
#[inline]
pub fn max_value() -> Brightness {
Brightness::MAX
}
#[inline]
pub fn min_value() -> Brightness {
Brightness::default()
}
}
#[cfg(feature = "brightness-12bit")]
mod inner {
use arbitrary_int::prelude::*;
use arbitrary_int::u12;
pub type Brightness = u12;
pub const MAX_BRIGHTNESS: u32 = 4095;
pub const DUTY_SCALE_NUM: u32 = 16;
#[inline]
pub fn to_u32(b: Brightness) -> u32 {
u16::from(b) as u32
}
#[inline]
pub fn from_u32_clamped(v: u32) -> Brightness {
u12::new((v.min(MAX_BRIGHTNESS)) as u16)
}
#[inline]
pub fn from_percent(pct: u8) -> Brightness {
let p = pct.min(100) as u32;
let v = (p * MAX_BRIGHTNESS + 50) / 100;
u12::new(v as u16)
}
#[inline]
pub fn max_value() -> Brightness {
Brightness::MAX
}
#[inline]
pub fn min_value() -> Brightness {
Brightness::default()
}
}
pub(crate) use inner::*;