Bayley Wang
/
foc-ed_in_the_bot_compact
robot
CommandProcessor/cmd_helpers.cpp@196:7172e6e28867, 2018-02-10 (annotated)
- Committer:
- bwang
- Date:
- Sat Feb 10 06:35:52 2018 +0000
- Revision:
- 196:7172e6e28867
- Parent:
- 193:3abadeecf908
- Child:
- 240:2aaffa217627
02/10/2017 01:35 - can now switch command source to terminal, added 'clear' command (which clears the screen on POSIX-compliant terminals)
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 "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 | 181:d3510c8beab6 | 55 | return NULL; |
bwang | 181:d3510c8beab6 | 56 | } |
bwang | 181:d3510c8beab6 | 57 | |
bwang | 181:d3510c8beab6 | 58 | int* checkn(char *s) { |
bwang | 181:d3510c8beab6 | 59 | __check(PREFS_VALID); |
bwang | 181:d3510c8beab6 | 60 | __check(TORQUE_MODE); |
bwang | 181:d3510c8beab6 | 61 | __check(CPR); |
bwang | 181:d3510c8beab6 | 62 | __check(TH_LIMIT_LOW); |
bwang | 181:d3510c8beab6 | 63 | __check(TH_LIMIT_HIGH); |
bwang | 181:d3510c8beab6 | 64 | __check(W_FILTER_WINDOW); |
bwang | 181:d3510c8beab6 | 65 | __check(THROTTLE_FILTER_WINDOW); |
bwang | 184:633119bb0b77 | 66 | __check(ENABLE_LOGGING); |
bwang | 184:633119bb0b77 | 67 | __check(LOG_PAGE_SIZE); |
bwang | 184:633119bb0b77 | 68 | __check(LOG_HEADER_SIZE); |
bwang | 184:633119bb0b77 | 69 | __check(LOG_PACKET_SIZE); |
bwang | 184:633119bb0b77 | 70 | __check(LOG_BAUD_RATE); |
bwang | 181:d3510c8beab6 | 71 | __check2(BREMS_mode); |
bwang | 181:d3510c8beab6 | 72 | __check2(BREMS_src); |
bwang | 181:d3510c8beab6 | 73 | __check2(BREMS_op); |
bwang | 181:d3510c8beab6 | 74 | return NULL; |
bwang | 181:d3510c8beab6 | 75 | } |
bwang | 181:d3510c8beab6 | 76 | |
bwang | 181:d3510c8beab6 | 77 | #define __strcase(in, out) case in:strcpy(result, out);break |
bwang | 181:d3510c8beab6 | 78 | #define __intcase(in, out) if (strcmp(buf, in) == 0) return out |
bwang | 181:d3510c8beab6 | 79 | |
bwang | 181:d3510c8beab6 | 80 | char* mode_to_str(int n) { |
bwang | 181:d3510c8beab6 | 81 | static char result[12]; |
bwang | 181:d3510c8beab6 | 82 | switch (n) { |
bwang | 181:d3510c8beab6 | 83 | __strcase(MODE_RUN, "Run"); |
bwang | 181:d3510c8beab6 | 84 | __strcase(MODE_CFG, "Config"); |
bwang | 181:d3510c8beab6 | 85 | __strcase(MODE_ZERO, "Zero"); |
bwang | 181:d3510c8beab6 | 86 | __strcase(MODE_CHR, "Wizard"); |
bwang | 181:d3510c8beab6 | 87 | default: |
bwang | 181:d3510c8beab6 | 88 | strcpy(result, "Invalid"); |
bwang | 181:d3510c8beab6 | 89 | break; |
bwang | 181:d3510c8beab6 | 90 | } |
bwang | 181:d3510c8beab6 | 91 | return result; |
bwang | 181:d3510c8beab6 | 92 | } |
bwang | 181:d3510c8beab6 | 93 | |
bwang | 181:d3510c8beab6 | 94 | int str_to_mode(char *buf) { |
bwang | 181:d3510c8beab6 | 95 | __intcase("run", MODE_RUN); |
bwang | 181:d3510c8beab6 | 96 | __intcase("cfg", MODE_CFG); |
bwang | 181:d3510c8beab6 | 97 | __intcase("zero", MODE_ZERO); |
bwang | 181:d3510c8beab6 | 98 | __intcase("char", MODE_CHR); |
bwang | 181:d3510c8beab6 | 99 | __intcase("wizard", MODE_CHR); |
bwang | 181:d3510c8beab6 | 100 | return -1; |
bwang | 181:d3510c8beab6 | 101 | } |
bwang | 181:d3510c8beab6 | 102 | |
bwang | 181:d3510c8beab6 | 103 | char* src_to_str(int n) { |
bwang | 181:d3510c8beab6 | 104 | static char result[12]; |
bwang | 181:d3510c8beab6 | 105 | switch (n) { |
bwang | 181:d3510c8beab6 | 106 | __strcase(CMD_SRC_RC, "RC"); |
bwang | 181:d3510c8beab6 | 107 | __strcase(CMD_SRC_ANALOG, "Analog"); |
bwang | 181:d3510c8beab6 | 108 | __strcase(CMD_SRC_TERMINAL, "Terminal"); |
bwang | 181:d3510c8beab6 | 109 | __strcase(CMD_SRC_SERIAL, "Serial"); |
bwang | 181:d3510c8beab6 | 110 | __strcase(CMD_SRC_CAN, "CAN"); |
bwang | 181:d3510c8beab6 | 111 | __strcase(CMD_SRC_INTERNAL, "Internal"); |
bwang | 181:d3510c8beab6 | 112 | default: |
bwang | 181:d3510c8beab6 | 113 | strcpy(result, "Invalid"); |
bwang | 181:d3510c8beab6 | 114 | break; |
bwang | 181:d3510c8beab6 | 115 | } |
bwang | 181:d3510c8beab6 | 116 | return result; |
bwang | 181:d3510c8beab6 | 117 | } |
bwang | 181:d3510c8beab6 | 118 | |
bwang | 181:d3510c8beab6 | 119 | int str_to_src(char *buf) { |
bwang | 181:d3510c8beab6 | 120 | __intcase("rc", CMD_SRC_RC); |
bwang | 181:d3510c8beab6 | 121 | __intcase("analog", CMD_SRC_ANALOG); |
bwang | 181:d3510c8beab6 | 122 | __intcase("terminal", CMD_SRC_TERMINAL); |
bwang | 181:d3510c8beab6 | 123 | __intcase("serial", CMD_SRC_SERIAL); |
bwang | 181:d3510c8beab6 | 124 | __intcase("can", CMD_SRC_CAN); |
bwang | 181:d3510c8beab6 | 125 | __intcase("internal", CMD_SRC_INTERNAL); |
bwang | 181:d3510c8beab6 | 126 | return -1; |
bwang | 181:d3510c8beab6 | 127 | } |
bwang | 181:d3510c8beab6 | 128 | |
bwang | 181:d3510c8beab6 | 129 | char* op_to_str(int n) { |
bwang | 181:d3510c8beab6 | 130 | static char result[24]; |
bwang | 181:d3510c8beab6 | 131 | switch(n) { |
bwang | 181:d3510c8beab6 | 132 | __strcase(OP_TORQUE, "Torque loop"); |
bwang | 181:d3510c8beab6 | 133 | __strcase(OP_DRIVING, "Driving map"); |
bwang | 181:d3510c8beab6 | 134 | __strcase(OP_SPEED, "Speed loop"); |
bwang | 181:d3510c8beab6 | 135 | __strcase(OP_POSITION, "Position loop"); |
bwang | 181:d3510c8beab6 | 136 | default: |
bwang | 181:d3510c8beab6 | 137 | strcpy(result, "Invalid"); |
bwang | 181:d3510c8beab6 | 138 | break; |
bwang | 181:d3510c8beab6 | 139 | } |
bwang | 181:d3510c8beab6 | 140 | return result; |
bwang | 181:d3510c8beab6 | 141 | } |
bwang | 181:d3510c8beab6 | 142 | |
bwang | 181:d3510c8beab6 | 143 | int str_to_op(char *buf) { |
bwang | 181:d3510c8beab6 | 144 | __intcase("torque", OP_TORQUE); |
bwang | 181:d3510c8beab6 | 145 | __intcase("driving", OP_DRIVING); |
bwang | 181:d3510c8beab6 | 146 | __intcase("speed", OP_SPEED); |
bwang | 181:d3510c8beab6 | 147 | __intcase("pos", OP_POSITION); |
bwang | 181:d3510c8beab6 | 148 | __intcase("position", OP_POSITION); |
bwang | 181:d3510c8beab6 | 149 | return -1; |
bwang | 181:d3510c8beab6 | 150 | } |
bwang | 181:d3510c8beab6 | 151 |