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