Coverage for src / bluetooth_sig / types / address.py: 88%
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"""Bluetooth address utilities.
3This module provides utilities for working with Bluetooth device addresses
4(BD_ADDR), commonly represented as 48-bit MAC addresses.
5"""
7from __future__ import annotations
10def mac_address_to_bytes(mac_address: str) -> bytes:
11 """Convert a MAC address string to 6 bytes.
13 Args:
14 mac_address: MAC address string (e.g., "AA:BB:CC:DD:EE:FF")
16 Returns:
17 6-byte representation of the MAC address
19 Raises:
20 ValueError: If MAC address format is invalid
22 Example:
23 >>> mac_address_to_bytes("AA:BB:CC:DD:EE:FF").hex()
24 'aabbccddeeff'
25 """
26 # Remove colons/dashes and convert to bytes
27 cleaned = mac_address.replace(":", "").replace("-", "")
28 if len(cleaned) != 12:
29 msg = f"Invalid MAC address format: {mac_address}"
30 raise ValueError(msg)
32 try:
33 return bytes.fromhex(cleaned)
34 except ValueError as err:
35 msg = f"Invalid MAC address hex characters: {mac_address}"
36 raise ValueError(msg) from err
39def bytes_to_mac_address(data: bytes | bytearray) -> str:
40 """Convert 6 bytes to a MAC address string.
42 Args:
43 data: 6-byte representation of MAC address
45 Returns:
46 MAC address string with colon separators (e.g., "AA:BB:CC:DD:EE:FF")
48 Raises:
49 ValueError: If data is not exactly 6 bytes
51 Example:
52 >>> bytes_to_mac_address(bytes.fromhex("aabbccddeeff"))
53 'AA:BB:CC:DD:EE:FF'
54 """
55 if len(data) != 6:
56 msg = f"MAC address must be exactly 6 bytes, got {len(data)}"
57 raise ValueError(msg)
58 return ":".join(f"{b:02X}" for b in data)
61__all__ = ["mac_address_to_bytes", "bytes_to_mac_address"]