
This is a working test program for radio AC4790-200
Diff: main.cpp
- Revision:
- 0:a90ccfbf8695
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Tue Jul 20 00:08:59 2010 +0000 @@ -0,0 +1,342 @@ +/* This is a short test program for AC4790-200 transceiver*/ +/* 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 + only 4 pins are used from the radio*/ +#include "mbed.h" +#define MAC_1 57 +#define MAC_2 147 // MAC for relay +#define MAC_3 98 + +#define MAC_4 57 +#define MAC_5 149 //MAC for GCS +#define MAC_6 98 + +Serial laird(p9, p10); //Creates a variable for serial comunication through pin 9 and 10 +Serial pc(USBTX, USBRX);//Opens up serial communication through the USB port via the computer + + +int enter_cmd(); +void get_respond(); +int exit_cmd(); +int api(); +int write_cb(); +void radio_send(char *to_send); +void radio_received(char *received); +void relay_send(char *to_send); + +int main() { + + + int i; + char to_send[30] = {"ACD,100"}; //120byte max in data field, 4 byte a char??TEST, 30 chars max!! + char received[30] = {'\0'}; + + wait(3); +/***************set up the serial interface parameters**********/ + laird.baud(57600); //set up the baud rate, needs to be the same as the baud rate of the radio + laird.format(8, Serial::None, 1); //set up the format, 8 bits, none parity, 1 stop bit + + + wait(1); +/*************enter command mode *****************/ + + while(!enter_cmd()) ; //send hex command to enter the command mode + + /*the supposed hex respond after enter the command mode : cc 43 4f 4d*/ + pc.printf("enter cmd respond: "); + for( i = 0; i < 4; i++) + get_respond(); + wait_ms(500); + pc.printf("\n\r"); + + /*************change channel number**************/ + laird.putc('\xcc'); + laird.putc('\x01'); + laird.putc('\x10'); + + pc.printf("change channle respond: "); + get_respond(); + get_respond(); + pc.printf("\r\n"); + +/*************configure API control ****************/ + while(!api()); //send hex command to configure API control + + pc.printf("API control respond: "); //expected respond: cc 13 + for( i = 0; i <2; i++) + get_respond(); + wait_ms(500); + pc.printf("\n\r"); + +/************** EEPROM write control 1 byte********/ + while(!write_cb()); + + pc.printf("write control byte respond: "); //expected respond: 56 01 41 + for( i = 0; i <3; i++) + get_respond(); + wait_ms(500); + pc.printf("\n\r"); + +/************read destination MAC address*******/ + laird.putc('\xcc'); + laird.putc('\x11'); + + pc.printf("Destination MAC address respond: "); + for(i = 0; i< 4; i++) + get_respond(); + wait_ms(500); + pc.printf("\n\r"); + +/**************read own MAC address************/ + laird.putc('\xcc'); + laird.putc('\xc0'); + laird.putc('\x80'); + laird.putc('\x06'); + + pc.printf("Own MAC address: "); + for(i = 0; i < 9; i++) + get_respond(); + wait_ms(500); + pc.printf("\n\r"); + +/************write destination MAC address*********/ + +/* + laird.putc('\xcc'); //ground station mac address: 61 78 32 + laird.putc('\x10'); + laird.putc(MAC_1); + laird.putc(MAC_2); + laird.putc(MAC_3); + + + pc.printf("after write MAC respond: "); + for(i = 0; i < 4; i++) + get_respond(); + wait_ms(500); + pc.printf("\n\r"); + */ +/***************read DES key**********************/ + laird.putc('\xcc'); + laird.putc('\xc0'); + laird.putc('\xd0'); + laird.putc('\x07'); + + pc.printf("DES key: "); + for(i = 0; i < 10; i++) + get_respond(); + wait_ms(500); + pc.printf("\n\r"); + +/**************exit command mode ******************/ + while(!exit_cmd()); //send hex command to exit the command mode + + /*the expected hex respond after exit the command mode: cc 44 41 54*/ + pc.printf("exit cmd respond: "); + for( i = 0; i < 4; i++) + get_respond(); + wait_ms(500); + pc.printf("\n\r"); + +/****************communication ****************/ +/* +while(1){ + radio_send(to_send); + wait(5); +// wait(1); +// pc.printf("done sending\r\n"); +} +*/ +/* +while(1){ + relay_send(to_send); + wait(5); + } + */ +/* radio_received(received); + for(i = 0; received[i] != '\0'; i++) + { + pc.printf("%x ", received[i]); + received[i] = '\0'; + + } + pc.printf("\r\n"); + */ + +while(1) +{ + radio_received(received); + for(i = 0; received[i] != '\0'; i++) + { + pc.printf("%x ", received[i]); + received[i] = '\0'; + + } + pc.printf("\r\n"); + + wait(5); + radio_send(to_send); + pc.printf("reply send\r\n"); +} + +/* + +while(1) + { + radio_send(to_send); + wait(1); + pc.printf("done sending\r\n"); + } + */ + +/* + while(1) + { + i = 0; + + pc.printf("done1 "); + radio_received(received); + pc.printf("done2 "); + while(received[i] != '\0') + pc.putc( received[i++] ); + wait(1); + for(i = 0; i < 30; i++) + received[i] = '\0'; + } +*/ +} + + + +/*************funtions used with radio****************/ +int enter_cmd() +{ + if (laird.writeable()) { + //enter cmd mode, hex value: 0x41 0x54 0x2B 0x2B 0x2B 0x0D + laird.putc('\x41'); + laird.putc('\x54'); + laird.putc('\x2b'); + laird.putc('\x2b'); + laird.putc('\x2b'); + laird.putc('\x0d'); + return 1; + } + else return 0; +} + +void get_respond() +{ + while(laird.readable() == 0); //wait until there is char to read + pc.printf("%x ", laird.getc()); //print out the char in hex form +} + +int exit_cmd() +{ + //exit cmd mode, hex value: 0xcc 0x41 0x54 0x4f 0x0d + if(laird.writeable()) + { + laird.putc('\xcc'); + laird.putc('\x41'); + laird.putc('\x54'); + laird.putc('\x4f'); + laird.putc('\x0d'); + return 1; + } + + else return 0; + +} + +int api() +{ + if(laird.writeable()) + { + laird.putc('\xcc'); + laird.putc('\x17'); + laird.putc('\x13'); + return 1; + } + + else return 0; +} + +int write_cb() +{ + if(laird.writeable()) + { + laird.putc('\xcc'); + laird.putc('\xc1'); + laird.putc('\x56'); + laird.putc('\x01'); + laird.putc('\x41'); + return 1; + } + + else return 0; +} + +//function used to send data over the radio, +void radio_send(char *to_send) +{ + int i = 0; + for( i = 0; to_send[i] != '\0'; i++); + + laird.putc('\x81'); + laird.putc(i); + laird.putc(8); + laird.putc(4); + laird.putc(MAC_4); + laird.putc(MAC_5); + laird.putc(MAC_6); + + for( i = 0; to_send[i] != '\0'; i++) + laird.putc(to_send[i]); + pc.printf("sent"); +} + +void relay_send(char *to_send) +{ + int i = 0; + for( i = 0; to_send[i] != '\0'; i++); + + laird.putc('\x81'); + laird.putc(i + 3); + laird.putc(8); + laird.putc(4); + laird.putc(MAC_1); + laird.putc(MAC_2); + laird.putc(MAC_3); + laird.putc(MAC_4); + laird.putc(MAC_5); + laird.putc(MAC_6); + for( i = 0; to_send[i] != '\0'; i++) + laird.putc(to_send[i]); +// laird.putc('\0'); +// pc.printf("sent"); +} + + +void radio_received(char *received) +{ + int size = 0; + int i = 0; + + while(laird.readable() == 0); + + if( laird.getc() == '\x81') + { + + size = laird.getc(); + //throw away next 5 chars + pc.printf("%x ", laird.getc()); + pc.printf("%x ", laird.getc()); + pc.printf("%x ", laird.getc()); + pc.printf("%x ", laird.getc()); + pc.printf("%x ", laird.getc()); + + for( i = 0; i < size; i++) + { received[i] = laird.getc(); + + } + received[i + 1] = '\0'; //used to mark the ending of data + } + +}