Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/thirdpin/libopencm3.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'lib/usb/usb_dwc_common.c')
-rw-r--r--lib/usb/usb_dwc_common.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/lib/usb/usb_dwc_common.c b/lib/usb/usb_dwc_common.c
index 11af2609..162bfd7c 100644
--- a/lib/usb/usb_dwc_common.c
+++ b/lib/usb/usb_dwc_common.c
@@ -358,6 +358,11 @@ void dwc_poll(usbd_device *usbd_dev)
uint32_t rxstsp = REBASE(OTG_GRXSTSP);
uint32_t pktsts = rxstsp & OTG_GRXSTSP_PKTSTS_MASK;
uint8_t ep = rxstsp & OTG_GRXSTSP_EPNUM_MASK;
+
+ if (pktsts == OTG_GRXSTSP_PKTSTS_SETUP_COMP) {
+ usbd_dev->user_callback_ctr[ep][USB_TRANSACTION_SETUP] (usbd_dev, ep);
+ }
+
if (pktsts == OTG_GRXSTSP_PKTSTS_OUT_COMP
|| pktsts == OTG_GRXSTSP_PKTSTS_SETUP_COMP) {
REBASE(OTG_DOEPTSIZ(ep)) = usbd_dev->doeptsiz[ep];
@@ -390,7 +395,9 @@ void dwc_poll(usbd_device *usbd_dev)
/* Save packet size for dwc_ep_read_packet(). */
usbd_dev->rxbcnt = (rxstsp & OTG_GRXSTSP_BCNT_MASK) >> 4;
- if (usbd_dev->user_callback_ctr[ep][type]) {
+ if (type == USB_TRANSACTION_SETUP) {
+ dwc_ep_read_packet(usbd_dev, ep, &usbd_dev->control_state.req, 8);
+ } else if (usbd_dev->user_callback_ctr[ep][type]) {
usbd_dev->user_callback_ctr[ep][type] (usbd_dev, ep);
}