1 // Copyright 2020 The Chromium OS Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 use std::error::Error; 6 use std::os::unix::io::RawFd; 7 8 pub trait PowerMonitor { poll_fd(&self) -> RawFd9 fn poll_fd(&self) -> RawFd; read_message(&mut self) -> std::result::Result<Option<PowerData>, Box<dyn Error>>10 fn read_message(&mut self) -> std::result::Result<Option<PowerData>, Box<dyn Error>>; 11 } 12 13 pub struct PowerData { 14 pub ac_online: bool, 15 pub battery: Option<BatteryData>, 16 } 17 18 pub struct BatteryData { 19 pub status: BatteryStatus, 20 pub percent: u32, 21 /// Battery voltage in microvolts. 22 pub voltage: u32, 23 /// Battery current in microamps. 24 pub current: u32, 25 /// Battery charge counter in microampere hours. 26 pub charge_counter: u32, 27 /// Battery full charge counter in microampere hours. 28 pub charge_full: u32, 29 } 30 31 pub enum BatteryStatus { 32 Unknown, 33 Charging, 34 Discharging, 35 NotCharging, 36 } 37 38 pub trait CreatePowerMonitorFn: 39 Send + Fn() -> std::result::Result<Box<dyn PowerMonitor>, Box<dyn Error>> 40 { 41 } 42 43 impl<T> CreatePowerMonitorFn for T where 44 T: Send + Fn() -> std::result::Result<Box<dyn PowerMonitor>, Box<dyn Error>> 45 { 46 } 47 48 #[cfg(feature = "powerd")] 49 pub mod powerd; 50