This is a working test program for radio AC4790-200

Dependencies:   mbed

Committer:
kcccansat
Date:
Tue Jul 20 00:08:59 2010 +0000
Revision:
0:a90ccfbf8695

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kcccansat 0:a90ccfbf8695 1 /* This is a short test program for AC4790-200 transceiver*/
kcccansat 0:a90ccfbf8695 2 /* We have radio's tx rx pin collected to mbed's p10 and p9 respectively, and have radio connected to external power 3.3v - 5v*, and GND
kcccansat 0:a90ccfbf8695 3 only 4 pins are used from the radio*/
kcccansat 0:a90ccfbf8695 4 #include "mbed.h"
kcccansat 0:a90ccfbf8695 5 #define MAC_1 57
kcccansat 0:a90ccfbf8695 6 #define MAC_2 147 // MAC for relay
kcccansat 0:a90ccfbf8695 7 #define MAC_3 98
kcccansat 0:a90ccfbf8695 8
kcccansat 0:a90ccfbf8695 9 #define MAC_4 57
kcccansat 0:a90ccfbf8695 10 #define MAC_5 149 //MAC for GCS
kcccansat 0:a90ccfbf8695 11 #define MAC_6 98
kcccansat 0:a90ccfbf8695 12
kcccansat 0:a90ccfbf8695 13 Serial laird(p9, p10); //Creates a variable for serial comunication through pin 9 and 10
kcccansat 0:a90ccfbf8695 14 Serial pc(USBTX, USBRX);//Opens up serial communication through the USB port via the computer
kcccansat 0:a90ccfbf8695 15
kcccansat 0:a90ccfbf8695 16
kcccansat 0:a90ccfbf8695 17 int enter_cmd();
kcccansat 0:a90ccfbf8695 18 void get_respond();
kcccansat 0:a90ccfbf8695 19 int exit_cmd();
kcccansat 0:a90ccfbf8695 20 int api();
kcccansat 0:a90ccfbf8695 21 int write_cb();
kcccansat 0:a90ccfbf8695 22 void radio_send(char *to_send);
kcccansat 0:a90ccfbf8695 23 void radio_received(char *received);
kcccansat 0:a90ccfbf8695 24 void relay_send(char *to_send);
kcccansat 0:a90ccfbf8695 25
kcccansat 0:a90ccfbf8695 26 int main() {
kcccansat 0:a90ccfbf8695 27
kcccansat 0:a90ccfbf8695 28
kcccansat 0:a90ccfbf8695 29 int i;
kcccansat 0:a90ccfbf8695 30 char to_send[30] = {"ACD,100"}; //120byte max in data field, 4 byte a char??TEST, 30 chars max!!
kcccansat 0:a90ccfbf8695 31 char received[30] = {'\0'};
kcccansat 0:a90ccfbf8695 32
kcccansat 0:a90ccfbf8695 33 wait(3);
kcccansat 0:a90ccfbf8695 34 /***************set up the serial interface parameters**********/
kcccansat 0:a90ccfbf8695 35 laird.baud(57600); //set up the baud rate, needs to be the same as the baud rate of the radio
kcccansat 0:a90ccfbf8695 36 laird.format(8, Serial::None, 1); //set up the format, 8 bits, none parity, 1 stop bit
kcccansat 0:a90ccfbf8695 37
kcccansat 0:a90ccfbf8695 38
kcccansat 0:a90ccfbf8695 39 wait(1);
kcccansat 0:a90ccfbf8695 40 /*************enter command mode *****************/
kcccansat 0:a90ccfbf8695 41
kcccansat 0:a90ccfbf8695 42 while(!enter_cmd()) ; //send hex command to enter the command mode
kcccansat 0:a90ccfbf8695 43
kcccansat 0:a90ccfbf8695 44 /*the supposed hex respond after enter the command mode : cc 43 4f 4d*/
kcccansat 0:a90ccfbf8695 45 pc.printf("enter cmd respond: ");
kcccansat 0:a90ccfbf8695 46 for( i = 0; i < 4; i++)
kcccansat 0:a90ccfbf8695 47 get_respond();
kcccansat 0:a90ccfbf8695 48 wait_ms(500);
kcccansat 0:a90ccfbf8695 49 pc.printf("\n\r");
kcccansat 0:a90ccfbf8695 50
kcccansat 0:a90ccfbf8695 51 /*************change channel number**************/
kcccansat 0:a90ccfbf8695 52 laird.putc('\xcc');
kcccansat 0:a90ccfbf8695 53 laird.putc('\x01');
kcccansat 0:a90ccfbf8695 54 laird.putc('\x10');
kcccansat 0:a90ccfbf8695 55
kcccansat 0:a90ccfbf8695 56 pc.printf("change channle respond: ");
kcccansat 0:a90ccfbf8695 57 get_respond();
kcccansat 0:a90ccfbf8695 58 get_respond();
kcccansat 0:a90ccfbf8695 59 pc.printf("\r\n");
kcccansat 0:a90ccfbf8695 60
kcccansat 0:a90ccfbf8695 61 /*************configure API control ****************/
kcccansat 0:a90ccfbf8695 62 while(!api()); //send hex command to configure API control
kcccansat 0:a90ccfbf8695 63
kcccansat 0:a90ccfbf8695 64 pc.printf("API control respond: "); //expected respond: cc 13
kcccansat 0:a90ccfbf8695 65 for( i = 0; i <2; i++)
kcccansat 0:a90ccfbf8695 66 get_respond();
kcccansat 0:a90ccfbf8695 67 wait_ms(500);
kcccansat 0:a90ccfbf8695 68 pc.printf("\n\r");
kcccansat 0:a90ccfbf8695 69
kcccansat 0:a90ccfbf8695 70 /************** EEPROM write control 1 byte********/
kcccansat 0:a90ccfbf8695 71 while(!write_cb());
kcccansat 0:a90ccfbf8695 72
kcccansat 0:a90ccfbf8695 73 pc.printf("write control byte respond: "); //expected respond: 56 01 41
kcccansat 0:a90ccfbf8695 74 for( i = 0; i <3; i++)
kcccansat 0:a90ccfbf8695 75 get_respond();
kcccansat 0:a90ccfbf8695 76 wait_ms(500);
kcccansat 0:a90ccfbf8695 77 pc.printf("\n\r");
kcccansat 0:a90ccfbf8695 78
kcccansat 0:a90ccfbf8695 79 /************read destination MAC address*******/
kcccansat 0:a90ccfbf8695 80 laird.putc('\xcc');
kcccansat 0:a90ccfbf8695 81 laird.putc('\x11');
kcccansat 0:a90ccfbf8695 82
kcccansat 0:a90ccfbf8695 83 pc.printf("Destination MAC address respond: ");
kcccansat 0:a90ccfbf8695 84 for(i = 0; i< 4; i++)
kcccansat 0:a90ccfbf8695 85 get_respond();
kcccansat 0:a90ccfbf8695 86 wait_ms(500);
kcccansat 0:a90ccfbf8695 87 pc.printf("\n\r");
kcccansat 0:a90ccfbf8695 88
kcccansat 0:a90ccfbf8695 89 /**************read own MAC address************/
kcccansat 0:a90ccfbf8695 90 laird.putc('\xcc');
kcccansat 0:a90ccfbf8695 91 laird.putc('\xc0');
kcccansat 0:a90ccfbf8695 92 laird.putc('\x80');
kcccansat 0:a90ccfbf8695 93 laird.putc('\x06');
kcccansat 0:a90ccfbf8695 94
kcccansat 0:a90ccfbf8695 95 pc.printf("Own MAC address: ");
kcccansat 0:a90ccfbf8695 96 for(i = 0; i < 9; i++)
kcccansat 0:a90ccfbf8695 97 get_respond();
kcccansat 0:a90ccfbf8695 98 wait_ms(500);
kcccansat 0:a90ccfbf8695 99 pc.printf("\n\r");
kcccansat 0:a90ccfbf8695 100
kcccansat 0:a90ccfbf8695 101 /************write destination MAC address*********/
kcccansat 0:a90ccfbf8695 102
kcccansat 0:a90ccfbf8695 103 /*
kcccansat 0:a90ccfbf8695 104 laird.putc('\xcc'); //ground station mac address: 61 78 32
kcccansat 0:a90ccfbf8695 105 laird.putc('\x10');
kcccansat 0:a90ccfbf8695 106 laird.putc(MAC_1);
kcccansat 0:a90ccfbf8695 107 laird.putc(MAC_2);
kcccansat 0:a90ccfbf8695 108 laird.putc(MAC_3);
kcccansat 0:a90ccfbf8695 109
kcccansat 0:a90ccfbf8695 110
kcccansat 0:a90ccfbf8695 111 pc.printf("after write MAC respond: ");
kcccansat 0:a90ccfbf8695 112 for(i = 0; i < 4; i++)
kcccansat 0:a90ccfbf8695 113 get_respond();
kcccansat 0:a90ccfbf8695 114 wait_ms(500);
kcccansat 0:a90ccfbf8695 115 pc.printf("\n\r");
kcccansat 0:a90ccfbf8695 116 */
kcccansat 0:a90ccfbf8695 117 /***************read DES key**********************/
kcccansat 0:a90ccfbf8695 118 laird.putc('\xcc');
kcccansat 0:a90ccfbf8695 119 laird.putc('\xc0');
kcccansat 0:a90ccfbf8695 120 laird.putc('\xd0');
kcccansat 0:a90ccfbf8695 121 laird.putc('\x07');
kcccansat 0:a90ccfbf8695 122
kcccansat 0:a90ccfbf8695 123 pc.printf("DES key: ");
kcccansat 0:a90ccfbf8695 124 for(i = 0; i < 10; i++)
kcccansat 0:a90ccfbf8695 125 get_respond();
kcccansat 0:a90ccfbf8695 126 wait_ms(500);
kcccansat 0:a90ccfbf8695 127 pc.printf("\n\r");
kcccansat 0:a90ccfbf8695 128
kcccansat 0:a90ccfbf8695 129 /**************exit command mode ******************/
kcccansat 0:a90ccfbf8695 130 while(!exit_cmd()); //send hex command to exit the command mode
kcccansat 0:a90ccfbf8695 131
kcccansat 0:a90ccfbf8695 132 /*the expected hex respond after exit the command mode: cc 44 41 54*/
kcccansat 0:a90ccfbf8695 133 pc.printf("exit cmd respond: ");
kcccansat 0:a90ccfbf8695 134 for( i = 0; i < 4; i++)
kcccansat 0:a90ccfbf8695 135 get_respond();
kcccansat 0:a90ccfbf8695 136 wait_ms(500);
kcccansat 0:a90ccfbf8695 137 pc.printf("\n\r");
kcccansat 0:a90ccfbf8695 138
kcccansat 0:a90ccfbf8695 139 /****************communication ****************/
kcccansat 0:a90ccfbf8695 140 /*
kcccansat 0:a90ccfbf8695 141 while(1){
kcccansat 0:a90ccfbf8695 142 radio_send(to_send);
kcccansat 0:a90ccfbf8695 143 wait(5);
kcccansat 0:a90ccfbf8695 144 // wait(1);
kcccansat 0:a90ccfbf8695 145 // pc.printf("done sending\r\n");
kcccansat 0:a90ccfbf8695 146 }
kcccansat 0:a90ccfbf8695 147 */
kcccansat 0:a90ccfbf8695 148 /*
kcccansat 0:a90ccfbf8695 149 while(1){
kcccansat 0:a90ccfbf8695 150 relay_send(to_send);
kcccansat 0:a90ccfbf8695 151 wait(5);
kcccansat 0:a90ccfbf8695 152 }
kcccansat 0:a90ccfbf8695 153 */
kcccansat 0:a90ccfbf8695 154 /* radio_received(received);
kcccansat 0:a90ccfbf8695 155 for(i = 0; received[i] != '\0'; i++)
kcccansat 0:a90ccfbf8695 156 {
kcccansat 0:a90ccfbf8695 157 pc.printf("%x ", received[i]);
kcccansat 0:a90ccfbf8695 158 received[i] = '\0';
kcccansat 0:a90ccfbf8695 159
kcccansat 0:a90ccfbf8695 160 }
kcccansat 0:a90ccfbf8695 161 pc.printf("\r\n");
kcccansat 0:a90ccfbf8695 162 */
kcccansat 0:a90ccfbf8695 163
kcccansat 0:a90ccfbf8695 164 while(1)
kcccansat 0:a90ccfbf8695 165 {
kcccansat 0:a90ccfbf8695 166 radio_received(received);
kcccansat 0:a90ccfbf8695 167 for(i = 0; received[i] != '\0'; i++)
kcccansat 0:a90ccfbf8695 168 {
kcccansat 0:a90ccfbf8695 169 pc.printf("%x ", received[i]);
kcccansat 0:a90ccfbf8695 170 received[i] = '\0';
kcccansat 0:a90ccfbf8695 171
kcccansat 0:a90ccfbf8695 172 }
kcccansat 0:a90ccfbf8695 173 pc.printf("\r\n");
kcccansat 0:a90ccfbf8695 174
kcccansat 0:a90ccfbf8695 175 wait(5);
kcccansat 0:a90ccfbf8695 176 radio_send(to_send);
kcccansat 0:a90ccfbf8695 177 pc.printf("reply send\r\n");
kcccansat 0:a90ccfbf8695 178 }
kcccansat 0:a90ccfbf8695 179
kcccansat 0:a90ccfbf8695 180 /*
kcccansat 0:a90ccfbf8695 181
kcccansat 0:a90ccfbf8695 182 while(1)
kcccansat 0:a90ccfbf8695 183 {
kcccansat 0:a90ccfbf8695 184 radio_send(to_send);
kcccansat 0:a90ccfbf8695 185 wait(1);
kcccansat 0:a90ccfbf8695 186 pc.printf("done sending\r\n");
kcccansat 0:a90ccfbf8695 187 }
kcccansat 0:a90ccfbf8695 188 */
kcccansat 0:a90ccfbf8695 189
kcccansat 0:a90ccfbf8695 190 /*
kcccansat 0:a90ccfbf8695 191 while(1)
kcccansat 0:a90ccfbf8695 192 {
kcccansat 0:a90ccfbf8695 193 i = 0;
kcccansat 0:a90ccfbf8695 194
kcccansat 0:a90ccfbf8695 195 pc.printf("done1 ");
kcccansat 0:a90ccfbf8695 196 radio_received(received);
kcccansat 0:a90ccfbf8695 197 pc.printf("done2 ");
kcccansat 0:a90ccfbf8695 198 while(received[i] != '\0')
kcccansat 0:a90ccfbf8695 199 pc.putc( received[i++] );
kcccansat 0:a90ccfbf8695 200 wait(1);
kcccansat 0:a90ccfbf8695 201 for(i = 0; i < 30; i++)
kcccansat 0:a90ccfbf8695 202 received[i] = '\0';
kcccansat 0:a90ccfbf8695 203 }
kcccansat 0:a90ccfbf8695 204 */
kcccansat 0:a90ccfbf8695 205 }
kcccansat 0:a90ccfbf8695 206
kcccansat 0:a90ccfbf8695 207
kcccansat 0:a90ccfbf8695 208
kcccansat 0:a90ccfbf8695 209 /*************funtions used with radio****************/
kcccansat 0:a90ccfbf8695 210 int enter_cmd()
kcccansat 0:a90ccfbf8695 211 {
kcccansat 0:a90ccfbf8695 212 if (laird.writeable()) {
kcccansat 0:a90ccfbf8695 213 //enter cmd mode, hex value: 0x41 0x54 0x2B 0x2B 0x2B 0x0D
kcccansat 0:a90ccfbf8695 214 laird.putc('\x41');
kcccansat 0:a90ccfbf8695 215 laird.putc('\x54');
kcccansat 0:a90ccfbf8695 216 laird.putc('\x2b');
kcccansat 0:a90ccfbf8695 217 laird.putc('\x2b');
kcccansat 0:a90ccfbf8695 218 laird.putc('\x2b');
kcccansat 0:a90ccfbf8695 219 laird.putc('\x0d');
kcccansat 0:a90ccfbf8695 220 return 1;
kcccansat 0:a90ccfbf8695 221 }
kcccansat 0:a90ccfbf8695 222 else return 0;
kcccansat 0:a90ccfbf8695 223 }
kcccansat 0:a90ccfbf8695 224
kcccansat 0:a90ccfbf8695 225 void get_respond()
kcccansat 0:a90ccfbf8695 226 {
kcccansat 0:a90ccfbf8695 227 while(laird.readable() == 0); //wait until there is char to read
kcccansat 0:a90ccfbf8695 228 pc.printf("%x ", laird.getc()); //print out the char in hex form
kcccansat 0:a90ccfbf8695 229 }
kcccansat 0:a90ccfbf8695 230
kcccansat 0:a90ccfbf8695 231 int exit_cmd()
kcccansat 0:a90ccfbf8695 232 {
kcccansat 0:a90ccfbf8695 233 //exit cmd mode, hex value: 0xcc 0x41 0x54 0x4f 0x0d
kcccansat 0:a90ccfbf8695 234 if(laird.writeable())
kcccansat 0:a90ccfbf8695 235 {
kcccansat 0:a90ccfbf8695 236 laird.putc('\xcc');
kcccansat 0:a90ccfbf8695 237 laird.putc('\x41');
kcccansat 0:a90ccfbf8695 238 laird.putc('\x54');
kcccansat 0:a90ccfbf8695 239 laird.putc('\x4f');
kcccansat 0:a90ccfbf8695 240 laird.putc('\x0d');
kcccansat 0:a90ccfbf8695 241 return 1;
kcccansat 0:a90ccfbf8695 242 }
kcccansat 0:a90ccfbf8695 243
kcccansat 0:a90ccfbf8695 244 else return 0;
kcccansat 0:a90ccfbf8695 245
kcccansat 0:a90ccfbf8695 246 }
kcccansat 0:a90ccfbf8695 247
kcccansat 0:a90ccfbf8695 248 int api()
kcccansat 0:a90ccfbf8695 249 {
kcccansat 0:a90ccfbf8695 250 if(laird.writeable())
kcccansat 0:a90ccfbf8695 251 {
kcccansat 0:a90ccfbf8695 252 laird.putc('\xcc');
kcccansat 0:a90ccfbf8695 253 laird.putc('\x17');
kcccansat 0:a90ccfbf8695 254 laird.putc('\x13');
kcccansat 0:a90ccfbf8695 255 return 1;
kcccansat 0:a90ccfbf8695 256 }
kcccansat 0:a90ccfbf8695 257
kcccansat 0:a90ccfbf8695 258 else return 0;
kcccansat 0:a90ccfbf8695 259 }
kcccansat 0:a90ccfbf8695 260
kcccansat 0:a90ccfbf8695 261 int write_cb()
kcccansat 0:a90ccfbf8695 262 {
kcccansat 0:a90ccfbf8695 263 if(laird.writeable())
kcccansat 0:a90ccfbf8695 264 {
kcccansat 0:a90ccfbf8695 265 laird.putc('\xcc');
kcccansat 0:a90ccfbf8695 266 laird.putc('\xc1');
kcccansat 0:a90ccfbf8695 267 laird.putc('\x56');
kcccansat 0:a90ccfbf8695 268 laird.putc('\x01');
kcccansat 0:a90ccfbf8695 269 laird.putc('\x41');
kcccansat 0:a90ccfbf8695 270 return 1;
kcccansat 0:a90ccfbf8695 271 }
kcccansat 0:a90ccfbf8695 272
kcccansat 0:a90ccfbf8695 273 else return 0;
kcccansat 0:a90ccfbf8695 274 }
kcccansat 0:a90ccfbf8695 275
kcccansat 0:a90ccfbf8695 276 //function used to send data over the radio,
kcccansat 0:a90ccfbf8695 277 void radio_send(char *to_send)
kcccansat 0:a90ccfbf8695 278 {
kcccansat 0:a90ccfbf8695 279 int i = 0;
kcccansat 0:a90ccfbf8695 280 for( i = 0; to_send[i] != '\0'; i++);
kcccansat 0:a90ccfbf8695 281
kcccansat 0:a90ccfbf8695 282 laird.putc('\x81');
kcccansat 0:a90ccfbf8695 283 laird.putc(i);
kcccansat 0:a90ccfbf8695 284 laird.putc(8);
kcccansat 0:a90ccfbf8695 285 laird.putc(4);
kcccansat 0:a90ccfbf8695 286 laird.putc(MAC_4);
kcccansat 0:a90ccfbf8695 287 laird.putc(MAC_5);
kcccansat 0:a90ccfbf8695 288 laird.putc(MAC_6);
kcccansat 0:a90ccfbf8695 289
kcccansat 0:a90ccfbf8695 290 for( i = 0; to_send[i] != '\0'; i++)
kcccansat 0:a90ccfbf8695 291 laird.putc(to_send[i]);
kcccansat 0:a90ccfbf8695 292 pc.printf("sent");
kcccansat 0:a90ccfbf8695 293 }
kcccansat 0:a90ccfbf8695 294
kcccansat 0:a90ccfbf8695 295 void relay_send(char *to_send)
kcccansat 0:a90ccfbf8695 296 {
kcccansat 0:a90ccfbf8695 297 int i = 0;
kcccansat 0:a90ccfbf8695 298 for( i = 0; to_send[i] != '\0'; i++);
kcccansat 0:a90ccfbf8695 299
kcccansat 0:a90ccfbf8695 300 laird.putc('\x81');
kcccansat 0:a90ccfbf8695 301 laird.putc(i + 3);
kcccansat 0:a90ccfbf8695 302 laird.putc(8);
kcccansat 0:a90ccfbf8695 303 laird.putc(4);
kcccansat 0:a90ccfbf8695 304 laird.putc(MAC_1);
kcccansat 0:a90ccfbf8695 305 laird.putc(MAC_2);
kcccansat 0:a90ccfbf8695 306 laird.putc(MAC_3);
kcccansat 0:a90ccfbf8695 307 laird.putc(MAC_4);
kcccansat 0:a90ccfbf8695 308 laird.putc(MAC_5);
kcccansat 0:a90ccfbf8695 309 laird.putc(MAC_6);
kcccansat 0:a90ccfbf8695 310 for( i = 0; to_send[i] != '\0'; i++)
kcccansat 0:a90ccfbf8695 311 laird.putc(to_send[i]);
kcccansat 0:a90ccfbf8695 312 // laird.putc('\0');
kcccansat 0:a90ccfbf8695 313 // pc.printf("sent");
kcccansat 0:a90ccfbf8695 314 }
kcccansat 0:a90ccfbf8695 315
kcccansat 0:a90ccfbf8695 316
kcccansat 0:a90ccfbf8695 317 void radio_received(char *received)
kcccansat 0:a90ccfbf8695 318 {
kcccansat 0:a90ccfbf8695 319 int size = 0;
kcccansat 0:a90ccfbf8695 320 int i = 0;
kcccansat 0:a90ccfbf8695 321
kcccansat 0:a90ccfbf8695 322 while(laird.readable() == 0);
kcccansat 0:a90ccfbf8695 323
kcccansat 0:a90ccfbf8695 324 if( laird.getc() == '\x81')
kcccansat 0:a90ccfbf8695 325 {
kcccansat 0:a90ccfbf8695 326
kcccansat 0:a90ccfbf8695 327 size = laird.getc();
kcccansat 0:a90ccfbf8695 328 //throw away next 5 chars
kcccansat 0:a90ccfbf8695 329 pc.printf("%x ", laird.getc());
kcccansat 0:a90ccfbf8695 330 pc.printf("%x ", laird.getc());
kcccansat 0:a90ccfbf8695 331 pc.printf("%x ", laird.getc());
kcccansat 0:a90ccfbf8695 332 pc.printf("%x ", laird.getc());
kcccansat 0:a90ccfbf8695 333 pc.printf("%x ", laird.getc());
kcccansat 0:a90ccfbf8695 334
kcccansat 0:a90ccfbf8695 335 for( i = 0; i < size; i++)
kcccansat 0:a90ccfbf8695 336 { received[i] = laird.getc();
kcccansat 0:a90ccfbf8695 337
kcccansat 0:a90ccfbf8695 338 }
kcccansat 0:a90ccfbf8695 339 received[i + 1] = '\0'; //used to mark the ending of data
kcccansat 0:a90ccfbf8695 340 }
kcccansat 0:a90ccfbf8695 341
kcccansat 0:a90ccfbf8695 342 }