crosvm/power_monitor/src/lib.rs

50 lines
1.2 KiB
Rust
Raw Normal View History

// Copyright 2020 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
use std::error::Error;
use std::os::unix::io::RawFd;
pub trait PowerMonitor {
fn poll_fd(&self) -> RawFd;
fn read_message(&mut self) -> std::result::Result<Option<PowerData>, Box<dyn Error>>;
}
pub struct PowerData {
pub ac_online: bool,
pub battery: Option<BatteryData>,
}
pub struct BatteryData {
pub status: BatteryStatus,
pub percent: u32,
/// Battery voltage in microvolts.
pub voltage: u32,
/// Battery current in microamps.
pub current: u32,
/// Battery charge counter in microampere hours.
pub charge_counter: u32,
/// Battery full charge counter in microampere hours.
pub charge_full: u32,
}
pub enum BatteryStatus {
Unknown,
Charging,
Discharging,
NotCharging,
}
pub trait CreatePowerMonitorFn:
Send + Fn() -> std::result::Result<Box<dyn PowerMonitor>, Box<dyn Error>>
{
}
impl<T> CreatePowerMonitorFn for T where
T: Send + Fn() -> std::result::Result<Box<dyn PowerMonitor>, Box<dyn Error>>
{
}
#[cfg(feature = "powerd")]
pub mod powerd;