diff --git a/lib/usb_cdcacm.c b/lib/usb_cdcacm.c index d22e2ff..dc85797 100644 --- a/lib/usb_cdcacm.c +++ b/lib/usb_cdcacm.c @@ -358,13 +358,12 @@ static void usb_cdcacm_data_tx_cb(usbd_device *usbd_dev, uint8_t ep) uint16_t usb_length = (tx_used > USB_DATA_TRANSFER_SIZE ? USB_DATA_TRANSFER_SIZE : tx_used); // length of data to be transmitted (respect max packet size) usb_length = (usb_length > (LENGTH(tx_buffer) - tx_i) ? LENGTH(tx_buffer) - tx_i : usb_length); // since here we use the source array not as ring buffer, only go up to the end usb_length = usbd_ep_write_packet(usb_device, 0x82, (void*)(&tx_buffer[tx_i]), usb_length); // transmit data (put into USB FIFO) - tx_i = (tx_i + usb_length)%LENGTH(tx_buffer); // update location on buffer + tx_i = (tx_i + usb_length) % LENGTH(tx_buffer); // update location on buffer tx_used -= usb_length; // update used size tx_lock = false; // release lock } else { usbd_ep_write_packet(usb_device, usb_cdcacm_data_endpoints[1].bEndpointAddress, NULL, 0); // trigger empty tx for a later callback } - usbd_poll(usb_device); // ensure the data gets sent } /** USB CDC ACM communication callback @@ -427,12 +426,12 @@ void usb_cdcacm_putchar(char c) } while (tx_lock); // wait for lock to be released tx_lock = true; // put lock on transmit buffer - if (tx_used