Skip to content

Commit 99bb7af

Browse files
committed
Update code
1 parent 91573b7 commit 99bb7af

File tree

7 files changed

+222
-48
lines changed

7 files changed

+222
-48
lines changed
Binary file not shown.

code/ViveBeacons/ViveBeacons.cydsn/USB_commands_manager.c

Lines changed: 69 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,14 @@
1111
*/
1212

1313
#include <stdlib.h>
14+
#include <stdbool.h>
1415
#include "project.h"
1516
#include "USB_commands_manager.h"
1617

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

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

34+
usb_commands_manager->callbacks = NULL;
35+
usb_commands_manager->last_token = NULL;
36+
usb_commands_manager->command_count = 0;
37+
38+
strcpy(usb_commands_manager->delimiter, " ");
39+
40+
// Clear buffer
41+
usb_commands_manager->buffer[0] = '\0';
42+
usb_commands_manager->buffer_pos = 0;
43+
3844
return usb_commands_manager;
3945
}
4046

4147
void USB_commands_manager_init(USB_commands_manager *usb_commands_manager) {
4248
USB_Serial_Start(0, USB_Serial_3V_OPERATION);
4349
while(!USB_Serial_GetConfiguration());
4450
USB_Serial_CDC_Init();
51+
}
52+
53+
void USB_commands_manager_register_command(USB_commands_manager *usb_commands_manager, const char *command, void (*callback_function)()) {
54+
usb_commands_manager->callbacks = (USB_commands_manager_callback *) realloc(usb_commands_manager->callbacks, (usb_commands_manager->command_count + 1)*sizeof(USB_commands_manager_callback));
55+
strncpy((usb_commands_manager->callbacks[usb_commands_manager->command_count]).command, command, USB_COMMAND_MANAGER_MAX_COMMAND_LENGTH);
56+
(usb_commands_manager->callbacks[usb_commands_manager->command_count]).callback_function = callback_function;
57+
usb_commands_manager->command_count++;
58+
}
59+
60+
void USB_commands_manager_check_commands(USB_commands_manager *usb_commands_manager) {
61+
char nb_char = 0;
4562

46-
USB_Serial_PutString("START\n");
47-
while(USB_Serial_CDCIsReady() == 0u);
48-
CyDelay(1);
49-
50-
CyDelay(3000);
63+
// If we received some packets from the PC
64+
if(USB_Serial_GetCount() != 0) {
65+
nb_char = USB_Serial_GetCount();
66+
67+
if((usb_commands_manager->buffer_pos + nb_char) < USB_COMMAND_MANAGER_MAX_BUFFER_SIZE) {
68+
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.
69+
usb_commands_manager->buffer_pos += nb_char + 1;
70+
usb_commands_manager->buffer[usb_commands_manager->buffer_pos] = '\0';
71+
}
72+
}
5173

52-
USB_Serial_PutString("INIT\n");
53-
while(USB_Serial_CDCIsReady() == 0u);
54-
CyDelay(1);
74+
// Processing the data
75+
for(int i = usb_commands_manager->buffer_pos - nb_char; i < usb_commands_manager->buffer_pos; i++)
76+
{
77+
char character = USB_Serial_GetChar();
78+
if(character == 0)
79+
return;
80+
81+
if(character == '\n') {
82+
char *command = strtok_r(usb_commands_manager->buffer, usb_commands_manager->delimiter, &(usb_commands_manager->last_token));
83+
84+
if(command != NULL) {
85+
bool matched = false;
86+
87+
for(int i = 0; i < usb_commands_manager->command_count; i++) { // For each command in registered commands
88+
if (strncmp(command, (usb_commands_manager->callbacks[i]).command, USB_COMMAND_MANAGER_MAX_COMMAND_LENGTH) == 0) {
89+
(*((usb_commands_manager->callbacks[i]).callback_function))();
90+
matched = true;
91+
break;
92+
}
93+
}
94+
}
95+
96+
// Clear buffer
97+
usb_commands_manager->buffer[0] = '\0';
98+
usb_commands_manager->buffer_pos = 0;
99+
}
100+
}
55101
}
56102

103+
char* USB_commands_manager_get_next_token(USB_commands_manager *usb_commands_manager) {
104+
return strtok_r(NULL, usb_commands_manager->delimiter, &(usb_commands_manager->last_token));
105+
}
57106

58-
void USB_commands_manager_send_command(USB_commands_manager *usb_commands_manager, char command[USB_COMMAND_MANAGER_MAX_COMMAND_LENGTH + 1]) {
59-
60-
107+
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]) {
108+
USB_Serial_PutString(command);
109+
USB_Serial_PutString(usb_commands_manager->delimiter);
110+
USB_Serial_PutString(args);
111+
USB_Serial_PutString("\n");
61112
}
62113

63114
/* [] END OF FILE */

code/ViveBeacons/ViveBeacons.cydsn/USB_commands_manager.h

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,17 +17,31 @@
1717
#define USB_COMMAND_MANAGER_MAX_COMMAND_LENGTH 8
1818
#define USB_COMMAND_MANAGER_MAX_BUFFER_SIZE 8
1919

20+
// Data structure
21+
typedef struct USB_commands_manager_callback USB_commands_manager_callback;
22+
struct USB_commands_manager_callback {
23+
char command[USB_COMMAND_MANAGER_MAX_COMMAND_LENGTH + 1];
24+
void (*callback_function)();
25+
};
26+
2027
// Attributes
2128
typedef struct USB_commands_manager USB_commands_manager;
2229
struct USB_commands_manager {
23-
30+
USB_commands_manager_callback *callbacks;
31+
char buffer[USB_COMMAND_MANAGER_MAX_BUFFER_SIZE];
32+
int command_count;
33+
int buffer_pos;
34+
char *last_token;
35+
char delimiter[2];
2436
};
2537

2638
// Public methods
2739
USB_commands_manager* USB_commands_manager_create();
2840
void USB_commands_manager_init(USB_commands_manager *usb_commands_manager);
29-
void USB_commands_manager_send_command(USB_commands_manager *usb_commands_manager, char command[USB_COMMAND_MANAGER_MAX_COMMAND_LENGTH + 1]);
30-
//void USB_commands_manager_
41+
void USB_commands_manager_register_command(USB_commands_manager *usb_commands_manager, const char *command, void (*callback_function)());
42+
void USB_commands_manager_check_commands(USB_commands_manager *usb_commands_manager);
43+
char* USB_commands_manager_get_next_token(USB_commands_manager *usb_commands_manager);
44+
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]);
3145

3246
#endif
3347

code/ViveBeacons/ViveBeacons.cydsn/ViveBeacons.cydwr

Lines changed: 29 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -363,6 +363,7 @@
363363
<Data key="17c6e5cd-9c02-4edd-84d9-82d3e2b204ae" value="axis" />
364364
<Data key="93f625ad-f4d0-46d2-9953-0a1f8ae9f8a7" value="enveloppe_4" />
365365
<Data key="98ce261d-3a02-475c-bd84-53eed698a776" value="data_pins" />
366+
<Data key="264be2d3-9481-494b-8d9c-c1905a45e9cc" value="JUMPER" />
366367
<Data key="364bc103-1e45-4b75-80fe-382c25da0339" value="enveloppe_7" />
367368
<Data key="746e783e-1b9c-4345-821f-9a0a25060b47" value="enveloppe_6" />
368369
<Data key="2245e73a-ccb4-4bf4-9f51-1f6be840d213" value="JUMPER_1" />
@@ -3545,10 +3546,31 @@
35453546
<Data key="Port Format" value="12,5" />
35463547
</Group>
35473548
</Group>
3548-
<Group key="2245e73a-ccb4-4bf4-9f51-1f6be840d213">
3549+
<Group key="264be2d3-9481-494b-8d9c-c1905a45e9cc">
35493550
<Group key="0">
35503551
<Data key="Port Format" value="0,0" />
35513552
</Group>
3553+
<Group key="1">
3554+
<Data key="Port Format" value="0,1" />
3555+
</Group>
3556+
<Group key="2">
3557+
<Data key="Port Format" value="0,2" />
3558+
</Group>
3559+
<Group key="3">
3560+
<Data key="Port Format" value="0,3" />
3561+
</Group>
3562+
<Group key="4">
3563+
<Data key="Port Format" value="0,4" />
3564+
</Group>
3565+
<Group key="5">
3566+
<Data key="Port Format" value="0,5" />
3567+
</Group>
3568+
<Group key="6">
3569+
<Data key="Port Format" value="0,6" />
3570+
</Group>
3571+
<Group key="7">
3572+
<Data key="Port Format" value="0,7" />
3573+
</Group>
35523574
</Group>
35533575
<Group key="22863ebe-a37b-476f-b252-6e49a8c00b12">
35543576
<Group key="0">
@@ -3596,11 +3618,6 @@
35963618
<Data key="Port Format" value="15,6" />
35973619
</Group>
35983620
</Group>
3599-
<Group key="c0a8a8b6-02e9-49da-aef1-c7165baec6cb">
3600-
<Group key="0">
3601-
<Data key="Port Format" value="0,1" />
3602-
</Group>
3603-
</Group>
36043621
<Group key="e851a3b9-efb8-48be-bbb8-b303b216c393">
36053622
<Group key="0">
36063623
<Data key="Port Format" value="6,7" />
@@ -3624,6 +3641,12 @@
36243641
<Group key="746e783e-1b9c-4345-821f-9a0a25060b47">
36253642
<Data key="0" value="131597212161543996" />
36263643
</Group>
3644+
<Group key="2245e73a-ccb4-4bf4-9f51-1f6be840d213">
3645+
<Data key="0" value="131811701927011581" />
3646+
</Group>
3647+
<Group key="c0a8a8b6-02e9-49da-aef1-c7165baec6cb">
3648+
<Data key="0" value="131811701927011581" />
3649+
</Group>
36273650
<Group key="c7da82f5-1060-4998-88d1-131d74021cfe">
36283651
<Data key="0" value="131597212263501034" />
36293652
</Group>

code/ViveBeacons/ViveBeacons.cydsn/ViveBeacons.cyprj

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3026,6 +3026,39 @@
30263026
</CyGuid_2f73275c-45bf-46ba-b3b1-00a2fe0c8dd8>
30273027
<filters />
30283028
</CyGuid_ebc4f06d-207f-49c2-a540-72acf4adabc0>
3029+
<CyGuid_ebc4f06d-207f-49c2-a540-72acf4adabc0 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFolderSerialize" version="3">
3030+
<CyGuid_2f73275c-45bf-46ba-b3b1-00a2fe0c8dd8 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtBaseContainerSerialize" version="1">
3031+
<CyGuid_31768f72-0253-412b-af77-e7dba74d1330 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemSerialize" version="2" name="jumper_pins" persistent="">
3032+
<Hidden v="False" />
3033+
</CyGuid_31768f72-0253-412b-af77-e7dba74d1330>
3034+
<CyGuid_0820c2e7-528d-4137-9a08-97257b946089 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemListSerialize" version="2">
3035+
<dependencies>
3036+
<CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFileSerialize" version="3" xml_contents_version="1">
3037+
<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">
3038+
<Hidden v="False" />
3039+
</CyGuid_31768f72-0253-412b-af77-e7dba74d1330>
3040+
<build_action v="HEADER;;;;" />
3041+
<PropertyDeltas />
3042+
</CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b>
3043+
<CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFileSerialize" version="3" xml_contents_version="1">
3044+
<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">
3045+
<Hidden v="False" />
3046+
</CyGuid_31768f72-0253-412b-af77-e7dba74d1330>
3047+
<build_action v="SOURCE_C;CortexM3;;;" />
3048+
<PropertyDeltas />
3049+
</CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b>
3050+
<CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFileSerialize" version="3" xml_contents_version="1">
3051+
<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">
3052+
<Hidden v="False" />
3053+
</CyGuid_31768f72-0253-412b-af77-e7dba74d1330>
3054+
<build_action v="HEADER;;;;" />
3055+
<PropertyDeltas />
3056+
</CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b>
3057+
</dependencies>
3058+
</CyGuid_0820c2e7-528d-4137-9a08-97257b946089>
3059+
</CyGuid_2f73275c-45bf-46ba-b3b1-00a2fe0c8dd8>
3060+
<filters />
3061+
</CyGuid_ebc4f06d-207f-49c2-a540-72acf4adabc0>
30293062
</dependencies>
30303063
</CyGuid_0820c2e7-528d-4137-9a08-97257b946089>
30313064
</CyGuid_2f73275c-45bf-46ba-b3b1-00a2fe0c8dd8>

0 commit comments

Comments
 (0)