Index: components/proximity_auth/ble/bluetooth_low_energy_connection.h |
diff --git a/components/proximity_auth/ble/bluetooth_low_energy_connection.h b/components/proximity_auth/ble/bluetooth_low_energy_connection.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..354553b902e06067e45fcf9ab81012f053d56107 |
--- /dev/null |
+++ b/components/proximity_auth/ble/bluetooth_low_energy_connection.h |
@@ -0,0 +1,159 @@ |
+// Copyright 2015 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef COMPONENTS_PROXIMITY_AUTH_BLUETOOTH_LOW_ENERGY_CONNECTION_H |
+#define COMPONENTS_PROXIMITY_AUTH_BLUETOOTH_LOW_ENERGY_CONNECTION_H |
+ |
+#include "base/macros.h" |
+#include "base/memory/ref_counted.h" |
+#include "base/memory/scoped_ptr.h" |
+#include "base/memory/weak_ptr.h" |
+#include "components/proximity_auth/ble/fake_wire_message.h" |
+#include "components/proximity_auth/connection.h" |
+#include "device/bluetooth/bluetooth_adapter.h" |
+#include "device/bluetooth/bluetooth_device.h" |
+#include "device/bluetooth/bluetooth_gatt_characteristic.h" |
+#include "device/bluetooth/bluetooth_gatt_notify_session.h" |
+#include "device/bluetooth/bluetooth_uuid.h" |
+ |
+namespace proximity_auth { |
+ |
+class BluetoothLowEnergyConnection : public Connection, |
msarda
2015/05/05 11:56:14
Comment this class. It should ideally describe the
sacomoto
2015/05/06 13:47:58
Done.
|
+ public device::BluetoothAdapter::Observer { |
+ public: |
+ BluetoothLowEnergyConnection( |
+ const RemoteDevice& remote_device, |
+ scoped_refptr<device::BluetoothAdapter> adapter, |
+ device::BluetoothUUID remote_service_uuid, |
+ scoped_ptr<device::BluetoothGattConnection> gatt_connection); |
+ |
+ ~BluetoothLowEnergyConnection(); |
+ |
+ void Connect(); |
msarda
2015/05/05 11:56:14
Are these methods overriding Connection? If so, th
sacomoto
2015/05/06 13:47:58
Done.
|
+ |
+ void Disconnect(); |
+ |
+ protected: |
+ // proximity_auth::Connection |
+ void SendMessageImpl(scoped_ptr<WireMessage> message) override; |
+ scoped_ptr<WireMessage> DeserializeWireMessage( |
+ bool* is_incomplete_message) override; |
+ |
+ // device::BluetoothAdaptor::Observer |
+ void DeviceRemoved(device::BluetoothAdapter* adapter, |
+ device::BluetoothDevice* device) override; |
+ void GattDiscoveryCompleteForService( |
+ device::BluetoothAdapter* adapter, |
+ device::BluetoothGattService* service) override; |
+ void GattCharacteristicAdded( |
+ device::BluetoothAdapter* adapter, |
+ device::BluetoothGattCharacteristic* characteristic) override; |
+ void GattCharacteristicValueChanged( |
+ device::BluetoothAdapter* adapter, |
+ device::BluetoothGattCharacteristic* characteristic, |
+ const std::vector<uint8>& value) override; |
+ |
+ private: |
+ std::string remote_device_address() { |
msarda
2015/05/05 11:56:14
This is not a trivial method. It should be GetRemo
msarda
2015/05/05 11:56:14
Change return type to const std::string&
sacomoto
2015/05/06 13:47:58
Done.
sacomoto
2015/05/06 13:47:58
Done.
|
+ return remote_device().bluetooth_address; |
+ } |
+ |
+ // Send a invite to connect signal (defined in Socketeer library) to the |
msarda
2015/05/05 11:56:14
s/Send a invite/Sends an invite
msarda
2015/05/05 11:56:14
Remote reference to Socketeer library. That is not
sacomoto
2015/05/06 13:47:58
Done.
sacomoto
2015/05/06 13:47:58
Done.
|
+ // central. |
msarda
2015/05/05 11:56:14
central? Should this be peripheral?
sacomoto
2015/05/06 13:47:58
Done.
|
+ void SendInviteToConnectSignal(); |
+ |
+ // Called when there is an error writing the remote characteristic |
msarda
2015/05/05 11:56:14
s/writing the/writing to the
sacomoto
2015/05/06 13:47:58
Done.
|
+ // |to_peripheral_char_|. |
+ void OnWriteRemoteCharacteristicError( |
+ device::BluetoothGattService::GattErrorCode error); |
+ |
+ // Handles the discovery of a new characteristic. |
+ void HandleCharacteristicUpdate( |
+ device::BluetoothGattCharacteristic* characteristic); |
+ |
+ // The connection is complete when: (i) |to_peripheral_char_| and |
msarda
2015/05/05 11:56:14
Maybe move (i) and (ii) on different lines (like b
sacomoto
2015/05/06 13:47:58
Done.
|
+ // |from_peripheral_char_| were found, and (ii) |notify_session_| was set for |
+ // |from_peripheral_char_|. This function verifies if the connection is |
+ // complete and updates the status accordingly. There are two asyncronous |
+ // events that can cause the connection to be completed: (i) a new |
+ // characteristic is discovered (HandleCharacteristicUpdate) or (ii) a new |
+ // notify session is started (OnNotifySessionStarted). |
+ void CompleteConnection(); |
+ |
+ // Starts a notify session for |from_peripheral_char_|. |
+ void StartNotifySession(); |
+ |
+ // Called when there is an error starting a notification session for |
+ // |from_peripheral_char_|. |
msarda
2015/05/05 11:56:14
s/|from_peripheral_char_|/|from_peripheral_char_|
sacomoto
2015/05/06 13:47:58
Done.
|
+ void OnNotifySessionError(device::BluetoothGattService::GattErrorCode); |
+ |
+ // Called when a notification session is successfully started for |
+ // |from_peripheral_char_|. |
msarda
2015/05/05 11:56:14
Ditto.
sacomoto
2015/05/06 13:47:58
Done.
|
+ void OnNotifySessionStarted( |
+ scoped_ptr<device::BluetoothGattNotifySession> notify_session); |
+ |
+ // Stops |notify_session_|. |
+ void StopNotifySession(); |
+ |
+ // Updates the value of |has_to_peripheral_char| and |
+ // |has_from_peripheral_char| |
+ // when for |characteristic| or characteristics in |service|. |
+ void UpdateCharacteristicsStatus( |
+ device::BluetoothGattCharacteristic* characteristic); |
+ |
+ // Returns the device corresponding to |remote_device_address_|. |
+ device::BluetoothDevice* GetRemoteDevice(); |
+ |
+ // Returns the service corresponding to |remote_service_uuid_| in the current |
+ // device. |
+ device::BluetoothGattService* GetRemoteService(); |
+ |
+ // Returns the characteristic corresponding to |identifier| in the current |
+ // service. |
+ device::BluetoothGattCharacteristic* GetGattCharacteristic( |
+ const std::string& identifier); |
+ |
+ // The Bluetooth adapter over which the Bluetooth connection will be made. |
+ scoped_refptr<device::BluetoothAdapter> adapter_; |
+ |
+ // The uuid of the service it looks for to establish a GattConnection. |
+ const device::BluetoothUUID remote_service_uuid_; |
+ |
+ // The identifier of the service corresponding to |remote_service_uuid|. |
+ std::string remote_service_id_; |
+ |
+ // The GATT connection with the remote device. |
+ scoped_ptr<device::BluetoothGattConnection> connection_; |
+ |
+ // Characteristic used to send data to the remote device in the peripheral |
+ // role. |
+ const std::string to_peripheral_char_ = |
msarda
2015/05/05 11:56:14
Same as for from_peripheral_char_
sacomoto
2015/05/06 13:47:59
Done.
|
+ "977c6674-1239-4e72-993b-502369b8bb5a"; |
+ |
+ // Internal unique identifier for |to_peripheral_char_|. |
+ std::string to_peripheral_char_id_; |
+ |
+ // Characteristic used to receive data from the remote device in the |
+ // peripheral role. |
+ const std::string from_peripheral_char_ = |
msarda
2015/05/05 11:56:14
This is a characteristic UUID. This is not clear f
msarda
2015/05/05 11:56:14
These should be constants received from the outsid
sacomoto
2015/05/06 13:47:58
Done.
sacomoto
2015/05/06 13:47:58
Done.
|
+ "f4b904a2-a030-43b3-98a8-221c536c03cb"; |
+ |
+ // Internal unique identifier for |from_peripheral_char_|. |
+ std::string from_peripheral_char_id_; |
+ |
+ // Indicates if there is a pending notification session. Used to ensure there |
+ // is only one pending notify session. |
+ bool notify_session_pending_; |
+ |
+ // The notify session for |from_peripheral_char|. |
+ scoped_ptr<device::BluetoothGattNotifySession> notify_session_; |
+ |
+ base::WeakPtrFactory<BluetoothLowEnergyConnection> weak_ptr_factory_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(BluetoothLowEnergyConnection); |
+}; |
+ |
+} // namespace proximity_auth |
+ |
+#endif // COMPONENTS_PROXIMITY_AUTH_BLUETOOTH_LOW_ENERGY_CONNECTION_H |