/** * @brief USB device configured handler. * * @param[in] sdup pointer to a @p SerialUSBDriver object * * @iclass */ void sduConfigureHookI(SerialUSBDriver *sdup) { USBDriver *usbp = sdup->config->usbp; iqResetI(&sdup->iqueue); oqResetI(&sdup->oqueue); chnAddFlagsI(sdup, CHN_CONNECTED); /* Starts the first OUT transaction immediately.*/ usbPrepareQueuedReceive(usbp, sdup->config->bulk_out, &sdup->iqueue, usbp->epc[sdup->config->bulk_out]->out_maxsize); (void) usbStartReceiveI(usbp, sdup->config->bulk_out); }
/** * @brief Stops the driver. * @details Any thread waiting on the driver's queues will be awakened with * the message @p Q_RESET. * * @param[in] sdp pointer to a @p SerialDriver object * * @api */ void sdStop(SerialDriver *sdp) { osalDbgCheck(sdp != NULL); osalSysLock(); osalDbgAssert((sdp->state == SD_STOP) || (sdp->state == SD_READY), "invalid state"); sd_lld_stop(sdp); sdp->state = SD_STOP; oqResetI(&sdp->oqueue); iqResetI(&sdp->iqueue); osalOsRescheduleS(); osalSysUnlock(); }
/** * @brief Stops the driver. * @details Any thread waiting on the driver's queues will be awakened with * the message @p Q_RESET. * * @param[in] sdup pointer to a @p SerialUSBDriver object * * @api */ void sduStop(SerialUSBDriver *sdup) { USBDriver *usbp = sdup->config->usbp; osalDbgCheck(sdup != NULL); osalSysLock(); osalDbgAssert((sdup->state == SDU_STOP) || (sdup->state == SDU_READY), "invalid state"); /* Driver in stopped state.*/ usbp->in_params[sdup->config->bulk_in - 1U] = NULL; usbp->out_params[sdup->config->bulk_out - 1U] = NULL; if (sdup->config->int_in > 0U) { usbp->in_params[sdup->config->int_in - 1U] = NULL; } sdup->state = SDU_STOP; /* Queues reset in order to signal the driver stop to the application.*/ chnAddFlagsI(sdup, CHN_DISCONNECTED); iqResetI(&sdup->iqueue); oqResetI(&sdup->oqueue); osalOsRescheduleS(); osalSysUnlock(); }
/** * @brief USB device configured handler. * * @param[in] hiddp pointer to a @p HIDDebugDriver object * * @iclass */ void hidDebugConfigureHookI(HIDDebugDriver *hiddp) { oqResetI(&hiddp->oqueue); chnAddFlagsI(hiddp, CHN_CONNECTED); /* Start the flush timer */ chVTSetI(&hid_debug_flush_timer, MS2ST(DEBUG_TX_FLUSH_MS), hid_debug_flush_cb, hiddp); }