Basic API demo

Dependencies:   XBee

Files at this revision

API Documentation at this revision

Comitter:
lucasec
Date:
Sun Apr 23 19:58:46 2017 +0000
Commit message:
Initial Commit

Changed in this revision

XBee.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
diff -r 000000000000 -r e101a3828404 XBee.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/XBee.lib	Sun Apr 23 19:58:46 2017 +0000
@@ -0,0 +1,1 @@
+https://developer.mbed.org/users/lucasec/code/XBee/#350d308e7b77
diff -r 000000000000 -r e101a3828404 main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Sun Apr 23 19:58:46 2017 +0000
@@ -0,0 +1,125 @@
+#include "mbed.h"
+#include "XBee.h"
+
+Serial pc(USBTX, USBRX);
+
+RawSerial xbeeUart(p28, p27, 9600);
+XBee xbee(xbeeUart);
+
+// serial high
+uint8_t shCmd[] = {'S','H'};
+// serial low
+uint8_t slCmd[] = {'S','L'};
+// association status
+uint8_t assocCmd[] = {'A','I'};
+
+uint8_t disableApiCmd[] = {'A', 'P'};
+uint8_t disableApiData = 0;
+
+AtCommandRequest atRequest = AtCommandRequest(shCmd);
+AtCommandResponse atResponse = AtCommandResponse();
+
+uint8_t messageData[] = {'H', 'e', 'l', 'l', 'o'};
+Tx16Request txReq(0x0003, messageData, 5);
+TxStatusResponse txStatus;
+
+void sendAtCommand();
+
+void loop() {
+    // get SH
+    sendAtCommand();
+
+    // set command to SL
+    atRequest.setCommand(slCmd);
+    sendAtCommand();
+
+    // Say hello!
+    xbee.send(txReq);
+    if (xbee.readPacket(5000)) {
+        if (xbee.getResponse().getApiId() == TX_STATUS_RESPONSE) {
+            xbee.getResponse().getTxStatusResponse(txStatus);
+
+            // get the delivery status, the fifth byte
+            if (txStatus.getStatus() == SUCCESS) {
+            	// success.  time to celebrate
+             	pc.printf("Message was sent and received!\r\n");
+            } else {
+            	// the remote XBee did not receive our packet. is it powered on?
+             	pc.printf("Message was not acknowledged\r\n");
+            }
+        }
+    } else if (xbee.getResponse().isError()) {
+        pc.printf("Error reading packet.  Error code: %d\r\n", xbee.getResponse().getErrorCode());
+    } else {
+        // local XBee did not provide a timely TX Status Response.  Radio is not configured properly or connected
+        pc.printf("Transmit timeout\r\n");
+    }
+
+    // Disable API mode
+    // atRequest.setCommand(disableApiCmd);
+    // atRequest.setCommandValue(&disableApiData);
+    // atRequest.setCommandValueLength(1);
+    // sendAtCommand();
+
+    // Demo complete
+    while (1) {};
+}
+
+int main()
+{
+    pc.printf("Waiting for Xbee to initialize...\r\n");
+    wait(5);
+    pc.printf("Xbee should be ready\r\n");
+
+    while(1) {
+        loop();
+    }
+}
+
+void sendAtCommand() {
+    pc.printf("Sending command to the XBee\r\n");
+
+    // send the command
+    xbee.send(atRequest);
+
+    // wait up to 5 seconds for the status response
+    if (xbee.readPacket(5000)) {
+        // got a response!
+
+        // should be an AT command response
+        if (xbee.getResponse().getApiId() == AT_COMMAND_RESPONSE) {
+            xbee.getResponse().getAtCommandResponse(atResponse);
+
+            if (atResponse.isOk()) {
+                pc.printf("Command [%c%c] was successful!\r\n", atResponse.getCommand()[0], atResponse.getCommand()[1]);
+
+                if (atResponse.getValueLength() > 0) {
+                    pc.printf("Command value length is ");
+                    pc.printf("%d\r\n", atResponse.getValueLength());
+
+                    pc.printf("Command value: ");
+
+                    for (int i = 0; i < atResponse.getValueLength(); i++) {
+                        pc.printf("%x ", atResponse.getValue()[i]);
+                    }
+
+                    pc.printf("\r\n");
+                }
+            }
+            else {
+                pc.printf("Command return error code: %x\r\n", atResponse.getStatus());
+            }
+        } else {
+            pc.printf("Expected AT response but got %x\r\n", xbee.getResponse().getApiId());
+        }
+    } else {
+        // at command failed
+        if (xbee.getResponse().isError()) {
+            pc.printf("Error reading packet.  Error code: %x\r\n", xbee.getResponse().getErrorCode());
+        }
+        else {
+            pc.printf("No response from radio\r\n");
+        }
+    }
+}
+