diff options
Diffstat (limited to 'Software/Code_Composer/twine_usblib/usb_serial_adapter.c')
| -rw-r--r-- | Software/Code_Composer/twine_usblib/usb_serial_adapter.c | 37 |
1 files changed, 36 insertions, 1 deletions
diff --git a/Software/Code_Composer/twine_usblib/usb_serial_adapter.c b/Software/Code_Composer/twine_usblib/usb_serial_adapter.c index 9cf3ef3b4..3f7c43118 100644 --- a/Software/Code_Composer/twine_usblib/usb_serial_adapter.c +++ b/Software/Code_Composer/twine_usblib/usb_serial_adapter.c @@ -35,6 +35,8 @@ #include "usb_serial_adapter.h" static SerialBuffer inBuffer; +static int expected_message_size; +static int current_message_size; //***************************************************************************** // @@ -396,6 +398,24 @@ void handleRx(void) { uint32_t ui32Read; uint8_t ui8Char; + uint8_t size[4]; + int size_bar = 0; + + if (expected_message_size == 0) + { + do + { + ui32Read = USBBufferRead((tUSBBuffer *)&g_sRxBuffer, &ui8Char, 1); + + if(ui32Read) + { + size[size_bar++] = ui8Char; + } + + } while(size_bar < 4); + + expected_message_size = *(int *)size; + } do { @@ -405,7 +425,15 @@ void handleRx(void) if(ui32Read) { insertArray(&inBuffer, ui8Char); - g_RxCount++; + current_message_size++; + } + + if (current_message_size == expected_message_size) + { + g_RxCount += current_message_size; + expected_message_size = 0; + current_message_size = 0; + break; } } while(ui32Read); @@ -469,6 +497,13 @@ void StartUSB(uint32_t ui32SysClock) //Send a sequence of chars to PC. uint32_t SendChars(char* buffer,size_t length) { + uint8_t size[4]; + size[3] = (length>>24) & 0xFF; + size[2] = (length>>16) & 0xFF; + size[1] = (length>>8) & 0xFF; + size[0] = length & 0xFF; + + USBBufferWrite((tUSBBuffer *)&g_sTxBuffer, size, 4); return USBBufferWrite((tUSBBuffer *)&g_sTxBuffer, (uint8_t*)buffer, length); } |
