diff options
Diffstat (limited to 'Software/Code_Composer/twine_usblib_demo/main.c')
| -rw-r--r-- | Software/Code_Composer/twine_usblib_demo/main.c | 102 |
1 files changed, 74 insertions, 28 deletions
diff --git a/Software/Code_Composer/twine_usblib_demo/main.c b/Software/Code_Composer/twine_usblib_demo/main.c index 84cbf46b7..b2245b705 100644 --- a/Software/Code_Composer/twine_usblib_demo/main.c +++ b/Software/Code_Composer/twine_usblib_demo/main.c @@ -30,6 +30,8 @@ #include "MessageContainer.pb-c.h" #include "CalculateRequest.pb-c.h" #include "CalculateResponse.pb-c.h" +#include "ProgressRequest.pb-c.h"; +#include "ProgressResponse.pb-c.h"; //***************************************************************************** // @@ -49,6 +51,7 @@ static volatile uint32_t g_ui32SysTickCount = 0; // Flags used to pass commands from interrupt context to the main loop. static volatile uint32_t g_ui32Flags; +MessageContainer createContainer(MessageType type, char* token, protobuf_c_boolean completed, void* response, size_t (*packPtr)(void*, uint8_t*), size_t (*sizePtr)(void*)); //***************************************************************************** // @@ -73,18 +76,22 @@ void USB0Handler(void) void receive_callback(char* buffer, size_t length) { - //SendChars(buffer,length); + //SendChars(buffer,length); //draw_string(buffer, length); //draw_image((uint8_t *)buffer); - clear(); + writeLine("Received "); + writeFloat(length); + writeString(" bytes"); + writeLine("Parsing message..."); - MessageContainer* container = message_container__unpack(NULL, length, (uint8_t*)buffer); + MessageContainer* requestContainer = message_container__unpack(NULL, length, (uint8_t*)buffer); + MessageContainer responseContainer; - if (container->type == MESSAGE_TYPE__CalculateRequest) + if (requestContainer->type == MESSAGE_TYPE__CalculateRequest) { - CalculateRequest* request = calculate_request__unpack(NULL, container->data.len, container->data.data); + CalculateRequest* request = calculate_request__unpack(NULL, requestContainer->data.len, requestContainer->data.data); writeLine("Calculate Request: "); writeFloat(request->a); @@ -95,36 +102,74 @@ void receive_callback(char* buffer, size_t length) response.sum = request->a + request->b; response.has_sum = true; - MessageContainer responseContainer = MESSAGE_CONTAINER__INIT; - responseContainer.completed = true; - responseContainer.token = container->token; - responseContainer.has_completed = true; - responseContainer.has_data = true; - responseContainer.has_type = true; - responseContainer.type = MESSAGE_TYPE__CalculateResponse; - - uint8_t* d = malloc(calculate_response__get_packed_size(&response)); - size_t size = calculate_response__pack(&response, d); - responseContainer.data.data = d; - responseContainer.data.len = size; - - uint8_t* output = malloc(message_container__get_packed_size(&responseContainer)); - size = message_container__pack(&responseContainer, output); + responseContainer = createContainer(MESSAGE_TYPE__CalculateResponse, requestContainer->token, true, &response, &calculate_response__pack, &calculate_response__get_packed_size); writeLine("Sending Response: "); writeFloat(response.sum); - SendChars(output, size); + free(request); } + else if (requestContainer->type == MESSAGE_TYPE__ProgressRequest) + { + ProgressRequest* request = progress_request__unpack(NULL, requestContainer->data.len, requestContainer->data.data); + + writeLine("Progress Request..."); + + ProgressResponse response = PROGRESS_RESPONSE__INIT; + response.has_progress = true; + + int i = 0; + for (i = 0; i < request->amount; i++) + { + response.progress = i; + responseContainer = createContainer(MESSAGE_TYPE__ProgressResponse, requestContainer->token, false, &response, &progress_response__pack, &progress_response__get_packed_size); + uint8_t* container_buffer = malloc(message_container__get_packed_size(&responseContainer)); + size_t container_size = message_container__pack(&responseContainer, container_buffer); + writeLine("Sending Progress: "); + writeFloat(response.progress); + SendChars((char*)container_buffer, container_size); + + int co = 0; + for (co = 0; co < request->delay; co++) + { + __delay_cycles(1000000); + } + } + + responseContainer = createContainer(MESSAGE_TYPE__ProgressResponse, requestContainer->token, true, &response, &progress_response__pack, &progress_response__get_packed_size); + uint8_t* container_buffer = malloc(message_container__get_packed_size(&responseContainer)); + size_t container_size = message_container__pack(&responseContainer, container_buffer); + writeLine("Progress Completed!"); + SendChars((char*)container_buffer, container_size); + return; + } + + uint8_t* container_buffer = malloc(message_container__get_packed_size(&responseContainer)); + size_t container_size = message_container__pack(&responseContainer, container_buffer); + SendChars((char*)container_buffer, container_size); + free(container_buffer); + free(requestContainer); +} + +MessageContainer createContainer(MessageType type, char* token, protobuf_c_boolean completed, void* response, size_t (*packPtr)(void*, uint8_t*), size_t (*sizePtr)(void*)) +{ + MessageContainer container = MESSAGE_CONTAINER__INIT; + container.completed = completed; + container.token = token; + container.has_completed = true; + container.has_data = true; + container.has_type = true; + container.type = type; + + - free(container); + uint8_t* response_buffer = malloc((*sizePtr)(response)); + size_t response_size = (*packPtr)(response, response_buffer); + container.data.data = response_buffer; + container.data.len = response_size; -// Person* p = person__unpack (NULL, length, (uint8_t*)buffer); -// void* buf = malloc (length); -// person__pack (p, buf); -// SendChars(buf,length); -// free(p); -// free(buf); + free(response); + return container; } int main(void) @@ -148,6 +193,7 @@ int main(void) ROM_SysTickEnable(); init_graphics(ui32SysClock); + clear(); RegisterReceiveCallback(&receive_callback); StartUSB(ui32SysClock); |
