summaryrefslogtreecommitdiff
path: root/src/portable
diff options
context:
space:
mode:
authorhathach <[email protected]>2019-04-01 21:11:06 -0700
committerGitHub <[email protected]>2019-04-01 21:11:06 -0700
commit0848c462b3e431a9da42e96537d2b597a4579636 (patch)
tree746d6642e22e3ecf30d4f4c5f830c2a155bb28d7 /src/portable
parent86c24b310509a368cc6a9dfbec43ce531e71d598 (diff)
parent2c1072c0aba48a2e6cbe93118c286b7999b0db43 (diff)
Merge pull request #51 from hathach/develop
Add suspend, resume and remote wakeup support
Diffstat (limited to 'src/portable')
-rw-r--r--src/portable/microchip/samd21/dcd_samd21.c83
-rw-r--r--src/portable/microchip/samd51/dcd_samd51.c75
-rw-r--r--src/portable/nordic/nrf5x/dcd_nrf5x.c63
-rw-r--r--src/portable/nordic/nrf5x/hal_nrf5x.c4
-rw-r--r--src/portable/nxp/lpc11_13_15/dcd_lpc11_13_15.c41
-rw-r--r--src/portable/nxp/lpc17_40/dcd_lpc17_40.c12
-rw-r--r--src/portable/nxp/lpc18_43/dcd_lpc18_43.c11
-rw-r--r--src/portable/st/stm32f3/dcd_stm32f3.c12
-rw-r--r--src/portable/st/stm32f4/dcd_stm32f4.c9
9 files changed, 224 insertions, 86 deletions
diff --git a/src/portable/microchip/samd21/dcd_samd21.c b/src/portable/microchip/samd21/dcd_samd21.c
index 723bd6c3a..8ecfd3668 100644
--- a/src/portable/microchip/samd21/dcd_samd21.c
+++ b/src/portable/microchip/samd21/dcd_samd21.c
@@ -38,26 +38,27 @@ static ATTR_ALIGNED(4) UsbDeviceDescBank sram_registers[8][2];
static ATTR_ALIGNED(4) uint8_t _setup_packet[8];
// Setup the control endpoint 0.
-static void bus_reset(void) {
- // Max size of packets is 64 bytes.
- UsbDeviceDescBank* bank_out = &sram_registers[0][TUSB_DIR_OUT];
- bank_out->PCKSIZE.bit.SIZE = 0x3;
- UsbDeviceDescBank* bank_in = &sram_registers[0][TUSB_DIR_IN];
- bank_in->PCKSIZE.bit.SIZE = 0x3;
+static void bus_reset(void)
+{
+ // Max size of packets is 64 bytes.
+ UsbDeviceDescBank* bank_out = &sram_registers[0][TUSB_DIR_OUT];
+ bank_out->PCKSIZE.bit.SIZE = 0x3;
+ UsbDeviceDescBank* bank_in = &sram_registers[0][TUSB_DIR_IN];
+ bank_in->PCKSIZE.bit.SIZE = 0x3;
- UsbDeviceEndpoint* ep = &USB->DEVICE.DeviceEndpoint[0];
- ep->EPCFG.reg = USB_DEVICE_EPCFG_EPTYPE0(0x1) | USB_DEVICE_EPCFG_EPTYPE1(0x1);
- ep->EPINTENSET.reg = USB_DEVICE_EPINTENSET_TRCPT0 | USB_DEVICE_EPINTENSET_TRCPT1 | USB_DEVICE_EPINTENSET_RXSTP;
+ UsbDeviceEndpoint* ep = &USB->DEVICE.DeviceEndpoint[0];
+ ep->EPCFG.reg = USB_DEVICE_EPCFG_EPTYPE0(0x1) | USB_DEVICE_EPCFG_EPTYPE1(0x1);
+ ep->EPINTENSET.reg = USB_DEVICE_EPINTENSET_TRCPT0 | USB_DEVICE_EPINTENSET_TRCPT1 | USB_DEVICE_EPINTENSET_RXSTP;
- // Prepare for setup packet
- dcd_edpt_xfer(0, 0, _setup_packet, sizeof(_setup_packet));
+ // Prepare for setup packet
+ dcd_edpt_xfer(0, 0, _setup_packet, sizeof(_setup_packet));
}
/*------------------------------------------------------------------*/
/* Controller API
*------------------------------------------------------------------*/
-bool dcd_init (uint8_t rhport)
+void dcd_init (uint8_t rhport)
{
(void) rhport;
@@ -79,9 +80,8 @@ bool dcd_init (uint8_t rhport)
USB->DEVICE.CTRLA.reg = USB_CTRLA_MODE_DEVICE | USB_CTRLA_ENABLE | USB_CTRLA_RUNSTDBY;
while (USB->DEVICE.SYNCBUSY.bit.ENABLE == 1) {}
+ USB->DEVICE.INTFLAG.reg |= USB->DEVICE.INTFLAG.reg; // clear pending
USB->DEVICE.INTENSET.reg = USB_DEVICE_INTENSET_SOF | USB_DEVICE_INTENSET_EORST;
-
- return true;
}
void dcd_int_enable(uint8_t rhport)
@@ -105,6 +105,10 @@ void dcd_set_address (uint8_t rhport, uint8_t dev_addr)
while (USB->DEVICE.DeviceEndpoint[0].EPSTATUS.bit.BK1RDY == 1) {}
USB->DEVICE.DADD.reg = USB_DEVICE_DADD_DADD(dev_addr) | USB_DEVICE_DADD_ADDEN;
+
+ // Enable SUSPEND interrupt since the bus signal D+/D- are stable now.
+ USB->DEVICE.INTFLAG.reg = USB_DEVICE_INTENCLR_SUSPEND; // clear pending
+ USB->DEVICE.INTENSET.reg = USB_DEVICE_INTENSET_SUSPEND;
}
void dcd_set_config (uint8_t rhport, uint8_t config_num)
@@ -112,6 +116,14 @@ void dcd_set_config (uint8_t rhport, uint8_t config_num)
(void) rhport;
(void) config_num;
// Nothing to do
+
+}
+
+void dcd_remote_wakeup(uint8_t rhport)
+{
+ (void) rhport;
+
+ USB->DEVICE.CTRLB.bit.UPRSM = 1;
}
/*------------------------------------------------------------------*/
@@ -292,21 +304,46 @@ void maybe_transfer_complete(void) {
}
}
-void USB_Handler(void) {
- uint32_t int_status = USB->DEVICE.INTFLAG.reg;
+void USB_Handler(void)
+{
+ uint32_t int_status = USB->DEVICE.INTFLAG.reg & USB->DEVICE.INTENSET.reg;
+ USB->DEVICE.INTFLAG.reg = int_status; // clear interrupt
/*------------- Interrupt Processing -------------*/
- if ( int_status & USB_DEVICE_INTFLAG_EORST )
+ if ( int_status & USB_DEVICE_INTFLAG_SOF )
{
- USB->DEVICE.INTFLAG.reg = USB_DEVICE_INTENCLR_EORST;
- bus_reset();
- dcd_event_bus_signal(0, DCD_EVENT_BUS_RESET, true);
+ dcd_event_bus_signal(0, DCD_EVENT_SOF, true);
}
- if ( int_status & USB_DEVICE_INTFLAG_SOF )
+ // SAMD doesn't distinguish between Suspend and Disconnect state.
+ // Both condition will cause SUSPEND interrupt triggered.
+ // To prevent being triggered when D+/D- are not stable, SUSPEND interrupt is only
+ // enabled when we received SET_ADDRESS request and cleared on Bus Reset
+ if ( int_status & USB_DEVICE_INTFLAG_SUSPEND )
{
- USB->DEVICE.INTFLAG.reg = USB_DEVICE_INTFLAG_SOF;
- dcd_event_bus_signal(0, DCD_EVENT_SOF, true);
+ // Enable wakeup interrupt
+ USB->DEVICE.INTFLAG.reg = USB_DEVICE_INTFLAG_WAKEUP; // clear pending
+ USB->DEVICE.INTENSET.reg = USB_DEVICE_INTFLAG_WAKEUP;
+
+ dcd_event_bus_signal(0, DCD_EVENT_SUSPEND, true);
+ }
+
+ // Wakeup interrupt is only enabled when we got suspended.
+ // Wakeup interrupt will disable itself
+ if ( int_status & USB_DEVICE_INTFLAG_WAKEUP )
+ {
+ // disable wakeup interrupt itself
+ USB->DEVICE.INTENCLR.reg = USB_DEVICE_INTFLAG_WAKEUP;
+ dcd_event_bus_signal(0, DCD_EVENT_RESUME, true);
+ }
+
+ if ( int_status & USB_DEVICE_INTFLAG_EORST )
+ {
+ // Disable both suspend and wakeup interrupt
+ USB->DEVICE.INTENCLR.reg = USB_DEVICE_INTFLAG_WAKEUP | USB_DEVICE_INTFLAG_SUSPEND;
+
+ bus_reset();
+ dcd_event_bus_signal(0, DCD_EVENT_BUS_RESET, true);
}
// Setup packet received.
diff --git a/src/portable/microchip/samd51/dcd_samd51.c b/src/portable/microchip/samd51/dcd_samd51.c
index 9869956c7..d2e7aaf7d 100644
--- a/src/portable/microchip/samd51/dcd_samd51.c
+++ b/src/portable/microchip/samd51/dcd_samd51.c
@@ -38,26 +38,27 @@ static UsbDeviceDescBank sram_registers[8][2];
static ATTR_ALIGNED(4) uint8_t _setup_packet[8];
// Setup the control endpoint 0.
-static void bus_reset(void) {
- // Max size of packets is 64 bytes.
- UsbDeviceDescBank* bank_out = &sram_registers[0][TUSB_DIR_OUT];
- bank_out->PCKSIZE.bit.SIZE = 0x3;
- UsbDeviceDescBank* bank_in = &sram_registers[0][TUSB_DIR_IN];
- bank_in->PCKSIZE.bit.SIZE = 0x3;
+static void bus_reset(void)
+{
+ // Max size of packets is 64 bytes.
+ UsbDeviceDescBank* bank_out = &sram_registers[0][TUSB_DIR_OUT];
+ bank_out->PCKSIZE.bit.SIZE = 0x3;
+ UsbDeviceDescBank* bank_in = &sram_registers[0][TUSB_DIR_IN];
+ bank_in->PCKSIZE.bit.SIZE = 0x3;
- UsbDeviceEndpoint* ep = &USB->DEVICE.DeviceEndpoint[0];
- ep->EPCFG.reg = USB_DEVICE_EPCFG_EPTYPE0(0x1) | USB_DEVICE_EPCFG_EPTYPE1(0x1);
- ep->EPINTENSET.reg = USB_DEVICE_EPINTENSET_TRCPT0 | USB_DEVICE_EPINTENSET_TRCPT1 | USB_DEVICE_EPINTENSET_RXSTP;
+ UsbDeviceEndpoint* ep = &USB->DEVICE.DeviceEndpoint[0];
+ ep->EPCFG.reg = USB_DEVICE_EPCFG_EPTYPE0(0x1) | USB_DEVICE_EPCFG_EPTYPE1(0x1);
+ ep->EPINTENSET.reg = USB_DEVICE_EPINTENSET_TRCPT0 | USB_DEVICE_EPINTENSET_TRCPT1 | USB_DEVICE_EPINTENSET_RXSTP;
- // Prepare for setup packet
- dcd_edpt_xfer(0, 0, _setup_packet, sizeof(_setup_packet));
+ // Prepare for setup packet
+ dcd_edpt_xfer(0, 0, _setup_packet, sizeof(_setup_packet));
}
/*------------------------------------------------------------------*/
/* Controller API
*------------------------------------------------------------------*/
-bool dcd_init (uint8_t rhport)
+void dcd_init (uint8_t rhport)
{
(void) rhport;
@@ -78,9 +79,9 @@ bool dcd_init (uint8_t rhport)
USB->DEVICE.CTRLB.reg = USB_DEVICE_CTRLB_SPDCONF_FS;
USB->DEVICE.CTRLA.reg = USB_CTRLA_MODE_DEVICE | USB_CTRLA_ENABLE | USB_CTRLA_RUNSTDBY;
while (USB->DEVICE.SYNCBUSY.bit.ENABLE == 1) {}
- USB->DEVICE.INTENSET.reg = USB_DEVICE_INTENSET_SOF | USB_DEVICE_INTENSET_EORST;
- return true;
+ USB->DEVICE.INTFLAG.reg |= USB->DEVICE.INTFLAG.reg; // clear pending
+ USB->DEVICE.INTENSET.reg = USB_DEVICE_INTENSET_SOF | USB_DEVICE_INTENSET_EORST;
}
void dcd_int_enable(uint8_t rhport)
@@ -110,6 +111,10 @@ void dcd_set_address (uint8_t rhport, uint8_t dev_addr)
while (USB->DEVICE.DeviceEndpoint[0].EPSTATUS.bit.BK1RDY == 1) {}
USB->DEVICE.DADD.reg = USB_DEVICE_DADD_DADD(dev_addr) | USB_DEVICE_DADD_ADDEN;
+
+ // Enable SUSPEND interrupt since the bus signal D+/D- are stable now.
+ USB->DEVICE.INTFLAG.reg = USB_DEVICE_INTENCLR_SUSPEND; // clear pending
+ USB->DEVICE.INTENSET.reg = USB_DEVICE_INTENSET_SUSPEND;
}
void dcd_set_config (uint8_t rhport, uint8_t config_num)
@@ -119,6 +124,13 @@ void dcd_set_config (uint8_t rhport, uint8_t config_num)
// Nothing to do
}
+void dcd_remote_wakeup(uint8_t rhport)
+{
+ (void) rhport;
+
+ USB->DEVICE.CTRLB.bit.UPRSM = 1;
+}
+
/*------------------------------------------------------------------*/
/* DCD Endpoint port
*------------------------------------------------------------------*/
@@ -267,12 +279,42 @@ USB_TRFAIL1_PERR_0, USB_TRFAIL1_PERR_1, USB_TRFAIL1_PERR_2,
USB_TRFAIL1_PERR_3, USB_TRFAIL1_PERR_4, USB_TRFAIL1_PERR_5,
USB_TRFAIL1_PERR_6, USB_TRFAIL1_PERR_7, USB_UPRSM, USB_WAKEUP */
void USB_0_Handler(void) {
- uint32_t int_status = USB->DEVICE.INTFLAG.reg;
+ uint32_t int_status = USB->DEVICE.INTFLAG.reg & USB->DEVICE.INTENSET.reg;
/*------------- Interrupt Processing -------------*/
+ // SAMD doesn't distinguish between Suspend and Disconnect state.
+ // Both condition will cause SUSPEND interrupt triggered.
+ // To prevent being triggered when D+/D- are not stable, SUSPEND interrupt is only
+ // enabled when we received SET_ADDRESS request and cleared on Bus Reset
+ if ( int_status & USB_DEVICE_INTFLAG_SUSPEND )
+ {
+ USB->DEVICE.INTFLAG.reg = USB_DEVICE_INTFLAG_SUSPEND;
+
+ // Enable wakeup interrupt
+ USB->DEVICE.INTFLAG.reg = USB_DEVICE_INTFLAG_WAKEUP; // clear pending
+ USB->DEVICE.INTENSET.reg = USB_DEVICE_INTFLAG_WAKEUP;
+
+ dcd_event_bus_signal(0, DCD_EVENT_SUSPEND, true);
+ }
+
+ // Wakeup interrupt is only enabled when we got suspended.
+ // Wakeup interrupt will disable itself
+ if ( int_status & USB_DEVICE_INTFLAG_WAKEUP )
+ {
+ USB->DEVICE.INTFLAG.reg = USB_DEVICE_INTFLAG_WAKEUP;
+
+ // disable wakeup interrupt itself
+ USB->DEVICE.INTENCLR.reg = USB_DEVICE_INTFLAG_WAKEUP;
+ dcd_event_bus_signal(0, DCD_EVENT_RESUME, true);
+ }
+
if ( int_status & USB_DEVICE_INTFLAG_EORST )
{
- USB->DEVICE.INTFLAG.reg = USB_DEVICE_INTENCLR_EORST;
+ USB->DEVICE.INTFLAG.reg = USB_DEVICE_INTFLAG_EORST;
+
+ // Disable both suspend and wakeup interrupt
+ USB->DEVICE.INTENCLR.reg = USB_DEVICE_INTFLAG_WAKEUP | USB_DEVICE_INTFLAG_SUSPEND;
+
bus_reset();
dcd_event_bus_signal(0, DCD_EVENT_BUS_RESET, true);
}
@@ -280,6 +322,7 @@ void USB_0_Handler(void) {
// Setup packet received.
maybe_handle_setup_packet();
}
+
/* USB_SOF_HSOF */
void USB_1_Handler(void) {
USB->DEVICE.INTFLAG.reg = USB_DEVICE_INTFLAG_SOF;
diff --git a/src/portable/nordic/nrf5x/dcd_nrf5x.c b/src/portable/nordic/nrf5x/dcd_nrf5x.c
index 3c2b6d45b..1f8e94420 100644
--- a/src/portable/nordic/nrf5x/dcd_nrf5x.c
+++ b/src/portable/nordic/nrf5x/dcd_nrf5x.c
@@ -177,10 +177,9 @@ static void xact_in_prepare(uint8_t epnum)
//--------------------------------------------------------------------+
// Controller API
//--------------------------------------------------------------------+
-bool dcd_init (uint8_t rhport)
+void dcd_init (uint8_t rhport)
{
(void) rhport;
- return true;
}
void dcd_int_enable(uint8_t rhport)
@@ -200,13 +199,36 @@ void dcd_set_address (uint8_t rhport, uint8_t dev_addr)
(void) rhport;
(void) dev_addr;
// Set Address is automatically update by hw controller, nothing to do
+
+ // Enable usbevent for suspend and resume detection
+ // Since the bus signal D+/D- are stable now.
+
+ // Clear current pending first
+ NRF_USBD->EVENTCAUSE |= NRF_USBD->EVENTCAUSE;
+ NRF_USBD->EVENTS_USBEVENT = 0;
+
+ NRF_USBD->INTENSET = USBD_INTEN_USBEVENT_Msk;
}
void dcd_set_config (uint8_t rhport, uint8_t config_num)
{
(void) rhport;
(void) config_num;
- // Nothing to do
+}
+
+void dcd_remote_wakeup(uint8_t rhport)
+{
+ (void) rhport;
+
+ // Bring controller out of low power mode
+ NRF_USBD->LOWPOWER = 0;
+
+ // Initiate RESUME signal
+ NRF_USBD->DPDMVALUE = USBD_DPDMVALUE_STATE_Resume;
+ NRF_USBD->TASKS_DPDMDRIVE = 1;
+
+ // TODO There is no USBEVENT Resume interrupt
+ // We may manually raise DCD_EVENT_RESUME event here
}
//--------------------------------------------------------------------+
@@ -358,19 +380,44 @@ void USBD_IRQHandler(void)
}
}
- /*------------- Interrupt Processing -------------*/
if ( int_status & USBD_INTEN_USBRESET_Msk )
{
bus_reset();
dcd_event_bus_signal(0, DCD_EVENT_BUS_RESET, true);
}
+ if ( int_status & USBD_INTEN_SOF_Msk )
+ {
+ dcd_event_bus_signal(0, DCD_EVENT_SOF, true);
+ }
+
+ if ( int_status & USBD_INTEN_USBEVENT_Msk )
+ {
+ uint32_t const evt_cause = NRF_USBD->EVENTCAUSE & (USBD_EVENTCAUSE_SUSPEND_Msk | USBD_EVENTCAUSE_RESUME_Msk);
+ NRF_USBD->EVENTCAUSE = evt_cause; // clear interrupt
+
+ if ( evt_cause & USBD_EVENTCAUSE_SUSPEND_Msk )
+ {
+ dcd_event_bus_signal(0, DCD_EVENT_SUSPEND, true);
+
+ // Put controller into low power mode
+ NRF_USBD->LOWPOWER = 1;
+
+ // Leave HFXO disable to application, since it may be used by other
+ }
+
+ if ( evt_cause & USBD_EVENTCAUSE_RESUME_Msk )
+ {
+ dcd_event_bus_signal(0, DCD_EVENT_RESUME , true);
+ }
+ }
+
if ( int_status & EDPT_END_ALL_MASK )
{
// DMA complete move data from SRAM -> Endpoint
edpt_dma_end();
}
-
+
// Setup tokens are specific to the Control endpoint.
if ( int_status & USBD_INTEN_EP0SETUP_Msk )
{
@@ -502,12 +549,6 @@ void USBD_IRQHandler(void)
}
}
}
-
- // SOF interrupt
- if ( int_status & USBD_INTEN_SOF_Msk )
- {
- dcd_event_bus_signal(0, DCD_EVENT_SOF, true);
- }
}
#endif
diff --git a/src/portable/nordic/nrf5x/hal_nrf5x.c b/src/portable/nordic/nrf5x/hal_nrf5x.c
index 8477a56cd..730b580b4 100644
--- a/src/portable/nordic/nrf5x/hal_nrf5x.c
+++ b/src/portable/nordic/nrf5x/hal_nrf5x.c
@@ -212,8 +212,8 @@ void tusb_hal_nrf_power_event (uint32_t event)
nrf_usbd_isosplit_set(USBD_ISOSPLIT_SPLIT_HalfIN);
- // Enable interrupt. SOF is used as CDC auto flush
- NRF_USBD->INTENSET = USBD_INTEN_USBRESET_Msk | USBD_INTEN_USBEVENT_Msk | USBD_INTEN_EPDATA_Msk |
+ // Enable interrupt
+ NRF_USBD->INTENSET = USBD_INTEN_USBRESET_Msk | USBD_INTEN_EPDATA_Msk |
USBD_INTEN_EP0SETUP_Msk | USBD_INTEN_EP0DATADONE_Msk | USBD_INTEN_ENDEPIN0_Msk | USBD_INTEN_ENDEPOUT0_Msk;
// Enable interrupt, priorities should be set by application
diff --git a/src/portable/nxp/lpc11_13_15/dcd_lpc11_13_15.c b/src/portable/nxp/lpc11_13_15/dcd_lpc11_13_15.c
index 65b345957..fff29d5eb 100644
--- a/src/portable/nxp/lpc11_13_15/dcd_lpc11_13_15.c
+++ b/src/portable/nxp/lpc11_13_15/dcd_lpc11_13_15.c
@@ -126,22 +126,31 @@ static inline uint8_t ep_addr2id(uint8_t endpoint_addr)
//--------------------------------------------------------------------+
// CONTROLLER API
//--------------------------------------------------------------------+
-void dcd_int_enable(uint8_t rhport)
+void dcd_init(uint8_t rhport)
{
(void) rhport;
- NVIC_EnableIRQ(USB0_IRQn);
+
+ LPC_USB->EPLISTSTART = (uint32_t) _dcd.ep;
+ LPC_USB->DATABUFSTART = SRAM_REGION;
+
+ LPC_USB->INTSTAT = LPC_USB->INTSTAT; // clear all pending interrupt
+ LPC_USB->INTEN = INT_DEVICE_STATUS_MASK;
+ LPC_USB->DEVCMDSTAT |= CMDSTAT_DEVICE_ENABLE_MASK | CMDSTAT_DEVICE_CONNECT_MASK |
+ CMDSTAT_RESET_CHANGE_MASK | CMDSTAT_CONNECT_CHANGE_MASK | CMDSTAT_SUSPEND_CHANGE_MASK;
+
+ NVIC_ClearPendingIRQ(USB0_IRQn);
}
-void dcd_int_disable(uint8_t rhport)
+void dcd_int_enable(uint8_t rhport)
{
(void) rhport;
- NVIC_DisableIRQ(USB0_IRQn);
+ NVIC_EnableIRQ(USB0_IRQn);
}
-void dcd_set_config(uint8_t rhport, uint8_t config_num)
+void dcd_int_disable(uint8_t rhport)
{
(void) rhport;
- (void) config_num;
+ NVIC_DisableIRQ(USB0_IRQn);
}
void dcd_set_address(uint8_t rhport, uint8_t dev_addr)
@@ -153,21 +162,15 @@ void dcd_set_address(uint8_t rhport, uint8_t dev_addr)
LPC_USB->DEVCMDSTAT |= dev_addr;
}
-bool dcd_init(uint8_t rhport)
+void dcd_set_config(uint8_t rhport, uint8_t config_num)
{
(void) rhport;
+ (void) config_num;
+}
- LPC_USB->EPLISTSTART = (uint32_t) _dcd.ep;
- LPC_USB->DATABUFSTART = SRAM_REGION;
-
- LPC_USB->INTSTAT = LPC_USB->INTSTAT; // clear all pending interrupt
- LPC_USB->INTEN = INT_DEVICE_STATUS_MASK;
- LPC_USB->DEVCMDSTAT |= CMDSTAT_DEVICE_ENABLE_MASK | CMDSTAT_DEVICE_CONNECT_MASK |
- CMDSTAT_RESET_CHANGE_MASK | CMDSTAT_CONNECT_CHANGE_MASK | CMDSTAT_SUSPEND_CHANGE_MASK;
-
- NVIC_EnableIRQ(USB0_IRQn);
-
- return true;
+void dcd_remote_wakeup(uint8_t rhport)
+{
+ (void) rhport;
}
//--------------------------------------------------------------------+
@@ -339,7 +342,7 @@ void USB_IRQHandler(void)
// Note: Host may delay more than 3 ms before and/or after bus reset before doing enumeration.
if (dev_cmd_stat & CMDSTAT_DEVICE_ADDR_MASK)
{
- dcd_event_bus_signal(0, DCD_EVENT_SUSPENDED, true);
+ dcd_event_bus_signal(0, DCD_EVENT_SUSPEND, true);
}
}
}
diff --git a/src/portable/nxp/lpc17_40/dcd_lpc17_40.c b/src/portable/nxp/lpc17_40/dcd_lpc17_40.c
index f18a91b1c..30252f56d 100644
--- a/src/portable/nxp/lpc17_40/dcd_lpc17_40.c
+++ b/src/portable/nxp/lpc17_40/dcd_lpc17_40.c
@@ -166,7 +166,7 @@ static void bus_reset(void)
tu_memclr(&_dcd, sizeof(dcd_data_t));
}
-bool dcd_init(uint8_t rhport)
+void dcd_init(uint8_t rhport)
{
(void) rhport;
@@ -185,9 +185,6 @@ bool dcd_init(uint8_t rhport)
// USB IRQ priority should be set by application previously
NVIC_ClearPendingIRQ(USB_IRQn);
- NVIC_EnableIRQ(USB_IRQn);
-
- return true;
}
void dcd_int_enable(uint8_t rhport)
@@ -217,6 +214,11 @@ void dcd_set_config(uint8_t rhport, uint8_t config_num)
sie_write(SIE_CMDCODE_CONFIGURE_DEVICE, 1, 1);
}
+void dcd_remote_wakeup(uint8_t rhport)
+{
+ (void) rhport;
+}
+
//--------------------------------------------------------------------+
// CONTROL HELPER
//--------------------------------------------------------------------+
@@ -481,7 +483,7 @@ static void bus_event_isr(uint8_t rhport)
{
if (dev_status & SIE_DEV_STATUS_SUSPEND_MASK)
{
- dcd_event_bus_signal(rhport, DCD_EVENT_SUSPENDED, true);
+ dcd_event_bus_signal(rhport, DCD_EVENT_SUSPEND, true);
}
else
{
diff --git a/src/portable/nxp/lpc18_43/dcd_lpc18_43.c b/src/portable/nxp/lpc18_43/dcd_lpc18_43.c
index a92a1c7b1..5c2d27d92 100644
--- a/src/portable/nxp/lpc18_43/dcd_lpc18_43.c
+++ b/src/portable/nxp/lpc18_43/dcd_lpc18_43.c
@@ -121,7 +121,7 @@ static void bus_reset(uint8_t rhport)
p_dcd->qhd[0].int_on_setup = 1; // OUT only
}
-bool dcd_init(uint8_t rhport)
+void dcd_init(uint8_t rhport)
{
LPC_USBHS_T* const lpc_usb = LPC_USB[rhport];
dcd_data_t* p_dcd = dcd_data_ptr[rhport];
@@ -134,8 +134,6 @@ bool dcd_init(uint8_t rhport)
lpc_usb->USBCMD_D &= ~0x00FF0000; // Interrupt Threshold Interval = 0
lpc_usb->USBCMD_D |= TU_BIT(0); // connect
-
- return true;
}
void dcd_int_enable(uint8_t rhport)
@@ -163,6 +161,11 @@ void dcd_set_config(uint8_t rhport, uint8_t config_num)
// nothing to do
}
+void dcd_remote_wakeup(uint8_t rhport)
+{
+ (void) rhport;
+}
+
//--------------------------------------------------------------------+
// HELPER
//--------------------------------------------------------------------+
@@ -303,7 +306,7 @@ void hal_dcd_isr(uint8_t rhport)
// Note: Host may delay more than 3 ms before and/or after bus reset before doing enumeration.
if ((lpc_usb->DEVICEADDR >> 25) & 0x0f)
{
- dcd_event_bus_signal(rhport, DCD_EVENT_SUSPENDED, true);
+ dcd_event_bus_signal(rhport, DCD_EVENT_SUSPEND, true);
}
}
}
diff --git a/src/portable/st/stm32f3/dcd_stm32f3.c b/src/portable/st/stm32f3/dcd_stm32f3.c
index 138c454a7..023037474 100644
--- a/src/portable/st/stm32f3/dcd_stm32f3.c
+++ b/src/portable/st/stm32f3/dcd_stm32f3.c
@@ -35,10 +35,8 @@
// MACRO TYPEDEF CONSTANT ENUM DECLARATION
//--------------------------------------------------------------------+
-
-bool dcd_init (uint8_t rhport)
+void dcd_init (uint8_t rhport)
{
- return true;
}
// Enable device interrupt
@@ -57,6 +55,14 @@ void dcd_set_address(uint8_t rhport, uint8_t dev_addr)
void dcd_set_config (uint8_t rhport, uint8_t config_num)
{}
+void dcd_remote_wakeup(uint8_t rhport)
+{
+ (void) rhport;
+}
+
+//--------------------------------------------------------------------+
+// Endpoint API
+//--------------------------------------------------------------------+
bool dcd_edpt_open (uint8_t rhport, tusb_desc_endpoint_t const * p_endpoint_desc)
{
return false;
diff --git a/src/portable/st/stm32f4/dcd_stm32f4.c b/src/portable/st/stm32f4/dcd_stm32f4.c
index db72f92d3..f7128344d 100644
--- a/src/portable/st/stm32f4/dcd_stm32f4.c
+++ b/src/portable/st/stm32f4/dcd_stm32f4.c
@@ -128,7 +128,7 @@ static void end_of_reset(void) {
/*------------------------------------------------------------------*/
/* Controller API
*------------------------------------------------------------------*/
-bool dcd_init (uint8_t rhport)
+void dcd_init (uint8_t rhport)
{
(void) rhport;
@@ -161,8 +161,6 @@ bool dcd_init (uint8_t rhport)
// Enable pullup, enable peripheral.
USB_OTG_FS->GCCFG |= USB_OTG_GCCFG_VBUSBSEN | USB_OTG_GCCFG_PWRDWN;
-
- return true;
}
void dcd_int_enable (uint8_t rhport)
@@ -196,6 +194,11 @@ void dcd_set_config (uint8_t rhport, uint8_t config_num)
// Nothing to do
}
+void dcd_remote_wakeup(uint8_t rhport)
+{
+ (void) rhport;
+}
+
/*------------------------------------------------------------------*/
/* DCD Endpoint port
*------------------------------------------------------------------*/