X-Git-Url: http://git.linex4red.de/pub/lufa.git/blobdiff_plain/ca007f91f2aa959a738649d35becb54cb1efc8b8..5dfa25f81acb5480aec091d3391ba3be2d33600d:/Projects/USBtoSerial/USBtoSerial.c diff --git a/Projects/USBtoSerial/USBtoSerial.c b/Projects/USBtoSerial/USBtoSerial.c index b59a3648f..4f3fcf524 100644 --- a/Projects/USBtoSerial/USBtoSerial.c +++ b/Projects/USBtoSerial/USBtoSerial.c @@ -82,15 +82,11 @@ int main(void) for (;;) { /* Read bytes from the USB OUT endpoint into the USART transmit buffer */ - for (uint8_t DataBytesRem = CDC_Device_BytesReceived(&VirtualSerial_CDC_Interface); DataBytesRem != 0; DataBytesRem--) - { - if (RingBuffer_IsFull(&USBtoUSART_Buffer)) - break; - - RingBuffer_AtomicInsert(&USBtoUSART_Buffer, CDC_Device_ReceiveByte(&VirtualSerial_CDC_Interface)); - } + int16_t ReceivedByte = CDC_Device_ReceiveByte(&VirtualSerial_CDC_Interface); + if (!(ReceivedByte < 0) && !(RingBuffer_IsFull(&USBtoUSART_Buffer))) + RingBuffer_AtomicInsert(&USBtoUSART_Buffer, (uint8_t)ReceivedByte); - /* Check if the software USART flush timer has expired */ + /* Check if the UART receive buffer flush timer has expired */ if (TIFR0 & (1 << TOV0)) { TIFR0 |= (1 << TOV0); @@ -200,15 +196,15 @@ void EVENT_CDC_Device_LineEncodingChanged(USB_ClassInfo_CDC_Device_t* const CDCI } /* Must turn off USART before reconfiguring it, otherwise incorrect operation may occur */ - UCSR1A = 0; UCSR1B = 0; + UCSR1A = 0; UCSR1C = 0; /* Set the new baud rate before configuring the USART */ UBRR1 = SERIAL_2X_UBBRVAL(CDCInterfaceInfo->State.LineEncoding.BaudRateBPS); /* Reconfigure the USART in double speed mode for a wider baud rate range at the expense of accuracy */ + UCSR1C = ConfigMask; UCSR1A = (1 << U2X1); UCSR1B = ((1 << RXCIE1) | (1 << TXEN1) | (1 << RXEN1)); - UCSR1C = ConfigMask; }