From 047b8172ae6993cb6cacd07da94558411e81e11a Mon Sep 17 00:00:00 2001 From: Koen Zandberg Date: Wed, 30 Aug 2017 21:09:21 +0200 Subject: [PATCH] cc2420: Add RSSI dBm conversion --- drivers/cc2420/cc2420.c | 9 +++++++-- drivers/cc2420/include/cc2420_registers.h | 8 ++++++++ drivers/include/cc2420.h | 5 +++++ 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/drivers/cc2420/cc2420.c b/drivers/cc2420/cc2420.c index bb7ce3d5ce..2b4802772f 100644 --- a/drivers/cc2420/cc2420.c +++ b/drivers/cc2420/cc2420.c @@ -197,8 +197,8 @@ int cc2420_rx(cc2420_t *dev, uint8_t *buf, size_t max_len, void *info) DEBUG("cc2420: recv: reading %i byte of the packet\n", (int)len); cc2420_fifo_read(dev, buf, len); - uint8_t rssi; - cc2420_fifo_read(dev, &rssi, 1); + int8_t rssi; + cc2420_fifo_read(dev, (uint8_t*)&rssi, 1); DEBUG("cc2420: recv: RSSI is %i\n", (int)rssi); /* fetch and check if CRC_OK bit (MSB) is set */ @@ -208,6 +208,11 @@ int cc2420_rx(cc2420_t *dev, uint8_t *buf, size_t max_len, void *info) /* drop the corrupted frame from the RXFIFO */ len = 0; } + if (info != NULL) { + netdev_ieee802154_rx_info_t *radio_info = info; + radio_info->rssi = CC2420_RSSI_OFFSET + rssi; + radio_info->lqi = crc_corr & CC2420_CRCCOR_COR_MASK; + } /* finally flush the FIFO */ cc2420_strobe(dev, CC2420_STROBE_FLUSHRX); diff --git a/drivers/cc2420/include/cc2420_registers.h b/drivers/cc2420/include/cc2420_registers.h index 23cba2cee5..00725aa1fb 100644 --- a/drivers/cc2420/include/cc2420_registers.h +++ b/drivers/cc2420/include/cc2420_registers.h @@ -190,6 +190,14 @@ enum { #define CC2420_MDMCTRL0_PREAMBLE_3B (0x0002) /** @} */ +/** + * @brief CRC/Correlation bit masks + * @{ + */ +#define CC2420_CRCCOR_CRC_MASK (0x80) +#define CC2420_CRCCOR_COR_MASK (0x7F) +/** @} */ + /** * @name Transmit control register bitfields * @{ diff --git a/drivers/include/cc2420.h b/drivers/include/cc2420.h index cee30a128a..a2d6f77be4 100644 --- a/drivers/include/cc2420.h +++ b/drivers/include/cc2420.h @@ -61,6 +61,11 @@ extern "C" { #define CC2420_TXPOWER_DEFAULT (IEEE802154_DEFAULT_TXPOWER) /** @} */ +/** + * @brief RSSI offset + */ +#define CC2420_RSSI_OFFSET (-45) + /** * @brief A couple of return values used in this driver */