/** * @brief Class specific endpoint transfer handler. * * @param[in] p_inst Generic class instance. * @param[in] p_setup_ev Setup event. * * @return Standard error code. */ static ret_code_t cdc_acm_endpoint_ev(app_usbd_class_inst_t const * p_inst, app_usbd_complex_evt_t const * p_event) { if (comm_ep_in_addr_get(p_inst) == p_event->drv_evt.data.eptransfer.ep) { NRF_LOG_INFO("EPIN_COMM: notify"); return NRF_SUCCESS; } if (NRF_USBD_EPIN_CHECK(p_event->drv_evt.data.eptransfer.ep)) { switch (p_event->drv_evt.data.eptransfer.status) { case NRF_USBD_EP_OK: NRF_LOG_INFO("EPIN_DATA: %02x done", p_event->drv_evt.data.eptransfer.ep); user_event_handler(p_inst, APP_USBD_CDC_ACM_USER_EVT_TX_DONE); return NRF_SUCCESS; case NRF_USBD_EP_ABORTED: return NRF_SUCCESS; default: return NRF_ERROR_INTERNAL; } } if (NRF_USBD_EPOUT_CHECK(p_event->drv_evt.data.eptransfer.ep)) { switch (p_event->drv_evt.data.eptransfer.status) { case NRF_USBD_EP_OK: NRF_LOG_INFO("EPOUT_DATA: %02x done", p_event->drv_evt.data.eptransfer.ep); user_event_handler(p_inst, APP_USBD_CDC_ACM_USER_EVT_RX_DONE); return NRF_SUCCESS; case NRF_USBD_EP_WAITING: case NRF_USBD_EP_ABORTED: return NRF_SUCCESS; default: return NRF_ERROR_INTERNAL; } } return NRF_ERROR_NOT_SUPPORTED; }
/** * @brief @ref app_usbd_class_methods_t::event_handler */ static ret_code_t audio_event_handler( app_usbd_class_inst_t const * p_inst, app_usbd_complex_evt_t const * p_event) { ASSERT(p_inst != NULL); ASSERT(p_event != NULL); ret_code_t ret = NRF_SUCCESS; switch (p_event->app_evt.type) { case APP_USBD_EVT_DRV_RESET: break; case APP_USBD_EVT_DRV_SETUP: ret = setup_event_handler(p_inst, (app_usbd_setup_evt_t const *)p_event); break; case APP_USBD_EVT_DRV_EPTRANSFER: if (NRF_USBD_EPIN_CHECK(p_event->drv_evt.data.eptransfer.ep)) { ret = endpoint_in_event_handler(p_inst); } else { ret = endpoint_out_event_handler(p_inst); } break; case APP_USBD_EVT_DRV_SUSPEND: break; case APP_USBD_EVT_DRV_RESUME: break; case APP_USBD_EVT_INST_APPEND: { app_usbd_audio_t const * p_audio = audio_get(p_inst); app_usbd_audio_ctx_t * p_audio_ctx = audio_ctx_get(p_audio); if(p_audio_ctx->sof_handler != NULL) { ret = app_usbd_class_sof_interrupt_register(p_inst, p_audio_ctx->sof_handler); APP_ERROR_CHECK(ret); } break; } case APP_USBD_EVT_INST_REMOVE: { app_usbd_audio_t const * p_audio = audio_get(p_inst); app_usbd_audio_ctx_t * p_audio_ctx = audio_ctx_get(p_audio); if(p_audio_ctx->sof_handler != NULL) { ret = app_usbd_class_sof_interrupt_unregister(p_inst); APP_ERROR_CHECK(ret); } break; } case APP_USBD_EVT_STARTED: break; case APP_USBD_EVT_STOPPED: break; default: ret = NRF_ERROR_NOT_SUPPORTED; break; } return ret; }