1 /* 2 * Copyright 2009-2015, Haiku, Inc. All Rights Reserved. 3 * Distributed under the terms of the MIT License. 4 * 5 * Authors: 6 * Clemens Zeidler, haiku@clemens-zeidler.de 7 */ 8 #ifndef ACPI_DRIVER_INTERFACE_H 9 #define ACPI_DRIVER_INTERFACE_H 10 11 12 #include "DriverInterface.h" 13 14 #include <Locker.h> 15 #include <ObjectList.h> 16 17 18 const int8 kRateBufferSize = 10; 19 20 class RateBuffer { 21 public: 22 RateBuffer(); 23 void AddRate(int32 rate); 24 int32 GetMeanRate(); 25 26 private: 27 int32 fRateBuffer[kRateBufferSize]; 28 int8 fPosition; 29 int8 fSize; 30 int8 fCurrentSize; 31 }; 32 33 34 class Battery { 35 public: 36 Battery(int driverHandler); 37 ~Battery(); 38 39 status_t InitCheck(); 40 41 // Read battery info and update the cache. 42 status_t UpdateBatteryInfo(); 43 status_t GetBatteryInfoCached(battery_info* info); 44 status_t GetExtendedBatteryInfo( 45 acpi_extended_battery_info* info); 46 47 private: 48 void _Init(); 49 50 private: 51 int fDriverHandler; 52 status_t fInitStatus; 53 54 acpi_extended_battery_info fExtendedBatteryInfo; 55 56 RateBuffer fRateBuffer; 57 acpi_battery_info fCachedInfo; 58 }; 59 60 61 class ACPIDriverInterface : public PowerStatusDriverInterface { 62 public: 63 ACPIDriverInterface(); 64 virtual ~ACPIDriverInterface(); 65 66 virtual status_t Connect(); 67 virtual status_t GetBatteryInfo(int32 index, battery_info* info); 68 virtual status_t GetExtendedBatteryInfo(int32 index, 69 acpi_extended_battery_info* info); 70 71 virtual int32 GetBatteryCount(); 72 73 protected: 74 // Read the battery info from the hardware. 75 virtual status_t _UpdateBatteryInfo(); 76 77 virtual void _WatchPowerStatus(); 78 virtual status_t _FindDrivers(const char* dirpath); 79 80 private: 81 BLocker fInterfaceLocker; 82 BObjectList<Battery> fDriverList; 83 }; 84 85 #endif // ACPI_DRIVER_INTERFACE_H 86