1 // Copyright 2014 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CHROMEOS_DBUS_BLUETOOTH_GATT_SERVICE_CLIENT_H_ 6 #define CHROMEOS_DBUS_BLUETOOTH_GATT_SERVICE_CLIENT_H_ 7 8 #include <string> 9 #include <vector> 10 11 #include "chromeos/chromeos_export.h" 12 #include "chromeos/dbus/dbus_client.h" 13 #include "dbus/object_path.h" 14 #include "dbus/property.h" 15 16 namespace chromeos { 17 18 // BluetoothGattServiceClient is used to communicate with remote GATT service 19 // objects exposed by the Bluetooth daemon. 20 class CHROMEOS_EXPORT BluetoothGattServiceClient : public DBusClient { 21 public: 22 // Structure of properties associated with GATT services. 23 struct Properties : public dbus::PropertySet { 24 // The 128-bit service UUID. [read-only] 25 dbus::Property<std::string> uuid; 26 27 // Object path of the Bluetooth device that the GATT service belongs to. 28 dbus::Property<dbus::ObjectPath> device; 29 30 // Whether or not this service is a primary service. 31 dbus::Property<bool> primary; 32 33 // Array of object paths representing the characteristics of this service. 34 // [read-only] 35 dbus::Property<std::vector<dbus::ObjectPath> > characteristics; 36 37 // Array of object paths representing the included services of this service. 38 // [read-only] 39 dbus::Property<std::vector<dbus::ObjectPath> > includes; 40 41 Properties(dbus::ObjectProxy* object_proxy, 42 const std::string& interface_name, 43 const PropertyChangedCallback& callback); 44 virtual ~Properties(); 45 }; 46 47 // Interface for observing changes from a remote GATT service. 48 class Observer { 49 public: 50 virtual ~Observer() {} 51 52 // Called when the GATT service with object path |object_path| is added to 53 // the system. 54 virtual void GattServiceAdded(const dbus::ObjectPath& object_path) {} 55 56 // Called when the GATT service with object path |object_path| is removed 57 // from the system. 58 virtual void GattServiceRemoved(const dbus::ObjectPath& object_path) {} 59 60 // Called when the GATT service with object path |object_path| has a change 61 // in the value of the property named |property_name|. 62 virtual void GattServicePropertyChanged(const dbus::ObjectPath& object_path, 63 const std::string& property_name) {} 64 }; 65 66 virtual ~BluetoothGattServiceClient(); 67 68 // Adds and removes observers for events on all remote GATT services. Check 69 // the |object_path| parameter of observer methods to determine which GATT 70 // service is issuing the event. 71 virtual void AddObserver(Observer* observer) = 0; 72 virtual void RemoveObserver(Observer* observer) = 0; 73 74 // Returns the list of GATT service object paths known to the system. 75 virtual std::vector<dbus::ObjectPath> GetServices() = 0; 76 77 // Obtain the properties for the GATT service with object path |object_path|. 78 // Values should be copied if needed. 79 virtual Properties* GetProperties(const dbus::ObjectPath& object_path) = 0; 80 81 // Creates the instance. 82 static BluetoothGattServiceClient* Create(); 83 84 protected: 85 BluetoothGattServiceClient(); 86 87 private: 88 DISALLOW_COPY_AND_ASSIGN(BluetoothGattServiceClient); 89 }; 90 91 } // namespace chromeos 92 93 #endif // CHROMEOS_DBUS_BLUETOOTH_GATT_SERVICE_CLIENT_H_ 94