robot

Dependencies:   FastPWM3 mbed

Committer:
bwang
Date:
Sun Mar 12 06:49:10 2017 +0000
Revision:
84:dd32640942a4
Parent:
82:5e741c5ffd9f
Child:
86:b059f637e9ac
better error handling started

Who changed what in which revision?

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