revert usbd_control_xfer_st() implementation
enhance cdc with better multiple interfaces support add default ep size for cdc and msc device CFG_TUD_CDC_EPSIZE, CFG_TUD_MSC_EPSIZE
This commit is contained in:
@@ -334,7 +334,8 @@ static tusb_error_t proc_control_request_st(uint8_t rhport, tusb_control_request
|
||||
if ( len )
|
||||
{
|
||||
STASK_ASSERT( len <= CFG_TUD_CTRL_BUFSIZE );
|
||||
usbd_control_xfer_st(rhport, p_request->bmRequestType_bit.direction, buffer, len );
|
||||
memcpy(_usbd_ctrl_buf, buffer, len);
|
||||
usbd_control_xfer_st(rhport, p_request->bmRequestType_bit.direction, _usbd_ctrl_buf, len);
|
||||
}else
|
||||
{
|
||||
dcd_control_stall(rhport); // stall unsupported descriptor
|
||||
@@ -342,7 +343,8 @@ static tusb_error_t proc_control_request_st(uint8_t rhport, tusb_control_request
|
||||
}
|
||||
else if (TUSB_REQ_GET_CONFIGURATION == p_request->bRequest )
|
||||
{
|
||||
usbd_control_xfer_st(rhport, p_request->bmRequestType_bit.direction, &_usbd_dev.config_num, 1);
|
||||
memcpy(_usbd_ctrl_buf, &_usbd_dev.config_num, 1);
|
||||
usbd_control_xfer_st(rhport, p_request->bmRequestType_bit.direction, _usbd_ctrl_buf, 1);
|
||||
}
|
||||
else if ( TUSB_REQ_SET_ADDRESS == p_request->bRequest )
|
||||
{
|
||||
|
||||
@@ -88,12 +88,10 @@
|
||||
|
||||
#define EP_CDC_OUT _EP_OUT(ITF_NUM_CDC+2)
|
||||
#define EP_CDC_IN _EP_IN (ITF_NUM_CDC+2)
|
||||
#define EP_CDC_SIZE 64
|
||||
|
||||
// Mass Storage
|
||||
#define EP_MSC_OUT _EP_OUT(ITF_NUM_MSC+1)
|
||||
#define EP_MSC_IN _EP_IN (ITF_NUM_MSC+1)
|
||||
#define EP_MSC_SIZE 64 // TODO usb highspeed is 512
|
||||
|
||||
#if 0
|
||||
// HID Keyboard
|
||||
@@ -323,7 +321,7 @@ desc_auto_cfg_t const _desc_auto_config_struct =
|
||||
.bDescriptorType = TUSB_DESC_ENDPOINT,
|
||||
.bEndpointAddress = EP_CDC_OUT,
|
||||
.bmAttributes = { .xfer = TUSB_XFER_BULK },
|
||||
.wMaxPacketSize = { .size = EP_CDC_SIZE },
|
||||
.wMaxPacketSize = { .size = CFG_TUD_CDC_EPSIZE },
|
||||
.bInterval = 0
|
||||
},
|
||||
|
||||
@@ -333,7 +331,7 @@ desc_auto_cfg_t const _desc_auto_config_struct =
|
||||
.bDescriptorType = TUSB_DESC_ENDPOINT,
|
||||
.bEndpointAddress = EP_CDC_IN,
|
||||
.bmAttributes = { .xfer = TUSB_XFER_BULK },
|
||||
.wMaxPacketSize = { .size = EP_CDC_SIZE },
|
||||
.wMaxPacketSize = { .size = CFG_TUD_CDC_EPSIZE },
|
||||
.bInterval = 0
|
||||
},
|
||||
},
|
||||
@@ -361,7 +359,7 @@ desc_auto_cfg_t const _desc_auto_config_struct =
|
||||
.bDescriptorType = TUSB_DESC_ENDPOINT,
|
||||
.bEndpointAddress = EP_MSC_OUT,
|
||||
.bmAttributes = { .xfer = TUSB_XFER_BULK },
|
||||
.wMaxPacketSize = { .size = EP_MSC_SIZE},
|
||||
.wMaxPacketSize = { .size = CFG_TUD_MSC_EPSIZE},
|
||||
.bInterval = 1
|
||||
},
|
||||
|
||||
@@ -371,7 +369,7 @@ desc_auto_cfg_t const _desc_auto_config_struct =
|
||||
.bDescriptorType = TUSB_DESC_ENDPOINT,
|
||||
.bEndpointAddress = EP_MSC_IN,
|
||||
.bmAttributes = { .xfer = TUSB_XFER_BULK },
|
||||
.wMaxPacketSize = { .size = EP_MSC_SIZE},
|
||||
.wMaxPacketSize = { .size = CFG_TUD_MSC_EPSIZE},
|
||||
.bInterval = 1
|
||||
}
|
||||
},
|
||||
|
||||
@@ -64,11 +64,9 @@ tusb_error_t usbd_open_edpt_pair(uint8_t rhport, tusb_desc_endpoint_t const* p_d
|
||||
do { \
|
||||
if (_len) { \
|
||||
tusb_error_t err; \
|
||||
if ( _dir ) memcpy(_usbd_ctrl_buf, _buffer, _len); \
|
||||
dcd_control_xfer(_rhport, _dir, _usbd_ctrl_buf, _len); \
|
||||
osal_semaphore_wait( _usbd_ctrl_sem, OSAL_TIMEOUT_CONTROL_XFER, &err ); \
|
||||
STASK_ASSERT_ERR( err ); \
|
||||
if (!_dir) memcpy((uint8_t*) _buffer, _usbd_ctrl_buf, _len); \
|
||||
} \
|
||||
dcd_control_status(_rhport, _dir); \
|
||||
/* No need to wait for status phase to complete */ \
|
||||
|
||||
Reference in New Issue
Block a user