Library for XBee API targeted toward functions with specific use in conjunction with the Pololu 3pi Robot. Work in Progress

Revision:
11:6b699617fc7f
Parent:
10:cb1d91c06093
Child:
12:a7ec1238373e
--- a/XBee_Robot.cpp	Sun Jan 31 20:01:54 2016 +0000
+++ b/XBee_Robot.cpp	Tue Feb 02 11:02:48 2016 +0000
@@ -9,10 +9,20 @@
     nodeNum = indexIn;
 }   
 
-std::vector<uint8_t> NetworkNode::getAddr(){ //returns address of node
+NetworkNode::NetworkNode(std::vector<uint8_t> & addrIn, std::vector<uint8_t> & addr64In, int indexIn){
+    addr = addrIn;
+    nodeNum = indexIn;
+    addr64 = addr64In;
+}
+
+std::vector<uint8_t> NetworkNode::getAddr(){ //returns 16 bit address of node
     return addr;
 }
 
+std::vector<uint8_t> NetworkNode::getAddr64(){ //returns 64 bit address of node
+    return addr64;
+}
+
 int NetworkNode::getIndex(){ //returns index of node
     return nodeNum;
 }
@@ -94,7 +104,6 @@
           
     for (int i = 0; i < transmitRequestPacket.size(); i++){
         dataLink.printf("%c",transmitRequestPacket[i]); //send packet
-        printf("%c",transmitRequestPacket[i]);
     }
 }
 
@@ -137,9 +146,11 @@
     switch (command) { //index for different commands
         case 0x90:{ //Receive packet command
         
-            std::vector<uint8_t> source_addr16; //create new vector to store source address
-            source_addr16.insert(source_addr16.end(), packet.begin() + 13, packet.begin() + 15); //insert source address part of packet into new vector
-            checkSourceAddr(source_addr16);
+            std::vector<uint8_t> source_addr16; //create new vector to 16 bit store source address
+            std::vector<uint8_t> source_addr64; //create new vector to 64 bit store source address
+            source_addr16.insert(source_addr16.end(), packet.begin() + 12, packet.begin() + 14); //insert source address part of packet into new vector
+            source_addr64.insert(source_addr64.end(), packet.begin() + 4, packet.begin() + 12); //insert source address part of packet into new vector
+            checkSourceAddr(source_addr16,source_addr64);
             
             std::vector<uint8_t> data; //create new vector to store data
             data.insert(data.end(), packet.begin() + 15, packet.end() -1); //insert data part of packet into new vector
@@ -160,11 +171,37 @@
             }
             break;
         }
+        case 0x8B: { //Tx status packet command
+            if(packet[8] == 0 )//if delivery status is 00 (success)
+                printf("Packet successfully transmitted to 16 bit destination address: %c%c",packet[5],packet[6]);
+            else
+                printf("Packet delivery failed (status %c)",packet[8]);
+            break;
+        }
         default:
             printf("Received API address not recognised: %c",command);
     }
 }
 
+void XBee_Robot::checkSourceAddr(std::vector<uint8_t> & addr, std::vector<uint8_t> & addr64)
+{
+    bool exists = false;
+    for (int i = 0; i<node_list.size();i++){ //search each entry in node_list for matching address
+        currentIndex = i; //update currentIndex
+        if(node_list[i].getAddr() == addr){
+            exists = true;
+            printf("Recognised node %d\n",node_list[i].getIndex()); //print node number
+        }
+    }
+    if (exists == false){ //add new address to list if no match found
+        currentIndex++; //increment current index for new entry
+        NetworkNode newNode(addr,addr64,node_list.size());//create new node
+        node_list.push_back(newNode); //add new node to list
+        printf("New address added: Node %d\n",(int)node_list.size()-1); 
+    }
+        
+}
+
 void XBee_Robot::checkSourceAddr(std::vector<uint8_t> & addr)
 {
     bool exists = false;
@@ -177,7 +214,7 @@
     }
     if (exists == false){ //add new address to list if no match found
         currentIndex++; //increment current index for new entry
-        NetworkNode newNode(addr,node_list.size());//create new node
+        NetworkNode newNode(addr,node_list.size()); //create new node
         node_list.push_back(newNode); //add new node to list
         printf("New address added: Node %d\n",(int)node_list.size()-1); 
     }