aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Code_Composer/twine_usblib/usb_serial_adapter.c
diff options
context:
space:
mode:
Diffstat (limited to 'Software/Code_Composer/twine_usblib/usb_serial_adapter.c')
-rw-r--r--Software/Code_Composer/twine_usblib/usb_serial_adapter.c37
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);
}