Tentative USB suspend fix.
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@9898 35acf78f-673a-0410-8e92-d51de3d6d3f4
This commit is contained in:
parent
13537cb724
commit
e1d8e53579
|
@ -283,8 +283,6 @@ static void usb_event(USBDriver *usbp, usbevent_t event) {
|
||||||
extern SerialUSBDriver SDU1;
|
extern SerialUSBDriver SDU1;
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case USB_EVENT_RESET:
|
|
||||||
return;
|
|
||||||
case USB_EVENT_ADDRESS:
|
case USB_EVENT_ADDRESS:
|
||||||
return;
|
return;
|
||||||
case USB_EVENT_CONFIGURED:
|
case USB_EVENT_CONFIGURED:
|
||||||
|
@ -302,17 +300,25 @@ static void usb_event(USBDriver *usbp, usbevent_t event) {
|
||||||
|
|
||||||
chSysUnlockFromISR();
|
chSysUnlockFromISR();
|
||||||
return;
|
return;
|
||||||
|
case USB_EVENT_RESET:
|
||||||
|
/* Falls into.*/
|
||||||
case USB_EVENT_UNCONFIGURED:
|
case USB_EVENT_UNCONFIGURED:
|
||||||
return;
|
/* Falls into.*/
|
||||||
case USB_EVENT_SUSPEND:
|
case USB_EVENT_SUSPEND:
|
||||||
chSysLockFromISR();
|
chSysLockFromISR();
|
||||||
|
|
||||||
/* Disconnection event on suspend.*/
|
/* Disconnection event on suspend.*/
|
||||||
sduDisconnectI(&SDU1);
|
sduSuspendHookI(&SDU1);
|
||||||
|
|
||||||
chSysUnlockFromISR();
|
chSysUnlockFromISR();
|
||||||
return;
|
return;
|
||||||
case USB_EVENT_WAKEUP:
|
case USB_EVENT_WAKEUP:
|
||||||
|
chSysLockFromISR();
|
||||||
|
|
||||||
|
/* Disconnection event on suspend.*/
|
||||||
|
sduWakeupHookI(&SDU1);
|
||||||
|
|
||||||
|
chSysUnlockFromISR();
|
||||||
return;
|
return;
|
||||||
case USB_EVENT_STALLED:
|
case USB_EVENT_STALLED:
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -282,8 +282,6 @@ static void usb_event(USBDriver *usbp, usbevent_t event) {
|
||||||
extern SerialUSBDriver SDU1;
|
extern SerialUSBDriver SDU1;
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case USB_EVENT_RESET:
|
|
||||||
return;
|
|
||||||
case USB_EVENT_ADDRESS:
|
case USB_EVENT_ADDRESS:
|
||||||
return;
|
return;
|
||||||
case USB_EVENT_CONFIGURED:
|
case USB_EVENT_CONFIGURED:
|
||||||
|
@ -301,17 +299,25 @@ static void usb_event(USBDriver *usbp, usbevent_t event) {
|
||||||
|
|
||||||
chSysUnlockFromISR();
|
chSysUnlockFromISR();
|
||||||
return;
|
return;
|
||||||
|
case USB_EVENT_RESET:
|
||||||
|
/* Falls into.*/
|
||||||
case USB_EVENT_UNCONFIGURED:
|
case USB_EVENT_UNCONFIGURED:
|
||||||
return;
|
/* Falls into.*/
|
||||||
case USB_EVENT_SUSPEND:
|
case USB_EVENT_SUSPEND:
|
||||||
chSysLockFromISR();
|
chSysLockFromISR();
|
||||||
|
|
||||||
/* Disconnection event on suspend.*/
|
/* Disconnection event on suspend.*/
|
||||||
sduDisconnectI(&SDU1);
|
sduSuspendHookI(&SDU1);
|
||||||
|
|
||||||
chSysUnlockFromISR();
|
chSysUnlockFromISR();
|
||||||
return;
|
return;
|
||||||
case USB_EVENT_WAKEUP:
|
case USB_EVENT_WAKEUP:
|
||||||
|
chSysLockFromISR();
|
||||||
|
|
||||||
|
/* Disconnection event on suspend.*/
|
||||||
|
sduWakeupHookI(&SDU1);
|
||||||
|
|
||||||
|
chSysUnlockFromISR();
|
||||||
return;
|
return;
|
||||||
case USB_EVENT_STALLED:
|
case USB_EVENT_STALLED:
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -248,8 +248,6 @@ static void usb_event(USBDriver *usbp, usbevent_t event) {
|
||||||
extern SerialUSBDriver SDU1;
|
extern SerialUSBDriver SDU1;
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case USB_EVENT_RESET:
|
|
||||||
return;
|
|
||||||
case USB_EVENT_ADDRESS:
|
case USB_EVENT_ADDRESS:
|
||||||
return;
|
return;
|
||||||
case USB_EVENT_CONFIGURED:
|
case USB_EVENT_CONFIGURED:
|
||||||
|
@ -267,17 +265,25 @@ static void usb_event(USBDriver *usbp, usbevent_t event) {
|
||||||
|
|
||||||
chSysUnlockFromISR();
|
chSysUnlockFromISR();
|
||||||
return;
|
return;
|
||||||
|
case USB_EVENT_RESET:
|
||||||
|
/* Falls into.*/
|
||||||
case USB_EVENT_UNCONFIGURED:
|
case USB_EVENT_UNCONFIGURED:
|
||||||
return;
|
/* Falls into.*/
|
||||||
case USB_EVENT_SUSPEND:
|
case USB_EVENT_SUSPEND:
|
||||||
chSysLockFromISR();
|
chSysLockFromISR();
|
||||||
|
|
||||||
/* Disconnection event on suspend.*/
|
/* Disconnection event on suspend.*/
|
||||||
sduDisconnectI(&SDU1);
|
sduSuspendHookI(&SDU1);
|
||||||
|
|
||||||
chSysUnlockFromISR();
|
chSysUnlockFromISR();
|
||||||
return;
|
return;
|
||||||
case USB_EVENT_WAKEUP:
|
case USB_EVENT_WAKEUP:
|
||||||
|
chSysLockFromISR();
|
||||||
|
|
||||||
|
/* Disconnection event on suspend.*/
|
||||||
|
sduWakeupHookI(&SDU1);
|
||||||
|
|
||||||
|
chSysUnlockFromISR();
|
||||||
return;
|
return;
|
||||||
case USB_EVENT_STALLED:
|
case USB_EVENT_STALLED:
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -267,8 +267,6 @@ static void usb_event(USBDriver *usbp, usbevent_t event) {
|
||||||
extern SerialUSBDriver SDU1;
|
extern SerialUSBDriver SDU1;
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case USB_EVENT_RESET:
|
|
||||||
return;
|
|
||||||
case USB_EVENT_ADDRESS:
|
case USB_EVENT_ADDRESS:
|
||||||
return;
|
return;
|
||||||
case USB_EVENT_CONFIGURED:
|
case USB_EVENT_CONFIGURED:
|
||||||
|
@ -285,17 +283,25 @@ static void usb_event(USBDriver *usbp, usbevent_t event) {
|
||||||
|
|
||||||
chSysUnlockFromISR();
|
chSysUnlockFromISR();
|
||||||
return;
|
return;
|
||||||
|
case USB_EVENT_RESET:
|
||||||
|
/* Falls into.*/
|
||||||
case USB_EVENT_UNCONFIGURED:
|
case USB_EVENT_UNCONFIGURED:
|
||||||
return;
|
/* Falls into.*/
|
||||||
case USB_EVENT_SUSPEND:
|
case USB_EVENT_SUSPEND:
|
||||||
chSysLockFromISR();
|
chSysLockFromISR();
|
||||||
|
|
||||||
/* Disconnection event on suspend.*/
|
/* Disconnection event on suspend.*/
|
||||||
sduDisconnectI(&SDU1);
|
sduSuspendHookI(&SDU1);
|
||||||
|
|
||||||
chSysUnlockFromISR();
|
chSysUnlockFromISR();
|
||||||
return;
|
return;
|
||||||
case USB_EVENT_WAKEUP:
|
case USB_EVENT_WAKEUP:
|
||||||
|
chSysLockFromISR();
|
||||||
|
|
||||||
|
/* Disconnection event on suspend.*/
|
||||||
|
sduWakeupHookI(&SDU1);
|
||||||
|
|
||||||
|
chSysUnlockFromISR();
|
||||||
return;
|
return;
|
||||||
case USB_EVENT_STALLED:
|
case USB_EVENT_STALLED:
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -267,8 +267,6 @@ static void usb_event(USBDriver *usbp, usbevent_t event) {
|
||||||
extern SerialUSBDriver SDU1;
|
extern SerialUSBDriver SDU1;
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case USB_EVENT_RESET:
|
|
||||||
return;
|
|
||||||
case USB_EVENT_ADDRESS:
|
case USB_EVENT_ADDRESS:
|
||||||
return;
|
return;
|
||||||
case USB_EVENT_CONFIGURED:
|
case USB_EVENT_CONFIGURED:
|
||||||
|
@ -285,17 +283,25 @@ static void usb_event(USBDriver *usbp, usbevent_t event) {
|
||||||
|
|
||||||
chSysUnlockFromISR();
|
chSysUnlockFromISR();
|
||||||
return;
|
return;
|
||||||
|
case USB_EVENT_RESET:
|
||||||
|
/* Falls into.*/
|
||||||
case USB_EVENT_UNCONFIGURED:
|
case USB_EVENT_UNCONFIGURED:
|
||||||
return;
|
/* Falls into.*/
|
||||||
case USB_EVENT_SUSPEND:
|
case USB_EVENT_SUSPEND:
|
||||||
chSysLockFromISR();
|
chSysLockFromISR();
|
||||||
|
|
||||||
/* Disconnection event on suspend.*/
|
/* Disconnection event on suspend.*/
|
||||||
sduDisconnectI(&SDU1);
|
sduSuspendHookI(&SDU1);
|
||||||
|
|
||||||
chSysUnlockFromISR();
|
chSysUnlockFromISR();
|
||||||
return;
|
return;
|
||||||
case USB_EVENT_WAKEUP:
|
case USB_EVENT_WAKEUP:
|
||||||
|
chSysLockFromISR();
|
||||||
|
|
||||||
|
/* Disconnection event on suspend.*/
|
||||||
|
sduWakeupHookI(&SDU1);
|
||||||
|
|
||||||
|
chSysUnlockFromISR();
|
||||||
return;
|
return;
|
||||||
case USB_EVENT_STALLED:
|
case USB_EVENT_STALLED:
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -267,8 +267,6 @@ static void usb_event(USBDriver *usbp, usbevent_t event) {
|
||||||
extern SerialUSBDriver SDU1;
|
extern SerialUSBDriver SDU1;
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case USB_EVENT_RESET:
|
|
||||||
return;
|
|
||||||
case USB_EVENT_ADDRESS:
|
case USB_EVENT_ADDRESS:
|
||||||
return;
|
return;
|
||||||
case USB_EVENT_CONFIGURED:
|
case USB_EVENT_CONFIGURED:
|
||||||
|
@ -285,17 +283,25 @@ static void usb_event(USBDriver *usbp, usbevent_t event) {
|
||||||
|
|
||||||
chSysUnlockFromISR();
|
chSysUnlockFromISR();
|
||||||
return;
|
return;
|
||||||
|
case USB_EVENT_RESET:
|
||||||
|
/* Falls into.*/
|
||||||
case USB_EVENT_UNCONFIGURED:
|
case USB_EVENT_UNCONFIGURED:
|
||||||
return;
|
/* Falls into.*/
|
||||||
case USB_EVENT_SUSPEND:
|
case USB_EVENT_SUSPEND:
|
||||||
chSysLockFromISR();
|
chSysLockFromISR();
|
||||||
|
|
||||||
/* Disconnection event on suspend.*/
|
/* Disconnection event on suspend.*/
|
||||||
sduDisconnectI(&SDU1);
|
sduSuspendHookI(&SDU1);
|
||||||
|
|
||||||
chSysUnlockFromISR();
|
chSysUnlockFromISR();
|
||||||
return;
|
return;
|
||||||
case USB_EVENT_WAKEUP:
|
case USB_EVENT_WAKEUP:
|
||||||
|
chSysLockFromISR();
|
||||||
|
|
||||||
|
/* Disconnection event on suspend.*/
|
||||||
|
sduWakeupHookI(&SDU1);
|
||||||
|
|
||||||
|
chSysUnlockFromISR();
|
||||||
return;
|
return;
|
||||||
case USB_EVENT_STALLED:
|
case USB_EVENT_STALLED:
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -267,8 +267,6 @@ static void usb_event(USBDriver *usbp, usbevent_t event) {
|
||||||
extern SerialUSBDriver SDU1;
|
extern SerialUSBDriver SDU1;
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case USB_EVENT_RESET:
|
|
||||||
return;
|
|
||||||
case USB_EVENT_ADDRESS:
|
case USB_EVENT_ADDRESS:
|
||||||
return;
|
return;
|
||||||
case USB_EVENT_CONFIGURED:
|
case USB_EVENT_CONFIGURED:
|
||||||
|
@ -285,17 +283,25 @@ static void usb_event(USBDriver *usbp, usbevent_t event) {
|
||||||
|
|
||||||
chSysUnlockFromISR();
|
chSysUnlockFromISR();
|
||||||
return;
|
return;
|
||||||
|
case USB_EVENT_RESET:
|
||||||
|
/* Falls into.*/
|
||||||
case USB_EVENT_UNCONFIGURED:
|
case USB_EVENT_UNCONFIGURED:
|
||||||
return;
|
/* Falls into.*/
|
||||||
case USB_EVENT_SUSPEND:
|
case USB_EVENT_SUSPEND:
|
||||||
chSysLockFromISR();
|
chSysLockFromISR();
|
||||||
|
|
||||||
/* Disconnection event on suspend.*/
|
/* Disconnection event on suspend.*/
|
||||||
sduDisconnectI(&SDU1);
|
sduSuspendHookI(&SDU1);
|
||||||
|
|
||||||
chSysUnlockFromISR();
|
chSysUnlockFromISR();
|
||||||
return;
|
return;
|
||||||
case USB_EVENT_WAKEUP:
|
case USB_EVENT_WAKEUP:
|
||||||
|
chSysLockFromISR();
|
||||||
|
|
||||||
|
/* Disconnection event on suspend.*/
|
||||||
|
sduWakeupHookI(&SDU1);
|
||||||
|
|
||||||
|
chSysUnlockFromISR();
|
||||||
return;
|
return;
|
||||||
case USB_EVENT_STALLED:
|
case USB_EVENT_STALLED:
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -267,8 +267,6 @@ static void usb_event(USBDriver *usbp, usbevent_t event) {
|
||||||
extern SerialUSBDriver SDU1;
|
extern SerialUSBDriver SDU1;
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case USB_EVENT_RESET:
|
|
||||||
return;
|
|
||||||
case USB_EVENT_ADDRESS:
|
case USB_EVENT_ADDRESS:
|
||||||
return;
|
return;
|
||||||
case USB_EVENT_CONFIGURED:
|
case USB_EVENT_CONFIGURED:
|
||||||
|
@ -285,17 +283,25 @@ static void usb_event(USBDriver *usbp, usbevent_t event) {
|
||||||
|
|
||||||
chSysUnlockFromISR();
|
chSysUnlockFromISR();
|
||||||
return;
|
return;
|
||||||
|
case USB_EVENT_RESET:
|
||||||
|
/* Falls into.*/
|
||||||
case USB_EVENT_UNCONFIGURED:
|
case USB_EVENT_UNCONFIGURED:
|
||||||
return;
|
/* Falls into.*/
|
||||||
case USB_EVENT_SUSPEND:
|
case USB_EVENT_SUSPEND:
|
||||||
chSysLockFromISR();
|
chSysLockFromISR();
|
||||||
|
|
||||||
/* Disconnection event on suspend.*/
|
/* Disconnection event on suspend.*/
|
||||||
sduDisconnectI(&SDU1);
|
sduSuspendHookI(&SDU1);
|
||||||
|
|
||||||
chSysUnlockFromISR();
|
chSysUnlockFromISR();
|
||||||
return;
|
return;
|
||||||
case USB_EVENT_WAKEUP:
|
case USB_EVENT_WAKEUP:
|
||||||
|
chSysLockFromISR();
|
||||||
|
|
||||||
|
/* Disconnection event on suspend.*/
|
||||||
|
sduWakeupHookI(&SDU1);
|
||||||
|
|
||||||
|
chSysUnlockFromISR();
|
||||||
return;
|
return;
|
||||||
case USB_EVENT_STALLED:
|
case USB_EVENT_STALLED:
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -267,8 +267,6 @@ static void usb_event(USBDriver *usbp, usbevent_t event) {
|
||||||
extern SerialUSBDriver SDU2;
|
extern SerialUSBDriver SDU2;
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case USB_EVENT_RESET:
|
|
||||||
return;
|
|
||||||
case USB_EVENT_ADDRESS:
|
case USB_EVENT_ADDRESS:
|
||||||
return;
|
return;
|
||||||
case USB_EVENT_CONFIGURED:
|
case USB_EVENT_CONFIGURED:
|
||||||
|
@ -285,17 +283,25 @@ static void usb_event(USBDriver *usbp, usbevent_t event) {
|
||||||
|
|
||||||
chSysUnlockFromISR();
|
chSysUnlockFromISR();
|
||||||
return;
|
return;
|
||||||
|
case USB_EVENT_RESET:
|
||||||
|
/* Falls into.*/
|
||||||
case USB_EVENT_UNCONFIGURED:
|
case USB_EVENT_UNCONFIGURED:
|
||||||
return;
|
/* Falls into.*/
|
||||||
case USB_EVENT_SUSPEND:
|
case USB_EVENT_SUSPEND:
|
||||||
chSysLockFromISR();
|
chSysLockFromISR();
|
||||||
|
|
||||||
/* Disconnection event on suspend.*/
|
/* Disconnection event on suspend.*/
|
||||||
sduDisconnectI(&SDU2);
|
sduSuspendHookI(&SDU2);
|
||||||
|
|
||||||
chSysUnlockFromISR();
|
chSysUnlockFromISR();
|
||||||
return;
|
return;
|
||||||
case USB_EVENT_WAKEUP:
|
case USB_EVENT_WAKEUP:
|
||||||
|
chSysLockFromISR();
|
||||||
|
|
||||||
|
/* Disconnection event on suspend.*/
|
||||||
|
sduWakeupHookI(&SDU2);
|
||||||
|
|
||||||
|
chSysUnlockFromISR();
|
||||||
return;
|
return;
|
||||||
case USB_EVENT_STALLED:
|
case USB_EVENT_STALLED:
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -267,8 +267,6 @@ static void usb_event(USBDriver *usbp, usbevent_t event) {
|
||||||
extern SerialUSBDriver SDU1;
|
extern SerialUSBDriver SDU1;
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case USB_EVENT_RESET:
|
|
||||||
return;
|
|
||||||
case USB_EVENT_ADDRESS:
|
case USB_EVENT_ADDRESS:
|
||||||
return;
|
return;
|
||||||
case USB_EVENT_CONFIGURED:
|
case USB_EVENT_CONFIGURED:
|
||||||
|
@ -285,17 +283,25 @@ static void usb_event(USBDriver *usbp, usbevent_t event) {
|
||||||
|
|
||||||
chSysUnlockFromISR();
|
chSysUnlockFromISR();
|
||||||
return;
|
return;
|
||||||
|
case USB_EVENT_RESET:
|
||||||
|
/* Falls into.*/
|
||||||
case USB_EVENT_UNCONFIGURED:
|
case USB_EVENT_UNCONFIGURED:
|
||||||
return;
|
/* Falls into.*/
|
||||||
case USB_EVENT_SUSPEND:
|
case USB_EVENT_SUSPEND:
|
||||||
chSysLockFromISR();
|
chSysLockFromISR();
|
||||||
|
|
||||||
/* Disconnection event on suspend.*/
|
/* Disconnection event on suspend.*/
|
||||||
sduDisconnectI(&SDU1);
|
sduSuspendHookI(&SDU1);
|
||||||
|
|
||||||
chSysUnlockFromISR();
|
chSysUnlockFromISR();
|
||||||
return;
|
return;
|
||||||
case USB_EVENT_WAKEUP:
|
case USB_EVENT_WAKEUP:
|
||||||
|
chSysLockFromISR();
|
||||||
|
|
||||||
|
/* Disconnection event on suspend.*/
|
||||||
|
sduWakeupHookI(&SDU1);
|
||||||
|
|
||||||
|
chSysUnlockFromISR();
|
||||||
return;
|
return;
|
||||||
case USB_EVENT_STALLED:
|
case USB_EVENT_STALLED:
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -61,6 +61,10 @@ struct io_buffers_queue {
|
||||||
* @brief Queue of waiting threads.
|
* @brief Queue of waiting threads.
|
||||||
*/
|
*/
|
||||||
threads_queue_t waiting;
|
threads_queue_t waiting;
|
||||||
|
/**
|
||||||
|
* @brief Queue suspended state flag.
|
||||||
|
*/
|
||||||
|
bool suspended;
|
||||||
/**
|
/**
|
||||||
* @brief Active buffers counter.
|
* @brief Active buffers counter.
|
||||||
*/
|
*/
|
||||||
|
@ -170,6 +174,48 @@ typedef io_buffers_queue_t output_buffers_queue_t;
|
||||||
*/
|
*/
|
||||||
#define bqGetLinkX(bqp) ((bqp)->link)
|
#define bqGetLinkX(bqp) ((bqp)->link)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Return the suspended state of the queue.
|
||||||
|
*
|
||||||
|
* @param[in] bqp pointer to an @p io_buffers_queue_t structure
|
||||||
|
* @return The suspended state.
|
||||||
|
* @retval false if blocking access to the queue is enabled.
|
||||||
|
* @retval true if blocking access to the queue is suspended.
|
||||||
|
*
|
||||||
|
* @xclass
|
||||||
|
*/
|
||||||
|
#define bqIsSuspendedX(bqp) ((bqp)->suspended)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Puts the queue in suspended state.
|
||||||
|
* @details When the queue is put in suspended state all waiting threads are
|
||||||
|
* woken with message @p MSG_RESET and subsequent attempt at waiting
|
||||||
|
* on the queue will result in an immediate return with @p MSG_RESET
|
||||||
|
* message.
|
||||||
|
* @note The content of the queue is not altered, queues can be accessed
|
||||||
|
* is suspended state until a blocking operation is met then a
|
||||||
|
* @p MSG_RESET occurs.
|
||||||
|
*
|
||||||
|
* @param[in] bqp pointer to an @p io_buffers_queue_t structure
|
||||||
|
*
|
||||||
|
* @iclass
|
||||||
|
*/
|
||||||
|
#define bqSuspendI(bqp) { \
|
||||||
|
(bqp)->suspended = true; \
|
||||||
|
osalThreadDequeueAllI(&(bqp)->waiting, MSG_RESET); \
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Resumes normal queue operations.
|
||||||
|
*
|
||||||
|
* @param[in] bqp pointer to an @p io_buffers_queue_t structure
|
||||||
|
*
|
||||||
|
* @xclass
|
||||||
|
*/
|
||||||
|
#define bqResumeX(bqp) { \
|
||||||
|
(bqp)->suspended = false; \
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Evaluates to @p TRUE if the specified input buffers queue is empty.
|
* @brief Evaluates to @p TRUE if the specified input buffers queue is empty.
|
||||||
*
|
*
|
||||||
|
@ -232,9 +278,8 @@ typedef io_buffers_queue_t output_buffers_queue_t;
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
void ibqObjectInit(input_buffers_queue_t *ibqp, uint8_t *bp,
|
void ibqObjectInit(input_buffers_queue_t *ibqp, bool suspended, uint8_t *bp,
|
||||||
size_t size, size_t n,
|
size_t size, size_t n, bqnotify_t infy, void *link);
|
||||||
bqnotify_t infy, void *link);
|
|
||||||
void ibqResetI(input_buffers_queue_t *ibqp);
|
void ibqResetI(input_buffers_queue_t *ibqp);
|
||||||
uint8_t *ibqGetEmptyBufferI(input_buffers_queue_t *ibqp);
|
uint8_t *ibqGetEmptyBufferI(input_buffers_queue_t *ibqp);
|
||||||
void ibqPostFullBufferI(input_buffers_queue_t *ibqp, size_t size);
|
void ibqPostFullBufferI(input_buffers_queue_t *ibqp, size_t size);
|
||||||
|
@ -247,9 +292,8 @@ extern "C" {
|
||||||
msg_t ibqGetTimeout(input_buffers_queue_t *ibqp, systime_t timeout);
|
msg_t ibqGetTimeout(input_buffers_queue_t *ibqp, systime_t timeout);
|
||||||
size_t ibqReadTimeout(input_buffers_queue_t *ibqp, uint8_t *bp,
|
size_t ibqReadTimeout(input_buffers_queue_t *ibqp, uint8_t *bp,
|
||||||
size_t n, systime_t timeout);
|
size_t n, systime_t timeout);
|
||||||
void obqObjectInit(output_buffers_queue_t *obqp, uint8_t *bp,
|
void obqObjectInit(output_buffers_queue_t *obqp, bool suspended, uint8_t *bp,
|
||||||
size_t size, size_t n,
|
size_t size, size_t n, bqnotify_t onfy, void *link);
|
||||||
bqnotify_t onfy, void *link);
|
|
||||||
void obqResetI(output_buffers_queue_t *obqp);
|
void obqResetI(output_buffers_queue_t *obqp);
|
||||||
uint8_t *obqGetFullBufferI(output_buffers_queue_t *obqp,
|
uint8_t *obqGetFullBufferI(output_buffers_queue_t *obqp,
|
||||||
size_t *sizep);
|
size_t *sizep);
|
||||||
|
|
|
@ -177,7 +177,8 @@ extern "C" {
|
||||||
void sduObjectInit(SerialUSBDriver *sdup);
|
void sduObjectInit(SerialUSBDriver *sdup);
|
||||||
void sduStart(SerialUSBDriver *sdup, const SerialUSBConfig *config);
|
void sduStart(SerialUSBDriver *sdup, const SerialUSBConfig *config);
|
||||||
void sduStop(SerialUSBDriver *sdup);
|
void sduStop(SerialUSBDriver *sdup);
|
||||||
void sduDisconnectI(SerialUSBDriver *sdup);
|
void sduSuspendHookI(SerialUSBDriver *sdup);
|
||||||
|
void sduWakeupHookI(SerialUSBDriver *sdup);
|
||||||
void sduConfigureHookI(SerialUSBDriver *sdup);
|
void sduConfigureHookI(SerialUSBDriver *sdup);
|
||||||
bool sduRequestsHook(USBDriver *usbp);
|
bool sduRequestsHook(USBDriver *usbp);
|
||||||
void sduSOFHookI(SerialUSBDriver *sdup);
|
void sduSOFHookI(SerialUSBDriver *sdup);
|
||||||
|
|
|
@ -64,6 +64,7 @@
|
||||||
* @brief Initializes an input buffers queue object.
|
* @brief Initializes an input buffers queue object.
|
||||||
*
|
*
|
||||||
* @param[out] ibqp pointer to the @p input_buffers_queue_t object
|
* @param[out] ibqp pointer to the @p input_buffers_queue_t object
|
||||||
|
* @param[in] suspended initial state of the queue
|
||||||
* @param[in] bp pointer to a memory area allocated for buffers
|
* @param[in] bp pointer to a memory area allocated for buffers
|
||||||
* @param[in] size buffers size
|
* @param[in] size buffers size
|
||||||
* @param[in] n number of buffers
|
* @param[in] n number of buffers
|
||||||
|
@ -72,13 +73,13 @@
|
||||||
*
|
*
|
||||||
* @init
|
* @init
|
||||||
*/
|
*/
|
||||||
void ibqObjectInit(input_buffers_queue_t *ibqp, uint8_t *bp,
|
void ibqObjectInit(input_buffers_queue_t *ibqp, bool suspended, uint8_t *bp,
|
||||||
size_t size, size_t n,
|
size_t size, size_t n, bqnotify_t infy, void *link) {
|
||||||
bqnotify_t infy, void *link) {
|
|
||||||
|
|
||||||
osalDbgCheck((ibqp != NULL) && (bp != NULL) && (size >= 2U));
|
osalDbgCheck((ibqp != NULL) && (bp != NULL) && (size >= 2U));
|
||||||
|
|
||||||
osalThreadQueueObjectInit(&ibqp->waiting);
|
osalThreadQueueObjectInit(&ibqp->waiting);
|
||||||
|
ibqp->suspended = suspended;
|
||||||
ibqp->bcounter = 0;
|
ibqp->bcounter = 0;
|
||||||
ibqp->brdptr = bp;
|
ibqp->brdptr = bp;
|
||||||
ibqp->bwrptr = bp;
|
ibqp->bwrptr = bp;
|
||||||
|
@ -181,7 +182,8 @@ void ibqPostFullBufferI(input_buffers_queue_t *ibqp, size_t size) {
|
||||||
* @return The operation status.
|
* @return The operation status.
|
||||||
* @retval MSG_OK if a buffer has been acquired.
|
* @retval MSG_OK if a buffer has been acquired.
|
||||||
* @retval MSG_TIMEOUT if the specified time expired.
|
* @retval MSG_TIMEOUT if the specified time expired.
|
||||||
* @retval MSG_RESET if the queue has been reset.
|
* @retval MSG_RESET if the queue has been reset or has been put in
|
||||||
|
* suspended state.
|
||||||
*
|
*
|
||||||
* @api
|
* @api
|
||||||
*/
|
*/
|
||||||
|
@ -212,7 +214,8 @@ msg_t ibqGetFullBufferTimeout(input_buffers_queue_t *ibqp,
|
||||||
* @return The operation status.
|
* @return The operation status.
|
||||||
* @retval MSG_OK if a buffer has been acquired.
|
* @retval MSG_OK if a buffer has been acquired.
|
||||||
* @retval MSG_TIMEOUT if the specified time expired.
|
* @retval MSG_TIMEOUT if the specified time expired.
|
||||||
* @retval MSG_RESET if the queue has been reset.
|
* @retval MSG_RESET if the queue has been reset or has been put in
|
||||||
|
* suspended state.
|
||||||
*
|
*
|
||||||
* @sclass
|
* @sclass
|
||||||
*/
|
*/
|
||||||
|
@ -222,6 +225,9 @@ msg_t ibqGetFullBufferTimeout(input_buffers_queue_t *ibqp,
|
||||||
osalDbgCheckClassS();
|
osalDbgCheckClassS();
|
||||||
|
|
||||||
while (ibqIsEmptyI(ibqp)) {
|
while (ibqIsEmptyI(ibqp)) {
|
||||||
|
if (ibqp->suspended) {
|
||||||
|
return MSG_RESET;
|
||||||
|
}
|
||||||
msg_t msg = osalThreadEnqueueTimeoutS(&ibqp->waiting, timeout);
|
msg_t msg = osalThreadEnqueueTimeoutS(&ibqp->waiting, timeout);
|
||||||
if (msg < MSG_OK) {
|
if (msg < MSG_OK) {
|
||||||
return msg;
|
return msg;
|
||||||
|
@ -295,7 +301,8 @@ void ibqReleaseEmptyBuffer(input_buffers_queue_t *ibqp) {
|
||||||
* .
|
* .
|
||||||
* @return A byte value from the queue.
|
* @return A byte value from the queue.
|
||||||
* @retval MSG_TIMEOUT if the specified time expired.
|
* @retval MSG_TIMEOUT if the specified time expired.
|
||||||
* @retval MSG_RESET if the queue has been reset.
|
* @retval MSG_RESET if the queue has been reset or has been put in
|
||||||
|
* suspended state.
|
||||||
*
|
*
|
||||||
* @api
|
* @api
|
||||||
*/
|
*/
|
||||||
|
@ -432,6 +439,7 @@ size_t ibqReadTimeout(input_buffers_queue_t *ibqp, uint8_t *bp,
|
||||||
* @brief Initializes an output buffers queue object.
|
* @brief Initializes an output buffers queue object.
|
||||||
*
|
*
|
||||||
* @param[out] obqp pointer to the @p output_buffers_queue_t object
|
* @param[out] obqp pointer to the @p output_buffers_queue_t object
|
||||||
|
* @param[in] suspended initial state of the queue
|
||||||
* @param[in] bp pointer to a memory area allocated for buffers
|
* @param[in] bp pointer to a memory area allocated for buffers
|
||||||
* @param[in] size buffers size
|
* @param[in] size buffers size
|
||||||
* @param[in] n number of buffers
|
* @param[in] n number of buffers
|
||||||
|
@ -440,13 +448,13 @@ size_t ibqReadTimeout(input_buffers_queue_t *ibqp, uint8_t *bp,
|
||||||
*
|
*
|
||||||
* @init
|
* @init
|
||||||
*/
|
*/
|
||||||
void obqObjectInit(output_buffers_queue_t *obqp, uint8_t *bp,
|
void obqObjectInit(output_buffers_queue_t *obqp, bool suspended, uint8_t *bp,
|
||||||
size_t size, size_t n,
|
size_t size, size_t n, bqnotify_t onfy, void *link) {
|
||||||
bqnotify_t onfy, void *link) {
|
|
||||||
|
|
||||||
osalDbgCheck((obqp != NULL) && (bp != NULL) && (size >= 2U));
|
osalDbgCheck((obqp != NULL) && (bp != NULL) && (size >= 2U));
|
||||||
|
|
||||||
osalThreadQueueObjectInit(&obqp->waiting);
|
osalThreadQueueObjectInit(&obqp->waiting);
|
||||||
|
obqp->suspended = suspended;
|
||||||
obqp->bcounter = n;
|
obqp->bcounter = n;
|
||||||
obqp->brdptr = bp;
|
obqp->brdptr = bp;
|
||||||
obqp->bwrptr = bp;
|
obqp->bwrptr = bp;
|
||||||
|
@ -548,7 +556,8 @@ void obqReleaseEmptyBufferI(output_buffers_queue_t *obqp) {
|
||||||
* @return The operation status.
|
* @return The operation status.
|
||||||
* @retval MSG_OK if a buffer has been acquired.
|
* @retval MSG_OK if a buffer has been acquired.
|
||||||
* @retval MSG_TIMEOUT if the specified time expired.
|
* @retval MSG_TIMEOUT if the specified time expired.
|
||||||
* @retval MSG_RESET if the queue has been reset.
|
* @retval MSG_RESET if the queue has been reset or has been put in
|
||||||
|
* suspended state.
|
||||||
*
|
*
|
||||||
* @api
|
* @api
|
||||||
*/
|
*/
|
||||||
|
@ -579,7 +588,8 @@ msg_t obqGetEmptyBufferTimeout(output_buffers_queue_t *obqp,
|
||||||
* @return The operation status.
|
* @return The operation status.
|
||||||
* @retval MSG_OK if a buffer has been acquired.
|
* @retval MSG_OK if a buffer has been acquired.
|
||||||
* @retval MSG_TIMEOUT if the specified time expired.
|
* @retval MSG_TIMEOUT if the specified time expired.
|
||||||
* @retval MSG_RESET if the queue has been reset.
|
* @retval MSG_RESET if the queue has been reset or has been put in
|
||||||
|
* suspended state.
|
||||||
*
|
*
|
||||||
* @sclass
|
* @sclass
|
||||||
*/
|
*/
|
||||||
|
@ -589,6 +599,9 @@ msg_t obqGetEmptyBufferTimeout(output_buffers_queue_t *obqp,
|
||||||
osalDbgCheckClassS();
|
osalDbgCheckClassS();
|
||||||
|
|
||||||
while (obqIsFullI(obqp)) {
|
while (obqIsFullI(obqp)) {
|
||||||
|
if (obqp->suspended) {
|
||||||
|
return MSG_RESET;
|
||||||
|
}
|
||||||
msg_t msg = osalThreadEnqueueTimeoutS(&obqp->waiting, timeout);
|
msg_t msg = osalThreadEnqueueTimeoutS(&obqp->waiting, timeout);
|
||||||
if (msg < MSG_OK) {
|
if (msg < MSG_OK) {
|
||||||
return msg;
|
return msg;
|
||||||
|
@ -669,7 +682,8 @@ void obqPostFullBufferS(output_buffers_queue_t *obqp, size_t size) {
|
||||||
* .
|
* .
|
||||||
* @return A byte value from the queue.
|
* @return A byte value from the queue.
|
||||||
* @retval MSG_TIMEOUT if the specified time expired.
|
* @retval MSG_TIMEOUT if the specified time expired.
|
||||||
* @retval MSG_RESET if the queue has been reset.
|
* @retval MSG_RESET if the queue has been reset or has been put in
|
||||||
|
* suspended state.
|
||||||
*
|
*
|
||||||
* @api
|
* @api
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -84,75 +84,43 @@ static bool sdu_start_receive(SerialUSBDriver *sdup) {
|
||||||
|
|
||||||
static size_t write(void *ip, const uint8_t *bp, size_t n) {
|
static size_t write(void *ip, const uint8_t *bp, size_t n) {
|
||||||
|
|
||||||
if (usbGetDriverStateI(((SerialUSBDriver *)ip)->config->usbp) != USB_ACTIVE) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return obqWriteTimeout(&((SerialUSBDriver *)ip)->obqueue, bp,
|
return obqWriteTimeout(&((SerialUSBDriver *)ip)->obqueue, bp,
|
||||||
n, TIME_INFINITE);
|
n, TIME_INFINITE);
|
||||||
}
|
}
|
||||||
|
|
||||||
static size_t read(void *ip, uint8_t *bp, size_t n) {
|
static size_t read(void *ip, uint8_t *bp, size_t n) {
|
||||||
|
|
||||||
if (usbGetDriverStateI(((SerialUSBDriver *)ip)->config->usbp) != USB_ACTIVE) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ibqReadTimeout(&((SerialUSBDriver *)ip)->ibqueue, bp,
|
return ibqReadTimeout(&((SerialUSBDriver *)ip)->ibqueue, bp,
|
||||||
n, TIME_INFINITE);
|
n, TIME_INFINITE);
|
||||||
}
|
}
|
||||||
|
|
||||||
static msg_t put(void *ip, uint8_t b) {
|
static msg_t put(void *ip, uint8_t b) {
|
||||||
|
|
||||||
if (usbGetDriverStateI(((SerialUSBDriver *)ip)->config->usbp) != USB_ACTIVE) {
|
|
||||||
return MSG_RESET;
|
|
||||||
}
|
|
||||||
|
|
||||||
return obqPutTimeout(&((SerialUSBDriver *)ip)->obqueue, b, TIME_INFINITE);
|
return obqPutTimeout(&((SerialUSBDriver *)ip)->obqueue, b, TIME_INFINITE);
|
||||||
}
|
}
|
||||||
|
|
||||||
static msg_t get(void *ip) {
|
static msg_t get(void *ip) {
|
||||||
|
|
||||||
if (usbGetDriverStateI(((SerialUSBDriver *)ip)->config->usbp) != USB_ACTIVE) {
|
|
||||||
return MSG_RESET;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ibqGetTimeout(&((SerialUSBDriver *)ip)->ibqueue, TIME_INFINITE);
|
return ibqGetTimeout(&((SerialUSBDriver *)ip)->ibqueue, TIME_INFINITE);
|
||||||
}
|
}
|
||||||
|
|
||||||
static msg_t putt(void *ip, uint8_t b, systime_t timeout) {
|
static msg_t putt(void *ip, uint8_t b, systime_t timeout) {
|
||||||
|
|
||||||
if (usbGetDriverStateI(((SerialUSBDriver *)ip)->config->usbp) != USB_ACTIVE) {
|
|
||||||
return MSG_RESET;
|
|
||||||
}
|
|
||||||
|
|
||||||
return obqPutTimeout(&((SerialUSBDriver *)ip)->obqueue, b, timeout);
|
return obqPutTimeout(&((SerialUSBDriver *)ip)->obqueue, b, timeout);
|
||||||
}
|
}
|
||||||
|
|
||||||
static msg_t gett(void *ip, systime_t timeout) {
|
static msg_t gett(void *ip, systime_t timeout) {
|
||||||
|
|
||||||
if (usbGetDriverStateI(((SerialUSBDriver *)ip)->config->usbp) != USB_ACTIVE) {
|
|
||||||
return MSG_RESET;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ibqGetTimeout(&((SerialUSBDriver *)ip)->ibqueue, timeout);
|
return ibqGetTimeout(&((SerialUSBDriver *)ip)->ibqueue, timeout);
|
||||||
}
|
}
|
||||||
|
|
||||||
static size_t writet(void *ip, const uint8_t *bp, size_t n, systime_t timeout) {
|
static size_t writet(void *ip, const uint8_t *bp, size_t n, systime_t timeout) {
|
||||||
|
|
||||||
if (usbGetDriverStateI(((SerialUSBDriver *)ip)->config->usbp) != USB_ACTIVE) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return obqWriteTimeout(&((SerialUSBDriver *)ip)->obqueue, bp, n, timeout);
|
return obqWriteTimeout(&((SerialUSBDriver *)ip)->obqueue, bp, n, timeout);
|
||||||
}
|
}
|
||||||
|
|
||||||
static size_t readt(void *ip, uint8_t *bp, size_t n, systime_t timeout) {
|
static size_t readt(void *ip, uint8_t *bp, size_t n, systime_t timeout) {
|
||||||
|
|
||||||
if (usbGetDriverStateI(((SerialUSBDriver *)ip)->config->usbp) != USB_ACTIVE) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ibqReadTimeout(&((SerialUSBDriver *)ip)->ibqueue, bp, n, timeout);
|
return ibqReadTimeout(&((SerialUSBDriver *)ip)->ibqueue, bp, n, timeout);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -226,10 +194,10 @@ void sduObjectInit(SerialUSBDriver *sdup) {
|
||||||
sdup->vmt = &vmt;
|
sdup->vmt = &vmt;
|
||||||
osalEventObjectInit(&sdup->event);
|
osalEventObjectInit(&sdup->event);
|
||||||
sdup->state = SDU_STOP;
|
sdup->state = SDU_STOP;
|
||||||
ibqObjectInit(&sdup->ibqueue, sdup->ib,
|
ibqObjectInit(&sdup->ibqueue, true, sdup->ib,
|
||||||
SERIAL_USB_BUFFERS_SIZE, SERIAL_USB_BUFFERS_NUMBER,
|
SERIAL_USB_BUFFERS_SIZE, SERIAL_USB_BUFFERS_NUMBER,
|
||||||
ibnotify, sdup);
|
ibnotify, sdup);
|
||||||
obqObjectInit(&sdup->obqueue, sdup->ob,
|
obqObjectInit(&sdup->obqueue, true, sdup->ob,
|
||||||
SERIAL_USB_BUFFERS_SIZE, SERIAL_USB_BUFFERS_NUMBER,
|
SERIAL_USB_BUFFERS_SIZE, SERIAL_USB_BUFFERS_NUMBER,
|
||||||
obnotify, sdup);
|
obnotify, sdup);
|
||||||
}
|
}
|
||||||
|
@ -289,14 +257,19 @@ void sduStop(SerialUSBDriver *sdup) {
|
||||||
sdup->state = SDU_STOP;
|
sdup->state = SDU_STOP;
|
||||||
|
|
||||||
/* Enforces a disconnection.*/
|
/* Enforces a disconnection.*/
|
||||||
sduDisconnectI(sdup);
|
chnAddFlagsI(sdup, CHN_DISCONNECTED);
|
||||||
|
ibqResetI(&sdup->ibqueue);
|
||||||
|
obqResetI(&sdup->obqueue);
|
||||||
osalOsRescheduleS();
|
osalOsRescheduleS();
|
||||||
|
|
||||||
osalSysUnlock();
|
osalSysUnlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief USB device disconnection handler.
|
* @brief USB device suspend handler.
|
||||||
|
* @details Generates a @p CHN_DISCONNECT event and puts queues in
|
||||||
|
* non-blocking mode, this way the application cannot get stuck
|
||||||
|
* in the middle of an I/O operations.
|
||||||
* @note If this function is not called from an ISR then an explicit call
|
* @note If this function is not called from an ISR then an explicit call
|
||||||
* to @p osalOsRescheduleS() in necessary afterward.
|
* to @p osalOsRescheduleS() in necessary afterward.
|
||||||
*
|
*
|
||||||
|
@ -304,12 +277,30 @@ void sduStop(SerialUSBDriver *sdup) {
|
||||||
*
|
*
|
||||||
* @iclass
|
* @iclass
|
||||||
*/
|
*/
|
||||||
void sduDisconnectI(SerialUSBDriver *sdup) {
|
void sduSuspendHookI(SerialUSBDriver *sdup) {
|
||||||
|
|
||||||
/* Queues reset in order to signal the driver stop to the application.*/
|
|
||||||
chnAddFlagsI(sdup, CHN_DISCONNECTED);
|
chnAddFlagsI(sdup, CHN_DISCONNECTED);
|
||||||
ibqResetI(&sdup->ibqueue);
|
bqSuspendI(&sdup->ibqueue);
|
||||||
obqResetI(&sdup->obqueue);
|
bqSuspendI(&sdup->obqueue);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief USB device wakeup handler.
|
||||||
|
* @details Generates a @p CHN_CONNECT event and resumes normal queues
|
||||||
|
* operations.
|
||||||
|
*
|
||||||
|
* @note If this function is not called from an ISR then an explicit call
|
||||||
|
* to @p osalOsRescheduleS() in necessary afterward.
|
||||||
|
*
|
||||||
|
* @param[in] sdup pointer to a @p SerialUSBDriver object
|
||||||
|
*
|
||||||
|
* @iclass
|
||||||
|
*/
|
||||||
|
void sduWakeupHookI(SerialUSBDriver *sdup) {
|
||||||
|
|
||||||
|
chnAddFlagsI(sdup, CHN_CONNECTED);
|
||||||
|
bqResumeX(&sdup->ibqueue);
|
||||||
|
bqResumeX(&sdup->obqueue);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -322,7 +313,9 @@ void sduDisconnectI(SerialUSBDriver *sdup) {
|
||||||
void sduConfigureHookI(SerialUSBDriver *sdup) {
|
void sduConfigureHookI(SerialUSBDriver *sdup) {
|
||||||
|
|
||||||
ibqResetI(&sdup->ibqueue);
|
ibqResetI(&sdup->ibqueue);
|
||||||
|
bqResumeX(&sdup->ibqueue);
|
||||||
obqResetI(&sdup->obqueue);
|
obqResetI(&sdup->obqueue);
|
||||||
|
bqResumeX(&sdup->obqueue);
|
||||||
chnAddFlagsI(sdup, CHN_CONNECTED);
|
chnAddFlagsI(sdup, CHN_CONNECTED);
|
||||||
(void) sdu_start_receive(sdup);
|
(void) sdu_start_receive(sdup);
|
||||||
}
|
}
|
||||||
|
|
|
@ -267,8 +267,6 @@ static void usb_event(USBDriver *usbp, usbevent_t event) {
|
||||||
extern SerialUSBDriver SDU1;
|
extern SerialUSBDriver SDU1;
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case USB_EVENT_RESET:
|
|
||||||
return;
|
|
||||||
case USB_EVENT_ADDRESS:
|
case USB_EVENT_ADDRESS:
|
||||||
return;
|
return;
|
||||||
case USB_EVENT_CONFIGURED:
|
case USB_EVENT_CONFIGURED:
|
||||||
|
@ -285,17 +283,25 @@ static void usb_event(USBDriver *usbp, usbevent_t event) {
|
||||||
|
|
||||||
chSysUnlockFromISR();
|
chSysUnlockFromISR();
|
||||||
return;
|
return;
|
||||||
|
case USB_EVENT_RESET:
|
||||||
|
/* Falls into.*/
|
||||||
case USB_EVENT_UNCONFIGURED:
|
case USB_EVENT_UNCONFIGURED:
|
||||||
return;
|
/* Falls into.*/
|
||||||
case USB_EVENT_SUSPEND:
|
case USB_EVENT_SUSPEND:
|
||||||
chSysLockFromISR();
|
chSysLockFromISR();
|
||||||
|
|
||||||
/* Disconnection event on suspend.*/
|
/* Disconnection event on suspend.*/
|
||||||
sduDisconnectI(&SDU1);
|
sduSuspendHookI(&SDU1);
|
||||||
|
|
||||||
chSysUnlockFromISR();
|
chSysUnlockFromISR();
|
||||||
return;
|
return;
|
||||||
case USB_EVENT_WAKEUP:
|
case USB_EVENT_WAKEUP:
|
||||||
|
chSysLockFromISR();
|
||||||
|
|
||||||
|
/* Disconnection event on suspend.*/
|
||||||
|
sduWakeupHookI(&SDU1);
|
||||||
|
|
||||||
|
chSysUnlockFromISR();
|
||||||
return;
|
return;
|
||||||
case USB_EVENT_STALLED:
|
case USB_EVENT_STALLED:
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -267,8 +267,6 @@ static void usb_event(USBDriver *usbp, usbevent_t event) {
|
||||||
extern SerialUSBDriver SDU1;
|
extern SerialUSBDriver SDU1;
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case USB_EVENT_RESET:
|
|
||||||
return;
|
|
||||||
case USB_EVENT_ADDRESS:
|
case USB_EVENT_ADDRESS:
|
||||||
return;
|
return;
|
||||||
case USB_EVENT_CONFIGURED:
|
case USB_EVENT_CONFIGURED:
|
||||||
|
@ -285,17 +283,25 @@ static void usb_event(USBDriver *usbp, usbevent_t event) {
|
||||||
|
|
||||||
chSysUnlockFromISR();
|
chSysUnlockFromISR();
|
||||||
return;
|
return;
|
||||||
|
case USB_EVENT_RESET:
|
||||||
|
/* Falls into.*/
|
||||||
case USB_EVENT_UNCONFIGURED:
|
case USB_EVENT_UNCONFIGURED:
|
||||||
return;
|
/* Falls into.*/
|
||||||
case USB_EVENT_SUSPEND:
|
case USB_EVENT_SUSPEND:
|
||||||
chSysLockFromISR();
|
chSysLockFromISR();
|
||||||
|
|
||||||
/* Disconnection event on suspend.*/
|
/* Disconnection event on suspend.*/
|
||||||
sduDisconnectI(&SDU1);
|
sduSuspendHookI(&SDU1);
|
||||||
|
|
||||||
chSysUnlockFromISR();
|
chSysUnlockFromISR();
|
||||||
return;
|
return;
|
||||||
case USB_EVENT_WAKEUP:
|
case USB_EVENT_WAKEUP:
|
||||||
|
chSysLockFromISR();
|
||||||
|
|
||||||
|
/* Disconnection event on suspend.*/
|
||||||
|
sduWakeupHookI(&SDU1);
|
||||||
|
|
||||||
|
chSysUnlockFromISR();
|
||||||
return;
|
return;
|
||||||
case USB_EVENT_STALLED:
|
case USB_EVENT_STALLED:
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -267,8 +267,6 @@ static void usb_event(USBDriver *usbp, usbevent_t event) {
|
||||||
extern SerialUSBDriver SDU1;
|
extern SerialUSBDriver SDU1;
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case USB_EVENT_RESET:
|
|
||||||
return;
|
|
||||||
case USB_EVENT_ADDRESS:
|
case USB_EVENT_ADDRESS:
|
||||||
return;
|
return;
|
||||||
case USB_EVENT_CONFIGURED:
|
case USB_EVENT_CONFIGURED:
|
||||||
|
@ -285,17 +283,25 @@ static void usb_event(USBDriver *usbp, usbevent_t event) {
|
||||||
|
|
||||||
chSysUnlockFromISR();
|
chSysUnlockFromISR();
|
||||||
return;
|
return;
|
||||||
|
case USB_EVENT_RESET:
|
||||||
|
/* Falls into.*/
|
||||||
case USB_EVENT_UNCONFIGURED:
|
case USB_EVENT_UNCONFIGURED:
|
||||||
return;
|
/* Falls into.*/
|
||||||
case USB_EVENT_SUSPEND:
|
case USB_EVENT_SUSPEND:
|
||||||
chSysLockFromISR();
|
chSysLockFromISR();
|
||||||
|
|
||||||
/* Disconnection event on suspend.*/
|
/* Disconnection event on suspend.*/
|
||||||
sduDisconnectI(&SDU1);
|
sduSuspendHookI(&SDU1);
|
||||||
|
|
||||||
chSysUnlockFromISR();
|
chSysUnlockFromISR();
|
||||||
return;
|
return;
|
||||||
case USB_EVENT_WAKEUP:
|
case USB_EVENT_WAKEUP:
|
||||||
|
chSysLockFromISR();
|
||||||
|
|
||||||
|
/* Disconnection event on suspend.*/
|
||||||
|
sduWakeupHookI(&SDU1);
|
||||||
|
|
||||||
|
chSysUnlockFromISR();
|
||||||
return;
|
return;
|
||||||
case USB_EVENT_STALLED:
|
case USB_EVENT_STALLED:
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -267,8 +267,6 @@ static void usb_event(USBDriver *usbp, usbevent_t event) {
|
||||||
extern SerialUSBDriver SDU1;
|
extern SerialUSBDriver SDU1;
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case USB_EVENT_RESET:
|
|
||||||
return;
|
|
||||||
case USB_EVENT_ADDRESS:
|
case USB_EVENT_ADDRESS:
|
||||||
return;
|
return;
|
||||||
case USB_EVENT_CONFIGURED:
|
case USB_EVENT_CONFIGURED:
|
||||||
|
@ -285,17 +283,25 @@ static void usb_event(USBDriver *usbp, usbevent_t event) {
|
||||||
|
|
||||||
chSysUnlockFromISR();
|
chSysUnlockFromISR();
|
||||||
return;
|
return;
|
||||||
|
case USB_EVENT_RESET:
|
||||||
|
/* Falls into.*/
|
||||||
case USB_EVENT_UNCONFIGURED:
|
case USB_EVENT_UNCONFIGURED:
|
||||||
return;
|
/* Falls into.*/
|
||||||
case USB_EVENT_SUSPEND:
|
case USB_EVENT_SUSPEND:
|
||||||
chSysLockFromISR();
|
chSysLockFromISR();
|
||||||
|
|
||||||
/* Disconnection event on suspend.*/
|
/* Disconnection event on suspend.*/
|
||||||
sduDisconnectI(&SDU1);
|
sduSuspendHookI(&SDU1);
|
||||||
|
|
||||||
chSysUnlockFromISR();
|
chSysUnlockFromISR();
|
||||||
return;
|
return;
|
||||||
case USB_EVENT_WAKEUP:
|
case USB_EVENT_WAKEUP:
|
||||||
|
chSysLockFromISR();
|
||||||
|
|
||||||
|
/* Disconnection event on suspend.*/
|
||||||
|
sduWakeupHookI(&SDU1);
|
||||||
|
|
||||||
|
chSysUnlockFromISR();
|
||||||
return;
|
return;
|
||||||
case USB_EVENT_STALLED:
|
case USB_EVENT_STALLED:
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -267,8 +267,6 @@ static void usb_event(USBDriver *usbp, usbevent_t event) {
|
||||||
extern SerialUSBDriver SDU1;
|
extern SerialUSBDriver SDU1;
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case USB_EVENT_RESET:
|
|
||||||
return;
|
|
||||||
case USB_EVENT_ADDRESS:
|
case USB_EVENT_ADDRESS:
|
||||||
return;
|
return;
|
||||||
case USB_EVENT_CONFIGURED:
|
case USB_EVENT_CONFIGURED:
|
||||||
|
@ -285,17 +283,25 @@ static void usb_event(USBDriver *usbp, usbevent_t event) {
|
||||||
|
|
||||||
chSysUnlockFromISR();
|
chSysUnlockFromISR();
|
||||||
return;
|
return;
|
||||||
|
case USB_EVENT_RESET:
|
||||||
|
/* Falls into.*/
|
||||||
case USB_EVENT_UNCONFIGURED:
|
case USB_EVENT_UNCONFIGURED:
|
||||||
return;
|
/* Falls into.*/
|
||||||
case USB_EVENT_SUSPEND:
|
case USB_EVENT_SUSPEND:
|
||||||
chSysLockFromISR();
|
chSysLockFromISR();
|
||||||
|
|
||||||
/* Disconnection event on suspend.*/
|
/* Disconnection event on suspend.*/
|
||||||
sduDisconnectI(&SDU1);
|
sduSuspendHookI(&SDU1);
|
||||||
|
|
||||||
chSysUnlockFromISR();
|
chSysUnlockFromISR();
|
||||||
return;
|
return;
|
||||||
case USB_EVENT_WAKEUP:
|
case USB_EVENT_WAKEUP:
|
||||||
|
chSysLockFromISR();
|
||||||
|
|
||||||
|
/* Disconnection event on suspend.*/
|
||||||
|
sduWakeupHookI(&SDU1);
|
||||||
|
|
||||||
|
chSysUnlockFromISR();
|
||||||
return;
|
return;
|
||||||
case USB_EVENT_STALLED:
|
case USB_EVENT_STALLED:
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -267,8 +267,6 @@ static void usb_event(USBDriver *usbp, usbevent_t event) {
|
||||||
extern SerialUSBDriver SDU1;
|
extern SerialUSBDriver SDU1;
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case USB_EVENT_RESET:
|
|
||||||
return;
|
|
||||||
case USB_EVENT_ADDRESS:
|
case USB_EVENT_ADDRESS:
|
||||||
return;
|
return;
|
||||||
case USB_EVENT_CONFIGURED:
|
case USB_EVENT_CONFIGURED:
|
||||||
|
@ -285,17 +283,25 @@ static void usb_event(USBDriver *usbp, usbevent_t event) {
|
||||||
|
|
||||||
chSysUnlockFromISR();
|
chSysUnlockFromISR();
|
||||||
return;
|
return;
|
||||||
|
case USB_EVENT_RESET:
|
||||||
|
/* Falls into.*/
|
||||||
case USB_EVENT_UNCONFIGURED:
|
case USB_EVENT_UNCONFIGURED:
|
||||||
return;
|
/* Falls into.*/
|
||||||
case USB_EVENT_SUSPEND:
|
case USB_EVENT_SUSPEND:
|
||||||
chSysLockFromISR();
|
chSysLockFromISR();
|
||||||
|
|
||||||
/* Disconnection event on suspend.*/
|
/* Disconnection event on suspend.*/
|
||||||
sduDisconnectI(&SDU1);
|
sduSuspendHookI(&SDU1);
|
||||||
|
|
||||||
chSysUnlockFromISR();
|
chSysUnlockFromISR();
|
||||||
return;
|
return;
|
||||||
case USB_EVENT_WAKEUP:
|
case USB_EVENT_WAKEUP:
|
||||||
|
chSysLockFromISR();
|
||||||
|
|
||||||
|
/* Disconnection event on suspend.*/
|
||||||
|
sduWakeupHookI(&SDU1);
|
||||||
|
|
||||||
|
chSysUnlockFromISR();
|
||||||
return;
|
return;
|
||||||
case USB_EVENT_STALLED:
|
case USB_EVENT_STALLED:
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -267,8 +267,6 @@ static void usb_event(USBDriver *usbp, usbevent_t event) {
|
||||||
extern SerialUSBDriver SDU1;
|
extern SerialUSBDriver SDU1;
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case USB_EVENT_RESET:
|
|
||||||
return;
|
|
||||||
case USB_EVENT_ADDRESS:
|
case USB_EVENT_ADDRESS:
|
||||||
return;
|
return;
|
||||||
case USB_EVENT_CONFIGURED:
|
case USB_EVENT_CONFIGURED:
|
||||||
|
@ -285,17 +283,25 @@ static void usb_event(USBDriver *usbp, usbevent_t event) {
|
||||||
|
|
||||||
chSysUnlockFromISR();
|
chSysUnlockFromISR();
|
||||||
return;
|
return;
|
||||||
|
case USB_EVENT_RESET:
|
||||||
|
/* Falls into.*/
|
||||||
case USB_EVENT_UNCONFIGURED:
|
case USB_EVENT_UNCONFIGURED:
|
||||||
return;
|
/* Falls into.*/
|
||||||
case USB_EVENT_SUSPEND:
|
case USB_EVENT_SUSPEND:
|
||||||
chSysLockFromISR();
|
chSysLockFromISR();
|
||||||
|
|
||||||
/* Disconnection event on suspend.*/
|
/* Disconnection event on suspend.*/
|
||||||
sduDisconnectI(&SDU1);
|
sduSuspendHookI(&SDU1);
|
||||||
|
|
||||||
chSysUnlockFromISR();
|
chSysUnlockFromISR();
|
||||||
return;
|
return;
|
||||||
case USB_EVENT_WAKEUP:
|
case USB_EVENT_WAKEUP:
|
||||||
|
chSysLockFromISR();
|
||||||
|
|
||||||
|
/* Disconnection event on suspend.*/
|
||||||
|
sduWakeupHookI(&SDU1);
|
||||||
|
|
||||||
|
chSysUnlockFromISR();
|
||||||
return;
|
return;
|
||||||
case USB_EVENT_STALLED:
|
case USB_EVENT_STALLED:
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -267,8 +267,6 @@ static void usb_event(USBDriver *usbp, usbevent_t event) {
|
||||||
extern SerialUSBDriver SDU1;
|
extern SerialUSBDriver SDU1;
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case USB_EVENT_RESET:
|
|
||||||
return;
|
|
||||||
case USB_EVENT_ADDRESS:
|
case USB_EVENT_ADDRESS:
|
||||||
return;
|
return;
|
||||||
case USB_EVENT_CONFIGURED:
|
case USB_EVENT_CONFIGURED:
|
||||||
|
@ -285,17 +283,25 @@ static void usb_event(USBDriver *usbp, usbevent_t event) {
|
||||||
|
|
||||||
chSysUnlockFromISR();
|
chSysUnlockFromISR();
|
||||||
return;
|
return;
|
||||||
|
case USB_EVENT_RESET:
|
||||||
|
/* Falls into.*/
|
||||||
case USB_EVENT_UNCONFIGURED:
|
case USB_EVENT_UNCONFIGURED:
|
||||||
return;
|
/* Falls into.*/
|
||||||
case USB_EVENT_SUSPEND:
|
case USB_EVENT_SUSPEND:
|
||||||
chSysLockFromISR();
|
chSysLockFromISR();
|
||||||
|
|
||||||
/* Disconnection event on suspend.*/
|
/* Disconnection event on suspend.*/
|
||||||
sduDisconnectI(&SDU1);
|
sduSuspendHookI(&SDU1);
|
||||||
|
|
||||||
chSysUnlockFromISR();
|
chSysUnlockFromISR();
|
||||||
return;
|
return;
|
||||||
case USB_EVENT_WAKEUP:
|
case USB_EVENT_WAKEUP:
|
||||||
|
chSysLockFromISR();
|
||||||
|
|
||||||
|
/* Disconnection event on suspend.*/
|
||||||
|
sduWakeupHookI(&SDU1);
|
||||||
|
|
||||||
|
chSysUnlockFromISR();
|
||||||
return;
|
return;
|
||||||
case USB_EVENT_STALLED:
|
case USB_EVENT_STALLED:
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -267,8 +267,6 @@ static void usb_event(USBDriver *usbp, usbevent_t event) {
|
||||||
extern SerialUSBDriver SDU1;
|
extern SerialUSBDriver SDU1;
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case USB_EVENT_RESET:
|
|
||||||
return;
|
|
||||||
case USB_EVENT_ADDRESS:
|
case USB_EVENT_ADDRESS:
|
||||||
return;
|
return;
|
||||||
case USB_EVENT_CONFIGURED:
|
case USB_EVENT_CONFIGURED:
|
||||||
|
@ -285,17 +283,25 @@ static void usb_event(USBDriver *usbp, usbevent_t event) {
|
||||||
|
|
||||||
chSysUnlockFromISR();
|
chSysUnlockFromISR();
|
||||||
return;
|
return;
|
||||||
|
case USB_EVENT_RESET:
|
||||||
|
/* Falls into.*/
|
||||||
case USB_EVENT_UNCONFIGURED:
|
case USB_EVENT_UNCONFIGURED:
|
||||||
return;
|
/* Falls into.*/
|
||||||
case USB_EVENT_SUSPEND:
|
case USB_EVENT_SUSPEND:
|
||||||
chSysLockFromISR();
|
chSysLockFromISR();
|
||||||
|
|
||||||
/* Disconnection event on suspend.*/
|
/* Disconnection event on suspend.*/
|
||||||
sduDisconnectI(&SDU1);
|
sduSuspendHookI(&SDU1);
|
||||||
|
|
||||||
chSysUnlockFromISR();
|
chSysUnlockFromISR();
|
||||||
return;
|
return;
|
||||||
case USB_EVENT_WAKEUP:
|
case USB_EVENT_WAKEUP:
|
||||||
|
chSysLockFromISR();
|
||||||
|
|
||||||
|
/* Disconnection event on suspend.*/
|
||||||
|
sduWakeupHookI(&SDU1);
|
||||||
|
|
||||||
|
chSysUnlockFromISR();
|
||||||
return;
|
return;
|
||||||
case USB_EVENT_STALLED:
|
case USB_EVENT_STALLED:
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -267,8 +267,6 @@ static void usb_event(USBDriver *usbp, usbevent_t event) {
|
||||||
extern SerialUSBDriver SDU1;
|
extern SerialUSBDriver SDU1;
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case USB_EVENT_RESET:
|
|
||||||
return;
|
|
||||||
case USB_EVENT_ADDRESS:
|
case USB_EVENT_ADDRESS:
|
||||||
return;
|
return;
|
||||||
case USB_EVENT_CONFIGURED:
|
case USB_EVENT_CONFIGURED:
|
||||||
|
@ -285,17 +283,25 @@ static void usb_event(USBDriver *usbp, usbevent_t event) {
|
||||||
|
|
||||||
chSysUnlockFromISR();
|
chSysUnlockFromISR();
|
||||||
return;
|
return;
|
||||||
|
case USB_EVENT_RESET:
|
||||||
|
/* Falls into.*/
|
||||||
case USB_EVENT_UNCONFIGURED:
|
case USB_EVENT_UNCONFIGURED:
|
||||||
return;
|
/* Falls into.*/
|
||||||
case USB_EVENT_SUSPEND:
|
case USB_EVENT_SUSPEND:
|
||||||
chSysLockFromISR();
|
chSysLockFromISR();
|
||||||
|
|
||||||
/* Disconnection event on suspend.*/
|
/* Disconnection event on suspend.*/
|
||||||
sduDisconnectI(&SDU1);
|
sduSuspendHookI(&SDU1);
|
||||||
|
|
||||||
chSysUnlockFromISR();
|
chSysUnlockFromISR();
|
||||||
return;
|
return;
|
||||||
case USB_EVENT_WAKEUP:
|
case USB_EVENT_WAKEUP:
|
||||||
|
chSysLockFromISR();
|
||||||
|
|
||||||
|
/* Disconnection event on suspend.*/
|
||||||
|
sduWakeupHookI(&SDU1);
|
||||||
|
|
||||||
|
chSysUnlockFromISR();
|
||||||
return;
|
return;
|
||||||
case USB_EVENT_STALLED:
|
case USB_EVENT_STALLED:
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -267,8 +267,6 @@ static void usb_event(USBDriver *usbp, usbevent_t event) {
|
||||||
extern SerialUSBDriver SDU1;
|
extern SerialUSBDriver SDU1;
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case USB_EVENT_RESET:
|
|
||||||
return;
|
|
||||||
case USB_EVENT_ADDRESS:
|
case USB_EVENT_ADDRESS:
|
||||||
return;
|
return;
|
||||||
case USB_EVENT_CONFIGURED:
|
case USB_EVENT_CONFIGURED:
|
||||||
|
@ -285,17 +283,25 @@ static void usb_event(USBDriver *usbp, usbevent_t event) {
|
||||||
|
|
||||||
chSysUnlockFromISR();
|
chSysUnlockFromISR();
|
||||||
return;
|
return;
|
||||||
|
case USB_EVENT_RESET:
|
||||||
|
/* Falls into.*/
|
||||||
case USB_EVENT_UNCONFIGURED:
|
case USB_EVENT_UNCONFIGURED:
|
||||||
return;
|
/* Falls into.*/
|
||||||
case USB_EVENT_SUSPEND:
|
case USB_EVENT_SUSPEND:
|
||||||
chSysLockFromISR();
|
chSysLockFromISR();
|
||||||
|
|
||||||
/* Disconnection event on suspend.*/
|
/* Disconnection event on suspend.*/
|
||||||
sduDisconnectI(&SDU1);
|
sduSuspendHookI(&SDU1);
|
||||||
|
|
||||||
chSysUnlockFromISR();
|
chSysUnlockFromISR();
|
||||||
return;
|
return;
|
||||||
case USB_EVENT_WAKEUP:
|
case USB_EVENT_WAKEUP:
|
||||||
|
chSysLockFromISR();
|
||||||
|
|
||||||
|
/* Disconnection event on suspend.*/
|
||||||
|
sduWakeupHookI(&SDU1);
|
||||||
|
|
||||||
|
chSysUnlockFromISR();
|
||||||
return;
|
return;
|
||||||
case USB_EVENT_STALLED:
|
case USB_EVENT_STALLED:
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -373,8 +373,6 @@ static void usb_event(USBDriver *usbp, usbevent_t event) {
|
||||||
extern SerialUSBDriver SDU2;
|
extern SerialUSBDriver SDU2;
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case USB_EVENT_RESET:
|
|
||||||
return;
|
|
||||||
case USB_EVENT_ADDRESS:
|
case USB_EVENT_ADDRESS:
|
||||||
return;
|
return;
|
||||||
case USB_EVENT_CONFIGURED:
|
case USB_EVENT_CONFIGURED:
|
||||||
|
@ -399,18 +397,27 @@ static void usb_event(USBDriver *usbp, usbevent_t event) {
|
||||||
|
|
||||||
chSysUnlockFromISR();
|
chSysUnlockFromISR();
|
||||||
return;
|
return;
|
||||||
|
case USB_EVENT_RESET:
|
||||||
|
/* Falls into.*/
|
||||||
case USB_EVENT_UNCONFIGURED:
|
case USB_EVENT_UNCONFIGURED:
|
||||||
return;
|
/* Falls into.*/
|
||||||
case USB_EVENT_SUSPEND:
|
case USB_EVENT_SUSPEND:
|
||||||
chSysLockFromISR();
|
chSysLockFromISR();
|
||||||
|
|
||||||
/* Disconnection event on suspend.*/
|
/* Disconnection event on suspend.*/
|
||||||
sduDisconnectI(&SDU1);
|
sduSuspendHookI(&SDU1);
|
||||||
sduDisconnectI(&SDU2);
|
sduSuspendHookI(&SDU2);
|
||||||
|
|
||||||
chSysUnlockFromISR();
|
chSysUnlockFromISR();
|
||||||
return;
|
return;
|
||||||
case USB_EVENT_WAKEUP:
|
case USB_EVENT_WAKEUP:
|
||||||
|
chSysLockFromISR();
|
||||||
|
|
||||||
|
/* Disconnection event on suspend.*/
|
||||||
|
sduWakeupHookI(&SDU1);
|
||||||
|
sduWakeupHookI(&SDU2);
|
||||||
|
|
||||||
|
chSysUnlockFromISR();
|
||||||
return;
|
return;
|
||||||
case USB_EVENT_STALLED:
|
case USB_EVENT_STALLED:
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -267,8 +267,6 @@ static void usb_event(USBDriver *usbp, usbevent_t event) {
|
||||||
extern SerialUSBDriver SDU1;
|
extern SerialUSBDriver SDU1;
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case USB_EVENT_RESET:
|
|
||||||
return;
|
|
||||||
case USB_EVENT_ADDRESS:
|
case USB_EVENT_ADDRESS:
|
||||||
return;
|
return;
|
||||||
case USB_EVENT_CONFIGURED:
|
case USB_EVENT_CONFIGURED:
|
||||||
|
@ -285,17 +283,25 @@ static void usb_event(USBDriver *usbp, usbevent_t event) {
|
||||||
|
|
||||||
chSysUnlockFromISR();
|
chSysUnlockFromISR();
|
||||||
return;
|
return;
|
||||||
|
case USB_EVENT_RESET:
|
||||||
|
/* Falls into.*/
|
||||||
case USB_EVENT_UNCONFIGURED:
|
case USB_EVENT_UNCONFIGURED:
|
||||||
return;
|
/* Falls into.*/
|
||||||
case USB_EVENT_SUSPEND:
|
case USB_EVENT_SUSPEND:
|
||||||
chSysLockFromISR();
|
chSysLockFromISR();
|
||||||
|
|
||||||
/* Disconnection event on suspend.*/
|
/* Disconnection event on suspend.*/
|
||||||
sduDisconnectI(&SDU1);
|
sduSuspendHookI(&SDU1);
|
||||||
|
|
||||||
chSysUnlockFromISR();
|
chSysUnlockFromISR();
|
||||||
return;
|
return;
|
||||||
case USB_EVENT_WAKEUP:
|
case USB_EVENT_WAKEUP:
|
||||||
|
chSysLockFromISR();
|
||||||
|
|
||||||
|
/* Disconnection event on suspend.*/
|
||||||
|
sduWakeupHookI(&SDU1);
|
||||||
|
|
||||||
|
chSysUnlockFromISR();
|
||||||
return;
|
return;
|
||||||
case USB_EVENT_STALLED:
|
case USB_EVENT_STALLED:
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -373,8 +373,6 @@ static void usb_event(USBDriver *usbp, usbevent_t event) {
|
||||||
extern SerialUSBDriver SDU2;
|
extern SerialUSBDriver SDU2;
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case USB_EVENT_RESET:
|
|
||||||
return;
|
|
||||||
case USB_EVENT_ADDRESS:
|
case USB_EVENT_ADDRESS:
|
||||||
return;
|
return;
|
||||||
case USB_EVENT_CONFIGURED:
|
case USB_EVENT_CONFIGURED:
|
||||||
|
@ -399,18 +397,27 @@ static void usb_event(USBDriver *usbp, usbevent_t event) {
|
||||||
|
|
||||||
chSysUnlockFromISR();
|
chSysUnlockFromISR();
|
||||||
return;
|
return;
|
||||||
|
case USB_EVENT_RESET:
|
||||||
|
/* Falls into.*/
|
||||||
case USB_EVENT_UNCONFIGURED:
|
case USB_EVENT_UNCONFIGURED:
|
||||||
return;
|
/* Falls into.*/
|
||||||
case USB_EVENT_SUSPEND:
|
case USB_EVENT_SUSPEND:
|
||||||
chSysLockFromISR();
|
chSysLockFromISR();
|
||||||
|
|
||||||
/* Disconnection event on suspend.*/
|
/* Disconnection event on suspend.*/
|
||||||
sduDisconnectI(&SDU1);
|
sduSuspendHookI(&SDU1);
|
||||||
sduDisconnectI(&SDU2);
|
sduSuspendHookI(&SDU2);
|
||||||
|
|
||||||
chSysUnlockFromISR();
|
chSysUnlockFromISR();
|
||||||
return;
|
return;
|
||||||
case USB_EVENT_WAKEUP:
|
case USB_EVENT_WAKEUP:
|
||||||
|
chSysLockFromISR();
|
||||||
|
|
||||||
|
/* Disconnection event on suspend.*/
|
||||||
|
sduWakeupHookI(&SDU1);
|
||||||
|
sduWakeupHookI(&SDU2);
|
||||||
|
|
||||||
|
chSysUnlockFromISR();
|
||||||
return;
|
return;
|
||||||
case USB_EVENT_STALLED:
|
case USB_EVENT_STALLED:
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -267,8 +267,6 @@ static void usb_event(USBDriver *usbp, usbevent_t event) {
|
||||||
extern SerialUSBDriver SDU2;
|
extern SerialUSBDriver SDU2;
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case USB_EVENT_RESET:
|
|
||||||
return;
|
|
||||||
case USB_EVENT_ADDRESS:
|
case USB_EVENT_ADDRESS:
|
||||||
return;
|
return;
|
||||||
case USB_EVENT_CONFIGURED:
|
case USB_EVENT_CONFIGURED:
|
||||||
|
@ -285,17 +283,25 @@ static void usb_event(USBDriver *usbp, usbevent_t event) {
|
||||||
|
|
||||||
chSysUnlockFromISR();
|
chSysUnlockFromISR();
|
||||||
return;
|
return;
|
||||||
|
case USB_EVENT_RESET:
|
||||||
|
/* Falls into.*/
|
||||||
case USB_EVENT_UNCONFIGURED:
|
case USB_EVENT_UNCONFIGURED:
|
||||||
return;
|
/* Falls into.*/
|
||||||
case USB_EVENT_SUSPEND:
|
case USB_EVENT_SUSPEND:
|
||||||
chSysLockFromISR();
|
chSysLockFromISR();
|
||||||
|
|
||||||
/* Disconnection event on suspend.*/
|
/* Disconnection event on suspend.*/
|
||||||
sduDisconnectI(&SDU2);
|
sduSuspendHookI(&SDU2);
|
||||||
|
|
||||||
chSysUnlockFromISR();
|
chSysUnlockFromISR();
|
||||||
return;
|
return;
|
||||||
case USB_EVENT_WAKEUP:
|
case USB_EVENT_WAKEUP:
|
||||||
|
chSysLockFromISR();
|
||||||
|
|
||||||
|
/* Disconnection event on suspend.*/
|
||||||
|
sduWakeupHookI(&SDU2);
|
||||||
|
|
||||||
|
chSysUnlockFromISR();
|
||||||
return;
|
return;
|
||||||
case USB_EVENT_STALLED:
|
case USB_EVENT_STALLED:
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -267,8 +267,6 @@ static void usb_event(USBDriver *usbp, usbevent_t event) {
|
||||||
extern SerialUSBDriver SDU1;
|
extern SerialUSBDriver SDU1;
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case USB_EVENT_RESET:
|
|
||||||
return;
|
|
||||||
case USB_EVENT_ADDRESS:
|
case USB_EVENT_ADDRESS:
|
||||||
return;
|
return;
|
||||||
case USB_EVENT_CONFIGURED:
|
case USB_EVENT_CONFIGURED:
|
||||||
|
@ -285,17 +283,25 @@ static void usb_event(USBDriver *usbp, usbevent_t event) {
|
||||||
|
|
||||||
chSysUnlockFromISR();
|
chSysUnlockFromISR();
|
||||||
return;
|
return;
|
||||||
|
case USB_EVENT_RESET:
|
||||||
|
/* Falls into.*/
|
||||||
case USB_EVENT_UNCONFIGURED:
|
case USB_EVENT_UNCONFIGURED:
|
||||||
return;
|
/* Falls into.*/
|
||||||
case USB_EVENT_SUSPEND:
|
case USB_EVENT_SUSPEND:
|
||||||
chSysLockFromISR();
|
chSysLockFromISR();
|
||||||
|
|
||||||
/* Disconnection event on suspend.*/
|
/* Disconnection event on suspend.*/
|
||||||
sduDisconnectI(&SDU1);
|
sduSuspendHookI(&SDU1);
|
||||||
|
|
||||||
chSysUnlockFromISR();
|
chSysUnlockFromISR();
|
||||||
return;
|
return;
|
||||||
case USB_EVENT_WAKEUP:
|
case USB_EVENT_WAKEUP:
|
||||||
|
chSysLockFromISR();
|
||||||
|
|
||||||
|
/* Disconnection event on suspend.*/
|
||||||
|
sduWakeupHookI(&SDU1);
|
||||||
|
|
||||||
|
chSysUnlockFromISR();
|
||||||
return;
|
return;
|
||||||
case USB_EVENT_STALLED:
|
case USB_EVENT_STALLED:
|
||||||
return;
|
return;
|
||||||
|
|
Loading…
Reference in New Issue