diff --git a/os/hal/src/serial_usb.c b/os/hal/src/serial_usb.c index 5fec52a68..52be6e975 100644 --- a/os/hal/src/serial_usb.c +++ b/os/hal/src/serial_usb.c @@ -288,8 +288,8 @@ void sduDataTransmitted(USBDriver *usbp, usbep_t ep) { (void)ep; - chnAddFlagsI(sdup, CHN_OUTPUT_EMPTY); chSysLockFromIsr(); + chnAddFlagsI(sdup, CHN_OUTPUT_EMPTY); if ((n = chOQGetFullI(&sdup->oqueue)) > 0) { /* The endpoint cannot be busy, we are in the context of the callback, @@ -321,8 +321,8 @@ void sduDataReceived(USBDriver *usbp, usbep_t ep) { (void)ep; - chnAddFlagsI(sdup, CHN_INPUT_AVAILABLE); chSysLockFromIsr(); + chnAddFlagsI(sdup, CHN_INPUT_AVAILABLE); /* Writes to the input queue can only happen when there is enough space to hold at least one packet.*/ diff --git a/testhal/STM32F4xx/USB_CDC/main.c b/testhal/STM32F4xx/USB_CDC/main.c index e36ce3dc9..0ae9c81e0 100644 --- a/testhal/STM32F4xx/USB_CDC/main.c +++ b/testhal/STM32F4xx/USB_CDC/main.c @@ -225,6 +225,11 @@ static const USBDescriptor *get_descriptor(USBDriver *usbp, return NULL; } +/** + * @brief IN EP1 state. + */ +static USBInEndpointState ep1instate; + /** * @brief EP1 initialization structure (IN only). */ @@ -235,11 +240,16 @@ static const USBEndpointConfig ep1config = { NULL, 0x0040, 0x0000, - NULL, + &ep1instate, NULL, NULL }; +/** + * @brief OUT EP1 state. + */ +USBOutEndpointState ep1outstate; + /** * @brief EP2 initialization structure (IN only). */ @@ -251,10 +261,15 @@ static const USBEndpointConfig ep2config = { 0x0010, 0x0000, NULL, - NULL, + &ep1outstate, NULL }; +/** + * @brief OUT EP2 state. + */ +USBOutEndpointState ep2outstate; + /** * @brief EP3 initialization structure (OUT only). */ @@ -266,7 +281,7 @@ static const USBEndpointConfig ep3config = { 0x0000, 0x0040, NULL, - NULL, + &ep2outstate, NULL };