yuhang zhu / Mbed 2 deprecated ADAM_menu

Dependencies:   mbed

Committer:
yuhangzhu
Date:
Sat Jul 13 23:16:29 2013 +0000
Revision:
8:f0c3d5911b87
Parent:
7:c268547fb6c8
Child:
9:3eaacc1ad758
generally good but still need some change for wrong input, more robust .3

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