mrf24j40: Add RSSI dBm conversion

This commit is contained in:
Koen Zandberg 2017-08-30 21:06:37 +02:00
parent fa64e93313
commit 4bd5fd611c
3 changed files with 48 additions and 33 deletions

View File

@ -366,6 +366,14 @@ void mrf24j40_reset_state_machine(mrf24j40_t *dev);
*/
void mrf24j40_software_reset(mrf24j40_t *dev);
/**
* @brief Convert scalar from mrf24j40 RSSI to dBm
*
* @param[in] value value to convert to dBm
* @return converted value in dBm
*/
int8_t mrf24j40_dbm_from_reg(uint8_t value);
/**
* @brief Prepare for sending of data
*

View File

@ -74,38 +74,38 @@ static const uint8_t dbm_to_tx_pow[] = { 0x00, 0x10, 0x18, 0x20, 0x28, 0x30, 0x3
0xc0, 0xd0, 0xd8, 0xe0, 0xe8, 0xf0, 0xf8 };
/* take a look onto datasheet table 3-8 */
static const int8_t dBm_value[] = { 95, 89, 88, 88, 87, 87, 87, 87, \
86, 86, 86, 86, 85, 85, 85, 85, \
84, 84, 84, 84, 84, 84, 83, 83, \
83, 83, 82, 82, 82, 82, 81, 81, \
81, 81, 81, 80, 80, 80, 80, 80, \
80, 79, 79, 79, 79, 79, 78, 78, \
78, 78, 78, 77, 77, 77, 77, 77, \
76, 76, 76, 76, 76, 75, 75, 75, \
75, 75, 75, 74, 74, 74, 74, 73, \
73, 73, 73, 73, 72, 72, 72, 72, \
72, 71, 71, 71, 71, 71, 70, 70, \
70, 70, 70, 70, 70, 69, 69, 69, \
69, 69, 68, 68, 68, 68, 68, 68, \
68, 67, 67, 67, 67, 66, 66, 66, \
66, 66, 66, 65, 65, 65, 65, 65, \
64, 64, 64, 64, 63, 63, 63, 63, \
62, 62, 62, 62, 61, 61, 61, 61, \
60, 60, 60, 60, 60, 59, 59, 59, \
59, 59, 58, 58, 58, 58, 58, 57, \
57, 57, 57, 57, 57, 56, 56, 56, \
56, 56, 56, 56, 55, 55, 55, 55, \
54, 54, 54, 54, 54, 54, 53, 53, \
53, 53, 53, 53, 53, 52, 52, 52, \
52, 52, 52, 51, 51, 51, 51, 51, \
50, 50, 50, 50, 50, 49, 49, 49, \
49, 49, 48, 48, 48, 48, 47, 47, \
47, 47, 47, 46, 46, 46, 46, 45, \
45, 45, 45, 44, 44, 44, 44, 44, \
43, 43, 43, 42, 42, 42, 42, 41, \
41, 41, 41, 41, 41, 40, 40, 40, \
40, 40, 39, 39, 39, 39, 39, 38, \
38, 38, 38, 37, 37, 37, 36, 30 };
static const int8_t dBm_value[] = { -90, -89, -88, -88, -87, -87, -87, -87, \
-86, -86, -86, -86, -85, -85, -85, -85, \
-84, -84, -84, -84, -84, -84, -83, -83, \
-83, -83, -82, -82, -82, -82, -81, -81, \
-81, -81, -81, -80, -80, -80, -80, -80, \
-80, -79, -79, -79, -79, -79, -78, -78, \
-78, -78, -78, -77, -77, -77, -77, -77, \
-76, -76, -76, -76, -76, -75, -75, -75, \
-75, -75, -75, -74, -74, -74, -74, -73, \
-73, -73, -73, -73, -72, -72, -72, -72, \
-72, -71, -71, -71, -71, -71, -70, -70, \
-70, -70, -70, -70, -70, -69, -69, -69, \
-69, -69, -68, -68, -68, -68, -68, -68, \
-68, -67, -67, -67, -67, -66, -66, -66, \
-66, -66, -66, -65, -65, -65, -65, -65, \
-64, -64, -64, -64, -63, -63, -63, -63, \
-62, -62, -62, -62, -61, -61, -61, -61, \
-60, -60, -60, -60, -60, -59, -59, -59, \
-59, -59, -58, -58, -58, -58, -58, -57, \
-57, -57, -57, -57, -57, -56, -56, -56, \
-56, -56, -56, -56, -55, -55, -55, -55, \
-54, -54, -54, -54, -54, -54, -53, -53, \
-53, -53, -53, -53, -53, -52, -52, -52, \
-52, -52, -52, -51, -51, -51, -51, -51, \
-50, -50, -50, -50, -50, -49, -49, -49, \
-49, -49, -48, -48, -48, -48, -47, -47, \
-47, -47, -47, -46, -46, -46, -46, -45, \
-45, -45, -45, -44, -44, -44, -44, -44, \
-43, -43, -43, -42, -42, -42, -42, -41, \
-41, -41, -41, -41, -41, -40, -40, -40, \
-40, -40, -39, -39, -39, -39, -39, -38, \
-38, -38, -38, -37, -37, -37, -36, -35 };
/* take a look onto datasheet table 3-8 */
static const uint8_t RSSI_value[] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, \
@ -488,3 +488,8 @@ void mrf24j40_software_reset(mrf24j40_t *dev)
softrst = mrf24j40_reg_read_short(dev, MRF24J40_REG_SOFTRST);
} while (softrst != 0); /* wait until soft-reset has finished */
}
int8_t mrf24j40_dbm_from_reg(uint8_t value)
{
return dBm_value[value];
}

View File

@ -154,9 +154,11 @@ static int _recv(netdev_t *netdev, void *buf, size_t len, void *info)
if (info != NULL) {
netdev_ieee802154_rx_info_t *radio_info = info;
uint8_t rssi_scalar = 0;
/* Read LQI and RSSI values from the RX fifo */
mrf24j40_rx_fifo_read(dev, phr + 1, &(radio_info->lqi), 1);
mrf24j40_rx_fifo_read(dev, phr + 2, &(radio_info->rssi), 1);
mrf24j40_rx_fifo_read(dev, phr + 2, &(rssi_scalar), 1);
radio_info->rssi = mrf24j40_dbm_from_reg(rssi_scalar);
}
/* Turn on reception of packets off the air */