In the KW36 SDK, there is an API bleResult_t Controller_SetTxPowerLevel(uint8_t level, txChannelType_t channel) to set the Tx power, but the unit of param[in] level is not dBm.
But how do we set a Tx power in dBm?
By going through the source code, we found that two conversions are required between the actual dBm and the set value of the API.
One is PA_POWER to Transmit Output Power conversion table:
Other is Level to PA_POWER conversion table:
.tx_power[0] = 0x0001, .tx_power[1] = 0x0002, .tx_power[2] = 0x0004,
.tx_power[3] = 0x0006, .tx_power[4] = 0x0008, .tx_power[5] = 0x000a,
.tx_power[6] = 0x000c, .tx_power[7] = 0x000e, .tx_power[8] = 0x0010,
.tx_power[9] = 0x0012, .tx_power[10] = 0x0014, .tx_power[11] = 0x0016,
.tx_power[12] = 0x0018, .tx_power[13] = 0x001a, .tx_power[14] = 0x001c,
.tx_power[15] = 0x001e, .tx_power[16] = 0x0020, .tx_power[17] = 0x0022,
.tx_power[18] = 0x0024, .tx_power[19] = 0x0026, .tx_power[20] = 0x0028,
.tx_power[21] = 0x002a, .tx_power[22] = 0x002c, .tx_power[23] = 0x002e,
.tx_power[24] = 0x0030, .tx_power[25] = 0x0032, .tx_power[26] = 0x0034,
.tx_power[27] = 0x0036, .tx_power[28] = 0x0038, .tx_power[29] = 0x003a,
.tx_power[30] = 0x003c, .tx_power[31] = 0x003e,
The input parameter 'level' of the API is the subscript of this array. The array value is PA_POWER of first conversion table, then we can find the final Tx power.
From another perspective, the parameter 'level' is the index of the first table.
The following demonstrates a conversion process.