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// ./settings ./attributes ./cache/ ./ ./ ... .// ./info ./attributes ./ccc .// ./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.