yuhang zhu / Mbed 2 deprecated ADAM_menu

Dependencies:   mbed

Committer:
yuhangzhu
Date:
Tue Jul 23 17:55:40 2013 +0000
Revision:
26:5c264e20402f
Parent:
25:57de395d89aa
Child:
27:231333972023
this is the version before suggestion  generally good

Who changed what in which revision?

UserRevisionLine numberNew contents of line
yuhangzhu 23:0b6901c9302c 1 /********************************************
yuhangzhu 23:0b6901c9302c 2 Function: void mode_idle_handler(int* state, char sel)
yuhangzhu 23:0b6901c9302c 3 Function description:
yuhangzhu 23:0b6901c9302c 4 This function converts character inputs to state information, which is used for later stages in main function
yuhangzhu 12:5e4cba1182ab 5
yuhangzhu 23:0b6901c9302c 6 Function: int parse_phase(char* line_buf, char* adam_pha)
yuhangzhu 23:0b6901c9302c 7 Function description:
yuhangzhu 23:0b6901c9302c 8 This function checks data in the line buffer. If it's good then write the converted value into address adam_pha
yuhangzhu 23:0b6901c9302c 9 otherwise it returns error code
yuhangzhu 23:0b6901c9302c 10
yuhangzhu 23:0b6901c9302c 11 Function: int parse_amp(char* line_buf, char* adam_amp)
yuhangzhu 23:0b6901c9302c 12 Function description:
yuhangzhu 23:0b6901c9302c 13 This function checks data in the line buffer. If it's good then write the converted value into address adam_amp
yuhangzhu 23:0b6901c9302c 14 otherwise it returns error code
yuhangzhu 26:5c264e20402f 15
yuhangzhu 26:5c264e20402f 16
yuhangzhu 26:5c264e20402f 17 Function: static char char2hex_4bits(char c)
yuhangzhu 26:5c264e20402f 18 Function description:
yuhangzhu 26:5c264e20402f 19 This function converts a character input into 4 bit hex. For example, '1'->1, '9'->9, 'A'->10, 'a'->10
yuhangzhu 26:5c264e20402f 20
yuhangzhu 26:5c264e20402f 21 Function: static char char2hex_3bits(char c)
yuhangzhu 26:5c264e20402f 22 Function description:
yuhangzhu 26:5c264e20402f 23 This function converts a character input into 3 bit hex. For example, '8'->0, '7'->7,'f'->7
yuhangzhu 26:5c264e20402f 24
yuhangzhu 26:5c264e20402f 25 Function: int parse_spi_raw(char* buf, int length, char* cha1_pha, char* cha2_pha, char* cha1_amp, char* cha2_amp)
yuhangzhu 26:5c264e20402f 26 Function description:
yuhangzhu 26:5c264e20402f 27 This function converts characters in buf and put the data in cha1_pha, cha2_pha, cha1_amp, cha2_amp.
yuhangzhu 26:5c264e20402f 28 If length is incorrect, return the error code.
yuhangzhu 26:5c264e20402f 29
yuhangzhu 26:5c264e20402f 30 Function: char hex2char(char hex)
yuhangzhu 26:5c264e20402f 31 Function description:
yuhangzhu 26:5c264e20402f 32 This function converts a hex number to character. For example, 1->'1', 10->'A'
yuhangzhu 23:0b6901c9302c 33 *********************************************/
yuhangzhu 12:5e4cba1182ab 34
yuhangzhu 2:45db4f4ca70d 35 #include "parameters.h"
yuhangzhu 2:45db4f4ca70d 36
yuhangzhu 2:45db4f4ca70d 37 void mode_idle_handler(int* state, char sel)
yuhangzhu 2:45db4f4ca70d 38 {
yuhangzhu 24:f8fea5e5bf73 39 if(sel>='1' && sel<='8')
yuhangzhu 2:45db4f4ca70d 40 *state = sel - '0'; //select a mode
yuhangzhu 2:45db4f4ca70d 41 else
yuhangzhu 2:45db4f4ca70d 42 *state = MODE_IDLE;
yuhangzhu 6:e510aab8f2ce 43 }
yuhangzhu 6:e510aab8f2ce 44
yuhangzhu 6:e510aab8f2ce 45
yuhangzhu 6:e510aab8f2ce 46 int parse_phase(char* line_buf, char* adam_pha)
yuhangzhu 6:e510aab8f2ce 47 {
yuhangzhu 6:e510aab8f2ce 48
yuhangzhu 6:e510aab8f2ce 49 char temp = 0;
yuhangzhu 6:e510aab8f2ce 50
yuhangzhu 6:e510aab8f2ce 51 if(line_buf[3] == LINEBUF_EMPTY)
yuhangzhu 6:e510aab8f2ce 52 return PARSE_EMPTY; //empty line
yuhangzhu 6:e510aab8f2ce 53 if(line_buf[3] == LINEBUF_TOOLONG)
yuhangzhu 6:e510aab8f2ce 54 return PARSE_LONG; //buffer too long
yuhangzhu 6:e510aab8f2ce 55
yuhangzhu 7:c268547fb6c8 56 if(line_buf[0] == '0') //input is 0
yuhangzhu 6:e510aab8f2ce 57 {
yuhangzhu 6:e510aab8f2ce 58 if(line_buf[1] == 255 && line_buf[2] == 255)
yuhangzhu 6:e510aab8f2ce 59 {
yuhangzhu 6:e510aab8f2ce 60 *adam_pha = 0;
yuhangzhu 6:e510aab8f2ce 61 return PARSE_OK;
yuhangzhu 6:e510aab8f2ce 62 }
yuhangzhu 6:e510aab8f2ce 63 else
yuhangzhu 7:c268547fb6c8 64 return PARSE_ERR;
yuhangzhu 6:e510aab8f2ce 65 }
yuhangzhu 6:e510aab8f2ce 66
yuhangzhu 6:e510aab8f2ce 67
yuhangzhu 6:e510aab8f2ce 68
yuhangzhu 6:e510aab8f2ce 69
yuhangzhu 6:e510aab8f2ce 70 if(line_buf[1]>='0' && line_buf[1]<='4' && line_buf[2]>='0'&& line_buf[2]<='9' && line_buf[0] == '-')
yuhangzhu 6:e510aab8f2ce 71 {
yuhangzhu 6:e510aab8f2ce 72 temp = (line_buf[1] - '0')*10;
yuhangzhu 6:e510aab8f2ce 73 temp += line_buf[2] - '0';
yuhangzhu 6:e510aab8f2ce 74 *adam_pha = temp/7;
yuhangzhu 6:e510aab8f2ce 75
yuhangzhu 6:e510aab8f2ce 76 if(temp % 7 == 0)
yuhangzhu 6:e510aab8f2ce 77 return PARSE_OK;
yuhangzhu 6:e510aab8f2ce 78 else
yuhangzhu 6:e510aab8f2ce 79 return PARSE_ROUNDED;
yuhangzhu 6:e510aab8f2ce 80 } //double digit input
yuhangzhu 6:e510aab8f2ce 81 else if(line_buf[2] == 255 && line_buf[1]>='0' && line_buf[1] <= '9' && line_buf[0] == '-')
yuhangzhu 6:e510aab8f2ce 82 {
yuhangzhu 6:e510aab8f2ce 83 temp = line_buf[1] - '0';
yuhangzhu 6:e510aab8f2ce 84 *adam_pha = temp/7;
yuhangzhu 6:e510aab8f2ce 85
yuhangzhu 6:e510aab8f2ce 86 if(temp % 7 == 0)
yuhangzhu 6:e510aab8f2ce 87 return PARSE_OK;
yuhangzhu 6:e510aab8f2ce 88 else
yuhangzhu 6:e510aab8f2ce 89 return PARSE_ROUNDED;
yuhangzhu 6:e510aab8f2ce 90 } //single digit input
yuhangzhu 6:e510aab8f2ce 91 else
yuhangzhu 6:e510aab8f2ce 92 return PARSE_ERR;
yuhangzhu 6:e510aab8f2ce 93 }
yuhangzhu 6:e510aab8f2ce 94
yuhangzhu 6:e510aab8f2ce 95 int parse_amp(char* line_buf, char* adam_amp)
yuhangzhu 6:e510aab8f2ce 96 {
yuhangzhu 6:e510aab8f2ce 97
yuhangzhu 6:e510aab8f2ce 98 char temp = 0;
yuhangzhu 6:e510aab8f2ce 99
yuhangzhu 6:e510aab8f2ce 100 if(line_buf[3] == LINEBUF_EMPTY)
yuhangzhu 6:e510aab8f2ce 101 return PARSE_EMPTY;
yuhangzhu 6:e510aab8f2ce 102 if(line_buf[3] == LINEBUF_TOOLONG)
yuhangzhu 6:e510aab8f2ce 103 return PARSE_LONG;
yuhangzhu 21:4d6b26eecdac 104 //Single digit input. single digit is 0,1,2,3,4,5,6,7
yuhangzhu 6:e510aab8f2ce 105 if(line_buf[0]>='0' && line_buf[0]<='7' && line_buf[1] == 255 && line_buf[2] == 255)
yuhangzhu 6:e510aab8f2ce 106 {
yuhangzhu 6:e510aab8f2ce 107 temp = (line_buf[0] - '0')*10;
yuhangzhu 6:e510aab8f2ce 108 *adam_amp = temp/5;
yuhangzhu 6:e510aab8f2ce 109 return PARSE_OK;
yuhangzhu 7:c268547fb6c8 110 }
yuhangzhu 21:4d6b26eecdac 111 //x.x format input eg. 0.0 0.5 1.5 1.0 7.0 7.5 etc
yuhangzhu 6:e510aab8f2ce 112 else if(line_buf[0]>='0' && line_buf[0]<='7' && line_buf[2]>='0'&& line_buf[2]<='9' && line_buf[1] == '.')
yuhangzhu 6:e510aab8f2ce 113 {
yuhangzhu 6:e510aab8f2ce 114 temp = (line_buf[0] - '0')*10;
yuhangzhu 6:e510aab8f2ce 115 temp += line_buf[2] - '0';
yuhangzhu 6:e510aab8f2ce 116 *adam_amp = temp / 5;
yuhangzhu 6:e510aab8f2ce 117
yuhangzhu 6:e510aab8f2ce 118 if(temp % 5 == 0)
yuhangzhu 6:e510aab8f2ce 119 return PARSE_OK;
yuhangzhu 6:e510aab8f2ce 120 else
yuhangzhu 6:e510aab8f2ce 121 return PARSE_ROUNDED;
yuhangzhu 6:e510aab8f2ce 122 }
yuhangzhu 6:e510aab8f2ce 123 else
yuhangzhu 6:e510aab8f2ce 124 return PARSE_ERR;
yuhangzhu 24:f8fea5e5bf73 125 }
yuhangzhu 24:f8fea5e5bf73 126
yuhangzhu 24:f8fea5e5bf73 127 static char char2hex_4bits(char c)
yuhangzhu 24:f8fea5e5bf73 128 {
yuhangzhu 24:f8fea5e5bf73 129 if(c >= '0' && c <= '9')
yuhangzhu 24:f8fea5e5bf73 130 return c-'0';
yuhangzhu 24:f8fea5e5bf73 131 else if(c >= 'a' && c <= 'f')
yuhangzhu 24:f8fea5e5bf73 132 return c-'a'+10;
yuhangzhu 24:f8fea5e5bf73 133 else if(c >= 'A' && c <= 'F')
yuhangzhu 24:f8fea5e5bf73 134 return c-'A'+10;
yuhangzhu 24:f8fea5e5bf73 135 else
yuhangzhu 24:f8fea5e5bf73 136 return 255;
yuhangzhu 24:f8fea5e5bf73 137 }
yuhangzhu 24:f8fea5e5bf73 138
yuhangzhu 24:f8fea5e5bf73 139 static char char2hex_3bits(char c)
yuhangzhu 24:f8fea5e5bf73 140 {
yuhangzhu 24:f8fea5e5bf73 141 if(c>='0' && c<='7')
yuhangzhu 24:f8fea5e5bf73 142 return c-'0';
yuhangzhu 24:f8fea5e5bf73 143 else if(c == '8')
yuhangzhu 24:f8fea5e5bf73 144 return 0;
yuhangzhu 26:5c264e20402f 145 else if(c == '9')
yuhangzhu 24:f8fea5e5bf73 146 return 1;
yuhangzhu 24:f8fea5e5bf73 147 else if(c >= 'a' && c <= 'f')
yuhangzhu 24:f8fea5e5bf73 148 return c-'a'+2;
yuhangzhu 24:f8fea5e5bf73 149 else if(c >= 'A' && c <= 'F')
yuhangzhu 24:f8fea5e5bf73 150 return c-'A'+2;
yuhangzhu 24:f8fea5e5bf73 151 else return 255;
yuhangzhu 24:f8fea5e5bf73 152 }
yuhangzhu 24:f8fea5e5bf73 153
yuhangzhu 24:f8fea5e5bf73 154
yuhangzhu 24:f8fea5e5bf73 155 int parse_spi_raw(char* buf, int length, char* cha1_pha, char* cha2_pha, char* cha1_amp, char* cha2_amp)
yuhangzhu 24:f8fea5e5bf73 156 {
yuhangzhu 24:f8fea5e5bf73 157 if(length == 0)
yuhangzhu 24:f8fea5e5bf73 158 return PARSE_EMPTY;
yuhangzhu 24:f8fea5e5bf73 159 if(length < 4)
yuhangzhu 24:f8fea5e5bf73 160 return PARSE_SHORT;
yuhangzhu 24:f8fea5e5bf73 161 else if(length > 4)
yuhangzhu 24:f8fea5e5bf73 162 return PARSE_LONG;
yuhangzhu 24:f8fea5e5bf73 163 else
yuhangzhu 24:f8fea5e5bf73 164 {
yuhangzhu 24:f8fea5e5bf73 165 *cha2_amp = char2hex_4bits(buf[0]);
yuhangzhu 24:f8fea5e5bf73 166 *cha2_pha = char2hex_3bits(buf[1]);
yuhangzhu 24:f8fea5e5bf73 167 *cha1_amp = char2hex_4bits(buf[2]);
yuhangzhu 25:57de395d89aa 168 *cha1_pha = char2hex_3bits(buf[3]);
yuhangzhu 25:57de395d89aa 169 return PARSE_OK;
yuhangzhu 24:f8fea5e5bf73 170 }
yuhangzhu 25:57de395d89aa 171 }
yuhangzhu 25:57de395d89aa 172
yuhangzhu 25:57de395d89aa 173
yuhangzhu 25:57de395d89aa 174 char hex2char(char hex)
yuhangzhu 25:57de395d89aa 175 {
yuhangzhu 25:57de395d89aa 176 if(hex < 10)
yuhangzhu 25:57de395d89aa 177 return hex + '0';
yuhangzhu 25:57de395d89aa 178 else
yuhangzhu 25:57de395d89aa 179 return hex-10+'A';
yuhangzhu 2:45db4f4ca70d 180 }