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