# Copyright 2021-2023 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # ----------------------------------------------------------------------------- # Imports # ----------------------------------------------------------------------------- import dataclasses from bumble import hci # ----------------------------------------------------------------------------- # Constants # ----------------------------------------------------------------------------- # Zephyr RTOS Vendor Specific Commands and Events. # Only a subset of the commands are implemented here currently. # # pylint: disable-next=line-too-long # See https://github.com/zephyrproject-rtos/zephyr/blob/main/include/zephyr/bluetooth/hci_vs.h HCI_WRITE_TX_POWER_LEVEL_COMMAND = hci.hci_vendor_command_op_code(0x000E) HCI_READ_TX_POWER_LEVEL_COMMAND = hci.hci_vendor_command_op_code(0x000F) hci.HCI_Command.register_commands(globals()) # ----------------------------------------------------------------------------- class TX_Power_Level_Command: ''' Base class for read and write TX power level HCI commands ''' TX_POWER_HANDLE_TYPE_ADV = 0x00 TX_POWER_HANDLE_TYPE_SCAN = 0x01 TX_POWER_HANDLE_TYPE_CONN = 0x02 # ----------------------------------------------------------------------------- @dataclasses.dataclass class HCI_Write_Tx_Power_Level_ReturnParameters(hci.HCI_StatusReturnParameters): handle_type: int = hci.field(metadata=hci.metadata(1)) connection_handle: int = hci.field(metadata=hci.metadata(2)) selected_tx_power_level: int = hci.field(metadata=hci.metadata(-1)) @hci.HCI_SyncCommand.sync_command(HCI_Write_Tx_Power_Level_ReturnParameters) @dataclasses.dataclass class HCI_Write_Tx_Power_Level_Command( hci.HCI_SyncCommand[HCI_Write_Tx_Power_Level_ReturnParameters], TX_Power_Level_Command, ): ''' Write TX power level. See BT_HCI_OP_VS_WRITE_TX_POWER_LEVEL in https://github.com/zephyrproject-rtos/zephyr/blob/main/include/zephyr/bluetooth/hci_vs.h Power level is in dB. Connection handle for TX_POWER_HANDLE_TYPE_ADV and TX_POWER_HANDLE_TYPE_SCAN should be zero. ''' handle_type: int = dataclasses.field(metadata=hci.metadata(1)) connection_handle: int = dataclasses.field(metadata=hci.metadata(2)) tx_power_level: int = dataclasses.field(metadata=hci.metadata(-1)) # ----------------------------------------------------------------------------- @dataclasses.dataclass class HCI_Read_Tx_Power_Level_ReturnParameters(hci.HCI_StatusReturnParameters): handle_type: int = hci.field(metadata=hci.metadata(1)) connection_handle: int = hci.field(metadata=hci.metadata(2)) tx_power_level: int = hci.field(metadata=hci.metadata(-1)) @hci.HCI_SyncCommand.sync_command(HCI_Read_Tx_Power_Level_ReturnParameters) @dataclasses.dataclass class HCI_Read_Tx_Power_Level_Command( hci.HCI_SyncCommand[HCI_Read_Tx_Power_Level_ReturnParameters], TX_Power_Level_Command, ): ''' Read TX power level. See BT_HCI_OP_VS_READ_TX_POWER_LEVEL in https://github.com/zephyrproject-rtos/zephyr/blob/main/include/zephyr/bluetooth/hci_vs.h Power level is in dB. Connection handle for TX_POWER_HANDLE_TYPE_ADV and TX_POWER_HANDLE_TYPE_SCAN should be zero. ''' handle_type: int = dataclasses.field(metadata=hci.metadata(1)) connection_handle: int = dataclasses.field(metadata=hci.metadata(2))