#ifndef BLUETOOTH_BLUETOOTH_ADAPTER_H_
#define BLUETOOTH_BLUETOOTH_ADAPTER_H_
+#include <functional>
#include <list>
#include <map>
#include <memory>
class BluetoothInstance;
+class PowerStateListenersManager {
+ public:
+ PowerStateListenersManager() : count_(0) {
+ ScopeLogger();
+ }
+
+ ~PowerStateListenersManager() {
+ ScopeLogger();
+ power_state_listeners_map_.clear();
+ }
+
+ int Add(const std::function<void(const int)>& listener) {
+ ScopeLogger();
+ power_state_listeners_map_[count_] = listener;
+ return count_++;
+ }
+
+ void Remove(int id) {
+ ScopeLogger();
+ power_state_listeners_map_.erase(id);
+ }
+
+ void FireAll(bool state) {
+ ScopeLogger();
+ for (const auto& it : power_state_listeners_map_) {
+ it.second(state);
+ }
+ }
+
+ private:
+ std::map<int, std::function<void(const int)>> power_state_listeners_map_;
+ int count_;
+};
+
class BluetoothAdapter {
public:
/**
void UnregisterUUID(const std::string& uuid, int callback_handle);
void SetChangeListenerCallback(bool val);
+ int AddPowerStateListener(const std::function<void(const int)>& listener);
+ void RemovePowerStateListener(int id);
private:
BluetoothAdapter(const BluetoothAdapter&) = delete;
BluetoothAdapter& operator=(const BluetoothAdapter&) = delete;
+ PowerStateListenersManager power_state_listeners_;
+
static void StateChangedCB(int result, bt_adapter_state_e state, void* user_data);
static void NameChangedCB(char* name, void* user_data);
static void VisibilityChangedCB(int result, bt_adapter_visibility_mode_e mode, void* user_data);