void udd_ep_abort(udd_ep_id_t ep) { bool b_dir_in = ep & USB_EP_DIR_IN; irqflags_t flags; ep &= USB_EP_ADDR_MASK; if (USB_DEVICE_MAX_EP < ep) return; // Disable interrupts flags = cpu_irq_save(); udd_disable_endpoint_interrupt(ep); cpu_irq_restore(flags); // Clear pending statuses if (b_dir_in) { // Kill banks if (Is_udd_transmit_ready(ep)) { udd_kill_data_in_fifo(ep, udd_get_endpoint_bank_max_nbr(ep)>1); } udd_ack_in_sent(ep); // Reset number of buffered banks udd_ep_job[ep - 1].bank = 0; } else { // Clear all pending banks statuses while(Is_udd_any_bank_received(ep)) { udd_ep_ack_out_received(ep); } } // Reset FIFO and data toggle udd_reset_endpoint(ep); // Abort job udd_ep_abort_job(ep); }
void udd_ep_free(udd_ep_id_t ep) { uint8_t ep_index = ep & USB_EP_ADDR_MASK; if (USB_DEVICE_MAX_EP < ep_index) { return; } udd_disable_endpoint(ep_index); udd_ep_abort_job(ep); }
void udd_ep_free(udd_ep_id_t ep) { uint8_t ep_index = ep & USB_EP_ADDR_MASK; if (USB_DEVICE_MAX_EP < ep_index) { return; } udd_disable_endpoint(ep_index); udd_unallocate_memory(ep_index); udd_ep_abort_job(ep); udd_ep_job[ep_index - 1].stall_requested = false; }
void udd_ep_abort(udd_ep_id_t ep) { uint8_t index = ep & USB_EP_ADDR_MASK; // Stop DMA transfer udd_disable_endpoint_dma_interrupt(index); udd_endpoint_dma_set_control(index, 0); // Kill banks udd_disable_endpoint_interrupt(index); while (udd_nb_busy_bank(index)) { udd_kill_last_in_bank(index); while(Is_udd_killing_last_in_bank(index)); } udd_ep_abort_job(ep); }
bool udd_ep_set_halt(udd_ep_id_t ep) { uint8_t index = ep & USB_EP_ADDR_MASK; if (USB_DEVICE_MAX_EP < index) return false; if (Is_udd_bank_interrupt_enabled(index)) { // Wait end of transfer (= no busy bank) before stall endpoint udd_ep_job[index - 1].stall_requested = true; } else { // Stall endpoint udd_enable_stall_handshake(index); udd_reset_data_toggle(index); } udd_ep_abort_job(ep); return true; }
void udd_ep_abort(udd_ep_id_t ep) { // Stop DMA transfer udd_endpoint_dma_set_control((ep & USB_EP_ADDR_MASK), 0); udd_ep_abort_job(ep); }
void udd_ep_free(udd_ep_id_t ep) { udd_disable_endpoint(ep & USB_EP_ADDR_MASK); udd_unallocate_memory(ep & USB_EP_ADDR_MASK); udd_ep_abort_job(ep); }