yuhang zhu / Mbed 2 deprecated ADAM_menu

Dependencies:   mbed

Committer:
yuhangzhu
Date:
Sun Jul 14 06:00:56 2013 +0000
Revision:
10:ff8c2470f019
Parent:
9:3eaacc1ad758
Child:
11:0e42dd431fb5
still need to fix the hang problem 0.4

Who changed what in which revision?

UserRevisionLine numberNew contents of line
yuhangzhu 0:249f6f78cd05 1 #include "mbed.h"
yuhangzhu 0:249f6f78cd05 2 #include "menu.h"
yuhangzhu 0:249f6f78cd05 3 #include "parameters.h"
yuhangzhu 3:32e67d121c7f 4 #include "handlers.h"
yuhangzhu 8:f0c3d5911b87 5 //#define DEBUG
yuhangzhu 0:249f6f78cd05 6
yuhangzhu 0:249f6f78cd05 7 Serial pc(USBTX, USBRX);
yuhangzhu 2:45db4f4ca70d 8
yuhangzhu 3:32e67d121c7f 9 char recv;
yuhangzhu 2:45db4f4ca70d 10 int state;
yuhangzhu 6:e510aab8f2ce 11 char cha1_pha, cha2_pha;
yuhangzhu 6:e510aab8f2ce 12 char cha1_amp, cha2_amp;
yuhangzhu 6:e510aab8f2ce 13 int ret;
yuhangzhu 6:e510aab8f2ce 14
yuhangzhu 10:ff8c2470f019 15 short spi_stream;
yuhangzhu 10:ff8c2470f019 16 short j;
yuhangzhu 10:ff8c2470f019 17
yuhangzhu 3:32e67d121c7f 18 char line_buf[4]; //line_buf[3] is used to indicate if it's empty 0 empty 1 not
yuhangzhu 4:e8142db2bbfd 19 int line_pt; //line buffer pointer points to next buffer location it's going to write
yuhangzhu 4:e8142db2bbfd 20 int line_length; //store the current line length
yuhangzhu 10:ff8c2470f019 21 int i;
yuhangzhu 2:45db4f4ca70d 22
yuhangzhu 0:249f6f78cd05 23 int main() {
yuhangzhu 0:249f6f78cd05 24
yuhangzhu 0:249f6f78cd05 25 pc.baud(115200); //config buad rate
yuhangzhu 1:cb6811ef87de 26 state = MODE_IDLE;
yuhangzhu 3:32e67d121c7f 27 line_buf[3] = 0;
yuhangzhu 3:32e67d121c7f 28 line_buf[2] = 255;
yuhangzhu 3:32e67d121c7f 29 line_buf[1] = 255;
yuhangzhu 3:32e67d121c7f 30 line_buf[0] = 255;
yuhangzhu 10:ff8c2470f019 31 cha1_pha = 0;
yuhangzhu 10:ff8c2470f019 32 cha2_pha = 0;
yuhangzhu 10:ff8c2470f019 33 cha1_amp = 0;
yuhangzhu 10:ff8c2470f019 34 cha2_amp = 0;
yuhangzhu 0:249f6f78cd05 35
yuhangzhu 0:249f6f78cd05 36 while(1)
yuhangzhu 0:249f6f78cd05 37 {
yuhangzhu 1:cb6811ef87de 38 switch(state)
yuhangzhu 0:249f6f78cd05 39 {
yuhangzhu 1:cb6811ef87de 40 case MODE_IDLE:
yuhangzhu 10:ff8c2470f019 41 wait(0.1);
yuhangzhu 1:cb6811ef87de 42 pc.printf("%s", main_menu);
yuhangzhu 3:32e67d121c7f 43 recv = pc.getc();
yuhangzhu 3:32e67d121c7f 44 mode_idle_handler(&state, recv);
yuhangzhu 3:32e67d121c7f 45 //pc.printf("%d", state);
yuhangzhu 3:32e67d121c7f 46 break;
yuhangzhu 3:32e67d121c7f 47 case MODE_CHA1PHA:
yuhangzhu 5:50ea1502a949 48 case MODE_CHA1AMP:
yuhangzhu 5:50ea1502a949 49 case MODE_CHA2PHA:
yuhangzhu 5:50ea1502a949 50 case MODE_CHA2AMP:
yuhangzhu 10:ff8c2470f019 51 wait(0.1);
yuhangzhu 5:50ea1502a949 52 if(state == MODE_CHA1PHA)
yuhangzhu 5:50ea1502a949 53 pc.printf("%s", cmd1);
yuhangzhu 5:50ea1502a949 54 else if(state == MODE_CHA1AMP)
yuhangzhu 5:50ea1502a949 55 pc.printf("%s", cmd2);
yuhangzhu 5:50ea1502a949 56 else if(state == MODE_CHA2PHA)
yuhangzhu 5:50ea1502a949 57 pc.printf("%s", cmd3);
yuhangzhu 5:50ea1502a949 58 else
yuhangzhu 5:50ea1502a949 59 pc.printf("%s", cmd4);
yuhangzhu 5:50ea1502a949 60
yuhangzhu 3:32e67d121c7f 61 line_buf[3] = 0;
yuhangzhu 5:50ea1502a949 62 line_buf[2] = 255;
yuhangzhu 5:50ea1502a949 63 line_buf[1] = 255;
yuhangzhu 5:50ea1502a949 64 line_buf[0] = 255;
yuhangzhu 3:32e67d121c7f 65 line_pt = 0;
yuhangzhu 4:e8142db2bbfd 66 line_length = 0;
yuhangzhu 3:32e67d121c7f 67
yuhangzhu 6:e510aab8f2ce 68 while(1) //input into line buffer, terminated by enter key
yuhangzhu 3:32e67d121c7f 69 {
yuhangzhu 3:32e67d121c7f 70 recv = pc.getc();
yuhangzhu 6:e510aab8f2ce 71 if(recv == 13) //enter is pressed, break
yuhangzhu 3:32e67d121c7f 72 {
yuhangzhu 4:e8142db2bbfd 73 if(line_length == 0)
yuhangzhu 6:e510aab8f2ce 74 line_buf[3] = LINEBUF_EMPTY;
yuhangzhu 6:e510aab8f2ce 75 else if(line_length > 3)
yuhangzhu 6:e510aab8f2ce 76 line_buf[3] = LINEBUF_TOOLONG;
yuhangzhu 3:32e67d121c7f 77 else
yuhangzhu 6:e510aab8f2ce 78 line_buf[3] = LINEBUF_OK;
yuhangzhu 8:f0c3d5911b87 79 #ifdef DEBUG
yuhangzhu 8:f0c3d5911b87 80 pc.printf("decimal output : %d %d %d %d", line_buf[3], line_buf[2], line_buf[1], line_buf[0]);
yuhangzhu 8:f0c3d5911b87 81 pc.printf("char output: %c %c %c %c", line_buf[3], line_buf[2], line_buf[1], line_buf[0]);
yuhangzhu 8:f0c3d5911b87 82 #endif
yuhangzhu 8:f0c3d5911b87 83
yuhangzhu 4:e8142db2bbfd 84 break;
yuhangzhu 3:32e67d121c7f 85 }
yuhangzhu 6:e510aab8f2ce 86 else if(recv == 8) //backspace is pressed, delete one character both on screen and line buffer
yuhangzhu 3:32e67d121c7f 87 {
yuhangzhu 3:32e67d121c7f 88 pc.putc(8);
yuhangzhu 3:32e67d121c7f 89 pc.putc(32);
yuhangzhu 3:32e67d121c7f 90 pc.putc(8);
yuhangzhu 4:e8142db2bbfd 91
yuhangzhu 4:e8142db2bbfd 92 if(line_length <= 3 && line_length>=1)
yuhangzhu 3:32e67d121c7f 93 {
yuhangzhu 4:e8142db2bbfd 94 line_pt --;
yuhangzhu 3:32e67d121c7f 95 line_buf[line_pt] = 255;
yuhangzhu 3:32e67d121c7f 96 }
yuhangzhu 4:e8142db2bbfd 97 if(line_length > 0)
yuhangzhu 4:e8142db2bbfd 98 line_length --;
yuhangzhu 3:32e67d121c7f 99 }
yuhangzhu 6:e510aab8f2ce 100 else //other character is pressed, record that in line buffer
yuhangzhu 3:32e67d121c7f 101 {
yuhangzhu 3:32e67d121c7f 102 pc.putc(recv);
yuhangzhu 4:e8142db2bbfd 103 line_length ++;
yuhangzhu 4:e8142db2bbfd 104
yuhangzhu 4:e8142db2bbfd 105 if(line_length <= 3)
yuhangzhu 4:e8142db2bbfd 106 {
yuhangzhu 4:e8142db2bbfd 107 line_buf[line_pt] = recv;
yuhangzhu 3:32e67d121c7f 108 line_pt ++;
yuhangzhu 4:e8142db2bbfd 109 }
yuhangzhu 3:32e67d121c7f 110 }
yuhangzhu 3:32e67d121c7f 111 }
yuhangzhu 6:e510aab8f2ce 112 //input over, now checking
yuhangzhu 7:c268547fb6c8 113 //check phase input
yuhangzhu 6:e510aab8f2ce 114 if(state == MODE_CHA1PHA || state == MODE_CHA2PHA)
yuhangzhu 6:e510aab8f2ce 115 {
yuhangzhu 6:e510aab8f2ce 116 if(state == MODE_CHA1PHA)
yuhangzhu 6:e510aab8f2ce 117 ret = parse_phase(line_buf, &cha1_pha);
yuhangzhu 6:e510aab8f2ce 118 else
yuhangzhu 6:e510aab8f2ce 119 ret = parse_phase(line_buf, &cha2_pha);
yuhangzhu 6:e510aab8f2ce 120
yuhangzhu 7:c268547fb6c8 121 if(ret == PARSE_LONG) //Input string too long
yuhangzhu 6:e510aab8f2ce 122 {
yuhangzhu 6:e510aab8f2ce 123 pc.printf("%s", msg_strlong);
yuhangzhu 6:e510aab8f2ce 124 pc.getc();
yuhangzhu 6:e510aab8f2ce 125 }
yuhangzhu 7:c268547fb6c8 126 else if(ret == PARSE_EMPTY)
yuhangzhu 7:c268547fb6c8 127 {
yuhangzhu 7:c268547fb6c8 128 pc.printf("%s", msg_empty);
yuhangzhu 7:c268547fb6c8 129 pc.printf("%s", msg_ret);
yuhangzhu 7:c268547fb6c8 130 pc.getc();
yuhangzhu 7:c268547fb6c8 131 }
yuhangzhu 7:c268547fb6c8 132 else if(ret == PARSE_ERR) //Input string has error
yuhangzhu 6:e510aab8f2ce 133 {
yuhangzhu 6:e510aab8f2ce 134 pc.printf("%s", msg_err);
yuhangzhu 6:e510aab8f2ce 135 pc.getc();
yuhangzhu 6:e510aab8f2ce 136 }
yuhangzhu 7:c268547fb6c8 137 else if(ret == PARSE_ROUNDED) //Input is rounded,show the rounded value
yuhangzhu 6:e510aab8f2ce 138 {
yuhangzhu 6:e510aab8f2ce 139 if(state == MODE_CHA1PHA)
yuhangzhu 9:3eaacc1ad758 140 pc.printf("%s %d\n", msg_rounded, cha1_pha*-7);
yuhangzhu 6:e510aab8f2ce 141 else if(state == MODE_CHA2PHA)
yuhangzhu 9:3eaacc1ad758 142 pc.printf("%s %d\n", msg_rounded, cha2_pha*-7);
yuhangzhu 6:e510aab8f2ce 143
yuhangzhu 6:e510aab8f2ce 144 pc.printf("%s", msg_ret);
yuhangzhu 6:e510aab8f2ce 145 pc.getc();
yuhangzhu 6:e510aab8f2ce 146 }
yuhangzhu 7:c268547fb6c8 147 else //Input is good
yuhangzhu 6:e510aab8f2ce 148 {
yuhangzhu 6:e510aab8f2ce 149 pc.printf("%s", msg_ok);
yuhangzhu 8:f0c3d5911b87 150 #ifdef DEBUG
yuhangzhu 6:e510aab8f2ce 151 pc.printf("%d %d\n", cha1_pha*7, cha2_pha*7);
yuhangzhu 8:f0c3d5911b87 152 #endif
yuhangzhu 6:e510aab8f2ce 153 pc.printf("%s", msg_ret);
yuhangzhu 6:e510aab8f2ce 154 pc.getc();
yuhangzhu 6:e510aab8f2ce 155 }
yuhangzhu 6:e510aab8f2ce 156 }
yuhangzhu 3:32e67d121c7f 157
yuhangzhu 7:c268547fb6c8 158 //check attenuation input
yuhangzhu 7:c268547fb6c8 159 if(state == MODE_CHA1AMP || state == MODE_CHA2AMP)
yuhangzhu 7:c268547fb6c8 160 {
yuhangzhu 7:c268547fb6c8 161 if(state == MODE_CHA1AMP)
yuhangzhu 7:c268547fb6c8 162 ret = parse_amp(line_buf, &cha1_amp);
yuhangzhu 7:c268547fb6c8 163 else
yuhangzhu 7:c268547fb6c8 164 ret = parse_amp(line_buf, &cha2_amp);
yuhangzhu 7:c268547fb6c8 165
yuhangzhu 7:c268547fb6c8 166 if(ret == PARSE_LONG) //Input string too long
yuhangzhu 7:c268547fb6c8 167 {
yuhangzhu 7:c268547fb6c8 168 pc.printf("%s", msg_strlong);
yuhangzhu 7:c268547fb6c8 169 pc.getc();
yuhangzhu 7:c268547fb6c8 170 }
yuhangzhu 7:c268547fb6c8 171 else if(ret == PARSE_EMPTY)
yuhangzhu 7:c268547fb6c8 172 {
yuhangzhu 7:c268547fb6c8 173 pc.printf("%s", msg_empty);
yuhangzhu 7:c268547fb6c8 174 pc.printf("%s", msg_ret);
yuhangzhu 7:c268547fb6c8 175 pc.getc();
yuhangzhu 7:c268547fb6c8 176 }
yuhangzhu 7:c268547fb6c8 177 else if(ret == PARSE_ERR) //Input string has error
yuhangzhu 7:c268547fb6c8 178 {
yuhangzhu 7:c268547fb6c8 179 pc.printf("%s", msg_err);
yuhangzhu 7:c268547fb6c8 180 pc.getc();
yuhangzhu 7:c268547fb6c8 181 }
yuhangzhu 7:c268547fb6c8 182 else if(ret == PARSE_ROUNDED) //Input is rounded, show the rounded value
yuhangzhu 7:c268547fb6c8 183 {
yuhangzhu 7:c268547fb6c8 184 if(state == MODE_CHA1AMP)
yuhangzhu 8:f0c3d5911b87 185 pc.printf("%s %.1f\n", msg_rounded, cha1_amp*5.0/10.0);
yuhangzhu 7:c268547fb6c8 186 else if(state == MODE_CHA2AMP)
yuhangzhu 8:f0c3d5911b87 187 pc.printf("%s %.1f\n", msg_rounded, cha2_amp*5.0/10.0);
yuhangzhu 7:c268547fb6c8 188
yuhangzhu 7:c268547fb6c8 189 pc.printf("%s", msg_ret);
yuhangzhu 7:c268547fb6c8 190 pc.getc();
yuhangzhu 7:c268547fb6c8 191 }
yuhangzhu 7:c268547fb6c8 192 else //Input is good
yuhangzhu 7:c268547fb6c8 193 {
yuhangzhu 7:c268547fb6c8 194 pc.printf("%s", msg_ok);
yuhangzhu 8:f0c3d5911b87 195 #ifdef DEBUG
yuhangzhu 7:c268547fb6c8 196 pc.printf("%d %d\n", cha1_amp*5, cha2_amp*5);
yuhangzhu 8:f0c3d5911b87 197 #endif
yuhangzhu 7:c268547fb6c8 198 pc.printf("%s", msg_ret);
yuhangzhu 7:c268547fb6c8 199 pc.getc();
yuhangzhu 7:c268547fb6c8 200 }
yuhangzhu 7:c268547fb6c8 201 }
yuhangzhu 7:c268547fb6c8 202 state = MODE_IDLE; //back to idle state after input
yuhangzhu 3:32e67d121c7f 203 break;
yuhangzhu 5:50ea1502a949 204
yuhangzhu 8:f0c3d5911b87 205 // in display mode
yuhangzhu 8:f0c3d5911b87 206 case MODE_DISPLAY:
yuhangzhu 10:ff8c2470f019 207 wait(0.1);
yuhangzhu 10:ff8c2470f019 208 pc.printf("Phase shift value for channel 1 is %d degrees\n", cha1_pha*-7);
yuhangzhu 10:ff8c2470f019 209 pc.printf("Phase shift value for channel 2 is %d degrees\n", cha2_pha*-7);
yuhangzhu 10:ff8c2470f019 210 pc.printf("Attentuation for channel 1 is %.1f dB\n", cha1_amp*5.0/10.0);
yuhangzhu 10:ff8c2470f019 211 pc.printf("Attentuation for channel 2 is %.1f dB\n", cha2_amp*5.0/10.0);
yuhangzhu 8:f0c3d5911b87 212 pc.printf("%s", msg_ret);
yuhangzhu 8:f0c3d5911b87 213 pc.getc();
yuhangzhu 8:f0c3d5911b87 214 state = MODE_IDLE;
yuhangzhu 8:f0c3d5911b87 215 break;
yuhangzhu 9:3eaacc1ad758 216
yuhangzhu 9:3eaacc1ad758 217 case MODE_HELP:
yuhangzhu 10:ff8c2470f019 218 wait(0.1);
yuhangzhu 9:3eaacc1ad758 219 pc.printf("%s", msg_help);
yuhangzhu 9:3eaacc1ad758 220 pc.printf("%s", msg_ret);
yuhangzhu 9:3eaacc1ad758 221 pc.getc();
yuhangzhu 9:3eaacc1ad758 222 state = MODE_IDLE;
yuhangzhu 9:3eaacc1ad758 223 break;
yuhangzhu 9:3eaacc1ad758 224
yuhangzhu 10:ff8c2470f019 225 case MODE_SEND:
yuhangzhu 10:ff8c2470f019 226 wait(0.1);
yuhangzhu 10:ff8c2470f019 227 pc.printf("Phase shift value for channel 1 is %d degrees\n", cha1_pha*-7);
yuhangzhu 10:ff8c2470f019 228 pc.printf("Phase shift value for channel 2 is %d degrees\n", cha2_pha*-7);
yuhangzhu 10:ff8c2470f019 229 pc.printf("Attentuation for channel 1 is %.1f dB\n", cha1_amp*5.0/10.0);
yuhangzhu 10:ff8c2470f019 230 pc.printf("Attentuation for channel 2 is %.1f dB\n", cha2_amp*5.0/10.0);
yuhangzhu 10:ff8c2470f019 231 pc.printf("\nspi bit stream:\n");
yuhangzhu 10:ff8c2470f019 232 for(i=15; i>=0; i--)
yuhangzhu 10:ff8c2470f019 233 pc.printf("Bit%d ", i);
yuhangzhu 10:ff8c2470f019 234 pc.printf("\n");
yuhangzhu 10:ff8c2470f019 235 spi_stream = 0;
yuhangzhu 10:ff8c2470f019 236 j = 0x8000;
yuhangzhu 10:ff8c2470f019 237 spi_stream = (cha2_amp << 12) | (cha2_pha << 8) | (cha1_amp << 4) | (cha1_pha);
yuhangzhu 10:ff8c2470f019 238 for(i=0; i<=15; i++)
yuhangzhu 10:ff8c2470f019 239 {
yuhangzhu 10:ff8c2470f019 240 if(spi_stream >= j)
yuhangzhu 10:ff8c2470f019 241 pc.printf(" %d", 1);
yuhangzhu 10:ff8c2470f019 242 else
yuhangzhu 10:ff8c2470f019 243 pc.printf(" %d", 0);
yuhangzhu 10:ff8c2470f019 244
yuhangzhu 10:ff8c2470f019 245 j = j>>1;
yuhangzhu 10:ff8c2470f019 246 }
yuhangzhu 10:ff8c2470f019 247 pc.printf("\n");
yuhangzhu 10:ff8c2470f019 248 pc.printf("%s", msg_ret);
yuhangzhu 10:ff8c2470f019 249 pc.getc();
yuhangzhu 10:ff8c2470f019 250 state = MODE_IDLE;
yuhangzhu 10:ff8c2470f019 251 break;
yuhangzhu 9:3eaacc1ad758 252 default:
yuhangzhu 9:3eaacc1ad758 253 state = MODE_IDLE;
yuhangzhu 1:cb6811ef87de 254 }
yuhangzhu 0:249f6f78cd05 255
yuhangzhu 0:249f6f78cd05 256
yuhangzhu 0:249f6f78cd05 257 }
yuhangzhu 0:249f6f78cd05 258
yuhangzhu 0:249f6f78cd05 259
yuhangzhu 0:249f6f78cd05 260 return 0;
yuhangzhu 0:249f6f78cd05 261 }