yuhang zhu / Mbed 2 deprecated ADAM_menu

Dependencies:   mbed

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