Example of using the XBeeApi library to broadcast a message, based on XBeeApiBroadcastExample. This example shows how to use the library when using mbed-rtos. Before compiling you must open "XbeeApi\Config\XBeeApiCfg.hpp" and change the '#if 0' to '#if 1' on the line above the comment reading "Use RTOS features to make XBeeApi threadsafe"

Dependencies:   XBeeApi mbed-rtos mbed

Files at this revision

API Documentation at this revision

Comitter:
johnb
Date:
Sun Jul 06 20:25:00 2014 +0000
Commit message:
Example for using XBeeApi and mbed-rtos; ; Please note the comment at the top regarding the need to change the config before building the example!

Changed in this revision

XBeeApi.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
mbed-rtos.lib Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/XBeeApi.lib	Sun Jul 06 20:25:00 2014 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/johnb/code/XBeeApi/#975a28e01dac
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Sun Jul 06 20:25:00 2014 +0000
@@ -0,0 +1,136 @@
+/**
+   @file
+   @brief Example of using the XBeeApi library to broadcast a message
+          This example has more error checking than
+          XBeeApiSimpleBroadcast example and should improve the changes
+          of detecting and diagnosing a problem.
+          
+          This example shows how to use the library when using mbed-rtos.
+          Before compiling you must open "XbeeApi\Config\XBeeApiCfg.hpp"
+          and change the '#if 0' to '#if 1' on the line above the comment
+          reading "Use RTOS features to make XBeeApi threadsafe"
+
+   @author John Bailey 
+
+   @copyright Copyright 2014 John Bailey
+
+   @section LICENSE
+   
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+*/
+
+#include "mbed.h"   
+#include "xbeeapi.hpp"
+ 
+const uint8_t tx_data[] = { 'H', 'E', 'L', 'L', 'O' };
+
+/* TODO: You may need to change these based on the device/connections that you're using */ 
+#define XBEE_TX_PIN PTA2
+#define XBEE_RX_PIN PTA1
+
+#define WAIT_FOR_TX_TIME 500
+
+Serial pc(USBTX, USBRX); // tx, rx
+
+/* Network address for our XBee */
+const uint16_t myNetworkAddress = 0x1234;
+
+/* ID for the Personal Area Network we're going to join */
+const XBeeApiCmdAt::panId_t myPANId = 1000;
+
+/* Network channel to use */
+const XBeeApiCmdAt::channel_t myChannelId = 14;
+
+/* This example sends a frame to a specific destination address - we could set
+   the frame to be broadcast by calling the setDestAddrBroadcast() method
+   instead of setDestAddr() in the function below.
+   By default 16-bit addressing mode is used.  setDestAddrType can be used
+   to select between 16-bit and 64-bit addressing modes */
+const uint16_t frameDestinationAddress = 0x01;
+
+XBeeDevice xbeeDevice( XBEE_TX_PIN, XBEE_RX_PIN, NC, NC );
+   
+int main() {
+    /* This example will use the blocking API for simplicity */   
+    XBeeApiCmdAtBlocking atIf( &xbeeDevice );
+
+    XBeeDevice::XBeeDeviceReturn_t status;
+
+    /* This is the frame we're going to transmit - using the extended version so that
+       stats are available */
+    XBeeApiTxFrameEx frame( &xbeeDevice );
+        
+    if( !xbeeDevice.setupDispatchTask() )
+    {
+        pc.printf("setupDispatchTask() failed - XBeeDevice class won't receive any data\r\n");
+    }
+        
+    /* Get API mode 2 set up - this is a pre-requisit to using other XBeeApi functions.
+       This step may not be needed in the case that the XBee has already been configured
+       to use Mode 2 and the setting has been stored in NV */
+    status = xbeeDevice.setUpApi();
+
+    if( status == XBeeDevice::XBEEDEVICE_OK )
+    {
+
+        /* Set the 16-bit source address of this XBee */
+        atIf.setSourceAddress( myNetworkAddress );
+        if( xbeeSetNetworkTypeP2P( &atIf, myPANId, myChannelId ) )
+        {
+            /* Set the data pointer & destination address in the transmit frame */
+            frame.setDataPtr( tx_data, sizeof( tx_data ) );
+            frame.setDestAddr( frameDestinationAddress );
+            
+            xbeeDevice.SendFrame( &frame );
+            
+            /* Arbitary wait for the TX to occurr.  We could poll getMostRecentStatus() 
+               instead of just waiting */
+            wait_ms( WAIT_FOR_TX_TIME );
+    
+            pc.printf( "\r\nTX Status: ");
+            switch( frame.getMostRecentStatus() )
+            {
+                case XBeeApiTxFrame::XBEE_API_TX_STATUS_LAST:
+                    /* Didn't receive a response from the XBee indicating
+                       the transmit status */    
+                    pc.printf("No TX confirmation received from XBee");
+                    break;
+                case XBeeApiTxFrame::XBEE_API_TX_STATUS_OK:
+                    /* Frame was transmitted OK and at least one other network
+                       node acknowledged it */
+                    pc.printf("OK");
+                    break;
+                case XBeeApiTxFrame::XBEE_API_TX_STATUS_NO_ACK:
+                    /* This means that the message was transmitted by 
+                       the XBee but no other nodes on the network acknowledged it.
+                       Could be other nodes are not on the same PAN, channel, etc) */
+                    pc.printf("No acknowledgement received");
+                    break;
+                default:
+                    /* In this example we don't expect a response other than
+                       those explicitly handled above */
+                    pc.printf("Unexpected response received");
+                    break;
+            }
+        }
+        else
+        {
+            pc.printf("xbeeSetNetworkTypeP2P reported failure\r\n");
+        }
+    }
+    else
+    {
+        pc.printf("setUpApi failed with status %d\r\n",status);
+    }
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-rtos.lib	Sun Jul 06 20:25:00 2014 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed-rtos/#1520481a219c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Sun Jul 06 20:25:00 2014 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/04dd9b1680ae
\ No newline at end of file