123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// found in the LICENSE file. 423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#ifndef CHROMEOS_DBUS_BLUETOOTH_GATT_SERVICE_CLIENT_H_ 623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#define CHROMEOS_DBUS_BLUETOOTH_GATT_SERVICE_CLIENT_H_ 723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include <string> 923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include <vector> 1023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 1123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "chromeos/chromeos_export.h" 1223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "chromeos/dbus/dbus_client.h" 1323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "dbus/object_path.h" 1423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "dbus/property.h" 1523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 1623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)namespace chromeos { 1723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 1823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// BluetoothGattServiceClient is used to communicate with remote GATT service 1923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// objects exposed by the Bluetooth daemon. 2023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)class CHROMEOS_EXPORT BluetoothGattServiceClient : public DBusClient { 2123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) public: 2223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) // Structure of properties associated with GATT services. 2323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) struct Properties : public dbus::PropertySet { 2423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) // The 128-bit service UUID. [read-only] 2523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) dbus::Property<std::string> uuid; 2623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 27c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Object path of the Bluetooth device that the GATT service belongs to. 28c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch dbus::Property<dbus::ObjectPath> device; 29c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 30c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Whether or not this service is a primary service. 31c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch dbus::Property<bool> primary; 32c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Array of object paths representing the characteristics of this service. 345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // [read-only] 355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) dbus::Property<std::vector<dbus::ObjectPath> > characteristics; 365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) // Array of object paths representing the included services of this service. 3823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) // [read-only] 3923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) dbus::Property<std::vector<dbus::ObjectPath> > includes; 4023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 4123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) Properties(dbus::ObjectProxy* object_proxy, 4223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) const std::string& interface_name, 4323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) const PropertyChangedCallback& callback); 4423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) virtual ~Properties(); 4523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) }; 4623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 4723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) // Interface for observing changes from a remote GATT service. 4823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) class Observer { 4923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) public: 5023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) virtual ~Observer() {} 5123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 5223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) // Called when the GATT service with object path |object_path| is added to 5323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) // the system. 5423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) virtual void GattServiceAdded(const dbus::ObjectPath& object_path) {} 5523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 5623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) // Called when the GATT service with object path |object_path| is removed 5723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) // from the system. 5823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) virtual void GattServiceRemoved(const dbus::ObjectPath& object_path) {} 5923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 6023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) // Called when the GATT service with object path |object_path| has a change 6123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) // in the value of the property named |property_name|. 6223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) virtual void GattServicePropertyChanged(const dbus::ObjectPath& object_path, 6323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) const std::string& property_name) {} 6423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) }; 6523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 6623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) virtual ~BluetoothGattServiceClient(); 6723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 6823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) // Adds and removes observers for events on all remote GATT services. Check 6923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) // the |object_path| parameter of observer methods to determine which GATT 7023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) // service is issuing the event. 7123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) virtual void AddObserver(Observer* observer) = 0; 7223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) virtual void RemoveObserver(Observer* observer) = 0; 7323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 7423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) // Returns the list of GATT service object paths known to the system. 7523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) virtual std::vector<dbus::ObjectPath> GetServices() = 0; 7623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 7723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) // Obtain the properties for the GATT service with object path |object_path|. 7823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) // Values should be copied if needed. 7923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) virtual Properties* GetProperties(const dbus::ObjectPath& object_path) = 0; 8023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 8123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) // Creates the instance. 8223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) static BluetoothGattServiceClient* Create(); 8323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 8423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) protected: 8523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) BluetoothGattServiceClient(); 8623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 8723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) private: 8823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(BluetoothGattServiceClient); 8923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)}; 9023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 9123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} // namespace chromeos 9223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 9323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#endif // CHROMEOS_DBUS_BLUETOOTH_GATT_SERVICE_CLIENT_H_ 94