Bayley Wang
/
flash_configuration
flash based config testing
Diff: CommandProcessor/cmd_helpers.cpp
- Revision:
- 3:82c00c8e2cb4
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/CommandProcessor/cmd_helpers.cpp Tue Mar 07 08:06:39 2017 +0000 @@ -0,0 +1,154 @@ +#include "mbed.h" +#include "CommandProcessor.h" +#include "PreferenceWriter.h" +#include "globals.h" + +#include "config.h" +#include "config_driving.h" +#include "config_inverter.h" +#include "config_logging.h" +#include "config_loop.h" +#include "config_motor.h" +#include "config_pins.h" +#include "config_table.h" + +int tokenize(char *buf, char **out, int max) { + char* tok; + int k = 0; + + tok = strtok(buf, " "); + + while(tok != NULL && k < max) { + out[k] = tok; + k++; + tok = strtok(NULL, " "); + } + return k; +} + +#define __check(x) if(strcmp(s, #x) == 0) return &_##x +#define __check2(x) if (strcmp(s, #x) == 0) return &x + +float* checkf(char *s) { + __check(MAX_TQPCT_PLUS); + __check(MAX_TQPCT_MINUS); + __check(TORQUE_MAX); + __check(W_MAX); + __check(BUS_VOLTAGE); + __check(F_SW); + __check(K_LOOP_D); + __check(KI_BASE_D); + __check(K_LOOP_Q); + __check(KI_BASE_Q); + __check(F_SLOW_LOOP); + __check(INTEGRAL_MAX); + __check(W_FILTER_STRENGTH); + __check(DQ_FILTER_STRENGTH); + __check(THROTTLE_FILTER_STRENGTH); + __check(KP_D); + __check(KI_D); + __check(KP_Q); + __check(KI_Q); + __check(POLE_PAIRS); + __check(POS_OFFSET); + __check(RESOLVER_LOBES); + __check(Ld); + __check(Lq); + __check(FLUX_LINKAGE); + __check(Rs); + __check(KT); + __check(W_SAFE); + __check(W_CRAZY); + __check(W_STEP); + return NULL; +} + +int* checkn(char *s) { + __check(TORQUE_MODE); + __check(CPR); + __check(TH_LIMIT_LOW); + __check(TH_LIMIT_HIGH); + __check(TH_LIMIT_CRAZY); + __check(ROWS); + __check(COLUMNS); + __check2(BREMS_mode); + __check2(BREMS_src); + __check2(BREMS_op); + return NULL; +} + +#define __strcase(in, out) case in:strcpy(result, out);break +#define __intcase(in, out) if (strcmp(buf, in) == 0) return out + +char* mode_to_str(int n) { + static char result[12]; + switch (n) { + __strcase(MODE_RUN, "Run"); + __strcase(MODE_CFG, "Config"); + __strcase(MODE_ZERO, "Zero"); + __strcase(MODE_CHR, "Wizard"); + default: + strcpy(result, "Invalid"); + break; + } + return result; +} + +int str_to_mode(char *buf) { + __intcase("run", MODE_RUN); + __intcase("cfg", MODE_CFG); + __intcase("zero", MODE_ZERO); + __intcase("char", MODE_CHR); + __intcase("wizard", MODE_CHR); + return -1; +} + +char* src_to_str(int n) { + static char result[12]; + switch (n) { + __strcase(CMD_SRC_RC, "RC"); + __strcase(CMD_SRC_ANALOG, "Analog"); + __strcase(CMD_SRC_TERMINAL, "Terminal"); + __strcase(CMD_SRC_SERIAL, "Serial"); + __strcase(CMD_SRC_CAN, "CAN"); + __strcase(CMD_SRC_INTERNAL, "Internal"); + default: + strcpy(result, "Invalid"); + break; + } + return result; +} + +int str_to_src(char *buf) { + __intcase("rc", CMD_SRC_RC); + __intcase("analog", CMD_SRC_ANALOG); + __intcase("terminal", CMD_SRC_TERMINAL); + __intcase("serial", CMD_SRC_SERIAL); + __intcase("can", CMD_SRC_CAN); + __intcase("internal", CMD_SRC_INTERNAL); + return -1; +} + +char* op_to_str(int n) { + static char result[24]; + switch(n) { + __strcase(OP_TORQUE, "Torque loop"); + __strcase(OP_DRIVING, "Driving map"); + __strcase(OP_SPEED, "Speed loop"); + __strcase(OP_POSITION, "Position loop"); + default: + strcpy(result, "Invalid"); + break; + } + return result; +} + +int str_to_op(char *buf) { + __intcase("torque", OP_TORQUE); + __intcase("driving", OP_DRIVING); + __intcase("speed", OP_SPEED); + __intcase("pos", OP_POSITION); + __intcase("position", OP_POSITION); + return -1; +} + \ No newline at end of file