Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp@7:c268547fb6c8, 2013-07-13 (annotated)
- 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?
User | Revision | Line number | New 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 | } |