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.
handlers.cpp@12:5e4cba1182ab, 2013-07-14 (annotated)
- Committer:
- yuhangzhu
- Date:
- Sun Jul 14 22:38:44 2013 +0000
- Revision:
- 12:5e4cba1182ab
- Parent:
- 7:c268547fb6c8
- Child:
- 20:2a5e9d9aadbf
this should be the final version for menu now.. 06
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
yuhangzhu | 12:5e4cba1182ab | 1 | //mode_idle_handler converts character inputs to state information, which is used for later stages in main function |
yuhangzhu | 12:5e4cba1182ab | 2 | //parse_phase checks data in the line buffer if it's good write the converted value into address adam_pha otherwise returns error code |
yuhangzhu | 12:5e4cba1182ab | 3 | //parse_amp checks data in the line buffer if it's good write the converted value into address adam_amp otherwise returns error code |
yuhangzhu | 12:5e4cba1182ab | 4 | |
yuhangzhu | 12:5e4cba1182ab | 5 | |
yuhangzhu | 2:45db4f4ca70d | 6 | #include "parameters.h" |
yuhangzhu | 2:45db4f4ca70d | 7 | |
yuhangzhu | 2:45db4f4ca70d | 8 | void mode_idle_handler(int* state, char sel) |
yuhangzhu | 2:45db4f4ca70d | 9 | { |
yuhangzhu | 3:32e67d121c7f | 10 | if(sel>='1' && sel<='7') |
yuhangzhu | 2:45db4f4ca70d | 11 | *state = sel - '0'; //select a mode |
yuhangzhu | 2:45db4f4ca70d | 12 | else |
yuhangzhu | 2:45db4f4ca70d | 13 | *state = MODE_IDLE; |
yuhangzhu | 6:e510aab8f2ce | 14 | } |
yuhangzhu | 6:e510aab8f2ce | 15 | |
yuhangzhu | 6:e510aab8f2ce | 16 | |
yuhangzhu | 6:e510aab8f2ce | 17 | int parse_phase(char* line_buf, char* adam_pha) |
yuhangzhu | 6:e510aab8f2ce | 18 | { |
yuhangzhu | 6:e510aab8f2ce | 19 | |
yuhangzhu | 6:e510aab8f2ce | 20 | char temp = 0; |
yuhangzhu | 6:e510aab8f2ce | 21 | |
yuhangzhu | 6:e510aab8f2ce | 22 | if(line_buf[3] == LINEBUF_EMPTY) |
yuhangzhu | 6:e510aab8f2ce | 23 | return PARSE_EMPTY; //empty line |
yuhangzhu | 6:e510aab8f2ce | 24 | if(line_buf[3] == LINEBUF_TOOLONG) |
yuhangzhu | 6:e510aab8f2ce | 25 | return PARSE_LONG; //buffer too long |
yuhangzhu | 6:e510aab8f2ce | 26 | |
yuhangzhu | 7:c268547fb6c8 | 27 | if(line_buf[0] == '0') //input is 0 |
yuhangzhu | 6:e510aab8f2ce | 28 | { |
yuhangzhu | 6:e510aab8f2ce | 29 | if(line_buf[1] == 255 && line_buf[2] == 255) |
yuhangzhu | 6:e510aab8f2ce | 30 | { |
yuhangzhu | 6:e510aab8f2ce | 31 | *adam_pha = 0; |
yuhangzhu | 6:e510aab8f2ce | 32 | return PARSE_OK; |
yuhangzhu | 6:e510aab8f2ce | 33 | } |
yuhangzhu | 6:e510aab8f2ce | 34 | else |
yuhangzhu | 7:c268547fb6c8 | 35 | return PARSE_ERR; |
yuhangzhu | 6:e510aab8f2ce | 36 | } |
yuhangzhu | 6:e510aab8f2ce | 37 | |
yuhangzhu | 6:e510aab8f2ce | 38 | |
yuhangzhu | 6:e510aab8f2ce | 39 | |
yuhangzhu | 6:e510aab8f2ce | 40 | |
yuhangzhu | 6:e510aab8f2ce | 41 | if(line_buf[1]>='0' && line_buf[1]<='4' && line_buf[2]>='0'&& line_buf[2]<='9' && line_buf[0] == '-') |
yuhangzhu | 6:e510aab8f2ce | 42 | { |
yuhangzhu | 6:e510aab8f2ce | 43 | temp = (line_buf[1] - '0')*10; |
yuhangzhu | 6:e510aab8f2ce | 44 | temp += line_buf[2] - '0'; |
yuhangzhu | 6:e510aab8f2ce | 45 | *adam_pha = temp/7; |
yuhangzhu | 6:e510aab8f2ce | 46 | |
yuhangzhu | 6:e510aab8f2ce | 47 | if(temp % 7 == 0) |
yuhangzhu | 6:e510aab8f2ce | 48 | return PARSE_OK; |
yuhangzhu | 6:e510aab8f2ce | 49 | else |
yuhangzhu | 6:e510aab8f2ce | 50 | return PARSE_ROUNDED; |
yuhangzhu | 6:e510aab8f2ce | 51 | } //double digit input |
yuhangzhu | 6:e510aab8f2ce | 52 | else if(line_buf[2] == 255 && line_buf[1]>='0' && line_buf[1] <= '9' && line_buf[0] == '-') |
yuhangzhu | 6:e510aab8f2ce | 53 | { |
yuhangzhu | 6:e510aab8f2ce | 54 | temp = line_buf[1] - '0'; |
yuhangzhu | 6:e510aab8f2ce | 55 | *adam_pha = temp/7; |
yuhangzhu | 6:e510aab8f2ce | 56 | |
yuhangzhu | 6:e510aab8f2ce | 57 | if(temp % 7 == 0) |
yuhangzhu | 6:e510aab8f2ce | 58 | return PARSE_OK; |
yuhangzhu | 6:e510aab8f2ce | 59 | else |
yuhangzhu | 6:e510aab8f2ce | 60 | return PARSE_ROUNDED; |
yuhangzhu | 6:e510aab8f2ce | 61 | } //single digit input |
yuhangzhu | 6:e510aab8f2ce | 62 | else |
yuhangzhu | 6:e510aab8f2ce | 63 | return PARSE_ERR; |
yuhangzhu | 6:e510aab8f2ce | 64 | } |
yuhangzhu | 6:e510aab8f2ce | 65 | |
yuhangzhu | 6:e510aab8f2ce | 66 | int parse_amp(char* line_buf, char* adam_amp) |
yuhangzhu | 6:e510aab8f2ce | 67 | { |
yuhangzhu | 6:e510aab8f2ce | 68 | |
yuhangzhu | 6:e510aab8f2ce | 69 | char temp = 0; |
yuhangzhu | 6:e510aab8f2ce | 70 | |
yuhangzhu | 6:e510aab8f2ce | 71 | if(line_buf[3] == LINEBUF_EMPTY) |
yuhangzhu | 6:e510aab8f2ce | 72 | return PARSE_EMPTY; |
yuhangzhu | 6:e510aab8f2ce | 73 | if(line_buf[3] == LINEBUF_TOOLONG) |
yuhangzhu | 6:e510aab8f2ce | 74 | return PARSE_LONG; |
yuhangzhu | 6:e510aab8f2ce | 75 | |
yuhangzhu | 7:c268547fb6c8 | 76 | if(line_buf[0] == '0') //Input value is 0, both 0 and 0.0 is accpeted |
yuhangzhu | 6:e510aab8f2ce | 77 | { |
yuhangzhu | 6:e510aab8f2ce | 78 | if((line_buf[1] == 255 && line_buf[2] == 255) ||(line_buf[1] == '.' && line_buf[2] == '0')) |
yuhangzhu | 6:e510aab8f2ce | 79 | { |
yuhangzhu | 6:e510aab8f2ce | 80 | *adam_amp = 0; |
yuhangzhu | 6:e510aab8f2ce | 81 | return PARSE_OK; |
yuhangzhu | 6:e510aab8f2ce | 82 | } |
yuhangzhu | 6:e510aab8f2ce | 83 | else |
yuhangzhu | 6:e510aab8f2ce | 84 | return PARSE_ERR; |
yuhangzhu | 7:c268547fb6c8 | 85 | } |
yuhangzhu | 7:c268547fb6c8 | 86 | //single digit input |
yuhangzhu | 6:e510aab8f2ce | 87 | if(line_buf[0]>='0' && line_buf[0]<='7' && line_buf[1] == 255 && line_buf[2] == 255) |
yuhangzhu | 6:e510aab8f2ce | 88 | { |
yuhangzhu | 6:e510aab8f2ce | 89 | temp = (line_buf[0] - '0')*10; |
yuhangzhu | 6:e510aab8f2ce | 90 | *adam_amp = temp/5; |
yuhangzhu | 6:e510aab8f2ce | 91 | return PARSE_OK; |
yuhangzhu | 7:c268547fb6c8 | 92 | } |
yuhangzhu | 7:c268547fb6c8 | 93 | //x.x format input |
yuhangzhu | 6:e510aab8f2ce | 94 | else if(line_buf[0]>='0' && line_buf[0]<='7' && line_buf[2]>='0'&& line_buf[2]<='9' && line_buf[1] == '.') |
yuhangzhu | 6:e510aab8f2ce | 95 | { |
yuhangzhu | 6:e510aab8f2ce | 96 | temp = (line_buf[0] - '0')*10; |
yuhangzhu | 6:e510aab8f2ce | 97 | temp += line_buf[2] - '0'; |
yuhangzhu | 6:e510aab8f2ce | 98 | *adam_amp = temp / 5; |
yuhangzhu | 6:e510aab8f2ce | 99 | |
yuhangzhu | 6:e510aab8f2ce | 100 | if(temp % 5 == 0) |
yuhangzhu | 6:e510aab8f2ce | 101 | return PARSE_OK; |
yuhangzhu | 6:e510aab8f2ce | 102 | else |
yuhangzhu | 6:e510aab8f2ce | 103 | return PARSE_ROUNDED; |
yuhangzhu | 6:e510aab8f2ce | 104 | } |
yuhangzhu | 6:e510aab8f2ce | 105 | else |
yuhangzhu | 6:e510aab8f2ce | 106 | return PARSE_ERR; |
yuhangzhu | 2:45db4f4ca70d | 107 | } |