Merge branch 'master' into MCX
This commit is contained in:
@@ -451,10 +451,10 @@ static max3421_ep_t * find_next_pending_ep(max3421_ep_t * cur_ep) {
|
||||
// optional hcd configuration, called by tuh_configure()
|
||||
bool hcd_configure(uint8_t rhport, uint32_t cfg_id, const void* cfg_param) {
|
||||
(void) rhport;
|
||||
TU_VERIFY(cfg_id == TUH_CFGID_MAX3421);
|
||||
TU_VERIFY(cfg_id == TUH_CFGID_MAX3421 && cfg_param != NULL);
|
||||
|
||||
tuh_configure_param_t const* cfg = (tuh_configure_param_t const*) cfg_param;
|
||||
_max_nak = cfg->max3421.max_nak;
|
||||
_max_nak = tu_min8(cfg->max3421.max_nak, EP_STATE_ATTEMPT_MAX-EP_STATE_ATTEMPT_1);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -654,7 +654,7 @@ static void xact_generic(uint8_t rhport, max3421_ep_t *ep, bool switch_ep, bool
|
||||
|
||||
// status
|
||||
if (ep->buf == NULL || ep->total_len == 0) {
|
||||
uint8_t const hxfr = HXFR_HS | (ep->hxfr_bm.is_out ? HXFR_OUT_NIN : 0);
|
||||
uint8_t const hxfr = (uint8_t) (HXFR_HS | (ep->hxfr & HXFR_OUT_NIN));
|
||||
peraddr_write(rhport, ep->daddr, in_isr);
|
||||
hxfr_write(rhport, hxfr, in_isr);
|
||||
return;
|
||||
@@ -676,19 +676,18 @@ bool hcd_edpt_xfer(uint8_t rhport, uint8_t daddr, uint8_t ep_addr, uint8_t * buf
|
||||
max3421_ep_t* ep = find_opened_ep(daddr, ep_num, ep_dir);
|
||||
TU_VERIFY(ep);
|
||||
|
||||
// control transfer can switch direction
|
||||
ep->hxfr_bm.is_out = ep_dir ? 0u : 1u;
|
||||
if (ep_num == 0) {
|
||||
// control transfer can switch direction
|
||||
ep->hxfr_bm.is_out = ep_dir ? 0 : 1;
|
||||
ep->hxfr_bm.is_setup = 0;
|
||||
ep->data_toggle = 1;
|
||||
}
|
||||
|
||||
ep->buf = buffer;
|
||||
ep->total_len = buflen;
|
||||
ep->xferred_len = 0;
|
||||
ep->state = EP_STATE_ATTEMPT_1;
|
||||
|
||||
if (ep_num == 0) {
|
||||
ep->hxfr_bm.is_setup = 0;
|
||||
ep->data_toggle = 1;
|
||||
}
|
||||
|
||||
// carry out transfer if not busy
|
||||
if (!atomic_flag_test_and_set(&_hcd_data.busy)) {
|
||||
xact_generic(rhport, ep, true, false);
|
||||
|
||||
@@ -102,17 +102,25 @@ static int _dcd_bind(FAR struct usbdevclass_driver_s *driver, FAR struct usbdev_
|
||||
usbdev = dev;
|
||||
usbdcd_driver.ep[0] = dev->ep0;
|
||||
|
||||
#ifdef EP_ALLOCREQ
|
||||
// SDK v2
|
||||
usbdcd_driver.req[0] = EP_ALLOCREQ(usbdcd_driver.ep[0]);
|
||||
if (usbdcd_driver.req[0] != NULL)
|
||||
{
|
||||
if (usbdcd_driver.req[0] != NULL) {
|
||||
usbdcd_driver.req[0]->len = 64;
|
||||
usbdcd_driver.req[0]->buf = EP_ALLOCBUFFER(usbdcd_driver.ep[0], 64);
|
||||
if (!usbdcd_driver.req[0]->buf)
|
||||
{
|
||||
if (!usbdcd_driver.req[0]->buf) {
|
||||
EP_FREEREQ(usbdcd_driver.ep[0], usbdcd_driver.req[0]);
|
||||
usbdcd_driver.req[0] = NULL;
|
||||
return ENOMEM;
|
||||
}
|
||||
}
|
||||
#else
|
||||
// SDK v3
|
||||
usbdcd_driver.req[0] = usbdev_allocreq(usbdcd_driver.ep[0], 64);
|
||||
if (usbdcd_driver.req[0] == NULL) {
|
||||
return ENOMEM;
|
||||
}
|
||||
#endif
|
||||
|
||||
usbdcd_driver.req[0]->callback = usbdcd_ep0incomplete;
|
||||
|
||||
@@ -295,13 +303,19 @@ bool dcd_edpt_open(uint8_t rhport, tusb_desc_endpoint_t const *p_endpoint_desc)
|
||||
}
|
||||
|
||||
usbdcd_driver.req[epnum] = NULL;
|
||||
|
||||
#ifdef EP_ALLOCREQ
|
||||
// sdk v2
|
||||
usbdcd_driver.req[epnum] = EP_ALLOCREQ(usbdcd_driver.ep[epnum]);
|
||||
if (usbdcd_driver.req[epnum] != NULL)
|
||||
{
|
||||
if (usbdcd_driver.req[epnum] != NULL) {
|
||||
usbdcd_driver.req[epnum]->len = ep_mps;
|
||||
}
|
||||
else
|
||||
{
|
||||
#else
|
||||
// sdk v3
|
||||
usbdcd_driver.req[epnum] = usbdev_allocreq(usbdcd_driver.ep[epnum], ep_mps);
|
||||
#endif
|
||||
|
||||
if(usbdcd_driver.req[epnum] == NULL) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user