![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
bad dc motor controller with current mode
CommandProcessor/cmd_helpers.cpp@0:2b1edabdd26b, 2019-02-03 (annotated)
- Committer:
- bwang
- Date:
- Sun Feb 03 03:38:05 2019 +0000
- Revision:
- 0:2b1edabdd26b
first commit
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
bwang | 0:2b1edabdd26b | 1 | #include "mbed.h" |
bwang | 0:2b1edabdd26b | 2 | #include "CommandProcessor.h" |
bwang | 0:2b1edabdd26b | 3 | |
bwang | 0:2b1edabdd26b | 4 | #include "globals.h" |
bwang | 0:2b1edabdd26b | 5 | |
bwang | 0:2b1edabdd26b | 6 | int tokenize(char *buf, char **out, int max) { |
bwang | 0:2b1edabdd26b | 7 | char* tok; |
bwang | 0:2b1edabdd26b | 8 | int k = 0; |
bwang | 0:2b1edabdd26b | 9 | |
bwang | 0:2b1edabdd26b | 10 | tok = strtok(buf, " "); |
bwang | 0:2b1edabdd26b | 11 | |
bwang | 0:2b1edabdd26b | 12 | while(tok != NULL && k < max) { |
bwang | 0:2b1edabdd26b | 13 | out[k] = tok; |
bwang | 0:2b1edabdd26b | 14 | k++; |
bwang | 0:2b1edabdd26b | 15 | tok = strtok(NULL, " "); |
bwang | 0:2b1edabdd26b | 16 | } |
bwang | 0:2b1edabdd26b | 17 | return k; |
bwang | 0:2b1edabdd26b | 18 | } |
bwang | 0:2b1edabdd26b | 19 | |
bwang | 0:2b1edabdd26b | 20 | #define __check(x) if(strcmp(s, #x) == 0) return &x |
bwang | 0:2b1edabdd26b | 21 | |
bwang | 0:2b1edabdd26b | 22 | float* checkf(char *s) { |
bwang | 0:2b1edabdd26b | 23 | __check(KP); |
bwang | 0:2b1edabdd26b | 24 | __check(KI); |
bwang | 0:2b1edabdd26b | 25 | __check(I_LIMIT); |
bwang | 0:2b1edabdd26b | 26 | __check(F_SW); |
bwang | 0:2b1edabdd26b | 27 | __check(THROTTLE_DEADBAND); |
bwang | 0:2b1edabdd26b | 28 | __check(ANALOG_THROTTLE_LOW); |
bwang | 0:2b1edabdd26b | 29 | __check(ANALOG_THROTTLE_HI); |
bwang | 0:2b1edabdd26b | 30 | return NULL; |
bwang | 0:2b1edabdd26b | 31 | } |
bwang | 0:2b1edabdd26b | 32 | |
bwang | 0:2b1edabdd26b | 33 | int* checkn(char *s) { |
bwang | 0:2b1edabdd26b | 34 | return NULL; |
bwang | 0:2b1edabdd26b | 35 | } |
bwang | 0:2b1edabdd26b | 36 | |
bwang | 0:2b1edabdd26b | 37 | #define __strcase(in, out) case in:strcpy(result, out);break |
bwang | 0:2b1edabdd26b | 38 | #define __intcase(in, out) if (strcmp(buf, in) == 0) return out |
bwang | 0:2b1edabdd26b | 39 | |
bwang | 0:2b1edabdd26b | 40 | char* src_to_str(int n) { |
bwang | 0:2b1edabdd26b | 41 | static char result[12]; |
bwang | 0:2b1edabdd26b | 42 | switch (n) { |
bwang | 0:2b1edabdd26b | 43 | __strcase(CMD_SRC_RC, "RC"); |
bwang | 0:2b1edabdd26b | 44 | __strcase(CMD_SRC_ANALOG, "Analog"); |
bwang | 0:2b1edabdd26b | 45 | __strcase(CMD_SRC_TERMINAL, "Terminal"); |
bwang | 0:2b1edabdd26b | 46 | __strcase(CMD_SRC_SERIAL, "Serial"); |
bwang | 0:2b1edabdd26b | 47 | __strcase(CMD_SRC_CAN, "CAN"); |
bwang | 0:2b1edabdd26b | 48 | __strcase(CMD_SRC_INTERNAL, "Internal"); |
bwang | 0:2b1edabdd26b | 49 | default: |
bwang | 0:2b1edabdd26b | 50 | strcpy(result, "Invalid"); |
bwang | 0:2b1edabdd26b | 51 | break; |
bwang | 0:2b1edabdd26b | 52 | } |
bwang | 0:2b1edabdd26b | 53 | return result; |
bwang | 0:2b1edabdd26b | 54 | } |
bwang | 0:2b1edabdd26b | 55 | |
bwang | 0:2b1edabdd26b | 56 | int str_to_src(char *buf) { |
bwang | 0:2b1edabdd26b | 57 | __intcase("rc", CMD_SRC_RC); |
bwang | 0:2b1edabdd26b | 58 | __intcase("analog", CMD_SRC_ANALOG); |
bwang | 0:2b1edabdd26b | 59 | __intcase("terminal", CMD_SRC_TERMINAL); |
bwang | 0:2b1edabdd26b | 60 | __intcase("serial", CMD_SRC_SERIAL); |
bwang | 0:2b1edabdd26b | 61 | __intcase("can", CMD_SRC_CAN); |
bwang | 0:2b1edabdd26b | 62 | __intcase("internal", CMD_SRC_INTERNAL); |
bwang | 0:2b1edabdd26b | 63 | return -1; |
bwang | 0:2b1edabdd26b | 64 | } |
bwang | 0:2b1edabdd26b | 65 | |
bwang | 0:2b1edabdd26b | 66 | |
bwang | 0:2b1edabdd26b | 67 | char* op_to_str(int n) { |
bwang | 0:2b1edabdd26b | 68 | static char result[24]; |
bwang | 0:2b1edabdd26b | 69 | switch(n) { |
bwang | 0:2b1edabdd26b | 70 | __strcase(OP_TORQUE, "Torque loop"); |
bwang | 0:2b1edabdd26b | 71 | __strcase(OP_DRIVING, "Driving map"); |
bwang | 0:2b1edabdd26b | 72 | __strcase(OP_SPEED, "Open-loop speed"); |
bwang | 0:2b1edabdd26b | 73 | __strcase(OP_POSITION, "Position loop"); |
bwang | 0:2b1edabdd26b | 74 | default: |
bwang | 0:2b1edabdd26b | 75 | strcpy(result, "Invalid"); |
bwang | 0:2b1edabdd26b | 76 | break; |
bwang | 0:2b1edabdd26b | 77 | } |
bwang | 0:2b1edabdd26b | 78 | return result; |
bwang | 0:2b1edabdd26b | 79 | } |
bwang | 0:2b1edabdd26b | 80 | |
bwang | 0:2b1edabdd26b | 81 | int str_to_op(char *buf) { |
bwang | 0:2b1edabdd26b | 82 | __intcase("torque", OP_TORQUE); |
bwang | 0:2b1edabdd26b | 83 | __intcase("driving", OP_DRIVING); |
bwang | 0:2b1edabdd26b | 84 | __intcase("speed", OP_SPEED); |
bwang | 0:2b1edabdd26b | 85 | __intcase("pos", OP_POSITION); |
bwang | 0:2b1edabdd26b | 86 | __intcase("position", OP_POSITION); |
bwang | 0:2b1edabdd26b | 87 | return -1; |
bwang | 0:2b1edabdd26b | 88 | } |