Bluetooth Service
Overview
Bluetooth service uses the respective BlueZ package to connect to bluetooth devices
Verbs
Name | Description | JSON Response |
---|---|---|
subscribe | subscribe to bluetooth events | Request: {"value": "device_changes"} |
unsubscribe | unsubscribe to bluetooth events | Request: {"value": "device_changes"} |
managed_objects | retrieve managed bluetooth devices | see managed_objects verb section |
adapter_state | retrieve or change adapter scan settings | see adapter_state verb section |
default_adapter | retrieve or change default adapter setting | Request: {"adapter": "hci1"} |
avrcp_controls | avrcp controls for MediaPlayer1 playback | see avrcp_controls verb section |
connect | connect to already paired device | see connect/disconnect verb section |
disconnect | disconnect to already connected device | see connect/disconnect verb section |
pair | initialize a pairing request | Request: {"device":"dev_88_0F_10_96_D3_20"} |
cancel_pairing | cancel an outgoing pair request | |
confirm_pairing | confirm incoming/outgoing bluetooth pairing pincode | Request: {"pincode": 31415} |
remove_device | remove already paired device | Request: {"device": "dev_88_0F_10_96_D3_20"} |
managed_objects verb
This verb allows an client to get initial paired devices, and discovered unpaired devices before subscriptio to devices_changed event.
{ "response": { "adapters": [ { "name": "hci0", "properties": { "address": "00:1A:7D:DA:71:0F", "powered": true, "discoverable": true, "discoverabletimeout": 180, "pairable": true, "pairabletimeout": 0, "discovering": true, "uuids": [ "00001112-0000-1000-8000-00805f9b34fb", "00001801-0000-1000-8000-00805f9b34fb", "0000110e-0000-1000-8000-00805f9b34fb", "00001800-0000-1000-8000-00805f9b34fb", "00001200-0000-1000-8000-00805f9b34fb", "0000110c-0000-1000-8000-00805f9b34fb", "0000110b-0000-1000-8000-00805f9b34fb", "0000110a-0000-1000-8000-00805f9b34fb", "0000111e-0000-1000-8000-00805f9b34fb", "0000111f-0000-1000-8000-00805f9b34fb", "00001108-0000-1000-8000-00805f9b34fb" ] } } ], "devices": [ { "adapter": "hci0", "device": "dev_F8_34_41_DA_BA_46", "properties": { "address": "F8:34:41:DA:BA:46", "name": "roguebox", "alias": "roguebox", "class": 1835276, "icon": "computer", "paired": false, "trusted": false, "blocked": false, "legacypairing": false, "rssi": -63, "connected": false, "uuids": [ "0000110e-0000-1000-8000-00805f9b34fb", "0000110c-0000-1000-8000-00805f9b34fb", "00001112-0000-1000-8000-00805f9b34fb", "00001108-0000-1000-8000-00805f9b34fb", "00001133-0000-1000-8000-00805f9b34fb", "00001132-0000-1000-8000-00805f9b34fb", "0000112f-0000-1000-8000-00805f9b34fb", "00001104-0000-1000-8000-00805f9b34fb", "00001106-0000-1000-8000-00805f9b34fb", "00001105-0000-1000-8000-00805f9b34fb", "0000110a-0000-1000-8000-00805f9b34fb", "0000110b-0000-1000-8000-00805f9b34fb", "00005005-0000-1000-8000-0002ee000001" ], "modalias": "usb:v1D6Bp0246d0530", "adapter": "/org/bluez/hci0", "txpower": 12, "servicesresolved": false } }, { "adapter": "hci0", "device": "dev_67_13_E2_57_29_0F", "properties": { "address": "68:13:E2:57:29:0F", "alias": "67-13-E2-57-29-0F", "paired": false, "trusted": false, "blocked": false, "legacypairing": false, "rssi": -69, "connected": false, "uuids": [], "adapter": "/org/bluez/hci0", "servicesresolved": false } }, ], "transports": [ { "endpoint": "fd1", "adapter": "hci0", "device": "dev_D0_81_7A_5A_BC_5E", "properties": { "uuid": "0000110B-0000-1000-8000-00805F9B34FB", "state": "idle", "volume": 127 } } ], }
adapter_state verb
adapter_state verb allows setting and retrieving of requested adapter settings
Name | Description |
---|---|
adapter | Must be the name of the adapter (i.e. hci0) |
discovery | Discover nearby broadcasting devices |
discoverable | Allow other devices to detect this device |
powered | Adapter power state (optional, rfkill should be disabled already) |
adapter_state verb write-only parameters
Name | Description |
---|---|
filter | Scan for devices only with respective UUIDS listed |
transport | Scan for devices with only defined transport type (e.g. auto, bredr, le) |
avrcp_controls verb
avrcp_controls verb allow controlling the playback of the defined device
Name | Description |
---|---|
adapter | Name of the adapter (i.e. hci0) |
device | Must be the name of the device (i.e. dev_88_0F_10_96_D3_20) |
action | Playback control action to take (e.g Play, Pause, Stop, Next, Previous, FastForward, Rewind) |
connect/disconnect verbs
NOTE: uuid in this respect is not related to the afb framework but the Bluetooth profile UUID
To connect/disconnect using the respective verb with all known and authenticated profiles:
{"device": "dev_88_0F_10_96_D3_20"}
To do the same for the respective device, verb, and for singular profile
{"device": "dev_88_0F_10_96_D3_20", "uuid": "0000110e-0000-1000-8000-00805f9b34fb"}
Events
Name | Description | JSON Event Data |
---|---|---|
adapter_changes | report on Bluetooth adapter states | see adapter_changes event section |
device_changes | report on Bluetooth devices | see device_changes event section |
media | report on MediaPlayer1 events | see media event section |
agent | PIN from BlueZ agent for confirmation | see agent event section |
adapter_changes event
Sample of adding new adapter event:
{ "adapter": "hci0", "action": "added", "properties": { "address": "60:30:D4:66:55:A7", "powered": false, "discoverable": false, "discoverabletimeout": 180, "pairable": true, "pairabletimeout": 0, "discovering": false, "uuids": [ "00001801-0000-1000-8000-00805f9b34fb", "0000110e-0000-1000-8000-00805f9b34fb", "00001200-0000-1000-8000-00805f9b34fb", "00001800-0000-1000-8000-00805f9b34fb", "0000111e-0000-1000-8000-00805f9b34fb", "0000110c-0000-1000-8000-00805f9b34fb" ] } }
Sample of adapter property changes:
{ "adapter": "hci0", "action": "changed", "properties": { "powered": false, "discovering": false, "discoverable": false } }
Sample of adapter being removed:
{ "adapter": "hci0", "action": "removed", }
device_changes event
Sample of discovering a new device event:
{ "adapter": "hci0", "device": "dev_88_0F_10_96_D3_20", "action": "added", "properties": { "address": "88:0F:10:96:D3:20", "name": "MI_SCALE", "alias": "MI_SCALE", "class": 7995916, "icon": "phone", "paired": false, "trusted": false, "blocked": false, "legacypairing": false, "rssi": -55, "connected": false, "uuids": [ "00001200-0000-1000-8000-00805f9b34fb", "0000111f-0000-1000-8000-00805f9b34fb", "0000112f-0000-1000-8000-00805f9b34fb", "0000110a-0000-1000-8000-00805f9b34fb", "0000110c-0000-1000-8000-00805f9b34fb", "00001116-0000-1000-8000-00805f9b34fb", "00001132-0000-1000-8000-00805f9b34fb", "00000000-deca-fade-deca-deafdecacafe", "02030302-1d19-415f-86f2-22a2106a0a77", "2d8d2466-e14d-451c-88bc-7301abea291a" ], "adapter": "/org/bluez/hci0", "servicesresolved": false } }
Changed status events for a device:
{ "adapter": "hci0", "device": "dev_88_0F_10_96_D3_20", "action": "changed", "properties": { "connected": true } }
media event
Playing audio reporting event (not all fields will be passed in every event):
{ "adapter": "hci0", "device": "dev_D0_81_7A_5A_BC_5E", "type": "playback", "track": { "title": "True Colors", "duration": 228000, "album": "True Colors", "tracknumber": 6, "artist": "Zedd", "numberoftracks": 11, "genre": "Dance & DJ/General" }, "position": 5600, "status": "playing", "connected": true, "player": "player0" }
A2DP transport addition/removal (some fields are optional):
{ "adapter": "hci0", "device": "dev_D0_81_7A_5A_BC_5E", "action": "added", "type": "transport", "endpoint": "fd0" "properties": { "uuid": "0000110B-0000-1000-8000-00805F9B34FB", "state": "idle", "volume": 127 }, } ... { "adapter": "hci0", "device": "dev_D0_81_7A_5A_BC_5E", "action": "removed", "type": "transport", "endpoint": "fd0" }
agent event
After pairing request agent will send event for a pincode that must be confirmed on both sides:
{ "adapter": "hci0", "device": "dev_88_OF_10_96_D3_20", "action": "request_confirmation", "pincode": 327142 }
If pairing is canceled or fails:
{ "action": "canceled_pairing" }