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 Author: Yuhang Zhu(46609@freescale.com)
yuhangzhu 23:0b6901c9302c 3 Date: July 20, 2013
yuhangzhu 23:0b6901c9302c 4
yuhangzhu 23:0b6901c9302c 5 Function name: main
yuhangzhu 12:5e4cba1182ab 6
yuhangzhu 23:0b6901c9302c 7 Function description:
yuhangzhu 23:0b6901c9302c 8 This main function implements a mode transfer.
yuhangzhu 23:0b6901c9302c 9 When MCU resets, it's in MODE_IDLE. Then depends on the keyboard input(1 to 7),
yuhangzhu 23:0b6901c9302c 10 mode switches to transition modes such as
yuhangzhu 23:0b6901c9302c 11 MODE_CHAxPHA, which is for phase input of channel x, or
yuhangzhu 23:0b6901c9302c 12 MODE_CHAxAMP, which is for attenuation input of channel x, or
yuhangzhu 23:0b6901c9302c 13 MODE_DISPLAY, which is for displaying the current parameters, or
yuhangzhu 23:0b6901c9302c 14 MODE_HELP, which is for displaying the help information, or
yuhangzhu 23:0b6901c9302c 15 MODE_SEND, which is for sending the bit stream through the SPI bus by MOSI and reading the data back from MISO.
yuhangzhu 23:0b6901c9302c 16 After each transition mode completes, MCU returns to MODE_IDLE to wait for another user input.
yuhangzhu 23:0b6901c9302c 17
yuhangzhu 23:0b6901c9302c 18 ***************************************************************************************/
yuhangzhu 12:5e4cba1182ab 19
yuhangzhu 0:249f6f78cd05 20 #include "mbed.h"
yuhangzhu 0:249f6f78cd05 21 #include "menu.h"
yuhangzhu 0:249f6f78cd05 22 #include "parameters.h"
yuhangzhu 3:32e67d121c7f 23 #include "handlers.h"
yuhangzhu 24:f8fea5e5bf73 24 #define DEBUG
yuhangzhu 0:249f6f78cd05 25
yuhangzhu 17:54a003ac9610 26 Serial pc(USBTX, USBRX); // serial io
yuhangzhu 15:3f3560332bc1 27 SPI spi(PTD2, PTD3, PTD1); // mosi, miso, sclk
yuhangzhu 17:54a003ac9610 28 DigitalOut cs(PTD0); //SPI chip select
yuhangzhu 2:45db4f4ca70d 29
yuhangzhu 3:32e67d121c7f 30 char recv;
yuhangzhu 18:452b5da21cfd 31
yuhangzhu 11:0e42dd431fb5 32
yuhangzhu 2:45db4f4ca70d 33 int state;
yuhangzhu 6:e510aab8f2ce 34 char cha1_pha, cha2_pha;
yuhangzhu 6:e510aab8f2ce 35 char cha1_amp, cha2_amp;
yuhangzhu 6:e510aab8f2ce 36 int ret;
yuhangzhu 6:e510aab8f2ce 37
yuhangzhu 11:0e42dd431fb5 38 unsigned short spi_stream;
yuhangzhu 15:3f3560332bc1 39 unsigned char spi_first_byte_s;
yuhangzhu 15:3f3560332bc1 40 unsigned char spi_second_byte_s; // The first and second byte to send
yuhangzhu 15:3f3560332bc1 41
yuhangzhu 15:3f3560332bc1 42 unsigned char spi_first_byte_r; // The first and second byte to receive
yuhangzhu 15:3f3560332bc1 43 unsigned char spi_second_byte_r;
yuhangzhu 10:ff8c2470f019 44
yuhangzhu 12:5e4cba1182ab 45 char line_buf[4]; //line_buf[3] is used to indicate if it's empty 0 empty 1 not, other bytes for char data
yuhangzhu 4:e8142db2bbfd 46 int line_pt; //line buffer pointer points to next buffer location it's going to write
yuhangzhu 4:e8142db2bbfd 47 int line_length; //store the current line length
yuhangzhu 10:ff8c2470f019 48 int i;
yuhangzhu 2:45db4f4ca70d 49
yuhangzhu 0:249f6f78cd05 50 int main() {
yuhangzhu 0:249f6f78cd05 51
yuhangzhu 23:0b6901c9302c 52 pc.baud(19200); //Configure baud rate. Note: 115200 seems too high for the current board
yuhangzhu 23:0b6901c9302c 53 cs = 1; //SPI config
yuhangzhu 17:54a003ac9610 54 spi.format(8,0); //16 bit frame is not working, so need to send twice 8 bit frame
yuhangzhu 17:54a003ac9610 55 //For more info about format, see http://mbed.org/forum/bugs-suggestions/topic/4419/?page=1#comment-22056
yuhangzhu 17:54a003ac9610 56 spi.frequency(1000000);
yuhangzhu 15:3f3560332bc1 57
yuhangzhu 1:cb6811ef87de 58 state = MODE_IDLE;
yuhangzhu 3:32e67d121c7f 59 line_buf[3] = 0;
yuhangzhu 3:32e67d121c7f 60 line_buf[2] = 255;
yuhangzhu 3:32e67d121c7f 61 line_buf[1] = 255;
yuhangzhu 3:32e67d121c7f 62 line_buf[0] = 255;
yuhangzhu 10:ff8c2470f019 63 cha1_pha = 0;
yuhangzhu 10:ff8c2470f019 64 cha2_pha = 0;
yuhangzhu 10:ff8c2470f019 65 cha1_amp = 0;
yuhangzhu 10:ff8c2470f019 66 cha2_amp = 0;
yuhangzhu 0:249f6f78cd05 67
yuhangzhu 0:249f6f78cd05 68 while(1)
yuhangzhu 0:249f6f78cd05 69 {
yuhangzhu 1:cb6811ef87de 70 switch(state)
yuhangzhu 0:249f6f78cd05 71 {
yuhangzhu 1:cb6811ef87de 72 case MODE_IDLE:
yuhangzhu 1:cb6811ef87de 73 pc.printf("%s", main_menu);
yuhangzhu 3:32e67d121c7f 74 recv = pc.getc();
yuhangzhu 23:0b6901c9302c 75 mode_idle_handler(&state, recv); //Change state based on recv input
yuhangzhu 17:54a003ac9610 76
yuhangzhu 3:32e67d121c7f 77 break;
yuhangzhu 24:f8fea5e5bf73 78 case MODE_SPI_RAW: //Input the SPI raw bits
yuhangzhu 24:f8fea5e5bf73 79 pc.printf("%s", cmd5);
yuhangzhu 24:f8fea5e5bf73 80 line_buf[3] = 255;
yuhangzhu 24:f8fea5e5bf73 81 line_buf[2] = 255;
yuhangzhu 24:f8fea5e5bf73 82 line_buf[1] = 255;
yuhangzhu 24:f8fea5e5bf73 83 line_buf[0] = 255;
yuhangzhu 24:f8fea5e5bf73 84 line_pt = 0;
yuhangzhu 24:f8fea5e5bf73 85 line_length = 0;
yuhangzhu 24:f8fea5e5bf73 86 while(1)
yuhangzhu 24:f8fea5e5bf73 87 {
yuhangzhu 24:f8fea5e5bf73 88 recv = pc.getc();
yuhangzhu 24:f8fea5e5bf73 89 if(recv == 13) //enter is pressed
yuhangzhu 24:f8fea5e5bf73 90 {
yuhangzhu 24:f8fea5e5bf73 91 #ifdef DEBUG
yuhangzhu 24:f8fea5e5bf73 92 pc.printf("decimal output : %d %d %d %d", line_buf[3], line_buf[2], line_buf[1], line_buf[0]);
yuhangzhu 24:f8fea5e5bf73 93 pc.printf("char output: %c %c %c %c", line_buf[3], line_buf[2], line_buf[1], line_buf[0]);
yuhangzhu 24:f8fea5e5bf73 94 pc.printf("length = %d\n", line_length);
yuhangzhu 24:f8fea5e5bf73 95 #endif
yuhangzhu 24:f8fea5e5bf73 96 break;
yuhangzhu 24:f8fea5e5bf73 97 }
yuhangzhu 24:f8fea5e5bf73 98 else if(recv == 8 || recv == 127)
yuhangzhu 24:f8fea5e5bf73 99 {
yuhangzhu 24:f8fea5e5bf73 100 if(line_length > 0) //Delete one char on screen
yuhangzhu 24:f8fea5e5bf73 101 {
yuhangzhu 24:f8fea5e5bf73 102 pc.putc(8);
yuhangzhu 24:f8fea5e5bf73 103 pc.putc(32);
yuhangzhu 24:f8fea5e5bf73 104 pc.putc(8);
yuhangzhu 24:f8fea5e5bf73 105 }
yuhangzhu 24:f8fea5e5bf73 106 if(line_length <= 4 && line_length>=1)
yuhangzhu 24:f8fea5e5bf73 107 {
yuhangzhu 24:f8fea5e5bf73 108 line_pt --;
yuhangzhu 24:f8fea5e5bf73 109 line_buf[line_pt] = 255;
yuhangzhu 24:f8fea5e5bf73 110 }
yuhangzhu 24:f8fea5e5bf73 111 if(line_length > 0)
yuhangzhu 24:f8fea5e5bf73 112 line_length --;
yuhangzhu 24:f8fea5e5bf73 113 }
yuhangzhu 24:f8fea5e5bf73 114 else if( (recv >= '0' && recv <= '9')||(recv >= 'a' && recv <= 'f')||(recv >= 'A' && recv <= 'F') )
yuhangzhu 24:f8fea5e5bf73 115 {
yuhangzhu 24:f8fea5e5bf73 116 pc.putc(recv);
yuhangzhu 24:f8fea5e5bf73 117 line_length ++;
yuhangzhu 24:f8fea5e5bf73 118
yuhangzhu 24:f8fea5e5bf73 119 if(line_length <= 4)
yuhangzhu 24:f8fea5e5bf73 120 {
yuhangzhu 24:f8fea5e5bf73 121 line_buf[line_pt] = recv;
yuhangzhu 24:f8fea5e5bf73 122 line_pt ++;
yuhangzhu 24:f8fea5e5bf73 123 }
yuhangzhu 24:f8fea5e5bf73 124
yuhangzhu 24:f8fea5e5bf73 125 }
yuhangzhu 24:f8fea5e5bf73 126
yuhangzhu 24:f8fea5e5bf73 127 }
yuhangzhu 24:f8fea5e5bf73 128 ret = parse_spi_raw(line_buf, line_length, &cha1_pha, &cha2_pha, &cha1_amp, &cha2_amp);
yuhangzhu 24:f8fea5e5bf73 129
yuhangzhu 24:f8fea5e5bf73 130 if(ret == PARSE_LONG) //Input string too long
yuhangzhu 24:f8fea5e5bf73 131 {
yuhangzhu 24:f8fea5e5bf73 132 pc.printf("%s", msg_strlong);
yuhangzhu 24:f8fea5e5bf73 133 pc.getc();
yuhangzhu 24:f8fea5e5bf73 134 }
yuhangzhu 24:f8fea5e5bf73 135 else if(ret == PARSE_EMPTY)
yuhangzhu 24:f8fea5e5bf73 136 {
yuhangzhu 24:f8fea5e5bf73 137 pc.printf("%s", msg_empty);
yuhangzhu 24:f8fea5e5bf73 138 pc.printf("%s", msg_ret);
yuhangzhu 24:f8fea5e5bf73 139 pc.getc();
yuhangzhu 24:f8fea5e5bf73 140 }
yuhangzhu 24:f8fea5e5bf73 141 else if(ret == PARSE_SHORT) //Input string has error
yuhangzhu 24:f8fea5e5bf73 142 {
yuhangzhu 24:f8fea5e5bf73 143 pc.printf("%s", msg_strshort);
yuhangzhu 24:f8fea5e5bf73 144 pc.getc();
yuhangzhu 24:f8fea5e5bf73 145 }
yuhangzhu 24:f8fea5e5bf73 146 else //Input is good
yuhangzhu 24:f8fea5e5bf73 147 {
yuhangzhu 24:f8fea5e5bf73 148 pc.printf("%s", msg_ok);
yuhangzhu 24:f8fea5e5bf73 149 #ifdef DEBUG
yuhangzhu 24:f8fea5e5bf73 150 pc.printf("%d %d %d %d \n", cha2_amp, cha2_pha, cha1_amp, cha1_pha);
yuhangzhu 24:f8fea5e5bf73 151 #endif
yuhangzhu 24:f8fea5e5bf73 152 pc.printf("%s", msg_ret);
yuhangzhu 24:f8fea5e5bf73 153 pc.getc();
yuhangzhu 24:f8fea5e5bf73 154 }
yuhangzhu 24:f8fea5e5bf73 155 state = MODE_IDLE;
yuhangzhu 24:f8fea5e5bf73 156 break;
yuhangzhu 24:f8fea5e5bf73 157
yuhangzhu 11:0e42dd431fb5 158
yuhangzhu 3:32e67d121c7f 159 case MODE_CHA1PHA:
yuhangzhu 5:50ea1502a949 160 case MODE_CHA1AMP:
yuhangzhu 5:50ea1502a949 161 case MODE_CHA2PHA:
yuhangzhu 5:50ea1502a949 162 case MODE_CHA2AMP:
yuhangzhu 5:50ea1502a949 163 if(state == MODE_CHA1PHA)
yuhangzhu 5:50ea1502a949 164 pc.printf("%s", cmd1);
yuhangzhu 5:50ea1502a949 165 else if(state == MODE_CHA1AMP)
yuhangzhu 5:50ea1502a949 166 pc.printf("%s", cmd2);
yuhangzhu 5:50ea1502a949 167 else if(state == MODE_CHA2PHA)
yuhangzhu 5:50ea1502a949 168 pc.printf("%s", cmd3);
yuhangzhu 5:50ea1502a949 169 else
yuhangzhu 5:50ea1502a949 170 pc.printf("%s", cmd4);
yuhangzhu 5:50ea1502a949 171
yuhangzhu 3:32e67d121c7f 172 line_buf[3] = 0;
yuhangzhu 5:50ea1502a949 173 line_buf[2] = 255;
yuhangzhu 5:50ea1502a949 174 line_buf[1] = 255;
yuhangzhu 5:50ea1502a949 175 line_buf[0] = 255;
yuhangzhu 3:32e67d121c7f 176 line_pt = 0;
yuhangzhu 4:e8142db2bbfd 177 line_length = 0;
yuhangzhu 3:32e67d121c7f 178
yuhangzhu 12:5e4cba1182ab 179 while(1) //Character input into line buffer, terminated by enter key
yuhangzhu 3:32e67d121c7f 180 {
yuhangzhu 3:32e67d121c7f 181 recv = pc.getc();
yuhangzhu 23:0b6901c9302c 182 if(recv == 13) //Enter is pressed, break
yuhangzhu 3:32e67d121c7f 183 {
yuhangzhu 4:e8142db2bbfd 184 if(line_length == 0)
yuhangzhu 6:e510aab8f2ce 185 line_buf[3] = LINEBUF_EMPTY;
yuhangzhu 6:e510aab8f2ce 186 else if(line_length > 3)
yuhangzhu 6:e510aab8f2ce 187 line_buf[3] = LINEBUF_TOOLONG;
yuhangzhu 3:32e67d121c7f 188 else
yuhangzhu 6:e510aab8f2ce 189 line_buf[3] = LINEBUF_OK;
yuhangzhu 8:f0c3d5911b87 190 #ifdef DEBUG
yuhangzhu 8:f0c3d5911b87 191 pc.printf("decimal output : %d %d %d %d", line_buf[3], line_buf[2], line_buf[1], line_buf[0]);
yuhangzhu 8:f0c3d5911b87 192 pc.printf("char output: %c %c %c %c", line_buf[3], line_buf[2], line_buf[1], line_buf[0]);
yuhangzhu 8:f0c3d5911b87 193 #endif
yuhangzhu 8:f0c3d5911b87 194
yuhangzhu 4:e8142db2bbfd 195 break;
yuhangzhu 3:32e67d121c7f 196 }
yuhangzhu 23:0b6901c9302c 197 else if(recv == 8 || recv == 127) //Backspace is pressed, delete one character both on screen and line buffer
yuhangzhu 3:32e67d121c7f 198 {
yuhangzhu 23:0b6901c9302c 199 if(line_length > 0) //Delete one char on screen
yuhangzhu 21:4d6b26eecdac 200 {
yuhangzhu 21:4d6b26eecdac 201 pc.putc(8);
yuhangzhu 21:4d6b26eecdac 202 pc.putc(32);
yuhangzhu 21:4d6b26eecdac 203 pc.putc(8);
yuhangzhu 21:4d6b26eecdac 204 }
yuhangzhu 4:e8142db2bbfd 205
yuhangzhu 4:e8142db2bbfd 206 if(line_length <= 3 && line_length>=1)
yuhangzhu 3:32e67d121c7f 207 {
yuhangzhu 4:e8142db2bbfd 208 line_pt --;
yuhangzhu 3:32e67d121c7f 209 line_buf[line_pt] = 255;
yuhangzhu 3:32e67d121c7f 210 }
yuhangzhu 4:e8142db2bbfd 211 if(line_length > 0)
yuhangzhu 4:e8142db2bbfd 212 line_length --;
yuhangzhu 3:32e67d121c7f 213 }
yuhangzhu 23:0b6901c9302c 214 else if(recv == '.' || recv == '-' || (recv >= '0' && recv <= '9') ) //The line buffer accepts -, ., 0-9 only
yuhangzhu 3:32e67d121c7f 215 {
yuhangzhu 3:32e67d121c7f 216 pc.putc(recv);
yuhangzhu 4:e8142db2bbfd 217 line_length ++;
yuhangzhu 4:e8142db2bbfd 218
yuhangzhu 4:e8142db2bbfd 219 if(line_length <= 3)
yuhangzhu 4:e8142db2bbfd 220 {
yuhangzhu 4:e8142db2bbfd 221 line_buf[line_pt] = recv;
yuhangzhu 3:32e67d121c7f 222 line_pt ++;
yuhangzhu 4:e8142db2bbfd 223 }
yuhangzhu 3:32e67d121c7f 224 }
yuhangzhu 3:32e67d121c7f 225 }
yuhangzhu 23:0b6901c9302c 226 //Input over, now checking
yuhangzhu 23:0b6901c9302c 227 //Check phase shift input
yuhangzhu 6:e510aab8f2ce 228 if(state == MODE_CHA1PHA || state == MODE_CHA2PHA)
yuhangzhu 6:e510aab8f2ce 229 {
yuhangzhu 6:e510aab8f2ce 230 if(state == MODE_CHA1PHA)
yuhangzhu 6:e510aab8f2ce 231 ret = parse_phase(line_buf, &cha1_pha);
yuhangzhu 6:e510aab8f2ce 232 else
yuhangzhu 6:e510aab8f2ce 233 ret = parse_phase(line_buf, &cha2_pha);
yuhangzhu 6:e510aab8f2ce 234
yuhangzhu 7:c268547fb6c8 235 if(ret == PARSE_LONG) //Input string too long
yuhangzhu 6:e510aab8f2ce 236 {
yuhangzhu 6:e510aab8f2ce 237 pc.printf("%s", msg_strlong);
yuhangzhu 6:e510aab8f2ce 238 pc.getc();
yuhangzhu 6:e510aab8f2ce 239 }
yuhangzhu 7:c268547fb6c8 240 else if(ret == PARSE_EMPTY)
yuhangzhu 7:c268547fb6c8 241 {
yuhangzhu 7:c268547fb6c8 242 pc.printf("%s", msg_empty);
yuhangzhu 7:c268547fb6c8 243 pc.printf("%s", msg_ret);
yuhangzhu 7:c268547fb6c8 244 pc.getc();
yuhangzhu 7:c268547fb6c8 245 }
yuhangzhu 7:c268547fb6c8 246 else if(ret == PARSE_ERR) //Input string has error
yuhangzhu 6:e510aab8f2ce 247 {
yuhangzhu 6:e510aab8f2ce 248 pc.printf("%s", msg_err);
yuhangzhu 6:e510aab8f2ce 249 pc.getc();
yuhangzhu 6:e510aab8f2ce 250 }
yuhangzhu 23:0b6901c9302c 251 else if(ret == PARSE_ROUNDED) //Input is rounded, show the rounded value
yuhangzhu 6:e510aab8f2ce 252 {
yuhangzhu 6:e510aab8f2ce 253 if(state == MODE_CHA1PHA)
yuhangzhu 9:3eaacc1ad758 254 pc.printf("%s %d\n", msg_rounded, cha1_pha*-7);
yuhangzhu 6:e510aab8f2ce 255 else if(state == MODE_CHA2PHA)
yuhangzhu 9:3eaacc1ad758 256 pc.printf("%s %d\n", msg_rounded, cha2_pha*-7);
yuhangzhu 6:e510aab8f2ce 257
yuhangzhu 6:e510aab8f2ce 258 pc.printf("%s", msg_ret);
yuhangzhu 6:e510aab8f2ce 259 pc.getc();
yuhangzhu 6:e510aab8f2ce 260 }
yuhangzhu 7:c268547fb6c8 261 else //Input is good
yuhangzhu 6:e510aab8f2ce 262 {
yuhangzhu 6:e510aab8f2ce 263 pc.printf("%s", msg_ok);
yuhangzhu 8:f0c3d5911b87 264 #ifdef DEBUG
yuhangzhu 6:e510aab8f2ce 265 pc.printf("%d %d\n", cha1_pha*7, cha2_pha*7);
yuhangzhu 8:f0c3d5911b87 266 #endif
yuhangzhu 6:e510aab8f2ce 267 pc.printf("%s", msg_ret);
yuhangzhu 6:e510aab8f2ce 268 pc.getc();
yuhangzhu 6:e510aab8f2ce 269 }
yuhangzhu 6:e510aab8f2ce 270 }
yuhangzhu 3:32e67d121c7f 271
yuhangzhu 23:0b6901c9302c 272 //Check attenuation input
yuhangzhu 7:c268547fb6c8 273 if(state == MODE_CHA1AMP || state == MODE_CHA2AMP)
yuhangzhu 7:c268547fb6c8 274 {
yuhangzhu 7:c268547fb6c8 275 if(state == MODE_CHA1AMP)
yuhangzhu 7:c268547fb6c8 276 ret = parse_amp(line_buf, &cha1_amp);
yuhangzhu 7:c268547fb6c8 277 else
yuhangzhu 7:c268547fb6c8 278 ret = parse_amp(line_buf, &cha2_amp);
yuhangzhu 7:c268547fb6c8 279
yuhangzhu 7:c268547fb6c8 280 if(ret == PARSE_LONG) //Input string too long
yuhangzhu 7:c268547fb6c8 281 {
yuhangzhu 7:c268547fb6c8 282 pc.printf("%s", msg_strlong);
yuhangzhu 7:c268547fb6c8 283 pc.getc();
yuhangzhu 7:c268547fb6c8 284 }
yuhangzhu 7:c268547fb6c8 285 else if(ret == PARSE_EMPTY)
yuhangzhu 7:c268547fb6c8 286 {
yuhangzhu 7:c268547fb6c8 287 pc.printf("%s", msg_empty);
yuhangzhu 7:c268547fb6c8 288 pc.printf("%s", msg_ret);
yuhangzhu 7:c268547fb6c8 289 pc.getc();
yuhangzhu 7:c268547fb6c8 290 }
yuhangzhu 7:c268547fb6c8 291 else if(ret == PARSE_ERR) //Input string has error
yuhangzhu 7:c268547fb6c8 292 {
yuhangzhu 7:c268547fb6c8 293 pc.printf("%s", msg_err);
yuhangzhu 7:c268547fb6c8 294 pc.getc();
yuhangzhu 7:c268547fb6c8 295 }
yuhangzhu 7:c268547fb6c8 296 else if(ret == PARSE_ROUNDED) //Input is rounded, show the rounded value
yuhangzhu 7:c268547fb6c8 297 {
yuhangzhu 7:c268547fb6c8 298 if(state == MODE_CHA1AMP)
yuhangzhu 8:f0c3d5911b87 299 pc.printf("%s %.1f\n", msg_rounded, cha1_amp*5.0/10.0);
yuhangzhu 7:c268547fb6c8 300 else if(state == MODE_CHA2AMP)
yuhangzhu 8:f0c3d5911b87 301 pc.printf("%s %.1f\n", msg_rounded, cha2_amp*5.0/10.0);
yuhangzhu 7:c268547fb6c8 302
yuhangzhu 7:c268547fb6c8 303 pc.printf("%s", msg_ret);
yuhangzhu 7:c268547fb6c8 304 pc.getc();
yuhangzhu 7:c268547fb6c8 305 }
yuhangzhu 7:c268547fb6c8 306 else //Input is good
yuhangzhu 7:c268547fb6c8 307 {
yuhangzhu 7:c268547fb6c8 308 pc.printf("%s", msg_ok);
yuhangzhu 8:f0c3d5911b87 309 #ifdef DEBUG
yuhangzhu 7:c268547fb6c8 310 pc.printf("%d %d\n", cha1_amp*5, cha2_amp*5);
yuhangzhu 8:f0c3d5911b87 311 #endif
yuhangzhu 7:c268547fb6c8 312 pc.printf("%s", msg_ret);
yuhangzhu 7:c268547fb6c8 313 pc.getc();
yuhangzhu 7:c268547fb6c8 314 }
yuhangzhu 7:c268547fb6c8 315 }
yuhangzhu 7:c268547fb6c8 316 state = MODE_IDLE; //back to idle state after input
yuhangzhu 3:32e67d121c7f 317 break;
yuhangzhu 5:50ea1502a949 318
yuhangzhu 23:0b6901c9302c 319 //In display mode, show current parameters
yuhangzhu 8:f0c3d5911b87 320 case MODE_DISPLAY:
yuhangzhu 18:452b5da21cfd 321 pc.printf("\n\n ******** Current Parameters ********\n\n");
yuhangzhu 14:fb67a8b1d1a5 322 pc.printf("Phase shift for RF out1 is %d degrees\n", cha1_pha*-7);
yuhangzhu 24:f8fea5e5bf73 323 pc.printf("Attenuation for RF out1 is %.1f dB\n", cha1_amp*5.0/10.0);
yuhangzhu 14:fb67a8b1d1a5 324 pc.printf("Phase shift for RF out2 is %d degrees\n", cha2_pha*-7);
yuhangzhu 24:f8fea5e5bf73 325 pc.printf("Attenuation for RF out2 is %.1f dB\n", cha2_amp*5.0/10.0);
yuhangzhu 8:f0c3d5911b87 326 pc.printf("%s", msg_ret);
yuhangzhu 8:f0c3d5911b87 327 pc.getc();
yuhangzhu 8:f0c3d5911b87 328 state = MODE_IDLE;
yuhangzhu 8:f0c3d5911b87 329 break;
yuhangzhu 12:5e4cba1182ab 330 //Help mode, displays help info
yuhangzhu 9:3eaacc1ad758 331 case MODE_HELP:
yuhangzhu 18:452b5da21cfd 332 pc.printf("\n\n******** Help info ********\n");
yuhangzhu 9:3eaacc1ad758 333 pc.printf("%s", msg_help);
yuhangzhu 9:3eaacc1ad758 334 pc.printf("%s", msg_ret);
yuhangzhu 9:3eaacc1ad758 335 pc.getc();
yuhangzhu 9:3eaacc1ad758 336 state = MODE_IDLE;
yuhangzhu 9:3eaacc1ad758 337 break;
yuhangzhu 9:3eaacc1ad758 338
yuhangzhu 12:5e4cba1182ab 339 case MODE_SEND: //In sending mode, display and send through SPI
yuhangzhu 15:3f3560332bc1 340
yuhangzhu 15:3f3560332bc1 341 //Calculate the send info
yuhangzhu 15:3f3560332bc1 342 spi_stream = (cha2_amp << 12) | (cha2_pha << 8) | (cha1_amp << 4) | (cha1_pha);
yuhangzhu 15:3f3560332bc1 343 spi_first_byte_s = (cha2_amp << 4) | (cha2_pha);
yuhangzhu 15:3f3560332bc1 344 spi_second_byte_s = (cha1_amp << 4) | (cha1_pha);
yuhangzhu 11:0e42dd431fb5 345
yuhangzhu 23:0b6901c9302c 346 cs = 0; //SPI start sending, send and record the response
yuhangzhu 15:3f3560332bc1 347 spi_first_byte_r = spi.write(spi_first_byte_s);
yuhangzhu 15:3f3560332bc1 348 spi_second_byte_r = spi.write(spi_second_byte_s);
yuhangzhu 15:3f3560332bc1 349 cs = 1;
yuhangzhu 15:3f3560332bc1 350
yuhangzhu 15:3f3560332bc1 351 //Start printint...
yuhangzhu 18:452b5da21cfd 352 pc.printf("******** Now sending parameters ********\n\n");
yuhangzhu 14:fb67a8b1d1a5 353 pc.printf("Phase shift for RF out1 is %d degrees\n", cha1_pha*-7);
yuhangzhu 24:f8fea5e5bf73 354 pc.printf("Attenuation for RF out1 is %.1f dB\n", cha1_amp*5.0/10.0);
yuhangzhu 14:fb67a8b1d1a5 355 pc.printf("Phase shift for RF out2 is %d degrees\n", cha2_pha*-7);
yuhangzhu 24:f8fea5e5bf73 356 pc.printf("Attenuation for RF out2 is %.1f dB\n", cha2_amp*5.0/10.0);
yuhangzhu 15:3f3560332bc1 357 pc.printf("\nSPI bit stream sent:\n");
yuhangzhu 15:3f3560332bc1 358 pc.printf("%s", bit_index);
yuhangzhu 14:fb67a8b1d1a5 359
yuhangzhu 15:3f3560332bc1 360 //Output the SPI bit stream sent for user reference
yuhangzhu 10:ff8c2470f019 361 for(i=0; i<=15; i++)
yuhangzhu 10:ff8c2470f019 362 {
yuhangzhu 14:fb67a8b1d1a5 363
yuhangzhu 11:0e42dd431fb5 364 if(spi_stream >= 0x8000)
yuhangzhu 14:fb67a8b1d1a5 365 pc.printf("%d ", 1);
yuhangzhu 10:ff8c2470f019 366 else
yuhangzhu 14:fb67a8b1d1a5 367 pc.printf("%d ", 0);
yuhangzhu 14:fb67a8b1d1a5 368
yuhangzhu 14:fb67a8b1d1a5 369 if(i == 7)
yuhangzhu 14:fb67a8b1d1a5 370 pc.printf(" ");
yuhangzhu 14:fb67a8b1d1a5 371
yuhangzhu 11:0e42dd431fb5 372 spi_stream = spi_stream << 1;
yuhangzhu 10:ff8c2470f019 373 }
yuhangzhu 18:452b5da21cfd 374 //pc.printf("\n\nParameters sent OK\n\n\n\n");
yuhangzhu 11:0e42dd431fb5 375
yuhangzhu 15:3f3560332bc1 376
yuhangzhu 17:54a003ac9610 377 //Output the previous parameters:
yuhangzhu 18:452b5da21cfd 378 pc.printf("\n\n\n******** Now displaying previous parameters ********\n");
yuhangzhu 16:fbe18dbc2fb7 379 pc.printf("\nPrevious phase shift for RF out1 is %d degrees\n", (spi_second_byte_r&0x07)*-7);
yuhangzhu 23:0b6901c9302c 380 pc.printf("Previous attenuation for RF out1 is %.1f dB\n", (spi_second_byte_r>>4)*5.0/10.0);
yuhangzhu 16:fbe18dbc2fb7 381 pc.printf("Previous phase shift for RF out2 is %d degrees\n", (spi_first_byte_r&0x07)*-7);
yuhangzhu 23:0b6901c9302c 382 pc.printf("Previous attenuation for RF out2 is %.1f dB\n", (spi_first_byte_r>>4)*5.0/10.0);
yuhangzhu 17:54a003ac9610 383 //SPI bit stream for previous parameters
yuhangzhu 15:3f3560332bc1 384 pc.printf("\nSPI bit stream received:\n");
yuhangzhu 15:3f3560332bc1 385 pc.printf("%s", bit_index);
yuhangzhu 15:3f3560332bc1 386 for(i=0; i<=7; i++)
yuhangzhu 15:3f3560332bc1 387 {
yuhangzhu 15:3f3560332bc1 388 if(spi_first_byte_r >= 0x80)
yuhangzhu 15:3f3560332bc1 389 pc.printf("%d ", 1);
yuhangzhu 15:3f3560332bc1 390 else
yuhangzhu 15:3f3560332bc1 391 pc.printf("%d ", 0);
yuhangzhu 15:3f3560332bc1 392
yuhangzhu 15:3f3560332bc1 393 spi_first_byte_r = spi_first_byte_r << 1;
yuhangzhu 15:3f3560332bc1 394 }
yuhangzhu 15:3f3560332bc1 395 pc.printf(" ");
yuhangzhu 15:3f3560332bc1 396 for(i=0; i<=7; i++)
yuhangzhu 15:3f3560332bc1 397 {
yuhangzhu 15:3f3560332bc1 398 if(spi_second_byte_r >= 0x80)
yuhangzhu 15:3f3560332bc1 399 pc.printf("%d ", 1);
yuhangzhu 15:3f3560332bc1 400 else
yuhangzhu 15:3f3560332bc1 401 pc.printf("%d ", 0);
yuhangzhu 15:3f3560332bc1 402
yuhangzhu 15:3f3560332bc1 403 spi_second_byte_r = spi_second_byte_r << 1;
yuhangzhu 15:3f3560332bc1 404 }
yuhangzhu 16:fbe18dbc2fb7 405
yuhangzhu 15:3f3560332bc1 406 pc.printf("\n\n\n");
yuhangzhu 15:3f3560332bc1 407
yuhangzhu 10:ff8c2470f019 408 pc.printf("%s", msg_ret);
yuhangzhu 10:ff8c2470f019 409 pc.getc();
yuhangzhu 10:ff8c2470f019 410 state = MODE_IDLE;
yuhangzhu 10:ff8c2470f019 411 break;
yuhangzhu 9:3eaacc1ad758 412 default:
yuhangzhu 9:3eaacc1ad758 413 state = MODE_IDLE;
yuhangzhu 1:cb6811ef87de 414 }
yuhangzhu 0:249f6f78cd05 415
yuhangzhu 0:249f6f78cd05 416
yuhangzhu 0:249f6f78cd05 417 }
yuhangzhu 0:249f6f78cd05 418
yuhangzhu 0:249f6f78cd05 419
yuhangzhu 0:249f6f78cd05 420 return 0;
yuhangzhu 0:249f6f78cd05 421 }