Coverage for src / bluetooth_sig / gatt / characteristics / system_id.py: 100%
17 statements
« prev ^ index » next coverage.py v7.13.1, created at 2026-01-11 20:14 +0000
« prev ^ index » next coverage.py v7.13.1, created at 2026-01-11 20:14 +0000
1"""System ID characteristic implementation."""
3from __future__ import annotations
5import msgspec
7from ..context import CharacteristicContext
8from .base import BaseCharacteristic
11class SystemIdData(msgspec.Struct, frozen=True, kw_only=True):
12 """System ID data.
14 Attributes:
15 manufacturer_id: 40-bit manufacturer identifier
16 oui: 24-bit organizationally unique identifier
17 """
19 manufacturer_id: bytes
20 oui: bytes
23class SystemIdCharacteristic(BaseCharacteristic[SystemIdData]):
24 """System ID characteristic (0x2A23).
26 org.bluetooth.characteristic.system_id
28 Represents a 64-bit system identifier: 40-bit manufacturer ID + 24-bit organizationally unique ID.
29 """
31 _manual_value_type = "SystemIdData"
32 expected_length = 8
34 def _decode_value(self, data: bytearray, ctx: CharacteristicContext | None = None) -> SystemIdData:
35 """Parse System ID.
37 Args:
38 data: Raw bytearray (8 bytes).
39 ctx: Optional CharacteristicContext.
41 Returns:
42 SystemIdData with manufacturer_id (5 bytes) and oui (3 bytes).
43 """
44 return SystemIdData(
45 manufacturer_id=bytes(data[0:5]),
46 oui=bytes(data[5:8]),
47 )
49 def _encode_value(self, data: SystemIdData) -> bytearray:
50 """Encode System ID.
52 Args:
53 data: SystemIdData to encode
55 Returns:
56 Encoded bytes
57 """
58 result = bytearray()
59 result.extend(data.manufacturer_id)
60 result.extend(data.oui)
61 return result