static void udi_cdc_data_sent(udd_ep_status_t status, iram_size_t n, udd_ep_id_t ep) { uint8_t port; UNUSED(n); switch (ep) { #define UDI_CDC_DATA_EP_IN_TO_PORT(index, unused) \ case UDI_CDC_DATA_EP_IN_##index: \ port = index; \ break; MREPEAT(UDI_CDC_PORT_NB, UDI_CDC_DATA_EP_IN_TO_PORT, ~) #undef UDI_CDC_DATA_EP_IN_TO_PORT default: port = 0; break; } if (UDD_EP_TRANSFER_OK != status) { // Abort transfer return; } udi_cdc_tx_buf_nb[port][(udi_cdc_tx_buf_sel[port]==0)?1:0] = 0; udi_cdc_tx_both_buf_to_send[port] = false; udi_cdc_tx_trans_ongoing[port] = false; if (n != 0) { UDI_CDC_TX_EMPTY_NOTIFY(port); } udi_cdc_tx_send(port); }
void udi_cdc_data_sent(udd_ep_status_t status, iram_size_t n) { if (UDD_EP_TRANSFER_OK != status) { // Abort transfer return; } udi_cdc_tx_buf_nb[(udi_cdc_tx_buf_sel==0)?1:0] = 0; udi_cdc_tx_both_buf_to_send = false; udi_cdc_tx_trans_ongoing = false; udi_cdc_tx_send(); }
static void udi_cdc_data_sent_common(uint8_t port, udd_ep_status_t status, iram_size_t n) { if (UDD_EP_TRANSFER_OK != status) { // Abort transfer return; } udi_cdc_tx_buf_nb[PORT][(udi_cdc_tx_buf_sel[PORT]==0)?1:0] = 0; udi_cdc_tx_both_buf_to_send[PORT] = false; udi_cdc_tx_trans_ongoing[PORT] = false; udi_cdc_tx_send(PORT); }
void udi_cdc_data_sof_notify(void) { static uint8_t port_notify = 0; // A call of udi_cdc_data_sof_notify() is done for each port udi_cdc_tx_send(port_notify); #if UDI_CDC_PORT_NB != 1 // To optimize code port_notify++; if (port_notify >= UDI_CDC_PORT_NB) { port_notify = 0; } #endif }
bool udi_cdc_data_enable(void) { // Initialize TX management udi_cdc_tx_trans_ongoing = false; udi_cdc_tx_both_buf_to_send = false; udi_cdc_tx_buf_sel = 0; udi_cdc_tx_buf_nb[0] = 0; udi_cdc_tx_buf_nb[1] = 0; udi_cdc_tx_sof_num = 0; udi_cdc_tx_send(); // Initialize RX management udi_cdc_rx_trans_ongoing = false; udi_cdc_rx_buf_sel = 0; udi_cdc_rx_buf_nb[0] = 0; udi_cdc_rx_pos = 0; udi_cdc_running = udi_cdc_rx_start(); return udi_cdc_running; }
static bool udi_cdc_data_enable_common(uint8_t port) { // Initialize TX management udi_cdc_tx_trans_ongoing[PORT] = false; udi_cdc_tx_both_buf_to_send[PORT] = false; udi_cdc_tx_buf_sel[PORT] = 0; udi_cdc_tx_buf_nb[PORT][0] = 0; udi_cdc_tx_buf_nb[PORT][1] = 0; udi_cdc_tx_sof_num[PORT] = 0; udi_cdc_tx_send(PORT); // Initialize RX management udi_cdc_rx_trans_ongoing[PORT] = false; udi_cdc_rx_buf_sel[PORT] = 0; udi_cdc_rx_buf_nb[PORT][0] = 0; udi_cdc_rx_pos[PORT] = 0; udi_cdc_running[PORT] = udi_cdc_rx_start(PORT); return udi_cdc_running[PORT]; }
bool udi_cdc_data_enable(void) { uint8_t port; #if UDI_CDC_PORT_NB == 1 // To optimize code port = 0; udi_cdc_nb_data_enabled = 0; #else if (udi_cdc_nb_data_enabled > UDI_CDC_PORT_NB) { udi_cdc_nb_data_enabled = 0; } port = udi_cdc_nb_data_enabled; #endif // Initialize TX management udi_cdc_tx_trans_ongoing[port] = false; udi_cdc_tx_both_buf_to_send[port] = false; udi_cdc_tx_buf_sel[port] = 0; udi_cdc_tx_buf_nb[port][0] = 0; udi_cdc_tx_buf_nb[port][1] = 0; udi_cdc_tx_sof_num[port] = 0; udi_cdc_tx_send(port); // Initialize RX management udi_cdc_rx_trans_ongoing[port] = false; udi_cdc_rx_buf_sel[port] = 0; udi_cdc_rx_buf_nb[port][0] = 0; udi_cdc_rx_buf_nb[port][1] = 0; udi_cdc_rx_pos[port] = 0; if (!udi_cdc_rx_start(port)) { return false; } udi_cdc_nb_data_enabled++; if (udi_cdc_nb_data_enabled == UDI_CDC_PORT_NB) { udi_cdc_data_running = true; } return true; }
void udi_cdc_data_sof_notify(void) { udi_cdc_tx_send(); }
void udi_cdc_data_sof_notify_3(void) { udi_cdc_tx_send(2); }
void udi_cdc_data_sof_notify_2(void) { udi_cdc_tx_send(1); }