Bluetooth: controller: Fix RSSI sign
The RSSI value is an 8-bit signed integer. Since the Link Layer works
only with positive unsigned integers, translate into a negative number
at the HCI layer.
Signed-off-by: Carles Cufi <carles.cufi@nordicsemi.no>
diff --git a/subsys/bluetooth/controller/hci/hci.c b/subsys/bluetooth/controller/hci/hci.c
index 8e097a5..c73f580 100644
--- a/subsys/bluetooth/controller/hci/hci.c
+++ b/subsys/bluetooth/controller/hci/hci.c
@@ -1675,14 +1675,14 @@
struct bt_hci_evt_le_advertising_info *adv_info;
u8_t data_len;
u8_t info_len;
- u8_t rssi;
+ s8_t rssi;
#if defined(CONFIG_BT_CTLR_PRIVACY)
u8_t rl_idx;
#endif /* CONFIG_BT_CTLR_PRIVACY */
#if defined(CONFIG_BT_CTLR_EXT_SCAN_FP)
u8_t direct;
#endif /* CONFIG_BT_CTLR_EXT_SCAN_FP */
- u8_t *prssi;
+ s8_t *prssi;
if (!(event_mask & BT_EVT_MASK_LE_META_EVENT)) {
return;
@@ -1715,8 +1715,8 @@
data_len = 0;
}
- rssi = b[offsetof(struct radio_pdu_node_rx, pdu_data) +
- offsetof(struct pdu_adv, payload) + adv->len];
+ rssi = -b[offsetof(struct radio_pdu_node_rx, pdu_data) +
+ offsetof(struct pdu_adv, payload) + adv->len];
#if defined(CONFIG_BT_CTLR_EXT_SCAN_FP)
if (direct) {
@@ -1802,12 +1802,12 @@
struct net_buf *buf, u8_t phy)
{
struct pdu_adv *adv = (struct pdu_adv *)pdu_data;
- u8_t rssi;
+ s8_t rssi;
- rssi = b[offsetof(struct radio_pdu_node_rx, pdu_data) +
- offsetof(struct pdu_adv, payload) + adv->len];
+ rssi = -b[offsetof(struct radio_pdu_node_rx, pdu_data) +
+ offsetof(struct pdu_adv, payload) + adv->len];
- BT_WARN("phy= 0x%x, type= 0x%x, len= %u, tat= %u, rat= %u, rssi=-%u dB",
+ BT_WARN("phy= 0x%x, type= 0x%x, len= %u, tat= %u, rat= %u, rssi=%d dB",
phy, adv->type, adv->len, adv->tx_addr, adv->rx_addr, rssi);
if ((adv->type == PDU_ADV_TYPE_EXT_IND) && adv->len) {
@@ -1883,18 +1883,18 @@
char addr_str[BT_ADDR_LE_STR_LEN];
bt_addr_le_t addr;
u8_t handle;
- u8_t rssi;
+ s8_t rssi;
handle = 0;
addr.type = adv->tx_addr;
memcpy(&addr.a.val[0], &adv->payload.scan_req.scan_addr[0],
sizeof(bt_addr_t));
- rssi = b[offsetof(struct radio_pdu_node_rx, pdu_data) +
- offsetof(struct pdu_adv, payload) + adv->len];
+ rssi = -b[offsetof(struct radio_pdu_node_rx, pdu_data) +
+ offsetof(struct pdu_adv, payload) + adv->len];
bt_addr_le_to_str(&addr, addr_str, sizeof(addr_str));
- BT_WARN("handle: %d, addr: %s, rssi: -%d dB.",
+ BT_WARN("handle: %d, addr: %s, rssi: %d dB.",
handle, addr_str, rssi);
return;