Skip to content

Commit e0aba54

Browse files
committed
Merge remote-tracking branch 'sekigon-gonnoc/main' into better_timeouts
2 parents 9ee6f39 + f2f8d50 commit e0aba54

File tree

2 files changed

+16
-0
lines changed

2 files changed

+16
-0
lines changed

src/pio_usb_host.c

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -426,6 +426,9 @@ static inline __force_inline endpoint_t * _find_ep(uint8_t root_idx,
426426
bool pio_usb_host_endpoint_open(uint8_t root_idx, uint8_t device_address,
427427
uint8_t const *desc_endpoint, bool need_pre) {
428428
const endpoint_descriptor_t *d = (const endpoint_descriptor_t *)desc_endpoint;
429+
if (NULL != _find_ep(root_idx, device_address, d->epaddr)) {
430+
return false; // endpoint already opened
431+
}
429432
for (int ep_pool_idx = 0; ep_pool_idx < PIO_USB_EP_POOL_CNT; ep_pool_idx++) {
430433
endpoint_t *ep = PIO_USB_ENDPOINT(ep_pool_idx);
431434
// ep size is used as valid indicator
@@ -442,6 +445,17 @@ bool pio_usb_host_endpoint_open(uint8_t root_idx, uint8_t device_address,
442445
return false;
443446
}
444447

448+
bool pio_usb_host_endpoint_close(uint8_t root_idx, uint8_t device_address,
449+
uint8_t ep_address) {
450+
endpoint_t *ep = _find_ep(root_idx, device_address, ep_address);
451+
if (!ep) {
452+
return false; // endpoint not opened
453+
}
454+
455+
ep->size = 0; // mark as closed
456+
return true;
457+
}
458+
445459
bool pio_usb_host_send_setup(uint8_t root_idx, uint8_t device_address,
446460
uint8_t const setup_packet[8]) {
447461
endpoint_t *ep = _find_ep(root_idx, device_address, 0);

src/pio_usb_ll.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,8 @@ void pio_usb_host_close_device(uint8_t root_idx, uint8_t device_address);
195195

196196
bool pio_usb_host_endpoint_open(uint8_t root_idx, uint8_t device_address,
197197
uint8_t const *desc_endpoint, bool need_pre);
198+
bool pio_usb_host_endpoint_close(uint8_t root_idx, uint8_t device_address,
199+
uint8_t ep_address);
198200
bool pio_usb_host_send_setup(uint8_t root_idx, uint8_t device_address,
199201
uint8_t const setup_packet[8]);
200202
bool pio_usb_host_endpoint_transfer(uint8_t root_idx, uint8_t device_address,

0 commit comments

Comments
 (0)