Coverage for src / bluetooth_sig / types / advertising / extended.py: 100%

32 statements  

« prev     ^ index     » next       coverage.py v7.13.5, created at 2026-03-18 11:17 +0000

1"""Extended advertising field types (BLE 5.0+). 

2 

3Constant Tone Extension, Advertising Data Info, Auxiliary Pointer, and Sync Info. 

4""" 

5 

6from __future__ import annotations 

7 

8from enum import IntEnum 

9 

10import msgspec 

11 

12 

13class CTEType(IntEnum): 

14 """Constant Tone Extension (CTE) Types (Core Spec Vol 6, Part B, Section 2.5).""" 

15 

16 AOA = 0x00 # Angle of Arrival 

17 AOD_1US = 0x01 # Angle of Departure with 1μs slots 

18 AOD_2US = 0x02 # Angle of Departure with 2μs slots 

19 

20 

21class CTEInfo(msgspec.Struct, kw_only=True): 

22 """Constant Tone Extension (CTE) information (BLE 5.1+ Direction Finding). 

23 

24 Attributes: 

25 cte_time: CTE length in 8μs units (0-19, representing 16-160μs) 

26 cte_type: Type of CTE (AoA, AoD 1μs, or AoD 2μs) 

27 """ 

28 

29 cte_time: int 

30 cte_type: CTEType 

31 

32 

33class AdvertisingDataInfo(msgspec.Struct, kw_only=True): 

34 """Advertising Data Info (ADI) field (BLE 5.0+). 

35 

36 Attributes: 

37 advertising_data_id: Advertising Data ID (DID) - 12 bits 

38 advertising_set_id: Advertising Set ID (SID) - 4 bits 

39 """ 

40 

41 advertising_data_id: int # 12-bit DID (0-4095) 

42 advertising_set_id: int # 4-bit SID (0-15) 

43 

44 

45class PHYType(IntEnum): 

46 """PHY types for auxiliary channel (Core Spec Vol 6, Part B, Section 2.3.4.6).""" 

47 

48 LE_1M = 0x00 

49 LE_2M = 0x01 

50 LE_CODED = 0x02 

51 

52 

53class AuxiliaryPointer(msgspec.Struct, kw_only=True): 

54 """Auxiliary Pointer for chaining extended advertising packets (BLE 5.0+). 

55 

56 Attributes: 

57 channel_index: Advertising channel index (0-39) 

58 ca: Clock accuracy (0=51-500ppm, 1=0-50ppm) 

59 offset_units: Units for aux_offset (0=30μs, 1=300μs) 

60 aux_offset: Time offset to auxiliary packet (13 bits) 

61 aux_phy: PHY used for auxiliary packet 

62 """ 

63 

64 channel_index: int # 0-39 

65 ca: bool 

66 offset_units: int # 0 or 1 

67 aux_offset: int # 13-bit value 

68 aux_phy: PHYType 

69 

70 

71class SyncInfo(msgspec.Struct, kw_only=True): 

72 """Synchronization Info for Periodic Advertising (BLE 5.0+). 

73 

74 Attributes: 

75 sync_packet_offset: Offset to first periodic advertising packet (13 bits, 30μs units) 

76 offset_units: Units for sync_packet_offset (0=30μs, 1=300μs) 

77 interval: Periodic advertising interval (1.25ms units, range: 7.5ms-81.91875s) 

78 channel_map: Channel map for periodic advertising (37 bits) 

79 sleep_clock_accuracy: Sleep clock accuracy (0-7, represents ppm ranges) 

80 advertising_address: Advertiser address (6 bytes) 

81 advertising_address_type: 0=Public, 1=Random 

82 sync_counter: Synchronization counter for packet identification 

83 """ 

84 

85 sync_packet_offset: int # 13 bits 

86 offset_units: int # 0 or 1 

87 interval: int # Periodic advertising interval in 1.25ms units 

88 channel_map: int # 37-bit channel map 

89 sleep_clock_accuracy: int # 0-7 (ppm ranges) 

90 advertising_address: str # MAC address 

91 advertising_address_type: int # 0 or 1 

92 sync_counter: int # Packet counter