use core::ffi::CStr;
use core::mem;
use flipperzero_sys as sys;
use flipperzero_sys::furi::UnsafeRecord;
pub type PowerBootMode = sys::PowerBootMode;
pub type PowerInfo = sys::PowerInfo;
#[derive(Clone)]
pub struct Power {
record: UnsafeRecord<sys::Power>,
}
impl Power {
pub const NAME: &CStr = c"power";
pub fn open() -> Self {
Self {
record: unsafe { UnsafeRecord::open(Self::NAME) },
}
}
#[inline]
pub fn as_ptr(&self) -> *mut sys::Power {
self.record.as_ptr()
}
pub fn power_off(&self) {
unsafe { sys::power_off(self.as_ptr()) }
}
pub fn reboot(&self, mode: PowerBootMode) {
unsafe { sys::power_reboot(self.as_ptr(), mode) }
}
pub fn get_info(&self) -> PowerInfo {
unsafe {
let mut power_info = mem::zeroed();
sys::power_get_info(self.as_ptr(), &raw mut power_info);
power_info
}
}
pub fn is_battery_healthy(&self) -> bool {
unsafe { sys::power_is_battery_healthy(self.as_ptr()) }
}
pub fn enable_low_battery_level_notification(&self, enable: bool) {
unsafe {
sys::power_enable_low_battery_level_notification(self.as_ptr(), enable);
}
}
}