gnrc_lorawan: refactor rx_done callback
This commit is contained in:
parent
5146261f03
commit
2e6ba90435
@ -230,8 +230,9 @@ void gnrc_lorawan_mcps_request(gnrc_lorawan_t *mac, const mcps_request_t *mcps_r
|
||||
* To be called on radio RX done event.
|
||||
*
|
||||
* @param[in] mac pointer to the MAC descriptor
|
||||
* @param[in] pkt pointer to the packet
|
||||
*/
|
||||
void gnrc_lorawan_radio_rx_done_cb(gnrc_lorawan_t *mac);
|
||||
void gnrc_lorawan_radio_rx_done_cb(gnrc_lorawan_t *mac, gnrc_pktsnip_t *pkt);
|
||||
|
||||
/**
|
||||
* @brief MCPS indication callback
|
||||
|
||||
@ -249,8 +249,12 @@ void gnrc_lorawan_send_pkt(gnrc_lorawan_t *mac, gnrc_pktsnip_t *pkt, uint8_t dr)
|
||||
|
||||
}
|
||||
|
||||
void gnrc_lorawan_process_pkt(gnrc_lorawan_t *mac, gnrc_pktsnip_t *pkt)
|
||||
void gnrc_lorawan_radio_rx_done_cb(gnrc_lorawan_t *mac, gnrc_pktsnip_t *pkt)
|
||||
{
|
||||
_sleep_radio(mac);
|
||||
if (pkt == NULL) {
|
||||
return;
|
||||
}
|
||||
mac->state = LORAWAN_STATE_IDLE;
|
||||
xtimer_remove(&mac->rx);
|
||||
|
||||
@ -272,26 +276,3 @@ void gnrc_lorawan_process_pkt(gnrc_lorawan_t *mac, gnrc_pktsnip_t *pkt)
|
||||
|
||||
gnrc_lorawan_mac_release(mac);
|
||||
}
|
||||
|
||||
void gnrc_lorawan_radio_rx_done_cb(gnrc_lorawan_t *mac)
|
||||
{
|
||||
netdev_t *dev = gnrc_lorawan_get_netdev(mac);
|
||||
int bytes_expected = dev->driver->recv(dev, NULL, 0, 0);
|
||||
int nread;
|
||||
struct netdev_radio_rx_info rx_info;
|
||||
gnrc_pktsnip_t *pkt = gnrc_pktbuf_add(NULL, NULL, bytes_expected, GNRC_NETTYPE_UNDEF);
|
||||
if (pkt == NULL) {
|
||||
DEBUG("_recv_ieee802154: cannot allocate pktsnip.\n");
|
||||
/* Discard packet on netdev device */
|
||||
dev->driver->recv(dev, NULL, bytes_expected, NULL);
|
||||
return;
|
||||
}
|
||||
nread = dev->driver->recv(dev, pkt->data, bytes_expected, &rx_info);
|
||||
_sleep_radio(mac);
|
||||
if (nread <= 0) {
|
||||
gnrc_pktbuf_release(pkt);
|
||||
return;
|
||||
}
|
||||
|
||||
gnrc_lorawan_process_pkt(mac, pkt);
|
||||
}
|
||||
|
||||
@ -108,6 +108,30 @@ void gnrc_lorawan_mcps_confirm(gnrc_lorawan_t *mac, mcps_confirm_t *confirm)
|
||||
mac->mcps.outgoing_pkt = NULL;
|
||||
}
|
||||
|
||||
static void _rx_done(gnrc_lorawan_t *mac)
|
||||
{
|
||||
netdev_t *dev = gnrc_lorawan_get_netdev(mac);
|
||||
int bytes_expected = dev->driver->recv(dev, NULL, 0, 0);
|
||||
int nread;
|
||||
struct netdev_radio_rx_info rx_info;
|
||||
gnrc_pktsnip_t *pkt = gnrc_pktbuf_add(NULL, NULL, bytes_expected, GNRC_NETTYPE_UNDEF);
|
||||
if (pkt == NULL) {
|
||||
DEBUG("_recv_ieee802154: cannot allocate pktsnip.\n");
|
||||
/* Discard packet on netdev device */
|
||||
dev->driver->recv(dev, NULL, bytes_expected, NULL);
|
||||
gnrc_lorawan_radio_rx_done_cb(mac, NULL);
|
||||
return;
|
||||
}
|
||||
nread = dev->driver->recv(dev, pkt->data, bytes_expected, &rx_info);
|
||||
if (nread <= 0) {
|
||||
gnrc_pktbuf_release(pkt);
|
||||
gnrc_lorawan_radio_rx_done_cb(mac, NULL);
|
||||
return;
|
||||
}
|
||||
|
||||
gnrc_lorawan_radio_rx_done_cb(mac, pkt);
|
||||
}
|
||||
|
||||
static void _driver_cb(netdev_t *dev, netdev_event_t event)
|
||||
{
|
||||
gnrc_netif_t *netif = dev->context;
|
||||
@ -125,7 +149,7 @@ static void _driver_cb(netdev_t *dev, netdev_event_t event)
|
||||
DEBUG("gnrc_netif: event triggered -> %i\n", event);
|
||||
switch (event) {
|
||||
case NETDEV_EVENT_RX_COMPLETE:
|
||||
gnrc_lorawan_radio_rx_done_cb(mac);
|
||||
_rx_done(mac);
|
||||
break;
|
||||
case NETDEV_EVENT_TX_COMPLETE:
|
||||
gnrc_lorawan_radio_tx_done_cb(mac);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user