| 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. |
| |
| [ConnectionParameters] group contains: |
| |
| MinInterval Integer Minimum Connection Interval |
| |
| MaxInterval Integer Maximum Connection Interval |
| |
| Latency Integer Connection Latency |
| |
| Timeout Integer Supervision Timeout |