aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Code_Composer
diff options
context:
space:
mode:
Diffstat (limited to 'Software/Code_Composer')
-rw-r--r--Software/Code_Composer/twine_graphicslib/graphics_adapter.c8
-rw-r--r--Software/Code_Composer/twine_graphicslib/graphics_adapter.h2
-rw-r--r--Software/Code_Composer/twine_usblib_demo/PMR/Stubs/ProgressRequest.pb-c.c43
-rw-r--r--Software/Code_Composer/twine_usblib_demo/PMR/Stubs/ProgressRequest.pb-c.h6
-rw-r--r--Software/Code_Composer/twine_usblib_demo/main.c102
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);