yuhang zhu / Mbed 2 deprecated ADAM_menu

Dependencies:   mbed

Committer:
yuhangzhu
Date:
Tue Jul 23 04:33:02 2013 +0000
Revision:
24:f8fea5e5bf73
Parent:
23:0b6901c9302c
Child:
25:57de395d89aa
this is the newest version with raw spi stream support

Who changed what in which revision?

UserRevisionLine numberNew contents of line
yuhangzhu 23:0b6901c9302c 1 /********************************************
yuhangzhu 23:0b6901c9302c 2 Function: void mode_idle_handler(int* state, char sel)
yuhangzhu 23:0b6901c9302c 3 Function description:
yuhangzhu 23:0b6901c9302c 4 This function converts character inputs to state information, which is used for later stages in main function
yuhangzhu 12:5e4cba1182ab 5
yuhangzhu 23:0b6901c9302c 6 Function: int parse_phase(char* line_buf, char* adam_pha)
yuhangzhu 23:0b6901c9302c 7 Function description:
yuhangzhu 23:0b6901c9302c 8 This function checks data in the line buffer. If it's good then write the converted value into address adam_pha
yuhangzhu 23:0b6901c9302c 9 otherwise it returns error code
yuhangzhu 23:0b6901c9302c 10
yuhangzhu 23:0b6901c9302c 11 Function: int parse_amp(char* line_buf, char* adam_amp)
yuhangzhu 23:0b6901c9302c 12 Function description:
yuhangzhu 23:0b6901c9302c 13 This function checks data in the line buffer. If it's good then write the converted value into address adam_amp
yuhangzhu 23:0b6901c9302c 14 otherwise it returns error code
yuhangzhu 23:0b6901c9302c 15 *********************************************/
yuhangzhu 12:5e4cba1182ab 16
yuhangzhu 2:45db4f4ca70d 17 #include "parameters.h"
yuhangzhu 2:45db4f4ca70d 18
yuhangzhu 2:45db4f4ca70d 19 void mode_idle_handler(int* state, char sel)
yuhangzhu 2:45db4f4ca70d 20 {
yuhangzhu 24:f8fea5e5bf73 21 if(sel>='1' && sel<='8')
yuhangzhu 2:45db4f4ca70d 22 *state = sel - '0'; //select a mode
yuhangzhu 2:45db4f4ca70d 23 else
yuhangzhu 2:45db4f4ca70d 24 *state = MODE_IDLE;
yuhangzhu 6:e510aab8f2ce 25 }
yuhangzhu 6:e510aab8f2ce 26
yuhangzhu 6:e510aab8f2ce 27
yuhangzhu 6:e510aab8f2ce 28 int parse_phase(char* line_buf, char* adam_pha)
yuhangzhu 6:e510aab8f2ce 29 {
yuhangzhu 6:e510aab8f2ce 30
yuhangzhu 6:e510aab8f2ce 31 char temp = 0;
yuhangzhu 6:e510aab8f2ce 32
yuhangzhu 6:e510aab8f2ce 33 if(line_buf[3] == LINEBUF_EMPTY)
yuhangzhu 6:e510aab8f2ce 34 return PARSE_EMPTY; //empty line
yuhangzhu 6:e510aab8f2ce 35 if(line_buf[3] == LINEBUF_TOOLONG)
yuhangzhu 6:e510aab8f2ce 36 return PARSE_LONG; //buffer too long
yuhangzhu 6:e510aab8f2ce 37
yuhangzhu 7:c268547fb6c8 38 if(line_buf[0] == '0') //input is 0
yuhangzhu 6:e510aab8f2ce 39 {
yuhangzhu 6:e510aab8f2ce 40 if(line_buf[1] == 255 && line_buf[2] == 255)
yuhangzhu 6:e510aab8f2ce 41 {
yuhangzhu 6:e510aab8f2ce 42 *adam_pha = 0;
yuhangzhu 6:e510aab8f2ce 43 return PARSE_OK;
yuhangzhu 6:e510aab8f2ce 44 }
yuhangzhu 6:e510aab8f2ce 45 else
yuhangzhu 7:c268547fb6c8 46 return PARSE_ERR;
yuhangzhu 6:e510aab8f2ce 47 }
yuhangzhu 6:e510aab8f2ce 48
yuhangzhu 6:e510aab8f2ce 49
yuhangzhu 6:e510aab8f2ce 50
yuhangzhu 6:e510aab8f2ce 51
yuhangzhu 6:e510aab8f2ce 52 if(line_buf[1]>='0' && line_buf[1]<='4' && line_buf[2]>='0'&& line_buf[2]<='9' && line_buf[0] == '-')
yuhangzhu 6:e510aab8f2ce 53 {
yuhangzhu 6:e510aab8f2ce 54 temp = (line_buf[1] - '0')*10;
yuhangzhu 6:e510aab8f2ce 55 temp += line_buf[2] - '0';
yuhangzhu 6:e510aab8f2ce 56 *adam_pha = temp/7;
yuhangzhu 6:e510aab8f2ce 57
yuhangzhu 6:e510aab8f2ce 58 if(temp % 7 == 0)
yuhangzhu 6:e510aab8f2ce 59 return PARSE_OK;
yuhangzhu 6:e510aab8f2ce 60 else
yuhangzhu 6:e510aab8f2ce 61 return PARSE_ROUNDED;
yuhangzhu 6:e510aab8f2ce 62 } //double digit input
yuhangzhu 6:e510aab8f2ce 63 else if(line_buf[2] == 255 && line_buf[1]>='0' && line_buf[1] <= '9' && line_buf[0] == '-')
yuhangzhu 6:e510aab8f2ce 64 {
yuhangzhu 6:e510aab8f2ce 65 temp = line_buf[1] - '0';
yuhangzhu 6:e510aab8f2ce 66 *adam_pha = temp/7;
yuhangzhu 6:e510aab8f2ce 67
yuhangzhu 6:e510aab8f2ce 68 if(temp % 7 == 0)
yuhangzhu 6:e510aab8f2ce 69 return PARSE_OK;
yuhangzhu 6:e510aab8f2ce 70 else
yuhangzhu 6:e510aab8f2ce 71 return PARSE_ROUNDED;
yuhangzhu 6:e510aab8f2ce 72 } //single digit input
yuhangzhu 6:e510aab8f2ce 73 else
yuhangzhu 6:e510aab8f2ce 74 return PARSE_ERR;
yuhangzhu 6:e510aab8f2ce 75 }
yuhangzhu 6:e510aab8f2ce 76
yuhangzhu 6:e510aab8f2ce 77 int parse_amp(char* line_buf, char* adam_amp)
yuhangzhu 6:e510aab8f2ce 78 {
yuhangzhu 6:e510aab8f2ce 79
yuhangzhu 6:e510aab8f2ce 80 char temp = 0;
yuhangzhu 6:e510aab8f2ce 81
yuhangzhu 6:e510aab8f2ce 82 if(line_buf[3] == LINEBUF_EMPTY)
yuhangzhu 6:e510aab8f2ce 83 return PARSE_EMPTY;
yuhangzhu 6:e510aab8f2ce 84 if(line_buf[3] == LINEBUF_TOOLONG)
yuhangzhu 6:e510aab8f2ce 85 return PARSE_LONG;
yuhangzhu 6:e510aab8f2ce 86
yuhangzhu 20:2a5e9d9aadbf 87 /*if(line_buf[0] == '0') //Input value is 0, or 0.0, or 0.5
yuhangzhu 6:e510aab8f2ce 88 {
yuhangzhu 20:2a5e9d9aadbf 89 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 90 {
yuhangzhu 6:e510aab8f2ce 91 *adam_amp = 0;
yuhangzhu 6:e510aab8f2ce 92 return PARSE_OK;
yuhangzhu 6:e510aab8f2ce 93 }
yuhangzhu 20:2a5e9d9aadbf 94 else if(line_buf[1] == '.' && line_buf[2] == '5') //Input is 0.5
yuhangzhu 20:2a5e9d9aadbf 95 {
yuhangzhu 20:2a5e9d9aadbf 96 *adam_amp = 1;
yuhangzhu 20:2a5e9d9aadbf 97 return PARSE_OK;
yuhangzhu 20:2a5e9d9aadbf 98 }
yuhangzhu 6:e510aab8f2ce 99 else
yuhangzhu 6:e510aab8f2ce 100 return PARSE_ERR;
yuhangzhu 20:2a5e9d9aadbf 101 }
yuhangzhu 20:2a5e9d9aadbf 102 */
yuhangzhu 21:4d6b26eecdac 103 //Single digit input. single digit is 0,1,2,3,4,5,6,7
yuhangzhu 6:e510aab8f2ce 104 if(line_buf[0]>='0' && line_buf[0]<='7' && line_buf[1] == 255 && line_buf[2] == 255)
yuhangzhu 6:e510aab8f2ce 105 {
yuhangzhu 6:e510aab8f2ce 106 temp = (line_buf[0] - '0')*10;
yuhangzhu 6:e510aab8f2ce 107 *adam_amp = temp/5;
yuhangzhu 6:e510aab8f2ce 108 return PARSE_OK;
yuhangzhu 7:c268547fb6c8 109 }
yuhangzhu 21:4d6b26eecdac 110 //x.x format input eg. 0.0 0.5 1.5 1.0 7.0 7.5 etc
yuhangzhu 6:e510aab8f2ce 111 else if(line_buf[0]>='0' && line_buf[0]<='7' && line_buf[2]>='0'&& line_buf[2]<='9' && line_buf[1] == '.')
yuhangzhu 6:e510aab8f2ce 112 {
yuhangzhu 6:e510aab8f2ce 113 temp = (line_buf[0] - '0')*10;
yuhangzhu 6:e510aab8f2ce 114 temp += line_buf[2] - '0';
yuhangzhu 6:e510aab8f2ce 115 *adam_amp = temp / 5;
yuhangzhu 6:e510aab8f2ce 116
yuhangzhu 6:e510aab8f2ce 117 if(temp % 5 == 0)
yuhangzhu 6:e510aab8f2ce 118 return PARSE_OK;
yuhangzhu 6:e510aab8f2ce 119 else
yuhangzhu 6:e510aab8f2ce 120 return PARSE_ROUNDED;
yuhangzhu 6:e510aab8f2ce 121 }
yuhangzhu 6:e510aab8f2ce 122 else
yuhangzhu 6:e510aab8f2ce 123 return PARSE_ERR;
yuhangzhu 24:f8fea5e5bf73 124 }
yuhangzhu 24:f8fea5e5bf73 125
yuhangzhu 24:f8fea5e5bf73 126 static char char2hex_4bits(char c)
yuhangzhu 24:f8fea5e5bf73 127 {
yuhangzhu 24:f8fea5e5bf73 128 if(c >= '0' && c <= '9')
yuhangzhu 24:f8fea5e5bf73 129 return c-'0';
yuhangzhu 24:f8fea5e5bf73 130 else if(c >= 'a' && c <= 'f')
yuhangzhu 24:f8fea5e5bf73 131 return c-'a'+10;
yuhangzhu 24:f8fea5e5bf73 132 else if(c >= 'A' && c <= 'F')
yuhangzhu 24:f8fea5e5bf73 133 return c-'A'+10;
yuhangzhu 24:f8fea5e5bf73 134 else
yuhangzhu 24:f8fea5e5bf73 135 return 255;
yuhangzhu 24:f8fea5e5bf73 136 }
yuhangzhu 24:f8fea5e5bf73 137
yuhangzhu 24:f8fea5e5bf73 138 static char char2hex_3bits(char c)
yuhangzhu 24:f8fea5e5bf73 139 {
yuhangzhu 24:f8fea5e5bf73 140 if(c>='0' && c<='7')
yuhangzhu 24:f8fea5e5bf73 141 return c-'0';
yuhangzhu 24:f8fea5e5bf73 142 else if(c == '8')
yuhangzhu 24:f8fea5e5bf73 143 return 0;
yuhangzhu 24:f8fea5e5bf73 144 else if(c == 9)
yuhangzhu 24:f8fea5e5bf73 145 return 1;
yuhangzhu 24:f8fea5e5bf73 146 else if(c >= 'a' && c <= 'f')
yuhangzhu 24:f8fea5e5bf73 147 return c-'a'+2;
yuhangzhu 24:f8fea5e5bf73 148 else if(c >= 'A' && c <= 'F')
yuhangzhu 24:f8fea5e5bf73 149 return c-'A'+2;
yuhangzhu 24:f8fea5e5bf73 150 else return 255;
yuhangzhu 24:f8fea5e5bf73 151 }
yuhangzhu 24:f8fea5e5bf73 152
yuhangzhu 24:f8fea5e5bf73 153
yuhangzhu 24:f8fea5e5bf73 154 int parse_spi_raw(char* buf, int length, char* cha1_pha, char* cha2_pha, char* cha1_amp, char* cha2_amp)
yuhangzhu 24:f8fea5e5bf73 155 {
yuhangzhu 24:f8fea5e5bf73 156 if(length == 0)
yuhangzhu 24:f8fea5e5bf73 157 return PARSE_EMPTY;
yuhangzhu 24:f8fea5e5bf73 158 if(length < 4)
yuhangzhu 24:f8fea5e5bf73 159 return PARSE_SHORT;
yuhangzhu 24:f8fea5e5bf73 160 else if(length > 4)
yuhangzhu 24:f8fea5e5bf73 161 return PARSE_LONG;
yuhangzhu 24:f8fea5e5bf73 162 else
yuhangzhu 24:f8fea5e5bf73 163 {
yuhangzhu 24:f8fea5e5bf73 164 *cha2_amp = char2hex_4bits(buf[0]);
yuhangzhu 24:f8fea5e5bf73 165 *cha2_pha = char2hex_3bits(buf[1]);
yuhangzhu 24:f8fea5e5bf73 166 *cha1_amp = char2hex_4bits(buf[2]);
yuhangzhu 24:f8fea5e5bf73 167 *cha1_pha = char2hex_3bits(buf[3]);
yuhangzhu 24:f8fea5e5bf73 168 }
yuhangzhu 2:45db4f4ca70d 169 }