mirror of
https://github.com/hathach/tinyusb.git
synced 2025-03-25 10:43:44 +00:00
Add SUSPEND/RESUME handling for Renesas RX family.
This commit is contained in:
parent
681a61d479
commit
3019c6eb40
@ -63,7 +63,10 @@
|
|||||||
#define USB_IS0_CTSQ_SETUP (1u)
|
#define USB_IS0_CTSQ_SETUP (1u)
|
||||||
#define USB_IS0_DVSQ_DEF (1u<<4)
|
#define USB_IS0_DVSQ_DEF (1u<<4)
|
||||||
#define USB_IS0_DVSQ_ADDR (2u<<4)
|
#define USB_IS0_DVSQ_ADDR (2u<<4)
|
||||||
#define USB_IS0_DVSQ_SUSP (4u<<4)
|
#define USB_IS0_DVSQ_SUSP0 (4u<<4)
|
||||||
|
#define USB_IS0_DVSQ_SUSP1 (5u<<4)
|
||||||
|
#define USB_IS0_DVSQ_SUSP2 (6u<<4)
|
||||||
|
#define USB_IS0_DVSQ_SUSP3 (7u<<4)
|
||||||
|
|
||||||
#define USB_PIPECTR_PID_NAK (0u)
|
#define USB_PIPECTR_PID_NAK (0u)
|
||||||
#define USB_PIPECTR_PID_BUF (1u)
|
#define USB_PIPECTR_PID_BUF (1u)
|
||||||
@ -125,6 +128,7 @@ typedef struct
|
|||||||
{
|
{
|
||||||
pipe_state_t pipe[9];
|
pipe_state_t pipe[9];
|
||||||
uint8_t ep[2][16]; /* a lookup table for a pipe index from an endpoint address */
|
uint8_t ep[2][16]; /* a lookup table for a pipe index from an endpoint address */
|
||||||
|
uint8_t suspended;
|
||||||
} dcd_data_t;
|
} dcd_data_t;
|
||||||
|
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
@ -517,7 +521,8 @@ void dcd_init(uint8_t rhport)
|
|||||||
|
|
||||||
/* Setup default control pipe */
|
/* Setup default control pipe */
|
||||||
USB0.DCPMAXP.BIT.MXPS = 64;
|
USB0.DCPMAXP.BIT.MXPS = 64;
|
||||||
USB0.INTENB0.WORD = USB_IS0_VBINT | USB_IS0_BRDY | USB_IS0_BEMP | USB_IS0_DVST | USB_IS0_CTRT;
|
USB0.INTENB0.WORD = USB_IS0_VBINT | USB_IS0_BRDY | USB_IS0_BEMP |
|
||||||
|
USB_IS0_DVST | USB_IS0_CTRT | USB_IS0_SOFR | USB_IS0_RESM;
|
||||||
USB0.BEMPENB.WORD = 1;
|
USB0.BEMPENB.WORD = 1;
|
||||||
USB0.BRDYENB.WORD = 1;
|
USB0.BRDYENB.WORD = 1;
|
||||||
|
|
||||||
@ -547,7 +552,8 @@ void dcd_set_address(uint8_t rhport, uint8_t dev_addr)
|
|||||||
void dcd_remote_wakeup(uint8_t rhport)
|
void dcd_remote_wakeup(uint8_t rhport)
|
||||||
{
|
{
|
||||||
(void)rhport;
|
(void)rhport;
|
||||||
/* TODO */
|
USB0.DVSTCTR0.BIT.WKUP = 1;
|
||||||
|
while (USB0.DVSTCTR0.BIT.WKUP) ;
|
||||||
}
|
}
|
||||||
|
|
||||||
void dcd_connect(uint8_t rhport)
|
void dcd_connect(uint8_t rhport)
|
||||||
@ -689,6 +695,17 @@ void dcd_int_handler(uint8_t rhport)
|
|||||||
dcd_disconnect(rhport);
|
dcd_disconnect(rhport);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (is0 & USB_IS0_RESM) {
|
||||||
|
dcd_event_bus_signal(rhport, DCD_EVENT_RESUME, true);
|
||||||
|
_dcd.suspended = 0;
|
||||||
|
}
|
||||||
|
if (is0 & USB_IS0_SOFR) {
|
||||||
|
if (_dcd.suspended) {
|
||||||
|
dcd_event_bus_signal(rhport, DCD_EVENT_RESUME, true);
|
||||||
|
_dcd.suspended = 0;
|
||||||
|
}
|
||||||
|
dcd_event_bus_signal(rhport, DCD_EVENT_SOF, true);
|
||||||
|
}
|
||||||
if (is0 & USB_IS0_DVST) {
|
if (is0 & USB_IS0_DVST) {
|
||||||
switch (is0 & USB_IS0_DVSQ) {
|
switch (is0 & USB_IS0_DVSQ) {
|
||||||
case USB_IS0_DVSQ_DEF:
|
case USB_IS0_DVSQ_DEF:
|
||||||
@ -697,6 +714,12 @@ void dcd_int_handler(uint8_t rhport)
|
|||||||
case USB_IS0_DVSQ_ADDR:
|
case USB_IS0_DVSQ_ADDR:
|
||||||
process_set_address(rhport);
|
process_set_address(rhport);
|
||||||
break;
|
break;
|
||||||
|
case USB_IS0_DVSQ_SUSP0:
|
||||||
|
case USB_IS0_DVSQ_SUSP1:
|
||||||
|
case USB_IS0_DVSQ_SUSP2:
|
||||||
|
case USB_IS0_DVSQ_SUSP3:
|
||||||
|
dcd_event_bus_signal(rhport, DCD_EVENT_SUSPEND, true);
|
||||||
|
_dcd.suspended = 1;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user