1 /* 2 * Copyright 2009, 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(battery_info* status, int32 index) = 0; 62 virtual status_t GetExtendedBatteryInfo(acpi_extended_battery_info* info, 63 int32 index) = 0; 64 65 virtual int32 GetBatteryCount() = 0; 66 67 protected: 68 virtual void _WatchPowerStatus() = 0; 69 70 int32 fIsWatching; 71 sem_id fWaitSem; 72 73 private: 74 static int32 _ThreadWatchPowerFunction(void* data); 75 76 thread_id fThread; 77 BLocker fListLocker; 78 }; 79 80 81 #endif // DRIVER_INTERFACE_H 82