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