xref: /haiku/src/apps/powerstatus/ACPIDriverInterface.h (revision 43687843cc9936e6f90e8a0b7f4abfcb9aa8a601)
16aed176cSClemens Zeidler /*
26aed176cSClemens Zeidler  * Copyright 2009, Haiku, Inc. All Rights Reserved.
36aed176cSClemens Zeidler  * Distributed under the terms of the MIT License.
46aed176cSClemens Zeidler  *
56aed176cSClemens Zeidler  * Authors:
66aed176cSClemens Zeidler  *		Clemens Zeidler, haiku@clemens-zeidler.de
76aed176cSClemens Zeidler  */
86aed176cSClemens Zeidler #ifndef ACPI_DRIVER_INTERFACE_H
96aed176cSClemens Zeidler #define ACPI_DRIVER_INTERFACE_H
106aed176cSClemens Zeidler 
1195ea1dabSAxel Dörfler 
126aed176cSClemens Zeidler #include "DriverInterface.h"
136aed176cSClemens Zeidler 
146aed176cSClemens Zeidler #include <Locker.h>
156aed176cSClemens Zeidler #include <ObjectList.h>
166aed176cSClemens Zeidler 
17e391ec67SClemens Zeidler 
186aed176cSClemens Zeidler const int8 kRateBufferSize = 10;
196aed176cSClemens Zeidler 
2095ea1dabSAxel Dörfler class RateBuffer {
216aed176cSClemens Zeidler public:
226aed176cSClemens Zeidler 							RateBuffer();
236aed176cSClemens Zeidler 	void					AddRate(int32 rate);
246aed176cSClemens Zeidler 	int32					GetMeanRate();
256aed176cSClemens Zeidler 
266aed176cSClemens Zeidler private:
276aed176cSClemens Zeidler 	int32					fRateBuffer[kRateBufferSize];
286aed176cSClemens Zeidler 	int8					fPosition;
296aed176cSClemens Zeidler 	int8					fSize;
306aed176cSClemens Zeidler 	int8					fCurrentSize;
316aed176cSClemens Zeidler };
326aed176cSClemens Zeidler 
336aed176cSClemens Zeidler 
3495ea1dabSAxel Dörfler class Battery {
356aed176cSClemens Zeidler public:
366aed176cSClemens Zeidler 								Battery(int driverHandler);
376aed176cSClemens Zeidler 								~Battery();
386aed176cSClemens Zeidler 
396aed176cSClemens Zeidler 	status_t					InitCheck();
406aed176cSClemens Zeidler 
41e391ec67SClemens Zeidler 	// Read battery info and update the cache.
42e391ec67SClemens Zeidler 	status_t 					ReadBatteryInfo();
43e391ec67SClemens Zeidler 	status_t 					GetBatteryInfoCached(battery_info* info);
446aed176cSClemens Zeidler 	status_t 					GetExtendedBatteryInfo(
456aed176cSClemens Zeidler 									acpi_extended_battery_info* info);
466aed176cSClemens Zeidler 
476aed176cSClemens Zeidler private:
486aed176cSClemens Zeidler 	void						_Init();
496aed176cSClemens Zeidler 
506aed176cSClemens Zeidler 
516aed176cSClemens Zeidler 	int							fDriverHandler;
526aed176cSClemens Zeidler 	status_t					fInitStatus;
536aed176cSClemens Zeidler 
546aed176cSClemens Zeidler 	acpi_extended_battery_info	fExtendedBatteryInfo;
556aed176cSClemens Zeidler 
566aed176cSClemens Zeidler 	RateBuffer					fRateBuffer;
57e391ec67SClemens Zeidler 	acpi_battery_info			fCachedAcpiInfo;
586aed176cSClemens Zeidler };
596aed176cSClemens Zeidler 
606aed176cSClemens Zeidler 
6195ea1dabSAxel Dörfler class ACPIDriverInterface : public PowerStatusDriverInterface {
626aed176cSClemens Zeidler public:
636aed176cSClemens Zeidler 	virtual					~ACPIDriverInterface();
646aed176cSClemens Zeidler 
656aed176cSClemens Zeidler 	virtual status_t		Connect();
666aed176cSClemens Zeidler 	virtual status_t 		GetBatteryInfo(battery_info* info, int32 index);
676aed176cSClemens Zeidler 	virtual status_t	 	GetExtendedBatteryInfo(
686aed176cSClemens Zeidler 								acpi_extended_battery_info* info, int32 index);
696aed176cSClemens Zeidler 
706aed176cSClemens Zeidler 	virtual int32			GetBatteryCount();
716aed176cSClemens Zeidler 
726aed176cSClemens Zeidler protected:
73e391ec67SClemens Zeidler 	// Read the battery info from the hardware.
74e391ec67SClemens Zeidler 	virtual status_t 		_ReadBatteryInfo();
75e391ec67SClemens Zeidler 
766aed176cSClemens Zeidler 	virtual void			_WatchPowerStatus();
77*43687843SFredrik Holmqvist 	virtual status_t		_FindDrivers(const char* dirpath);
786aed176cSClemens Zeidler 
796aed176cSClemens Zeidler 	BObjectList<Battery>	fDriverList;
806aed176cSClemens Zeidler 
81e391ec67SClemens Zeidler 	BLocker					fInterfaceLocker;
826aed176cSClemens Zeidler };
836aed176cSClemens Zeidler 
8495ea1dabSAxel Dörfler #endif	// ACPI_DRIVER_INTERFACE_H
85