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@21:4d6b26eecdac, 2013-07-20 (annotated)
- Committer:
- yuhangzhu
- Date:
- Sat Jul 20 16:20:14 2013 +0000
- Revision:
- 21:4d6b26eecdac
- Parent:
- 20:2a5e9d9aadbf
- Child:
- 23:0b6901c9302c
This program is made to be more robust, and is good for both putty and Tera Term.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
yuhangzhu | 21:4d6b26eecdac | 1 | //The function mode_idle_handler converts character inputs to state information, which is used for later stages in main function |
yuhangzhu | 21:4d6b26eecdac | 2 | //The function 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 | 21:4d6b26eecdac | 3 | //The function 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 | 20:2a5e9d9aadbf | 76 | /*if(line_buf[0] == '0') //Input value is 0, or 0.0, or 0.5 |
yuhangzhu | 6:e510aab8f2ce | 77 | { |
yuhangzhu | 20:2a5e9d9aadbf | 78 | if((line_buf[1] == 255 && line_buf[2] == 255) ||(line_buf[1] == '.' && line_buf[2] == '0')) //Input is 0 or 0.0 |
yuhangzhu | 6:e510aab8f2ce | 79 | { |
yuhangzhu | 6:e510aab8f2ce | 80 | *adam_amp = 0; |
yuhangzhu | 6:e510aab8f2ce | 81 | return PARSE_OK; |
yuhangzhu | 6:e510aab8f2ce | 82 | } |
yuhangzhu | 20:2a5e9d9aadbf | 83 | else if(line_buf[1] == '.' && line_buf[2] == '5') //Input is 0.5 |
yuhangzhu | 20:2a5e9d9aadbf | 84 | { |
yuhangzhu | 20:2a5e9d9aadbf | 85 | *adam_amp = 1; |
yuhangzhu | 20:2a5e9d9aadbf | 86 | return PARSE_OK; |
yuhangzhu | 20:2a5e9d9aadbf | 87 | } |
yuhangzhu | 6:e510aab8f2ce | 88 | else |
yuhangzhu | 6:e510aab8f2ce | 89 | return PARSE_ERR; |
yuhangzhu | 20:2a5e9d9aadbf | 90 | } |
yuhangzhu | 20:2a5e9d9aadbf | 91 | */ |
yuhangzhu | 21:4d6b26eecdac | 92 | //Single digit input. single digit is 0,1,2,3,4,5,6,7 |
yuhangzhu | 6:e510aab8f2ce | 93 | if(line_buf[0]>='0' && line_buf[0]<='7' && line_buf[1] == 255 && line_buf[2] == 255) |
yuhangzhu | 6:e510aab8f2ce | 94 | { |
yuhangzhu | 6:e510aab8f2ce | 95 | temp = (line_buf[0] - '0')*10; |
yuhangzhu | 6:e510aab8f2ce | 96 | *adam_amp = temp/5; |
yuhangzhu | 6:e510aab8f2ce | 97 | return PARSE_OK; |
yuhangzhu | 7:c268547fb6c8 | 98 | } |
yuhangzhu | 21:4d6b26eecdac | 99 | //x.x format input eg. 0.0 0.5 1.5 1.0 7.0 7.5 etc |
yuhangzhu | 6:e510aab8f2ce | 100 | else if(line_buf[0]>='0' && line_buf[0]<='7' && line_buf[2]>='0'&& line_buf[2]<='9' && line_buf[1] == '.') |
yuhangzhu | 6:e510aab8f2ce | 101 | { |
yuhangzhu | 6:e510aab8f2ce | 102 | temp = (line_buf[0] - '0')*10; |
yuhangzhu | 6:e510aab8f2ce | 103 | temp += line_buf[2] - '0'; |
yuhangzhu | 6:e510aab8f2ce | 104 | *adam_amp = temp / 5; |
yuhangzhu | 6:e510aab8f2ce | 105 | |
yuhangzhu | 6:e510aab8f2ce | 106 | if(temp % 5 == 0) |
yuhangzhu | 6:e510aab8f2ce | 107 | return PARSE_OK; |
yuhangzhu | 6:e510aab8f2ce | 108 | else |
yuhangzhu | 6:e510aab8f2ce | 109 | return PARSE_ROUNDED; |
yuhangzhu | 6:e510aab8f2ce | 110 | } |
yuhangzhu | 6:e510aab8f2ce | 111 | else |
yuhangzhu | 6:e510aab8f2ce | 112 | return PARSE_ERR; |
yuhangzhu | 2:45db4f4ca70d | 113 | } |