fix samd using TUSB_REQ_SET_ADDRESS in dcd_edpt0_status_complete

This commit is contained in:
hathach 2019-12-09 23:20:21 +07:00
parent 0316e0ecd4
commit 75a2157715
3 changed files with 9 additions and 5 deletions

View File

@ -133,7 +133,9 @@ void dcd_remote_wakeup(uint8_t rhport)
// May help DCD to prepare for next control transfer, this API is optional. // May help DCD to prepare for next control transfer, this API is optional.
void dcd_edpt0_status_complete(uint8_t rhport, tusb_control_request_t const * request) void dcd_edpt0_status_complete(uint8_t rhport, tusb_control_request_t const * request)
{ {
if (request->bRequest == TUSB_REQ_SET_ADDRESS) if (request->bmRequestType_bit.recipient == TUSB_REQ_RCPT_DEVICE &&
request->bmRequestType_bit.type == TUSB_REQ_TYPE_STANDARD &&
request->bRequest == TUSB_REQ_SET_ADDRESS )
{ {
uint8_t const dev_addr = (uint8_t) request->wValue; uint8_t const dev_addr = (uint8_t) request->wValue;
USB->DEVICE.DADD.reg = USB_DEVICE_DADD_DADD(dev_addr) | USB_DEVICE_DADD_ADDEN; USB->DEVICE.DADD.reg = USB_DEVICE_DADD_DADD(dev_addr) | USB_DEVICE_DADD_ADDEN;

View File

@ -139,9 +139,9 @@ void dcd_remote_wakeup(uint8_t rhport)
// May help DCD to prepare for next control transfer, this API is optional. // May help DCD to prepare for next control transfer, this API is optional.
void dcd_edpt0_status_complete(uint8_t rhport, tusb_control_request_t const * request) void dcd_edpt0_status_complete(uint8_t rhport, tusb_control_request_t const * request)
{ {
(void) rhport; if (request->bmRequestType_bit.recipient == TUSB_REQ_RCPT_DEVICE &&
request->bmRequestType_bit.type == TUSB_REQ_TYPE_STANDARD &&
if (request->bRequest == TUSB_REQ_SET_ADDRESS) request->bRequest == TUSB_REQ_SET_ADDRESS )
{ {
uint8_t const dev_addr = (uint8_t) request->wValue; uint8_t const dev_addr = (uint8_t) request->wValue;
USB->DEVICE.DADD.reg = USB_DEVICE_DADD_DADD(dev_addr) | USB_DEVICE_DADD_ADDEN; USB->DEVICE.DADD.reg = USB_DEVICE_DADD_DADD(dev_addr) | USB_DEVICE_DADD_ADDEN;

View File

@ -598,7 +598,9 @@ void dcd_edpt0_status_complete(uint8_t rhport, tusb_control_request_t const * re
{ {
(void) rhport; (void) rhport;
if (request->bRequest == TUSB_REQ_SET_ADDRESS) if (request->bmRequestType_bit.recipient == TUSB_REQ_RCPT_DEVICE &&
request->bmRequestType_bit.type == TUSB_REQ_TYPE_STANDARD &&
request->bRequest == TUSB_REQ_SET_ADDRESS )
{ {
uint8_t const dev_addr = (uint8_t) request->wValue; uint8_t const dev_addr = (uint8_t) request->wValue;