diff --git a/pkg/openthread/contrib/platform_radio.c b/pkg/openthread/contrib/platform_radio.c index 6c4e8ba92319e61a3414002d120a748f029ac4af..791c4a4a1ce24b0da0188dcfbf6953eb17981ffe 100644 --- a/pkg/openthread/contrib/platform_radio.c +++ b/pkg/openthread/contrib/platform_radio.c @@ -48,15 +48,6 @@ static int _set_channel(uint16_t channel) return _dev->driver->set(_dev, NETOPT_CHANNEL, &channel, sizeof(uint16_t)); } -/*get transmission power from driver */ -static int16_t _get_power(void) -{ - int16_t power; - - _dev->driver->get(_dev, NETOPT_TX_POWER, &power, sizeof(int16_t)); - return power; -} - /* set transmission power */ static int _set_power(int16_t power) { @@ -138,8 +129,7 @@ void recv_pkt(otInstance *aInstance, netdev_t *dev) DEBUG("Openthread: Received pkt\n"); netdev_ieee802154_rx_info_t rx_info; /* Read frame length from driver */ - int len = dev->driver->recv(dev, NULL, 0, &rx_info); - Rssi = rx_info.rssi; + int len = dev->driver->recv(dev, NULL, 0, NULL); /* very unlikely */ if ((len > (unsigned) UINT16_MAX)) { @@ -152,10 +142,13 @@ void recv_pkt(otInstance *aInstance, netdev_t *dev) /* Openthread needs a packet length with FCS included, * OpenThread do not use the data so we don't need to calculate FCS */ sReceiveFrame.mLength = len + RADIO_IEEE802154_FCS_LEN; - sReceiveFrame.mPower = _get_power(); /* Read received frame */ - int res = dev->driver->recv(dev, (char *) sReceiveFrame.mPsdu, len, NULL); + int res = dev->driver->recv(dev, (char *) sReceiveFrame.mPsdu, len, &rx_info); + + /* Get RSSI from a radio driver. RSSI should be in [dBm] */ + Rssi = (int8_t)rx_info.rssi; + sReceiveFrame.mPower = Rssi; DEBUG("Received message: len %d\n", (int) sReceiveFrame.mLength); for (int i = 0; i < sReceiveFrame.mLength; ++i) {