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:
Szymon Janc
2017-06-29 23:20:17 +02:00
parent 580c0dde93
commit 3ac3f417ac
5 changed files with 81 additions and 1 deletions
@@ -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);
+9 -1
View File
@@ -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;
+23
View File
@@ -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
*
+23
View File
@@ -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
*
+23
View File
@@ -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
*