diff options
| author | hathach <[email protected]> | 2022-03-09 17:26:55 +0700 |
|---|---|---|
| committer | hathach <[email protected]> | 2022-03-09 17:26:55 +0700 |
| commit | 110879074f3785c07bf3f125e26a2bbaa51897e4 (patch) | |
| tree | db262f25c2281f3af22f16e941dd94ac8f7a4fd3 /src/host | |
| parent | a5fb20533cc1c9e0ed155083c1bbcb3e7be75e67 (diff) | |
implement tu_edpt_release()
Diffstat (limited to 'src/host')
| -rw-r--r-- | src/host/usbh.c | 26 |
1 files changed, 11 insertions, 15 deletions
diff --git a/src/host/usbh.c b/src/host/usbh.c index 319031f5b..8206c06a4 100644 --- a/src/host/usbh.c +++ b/src/host/usbh.c @@ -1202,23 +1202,19 @@ bool usbh_edpt_claim(uint8_t dev_addr, uint8_t ep_addr) // TODO has some duplication code with device, refactor later bool usbh_edpt_release(uint8_t dev_addr, uint8_t ep_addr) { - uint8_t const epnum = tu_edpt_number(ep_addr); - uint8_t const dir = tu_edpt_dir(ep_addr); - - usbh_device_t* dev = get_device(dev_addr); - - lock_device(dev_addr); - - // can only release the endpoint if it is claimed and not busy - bool const ret = (dev->ep_status[epnum][dir].busy == 0) && (dev->ep_status[epnum][dir].claimed == 1); - if (ret) - { - dev->ep_status[epnum][dir].claimed = 0; - } + // addr0 is always available + if (dev_addr == 0) return true; - unlock_device(dev_addr); + usbh_device_t* dev = get_device(dev_addr); + uint8_t const epnum = tu_edpt_number(ep_addr); + uint8_t const dir = tu_edpt_dir(ep_addr); + tu_edpt_state_t* ep_state = &dev->ep_status[epnum][dir]; - return ret; +#if TUSB_OPT_MUTEX + return tu_edpt_release(ep_state, &_usbh_mutex[dev_addr-1]); +#else + return tu_edpt_release(ep_state, NULL); +#endif } // TODO has some duplication code with device, refactor later |
