1// Copyright (c) 2012 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// Use the <code>chrome.bluetooth</code> API to connect to a Bluetooth
6// device. All functions report failures via chrome.runtime.lastError.
7namespace bluetooth {
8  // Allocation authorities for Vendor IDs.
9  enum VendorIdSource {bluetooth, usb};
10
11  // Common device types recognized by Chrome.
12  enum DeviceType {computer, phone, modem, audio, carAudio, video, peripheral,
13                   joystick, gamepad, keyboard, mouse, tablet,
14                   keyboardMouseCombo};
15
16  // Information about the state of the Bluetooth adapter.
17  dictionary AdapterState {
18    // The address of the adapter, in the format 'XX:XX:XX:XX:XX:XX'.
19    DOMString address;
20
21    // The human-readable name of the adapter.
22    DOMString name;
23
24    // Indicates whether or not the adapter has power.
25    boolean powered;
26
27    // Indicates whether or not the adapter is available (i.e. enabled).
28    boolean available;
29
30    // Indicates whether or not the adapter is currently discovering.
31    boolean discovering;
32  };
33
34  // Callback from the <code>getAdapterState</code> method.
35  // |adapterInfo| : Object containing the adapter information.
36  callback AdapterStateCallback = void(AdapterState adapterInfo);
37
38  // Information about the state of a known Bluetooth device.
39  dictionary Device {
40    // The address of the device, in the format 'XX:XX:XX:XX:XX:XX'.
41    DOMString address;
42
43    // The human-readable name of the device.
44    DOMString? name;
45
46    // The class of the device, a bit-field defined by
47    // http://www.bluetooth.org/en-us/specification/assigned-numbers/baseband.
48    long? deviceClass;
49
50    // The Device ID record of the device, where available.
51    VendorIdSource? vendorIdSource;
52    long? vendorId;
53    long? productId;
54    long? deviceId;
55
56    // The type of the device, if recognized by Chrome. This is obtained from
57    // the |deviceClass| field and only represents a small fraction of the
58    // possible device types. When in doubt you should use the |deviceClass|
59    // field directly.
60    DeviceType? type;
61
62    // Indicates whether or not the device is paired with the system.
63    boolean? paired;
64
65    // Indicates whether the device is currently connected to the system.
66    boolean? connected;
67
68    // Indicates the RSSI ("received signal strength indication") of the
69    // connection to the device, measured in dBm, to a resolution of 1dBm.
70    // If the device is currently connected, then measures the RSSI of the
71    // connection signal. Otherwise, measures the RSSI of the last inquiry sent
72    // to the device, where available. Absent if unavailable.
73    [nodoc] long? rssi;
74
75    // Indicates the host's current transmit power ("Tx power") for the
76    // connection to the device, measured in dBm, to a resolution of 1dBm.
77    // This value is only available if the device is currently connected.
78    [nodoc] long? currentHostTransmitPower;
79
80    // Indicates the host's maximum transmit power ("Tx power") for the
81    // connection to the device, measured in dBm, to a resolution of 1dBm.
82    // This value is only available if the device is currently connected.
83    [nodoc] long? maximumHostTransmitPower;
84
85    // UUIDs of protocols, profiles and services advertised by the device.
86    // For classic Bluetooth devices, this list is obtained from EIR data and
87    // SDP tables. For Low Energy devices, this list is obtained from AD and
88    // GATT primary services. For dual mode devices this may be obtained from
89    // both.
90    DOMString[]? uuids;
91  };
92
93  // Callback from the <code>getDevice</code> method.
94  // |deviceInfo| : Object containing the device information.
95  callback GetDeviceCallback = void(Device deviceInfo);
96
97  // Callback from the <code>getDevices</code> method.
98  // |deviceInfos| : Array of object containing device information.
99  callback GetDevicesCallback = void(Device[] deviceInfos);
100
101  // Callback from the <code>startDiscovery</code> method.
102  callback StartDiscoveryCallback = void();
103
104  // Callback from the <code>stopDiscovery</code> method.
105  callback StopDiscoveryCallback = void();
106
107  // These functions all report failures via chrome.runtime.lastError.
108  interface Functions {
109    // Get information about the Bluetooth adapter.
110    // |callback| : Called with an AdapterState object describing the adapter
111    //              state.
112    static void getAdapterState(AdapterStateCallback callback);
113
114    // Get information about a Bluetooth device known to the system.
115    // |deviceAddress| : Address of device to get.
116    // |callback| : Called with the Device object describing the device.
117    static void getDevice(DOMString deviceAddress, GetDeviceCallback callback);
118
119    // Get a list of Bluetooth devices known to the system, including paired
120    // and recently discovered devices.
121    // |callback| : Called when the search is completed.
122    static void getDevices(GetDevicesCallback callback);
123
124    // Start discovery. Newly discovered devices will be returned via the
125    // onDeviceAdded event. Previously discovered devices already known to
126    // the adapter must be obtained using getDevices and will only be updated
127    // using the |onDeviceChanged| event if information about them changes.
128    //
129    // Discovery will fail to start if this application has already called
130    // startDiscovery.  Discovery can be resource intensive: stopDiscovery
131    // should be called as soon as possible.
132    // |callback| : Called to indicate success or failure.
133    static void startDiscovery(optional StartDiscoveryCallback callback);
134
135    // Stop discovery.
136    // |callback| : Called to indicate success or failure.
137    static void stopDiscovery(optional StopDiscoveryCallback callback);
138  };
139
140  interface Events {
141    // Fired when the state of the Bluetooth adapter changes.
142    // |state| : The new state of the adapter.
143    static void onAdapterStateChanged(AdapterState state);
144
145    // Fired when information about a new Bluetooth device is available.
146    static void onDeviceAdded(Device device);
147
148    // Fired when information about a known Bluetooth device has changed.
149    static void onDeviceChanged(Device device);
150
151    // Fired when a Bluetooth device that was previously discovered has been
152    // out of range for long enough to be considered unavailable again, and
153    // when a paired device is removed.
154    static void onDeviceRemoved(Device device);
155  };
156};
157