mirror of
https://github.com/hathach/tinyusb.git
synced 2025-02-21 03:40:52 +00:00
add hcd_edpt_abort_xfer() API
This commit is contained in:
parent
17576a6949
commit
1cc7c5d030
@ -1,3 +1,4 @@
|
|||||||
board:mimxrt1060_evk
|
board:mimxrt1060_evk
|
||||||
board:mimxrt1064_evk
|
board:mimxrt1064_evk
|
||||||
|
board:mcb1800
|
||||||
mcu:RP2040
|
mcu:RP2040
|
||||||
|
@ -171,6 +171,9 @@ bool hcd_edpt_open(uint8_t rhport, uint8_t dev_addr, tusb_desc_endpoint_t const
|
|||||||
// Submit a transfer, when complete hcd_event_xfer_complete() must be invoked
|
// Submit a transfer, when complete hcd_event_xfer_complete() must be invoked
|
||||||
bool hcd_edpt_xfer(uint8_t rhport, uint8_t dev_addr, uint8_t ep_addr, uint8_t * buffer, uint16_t buflen);
|
bool hcd_edpt_xfer(uint8_t rhport, uint8_t dev_addr, uint8_t ep_addr, uint8_t * buffer, uint16_t buflen);
|
||||||
|
|
||||||
|
// Abort a queued transfer. Note: it can only abort transfer that has not been started
|
||||||
|
bool hcd_edpt_abort_xfer(uint8_t rhport, uint8_t dev_addr, uint8_t ep_addr);
|
||||||
|
|
||||||
// Submit a special transfer to send 8-byte Setup Packet, when complete hcd_event_xfer_complete() must be invoked
|
// Submit a special transfer to send 8-byte Setup Packet, when complete hcd_event_xfer_complete() must be invoked
|
||||||
bool hcd_setup_send(uint8_t rhport, uint8_t dev_addr, uint8_t const setup_packet[8]);
|
bool hcd_setup_send(uint8_t rhport, uint8_t dev_addr, uint8_t const setup_packet[8]);
|
||||||
|
|
||||||
|
@ -710,6 +710,19 @@ bool tuh_edpt_xfer(tuh_xfer_t* xfer)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool tuh_edpt_abort_xfer(uint8_t daddr, uint8_t ep_addr) {
|
||||||
|
usbh_device_t* dev = get_device(daddr);
|
||||||
|
TU_VERIFY(dev);
|
||||||
|
|
||||||
|
uint8_t const epnum = tu_edpt_number(ep_addr);
|
||||||
|
uint8_t const dir = tu_edpt_dir(ep_addr);
|
||||||
|
|
||||||
|
// skip if not busy
|
||||||
|
if (!dev->ep_status[epnum][dir].busy) return true;
|
||||||
|
|
||||||
|
return hcd_edpt_abort_xfer(dev->rhport, daddr, ep_addr);
|
||||||
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
// USBH API For Class Driver
|
// USBH API For Class Driver
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
@ -741,7 +754,7 @@ void usbh_int_set(bool enabled)
|
|||||||
// Endpoint API
|
// Endpoint API
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
|
|
||||||
// TODO has some duplication code with device, refactor later
|
// Claim an endpoint for transfer
|
||||||
bool usbh_edpt_claim(uint8_t dev_addr, uint8_t ep_addr)
|
bool usbh_edpt_claim(uint8_t dev_addr, uint8_t ep_addr)
|
||||||
{
|
{
|
||||||
// Note: addr0 only use tuh_control_xfer
|
// Note: addr0 only use tuh_control_xfer
|
||||||
@ -757,7 +770,7 @@ bool usbh_edpt_claim(uint8_t dev_addr, uint8_t ep_addr)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO has some duplication code with device, refactor later
|
// Release an claimed endpoint due to failed transfer attempt
|
||||||
bool usbh_edpt_release(uint8_t dev_addr, uint8_t ep_addr)
|
bool usbh_edpt_release(uint8_t dev_addr, uint8_t ep_addr)
|
||||||
{
|
{
|
||||||
// Note: addr0 only use tuh_control_xfer
|
// Note: addr0 only use tuh_control_xfer
|
||||||
@ -773,7 +786,7 @@ bool usbh_edpt_release(uint8_t dev_addr, uint8_t ep_addr)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO has some duplication code with device, refactor later
|
// Submit an transfer
|
||||||
bool usbh_edpt_xfer_with_callback(uint8_t dev_addr, uint8_t ep_addr, uint8_t * buffer, uint16_t total_bytes,
|
bool usbh_edpt_xfer_with_callback(uint8_t dev_addr, uint8_t ep_addr, uint8_t * buffer, uint16_t total_bytes,
|
||||||
tuh_xfer_cb_t complete_cb, uintptr_t user_data)
|
tuh_xfer_cb_t complete_cb, uintptr_t user_data)
|
||||||
{
|
{
|
||||||
@ -840,14 +853,13 @@ bool tuh_edpt_open(uint8_t dev_addr, tusb_desc_endpoint_t const * desc_ep)
|
|||||||
return hcd_edpt_open(usbh_get_rhport(dev_addr), dev_addr, desc_ep);
|
return hcd_edpt_open(usbh_get_rhport(dev_addr), dev_addr, desc_ep);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool usbh_edpt_busy(uint8_t dev_addr, uint8_t ep_addr)
|
bool usbh_edpt_busy(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);
|
usbh_device_t* dev = get_device(dev_addr);
|
||||||
TU_VERIFY(dev);
|
TU_VERIFY(dev);
|
||||||
|
|
||||||
|
uint8_t const epnum = tu_edpt_number(ep_addr);
|
||||||
|
uint8_t const dir = tu_edpt_dir(ep_addr);
|
||||||
|
|
||||||
return dev->ep_status[epnum][dir].busy;
|
return dev->ep_status[epnum][dir].busy;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -172,8 +172,11 @@ bool tuh_control_xfer(tuh_xfer_t* xfer);
|
|||||||
// - sync : blocking if complete callback is NULL.
|
// - sync : blocking if complete callback is NULL.
|
||||||
bool tuh_edpt_xfer(tuh_xfer_t* xfer);
|
bool tuh_edpt_xfer(tuh_xfer_t* xfer);
|
||||||
|
|
||||||
// Open an non-control endpoint
|
// Open a non-control endpoint
|
||||||
bool tuh_edpt_open(uint8_t dev_addr, tusb_desc_endpoint_t const * desc_ep);
|
bool tuh_edpt_open(uint8_t daddr, tusb_desc_endpoint_t const * desc_ep);
|
||||||
|
|
||||||
|
// Abort a queued transfer. Note: it can only abort transfer that has not been started
|
||||||
|
bool tuh_edpt_abort_xfer(uint8_t daddr, uint8_t ep_addr);
|
||||||
|
|
||||||
// Set Configuration (control transfer)
|
// Set Configuration (control transfer)
|
||||||
// config_num = 0 will un-configure device. Note: config_num = config_descriptor_index + 1
|
// config_num = 0 will un-configure device. Note: config_num = config_descriptor_index + 1
|
||||||
|
@ -510,6 +510,24 @@ bool hcd_edpt_xfer(uint8_t rhport, uint8_t dev_addr, uint8_t ep_addr, uint8_t *
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool hcd_edpt_abort_xfer(uint8_t rhport, uint8_t dev_addr, uint8_t ep_addr) {
|
||||||
|
(void) rhport;
|
||||||
|
(void) dev_addr;
|
||||||
|
(void) ep_addr;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// uint8_t const epnum = tu_edpt_number(ep_addr);
|
||||||
|
// ehci_qhd_t* qhd;
|
||||||
|
//
|
||||||
|
// // TODO ISO not supported
|
||||||
|
// if (epnum == 0) {
|
||||||
|
// qhd = qhd_control(dev_addr);
|
||||||
|
// }else {
|
||||||
|
// qhd = qhd_get_from_addr(dev_addr, ep_addr);
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
|
||||||
bool hcd_edpt_clear_stall(uint8_t daddr, uint8_t ep_addr)
|
bool hcd_edpt_clear_stall(uint8_t daddr, uint8_t ep_addr)
|
||||||
{
|
{
|
||||||
ehci_qhd_t *qhd = qhd_get_from_addr(daddr, ep_addr);
|
ehci_qhd_t *qhd = qhd_get_from_addr(daddr, ep_addr);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user