/** * @brief VCP_DataRx * Data received over USB OUT endpoint are sent over CDC interface * through this function. * * @note * This function will block any OUT packet reception on USB endpoint * until exiting this function. If you exit this function before transfer * is complete on CDC interface (ie. using DMA controller) it will result * in receiving more data while previous ones are still not sent. * * @param Buf: Buffer of data to be received * @param Len: Number of data received (in bytes) * @retval Result of the opeartion: USBD_OK if all operations are OK else VCP_FAIL */ static uint16_t VCP_DataRx(uint8_t* Buf, uint32_t Len) { if (CDC_Receive_BytesAvailable() + Len > APP_TX_DATA_SIZE) { return USBD_FAIL; } for (uint32_t i = 0; i < Len; i++) { APP_Tx_Buffer[APP_Tx_ptr_in] = Buf[i]; APP_Tx_ptr_in = (APP_Tx_ptr_in + 1) % APP_TX_DATA_SIZE; } return USBD_OK; }
static uint32_t usbVcpAvailable(const serialPort_t *instance) { UNUSED(instance); return CDC_Receive_BytesAvailable(); }