Bayley Wang
/
foc-ed_in_the_bot_compact
robot
Embed:
(wiki syntax)
Show/hide line numbers
cmd_helpers.cpp
00001 #include "mbed.h" 00002 #include "CommandProcessor.h" 00003 #include "PreferenceWriter.h" 00004 00005 #include "globals.h" 00006 #include "hardware.h" 00007 #include "defaults.h" 00008 #include "derived.h" 00009 #include "prefs.h" 00010 00011 int tokenize(char *buf, char **out, int max) { 00012 char* tok; 00013 int k = 0; 00014 00015 tok = strtok(buf, " "); 00016 00017 while(tok != NULL && k < max) { 00018 out[k] = tok; 00019 k++; 00020 tok = strtok(NULL, " "); 00021 } 00022 return k; 00023 } 00024 00025 #define __check(x) if(strcmp(s, #x) == 0) return &_##x 00026 #define __check2(x) if (strcmp(s, #x) == 0) return &x 00027 00028 float* checkf(char *s) { 00029 __check(MAX_TQPCT_PLUS); 00030 __check(MAX_TQPCT_MINUS); 00031 __check(TORQUE_MAX); 00032 __check(W_MAX); 00033 __check(BUS_VOLTAGE); 00034 __check(F_SW); 00035 __check(K_LOOP_D); 00036 __check(KI_BASE_D); 00037 __check(K_LOOP_Q); 00038 __check(KI_BASE_Q); 00039 __check(F_SLOW_LOOP); 00040 __check(INTEGRAL_MAX); 00041 __check(DQ_FILTER_STRENGTH); 00042 __check(POLE_PAIRS); 00043 __check(POS_OFFSET); 00044 __check(RESOLVER_LOBES); 00045 __check(Ld); 00046 __check(Lq); 00047 __check(FLUX_LINKAGE); 00048 __check(Rs); 00049 __check(KT); 00050 __check(W_SAFE); 00051 __check(W_CRAZY); 00052 __check(W_STEP); 00053 __check(OVERMODULATION_FACTOR); 00054 __check(V_PHASE_SWIZZLE); 00055 __check(K_LOOP_W); 00056 __check(KI_BASE_W); 00057 __check(W_SETPOINT_MAX); 00058 __check(W_LOOP_MAX_TQ); 00059 return NULL; 00060 } 00061 00062 int* checkn(char *s) { 00063 __check(PREFS_VALID); 00064 __check(TORQUE_MODE); 00065 __check(CPR); 00066 __check(TH_LIMIT_LOW); 00067 __check(TH_LIMIT_HIGH); 00068 __check(W_FILTER_WINDOW); 00069 __check(THROTTLE_FILTER_WINDOW); 00070 __check(ENABLE_LOGGING); 00071 __check(LOG_PAGE_SIZE); 00072 __check(LOG_HEADER_SIZE); 00073 __check(LOG_PACKET_SIZE); 00074 __check(LOG_BAUD_RATE); 00075 __check2(BREMS_mode); 00076 __check2(BREMS_src); 00077 __check2(BREMS_op); 00078 return NULL; 00079 } 00080 00081 #define __strcase(in, out) case in:strcpy(result, out);break 00082 #define __intcase(in, out) if (strcmp(buf, in) == 0) return out 00083 00084 char* mode_to_str(int n) { 00085 static char result[12]; 00086 switch (n) { 00087 __strcase(MODE_RUN, "Run"); 00088 __strcase(MODE_CFG, "Config"); 00089 __strcase(MODE_ZERO, "Zero"); 00090 __strcase(MODE_CHR, "Wizard"); 00091 default: 00092 strcpy(result, "Invalid"); 00093 break; 00094 } 00095 return result; 00096 } 00097 00098 int str_to_mode(char *buf) { 00099 __intcase("run", MODE_RUN); 00100 __intcase("cfg", MODE_CFG); 00101 __intcase("zero", MODE_ZERO); 00102 __intcase("char", MODE_CHR); 00103 __intcase("wizard", MODE_CHR); 00104 return -1; 00105 } 00106 00107 char* src_to_str(int n) { 00108 static char result[12]; 00109 switch (n) { 00110 __strcase(CMD_SRC_RC, "RC"); 00111 __strcase(CMD_SRC_ANALOG, "Analog"); 00112 __strcase(CMD_SRC_TERMINAL, "Terminal"); 00113 __strcase(CMD_SRC_SERIAL, "Serial"); 00114 __strcase(CMD_SRC_CAN, "CAN"); 00115 __strcase(CMD_SRC_INTERNAL, "Internal"); 00116 default: 00117 strcpy(result, "Invalid"); 00118 break; 00119 } 00120 return result; 00121 } 00122 00123 int str_to_src(char *buf) { 00124 __intcase("rc", CMD_SRC_RC); 00125 __intcase("analog", CMD_SRC_ANALOG); 00126 __intcase("terminal", CMD_SRC_TERMINAL); 00127 __intcase("serial", CMD_SRC_SERIAL); 00128 __intcase("can", CMD_SRC_CAN); 00129 __intcase("internal", CMD_SRC_INTERNAL); 00130 return -1; 00131 } 00132 00133 char* op_to_str(int n) { 00134 static char result[24]; 00135 switch(n) { 00136 __strcase(OP_TORQUE, "Torque loop"); 00137 __strcase(OP_DRIVING, "Driving map"); 00138 __strcase(OP_SPEED, "Speed loop"); 00139 __strcase(OP_POSITION, "Position loop"); 00140 default: 00141 strcpy(result, "Invalid"); 00142 break; 00143 } 00144 return result; 00145 } 00146 00147 int str_to_op(char *buf) { 00148 __intcase("torque", OP_TORQUE); 00149 __intcase("driving", OP_DRIVING); 00150 __intcase("speed", OP_SPEED); 00151 __intcase("pos", OP_POSITION); 00152 __intcase("position", OP_POSITION); 00153 return -1; 00154 } 00155
Generated on Tue Jul 12 2022 17:58:39 by 1.7.2