OSDN Git Service

DO NOT MERGE ANYWHERE Don\'t send BT+BCC if local device doesn\'t support codec negot...
[android-x86/system-bt.git] / service / low_energy_client.h
index c1e787d..45ff662 100644 (file)
 
 namespace bluetooth {
 
+struct ConnComparator {
+    bool operator()(const bt_bdaddr_t& a, const bt_bdaddr_t& b) const {
+        return memcmp(&a, &b, sizeof(bt_bdaddr_t)) < 0;
+    }
+};
+
 class Adapter;
 
 // A LowEnergyClient represents an application's handle to perform various
@@ -55,6 +61,14 @@ class LowEnergyClient : private hal::BluetoothGattInterface::ClientObserver,
     virtual void OnScanResult(LowEnergyClient* client,
                               const ScanResult& scan_result) = 0;
 
+    // Called asynchronously to notify the delegate of connection state change
+    virtual void OnConnectionState(LowEnergyClient* client, int status,
+                                   const char* address, bool connected) = 0;
+
+    // Called asynchronously to notify the delegate of mtu change
+    virtual void OnMtuChanged(LowEnergyClient* client, int status, const char* address,
+                              int mtu) = 0;
+
    private:
     DISALLOW_COPY_AND_ASSIGN(Delegate);
   };
@@ -70,6 +84,19 @@ class LowEnergyClient : private hal::BluetoothGattInterface::ClientObserver,
   // Callback type used to return the result of asynchronous operations below.
   using StatusCallback = std::function<void(BLEStatus)>;
 
+  // Initiates a BLE connection do device with address |address|. If
+  // |is_direct| is set, use direct connect procedure. Return true on success
+  //, false otherwise.
+  bool Connect(std::string address, bool is_direct);
+
+  // Disconnect from previously connected BLE device with address |address|.
+  // Return true on success, false otherwise.
+  bool Disconnect(std::string address);
+
+  // Sends request to set MTU to |mtu| for device with address |address|.
+  // Return true on success, false otherwise.
+  bool SetMtu(std::string address, int mtu);
+
   // Initiates a BLE device scan for this client using the given |settings| and
   // |filters|. See the documentation for ScanSettings and ScanFilter for how
   // these parameters can be configured. Return true on success, false
@@ -102,7 +129,7 @@ class LowEnergyClient : private hal::BluetoothGattInterface::ClientObserver,
 
   // Returns the current advertising settings.
   const AdvertiseSettings& advertise_settings() const {
-   return advertise_settings_;
+    return advertise_settings_;
   }
 
   // Returns the current scan settings.
@@ -123,6 +150,16 @@ class LowEnergyClient : private hal::BluetoothGattInterface::ClientObserver,
   void ScanResultCallback(
       hal::BluetoothGattInterface* gatt_iface,
       const bt_bdaddr_t& bda, int rssi, uint8_t* adv_data) override;
+
+  void ConnectCallback(
+      hal::BluetoothGattInterface* gatt_iface, int conn_id, int status,
+      int client_id, const bt_bdaddr_t& bda) override;
+  void DisconnectCallback(
+      hal::BluetoothGattInterface* gatt_iface, int conn_id, int status,
+      int client_id, const bt_bdaddr_t& bda) override;
+  void MtuChangedCallback(
+      hal::BluetoothGattInterface* gatt_iface, int conn_id, int status,
+      int mtu) override;
   void MultiAdvEnableCallback(
       hal::BluetoothGattInterface* gatt_iface,
       int client_id, int status) override;
@@ -190,6 +227,13 @@ class LowEnergyClient : private hal::BluetoothGattInterface::ClientObserver,
   std::mutex delegate_mutex_;
   Delegate* delegate_;
 
+  // Protects device connection related members below.
+  std::mutex connection_fields_lock_;
+
+  // Maps bluetooth address to connection id
+  //TODO(jpawlowski): change type to bimap
+  std::map<const bt_bdaddr_t, int, ConnComparator> connection_ids_;
+
   DISALLOW_COPY_AND_ASSIGN(LowEnergyClient);
 };