Bluetooth 5.2 LE Power Control

I think variations on this question have been posted before but they all seem to be very old. I'd like to use the Bluetooth 5.2 LE Power Control features that involve exchanges of LL packets such as LL_POWER_CONTROL_REQ, LL_POWER_CONTROL_RSP and LL_POWER_CHANGE_IND.

I looked at this sample: https://docs.nordicsemi.com/bundle/ncs-3.0.0/page/zephyr/samples/bluetooth/hci_pwr_ctrl/README.html 

But my impression is it doesn't generate these particular PDUs and is only concerned with power control and levels as they apply to local connections. It seems to involve vendor specific (VS) extensions as well, which surprises me given there's standard support for this area.

The LL procedures I'm interested in are the Power Control Request procedure and the Power Change Indication procedure. There are associated HCI commands such as LE Read Remote Transmit Power Level.

With the following KConfig parameters, I can see that the relevant LL feature bits are set:

CONFIG_BT_TRANSMIT_POWER_CONTROL=y

CONFIG_BT_PATH_LOSS_MONITORING=y
CONFIG_BT_CTLR_TX_PWR_DYNAMIC_CONTROL=y
CONFIG_BT_CTLR_CONN_RSSI=y
But I don't see any APIs that  allow me to initiate procedures that result in LL power requests, response etc being exchanged.
So, does Zephyr on a nRFL15-DK support LE Power Control as defined in Bluetooth Core Specification v5.2 particularly with respect to querying or changing TX power levels on remote peer devices? If so, could someone please provide pointers on how to trigger exchanges of LL_POWER_CONTROL_REQ, LL_POWER_CONTROL_RSP and LL_POWER_CHANGE_IND PDUs using Zephyr APIs.
Thank you
Parents
  • Hi,

    While LE Power Control Request is covered by the Bluetooth Specification, and fully implemented by the SoftDevice Controller (as well as by the Zephyr host), there is no specified way to trigger the procedure directly using HCI commands. This is why there is a vendor specific (vs) command for that, which works between the Zephyr Host and the SoftDevice Controller (but mostly not in combination with other Hosts / Controllers).

    Most likely you are looking for bt_conn_set_remote_tx_power_level(), to be called from the host (app), for instructing the Controller to initiate the appropriate LE Power Control procedure.

    Regards,
    Terje

Reply
  • Hi,

    While LE Power Control Request is covered by the Bluetooth Specification, and fully implemented by the SoftDevice Controller (as well as by the Zephyr host), there is no specified way to trigger the procedure directly using HCI commands. This is why there is a vendor specific (vs) command for that, which works between the Zephyr Host and the SoftDevice Controller (but mostly not in combination with other Hosts / Controllers).

    Most likely you are looking for bt_conn_set_remote_tx_power_level(), to be called from the host (app), for instructing the Controller to initiate the appropriate LE Power Control procedure.

    Regards,
    Terje

Children
Related