diff --git a/drivers/kw2xrf/include/kw2xrf_getset.h b/drivers/kw2xrf/include/kw2xrf_getset.h index 0b02cc282f..5ffdf29d8c 100644 --- a/drivers/kw2xrf/include/kw2xrf_getset.h +++ b/drivers/kw2xrf/include/kw2xrf_getset.h @@ -160,7 +160,7 @@ uint8_t kw2xrf_get_cca_mode(kw2xrf_t *dev); * * @return deduced RSSI in dBm */ -uint32_t kw2xrf_get_rssi(uint32_t value); +int16_t kw2xrf_get_rssi(uint32_t value); /** * @brief Get state of a given device diff --git a/drivers/kw2xrf/kw2xrf_getset.c b/drivers/kw2xrf/kw2xrf_getset.c index 71c1fe5321..b3bd2f07ee 100644 --- a/drivers/kw2xrf/kw2xrf_getset.c +++ b/drivers/kw2xrf/kw2xrf_getset.c @@ -346,7 +346,7 @@ uint8_t kw2xrf_get_cca_mode(kw2xrf_t *dev) return (tmp & MKW2XDM_PHY_CTRL4_CCATYPE_MASK) >> MKW2XDM_PHY_CTRL4_CCATYPE_SHIFT; } -uint32_t kw2xrf_get_rssi(uint32_t value) +int16_t kw2xrf_get_rssi(uint32_t value) { /* Get rssi (Received Signal Strength Indicator, unit is dBm) * from lqi (Link Quality Indicator) value. @@ -361,7 +361,7 @@ uint32_t kw2xrf_get_rssi(uint32_t value) */ uint32_t a = (uint32_t)(295.4 * 65536 / 2.84); uint32_t b = (uint32_t)(65536 / 2.84); - return (a - (b * value)) >> 16; + return ((b * value) - a) >> 16; } void kw2xrf_set_option(kw2xrf_t *dev, uint16_t option, bool state) diff --git a/drivers/kw2xrf/kw2xrf_netdev.c b/drivers/kw2xrf/kw2xrf_netdev.c index 5511b5ea22..e0a876711b 100644 --- a/drivers/kw2xrf/kw2xrf_netdev.c +++ b/drivers/kw2xrf/kw2xrf_netdev.c @@ -169,7 +169,7 @@ static int _recv(netdev_t *netdev, void *buf, size_t len, void *info) if (info != NULL) { netdev_ieee802154_rx_info_t *radio_info = info; radio_info->lqi = ((uint8_t*)buf)[pkt_len]; - radio_info->rssi = (uint8_t)kw2xrf_get_rssi(radio_info->lqi); + radio_info->rssi = kw2xrf_get_rssi(radio_info->lqi); } /* skip FCS and LQI */