summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorhathach <[email protected]>2021-06-13 15:27:20 +0700
committerhathach <[email protected]>2021-06-13 15:31:00 +0700
commit1af64f9729f743f4fc9d8686af239c65f689630f (patch)
tree40b79d7e6e1334e2b1be58e6214c8cdb82b16395 /src
parent289ccf3c938c8f2be0edf2a2c8a18c68e39880c0 (diff)
remove sent_setup from hw endpoint
Diffstat (limited to 'src')
-rw-r--r--src/portable/raspberrypi/rp2040/hcd_rp2040.c34
-rw-r--r--src/portable/raspberrypi/rp2040/rp2040_usb.c3
-rw-r--r--src/portable/raspberrypi/rp2040/rp2040_usb.h3
3 files changed, 20 insertions, 20 deletions
diff --git a/src/portable/raspberrypi/rp2040/hcd_rp2040.c b/src/portable/raspberrypi/rp2040/hcd_rp2040.c
index 42d0839f6..40a0805c6 100644
--- a/src/portable/raspberrypi/rp2040/hcd_rp2040.c
+++ b/src/portable/raspberrypi/rp2040/hcd_rp2040.c
@@ -161,19 +161,19 @@ static void hw_handle_buff_status(void)
static void hw_trans_complete(void)
{
- struct hw_endpoint *ep = &epx;
- assert(ep->active);
+ struct hw_endpoint *ep = &epx;
+ assert(ep->active);
- if (ep->sent_setup)
- {
- pico_trace("Sent setup packet\n");
- hw_xfer_complete(ep, XFER_RESULT_SUCCESS);
- }
- else
- {
- // Don't care. Will handle this in buff status
- return;
- }
+ if (usb_hw->sie_ctrl & USB_SIE_CTRL_SEND_SETUP_BITS)
+ {
+ pico_trace("Sent setup packet\n");
+ hw_xfer_complete(ep, XFER_RESULT_SUCCESS);
+ }
+ else
+ {
+ // Don't care. Will handle this in buff status
+ return;
+ }
}
static void hcd_rp2040_irq(void)
@@ -473,10 +473,13 @@ bool hcd_edpt_xfer(uint8_t rhport, uint8_t dev_addr, uint8_t ep_addr, uint8_t *
struct hw_endpoint *ep = get_dev_ep(dev_addr, ep_addr);
assert(ep);
- if (ep_addr != ep->ep_addr)
+ // Control endpoint can change direction 0x00 <-> 0x80
+ if ( ep_addr != ep->ep_addr )
{
- // Direction has flipped on endpoint control so re init it but with same properties
- _hw_endpoint_init(ep, dev_addr, ep_addr, ep->wMaxPacketSize, ep->transfer_type, 0);
+ assert(ep_num == 0);
+
+ // Direction has flipped on endpoint control so re init it but with same properties
+ _hw_endpoint_init(ep, dev_addr, ep_addr, ep->wMaxPacketSize, ep->transfer_type, 0);
}
// If a normal transfer (non-interrupt) then initiate using
@@ -519,7 +522,6 @@ bool hcd_setup_send(uint8_t rhport, uint8_t dev_addr, uint8_t const setup_packet
ep->remaining_len = 8;
ep->active = true;
- ep->sent_setup = true;
// Set device address
usb_hw->dev_addr_ctrl = dev_addr;
diff --git a/src/portable/raspberrypi/rp2040/rp2040_usb.c b/src/portable/raspberrypi/rp2040/rp2040_usb.c
index cb46ad1b9..7430881e0 100644
--- a/src/portable/raspberrypi/rp2040/rp2040_usb.c
+++ b/src/portable/raspberrypi/rp2040/rp2040_usb.c
@@ -73,9 +73,6 @@ void hw_endpoint_reset_transfer(struct hw_endpoint *ep)
{
ep->stalled = false;
ep->active = false;
-#if TUSB_OPT_HOST_ENABLED
- ep->sent_setup = false;
-#endif
ep->remaining_len = 0;
ep->xferred_len = 0;
ep->user_buf = 0;
diff --git a/src/portable/raspberrypi/rp2040/rp2040_usb.h b/src/portable/raspberrypi/rp2040/rp2040_usb.h
index 4c24b8dbe..4c787f496 100644
--- a/src/portable/raspberrypi/rp2040/rp2040_usb.h
+++ b/src/portable/raspberrypi/rp2040/rp2040_usb.h
@@ -55,13 +55,14 @@ struct hw_endpoint
// Data needed from EP descriptor
uint16_t wMaxPacketSize;
+
// Interrupt, bulk, etc
uint8_t transfer_type;
#if TUSB_OPT_HOST_ENABLED
// Only needed for host
uint8_t dev_addr;
- bool sent_setup;
+
// If interrupt endpoint
uint8_t interrupt_num;
#endif