xref: /haiku/src/apps/powerstatus/ACPIDriverInterface.h (revision 4e3137c085bae361922078f123dceb92da700640)
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