robot

Dependencies:   FastPWM3 mbed

Committer:
bwang
Date:
Tue Nov 13 17:46:23 2018 +0000
Revision:
252:38644631ed97
Parent:
243:96b03b3bf3ef
11/13/2018 12:45 - hitting <return> on empty line prints "\r>", so that hitting enter after intially connecting to the controller generates a prompt

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bwang 181:d3510c8beab6 1 #include "mbed.h"
bwang 181:d3510c8beab6 2 #include "CommandProcessor.h"
bwang 181:d3510c8beab6 3 #include "PreferenceWriter.h"
bwang 181:d3510c8beab6 4
bwang 181:d3510c8beab6 5 #include "globals.h"
bwang 196:7172e6e28867 6 #include "hardware.h"
bwang 185:5c102874b490 7 #include "defaults.h"
bwang 185:5c102874b490 8 #include "derived.h"
bwang 189:760cd81a7633 9 #include "prefs.h"
bwang 186:c18db1e31da6 10
bwang 181:d3510c8beab6 11 int tokenize(char *buf, char **out, int max) {
bwang 181:d3510c8beab6 12 char* tok;
bwang 181:d3510c8beab6 13 int k = 0;
bwang 181:d3510c8beab6 14
bwang 181:d3510c8beab6 15 tok = strtok(buf, " ");
bwang 181:d3510c8beab6 16
bwang 181:d3510c8beab6 17 while(tok != NULL && k < max) {
bwang 181:d3510c8beab6 18 out[k] = tok;
bwang 181:d3510c8beab6 19 k++;
bwang 181:d3510c8beab6 20 tok = strtok(NULL, " ");
bwang 181:d3510c8beab6 21 }
bwang 181:d3510c8beab6 22 return k;
bwang 181:d3510c8beab6 23 }
bwang 181:d3510c8beab6 24
bwang 181:d3510c8beab6 25 #define __check(x) if(strcmp(s, #x) == 0) return &_##x
bwang 181:d3510c8beab6 26 #define __check2(x) if (strcmp(s, #x) == 0) return &x
bwang 181:d3510c8beab6 27
bwang 181:d3510c8beab6 28 float* checkf(char *s) {
bwang 181:d3510c8beab6 29 __check(MAX_TQPCT_PLUS);
bwang 181:d3510c8beab6 30 __check(MAX_TQPCT_MINUS);
bwang 181:d3510c8beab6 31 __check(TORQUE_MAX);
bwang 181:d3510c8beab6 32 __check(W_MAX);
bwang 181:d3510c8beab6 33 __check(BUS_VOLTAGE);
bwang 181:d3510c8beab6 34 __check(F_SW);
bwang 181:d3510c8beab6 35 __check(K_LOOP_D);
bwang 181:d3510c8beab6 36 __check(KI_BASE_D);
bwang 181:d3510c8beab6 37 __check(K_LOOP_Q);
bwang 181:d3510c8beab6 38 __check(KI_BASE_Q);
bwang 181:d3510c8beab6 39 __check(F_SLOW_LOOP);
bwang 181:d3510c8beab6 40 __check(INTEGRAL_MAX);
bwang 181:d3510c8beab6 41 __check(DQ_FILTER_STRENGTH);
bwang 181:d3510c8beab6 42 __check(POLE_PAIRS);
bwang 181:d3510c8beab6 43 __check(POS_OFFSET);
bwang 181:d3510c8beab6 44 __check(RESOLVER_LOBES);
bwang 181:d3510c8beab6 45 __check(Ld);
bwang 181:d3510c8beab6 46 __check(Lq);
bwang 181:d3510c8beab6 47 __check(FLUX_LINKAGE);
bwang 181:d3510c8beab6 48 __check(Rs);
bwang 181:d3510c8beab6 49 __check(KT);
bwang 181:d3510c8beab6 50 __check(W_SAFE);
bwang 181:d3510c8beab6 51 __check(W_CRAZY);
bwang 181:d3510c8beab6 52 __check(W_STEP);
bwang 193:3abadeecf908 53 __check(OVERMODULATION_FACTOR);
bwang 193:3abadeecf908 54 __check(V_PHASE_SWIZZLE);
bwang 240:2aaffa217627 55 __check(K_LOOP_W);
bwang 240:2aaffa217627 56 __check(KI_BASE_W);
bwang 240:2aaffa217627 57 __check(W_SETPOINT_MAX);
bwang 243:96b03b3bf3ef 58 __check(W_LOOP_MAX_TQ);
bwang 181:d3510c8beab6 59 return NULL;
bwang 181:d3510c8beab6 60 }
bwang 181:d3510c8beab6 61
bwang 181:d3510c8beab6 62 int* checkn(char *s) {
bwang 181:d3510c8beab6 63 __check(PREFS_VALID);
bwang 181:d3510c8beab6 64 __check(TORQUE_MODE);
bwang 181:d3510c8beab6 65 __check(CPR);
bwang 181:d3510c8beab6 66 __check(TH_LIMIT_LOW);
bwang 181:d3510c8beab6 67 __check(TH_LIMIT_HIGH);
bwang 181:d3510c8beab6 68 __check(W_FILTER_WINDOW);
bwang 181:d3510c8beab6 69 __check(THROTTLE_FILTER_WINDOW);
bwang 184:633119bb0b77 70 __check(ENABLE_LOGGING);
bwang 184:633119bb0b77 71 __check(LOG_PAGE_SIZE);
bwang 184:633119bb0b77 72 __check(LOG_HEADER_SIZE);
bwang 184:633119bb0b77 73 __check(LOG_PACKET_SIZE);
bwang 184:633119bb0b77 74 __check(LOG_BAUD_RATE);
bwang 181:d3510c8beab6 75 __check2(BREMS_mode);
bwang 181:d3510c8beab6 76 __check2(BREMS_src);
bwang 181:d3510c8beab6 77 __check2(BREMS_op);
bwang 181:d3510c8beab6 78 return NULL;
bwang 181:d3510c8beab6 79 }
bwang 181:d3510c8beab6 80
bwang 181:d3510c8beab6 81 #define __strcase(in, out) case in:strcpy(result, out);break
bwang 181:d3510c8beab6 82 #define __intcase(in, out) if (strcmp(buf, in) == 0) return out
bwang 181:d3510c8beab6 83
bwang 181:d3510c8beab6 84 char* mode_to_str(int n) {
bwang 181:d3510c8beab6 85 static char result[12];
bwang 181:d3510c8beab6 86 switch (n) {
bwang 181:d3510c8beab6 87 __strcase(MODE_RUN, "Run");
bwang 181:d3510c8beab6 88 __strcase(MODE_CFG, "Config");
bwang 181:d3510c8beab6 89 __strcase(MODE_ZERO, "Zero");
bwang 181:d3510c8beab6 90 __strcase(MODE_CHR, "Wizard");
bwang 181:d3510c8beab6 91 default:
bwang 181:d3510c8beab6 92 strcpy(result, "Invalid");
bwang 181:d3510c8beab6 93 break;
bwang 181:d3510c8beab6 94 }
bwang 181:d3510c8beab6 95 return result;
bwang 181:d3510c8beab6 96 }
bwang 181:d3510c8beab6 97
bwang 181:d3510c8beab6 98 int str_to_mode(char *buf) {
bwang 181:d3510c8beab6 99 __intcase("run", MODE_RUN);
bwang 181:d3510c8beab6 100 __intcase("cfg", MODE_CFG);
bwang 181:d3510c8beab6 101 __intcase("zero", MODE_ZERO);
bwang 181:d3510c8beab6 102 __intcase("char", MODE_CHR);
bwang 181:d3510c8beab6 103 __intcase("wizard", MODE_CHR);
bwang 181:d3510c8beab6 104 return -1;
bwang 181:d3510c8beab6 105 }
bwang 181:d3510c8beab6 106
bwang 181:d3510c8beab6 107 char* src_to_str(int n) {
bwang 181:d3510c8beab6 108 static char result[12];
bwang 181:d3510c8beab6 109 switch (n) {
bwang 181:d3510c8beab6 110 __strcase(CMD_SRC_RC, "RC");
bwang 181:d3510c8beab6 111 __strcase(CMD_SRC_ANALOG, "Analog");
bwang 181:d3510c8beab6 112 __strcase(CMD_SRC_TERMINAL, "Terminal");
bwang 181:d3510c8beab6 113 __strcase(CMD_SRC_SERIAL, "Serial");
bwang 181:d3510c8beab6 114 __strcase(CMD_SRC_CAN, "CAN");
bwang 181:d3510c8beab6 115 __strcase(CMD_SRC_INTERNAL, "Internal");
bwang 181:d3510c8beab6 116 default:
bwang 181:d3510c8beab6 117 strcpy(result, "Invalid");
bwang 181:d3510c8beab6 118 break;
bwang 181:d3510c8beab6 119 }
bwang 181:d3510c8beab6 120 return result;
bwang 181:d3510c8beab6 121 }
bwang 181:d3510c8beab6 122
bwang 181:d3510c8beab6 123 int str_to_src(char *buf) {
bwang 181:d3510c8beab6 124 __intcase("rc", CMD_SRC_RC);
bwang 181:d3510c8beab6 125 __intcase("analog", CMD_SRC_ANALOG);
bwang 181:d3510c8beab6 126 __intcase("terminal", CMD_SRC_TERMINAL);
bwang 181:d3510c8beab6 127 __intcase("serial", CMD_SRC_SERIAL);
bwang 181:d3510c8beab6 128 __intcase("can", CMD_SRC_CAN);
bwang 181:d3510c8beab6 129 __intcase("internal", CMD_SRC_INTERNAL);
bwang 181:d3510c8beab6 130 return -1;
bwang 181:d3510c8beab6 131 }
bwang 181:d3510c8beab6 132
bwang 181:d3510c8beab6 133 char* op_to_str(int n) {
bwang 181:d3510c8beab6 134 static char result[24];
bwang 181:d3510c8beab6 135 switch(n) {
bwang 181:d3510c8beab6 136 __strcase(OP_TORQUE, "Torque loop");
bwang 181:d3510c8beab6 137 __strcase(OP_DRIVING, "Driving map");
bwang 181:d3510c8beab6 138 __strcase(OP_SPEED, "Speed loop");
bwang 181:d3510c8beab6 139 __strcase(OP_POSITION, "Position loop");
bwang 181:d3510c8beab6 140 default:
bwang 181:d3510c8beab6 141 strcpy(result, "Invalid");
bwang 181:d3510c8beab6 142 break;
bwang 181:d3510c8beab6 143 }
bwang 181:d3510c8beab6 144 return result;
bwang 181:d3510c8beab6 145 }
bwang 181:d3510c8beab6 146
bwang 181:d3510c8beab6 147 int str_to_op(char *buf) {
bwang 181:d3510c8beab6 148 __intcase("torque", OP_TORQUE);
bwang 181:d3510c8beab6 149 __intcase("driving", OP_DRIVING);
bwang 181:d3510c8beab6 150 __intcase("speed", OP_SPEED);
bwang 181:d3510c8beab6 151 __intcase("pos", OP_POSITION);
bwang 181:d3510c8beab6 152 __intcase("position", OP_POSITION);
bwang 181:d3510c8beab6 153 return -1;
bwang 181:d3510c8beab6 154 }
bwang 181:d3510c8beab6 155