flash based config testing

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers cmd_helpers.cpp Source File

cmd_helpers.cpp

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