• 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// The <code>chrome.bluetoothLowEnergy</code> API is used to communicate with
6// Bluetooth Smart (Low Energy) devices using the
7// <a href="https://developer.bluetooth.org/TechnologyOverview/Pages/GATT.aspx">
8// Generic Attribute Profile (GATT)</a>.
9namespace bluetoothLowEnergy {
10  // Values representing the possible properties of a characteristic.
11  enum CharacteristicProperty {broadcast, read, writeWithoutResponse, write,
12                               notify, indicate, authenticatedSignedWrites,
13                               extendedProperties, reliableWrite,
14                               writableAuxiliaries};
15
16  // Represents a peripheral's Bluetooth GATT Service, a collection of
17  // characteristics and relationships to other services that encapsulate
18  // the behavior of part of a device.
19  dictionary Service {
20    // The UUID of the service, e.g. 0000180d-0000-1000-8000-00805f9b34fb.
21    DOMString uuid;
22
23    // Indicates whether the type of this service is primary or secondary.
24    boolean isPrimary;
25
26    // Indicates whether this service represents a local service hosted by the
27    // application and available to other peripherals, or a remote service
28    // hosted and received from a remote peripheral.
29    [nodoc] boolean isLocal;
30
31    // Returns the identifier assigned to this service. Use the instance ID to
32    // distinguish between services from a peripheral with the same UUID and
33    // to make function calls that take in a service identifier. Present, if
34    // this instance represents a remote service.
35    DOMString? instanceId;
36
37    // The device address of the remote peripheral that the GATT service belongs
38    // to. Present, if this instance represents a remote service.
39    DOMString? deviceAddress;
40  };
41
42  // Represents a GATT characteristic, which is a basic data element that
43  // provides further information about a peripheral's service.
44  dictionary Characteristic {
45    // The UUID of the characteristic, e.g.
46    // 00002a37-0000-1000-8000-00805f9b34fb.
47    DOMString uuid;
48
49    // Indicates whether this characteristic represents a local characteristic
50    // hosted by the application and available to other peripherals, or a remote
51    // characteristic hosted and received from a remote peripheral.
52    [nodoc] boolean isLocal;
53
54    // The GATT service this characteristic belongs to.
55    Service service;
56
57    // The properties of this characteristic.
58    CharacteristicProperty[] properties;
59
60    // Returns the identifier assigned to this characteristic. Use the instance
61    // ID to distinguish between characteristics from a peripheral with the same
62    // UUID and to make function calls that take in a characteristic identifier.
63    // Present, if this instance represents a remote characteristic.
64    DOMString? instanceId;
65
66    // The currently cached characteristic value. This value gets updated when
67    // the value of the characteristic is read or updated via a notification
68    // or indication.
69    ArrayBuffer? value;
70  };
71
72  // Represents a GATT characteristic descriptor, which provides further
73  // information about a characteristic's value.
74  dictionary Descriptor {
75    // The UUID of the characteristic descriptor, e.g.
76    // 00002902-0000-1000-8000-00805f9b34fb.
77    DOMString uuid;
78
79    // Indicates whether this descriptor represents a local descriptor
80    // hosted by the application and available to other peripherals, or a remote
81    // descriptor hosted and received from a remote peripheral.
82    [nodoc] boolean isLocal;
83
84    // The GATT characteristic this descriptor belongs to.
85    Characteristic characteristic;
86
87    // Returns the identifier assigned to this descriptor. Use the instance ID
88    // to distinguish between descriptors from a peripheral with the same UUID
89    // and to make function calls that take in a descriptor identifier. Present,
90    // if this instance represents a remote characteristic.
91    DOMString? instanceId;
92
93    // The currently cached descriptor value. This value gets updated when
94    // the value of the descriptor is read.
95    ArrayBuffer? value;
96  };
97
98  // The connection properties specified during a call to $(ref:connect).
99  dictionary ConnectProperties {
100    // Flag indicating whether a connection to the device is left open when the
101    // event page of the application is unloaded (see <a
102    // href="http://developer.chrome.com/apps/app_lifecycle.html">Manage App
103    // Lifecycle</a>). The default value is <code>false.</code>
104    boolean persistent;
105  };
106
107  // Optional characteristic notification session properties specified during a
108  // call to $(ref:startCharacteristicNotifications).
109  dictionary NotificationProperties {
110    // Flag indicating whether the app should receive notifications when the
111    // event page of the application is unloaded (see <a
112    // href="http://developer.chrome.com/apps/app_lifecycle.html">Manage App
113    // Lifecycle</a>). The default value is <code>false</code>.
114    boolean persistent;
115  };
116
117  callback CharacteristicCallback = void(Characteristic result);
118  callback CharacteristicsCallback = void(Characteristic[] result);
119  callback DescriptorCallback = void(Descriptor result);
120  callback DescriptorsCallback = void(Descriptor[] result);
121  callback ResultCallback = void();
122  callback ServiceCallback = void(Service result);
123  callback ServicesCallback = void(Service[] result);
124
125  // These functions all report failures via chrome.runtime.lastError.
126  interface Functions {
127    // Establishes a connection between the application and the device with the
128    // given address. A device may be already connected and its GATT services
129    // available without calling <code>connect</code>, however, an app that
130    // wants to access GATT services of a device should call this function to
131    // make sure that a connection to the device is maintained. If the device
132    // is not connected, all GATT services of the device will be discovered
133    // after a successful call to <code>connect</code>.
134    // |deviceAddress| : The Bluetooth address of the remote device to which a
135    // GATT connection should be opened.
136    // |properties| : Connection properties (optional).
137    // |callback| : Called when the connect request has completed.
138    static void connect(DOMString deviceAddress,
139                        optional ConnectProperties properties,
140                        ResultCallback callback);
141
142    // Closes the app's connection to the device with the given address. Note
143    // that this will not always destroy the physical link itself, since there
144    // may be other apps with open connections.
145    // |deviceAddress| : The Bluetooth address of the remote device.
146    // |callback| : Called when the disconnect request has completed.
147    static void disconnect(DOMString deviceAddress,
148                           optional ResultCallback callback);
149
150    // Get the GATT service with the given instance ID.
151    // |serviceId| : The instance ID of the requested GATT service.
152    // |callback| : Called with the requested Service object.
153    static void getService(DOMString serviceId, ServiceCallback callback);
154
155    // Get all the GATT services that were discovered on the remote device with
156    // the given device address.
157    // |deviceAddress| : The Bluetooth address of the remote device whose GATT
158    // services should be returned.
159    // |callback| : Called with the list of requested Service objects.
160    static void getServices(DOMString deviceAddress, ServicesCallback callback);
161
162    // Get the GATT characteristic with the given instance ID that belongs to
163    // the given GATT service, if the characteristic exists.
164    // |characteristicId| : The instance ID of the requested GATT
165    // characteristic.
166    // |callback| : Called with the requested Characteristic object.
167    static void getCharacteristic(DOMString characteristicId,
168                                  CharacteristicCallback callback);
169
170    // Get a list of all discovered GATT characteristics that belong to the
171    // given service.
172    // |serviceId| : The instance ID of the GATT service whose characteristics
173    // should be returned.
174    // |callback| : Called with the list of characteristics that belong to the
175    // given service.
176    static void getCharacteristics(DOMString serviceId,
177                                   CharacteristicsCallback callback);
178
179    // Get a list of GATT services that are included by the given service.
180    // |serviceId| : The instance ID of the GATT service whose included
181    // services should be returned.
182    // |callback| : Called with the list of GATT services included from the
183    // given service.
184    static void getIncludedServices(DOMString serviceId,
185                                    ServicesCallback callback);
186
187    // Get the GATT characteristic descriptor with the given instance ID.
188    // |descriptorId| : The instance ID of the requested GATT characteristic
189    // descriptor.
190    // |callback| : Called with the requested Descriptor object.
191    static void getDescriptor(DOMString descriptorId,
192                              DescriptorCallback callback);
193
194    // Get a list of GATT characteristic descriptors that belong to the given
195    // characteristic.
196    // |characteristicId| : The instance ID of the GATT characteristic whose
197    // descriptors should be returned.
198    // |callback| : Called with the list of descriptors that belong to the given
199    // characteristic.
200    static void getDescriptors(DOMString characteristicId,
201                               DescriptorsCallback callback);
202
203    // Retrieve the value of a specified characteristic from a remote
204    // peripheral.
205    // |characteristicId| : The instance ID of the GATT characteristic whose
206    // value should be read from the remote device.
207    // |callback| : Called with the Characteristic object whose value was
208    // requested. The <code>value</code> field of the returned Characteristic
209    // object contains the result of the read request.
210    static void readCharacteristicValue(DOMString characteristicId,
211                                        CharacteristicCallback callback);
212
213    // Write the value of a specified characteristic from a remote peripheral.
214    // |characteristicId| : The instance ID of the GATT characteristic whose
215    // value should be written to.
216    // |value| : The value that should be sent to the remote characteristic as
217    // part of the write request.
218    // |callback| : Called when the write request has completed.
219    static void writeCharacteristicValue(DOMString characteristicId,
220                                         ArrayBuffer value,
221                                         ResultCallback callback);
222
223    // Enable value notifications/indications from the specified characteristic.
224    // Once enabled, an application can listen to notifications using the
225    // $(ref:onCharacteristicValueChanged) event.
226    // |characteristicId| : The instance ID of the GATT characteristic that
227    // notifications should be enabled on.
228    // |properties| : Notification session properties (optional).
229    // |callback| : Called when the request has completed.
230    static void startCharacteristicNotifications(
231        DOMString characteristicId,
232        optional NotificationProperties properties,
233        ResultCallback callback);
234
235    // Disable value notifications/indications from the specified
236    // characteristic. After a successful call, the application will stop
237    // receiving notifications/indications from this characteristic.
238    // |characteristicId| : The instance ID of the GATT characteristic on which
239    // this app's notification session should be stopped.
240    // |callback| : Called when the request has completed (optional).
241    static void stopCharacteristicNotifications(
242        DOMString characteristicId,
243        optional ResultCallback callback);
244
245    // Retrieve the value of a specified characteristic descriptor from a remote
246    // peripheral.
247    // |descriptorId| : The instance ID of the GATT characteristic descriptor
248    // whose value should be read from the remote device.
249    // |callback| : Called with the Descriptor object whose value was requested.
250    // The <code>value</code> field of the returned Descriptor object contains
251    // the result of the read request.
252    static void readDescriptorValue(DOMString descriptorId,
253                                    DescriptorCallback callback);
254
255    // Write the value of a specified characteristic descriptor from a remote
256    // peripheral.
257    // |descriptorId| : The instance ID of the GATT characteristic descriptor
258    // whose value should be written to.
259    // |value| : The value that should be sent to the remote descriptor as part
260    // of the write request.
261    // |callback| : Called when the write request has completed.
262    static void writeDescriptorValue(DOMString descriptorId,
263                                     ArrayBuffer value,
264                                     ResultCallback callback);
265  };
266
267  interface Events {
268    // Fired whan a new GATT service has been discovered on a remote device.
269    // |service| : The GATT service that was added.
270    static void onServiceAdded(Service service);
271
272    // Fired when the state of a remote GATT service changes. This involves any
273    // characteristics and/or descriptors that get added or removed from the
274    // service, as well as "ServiceChanged" notifications from the remote
275    // device.
276    // |service| : The GATT service whose state has changed.
277    static void onServiceChanged(Service service);
278
279    // Fired when a GATT service that was previously discovered on a remote
280    // device has been removed.
281    // |service| : The GATT service that was removed.
282    static void onServiceRemoved(Service service);
283
284    // Fired when the value of a remote GATT characteristic changes, either as
285    // a result of a read request, or a value change notification/indication
286    // This event will only be sent if the app has enabled notifications by
287    // calling $(ref:startCharacteristicNotifications).
288    // |characteristic| : The GATT characteristic whose value has changed.
289    static void onCharacteristicValueChanged(Characteristic characteristic);
290
291    // Fired when the value of a remote GATT characteristic descriptor changes,
292    // usually as a result of a read request. This event exists
293    // mostly for convenience and will always be sent after a successful
294    // call to $(ref:readDescriptorValue).
295    // |descriptor| : The GATT characteristic descriptor whose value has
296    // changed.
297    static void onDescriptorValueChanged(Descriptor descriptor);
298  };
299};
300