diff options
| author | Roy Ben-Shabat <Roy@Twine-s.com> | 2017-11-16 21:13:05 +0200 |
|---|---|---|
| committer | Roy Ben-Shabat <Roy@Twine-s.com> | 2017-11-16 21:13:05 +0200 |
| commit | 0ca2242d9c89114405ea1638f09c58392c3c01cf (patch) | |
| tree | af2ca484aeac62e64c4c88eccbee73016970c93d /Software/Code_Composer | |
| parent | 0bb5f7db4d171d4c0567ac3dcd6aadd79d034c5e (diff) | |
| download | Tango-0ca2242d9c89114405ea1638f09c58392c3c01cf.tar.gz Tango-0ca2242d9c89114405ea1638f09c58392c3c01cf.zip | |
Implemented Continuous message on CCS working !
Diffstat (limited to 'Software/Code_Composer')
5 files changed, 125 insertions, 36 deletions
diff --git a/Software/Code_Composer/twine_graphicslib/graphics_adapter.c b/Software/Code_Composer/twine_graphicslib/graphics_adapter.c index 5d165599f..6990a58d9 100644 --- a/Software/Code_Composer/twine_graphicslib/graphics_adapter.c +++ b/Software/Code_Composer/twine_graphicslib/graphics_adapter.c @@ -14,7 +14,8 @@ #include "drivers/frame.h" #include "drivers/kentec320x240x16_ssd2119.h" -#define LINE_HEIGHT 25 +#define LINE_HEIGHT 12 +#define MAX_POSITION 240 int current_position = 0; char current_line[100]; @@ -49,6 +50,11 @@ void draw_string(char* data, size_t length) void writeLine(char* text) { + if (current_position >= MAX_POSITION) + { + clear(); + } + strcpy(current_line, text); GrStringDraw(&g_sContext, current_line, strlen(current_line), 0, current_position, true); current_position += LINE_HEIGHT; diff --git a/Software/Code_Composer/twine_graphicslib/graphics_adapter.h b/Software/Code_Composer/twine_graphicslib/graphics_adapter.h index 405b88166..134312def 100644 --- a/Software/Code_Composer/twine_graphicslib/graphics_adapter.h +++ b/Software/Code_Composer/twine_graphicslib/graphics_adapter.h @@ -18,7 +18,7 @@ // //***************************************************************************** static tContext g_sContext; -#define TEXT_FONT g_psFontCmss18b +#define TEXT_FONT g_psFontCmss12 #define TEXT_HEIGHT (GrFontHeightGet(TEXT_FONT)) #define BUFFER_METER_HEIGHT TEXT_HEIGHT #define BUFFER_METER_WIDTH 150 diff --git a/Software/Code_Composer/twine_usblib_demo/PMR/Stubs/ProgressRequest.pb-c.c b/Software/Code_Composer/twine_usblib_demo/PMR/Stubs/ProgressRequest.pb-c.c index 1eddd4d17..9e074f376 100644 --- a/Software/Code_Composer/twine_usblib_demo/PMR/Stubs/ProgressRequest.pb-c.c +++ b/Software/Code_Composer/twine_usblib_demo/PMR/Stubs/ProgressRequest.pb-c.c @@ -52,9 +52,42 @@ void progress_request__free_unpacked assert(message->base.descriptor == &progress_request__descriptor); protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator); } -#define progress_request__field_descriptors NULL -#define progress_request__field_indices_by_name NULL -#define progress_request__number_ranges NULL +static const ProtobufCFieldDescriptor progress_request__field_descriptors[2] = +{ + { + "Amount", + 1, + PROTOBUF_C_LABEL_OPTIONAL, + PROTOBUF_C_TYPE_INT32, + offsetof(ProgressRequest, has_amount), + offsetof(ProgressRequest, amount), + NULL, + NULL, + 0, /* flags */ + 0,NULL,NULL /* reserved1,reserved2, etc */ + }, + { + "Delay", + 2, + PROTOBUF_C_LABEL_OPTIONAL, + PROTOBUF_C_TYPE_INT32, + offsetof(ProgressRequest, has_delay), + offsetof(ProgressRequest, delay), + NULL, + NULL, + 0, /* flags */ + 0,NULL,NULL /* reserved1,reserved2, etc */ + }, +}; +static const unsigned progress_request__field_indices_by_name[] = { + 0, /* field[0] = Amount */ + 1, /* field[1] = Delay */ +}; +static const ProtobufCIntRange progress_request__number_ranges[1 + 1] = +{ + { 1, 0 }, + { 0, 2 } +}; const ProtobufCMessageDescriptor progress_request__descriptor = { PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC, @@ -63,10 +96,10 @@ const ProtobufCMessageDescriptor progress_request__descriptor = "ProgressRequest", "", sizeof(ProgressRequest), - 0, + 2, progress_request__field_descriptors, progress_request__field_indices_by_name, - 0, progress_request__number_ranges, + 1, progress_request__number_ranges, (ProtobufCMessageInit) progress_request__init, NULL,NULL,NULL /* reserved[123] */ }; diff --git a/Software/Code_Composer/twine_usblib_demo/PMR/Stubs/ProgressRequest.pb-c.h b/Software/Code_Composer/twine_usblib_demo/PMR/Stubs/ProgressRequest.pb-c.h index 0b6b641ad..1ce2b6d6b 100644 --- a/Software/Code_Composer/twine_usblib_demo/PMR/Stubs/ProgressRequest.pb-c.h +++ b/Software/Code_Composer/twine_usblib_demo/PMR/Stubs/ProgressRequest.pb-c.h @@ -26,10 +26,14 @@ typedef struct _ProgressRequest ProgressRequest; struct _ProgressRequest { ProtobufCMessage base; + protobuf_c_boolean has_amount; + int32_t amount; + protobuf_c_boolean has_delay; + int32_t delay; }; #define PROGRESS_REQUEST__INIT \ { PROTOBUF_C_MESSAGE_INIT (&progress_request__descriptor) \ - } + , 0, 0, 0, 0 } /* ProgressRequest methods */ 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); |
