xref: /haiku/src/apps/powerstatus/DriverInterface.h (revision 21258e2674226d6aa732321b6f8494841895af5f)
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 DRIVER_INTERFACE_H
9 #define DRIVER_INTERFACE_H
10 
11 
12 #include <Handler.h>
13 #include <Locker.h>
14 #include <ObjectList.h>
15 #include <Referenceable.h>
16 
17 #include "device/power_managment.h"
18 
19 
20 typedef BObjectList<BHandler> WatcherList;
21 
22 const uint32 kMsgUpdate = 'updt';
23 
24 
25 struct battery_info {
26 	int8		state;
27 	int32		capacity;
28 	int32		full_capacity;
29 	time_t		time_left;
30 	int32		current_rate;
31 };
32 
33 
34 /*! Handle a list of watcher and broadcast a messages to them. */
35 class Monitor {
36 public:
37 	virtual						~Monitor();
38 
39 	virtual status_t			StartWatching(BHandler* target);
40 	virtual status_t			StopWatching(BHandler* target);
41 
42 	virtual void				Broadcast(uint32 message);
43 
44 protected:
45 	WatcherList					fWatcherList;
46 };
47 
48 
49 class PowerStatusDriverInterface : public Monitor, public BReferenceable {
50 public:
51 								PowerStatusDriverInterface();
52 								~PowerStatusDriverInterface();
53 
54 	virtual status_t			StartWatching(BHandler* target);
55 	virtual status_t			StopWatching(BHandler* target);
56 	virtual void				Broadcast(uint32 message);
57 
58 	virtual status_t			Connect() = 0;
59 	virtual void				Disconnect();
60 
61 	virtual status_t 			GetBatteryInfo(int32 index,
62 									battery_info* status) = 0;
63 	virtual status_t 			GetExtendedBatteryInfo(int32 index,
64 									acpi_extended_battery_info* info) = 0;
65 
66 	virtual int32				GetBatteryCount() = 0;
67 
68 protected:
69 	virtual void				_WatchPowerStatus() = 0;
70 
71 protected:
72 	int32						fIsWatching;
73 	sem_id						fWaitSem;
74 
75 private:
76 	static int32				_ThreadWatchPowerFunction(void* data);
77 
78 	thread_id					fThread;
79 	BLocker						fListLocker;
80 };
81 
82 
83 #endif	// DRIVER_INTERFACE_H
84