# 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 # ----------------------------------------------------------------------------- from bumble.hci import ( hci_vendor_command_op_code, HCI_Command, STATUS_SPEC, ) # ----------------------------------------------------------------------------- # 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_vendor_command_op_code(0x000E) HCI_READ_TX_POWER_LEVEL_COMMAND = hci_vendor_command_op_code(0x000F) 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 # ----------------------------------------------------------------------------- @HCI_Command.command( fields=[('handle_type', 1), ('connection_handle', 2), ('tx_power_level', -1)], return_parameters_fields=[ ('status', STATUS_SPEC), ('handle_type', 1), ('connection_handle', 2), ('selected_tx_power_level', -1), ], ) class HCI_Write_Tx_Power_Level_Command(HCI_Command, 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. ''' # ----------------------------------------------------------------------------- @HCI_Command.command( fields=[('handle_type', 1), ('connection_handle', 2)], return_parameters_fields=[ ('status', STATUS_SPEC), ('handle_type', 1), ('connection_handle', 2), ('tx_power_level', -1), ], ) class HCI_Read_Tx_Power_Level_Command(HCI_Command, 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. '''