forked from auracaster/bumble_mirror
fix a few HCI types and make the bridge more robust
This commit is contained in:
@@ -81,7 +81,9 @@ async def async_main():
|
|||||||
response = hci.HCI_Command_Complete_Event(
|
response = hci.HCI_Command_Complete_Event(
|
||||||
num_hci_command_packets=1,
|
num_hci_command_packets=1,
|
||||||
command_opcode=hci_packet.op_code,
|
command_opcode=hci_packet.op_code,
|
||||||
return_parameters=bytes([hci.HCI_SUCCESS]),
|
return_parameters=hci.HCI_StatusReturnParameters(
|
||||||
|
status=hci.HCI_ErrorCode.SUCCESS
|
||||||
|
),
|
||||||
)
|
)
|
||||||
# Return a packet with 'respond to sender' set to True
|
# Return a packet with 'respond to sender' set to True
|
||||||
return (bytes(response), True)
|
return (bytes(response), True)
|
||||||
|
|||||||
@@ -37,7 +37,12 @@ class HCI_Bridge:
|
|||||||
|
|
||||||
def on_packet(self, packet):
|
def on_packet(self, packet):
|
||||||
# Convert the packet bytes to an object
|
# Convert the packet bytes to an object
|
||||||
|
try:
|
||||||
hci_packet = HCI_Packet.from_bytes(packet)
|
hci_packet = HCI_Packet.from_bytes(packet)
|
||||||
|
except Exception:
|
||||||
|
logger.warning('forwarding unparsed packet as-is')
|
||||||
|
self.hci_sink.on_packet(packet)
|
||||||
|
return
|
||||||
|
|
||||||
# Filter the packet
|
# Filter the packet
|
||||||
if self.packet_filter is not None:
|
if self.packet_filter is not None:
|
||||||
|
|||||||
@@ -1177,7 +1177,7 @@ class ChannelSoundingCapabilities:
|
|||||||
rtt_capability: int
|
rtt_capability: int
|
||||||
rtt_aa_only_n: int
|
rtt_aa_only_n: int
|
||||||
rtt_sounding_n: int
|
rtt_sounding_n: int
|
||||||
rtt_random_payload_n: int
|
rtt_random_sequence_n: int
|
||||||
nadm_sounding_capability: int
|
nadm_sounding_capability: int
|
||||||
nadm_random_capability: int
|
nadm_random_capability: int
|
||||||
cs_sync_phys_supported: int
|
cs_sync_phys_supported: int
|
||||||
@@ -2926,7 +2926,7 @@ class Device(utils.CompositeEventEmitter):
|
|||||||
rtt_capability=result.rtt_capability,
|
rtt_capability=result.rtt_capability,
|
||||||
rtt_aa_only_n=result.rtt_aa_only_n,
|
rtt_aa_only_n=result.rtt_aa_only_n,
|
||||||
rtt_sounding_n=result.rtt_sounding_n,
|
rtt_sounding_n=result.rtt_sounding_n,
|
||||||
rtt_random_payload_n=result.rtt_random_payload_n,
|
rtt_random_sequence_n=result.rtt_random_sequence_n,
|
||||||
nadm_sounding_capability=result.nadm_sounding_capability,
|
nadm_sounding_capability=result.nadm_sounding_capability,
|
||||||
nadm_random_capability=result.nadm_random_capability,
|
nadm_random_capability=result.nadm_random_capability,
|
||||||
cs_sync_phys_supported=result.cs_sync_phys_supported,
|
cs_sync_phys_supported=result.cs_sync_phys_supported,
|
||||||
@@ -6673,7 +6673,7 @@ class Device(utils.CompositeEventEmitter):
|
|||||||
rtt_capability=event.rtt_capability,
|
rtt_capability=event.rtt_capability,
|
||||||
rtt_aa_only_n=event.rtt_aa_only_n,
|
rtt_aa_only_n=event.rtt_aa_only_n,
|
||||||
rtt_sounding_n=event.rtt_sounding_n,
|
rtt_sounding_n=event.rtt_sounding_n,
|
||||||
rtt_random_payload_n=event.rtt_random_payload_n,
|
rtt_random_sequence_n=event.rtt_random_sequence_n,
|
||||||
nadm_sounding_capability=event.nadm_sounding_capability,
|
nadm_sounding_capability=event.nadm_sounding_capability,
|
||||||
nadm_random_capability=event.nadm_random_capability,
|
nadm_random_capability=event.nadm_random_capability,
|
||||||
cs_sync_phys_supported=event.cs_sync_phys_supported,
|
cs_sync_phys_supported=event.cs_sync_phys_supported,
|
||||||
|
|||||||
@@ -2407,6 +2407,7 @@ class HCI_Packet:
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def from_bytes(cls, packet: bytes) -> HCI_Packet:
|
def from_bytes(cls, packet: bytes) -> HCI_Packet:
|
||||||
|
try:
|
||||||
packet_type = packet[0]
|
packet_type = packet[0]
|
||||||
|
|
||||||
if packet_type == HCI_COMMAND_PACKET:
|
if packet_type == HCI_COMMAND_PACKET:
|
||||||
@@ -2425,6 +2426,9 @@ class HCI_Packet:
|
|||||||
return HCI_IsoDataPacket.from_bytes(packet)
|
return HCI_IsoDataPacket.from_bytes(packet)
|
||||||
|
|
||||||
return HCI_CustomPacket(packet)
|
return HCI_CustomPacket(packet)
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f'error parsing HCI packet [{packet.hex()}]: {e}')
|
||||||
|
raise
|
||||||
|
|
||||||
def __init__(self, name: str) -> None:
|
def __init__(self, name: str) -> None:
|
||||||
self.name = name
|
self.name = name
|
||||||
@@ -5854,7 +5858,7 @@ class HCI_LE_CS_Read_Local_Supported_Capabilities_ReturnParameters(
|
|||||||
rtt_capability: int = field(metadata=metadata(1))
|
rtt_capability: int = field(metadata=metadata(1))
|
||||||
rtt_aa_only_n: int = field(metadata=metadata(1))
|
rtt_aa_only_n: int = field(metadata=metadata(1))
|
||||||
rtt_sounding_n: int = field(metadata=metadata(1))
|
rtt_sounding_n: int = field(metadata=metadata(1))
|
||||||
rtt_random_payload_n: int = field(metadata=metadata(1))
|
rtt_random_sequence_n: int = field(metadata=metadata(1))
|
||||||
nadm_sounding_capability: int = field(metadata=metadata(2))
|
nadm_sounding_capability: int = field(metadata=metadata(2))
|
||||||
nadm_random_capability: int = field(metadata=metadata(2))
|
nadm_random_capability: int = field(metadata=metadata(2))
|
||||||
cs_sync_phys_supported: int = field(metadata=metadata(CS_SYNC_PHY_SUPPORTED_SPEC))
|
cs_sync_phys_supported: int = field(metadata=metadata(CS_SYNC_PHY_SUPPORTED_SPEC))
|
||||||
@@ -5910,7 +5914,7 @@ class HCI_LE_CS_Write_Cached_Remote_Supported_Capabilities_Command(
|
|||||||
rtt_capability: int = field(metadata=metadata(1))
|
rtt_capability: int = field(metadata=metadata(1))
|
||||||
rtt_aa_only_n: int = field(metadata=metadata(1))
|
rtt_aa_only_n: int = field(metadata=metadata(1))
|
||||||
rtt_sounding_n: int = field(metadata=metadata(1))
|
rtt_sounding_n: int = field(metadata=metadata(1))
|
||||||
rtt_random_payload_n: int = field(metadata=metadata(1))
|
rtt_random_sequence_n: int = field(metadata=metadata(1))
|
||||||
nadm_sounding_capability: int = field(metadata=metadata(2))
|
nadm_sounding_capability: int = field(metadata=metadata(2))
|
||||||
nadm_random_capability: int = field(metadata=metadata(2))
|
nadm_random_capability: int = field(metadata=metadata(2))
|
||||||
cs_sync_phys_supported: int = field(metadata=metadata(CS_SYNC_PHY_SUPPORTED_SPEC))
|
cs_sync_phys_supported: int = field(metadata=metadata(CS_SYNC_PHY_SUPPORTED_SPEC))
|
||||||
@@ -7118,7 +7122,7 @@ class HCI_LE_CS_Read_Remote_Supported_Capabilities_Complete_Event(HCI_LE_Meta_Ev
|
|||||||
rtt_capability: int = field(metadata=metadata(1))
|
rtt_capability: int = field(metadata=metadata(1))
|
||||||
rtt_aa_only_n: int = field(metadata=metadata(1))
|
rtt_aa_only_n: int = field(metadata=metadata(1))
|
||||||
rtt_sounding_n: int = field(metadata=metadata(1))
|
rtt_sounding_n: int = field(metadata=metadata(1))
|
||||||
rtt_random_payload_n: int = field(metadata=metadata(1))
|
rtt_random_sequence_n: int = field(metadata=metadata(1))
|
||||||
nadm_sounding_capability: int = field(metadata=metadata(2))
|
nadm_sounding_capability: int = field(metadata=metadata(2))
|
||||||
nadm_random_capability: int = field(metadata=metadata(2))
|
nadm_random_capability: int = field(metadata=metadata(2))
|
||||||
cs_sync_phys_supported: int = field(metadata=metadata(CS_SYNC_PHY_SUPPORTED_SPEC))
|
cs_sync_phys_supported: int = field(metadata=metadata(CS_SYNC_PHY_SUPPORTED_SPEC))
|
||||||
|
|||||||
Reference in New Issue
Block a user