Coverage for src / bluetooth_sig / gatt / characteristics / date_of_birth.py: 100%
18 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"""Date of Birth characteristic (0x2A85)."""
3from __future__ import annotations
5from ...types import DateData
6from ..context import CharacteristicContext
7from .base import BaseCharacteristic
8from .utils import DataParser
10DateOfBirthData = DateData
13class DateOfBirthCharacteristic(BaseCharacteristic[DateOfBirthData]):
14 """Date of Birth characteristic (0x2A85).
16 org.bluetooth.characteristic.date_of_birth
18 Date of Birth characteristic.
19 """
21 def _decode_value(self, data: bytearray, ctx: CharacteristicContext | None = None) -> DateOfBirthData:
22 """Decode Date of Birth from raw bytes.
24 Args:
25 data: Raw bytes from BLE characteristic (exactly 4 bytes)
26 ctx: Optional context for parsing
28 Returns:
29 DateOfBirthData: Parsed date of birth
30 """
31 # Year is uint16 (little-endian)
32 year = DataParser.parse_int16(data, offset=0, signed=False)
34 # Month is uint8
35 month = data[2]
37 # Day is uint8
38 day = data[3]
40 return DateOfBirthData(year=year, month=month, day=day)
42 def _encode_value(self, data: DateOfBirthData) -> bytearray:
43 """Encode Date of Birth to raw bytes.
45 Args:
46 data: DateOfBirthData to encode
48 Returns:
49 bytearray: Encoded bytes
50 """
51 result = bytearray()
53 # Encode year (uint16, little-endian)
54 result.extend(data.year.to_bytes(2, byteorder="little", signed=False))
56 # Encode month (uint8)
57 result.append(data.month)
59 # Encode day (uint8)
60 result.append(data.day)
62 return result