From 658f641a535b5bce69118aebc322087e38a24d1c Mon Sep 17 00:00:00 2001 From: Gilles Boccon-Gibod Date: Tue, 11 Jun 2024 13:21:04 -0700 Subject: [PATCH] add manufacturer data --- apps/auracast.py | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/apps/auracast.py b/apps/auracast.py index 107c81f..463fc9b 100644 --- a/apps/auracast.py +++ b/apps/auracast.py @@ -20,12 +20,13 @@ import asyncio import dataclasses import logging import os -from typing import Dict, Optional +from typing import cast, Dict, Optional, Tuple import click import pyee from bumble.colors import color +import bumble.company_ids import bumble.core import bumble.device import bumble.gatt @@ -69,6 +70,7 @@ class BroadcastDiscoverer: ] = None appearance: Optional[bumble.core.Appearance] = None biginfo: Optional[bumble.device.BIGInfoAdvertisement] = None + manufacturer_data: Optional[Tuple[str, bytes]] = None def __post_init__(self) -> None: super().__init__() @@ -124,6 +126,19 @@ class BroadcastDiscoverer: bumble.core.AdvertisingData.APPEARANCE ) + if manufacturer_data := advertisement.data.get( + bumble.core.AdvertisingData.MANUFACTURER_SPECIFIC_DATA + ): + assert isinstance(manufacturer_data, tuple) + company_id = cast(int, manufacturer_data[0]) + data = cast(bytes, manufacturer_data[1]) + self.manufacturer_data = ( + bumble.company_ids.COMPANY_IDENTIFIERS.get( + company_id, f'0x{company_id:04X}' + ), + data, + ) + def print(self) -> None: print( color('Broadcast:', 'yellow'), @@ -136,6 +151,12 @@ class BroadcastDiscoverer: print(f' {color("RSSI", "cyan")}: {self.rssi}') print(f' {color("SID", "cyan")}: {self.sync.sid}') + if self.manufacturer_data: + print( + f' {color("Manufacturer Data", "cyan")}: ' + f'{self.manufacturer_data[0]} -> {self.manufacturer_data[1].hex()}' + ) + if self.broadcast_audio_announcement: print( f' {color("Broadcast ID", "cyan")}: '