Coverage for src / bluetooth_sig / types / registry / class_of_device.py: 100%
25 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"""Class of Device data structures for Classic Bluetooth.
3This module provides data structures for representing and decoding the 24-bit
4Class of Device (CoD) field used in Classic Bluetooth for device classification.
5"""
7from __future__ import annotations
9import msgspec
12class CodServiceClassInfo(msgspec.Struct, frozen=True, kw_only=True):
13 """Service class information from Class of Device field.
15 Attributes:
16 bit_position: Bit position in the CoD field (13-23)
17 name: Human-readable service class name
18 """
20 bit_position: int
21 name: str
24class MajorDeviceClassInfo(msgspec.Struct, frozen=True, kw_only=True):
25 """Major device class information from Class of Device field.
27 Attributes:
28 value: Major device class value (0-31, 5 bits)
29 name: Human-readable major device class name
30 """
32 value: int
33 name: str
36class MinorDeviceClassInfo(msgspec.Struct, frozen=True, kw_only=True):
37 """Minor device class information from Class of Device field.
39 Attributes:
40 value: Minor device class value (0-63, 6 bits)
41 name: Human-readable minor device class name
42 major_class: Major device class this minor class belongs to
43 """
45 value: int
46 name: str
47 major_class: int
50class ClassOfDeviceInfo(msgspec.Struct, frozen=True, kw_only=True):
51 """Decoded Class of Device information.
53 Represents the decoded classification information from a 24-bit CoD field,
54 including major/minor device classes and service classes.
56 Attributes:
57 major_class: Major device class name (e.g., "Computer", "Phone")
58 minor_class: Minor device class name (e.g., "Laptop", "Smartphone"), or None
59 service_classes: List of service class names (e.g., ["Networking", "Audio"])
60 raw_value: Original 24-bit CoD value
61 """
63 major_class: list[MajorDeviceClassInfo] | None
64 minor_class: list[MinorDeviceClassInfo] | None
65 service_classes: list[str]
66 raw_value: int
68 @property
69 def full_description(self) -> str:
70 """Get full device description combining major, minor, and services.
72 Returns:
73 Human-readable description like "Computer: Laptop (Networking, Audio)"
75 Examples:
76 >>> info = ClassOfDeviceInfo(
77 ... major_class=[MajorDeviceClassInfo(value=1, name="Computer")],
78 ... minor_class=[MinorDeviceClassInfo(value=3, name="Laptop", major_class=1)],
79 ... service_classes=["Networking"],
80 ... raw_value=0x02010C,
81 ... )
82 >>> info.full_description
83 'Computer: Laptop (Networking)'
84 """
85 desc = self.major_class[0].name if self.major_class else "Unknown"
86 if self.minor_class:
87 desc += f": {self.minor_class[0].name}"
88 if self.service_classes:
89 desc += f" ({', '.join(self.service_classes)})"
90 return desc