robot

Dependencies:   FastPWM3 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 
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