Group 3_ESE519 / Mbed 2 deprecated lab5-gateway

Dependencies:   mbed

Committer:
mfrede
Date:
Sun Nov 08 22:07:10 2015 +0000
Revision:
0:6830fa3899e3
initial gateway code

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mfrede 0:6830fa3899e3 1 #include "mbed.h"
mfrede 0:6830fa3899e3 2 #include "MRF24J40.h"
mfrede 0:6830fa3899e3 3 #include <string>
mfrede 0:6830fa3899e3 4
mfrede 0:6830fa3899e3 5
mfrede 0:6830fa3899e3 6 // RF tranceiver to link with handheld.
mfrede 0:6830fa3899e3 7 MRF24J40 mrf(p11, p12, p13, p14, p21);
mfrede 0:6830fa3899e3 8
mfrede 0:6830fa3899e3 9 DigitalOut myled(LED1);
mfrede 0:6830fa3899e3 10
mfrede 0:6830fa3899e3 11 // Serial port for showing RX data.
mfrede 0:6830fa3899e3 12 Serial pc(USBTX, USBRX);
mfrede 0:6830fa3899e3 13
mfrede 0:6830fa3899e3 14 // Used for sending and receiving
mfrede 0:6830fa3899e3 15 char txBuffer[128];
mfrede 0:6830fa3899e3 16 char rxBuffer[128];
mfrede 0:6830fa3899e3 17 int rxLen;
mfrede 0:6830fa3899e3 18
mfrede 0:6830fa3899e3 19 //***************** Do not change these methods (please) *****************//
mfrede 0:6830fa3899e3 20
mfrede 0:6830fa3899e3 21 /**
mfrede 0:6830fa3899e3 22 * Receive data from the MRF24J40.
mfrede 0:6830fa3899e3 23 *
mfrede 0:6830fa3899e3 24 * @param data A pointer to a char array to hold the data
mfrede 0:6830fa3899e3 25 * @param maxLength The max amount of data to read.
mfrede 0:6830fa3899e3 26 */
mfrede 0:6830fa3899e3 27 int rf_receive(char *data, uint8_t maxLength)
mfrede 0:6830fa3899e3 28 {
mfrede 0:6830fa3899e3 29 uint8_t len = mrf.Receive((uint8_t *)data, maxLength);
mfrede 0:6830fa3899e3 30 uint8_t header[8]= {1, 8, 0, 0xA1, 0xB2, 0xC3, 0xD4, 0x00};
mfrede 0:6830fa3899e3 31
mfrede 0:6830fa3899e3 32 if(len > 10) {
mfrede 0:6830fa3899e3 33 //Remove the header and footer of the message
mfrede 0:6830fa3899e3 34 for(uint8_t i = 0; i < len-2; i++) {
mfrede 0:6830fa3899e3 35 if(i<8) {
mfrede 0:6830fa3899e3 36 //Make sure our header is valid first
mfrede 0:6830fa3899e3 37 if(data[i] != header[i])
mfrede 0:6830fa3899e3 38 return 0;
mfrede 0:6830fa3899e3 39 } else {
mfrede 0:6830fa3899e3 40 data[i-8] = data[i];
mfrede 0:6830fa3899e3 41 }
mfrede 0:6830fa3899e3 42 }
mfrede 0:6830fa3899e3 43
mfrede 0:6830fa3899e3 44 //pc.printf("Received: %s length:%d\r\n", data, ((int)len)-10);
mfrede 0:6830fa3899e3 45 }
mfrede 0:6830fa3899e3 46 return ((int)len)-10;
mfrede 0:6830fa3899e3 47 }
mfrede 0:6830fa3899e3 48
mfrede 0:6830fa3899e3 49 /**
mfrede 0:6830fa3899e3 50 * Send data to another MRF24J40.
mfrede 0:6830fa3899e3 51 *
mfrede 0:6830fa3899e3 52 * @param data The string to send
mfrede 0:6830fa3899e3 53 * @param maxLength The length of the data to send.
mfrede 0:6830fa3899e3 54 * If you are sending a null-terminated string you can pass strlen(data)+1
mfrede 0:6830fa3899e3 55 */
mfrede 0:6830fa3899e3 56 void rf_send(char *data, uint8_t len)
mfrede 0:6830fa3899e3 57 {
mfrede 0:6830fa3899e3 58 //We need to prepend the message with a valid ZigBee header
mfrede 0:6830fa3899e3 59 uint8_t header[8]= {1, 8, 0, 0xA1, 0xB2, 0xC3, 0xD4, 0x00};
mfrede 0:6830fa3899e3 60 uint8_t *send_buf = (uint8_t *) malloc( sizeof(uint8_t) * (len+8) );
mfrede 0:6830fa3899e3 61
mfrede 0:6830fa3899e3 62 for(uint8_t i = 0; i < len+8; i++) {
mfrede 0:6830fa3899e3 63 //prepend the 8-byte header
mfrede 0:6830fa3899e3 64 send_buf[i] = (i<8) ? header[i] : data[i-8];
mfrede 0:6830fa3899e3 65 }
mfrede 0:6830fa3899e3 66 //pc.printf("Sent: %s\r\n", send_buf+8);
mfrede 0:6830fa3899e3 67
mfrede 0:6830fa3899e3 68 mrf.Send(send_buf, len+8);
mfrede 0:6830fa3899e3 69 free(send_buf);
mfrede 0:6830fa3899e3 70 }
mfrede 0:6830fa3899e3 71
mfrede 0:6830fa3899e3 72 int main() {
mfrede 0:6830fa3899e3 73 int nodes = 6;
mfrede 0:6830fa3899e3 74 char buffer[128];
mfrede 0:6830fa3899e3 75 while(1) {
mfrede 0:6830fa3899e3 76 pc.printf("Select operation: \r\n");
mfrede 0:6830fa3899e3 77 pc.printf("1) get node list\r\n");
mfrede 0:6830fa3899e3 78 pc.printf("2) Update data rates\r\n");
mfrede 0:6830fa3899e3 79 pc.gets(buffer,1);
mfrede 0:6830fa3899e3 80 switch (buffer[0]) {
mfrede 0:6830fa3899e3 81 case '1':
mfrede 0:6830fa3899e3 82
mfrede 0:6830fa3899e3 83 for(int i=0;i<nodes;i++)
mfrede 0:6830fa3899e3 84 {
mfrede 0:6830fa3899e3 85 pc.printf("Node %d Neighbors:\r\n");
mfrede 0:6830fa3899e3 86 for (int j=0;j<neighbors[i][0];j++)
mfrede 0:6830fa3899e3 87 {
mfrede 0:6830fa3899e3 88 pc.printf("Node %d: %d cycles\r\n",neighbors[i][j],cycles[i][j]);
mfrede 0:6830fa3899e3 89 }
mfrede 0:6830fa3899e3 90 }
mfrede 0:6830fa3899e3 91 break;
mfrede 0:6830fa3899e3 92 case '2':
mfrede 0:6830fa3899e3 93 pc.printf("How many seconds between updates? ");
mfrede 0:6830fa3899e3 94 pc.gets(buffer,2);
mfrede 0:6830fa3899e3 95 atoi(buffer[0]) + atoi(buffer[1]);
mfrede 0:6830fa3899e3 96 //build data packet
mfrede 0:6830fa3899e3 97
mfrede 0:6830fa3899e3 98 //broadcast type
mfrede 0:6830fa3899e3 99
mfrede 0:6830fa3899e3 100 //send data packet
mfrede 0:6830fa3899e3 101
mfrede 0:6830fa3899e3 102 break;
mfrede 0:6830fa3899e3 103 default:
mfrede 0:6830fa3899e3 104 pc.printf("unknown command\r\n");
mfrede 0:6830fa3899e3 105 break;
mfrede 0:6830fa3899e3 106 }
mfrede 0:6830fa3899e3 107
mfrede 0:6830fa3899e3 108 }
mfrede 0:6830fa3899e3 109 }