src.bluetooth_sig.device.peripheral_device¶
High-level peripheral (GATT server) abstraction.
Provides PeripheralDevice, a server-side helper that hosts GATT
services and encodes values for remote centrals to read.
Classes¶
Name | Description |
|---|---|
Tracks a hosted characteristic with its definition and class instance. |
|
High-level BLE peripheral abstraction using composition pattern. |
Module Contents¶
- class src.bluetooth_sig.device.peripheral_device.HostedCharacteristic(definition: bluetooth_sig.types.peripheral_types.CharacteristicDefinition, characteristic: bluetooth_sig.gatt.characteristics.base.BaseCharacteristic[Any], initial_value: Any = None)¶
Tracks a hosted characteristic with its definition and class instance.
- definition¶
The GATT characteristic definition registered on the peripheral.
- characteristic¶
The SIG characteristic class instance used for encoding/decoding.
- last_value¶
The last Python value that was encoded and set on this characteristic.
- characteristic¶
- definition¶
- last_value: Any = None¶
- class src.bluetooth_sig.device.peripheral_device.PeripheralDevice(peripheral_manager: src.bluetooth_sig.device.peripheral.PeripheralManagerProtocol)¶
High-level BLE peripheral abstraction using composition pattern.
Deprecated since version 0.5.0: Scheduled for removal; see
docs/source/explanation/limitations.md.Coordinates between
PeripheralManagerProtocol(backend) andBaseCharacteristicinstances (encoding) so callers work with typed Python values.Encoding is handled directly by the characteristic’s
build_value()method — no translator is needed on the peripheral (server) side.The workflow mirrors
Devicebut for the server role:Create a
PeripheralDevicewrapping a backend.Add services with
add_service()(typed helpers encode initial values).Start advertising with
start().Update characteristic values with
update_value().Stop with
stop().
Example:
>>> from bluetooth_sig.gatt.characteristics import BatteryLevelCharacteristic >>> from bluetooth_sig.gatt.services import BatteryService >>> >>> peripheral = PeripheralDevice(backend) >>> battery_char = BatteryLevelCharacteristic() >>> peripheral.add_characteristic( ... service_uuid=BatteryService.get_class_uuid(), ... characteristic=battery_char, ... initial_value=85, ... ) >>> await peripheral.start() >>> await peripheral.update_value(battery_char, 72)
- add_characteristic(service_uuid: str | bluetooth_sig.types.uuid.BluetoothUUID, characteristic: bluetooth_sig.gatt.characteristics.base.BaseCharacteristic[Any], initial_value: Any, *, properties: bluetooth_sig.types.gatt_enums.GattProperty | None = None) bluetooth_sig.types.peripheral_types.CharacteristicDefinition¶
Register a characteristic on a service, encoding the initial value.
If the service has not been seen before, a new primary
ServiceDefinitionis created automatically.- Parameters:
service_uuid – UUID of the parent service.
characteristic – SIG characteristic class instance.
initial_value – Python value to encode as the initial value.
properties – GATT properties. Defaults to
READ | NOTIFY.
- Returns:
The created
CharacteristicDefinition.- Raises:
RuntimeError – If the peripheral has already started advertising.
- async add_service(service: bluetooth_sig.types.peripheral_types.ServiceDefinition) None¶
Register a pre-built service definition directly.
For full control over the service definition. If you prefer typed helpers, use
add_characteristic()instead.- Parameters:
service – Complete service definition.
- Raises:
RuntimeError – If the peripheral has already started advertising.
- async get_current_value(characteristic: bluetooth_sig.gatt.characteristics.base.BaseCharacteristic[Any] | str | bluetooth_sig.types.uuid.BluetoothUUID) Any¶
Get the last Python value set for a hosted characteristic.
- Parameters:
characteristic – The characteristic instance, UUID string, or BluetoothUUID.
- Returns:
The last value passed to
update_value(), or the initial value.- Raises:
KeyError – If the characteristic is not hosted.
- async start() None¶
Register pending services on the backend and start advertising.
All services added via
add_characteristic()are flushed to the backend beforestart()is called on the manager.- Raises:
RuntimeError – If the peripheral has already started.
- async update_raw(char_uuid: str | bluetooth_sig.types.uuid.BluetoothUUID, raw_value: bytearray, *, notify: bool = True) None¶
Push pre-encoded bytes to a hosted characteristic.
Use this when you already have the encoded value or the characteristic does not have a SIG class registered.
- Parameters:
char_uuid – UUID of the characteristic.
raw_value – Pre-encoded bytes to set.
notify – Whether to notify subscribed centrals.
- Raises:
KeyError – If the characteristic UUID is not hosted.
RuntimeError – If the peripheral has not started.
- async update_value(characteristic: bluetooth_sig.gatt.characteristics.base.BaseCharacteristic[Any] | str | bluetooth_sig.types.uuid.BluetoothUUID, value: Any, *, notify: bool = True) None¶
Encode a typed value and push it to the hosted characteristic.
- Parameters:
characteristic – The characteristic instance, UUID string, or BluetoothUUID.
value – Python value to encode via
build_value().notify – Whether to notify subscribed centrals. Default
True.
- Raises:
KeyError – If the characteristic is not hosted on this peripheral.
RuntimeError – If the peripheral has not started.
- with_connectable(connectable: bool) PeripheralDevice¶
Set whether the peripheral accepts connections.
- Parameters:
connectable – True to accept connections.
- Returns:
Self for method chaining.
- with_discoverable(discoverable: bool) PeripheralDevice¶
Set whether the peripheral is discoverable.
- Parameters:
discoverable – True to be discoverable.
- Returns:
Self for method chaining.
- with_manufacturer_data(company_id: int, payload: bytes) PeripheralDevice¶
Configure manufacturer data for advertising.
- Parameters:
company_id – Bluetooth SIG company identifier.
payload – Manufacturer-specific payload bytes.
- Returns:
Self for method chaining.
- with_tx_power(power_dbm: int) PeripheralDevice¶
Set TX power level.
- Parameters:
power_dbm – Transmission power in dBm.
- Returns:
Self for method chaining.
- property hosted_characteristics: dict[str, HostedCharacteristic]¶
Map of UUID → HostedCharacteristic for all hosted characteristics.
- property services: list[bluetooth_sig.types.peripheral_types.ServiceDefinition]¶
Registered GATT services.