blob: ee6df3d042c7465d22abf044e04ddd2421efea42 [file] [log] [blame]
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// The <code>chrome.bluetoothLowEnergy</code> API is used to communicate with
// Bluetooth Smart (Low Energy) devices using the
// <a href="https://developer.bluetooth.org/TechnologyOverview/Pages/GATT.aspx">
// Generic Attribute Profile (GATT)</a>.
namespace bluetoothLowEnergy {
// Values representing the possible properties of a characteristic.
// Characteristic permissions are inferred from these properties.
// Please see the Bluetooth 4.x spec to see the meaning of each individual
// property.
enum CharacteristicProperty {
broadcast, read, writeWithoutResponse, write, notify, indicate,
authenticatedSignedWrites, extendedProperties, reliableWrite,
writableAuxiliaries, encryptRead, encryptWrite, encryptAuthenticatedRead,
encryptAuthenticatedWrite
};
// Values representing possible permissions for a descriptor.
// Please see the Bluetooth 4.x spec to see the meaning of each individual
// permission.
enum DescriptorPermission {
read, write, encryptedRead, encryptedWrite, encryptedAuthenticatedRead,
encryptedAuthenticatedWrite
};
// Type of advertisement. If 'broadcast' is chosen, the sent advertisement
// type will be ADV_NONCONN_IND and the device will broadcast with a random
// MAC Address. If set to 'peripheral', the advertisement type will be
// ADV_IND or ADV_SCAN_IND and the device will broadcast with real Bluetooth
// Adapter's MAC Address.
enum AdvertisementType {broadcast, peripheral};
// Represents a bluetooth central device that is connected to the local GATT
// server.
dictionary Device {
// The address of the device, in the format 'XX:XX:XX:XX:XX:XX'.
DOMString address;
// The human-readable name of the device.
DOMString? name;
// The class of the device, a bit-field defined by
// http://www.bluetooth.org/en-us/specification/assigned-numbers/baseband.
long? deviceClass;
};
// Represents a peripheral's Bluetooth GATT Service, a collection of
// characteristics and relationships to other services that encapsulate
// the behavior of part of a device.
dictionary Service {
// The UUID of the service, e.g. 0000180d-0000-1000-8000-00805f9b34fb.
DOMString uuid;
// Indicates whether the type of this service is primary or secondary.
boolean isPrimary;
// Returns the identifier assigned to this service. Use the instance ID to
// distinguish between services from a peripheral with the same UUID and
// to make function calls that take in a service identifier. Present, if
// this instance represents a remote service.
DOMString? instanceId;
// The device address of the remote peripheral that the GATT service belongs
// to. Present, if this instance represents a remote service.
DOMString? deviceAddress;
};
// Represents a GATT characteristic, which is a basic data element that
// provides further information about a peripheral's service.
dictionary Characteristic {
// The UUID of the characteristic, e.g.
// 00002a37-0000-1000-8000-00805f9b34fb.
DOMString uuid;
// The GATT service this characteristic belongs to.
Service? service;
// The properties of this characteristic.
CharacteristicProperty[] properties;
// Returns the identifier assigned to this characteristic. Use the instance
// ID to distinguish between characteristics from a peripheral with the same
// UUID and to make function calls that take in a characteristic identifier.
// Present, if this instance represents a remote characteristic.
DOMString? instanceId;
// The currently cached characteristic value. This value gets updated when
// the value of the characteristic is read or updated via a notification
// or indication.
ArrayBuffer? value;
};
// Represents a GATT characteristic descriptor, which provides further
// information about a characteristic's value.
dictionary Descriptor {
// The UUID of the characteristic descriptor, e.g.
// 00002902-0000-1000-8000-00805f9b34fb.
DOMString uuid;
// The GATT characteristic this descriptor belongs to.
Characteristic? characteristic;
// The permissions of this descriptor.
DescriptorPermission[] permissions;
// Returns the identifier assigned to this descriptor. Use the instance ID
// to distinguish between descriptors from a peripheral with the same UUID
// and to make function calls that take in a descriptor identifier. Present,
// if this instance represents a remote characteristic.
DOMString? instanceId;
// The currently cached descriptor value. This value gets updated when
// the value of the descriptor is read.
ArrayBuffer? value;
};
// The connection properties specified during a call to $(ref:connect).
dictionary ConnectProperties {
// Flag indicating whether a connection to the device is left open when the
// event page of the application is unloaded (see <a
// href="http://developer.chrome.com/apps/app_lifecycle.html">Manage App
// Lifecycle</a>). The default value is <code>false.</code>
boolean persistent;
};
// Optional characteristic notification session properties specified during a
// call to $(ref:startCharacteristicNotifications).
dictionary NotificationProperties {
// Flag indicating whether the app should receive notifications when the
// event page of the application is unloaded (see <a
// href="http://developer.chrome.com/apps/app_lifecycle.html">Manage App
// Lifecycle</a>). The default value is <code>false</code>.
boolean persistent;
};
// Represents an entry of the "Manufacturer Specific Data" field of Bluetooth
// LE advertisement data.
dictionary ManufacturerData {
long id;
long[] data;
};
// Represents an entry of the "Service Data" field of Bluetooth LE advertisement
// data.
dictionary ServiceData {
DOMString uuid;
long[] data;
};
// Represents a Bluetooth LE advertisement instance.
dictionary Advertisement {
// Type of advertisement.
AdvertisementType type;
// List of UUIDs to include in the "Service UUIDs" field of the Advertising
// Data. These UUIDs can be of the 16bit, 32bit or 128 formats.
DOMString[]? serviceUuids;
// List of manufacturer specific data to be included in "Manufacturer Specific
// Data" fields of the advertising data.
ManufacturerData[]? manufacturerData;
// List of UUIDs to include in the "Solicit UUIDs" field of the Advertising
// Data. These UUIDs can be of the 16bit, 32bit or 128 formats.
DOMString[]? solicitUuids;
// List of service data to be included in "Service Data" fields of the advertising
// data.
ServiceData[]? serviceData;
};
// Represents a an attribute read/write request.
dictionary Request {
// Unique ID for this request. Use this ID when responding to this request.
long requestId;
// Device that send this request.
Device device;
// Value to write (if this is a write request).
ArrayBuffer? value;
};
// Represents a response to an attribute read/write request.
dictionary Response {
// Id of the request this is a response to.
long requestId;
// If this is an error response, this should be true.
boolean isError;
// Response value. Write requests and error responses will ignore this
// parameter.
ArrayBuffer? value;
};
// Represents a notification to be sent to a remote device.
dictionary Notification {
// New value of the characteristic.
ArrayBuffer value;
// Optional flag for sending an indication instead of a notification.
boolean? shouldIndicate;
};
callback CharacteristicCallback = void(Characteristic result);
callback CreateCharacteristicCallback = void(DOMString characteristicId);
callback CharacteristicsCallback = void(Characteristic[] result);
callback DescriptorCallback = void(Descriptor result);
callback CreateDescriptorCallback = void(DOMString descriptorId);
callback DescriptorsCallback = void(Descriptor[] result);
callback ResultCallback = void();
callback ServiceCallback = void(Service result);
callback CreateServiceCallback = void(DOMString serviceId);
callback ServicesCallback = void(Service[] result);
callback RegisterAdvertisementCallback = void (long advertisementId);
// These functions all report failures via chrome.runtime.lastError.
interface Functions {
// Establishes a connection between the application and the device with the
// given address. A device may be already connected and its GATT services
// available without calling <code>connect</code>, however, an app that
// wants to access GATT services of a device should call this function to
// make sure that a connection to the device is maintained. If the device
// is not connected, all GATT services of the device will be discovered
// after a successful call to <code>connect</code>.
// |deviceAddress|: The Bluetooth address of the remote device to which a
// GATT connection should be opened.
// |properties|: Connection properties (optional).
// |callback|: Called when the connect request has completed.
static void connect(DOMString deviceAddress,
optional ConnectProperties properties,
ResultCallback callback);
// Closes the app's connection to the device with the given address. Note
// that this will not always destroy the physical link itself, since there
// may be other apps with open connections.
// |deviceAddress|: The Bluetooth address of the remote device.
// |callback|: Called when the disconnect request has completed.
static void disconnect(DOMString deviceAddress,
optional ResultCallback callback);
// Get the GATT service with the given instance ID.
// |serviceId|: The instance ID of the requested GATT service.
// |callback|: Called with the requested Service object.
static void getService(DOMString serviceId, ServiceCallback callback);
// Create a locally hosted GATT service. This service can be registered
// to be available on a local GATT server.
// This function is only available if the app has both the
// bluetooth:low_energy and the bluetooth:peripheral permissions set to
// true. The peripheral permission may not be available to all apps.
// |service|: The service to create.
// |callback|: Called with the created services's unique ID.
static void createService(Service service, CreateServiceCallback callback);
// Get all the GATT services that were discovered on the remote device with
// the given device address.
//
// <em>Note:</em> If service discovery is not yet complete on the device,
// this API will return a subset (possibly empty) of services. A work around
// is to add a time based delay and/or call repeatedly until the expected
// number of services is returned.
//
// |deviceAddress|: The Bluetooth address of the remote device whose GATT
// services should be returned.
// |callback|: Called with the list of requested Service objects.
static void getServices(DOMString deviceAddress, ServicesCallback callback);
// Get the GATT characteristic with the given instance ID that belongs to
// the given GATT service, if the characteristic exists.
// |characteristicId|: The instance ID of the requested GATT
// characteristic.
// |callback|: Called with the requested Characteristic object.
static void getCharacteristic(DOMString characteristicId,
CharacteristicCallback callback);
// Create a locally hosted GATT characteristic. This characteristic must
// be hosted under a valid service. If the service ID is not valid, the
// lastError will be set.
// This function is only available if the app has both the
// bluetooth:low_energy and the bluetooth:peripheral permissions set to
// true. The peripheral permission may not be available to all apps.
// |characteristic|: The characteristic to create.
// |serviceId|: ID of the service to create this characteristic for.
// |callback|: Called with the created characteristic's unique ID.
static void createCharacteristic(Characteristic characteristic,
DOMString serviceId,
CreateCharacteristicCallback callback);
// Get a list of all discovered GATT characteristics that belong to the
// given service.
// |serviceId|: The instance ID of the GATT service whose characteristics
// should be returned.
// |callback|: Called with the list of characteristics that belong to the
// given service.
static void getCharacteristics(DOMString serviceId,
CharacteristicsCallback callback);
// Get a list of GATT services that are included by the given service.
// |serviceId|: The instance ID of the GATT service whose included
// services should be returned.
// |callback|: Called with the list of GATT services included from the
// given service.
static void getIncludedServices(DOMString serviceId,
ServicesCallback callback);
// Get the GATT characteristic descriptor with the given instance ID.
// |descriptorId|: The instance ID of the requested GATT characteristic
// descriptor.
// |callback|: Called with the requested Descriptor object.
static void getDescriptor(DOMString descriptorId,
DescriptorCallback callback);
// Create a locally hosted GATT descriptor. This descriptor must
// be hosted under a valid characteristic. If the characteristic ID is not
// valid, the lastError will be set.
// This function is only available if the app has both the
// bluetooth:low_energy and the bluetooth:peripheral permissions set to
// true. The peripheral permission may not be available to all apps.
// |descriptor|: The descriptor to create.
// |characteristicId|: ID of the characteristic to create this descriptor
// for.
// |callback|: Called with the created descriptor's unique ID.
static void createDescriptor(Descriptor descriptor,
DOMString characteristicId,
CreateDescriptorCallback callback);
// Get a list of GATT characteristic descriptors that belong to the given
// characteristic.
// |characteristicId|: The instance ID of the GATT characteristic whose
// descriptors should be returned.
// |callback|: Called with the list of descriptors that belong to the given
// characteristic.
static void getDescriptors(DOMString characteristicId,
DescriptorsCallback callback);
// Retrieve the value of a specified characteristic from a remote
// peripheral.
// |characteristicId|: The instance ID of the GATT characteristic whose
// value should be read from the remote device.
// |callback|: Called with the Characteristic object whose value was
// requested. The <code>value</code> field of the returned Characteristic
// object contains the result of the read request.
static void readCharacteristicValue(DOMString characteristicId,
CharacteristicCallback callback);
// Write the value of a specified characteristic from a remote peripheral.
// |characteristicId|: The instance ID of the GATT characteristic whose
// value should be written to.
// |value|: The value that should be sent to the remote characteristic as
// part of the write request.
// |callback|: Called when the write request has completed.
static void writeCharacteristicValue(DOMString characteristicId,
ArrayBuffer value,
ResultCallback callback);
// Enable value notifications/indications from the specified characteristic.
// Once enabled, an application can listen to notifications using the
// $(ref:onCharacteristicValueChanged) event.
// |characteristicId|: The instance ID of the GATT characteristic that
// notifications should be enabled on.
// |properties|: Notification session properties (optional).
// |callback|: Called when the request has completed.
static void startCharacteristicNotifications(
DOMString characteristicId,
optional NotificationProperties properties,
ResultCallback callback);
// Disable value notifications/indications from the specified
// characteristic. After a successful call, the application will stop
// receiving notifications/indications from this characteristic.
// |characteristicId|: The instance ID of the GATT characteristic on which
// this app's notification session should be stopped.
// |callback|: Called when the request has completed (optional).
static void stopCharacteristicNotifications(
DOMString characteristicId,
optional ResultCallback callback);
// Notify a remote device of a new value for a characteristic. If the
// shouldIndicate flag in the notification object is true, an indication
// will be sent instead of a notification. Note, the characteristic needs
// to correctly set the 'notify' or 'indicate' property during creation for
// this call to succeed.
// This function is only available if the app has both the
// bluetooth:low_energy and the bluetooth:peripheral permissions set to
// true. The peripheral permission may not be available to all apps.
// |characteristicId|: The characteristic to send the notication for.
// |notifcation|: The notification to send.
// |callback|: Callback called once the notification or indication has
// been sent successfully.
static void notifyCharacteristicValueChanged(DOMString characteristicId,
Notification notification,
ResultCallback callback);
// Retrieve the value of a specified characteristic descriptor from a remote
// peripheral.
// |descriptorId|: The instance ID of the GATT characteristic descriptor
// whose value should be read from the remote device.
// |callback|: Called with the Descriptor object whose value was requested.
// The <code>value</code> field of the returned Descriptor object contains
// the result of the read request.
static void readDescriptorValue(DOMString descriptorId,
DescriptorCallback callback);
// Write the value of a specified characteristic descriptor from a remote
// peripheral.
// |descriptorId|: The instance ID of the GATT characteristic descriptor
// whose value should be written to.
// |value|: The value that should be sent to the remote descriptor as part
// of the write request.
// |callback|: Called when the write request has completed.
static void writeDescriptorValue(DOMString descriptorId,
ArrayBuffer value,
ResultCallback callback);
// Register the given service with the local GATT server. If the service
// ID is invalid, the lastError will be set.
// This function is only available if the app has both the
// bluetooth:low_energy and the bluetooth:peripheral permissions set to
// true. The peripheral permission may not be available to all apps.
// |serviceId|: Unique ID of a created service.
// |callback|: Callback with the result of the register operation.
static void registerService(
DOMString serviceId, ResultCallback callback);
// Unregister the given service with the local GATT server. If the service
// ID is invalid, the lastError will be set.
// This function is only available if the app has both the
// bluetooth:low_energy and the bluetooth:peripheral permissions set to
// true. The peripheral permission may not be available to all apps.
// |serviceId|: Unique ID of a current registered service.
// |callback|: Callback with the result of the register operation.
static void unregisterService(
DOMString serviceId, ResultCallback callback);
// Remove the specified service, unregistering it if it was registered.
// If the service ID is invalid, the lastError will be set.
// This function is only available if the app has both the
// bluetooth:low_energy and the bluetooth:peripheral permissions set to
// true. The peripheral permission may not be available to all apps.
// |serviceId|: Unique ID of a current registered service.
// |callback|: Callback called once the service is removed.
static void removeService(
DOMString serviceId, optional ResultCallback callback);
// Create an advertisement and register it for advertising. To call this
// function, the app must have the bluetooth:low_energy and
// bluetooth:peripheral permissions set to true. Additionally this API
// is only available to auto launched apps in Kiosk Mode of by setting
// the 'enable-ble-advertising-in-apps' flag.
// See https://developer.chrome.com/apps/manifest/bluetooth
// Note: On some hardware, central and peripheral modes at the same time is
// supported but on hardware that doesn't support this, making this call
// will switch the device to peripheral mode. In the case of hardware which
// does not support both central and peripheral mode, attempting to use the
// device in both modes will lead to undefined behavior or prevent other
// central-role applications from behaving correctly (including the
// discovery of Bluetooth Low Energy devices).
// |advertisement|: The advertisement to advertise.
// |callback|: Called once the registeration is done and we've started
// advertising. Returns the id of the created advertisement.
static void registerAdvertisement(
Advertisement advertisement, RegisterAdvertisementCallback callback);
// Unregisters an advertisement and stops its advertising. If the
// advertisement fails to unregister the only way to stop advertising
// might be to restart the device.
// |advertisementId|: Id of the advertisement to unregister.
// |callback|: Called once the advertisement is unregistered and is no
// longer being advertised.
static void unregisterAdvertisement(long advertisementId,
ResultCallback callback);
// Resets advertising on the current device. It will unregister and
// stop all existing advertisements.
// |callback|: Called once the advertisements are reset.
static void resetAdvertising(ResultCallback callback);
// Set's the interval betweeen two consecutive advertisements. Note:
// This is a best effort. The actual interval may vary non-trivially
// from the requested intervals. On some hardware, there is a minimum
// interval of 100ms. The minimum and maximum values cannot exceed the
// the range allowed by the Bluetooth 4.2 specification.
// |minInterval|: Minimum interval between advertisments (in
// milliseconds). This cannot be lower than 20ms (as per the spec).
// |maxInterval|: Maximum interval between advertisments (in
// milliseconds). This cannot be more than 10240ms (as per the spec).
// |callback|: Called once the interval has been set.
static void setAdvertisingInterval(long minInterval, long maxInterval,
ResultCallback callback);
// Sends a response for a characteristic or descriptor read/write
// request.
// This function is only available if the app has both the
// bluetooth:low_energy and the bluetooth:peripheral permissions set to
// true. The peripheral permission may not be available to all apps.
// |response|: The response to the request.
static void sendRequestResponse(Response response);
};
interface Events {
// Fired whan a new GATT service has been discovered on a remote device.
// |service|: The GATT service that was added.
static void onServiceAdded(Service service);
// Fired when the state of a remote GATT service changes. This involves any
// characteristics and/or descriptors that get added or removed from the
// service, as well as "ServiceChanged" notifications from the remote
// device.
// |service|: The GATT service whose state has changed.
static void onServiceChanged(Service service);
// Fired when a GATT service that was previously discovered on a remote
// device has been removed.
// |service|: The GATT service that was removed.
static void onServiceRemoved(Service service);
// Fired when the value of a remote GATT characteristic changes, either as
// a result of a read request, or a value change notification/indication
// This event will only be sent if the app has enabled notifications by
// calling $(ref:startCharacteristicNotifications).
// |characteristic|: The GATT characteristic whose value has changed.
static void onCharacteristicValueChanged(Characteristic characteristic);
// Fired when the value of a remote GATT characteristic descriptor changes,
// usually as a result of a read request. This event exists
// mostly for convenience and will always be sent after a successful
// call to $(ref:readDescriptorValue).
// |descriptor|: The GATT characteristic descriptor whose value has
// changed.
static void onDescriptorValueChanged(Descriptor descriptor);
// Fired when a connected central device requests to read the value of a
// characteristic registered on the local GATT server. Not responding
// to this request for a long time may lead to a disconnection.
// This event is only available if the app has both the
// bluetooth:low_energy and the bluetooth:peripheral permissions set to
// true. The peripheral permission may not be available to all apps.
// |request|: Request data for this request.
// |characteristic|: The GATT characteristic whose value is requested.
static void onCharacteristicReadRequest(
Request request, DOMString characteristicId);
// Fired when a connected central device requests to write the value of a
// characteristic registered on the local GATT server. Not responding
// to this request for a long time may lead to a disconnection.
// This event is only available if the app has both the
// bluetooth:low_energy and the bluetooth:peripheral permissions set to
// true. The peripheral permission may not be available to all apps.
// |request|: Request data for this request.
// |characteristic|: The GATT characteristic whose value is being written.
static void onCharacteristicWriteRequest(
Request request, DOMString characteristicId);
// Fired when a connected central device requests to read the value of a
// descriptor registered on the local GATT server. Not responding to
// this request for a long time may lead to a disconnection.
// This event is only available if the app has both the
// bluetooth:low_energy and the bluetooth:peripheral permissions set to
// true. The peripheral permission may not be available to all apps.
// |request|: Request data for this request.
// |descriptor|: The GATT descriptor whose value is requested.
static void onDescriptorReadRequest(
Request request, DOMString descriptorId);
// Fired when a connected central device requests to write the value of a
// descriptor registered on the local GATT server. Not responding to
// this request for a long time may lead to a disconnection.
// This event is only available if the app has both the
// bluetooth:low_energy and the bluetooth:peripheral permissions set to
// true. The peripheral permission may not be available to all apps.
// |request|: Request data for this request.
// |descriptor|: The GATT descriptor whose value is being written.
static void onDescriptorWriteRequest(
Request request, DOMString descriptorId);
};
};