mirror of
https://github.com/espressif/esp-nimble.git
synced 2026-08-09 19:47:56 +00:00
nimble/controller: Add support for setting advertising TX power
This allows host to set prefered TX power for advertising instance. Controller is allowed to ignore or adjust this value. X-Original-Commit: b6d919375838e6b03748725d47bb59aee94ece2f
This commit is contained in:
@@ -121,6 +121,9 @@ int ble_phy_rssi_get(void);
|
||||
/* Set the transmit power */
|
||||
int ble_phy_txpwr_set(int dbm);
|
||||
|
||||
/* Get highest allowed power from range */
|
||||
int ble_phy_txpower_round(int dbm);
|
||||
|
||||
/* Get the transmit power */
|
||||
int ble_phy_txpwr_get(void);
|
||||
|
||||
|
||||
@@ -1709,6 +1709,7 @@ ble_ll_adv_ext_set_param(uint8_t *cmdbuf, uint8_t *rspbuf, uint8_t *rsplen)
|
||||
uint8_t sec_phy;
|
||||
uint8_t sid;
|
||||
uint8_t scan_req_notif;
|
||||
int8_t tx_power;
|
||||
|
||||
if (cmdbuf[0] >= BLE_LL_ADV_INSTANCES) {
|
||||
return BLE_ERR_INV_HCI_CMD_PARMS;
|
||||
@@ -1843,7 +1844,14 @@ ble_ll_adv_ext_set_param(uint8_t *cmdbuf, uint8_t *rspbuf, uint8_t *rsplen)
|
||||
memcpy(advsm->peer_addr, &cmdbuf[12], BLE_DEV_ADDR_LEN);
|
||||
}
|
||||
|
||||
advsm->adv_txpwr = 0; /* TODO rspbuf[21];*/
|
||||
tx_power = (int8_t) rspbuf[21];
|
||||
if (tx_power == 127) {
|
||||
/* no preference */
|
||||
advsm->adv_txpwr = MYNEWT_VAL(BLE_LL_TX_PWR_DBM);
|
||||
} else {
|
||||
advsm->adv_txpwr = ble_phy_txpower_round(tx_power);
|
||||
}
|
||||
|
||||
advsm->own_addr_type = own_addr_type;
|
||||
advsm->peer_addr_type = peer_addr_type;
|
||||
advsm->adv_filter_policy = adv_filter_policy;
|
||||
|
||||
@@ -497,6 +497,29 @@ ble_phy_txpwr_set(int dbm)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* ble phy txpwr round
|
||||
*
|
||||
* Get the rounded transmit output power (in dBm).
|
||||
*
|
||||
* @param dbm Power output in dBm.
|
||||
*
|
||||
* @return int Rounded power in dBm
|
||||
*/
|
||||
int ble_phy_txpower_round(int dbm)
|
||||
{
|
||||
/* "Rail" power level if outside supported range */
|
||||
if (dbm > BLE_XCVR_TX_PWR_MAX_DBM) {
|
||||
dbm = BLE_XCVR_TX_PWR_MAX_DBM;
|
||||
} else {
|
||||
if (dbm < BLE_XCVR_TX_PWR_MIN_DBM) {
|
||||
dbm = BLE_XCVR_TX_PWR_MIN_DBM;
|
||||
}
|
||||
}
|
||||
|
||||
return dbm;
|
||||
}
|
||||
|
||||
/**
|
||||
* ble phy txpwr get
|
||||
*
|
||||
|
||||
@@ -1212,6 +1212,29 @@ ble_phy_txpwr_set(int dbm)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* ble phy txpwr round
|
||||
*
|
||||
* Get the rounded transmit output power (in dBm).
|
||||
*
|
||||
* @param dbm Power output in dBm.
|
||||
*
|
||||
* @return int Rounded power in dBm
|
||||
*/
|
||||
int ble_phy_txpower_round(int dbm)
|
||||
{
|
||||
/* "Rail" power level if outside supported range */
|
||||
if (dbm > NRF_TX_PWR_MAX_DBM) {
|
||||
dbm = NRF_TX_PWR_MAX_DBM;
|
||||
} else {
|
||||
if (dbm < NRF_TX_PWR_MIN_DBM) {
|
||||
dbm = NRF_TX_PWR_MIN_DBM;
|
||||
}
|
||||
}
|
||||
|
||||
return dbm;
|
||||
}
|
||||
|
||||
/**
|
||||
* ble phy txpwr get
|
||||
*
|
||||
|
||||
@@ -1294,6 +1294,29 @@ ble_phy_txpwr_set(int dbm)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* ble phy txpwr round
|
||||
*
|
||||
* Get the rounded transmit output power (in dBm).
|
||||
*
|
||||
* @param dbm Power output in dBm.
|
||||
*
|
||||
* @return int Rounded power in dBm
|
||||
*/
|
||||
int ble_phy_txpower_round(int dbm)
|
||||
{
|
||||
/* "Rail" power level if outside supported range */
|
||||
if (dbm > NRF_TX_PWR_MAX_DBM) {
|
||||
dbm = NRF_TX_PWR_MAX_DBM;
|
||||
} else {
|
||||
if (dbm < NRF_TX_PWR_MIN_DBM) {
|
||||
dbm = NRF_TX_PWR_MIN_DBM;
|
||||
}
|
||||
}
|
||||
|
||||
return dbm;
|
||||
}
|
||||
|
||||
/**
|
||||
* ble phy set access addr
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user