/** * @brief Function called by the device driver on device events * * @param[in] event type of event * @param[in] data optional parameter */ static void _event_cb(netdev2_t *dev, netdev2_event_t event, void *data) { (void) data; gnrc_netdev2_t *gnrc_netdev2 = (gnrc_netdev2_t*) dev->isr_arg; if (event == NETDEV2_EVENT_ISR) { msg_t msg; msg.type = NETDEV2_MSG_TYPE_EVENT; msg.content.ptr = (void*) gnrc_netdev2; if (msg_send(&msg, gnrc_netdev2->pid) <= 0) { puts("gnrc_netdev2: possibly lost interrupt."); } } else { DEBUG("gnrc_netdev2: event triggered -> %i\n", event); switch(event) { case NETDEV2_EVENT_RX_COMPLETE: { gnrc_pktsnip_t *pkt = gnrc_netdev2->recv(gnrc_netdev2); if (pkt) { _pass_on_packet(pkt); } break; } default: DEBUG("gnrc_netdev2: warning: unhandled event %u.\n", event); } } }
/** * @brief Function called by the device driver on device events * * @param[in] event type of event */ static void _event_cb(netdev2_t *dev, netdev2_event_t event) { gnrc_netdev2_t *gnrc_netdev2 = (gnrc_netdev2_t*) dev->context; if (event == NETDEV2_EVENT_ISR) { msg_t msg; msg.type = NETDEV2_MSG_TYPE_EVENT; msg.content.ptr = (void*) gnrc_netdev2; if (msg_send(&msg, gnrc_netdev2->pid) <= 0) { puts("gnrc_netdev2: possibly lost interrupt."); } } else { DEBUG("gnrc_netdev2: event triggered -> %i\n", event); switch(event) { case NETDEV2_EVENT_RX_COMPLETE: { gnrc_pktsnip_t *pkt = gnrc_netdev2->recv(gnrc_netdev2); if (pkt) { _pass_on_packet(pkt); } break; } #ifdef MODULE_NETSTATS_L2 case NETDEV2_EVENT_TX_MEDIUM_BUSY: dev->stats.tx_failed++; break; case NETDEV2_EVENT_TX_COMPLETE: dev->stats.tx_success++; break; #endif default: DEBUG("gnrc_netdev2: warning: unhandled event %u.\n", event); } } }