• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_DESCRIPTOR_CLIENT_H_
6 #define CHROMEOS_DBUS_BLUETOOTH_GATT_DESCRIPTOR_CLIENT_H_
7 
8 #include <string>
9 
10 #include "base/basictypes.h"
11 #include "base/callback.h"
12 #include "chromeos/chromeos_export.h"
13 #include "chromeos/dbus/dbus_client.h"
14 #include "dbus/object_path.h"
15 #include "dbus/property.h"
16 
17 namespace chromeos {
18 
19 // BluetoothGattDescriptorClient is used to communicate with remote GATT
20 // characteristic descriptor objects exposed by the Bluetooth daemon.
21 class CHROMEOS_EXPORT BluetoothGattDescriptorClient : public DBusClient {
22  public:
23   // Structure of properties associated with GATT descriptors.
24   struct Properties : public dbus::PropertySet {
25     // The 128-bit characteristic descriptor UUID. [read-only]
26     dbus::Property<std::string> uuid;
27 
28     // Object path of the GATT characteristic the descriptor belongs to.
29     // [read-only]
30     dbus::Property<dbus::ObjectPath> characteristic;
31 
32     Properties(dbus::ObjectProxy* object_proxy,
33                const std::string& interface_name,
34                const PropertyChangedCallback& callback);
35     virtual ~Properties();
36   };
37 
38   // Interface for observing changes from a remote GATT characteristic
39   // descriptor.
40   class Observer {
41    public:
~Observer()42     virtual ~Observer() {}
43 
44     // Called when the GATT descriptor with object path |object_path| is added
45     // to the system.
GattDescriptorAdded(const dbus::ObjectPath & object_path)46     virtual void GattDescriptorAdded(const dbus::ObjectPath& object_path) {}
47 
48     // Called when the GATT descriptor with object path |object_path| is removed
49     // from the system.
GattDescriptorRemoved(const dbus::ObjectPath & object_path)50     virtual void GattDescriptorRemoved(const dbus::ObjectPath& object_path) {}
51 
52     // Called when the GATT descriptor with object path |object_path| has a
53     // change in the value of the property named |property_name|.
GattDescriptorPropertyChanged(const dbus::ObjectPath & object_path,const std::string & property_name)54     virtual void GattDescriptorPropertyChanged(
55         const dbus::ObjectPath& object_path,
56         const std::string& property_name) {}
57   };
58 
59   // Callbacks used to report the result of asynchronous methods.
60   typedef base::Callback<void(const std::string& error_name,
61                               const std::string& error_message)> ErrorCallback;
62   typedef base::Callback<void(const std::vector<uint8>& value)> ValueCallback;
63 
64   virtual ~BluetoothGattDescriptorClient();
65 
66   // Adds and removes observers for events on all remote GATT descriptors. Check
67   // the |object_path| parameter of observer methods to determine which GATT
68   // descriptor is issuing the event.
69   virtual void AddObserver(Observer* observer) = 0;
70   virtual void RemoveObserver(Observer* observer) = 0;
71 
72   // Returns the list of GATT descriptor object paths known to the system.
73   virtual std::vector<dbus::ObjectPath> GetDescriptors() = 0;
74 
75   // Obtain the properties for the GATT descriptor with object path
76   // |object_path|. Values should be copied if needed.
77   virtual Properties* GetProperties(const dbus::ObjectPath& object_path) = 0;
78 
79   // Issues a request to read the value of GATT descriptor with object path
80   // |object_path| and returns the value in |callback| on success. On error,
81   // invokes |error_callback|.
82   virtual void ReadValue(const dbus::ObjectPath& object_path,
83                          const ValueCallback& callback,
84                          const ErrorCallback& error_callback) = 0;
85 
86   // Issues a request to write the value of GATT descriptor with object path
87   // |object_path| with value |value|. Invokes |callback| on success and
88   // |error_callback| on failure.
89   virtual void WriteValue(const dbus::ObjectPath& object_path,
90                           const std::vector<uint8>& value,
91                           const base::Closure& callback,
92                           const ErrorCallback& error_callback) = 0;
93 
94   // Creates the instance.
95   static BluetoothGattDescriptorClient* Create();
96 
97   // Constants used to indicate exceptional error conditions.
98   static const char kNoResponseError[];
99   static const char kUnknownDescriptorError[];
100 
101  protected:
102   BluetoothGattDescriptorClient();
103 
104  private:
105   DISALLOW_COPY_AND_ASSIGN(BluetoothGattDescriptorClient);
106 };
107 
108 }  // namespace chromeos
109 
110 #endif  // CHROMEOS_DBUS_BLUETOOTH_GATT_DESCRIPTOR_CLIENT_H_
111