We are currently using the CYBT-423028-02 Bluetooth radio module, based on the CYW20719 radio, in HCI mode hosted by Android on an i.MX 6 microprocessor. We seem to be having issues of transmitted signal strength from our packaged product as measured by its RSSI by other devices and instrumentation.
We have looked at how we can increase transmit power from the CYBT-423028-02 module. From the CYW20719 datasheet Section 5.2 (Receiver Path), it appears that the radio baseband automatically modulates TX power based on RSSI of the connected device (based on the following text):
Receiver Signal Strength Indicator
The radio portion of the CYBT-4230xx-02 provides a receiver signal strength indicator (RSSI) to the baseband. This enables the
controller to take part in a Bluetooth power-controlled link by providing a metric of its own receiver signal strength to determine whether
the transmitter should increase or decrease its output power.
We want to bypass this behavior by setting TX power to maximum (+4 dBm) and attempted to control the TX power from our i.MX 6 host side by adding the command HCI_VENDOR_SET_TX_PWR (0xFDA5) to our vendor code library and build into Android. However, this was unsuccessful.
- Is there a way for us to control transmit power from our i.MX 6 host via Android (using HCI_VENDOR_SET_TX_PWR command)? This would be out preferred way of handling transmit power.
- If not, is there a way to modify the Cypress module itself, whether updating a setting through another path or running a small program in the module's Cortex-M4 to set transmit power upon boot and then place the module in HCI mode to continue operation with the i.MX 6 host/HCI with the new TX power setting maintained? For example, can we change TX power from default to maximum power by using this function:
CYBLE_API_RESULT_T CyBle_SetTxPowerLevel(CYBLE_BLESS_PWR_IN_DB_T * bleSsPwrLvl);
Description: This function sets the transmit power of the BLE radio for given BLE sub-system channel group. This is a blocking function. No event is generated on calling this function.
power.blePwrLevelInDbm=CYBLE_LL_PWR_LVL_3_DBM; ------> CHANGE THIS TO CYBLE_LL_PWR_LVL_MAX
3. What is the default value for the transmit power level in the current firmware when the radio is used in HCI mode?
We very much appreciate any insight into how we can control transmit power.