yuhang zhu / Mbed 2 deprecated ADAM_menu

Dependencies:   mbed

Committer:
yuhangzhu
Date:
Wed Jul 24 16:10:15 2013 +0000
Revision:
28:b5bd93f9732b
Parent:
27:231333972023
Child:
29:fd58b8a4162e
This version is for ADAM SPI menu

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