use dcd_event_bus_reset() with speed to replace bus_signal
This commit is contained in:
parent
fb896be201
commit
6e6e6265e4
|
@ -1103,6 +1103,24 @@ bool usbd_edpt_open(uint8_t rhport, tusb_desc_endpoint_t const * desc_ep)
|
||||||
{
|
{
|
||||||
TU_LOG2(" Open EP %02X with Size = %u\r\n", desc_ep->bEndpointAddress, desc_ep->wMaxPacketSize.size);
|
TU_LOG2(" Open EP %02X with Size = %u\r\n", desc_ep->bEndpointAddress, desc_ep->wMaxPacketSize.size);
|
||||||
|
|
||||||
|
if (TUSB_XFER_ISOCHRONOUS == desc_ep->bmAttributes.xfer)
|
||||||
|
{
|
||||||
|
TU_ASSERT(desc_ep->wMaxPacketSize.size <= (_usbd_dev.speed == TUSB_SPEED_HIGH ? 1024 : 1023));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
uint16_t const max_epsize = (_usbd_dev.speed == TUSB_SPEED_HIGH ? 512 : 64);
|
||||||
|
|
||||||
|
if (TUSB_XFER_BULK == desc_ep->bmAttributes.xfer)
|
||||||
|
{
|
||||||
|
// Bulk must be EXACTLY 512/64 bytes
|
||||||
|
TU_ASSERT(desc_ep->wMaxPacketSize.size == max_epsize);
|
||||||
|
}else
|
||||||
|
{
|
||||||
|
TU_ASSERT(desc_ep->wMaxPacketSize.size <= max_epsize);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return dcd_edpt_open(rhport, desc_ep);
|
return dcd_edpt_open(rhport, desc_ep);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -664,7 +664,7 @@ static void handle_bus_reset(void)
|
||||||
(void)USB->USB_ALTEV_REG;
|
(void)USB->USB_ALTEV_REG;
|
||||||
_dcd.in_reset = true;
|
_dcd.in_reset = true;
|
||||||
|
|
||||||
dcd_event_bus_signal(0, DCD_EVENT_BUS_RESET, true);
|
dcd_event_bus_reset(0, TUSB_SPEED_FULL, true);
|
||||||
USB->USB_DMA_CTRL_REG = 0;
|
USB->USB_DMA_CTRL_REG = 0;
|
||||||
|
|
||||||
USB->USB_MAMSK_REG = USB_USB_MAMSK_REG_USB_M_INTR_Msk |
|
USB->USB_MAMSK_REG = USB_USB_MAMSK_REG_USB_M_INTR_Msk |
|
||||||
|
@ -821,14 +821,13 @@ void dcd_disconnect(uint8_t rhport)
|
||||||
|
|
||||||
bool dcd_edpt_open(uint8_t rhport, tusb_desc_endpoint_t const * desc_edpt)
|
bool dcd_edpt_open(uint8_t rhport, tusb_desc_endpoint_t const * desc_edpt)
|
||||||
{
|
{
|
||||||
|
(void)rhport;
|
||||||
|
|
||||||
uint8_t const epnum = tu_edpt_number(desc_edpt->bEndpointAddress);
|
uint8_t const epnum = tu_edpt_number(desc_edpt->bEndpointAddress);
|
||||||
uint8_t const dir = tu_edpt_dir(desc_edpt->bEndpointAddress);
|
uint8_t const dir = tu_edpt_dir(desc_edpt->bEndpointAddress);
|
||||||
xfer_ctl_t * xfer = XFER_CTL_BASE(epnum, dir);
|
xfer_ctl_t * xfer = XFER_CTL_BASE(epnum, dir);
|
||||||
uint8_t iso_mask = 0;
|
uint8_t iso_mask = 0;
|
||||||
|
|
||||||
(void)rhport;
|
|
||||||
|
|
||||||
TU_ASSERT(desc_edpt->wMaxPacketSize.size <= 1023);
|
|
||||||
TU_ASSERT(epnum < EP_MAX);
|
TU_ASSERT(epnum < EP_MAX);
|
||||||
|
|
||||||
xfer->max_packet_size = desc_edpt->wMaxPacketSize.size;
|
xfer->max_packet_size = desc_edpt->wMaxPacketSize.size;
|
||||||
|
|
|
@ -252,7 +252,6 @@ bool dcd_edpt_open(uint8_t rhport, tusb_desc_endpoint_t const *desc_edpt)
|
||||||
uint8_t const epnum = tu_edpt_number(desc_edpt->bEndpointAddress);
|
uint8_t const epnum = tu_edpt_number(desc_edpt->bEndpointAddress);
|
||||||
uint8_t const dir = tu_edpt_dir(desc_edpt->bEndpointAddress);
|
uint8_t const dir = tu_edpt_dir(desc_edpt->bEndpointAddress);
|
||||||
|
|
||||||
TU_ASSERT(desc_edpt->wMaxPacketSize.size <= 64);
|
|
||||||
TU_ASSERT(epnum < EP_MAX);
|
TU_ASSERT(epnum < EP_MAX);
|
||||||
|
|
||||||
xfer_ctl_t *xfer = XFER_CTL_BASE(epnum, dir);
|
xfer_ctl_t *xfer = XFER_CTL_BASE(epnum, dir);
|
||||||
|
|
|
@ -387,7 +387,7 @@ void dcd_int_handler (uint8_t rhport)
|
||||||
USB->DEVICE.INTENCLR.reg = USB_DEVICE_INTFLAG_WAKEUP | USB_DEVICE_INTFLAG_SUSPEND;
|
USB->DEVICE.INTENCLR.reg = USB_DEVICE_INTFLAG_WAKEUP | USB_DEVICE_INTFLAG_SUSPEND;
|
||||||
|
|
||||||
bus_reset();
|
bus_reset();
|
||||||
dcd_event_bus_signal(0, DCD_EVENT_BUS_RESET, true);
|
dcd_event_bus_reset(0, TUSB_SPEED_FULL, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Handle SETUP packet
|
// Handle SETUP packet
|
||||||
|
|
|
@ -338,7 +338,7 @@ void dcd_int_handler(uint8_t rhport)
|
||||||
if (intr_status & UDP_ISR_ENDBUSRES_Msk)
|
if (intr_status & UDP_ISR_ENDBUSRES_Msk)
|
||||||
{
|
{
|
||||||
bus_reset();
|
bus_reset();
|
||||||
dcd_event_bus_signal(rhport, DCD_EVENT_BUS_RESET, true);
|
dcd_event_bus_reset(rhport, TUSB_SPEED_FULL, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
// SOF
|
// SOF
|
||||||
|
|
|
@ -533,7 +533,7 @@ void dcd_int_handler(uint8_t rhport)
|
||||||
if ( int_status & USBD_INTEN_USBRESET_Msk )
|
if ( int_status & USBD_INTEN_USBRESET_Msk )
|
||||||
{
|
{
|
||||||
bus_reset();
|
bus_reset();
|
||||||
dcd_event_bus_signal(0, DCD_EVENT_BUS_RESET, true);
|
dcd_event_bus_reset(0, TUSB_SPEED_FULL, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ISOIN: Data was moved to endpoint buffer, client will be notified in SOF
|
// ISOIN: Data was moved to endpoint buffer, client will be notified in SOF
|
||||||
|
|
|
@ -329,8 +329,7 @@ void dcd_int_handler(uint8_t rhport)
|
||||||
USBD->ATTR |= USBD_ATTR_USB_EN_Msk | USBD_ATTR_PHY_EN_Msk;
|
USBD->ATTR |= USBD_ATTR_USB_EN_Msk | USBD_ATTR_PHY_EN_Msk;
|
||||||
|
|
||||||
bus_reset();
|
bus_reset();
|
||||||
|
dcd_event_bus_reset(0, TUSB_SPEED_FULL, true);
|
||||||
dcd_event_bus_signal(0, DCD_EVENT_BUS_RESET, true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(state & USBD_STATE_SUSPEND)
|
if(state & USBD_STATE_SUSPEND)
|
||||||
|
|
|
@ -340,7 +340,7 @@ void dcd_int_handler(uint8_t rhport)
|
||||||
|
|
||||||
bus_reset();
|
bus_reset();
|
||||||
|
|
||||||
dcd_event_bus_signal(0, DCD_EVENT_BUS_RESET, true);
|
dcd_event_bus_reset(0, TUSB_SPEED_FULL, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(state & USBD_ATTR_SUSPEND_Msk)
|
if(state & USBD_ATTR_SUSPEND_Msk)
|
||||||
|
|
|
@ -224,7 +224,7 @@ static void process_bus_reset(uint8_t rhport)
|
||||||
_dcd.addr = 0;
|
_dcd.addr = 0;
|
||||||
prepare_next_setup_packet(rhport);
|
prepare_next_setup_packet(rhport);
|
||||||
KHCI->CTL &= ~USB_CTL_ODDRST_MASK;
|
KHCI->CTL &= ~USB_CTL_ODDRST_MASK;
|
||||||
dcd_event_bus_signal(rhport, DCD_EVENT_BUS_RESET, true);
|
dcd_event_bus_reset(rhport, TUSB_SPEED_FULL, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void process_bus_inactive(uint8_t rhport)
|
static void process_bus_inactive(uint8_t rhport)
|
||||||
|
|
|
@ -471,7 +471,7 @@ static void bus_event_isr(uint8_t rhport)
|
||||||
if (dev_status & SIE_DEV_STATUS_RESET_MASK)
|
if (dev_status & SIE_DEV_STATUS_RESET_MASK)
|
||||||
{
|
{
|
||||||
bus_reset();
|
bus_reset();
|
||||||
dcd_event_bus_signal(rhport, DCD_EVENT_BUS_RESET, true);
|
dcd_event_bus_reset(rhport, TUSB_SPEED_FULL, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dev_status & SIE_DEV_STATUS_CONNECT_CHANGE_MASK)
|
if (dev_status & SIE_DEV_STATUS_CONNECT_CHANGE_MASK)
|
||||||
|
|
|
@ -243,7 +243,7 @@ bool dcd_edpt_open(uint8_t rhport, tusb_desc_endpoint_t const * p_endpoint_desc)
|
||||||
(void) rhport;
|
(void) rhport;
|
||||||
|
|
||||||
// TODO not support ISO yet
|
// TODO not support ISO yet
|
||||||
if (p_endpoint_desc->bmAttributes.xfer == TUSB_XFER_ISOCHRONOUS) return false;
|
TU_VERIFY(p_endpoint_desc->bmAttributes.xfer != TUSB_XFER_ISOCHRONOUS);
|
||||||
|
|
||||||
//------------- Prepare Queue Head -------------//
|
//------------- Prepare Queue Head -------------//
|
||||||
uint8_t ep_id = ep_addr2id(p_endpoint_desc->bEndpointAddress);
|
uint8_t ep_id = ep_addr2id(p_endpoint_desc->bEndpointAddress);
|
||||||
|
@ -357,7 +357,7 @@ void dcd_int_handler(uint8_t rhport)
|
||||||
if ( cmd_stat & CMDSTAT_RESET_CHANGE_MASK) // bus reset
|
if ( cmd_stat & CMDSTAT_RESET_CHANGE_MASK) // bus reset
|
||||||
{
|
{
|
||||||
bus_reset();
|
bus_reset();
|
||||||
dcd_event_bus_signal(0, DCD_EVENT_BUS_RESET, true);
|
dcd_event_bus_reset(0, TUSB_SPEED_FULL, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cmd_stat & CMDSTAT_CONNECT_CHANGE_MASK)
|
if (cmd_stat & CMDSTAT_CONNECT_CHANGE_MASK)
|
||||||
|
|
|
@ -547,7 +547,7 @@ void dcd_int_handler(uint8_t rhport) {
|
||||||
// USBRST is start of reset.
|
// USBRST is start of reset.
|
||||||
clear_istr_bits(USB_ISTR_RESET);
|
clear_istr_bits(USB_ISTR_RESET);
|
||||||
dcd_handle_bus_reset();
|
dcd_handle_bus_reset();
|
||||||
dcd_event_bus_signal(0, DCD_EVENT_BUS_RESET, true);
|
dcd_event_bus_reset(0, TUSB_SPEED_FULL, true);
|
||||||
return; // Don't do the rest of the things here; perhaps they've been cleared?
|
return; // Don't do the rest of the things here; perhaps they've been cleared?
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -565,15 +565,6 @@ bool dcd_edpt_open (uint8_t rhport, tusb_desc_endpoint_t const * desc_edpt)
|
||||||
|
|
||||||
TU_ASSERT(epnum < EP_MAX);
|
TU_ASSERT(epnum < EP_MAX);
|
||||||
|
|
||||||
if (desc_edpt->bmAttributes.xfer == TUSB_XFER_ISOCHRONOUS)
|
|
||||||
{
|
|
||||||
TU_ASSERT(desc_edpt->wMaxPacketSize.size <= (get_speed(rhport) == TUSB_SPEED_HIGH ? 1024 : 1023));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
TU_ASSERT(desc_edpt->wMaxPacketSize.size <= (get_speed(rhport) == TUSB_SPEED_HIGH ? 512 : 64));
|
|
||||||
}
|
|
||||||
|
|
||||||
xfer_ctl_t * xfer = XFER_CTL_BASE(epnum, dir);
|
xfer_ctl_t * xfer = XFER_CTL_BASE(epnum, dir);
|
||||||
xfer->max_size = desc_edpt->wMaxPacketSize.size;
|
xfer->max_size = desc_edpt->wMaxPacketSize.size;
|
||||||
xfer->interval = desc_edpt->bInterval;
|
xfer->interval = desc_edpt->bInterval;
|
||||||
|
|
|
@ -232,9 +232,9 @@ bool dcd_edpt_open (uint8_t rhport, tusb_desc_endpoint_t const * desc_edpt)
|
||||||
uint8_t const epnum = tu_edpt_number(desc_edpt->bEndpointAddress);
|
uint8_t const epnum = tu_edpt_number(desc_edpt->bEndpointAddress);
|
||||||
uint8_t const dir = tu_edpt_dir(desc_edpt->bEndpointAddress);
|
uint8_t const dir = tu_edpt_dir(desc_edpt->bEndpointAddress);
|
||||||
|
|
||||||
// Unsupported endpoint numbers/size or type (Iso not supported. Control
|
// Unsupported endpoint numbers or type (Iso not supported. Control
|
||||||
// not supported on nonzero endpoints).
|
// not supported on nonzero endpoints).
|
||||||
if((desc_edpt->wMaxPacketSize.size > 64) || (epnum > 7) || \
|
if( (epnum > 7) || \
|
||||||
(desc_edpt->bmAttributes.xfer == 0) || \
|
(desc_edpt->bmAttributes.xfer == 0) || \
|
||||||
(desc_edpt->bmAttributes.xfer == 1)) {
|
(desc_edpt->bmAttributes.xfer == 1)) {
|
||||||
return false;
|
return false;
|
||||||
|
@ -572,7 +572,7 @@ void dcd_int_handler(uint8_t rhport)
|
||||||
{
|
{
|
||||||
case USBVECINT_RSTR:
|
case USBVECINT_RSTR:
|
||||||
bus_reset();
|
bus_reset();
|
||||||
dcd_event_bus_signal(0, DCD_EVENT_BUS_RESET, true);
|
dcd_event_bus_reset(0, TUSB_SPEED_FULL, true);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// Clear the (hardware-enforced) NAK on EP 0 after a SETUP packet
|
// Clear the (hardware-enforced) NAK on EP 0 after a SETUP packet
|
||||||
|
|
|
@ -332,7 +332,7 @@ static void dcd_reset(void)
|
||||||
usb_out_ev_enable_write(1);
|
usb_out_ev_enable_write(1);
|
||||||
usb_setup_ev_enable_write(3);
|
usb_setup_ev_enable_write(3);
|
||||||
|
|
||||||
dcd_event_bus_signal(0, DCD_EVENT_BUS_RESET, true);
|
dcd_event_bus_reset(0, TUSB_SPEED_FULL, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Initializes the USB peripheral for device mode and enables it.
|
// Initializes the USB peripheral for device mode and enables it.
|
||||||
|
|
|
@ -202,7 +202,7 @@ void setUp(void)
|
||||||
tusb_init();
|
tusb_init();
|
||||||
}
|
}
|
||||||
|
|
||||||
dcd_event_bus_signal(rhport, DCD_EVENT_BUS_RESET, false);
|
dcd_event_bus_reset(rhport, TUSB_SPEED_HIGH, false);
|
||||||
tud_task();
|
tud_task();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -86,8 +86,8 @@
|
||||||
//------------- CDC -------------//
|
//------------- CDC -------------//
|
||||||
|
|
||||||
// FIFO size of CDC TX and RX
|
// FIFO size of CDC TX and RX
|
||||||
#define CFG_TUD_CDC_RX_BUFSIZE 64
|
#define CFG_TUD_CDC_RX_BUFSIZE 512
|
||||||
#define CFG_TUD_CDC_TX_BUFSIZE 64
|
#define CFG_TUD_CDC_TX_BUFSIZE 512
|
||||||
|
|
||||||
//------------- MSC -------------//
|
//------------- MSC -------------//
|
||||||
|
|
||||||
|
@ -97,7 +97,7 @@
|
||||||
//------------- HID -------------//
|
//------------- HID -------------//
|
||||||
|
|
||||||
// Should be sufficient to hold ID (if any) + Data
|
// Should be sufficient to hold ID (if any) + Data
|
||||||
#define CFG_TUD_HID_EP_BUFSIZE 16
|
#define CFG_TUD_HID_EP_BUFSIZE 64
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue