:material-memory: 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](https://docs.zephyrproject.org/latest/samples/bluetooth/hci_usb/README.html) application, an [nRF52840 dongle](https://www.nordicsemi.com/Products/Development- hardware/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](../downloads/zephyr/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: ```python 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}") ```