API for communicating with XBee devices.

Dependencies:   CircularBuffer FixedLengthList

Dependents:   XBeeApiTest XBeeApiSimpleATCmdsExample XBeeApiBroadcastExample XBeeApiBroadcastExampleRTOS ... more

Overview

XBeeApi is intended to be a library for providing a high-level API interface to the XBee - for example getChannel() and setChannel(2) methods rather than needing to send( "ATCH" ) and send( "ATCH 2" ) - and then de-code the responses.

See the notebook page here for a description of how the API works & some details on the various classes.

Features:

  • Support for transmission & reception of data packets
  • Support for reading & changing settings
  • Support for "Remote AT" interface to access settings & I/O channels on remote XBees
  • XBeeApi should work if you're using mbed-rtos, though it is not currently threadsafe. Take a look at the XBeeApiBroadcastExampleRTOS example if you're including mbed-rtos.

Example Programs

There are also example programs available:

Transmit

Import programXBeeApiSimpleBroadcastExample

Simple example of how to use XBeeApi - set up the XBee, configure P2P networking then transmit a frame.

Import programXBeeApiBroadcastExample

Example for XBeeAPI; a little more involved than XBeeApiSimpleBroadcastExample with report on failure to set up the XBee and on the transmit status of the message.

Import programXBeeApiBroadcastExampleRTOS

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"

Settings/Status

Import programXBeeApiSimpleATCmdsExample

Simple example of using XBeeApi to send AT-style commands to the XBee

Import programXBeeApiRemoteATCmdsExample

Example of using the XBeeApi library to send AT commands to remote XBee devices in order to read/write settings

Receive

Import programXBeeApiSimpleReceiveExample

Simple example of using XBeeApi to receive data packets via wireless

Import programXBeeApiReceiveCallbackExample

Example of using the XBeeApi library to receive a message via a callback method

Import programXBeeApiReceiveCallbackExampleRTOS

Example of using the XBeeApi library to receive a message via a callback method. This example shows how to use the library when using mbed-rtos. See the comment at the top of main.cpp

Remote I/O

Import programXBeeApiRemoteIOExample

Example of using the XBeeApi library to read inputs on a remote XBee

If you have 2 mbed connected XBees available then you can use XBeeApiSimpleReceiveExample and XBeeApiSimpleBroadcastExample as a pair.

Note that this is still a work in progress! XBeeApiTodoList tracks some of the functionality still to be added.

Committer:
johnb
Date:
Wed Jan 29 20:19:59 2014 +0000
Revision:
5:b40a6fd3a334
Child:
6:3cb62daace78
Documentation update

Who changed what in which revision?

UserRevisionLine numberNew contents of line
johnb 5:b40a6fd3a334 1 /**
johnb 5:b40a6fd3a334 2 @file
johnb 5:b40a6fd3a334 3 @brief Class to abstract AT commands send to the XBee API
johnb 5:b40a6fd3a334 4
johnb 5:b40a6fd3a334 5 AT commands have the payload:
johnb 5:b40a6fd3a334 6
johnb 5:b40a6fd3a334 7 Byte 1 : Frame ID
johnb 5:b40a6fd3a334 8 Byte 2 & 3 : AT command
johnb 5:b40a6fd3a334 9 Byte 4-n : Parameter Value
johnb 5:b40a6fd3a334 10
johnb 5:b40a6fd3a334 11 @author John Bailey
johnb 5:b40a6fd3a334 12
johnb 5:b40a6fd3a334 13 @copyright Copyright 2014 John Bailey
johnb 5:b40a6fd3a334 14
johnb 5:b40a6fd3a334 15 @section LICENSE
johnb 5:b40a6fd3a334 16
johnb 5:b40a6fd3a334 17 Licensed under the Apache License, Version 2.0 (the "License");
johnb 5:b40a6fd3a334 18 you may not use this file except in compliance with the License.
johnb 5:b40a6fd3a334 19 You may obtain a copy of the License at
johnb 5:b40a6fd3a334 20
johnb 5:b40a6fd3a334 21 http://www.apache.org/licenses/LICENSE-2.0
johnb 5:b40a6fd3a334 22
johnb 5:b40a6fd3a334 23 Unless required by applicable law or agreed to in writing, software
johnb 5:b40a6fd3a334 24 distributed under the License is distributed on an "AS IS" BASIS,
johnb 5:b40a6fd3a334 25 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
johnb 5:b40a6fd3a334 26 See the License for the specific language governing permissions and
johnb 5:b40a6fd3a334 27 limitations under the License.
johnb 5:b40a6fd3a334 28
johnb 5:b40a6fd3a334 29 */
johnb 5:b40a6fd3a334 30
johnb 5:b40a6fd3a334 31 #if !defined XBEEAPICMDAT_HPP
johnb 5:b40a6fd3a334 32 #define XBEEAPICMDAT_HPP
johnb 5:b40a6fd3a334 33
johnb 5:b40a6fd3a334 34 #include "XBeeApiFrame.hpp"
johnb 5:b40a6fd3a334 35 #include "XBeeDevice.hpp"
johnb 5:b40a6fd3a334 36
johnb 5:b40a6fd3a334 37 #include <stdint.h>
johnb 5:b40a6fd3a334 38
johnb 5:b40a6fd3a334 39 class XBeeApiCmdAt : public XBeeApiFrameDecoder
johnb 5:b40a6fd3a334 40 {
johnb 5:b40a6fd3a334 41 protected:
johnb 5:b40a6fd3a334 42 bool m_haveHwVer;
johnb 5:b40a6fd3a334 43 bool m_haveFwVer;
johnb 5:b40a6fd3a334 44 bool m_haveChan;
johnb 5:b40a6fd3a334 45 uint16_t m_hwVer;
johnb 5:b40a6fd3a334 46 uint16_t m_fwVer;
johnb 5:b40a6fd3a334 47 uint8_t m_chan;
johnb 5:b40a6fd3a334 48 uint8_t m_chanPend;
johnb 5:b40a6fd3a334 49
johnb 5:b40a6fd3a334 50 class XBeeApiCmdAtFirmwareVersionRequest : public XBeeApiFrame
johnb 5:b40a6fd3a334 51 {
johnb 5:b40a6fd3a334 52 public:
johnb 5:b40a6fd3a334 53 XBeeApiCmdAtFirmwareVersionRequest( void );
johnb 5:b40a6fd3a334 54 };
johnb 5:b40a6fd3a334 55
johnb 5:b40a6fd3a334 56 class XBeeApiCmdAtHardwareVersionRequest : public XBeeApiFrame
johnb 5:b40a6fd3a334 57 {
johnb 5:b40a6fd3a334 58 public:
johnb 5:b40a6fd3a334 59 XBeeApiCmdAtHardwareVersionRequest( void );
johnb 5:b40a6fd3a334 60 };
johnb 5:b40a6fd3a334 61
johnb 5:b40a6fd3a334 62 class XBeeApiCmdAtChannelRequest : public XBeeApiFrame
johnb 5:b40a6fd3a334 63 {
johnb 5:b40a6fd3a334 64 public:
johnb 5:b40a6fd3a334 65 XBeeApiCmdAtChannelRequest( void );
johnb 5:b40a6fd3a334 66 };
johnb 5:b40a6fd3a334 67
johnb 5:b40a6fd3a334 68 class XBeeApiCmdAtChannelSet : public XBeeApiFrame
johnb 5:b40a6fd3a334 69 {
johnb 5:b40a6fd3a334 70 uint8_t m_buffer[ 10 ];
johnb 5:b40a6fd3a334 71 public:
johnb 5:b40a6fd3a334 72 XBeeApiCmdAtChannelSet( const uint8_t p_chan );
johnb 5:b40a6fd3a334 73 };
johnb 5:b40a6fd3a334 74
johnb 5:b40a6fd3a334 75 public:
johnb 5:b40a6fd3a334 76 XBeeApiCmdAt( );
johnb 5:b40a6fd3a334 77
johnb 5:b40a6fd3a334 78 void requestHardwareVersion( void );
johnb 5:b40a6fd3a334 79 void requestFirmwareVersion( void );
johnb 5:b40a6fd3a334 80 void requestChannel( void );
johnb 5:b40a6fd3a334 81
johnb 5:b40a6fd3a334 82 bool getHardwareVersion( uint16_t* const p_ver ) const;
johnb 5:b40a6fd3a334 83 bool getFirmwareVersion( uint16_t* const p_ver ) const;
johnb 5:b40a6fd3a334 84 bool getChannel( uint8_t* const p_chan ) const;
johnb 5:b40a6fd3a334 85
johnb 5:b40a6fd3a334 86 bool setChannel( uint8_t const p_chan );
johnb 5:b40a6fd3a334 87
johnb 5:b40a6fd3a334 88 /* Implement XBeeApiCmdDecoder interface */
johnb 5:b40a6fd3a334 89
johnb 5:b40a6fd3a334 90 virtual bool decodeCallback( const uint8_t* const p_data, size_t p_len );
johnb 5:b40a6fd3a334 91 virtual uint8_t getCmdType( void ) const;
johnb 5:b40a6fd3a334 92
johnb 5:b40a6fd3a334 93 typedef uint16_t panId_t;
johnb 5:b40a6fd3a334 94 typedef uint8_t channel_t;
johnb 5:b40a6fd3a334 95 };
johnb 5:b40a6fd3a334 96
johnb 5:b40a6fd3a334 97
johnb 5:b40a6fd3a334 98 #endif