Skip to content

Commit

Permalink
Update code
Browse files Browse the repository at this point in the history
  • Loading branch information
Neopibox committed Sep 13, 2018
1 parent 91573b7 commit 99bb7af
Show file tree
Hide file tree
Showing 7 changed files with 222 additions and 48 deletions.
Binary file not shown.
87 changes: 69 additions & 18 deletions code/ViveBeacons/ViveBeacons.cydsn/USB_commands_manager.c
Original file line number Diff line number Diff line change
Expand Up @@ -11,18 +11,14 @@
*/

#include <stdlib.h>
#include <stdbool.h>
#include "project.h"
#include "USB_commands_manager.h"

/*
---------------------------------------------------------------------------
This file should be a PSoC version of an Arduino library. It would have
been trans-coded from https://github.com/kroimon/Arduino-SerialCommand
Unfortunately, because of 2018's project evolution (moving from a main
robot with a lattepanda to the summberbot using a teensy), this library is
not finished. The idea is to copy the already working UART_command_manager
here and replaced UART by USB everywhere in the firmware.
This file is a PSoC version of an Arduino library. It was trans-coded from
https://github.com/kroimon/Arduino-SerialCommand
---------------------------------------------------------------------------
*/

Expand All @@ -35,29 +31,84 @@
USB_commands_manager* USB_commands_manager_create() {
USB_commands_manager* usb_commands_manager = (USB_commands_manager*) malloc(1*sizeof(USB_commands_manager));

usb_commands_manager->callbacks = NULL;
usb_commands_manager->last_token = NULL;
usb_commands_manager->command_count = 0;

strcpy(usb_commands_manager->delimiter, " ");

// Clear buffer
usb_commands_manager->buffer[0] = '\0';
usb_commands_manager->buffer_pos = 0;

return usb_commands_manager;
}

void USB_commands_manager_init(USB_commands_manager *usb_commands_manager) {
USB_Serial_Start(0, USB_Serial_3V_OPERATION);
while(!USB_Serial_GetConfiguration());
USB_Serial_CDC_Init();
}

void USB_commands_manager_register_command(USB_commands_manager *usb_commands_manager, const char *command, void (*callback_function)()) {
usb_commands_manager->callbacks = (USB_commands_manager_callback *) realloc(usb_commands_manager->callbacks, (usb_commands_manager->command_count + 1)*sizeof(USB_commands_manager_callback));
strncpy((usb_commands_manager->callbacks[usb_commands_manager->command_count]).command, command, USB_COMMAND_MANAGER_MAX_COMMAND_LENGTH);
(usb_commands_manager->callbacks[usb_commands_manager->command_count]).callback_function = callback_function;
usb_commands_manager->command_count++;
}

void USB_commands_manager_check_commands(USB_commands_manager *usb_commands_manager) {
char nb_char = 0;

USB_Serial_PutString("START\n");
while(USB_Serial_CDCIsReady() == 0u);
CyDelay(1);

CyDelay(3000);
// If we received some packets from the PC
if(USB_Serial_GetCount() != 0) {
nb_char = USB_Serial_GetCount();

if((usb_commands_manager->buffer_pos + nb_char) < USB_COMMAND_MANAGER_MAX_BUFFER_SIZE) {
nb_char = USB_Serial_GetData((uint8 *) (usb_commands_manager->buffer + usb_commands_manager->buffer_pos), nb_char); // Copy the received data into the buffer and update the nb of char read.
usb_commands_manager->buffer_pos += nb_char + 1;
usb_commands_manager->buffer[usb_commands_manager->buffer_pos] = '\0';
}
}

USB_Serial_PutString("INIT\n");
while(USB_Serial_CDCIsReady() == 0u);
CyDelay(1);
// Processing the data
for(int i = usb_commands_manager->buffer_pos - nb_char; i < usb_commands_manager->buffer_pos; i++)
{
char character = USB_Serial_GetChar();
if(character == 0)
return;

if(character == '\n') {
char *command = strtok_r(usb_commands_manager->buffer, usb_commands_manager->delimiter, &(usb_commands_manager->last_token));

if(command != NULL) {
bool matched = false;

for(int i = 0; i < usb_commands_manager->command_count; i++) { // For each command in registered commands
if (strncmp(command, (usb_commands_manager->callbacks[i]).command, USB_COMMAND_MANAGER_MAX_COMMAND_LENGTH) == 0) {
(*((usb_commands_manager->callbacks[i]).callback_function))();
matched = true;
break;
}
}
}

// Clear buffer
usb_commands_manager->buffer[0] = '\0';
usb_commands_manager->buffer_pos = 0;
}
}
}

char* USB_commands_manager_get_next_token(USB_commands_manager *usb_commands_manager) {
return strtok_r(NULL, usb_commands_manager->delimiter, &(usb_commands_manager->last_token));
}

void USB_commands_manager_send_command(USB_commands_manager *usb_commands_manager, char command[USB_COMMAND_MANAGER_MAX_COMMAND_LENGTH + 1]) {


void USB_commands_manager_send_command(USB_commands_manager *usb_commands_manager, char command[USB_COMMAND_MANAGER_MAX_COMMAND_LENGTH + 1], char args[USB_COMMAND_MANAGER_MAX_BUFFER_SIZE - (USB_COMMAND_MANAGER_MAX_COMMAND_LENGTH + 1) + 1]) {
USB_Serial_PutString(command);
USB_Serial_PutString(usb_commands_manager->delimiter);
USB_Serial_PutString(args);
USB_Serial_PutString("\n");
}

/* [] END OF FILE */
20 changes: 17 additions & 3 deletions code/ViveBeacons/ViveBeacons.cydsn/USB_commands_manager.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,17 +17,31 @@
#define USB_COMMAND_MANAGER_MAX_COMMAND_LENGTH 8
#define USB_COMMAND_MANAGER_MAX_BUFFER_SIZE 8

// Data structure
typedef struct USB_commands_manager_callback USB_commands_manager_callback;
struct USB_commands_manager_callback {
char command[USB_COMMAND_MANAGER_MAX_COMMAND_LENGTH + 1];
void (*callback_function)();
};

// Attributes
typedef struct USB_commands_manager USB_commands_manager;
struct USB_commands_manager {

USB_commands_manager_callback *callbacks;
char buffer[USB_COMMAND_MANAGER_MAX_BUFFER_SIZE];
int command_count;
int buffer_pos;
char *last_token;
char delimiter[2];
};

// Public methods
USB_commands_manager* USB_commands_manager_create();
void USB_commands_manager_init(USB_commands_manager *usb_commands_manager);
void USB_commands_manager_send_command(USB_commands_manager *usb_commands_manager, char command[USB_COMMAND_MANAGER_MAX_COMMAND_LENGTH + 1]);
//void USB_commands_manager_
void USB_commands_manager_register_command(USB_commands_manager *usb_commands_manager, const char *command, void (*callback_function)());
void USB_commands_manager_check_commands(USB_commands_manager *usb_commands_manager);
char* USB_commands_manager_get_next_token(USB_commands_manager *usb_commands_manager);
void USB_commands_manager_send_command(USB_commands_manager *usb_commands_manager, char command[USB_COMMAND_MANAGER_MAX_COMMAND_LENGTH + 1], char args[USB_COMMAND_MANAGER_MAX_BUFFER_SIZE - (USB_COMMAND_MANAGER_MAX_COMMAND_LENGTH + 1) + 1]);

#endif

Expand Down
35 changes: 29 additions & 6 deletions code/ViveBeacons/ViveBeacons.cydsn/ViveBeacons.cydwr
Original file line number Diff line number Diff line change
Expand Up @@ -363,6 +363,7 @@
<Data key="17c6e5cd-9c02-4edd-84d9-82d3e2b204ae" value="axis" />
<Data key="93f625ad-f4d0-46d2-9953-0a1f8ae9f8a7" value="enveloppe_4" />
<Data key="98ce261d-3a02-475c-bd84-53eed698a776" value="data_pins" />
<Data key="264be2d3-9481-494b-8d9c-c1905a45e9cc" value="JUMPER" />
<Data key="364bc103-1e45-4b75-80fe-382c25da0339" value="enveloppe_7" />
<Data key="746e783e-1b9c-4345-821f-9a0a25060b47" value="enveloppe_6" />
<Data key="2245e73a-ccb4-4bf4-9f51-1f6be840d213" value="JUMPER_1" />
Expand Down Expand Up @@ -3545,10 +3546,31 @@
<Data key="Port Format" value="12,5" />
</Group>
</Group>
<Group key="2245e73a-ccb4-4bf4-9f51-1f6be840d213">
<Group key="264be2d3-9481-494b-8d9c-c1905a45e9cc">
<Group key="0">
<Data key="Port Format" value="0,0" />
</Group>
<Group key="1">
<Data key="Port Format" value="0,1" />
</Group>
<Group key="2">
<Data key="Port Format" value="0,2" />
</Group>
<Group key="3">
<Data key="Port Format" value="0,3" />
</Group>
<Group key="4">
<Data key="Port Format" value="0,4" />
</Group>
<Group key="5">
<Data key="Port Format" value="0,5" />
</Group>
<Group key="6">
<Data key="Port Format" value="0,6" />
</Group>
<Group key="7">
<Data key="Port Format" value="0,7" />
</Group>
</Group>
<Group key="22863ebe-a37b-476f-b252-6e49a8c00b12">
<Group key="0">
Expand Down Expand Up @@ -3596,11 +3618,6 @@
<Data key="Port Format" value="15,6" />
</Group>
</Group>
<Group key="c0a8a8b6-02e9-49da-aef1-c7165baec6cb">
<Group key="0">
<Data key="Port Format" value="0,1" />
</Group>
</Group>
<Group key="e851a3b9-efb8-48be-bbb8-b303b216c393">
<Group key="0">
<Data key="Port Format" value="6,7" />
Expand All @@ -3624,6 +3641,12 @@
<Group key="746e783e-1b9c-4345-821f-9a0a25060b47">
<Data key="0" value="131597212161543996" />
</Group>
<Group key="2245e73a-ccb4-4bf4-9f51-1f6be840d213">
<Data key="0" value="131811701927011581" />
</Group>
<Group key="c0a8a8b6-02e9-49da-aef1-c7165baec6cb">
<Data key="0" value="131811701927011581" />
</Group>
<Group key="c7da82f5-1060-4998-88d1-131d74021cfe">
<Data key="0" value="131597212263501034" />
</Group>
Expand Down
33 changes: 33 additions & 0 deletions code/ViveBeacons/ViveBeacons.cydsn/ViveBeacons.cyprj
Original file line number Diff line number Diff line change
Expand Up @@ -3026,6 +3026,39 @@
</CyGuid_2f73275c-45bf-46ba-b3b1-00a2fe0c8dd8>
<filters />
</CyGuid_ebc4f06d-207f-49c2-a540-72acf4adabc0>
<CyGuid_ebc4f06d-207f-49c2-a540-72acf4adabc0 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFolderSerialize" version="3">
<CyGuid_2f73275c-45bf-46ba-b3b1-00a2fe0c8dd8 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtBaseContainerSerialize" version="1">
<CyGuid_31768f72-0253-412b-af77-e7dba74d1330 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemSerialize" version="2" name="jumper_pins" persistent="">
<Hidden v="False" />
</CyGuid_31768f72-0253-412b-af77-e7dba74d1330>
<CyGuid_0820c2e7-528d-4137-9a08-97257b946089 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemListSerialize" version="2">
<dependencies>
<CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFileSerialize" version="3" xml_contents_version="1">
<CyGuid_31768f72-0253-412b-af77-e7dba74d1330 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemSerialize" version="2" name="jumper_pins_aliases.h" persistent="Generated_Source\PSoC5\jumper_pins_aliases.h">
<Hidden v="False" />
</CyGuid_31768f72-0253-412b-af77-e7dba74d1330>
<build_action v="HEADER;;;;" />
<PropertyDeltas />
</CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b>
<CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFileSerialize" version="3" xml_contents_version="1">
<CyGuid_31768f72-0253-412b-af77-e7dba74d1330 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemSerialize" version="2" name="jumper_pins.c" persistent="Generated_Source\PSoC5\jumper_pins.c">
<Hidden v="False" />
</CyGuid_31768f72-0253-412b-af77-e7dba74d1330>
<build_action v="SOURCE_C;CortexM3;;;" />
<PropertyDeltas />
</CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b>
<CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFileSerialize" version="3" xml_contents_version="1">
<CyGuid_31768f72-0253-412b-af77-e7dba74d1330 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemSerialize" version="2" name="jumper_pins.h" persistent="Generated_Source\PSoC5\jumper_pins.h">
<Hidden v="False" />
</CyGuid_31768f72-0253-412b-af77-e7dba74d1330>
<build_action v="HEADER;;;;" />
<PropertyDeltas />
</CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b>
</dependencies>
</CyGuid_0820c2e7-528d-4137-9a08-97257b946089>
</CyGuid_2f73275c-45bf-46ba-b3b1-00a2fe0c8dd8>
<filters />
</CyGuid_ebc4f06d-207f-49c2-a540-72acf4adabc0>
</dependencies>
</CyGuid_0820c2e7-528d-4137-9a08-97257b946089>
</CyGuid_2f73275c-45bf-46ba-b3b1-00a2fe0c8dd8>
Expand Down
Loading

0 comments on commit 99bb7af

Please sign in to comment.