229 lines
5.5 KiB
Plaintext
229 lines
5.5 KiB
Plaintext
BlueZ settings storage
|
|
**********************
|
|
|
|
Purpose
|
|
=======
|
|
|
|
The purpose of this document is to describe the directory structure of
|
|
BlueZ settings storage. In effect, this document will serve as the primary,
|
|
up to date source of BlueZ storage information.
|
|
|
|
It is intended as reference for developers. Direct access to the storage
|
|
outside from bluetoothd is highly discouraged.
|
|
|
|
Adapter and remote device info are read form the storage during object
|
|
initialization. Write to storage is performed immediately on every value
|
|
change.
|
|
|
|
Default storage directory is /var/lib/bluetooth. This can be adjusted
|
|
by the --localstatedir configure switch. Default is --localstatedir=/var.
|
|
|
|
All files are in ini-file format.
|
|
|
|
|
|
Storage directory structure
|
|
===========================
|
|
|
|
There is one directory per adapter, named by its Bluetooth address, which
|
|
contains:
|
|
- a settings file for the local adapter
|
|
- an attributes file containing attributes of supported LE services
|
|
- a cache directory containing:
|
|
- one file per device, named by remote device address, which contains
|
|
device name
|
|
- one directory per remote device, named by remote device address, which
|
|
contains:
|
|
- an info file
|
|
- an attributes file containing attributes of remote LE services
|
|
- a ccc file containing persistent Client Characteristic Configuration
|
|
(CCC) descriptor information for GATT characteristics
|
|
|
|
So the directory structure is:
|
|
/var/lib/bluetooth/<adapter address>/
|
|
./settings
|
|
./attributes
|
|
./cache/
|
|
./<remote device address>
|
|
./<remote device address>
|
|
...
|
|
./<remote device address>/
|
|
./info
|
|
./attributes
|
|
./ccc
|
|
./<remote device address>/
|
|
./info
|
|
./attributes
|
|
...
|
|
|
|
|
|
Settings file format
|
|
====================
|
|
|
|
Settings file contains one [General] group with adapter info like:
|
|
|
|
Alias String Friendly user provided name advertised
|
|
for this adapter
|
|
|
|
This value overwrites the system
|
|
name (pretty hostname)
|
|
|
|
Discoverable Boolean Discoverability of the adapter
|
|
|
|
PairableTimeout Integer How long to stay in pairable mode
|
|
before going back to non-pairable.
|
|
The value is in seconds.
|
|
0 = disable timer, i.e. stay
|
|
pairable forever
|
|
|
|
DiscoverableTimeout Integer How long to stay in discoverable mode
|
|
before going back to non-discoverable.
|
|
The value is in seconds.
|
|
0 = disable timer, i.e. stay
|
|
discoverable forever
|
|
|
|
Sample:
|
|
[General]
|
|
Name=My PC
|
|
Discoverable=false
|
|
Pairable=true
|
|
DiscoverableTimeout=0
|
|
|
|
|
|
Attributes file format
|
|
======================
|
|
|
|
The attributes file lists all attributes supported by the local adapter or
|
|
remote device.
|
|
|
|
Attributes are stored using their handle as group name (decimal format).
|
|
|
|
Each group contains:
|
|
|
|
UUID String 128-bit UUID of the attribute
|
|
|
|
Value String Value of the attribute as hexadecimal encoded
|
|
string
|
|
|
|
EndGroupHandle Integer End group handle in decimal format
|
|
|
|
Sample:
|
|
[1]
|
|
UUID=00002800-0000-1000-8000-00805f9b34fb
|
|
Value=0018
|
|
|
|
[4]
|
|
UUID=00002803-0000-1000-8000-00805f9b34fb
|
|
Value=020600002A
|
|
|
|
[6]
|
|
UUID=00002a00-0000-1000-8000-00805f9b34fb
|
|
Value=4578616D706C6520446576696365
|
|
|
|
|
|
CCC file format
|
|
======================
|
|
|
|
The ccc file stores the current CCC descriptor values for GATT characteristics
|
|
which have notification/indication enabled by the remote device.
|
|
|
|
Information is stored using CCC attribute handle as group name (in decimal
|
|
format).
|
|
|
|
Each group contains:
|
|
|
|
Value String CCC descriptor value encoded in
|
|
hexadecimal
|
|
|
|
|
|
Cache directory file format
|
|
============================
|
|
|
|
Each file, named by remote device address, may includes multiple groups
|
|
(General and ServiceRecords).
|
|
|
|
In ServiceRecords, SDP records are stored using their handle as key
|
|
(hexadecimal format).
|
|
|
|
[General] group contains:
|
|
|
|
Name String Remote device friendly name
|
|
|
|
ShortName String Remote device shortened name
|
|
|
|
[ServiceRecords] group contains
|
|
|
|
<0x...> String SDP record as hexadecimal encoded
|
|
string
|
|
|
|
|
|
Info file format
|
|
================
|
|
|
|
Info file may includes multiple groups (General, Device ID, Link key and
|
|
Long term key) related to a remote device.
|
|
|
|
[General] group contains:
|
|
|
|
Name String Remote device friendly name
|
|
|
|
Alias String Alias name
|
|
|
|
Class String Device class in hexadecimal,
|
|
i.e. 0x000000
|
|
|
|
Appearance String Device appearance in hexadecimal,
|
|
i.e. 0x0000
|
|
|
|
SupportedTechnologies List of List of technologies supported by
|
|
strings device, separated by ";"
|
|
Technologies can be BR/EDR or LE
|
|
|
|
AddressType String An address can be "static" or "public"
|
|
|
|
Trusted Boolean True if the remote device is trusted
|
|
|
|
Blocked Boolean True if the remote device is blocked
|
|
|
|
Services List of List of service UUIDs advertised by
|
|
strings remote in 128-bits UUID format,
|
|
separated by ";"
|
|
|
|
|
|
[DeviceID] group contains:
|
|
|
|
Source Integer Assigner of Device ID
|
|
|
|
Vendor Integer Device vendor
|
|
|
|
Product Integer Device product
|
|
|
|
Version Integer Device version
|
|
|
|
|
|
[LinkKey] group contains:
|
|
|
|
Key String Key in hexadecimal format
|
|
|
|
Type Integer Type of link key
|
|
|
|
PINLength Integer Length of PIN
|
|
|
|
|
|
[LongTermKey] group contains:
|
|
|
|
Key String Long term key in hexadecimal format
|
|
|
|
Authenticated Boolean True if remote device has been
|
|
authenticated
|
|
|
|
EncSize Integer Encrypted size
|
|
|
|
EDiv Integer Encrypted diversifier
|
|
|
|
Rand Integer Randomizer
|
|
|
|
|
|
[SlaveLongTermKey] group contains:
|
|
|
|
Same as the [LongTermKey] group, except for slave keys.
|