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