master to control sensor node

Dependencies:   mbed

Committer:
mfrede
Date:
Tue Nov 10 23:44:36 2015 +0000
Revision:
4:5518470323de
Parent:
3:646a628b8656
Child:
5:85fea4ceaa1f
fix compile errors

Who changed what in which revision?

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