Skip to content

ZEPHYR PLATFORM

Set TX Power on nRF52840

The Nordic nRF52840 supports Zephyr's vendor specific HCI command for setting TX power during advertising, connection, or scanning. With the example HCI USB application, an nRF52840 dongle can be used as a Bumble controller.

To add dynamic TX power support to the HCI USB application, add the following to zephyr/samples/bluetooth/hci_usb/prj.conf and build.

CONFIG_BT_CTLR_ADVANCED_FEATURES=y
CONFIG_BT_CTLR_CONN_RSSI=y
CONFIG_BT_CTLR_TX_PWR_DYNAMIC_CONTROL=y

Alternatively, a prebuilt firmware application can be downloaded here: hci_usb.zip.

Put the nRF52840 dongle into bootloader mode by pressing the RESET button. The LED should pulse red. Load the firmware application with the nrfutil tool:

nrfutil dfu usb-serial -pkg hci_usb.zip -p /dev/ttyACM0

The vendor specific HCI commands to read and write TX power are defined in bumble/vendor/zephyr/hci.py and may be used as such:

from bumble.vendor.zephyr.hci import HCI_Write_Tx_Power_Level_Command

# set advertising power to -4 dB
response = await host.send_command(
    HCI_Write_Tx_Power_Level_Command(
        handle_type=HCI_Write_Tx_Power_Level_Command.TX_POWER_HANDLE_TYPE_ADV,
        connection_handle=0,
        tx_power_level=-4,
    )
)

if response.return_parameters.status == HCI_SUCCESS:
    print(f"TX power set to {response.return_parameters.selected_tx_power_level}")