Coverage for src / bluetooth_sig / gatt / characteristics / incoming_call.py: 100%
20 statements
« prev ^ index » next coverage.py v7.13.5, created at 2026-04-03 16:41 +0000
« prev ^ index » next coverage.py v7.13.5, created at 2026-04-03 16:41 +0000
1"""Incoming Call characteristic (0x2BC1)."""
3from __future__ import annotations
5import msgspec
7from ..context import CharacteristicContext
8from .base import BaseCharacteristic
9from .utils import DataParser
12class IncomingCallData(msgspec.Struct, frozen=True, kw_only=True):
13 """Parsed data from Incoming Call characteristic."""
15 call_index: int
16 uri: str
19class IncomingCallCharacteristic(BaseCharacteristic[IncomingCallData]):
20 """Incoming Call characteristic (0x2BC1).
22 org.bluetooth.characteristic.incoming_call
24 Notifies the client of an incoming call with the caller URI.
25 """
27 min_length = 1
28 allow_variable_length = True
30 def _decode_value(
31 self, data: bytearray, ctx: CharacteristicContext | None = None, *, validate: bool = True
32 ) -> IncomingCallData:
33 call_index = DataParser.parse_int8(data, 0, signed=False)
34 uri = DataParser.parse_utf8_string(data[1:]) if len(data) > 1 else ""
36 return IncomingCallData(call_index=call_index, uri=uri)
38 def _encode_value(self, data: IncomingCallData) -> bytearray:
39 result = bytearray()
40 result.extend(DataParser.encode_int8(data.call_index, signed=False))
41 result.extend(data.uri.encode("utf-8"))
42 return result