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