Library to easily communicate with XBee modules.

Dependencies:   DigiLogger

Dependents:   WaterLogger XbeeGateway XBee_Cooker ProjetReceiver ... more

Use XBee radio modules to easily improve your project with wireless connectivity. You can enable entire networks of connected devices. XBees can exchange data with other modules in the network and configure remote modules as well as trigger actions or collect sensor data on XBee nodes without needing additional external microcontrollers. Using this documentation and configuration tools with XBee modules, it is easy to develop these types of applications and more.

/media/uploads/spastor/xbee-xbeepro-series1.jpg

The XBee mbed Library is a ready-to-import mbed extension that dramatically reduces development time for XBee projects on the mbed platforms. There are many modular examples, making it an easy and smooth process to add wireless networking to a whole range of useful applications.

Info

Currently 802.15.4 (Series 1 and 2), ZigBee (Series 2) and DigiMesh (Series 1 and 2) modules are supported. The libraries can be extended to support other protocols like DigiMesh point-to-point, WiFi, etc.

User manual

The user manual can be found at this project's Wiki pages:

  1. Configuring the library
  2. Debugging the library
  3. Initializing modules
  4. Resetting the local module
  5. Receiving Data from other module
  6. Sending data to another module
  7. Discovering nodes in the network
  8. Configuring local and remote modules
  9. Handling modem status changes
  10. Handling remote modules DIOs, ADCs and PWMs
  11. Handling IO Data Samples from other module
  12. Radio Power Management

Ready to use examples

There are a lot of ready to use examples to get started quickly.
Make sure you have a valid example setup before running the examples:

Examples for ZigBee modules

Import programXBeeZB_Receive_Data

ZigBee Receive Data example for mbed XBeeLib By Digi

Import programXBeeZB_Send_Data

ZigBee Send Data example for mbed XBeeLib By Digi

Import programXBeeZB_module_config

ZigBee network configuration example for mbed XBeeLib By Digi

Import programXBeeZB_AT_Commands

ZigBee AT Commands example for mbed XBeeLib By Digi

Import programXBeeZB_dio_adc

ZigBee DIOs and ADCs example for mbed XBeeLib By Digi

Import programXBeeZB_IO_Sample_Callback

ZigBee IO Sampling Callback example for mbed XBeeLib By Digi

Import programXBeeZB_modem_status

ZigBee Modem Status example for mbed XBeeLib By Digi

Import programXBeeZB_node_discovery

ZigBee Node Discovery example for mbed XBeeLib By Digi

Import programXBeeZB_power_mngmnt_cyclic_sleep

ZigBee Power Management using Cyclic Sleep example for mbed XBeeLib By Digi

Import programXBeeZB_power_mngmnt_pin_sleep

ZigBee Power Management using Pin Sleep example for mbed XBeeLib By Digi

Examples for 802.15.4 modules

Import programXBee802_Receive_Data

802.15.4 Receive Data example for mbed XBeeLib By Digi

Import programXBee802_Send_Data

802.15.4 Send Data example for mbed XBeeLib By Digi

Import programXBee802_module_config

802.15.4 network configuration example for mbed XBeeLib By Digi

Import programXBee802_AT_Commands

802.15.4 AT Commands example for mbed XBeeLib By Digi

Import programXBee802_dio_adc_pwm

802.15.4 DIOs, ADCs and PWM example for mbed XBeeLib By Digi

Import programXBee802_IO_Sample_Callback

802.15.4 IO Sampling Callback example for mbed XBeeLib By Digi

Import programXBee802_node_discovery

802.15.4 Node Discovery example for mbed XBeeLib By Digi

Import programXBee802_power_mngmnt_cyclic_sleep

802.15.4 Power Management using Cyclic Sleep example for mbed XBeeLib By Digi

Import programXBee802_power_mngmnt_pin_sleep

802.15.4 Power Management using Pin Sleep example for mbed XBeeLib By Digi

Examples for DigiMesh modules

Import programXBeeDM_Receive_Data

DigiMesh Receive Data example for mbed XBeeLib By Digi

Import programXBeeDM_Send_Data

DigiMesh Send Data example for mbed XBeeLib By Digi

Import programXBeeDM_module_config

DigiMesh network configuration example for mbed XBeeLib By Digi

Import programXBeeDM_AT_Commands

DigiMesh AT Commands example for mbed XBeeLib By Digi

Import programXBeeDM_dio_adc_pwm

DigiMEsh DIOs, ADCs and PWMs example for mbed XBeeLib By Digi

Import programXBeeDM_IO_Sample_Callback

DigiMesh IO Sampling Callback example for mbed XBeeLib By Digi

Import programXBeeDM_modem_status

DigiMesh Modem Status example for mbed XBeeLib By Digi

Import programXBeeDM_node_discovery

DigiMesh Node Discovery example for mbed XBeeLib By Digi

Import programXBeeDM_power_mngmnt_asyncr_cyclic_sleep

DigiMesh Power Management using Asynchronous Cyclic Sleep example for mbed XBeeLib By Digi

Import programXBeeDM_power_mngmnt_pin_sleep

DigiMesh Power Management using Pin Sleep example for mbed XBeeLib By Digi

Committer:
hbujanda
Date:
Mon May 11 17:58:00 2015 +0200
Revision:
1:794d1d3e4a08
Parent:
0:fcaad0dfa051
Child:
2:2ee1b6d51df2
Automatic upload

Who changed what in which revision?

UserRevisionLine numberNew contents of line
spastor 0:fcaad0dfa051 1 /**
spastor 0:fcaad0dfa051 2 * Copyright (c) 2015 Digi International Inc.,
spastor 0:fcaad0dfa051 3 * All rights not expressly granted are reserved.
spastor 0:fcaad0dfa051 4 *
spastor 0:fcaad0dfa051 5 * This Source Code Form is subject to the terms of the Mozilla Public
spastor 0:fcaad0dfa051 6 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
spastor 0:fcaad0dfa051 7 * You can obtain one at http://mozilla.org/MPL/2.0/.
spastor 0:fcaad0dfa051 8 *
spastor 0:fcaad0dfa051 9 * Digi International Inc. 11001 Bren Road East, Minnetonka, MN 55343
spastor 0:fcaad0dfa051 10 * =======================================================================
spastor 0:fcaad0dfa051 11 */
spastor 0:fcaad0dfa051 12
spastor 0:fcaad0dfa051 13 #if !defined(__XBEE_802_H_)
spastor 0:fcaad0dfa051 14 #define __XBEE_802_H_
spastor 0:fcaad0dfa051 15
spastor 0:fcaad0dfa051 16 #include "FrameHandlers/FH_AtCmdResp.h"
spastor 0:fcaad0dfa051 17 #include "FrameHandlers/FH_RxPacket802.h"
spastor 0:fcaad0dfa051 18 #include "FrameHandlers/FH_IoDataSample802.h"
spastor 0:fcaad0dfa051 19 #include "RemoteXBee/RemoteXBee.h"
spastor 0:fcaad0dfa051 20
spastor 0:fcaad0dfa051 21 namespace XBeeLib {
spastor 0:fcaad0dfa051 22
spastor 0:fcaad0dfa051 23 /** Class for XBee ZigBee modules, derived from XBee */
spastor 0:fcaad0dfa051 24 class XBee802 : public XBee
spastor 0:fcaad0dfa051 25 {
spastor 0:fcaad0dfa051 26 public:
spastor 0:fcaad0dfa051 27
spastor 0:fcaad0dfa051 28 /**
spastor 0:fcaad0dfa051 29 * IoLine for XBee802 Modules
spastor 0:fcaad0dfa051 30 */
spastor 0:fcaad0dfa051 31 enum IoLine {
spastor 0:fcaad0dfa051 32 DIO0_AD0 = 0, /**< DIO0_AD0 pin */
spastor 0:fcaad0dfa051 33 DIO1_AD1 = 1, /**< DIO1_AD1 pin */
spastor 0:fcaad0dfa051 34 DIO2_AD2 = 2, /**< DIO2_AD2 pin */
spastor 0:fcaad0dfa051 35 DIO3_AD3 = 3, /**< DIO3_AD3 pin */
spastor 0:fcaad0dfa051 36 DIO4_AD4 = 4, /**< DIO4_AD4 pin */
spastor 0:fcaad0dfa051 37 DIO5_AD5 = 5, /**< DIO5_AD5 pin */
spastor 0:fcaad0dfa051 38 DIO6 = 6, /**< DIO6 pin */
spastor 0:fcaad0dfa051 39 DIO7 = 7, /**< DIO7 pin */
spastor 0:fcaad0dfa051 40 DI8 = 8, /**< DI8 pin */
spastor 0:fcaad0dfa051 41 PWM0, /**< PWM0 pin */
spastor 0:fcaad0dfa051 42 PWM1 /**< PWM1 pin */
spastor 0:fcaad0dfa051 43 };
spastor 0:fcaad0dfa051 44
spastor 0:fcaad0dfa051 45 /** Class constructor
spastor 0:fcaad0dfa051 46 * @param tx the TX pin of the UART that will interface the XBee module
spastor 0:fcaad0dfa051 47 * @param rx the RX pin of the UART that will interface the XBee module
spastor 0:fcaad0dfa051 48 * @param reset the pin to which the XBee's reset line is attached to, use NC if not available
spastor 0:fcaad0dfa051 49 * @param rts the RTS pin for the UART that will interface the XBee module, use NC if not available
spastor 0:fcaad0dfa051 50 * @param cts the CTS pin for the UART that will interface the XBee module, use NC if not available
spastor 0:fcaad0dfa051 51 * @param baud the baudrate for the UART that will interface the XBee module. Note that the module has to be already configured
spastor 0:fcaad0dfa051 52 * to this baud rate (ATBD parameter). By default it is configured to 9600 bps
spastor 0:fcaad0dfa051 53 */
spastor 0:fcaad0dfa051 54 XBee802(PinName tx, PinName rx, PinName reset = NC, PinName rts = NC, PinName cts = NC, int baud = 9600);
spastor 0:fcaad0dfa051 55
spastor 0:fcaad0dfa051 56 /** Class destructor */
spastor 0:fcaad0dfa051 57 virtual ~XBee802();
spastor 0:fcaad0dfa051 58
spastor 0:fcaad0dfa051 59 /** init - initializes object
spastor 0:fcaad0dfa051 60 * This function must be called just after creating the object so it initializes internal data.
spastor 0:fcaad0dfa051 61 * @returns
spastor 0:fcaad0dfa051 62 * Success if the module has been properly initialized and is ready to process data.
spastor 0:fcaad0dfa051 63 * Failure otherwise.
spastor 0:fcaad0dfa051 64 */
spastor 0:fcaad0dfa051 65 RadioStatus init();
spastor 0:fcaad0dfa051 66
spastor 0:fcaad0dfa051 67 /** set_panid - sets the 16 bit PAN ID.
spastor 0:fcaad0dfa051 68 *
spastor 0:fcaad0dfa051 69 * @param panid the PAN ID value that will be set on the radio
spastor 0:fcaad0dfa051 70 * @returns
spastor 0:fcaad0dfa051 71 * Success if the operation was successful,
spastor 0:fcaad0dfa051 72 * Failure otherwise
spastor 0:fcaad0dfa051 73 */
spastor 0:fcaad0dfa051 74 RadioStatus set_panid(uint16_t panid);
spastor 0:fcaad0dfa051 75
spastor 0:fcaad0dfa051 76 /** get_panid - gets the configured 16 bit PAN ID
spastor 0:fcaad0dfa051 77 *
spastor 0:fcaad0dfa051 78 * @param panid pointer where the read PAN ID value will be stored
spastor 0:fcaad0dfa051 79 * @returns
spastor 0:fcaad0dfa051 80 * Success if the operation was successful,
spastor 0:fcaad0dfa051 81 * Failure otherwise
spastor 0:fcaad0dfa051 82 */
spastor 0:fcaad0dfa051 83 RadioStatus get_panid(uint16_t * const panid);
spastor 0:fcaad0dfa051 84
spastor 0:fcaad0dfa051 85 /** set_channel - sets the network channel number
spastor 0:fcaad0dfa051 86 *
spastor 0:fcaad0dfa051 87 * @param channel the channel in which the radio operates. Range is 0x0B - 0x1A for XBee and 0x0C - 0x17 for XBee-PRO.
spastor 0:fcaad0dfa051 88 * The Center Frequency = 2.405 + (CH - 11) * 5 MHz
spastor 0:fcaad0dfa051 89 * @returns
spastor 0:fcaad0dfa051 90 * Success if the operation was successful,
spastor 0:fcaad0dfa051 91 * Failure otherwise
spastor 0:fcaad0dfa051 92 */
spastor 0:fcaad0dfa051 93 RadioStatus set_channel(uint8_t channel);
spastor 0:fcaad0dfa051 94
spastor 0:fcaad0dfa051 95 /** get_panid - gets the network channel number
spastor 0:fcaad0dfa051 96 *
spastor 0:fcaad0dfa051 97 * @param channel pointer where the channel value will be stored.
spastor 0:fcaad0dfa051 98 * @returns
spastor 0:fcaad0dfa051 99 * Success if the operation was successful,
spastor 0:fcaad0dfa051 100 * Failure otherwise
spastor 0:fcaad0dfa051 101 */
spastor 0:fcaad0dfa051 102 RadioStatus get_channel(uint8_t * const channel);
spastor 0:fcaad0dfa051 103
spastor 0:fcaad0dfa051 104 /** set_network_address - sets the 16 bit network address of the device
spastor 0:fcaad0dfa051 105 *
spastor 0:fcaad0dfa051 106 * @param addr the device 16bit network address (0x0 - 0xFFFF)
spastor 0:fcaad0dfa051 107 * @returns
spastor 0:fcaad0dfa051 108 * Success if the operation was successful,
spastor 0:fcaad0dfa051 109 * Failure otherwise
spastor 0:fcaad0dfa051 110 */
spastor 0:fcaad0dfa051 111 RadioStatus set_network_address(uint16_t addr);
spastor 0:fcaad0dfa051 112
spastor 0:fcaad0dfa051 113 /** register_node_discovery_cb - registers the callback function that will be called
spastor 0:fcaad0dfa051 114 * when the responses to the node discovery command arrive
spastor 0:fcaad0dfa051 115 *
spastor 0:fcaad0dfa051 116 * @param function function pointer with the callback function
spastor 0:fcaad0dfa051 117 */
spastor 0:fcaad0dfa051 118 void register_node_discovery_cb(node_discovery_802_cb_t function);
spastor 0:fcaad0dfa051 119
spastor 0:fcaad0dfa051 120 /** unregister_node_discovery_cb - removes the node discovery callback */
spastor 0:fcaad0dfa051 121 void unregister_node_discovery_cb();
spastor 0:fcaad0dfa051 122
spastor 0:fcaad0dfa051 123 /** register_receive_cb - registers the callback function that will be called
spastor 0:fcaad0dfa051 124 * when a rx packet is received
spastor 0:fcaad0dfa051 125 *
spastor 0:fcaad0dfa051 126 * @param function function pointer with the callback function
spastor 0:fcaad0dfa051 127 */
spastor 0:fcaad0dfa051 128 void register_receive_cb(receive_802_cb_t function);
spastor 0:fcaad0dfa051 129
spastor 0:fcaad0dfa051 130 /** unregister_receive_cb - removes the rx packet callback */
spastor 0:fcaad0dfa051 131 void unregister_receive_cb();
spastor 0:fcaad0dfa051 132
spastor 0:fcaad0dfa051 133 /** register_io_sample_cb - registers the callback function that will be called
spastor 0:fcaad0dfa051 134 * when a IO Sample Data packet is received
spastor 0:fcaad0dfa051 135 *
spastor 0:fcaad0dfa051 136 * @param function function pointer with the callback function
spastor 0:fcaad0dfa051 137 */
spastor 0:fcaad0dfa051 138 void register_io_sample_cb(io_data_cb_802_t function);
spastor 0:fcaad0dfa051 139
spastor 0:fcaad0dfa051 140 /** unregister_io_sample_cb - removes the IO Sample Data reception callback */
spastor 0:fcaad0dfa051 141 void unregister_io_sample_cb();
spastor 0:fcaad0dfa051 142
spastor 0:fcaad0dfa051 143 /*********************** send_data member methods ************************/
spastor 0:fcaad0dfa051 144 /** send_data - sends data to a remote device waiting for the packet
spastor 0:fcaad0dfa051 145 * answer with the result of the operation
spastor 0:fcaad0dfa051 146 *
spastor 0:fcaad0dfa051 147 * @param remote remote device
spastor 0:fcaad0dfa051 148 * @param data pointer to the data that will be sent
spastor 0:fcaad0dfa051 149 * @param len number of bytes that will be transmitted
spastor 0:fcaad0dfa051 150 * @returns the result of the data transfer
spastor 0:fcaad0dfa051 151 * TxStatusSuccess if the operation was successful,
spastor 0:fcaad0dfa051 152 * the error code otherwise
spastor 0:fcaad0dfa051 153 */
spastor 0:fcaad0dfa051 154 virtual TxStatus send_data(const RemoteXBee& remote, const uint8_t *const data, uint16_t len);
spastor 0:fcaad0dfa051 155
hbujanda 1:794d1d3e4a08 156 /** send_data - sends data to a remote device waiting for the packet
hbujanda 1:794d1d3e4a08 157 * answer with the result of the operation
spastor 0:fcaad0dfa051 158 *
hbujanda 1:794d1d3e4a08 159 * @param remote64 64bit address of the remote device
hbujanda 1:794d1d3e4a08 160 * @param data pointer to the data that will be sent
hbujanda 1:794d1d3e4a08 161 * @param len number of bytes that will be transmitted
hbujanda 1:794d1d3e4a08 162 * @returns the result of the data transfer
hbujanda 1:794d1d3e4a08 163 * TxStatusSuccess if the operation was successful,
hbujanda 1:794d1d3e4a08 164 * the error code otherwise
spastor 0:fcaad0dfa051 165 */
hbujanda 1:794d1d3e4a08 166 TxStatus send_data(uint64_t remote64, const uint8_t *const data, uint16_t len);
hbujanda 1:794d1d3e4a08 167
hbujanda 1:794d1d3e4a08 168 /** send_data - sends data to a remote device waiting for the packet
hbujanda 1:794d1d3e4a08 169 * answer with the result of the operation
hbujanda 1:794d1d3e4a08 170 *
hbujanda 1:794d1d3e4a08 171 * @param addr16 16bit address of the remote device
hbujanda 1:794d1d3e4a08 172 * @param data pointer to the data that will be sent
hbujanda 1:794d1d3e4a08 173 * @param len number of bytes that will be transmitted
hbujanda 1:794d1d3e4a08 174 * @returns the result of the data transfer
hbujanda 1:794d1d3e4a08 175 * TxStatusSuccess if the operation was successful,
hbujanda 1:794d1d3e4a08 176 * the error code otherwise
hbujanda 1:794d1d3e4a08 177 */
hbujanda 1:794d1d3e4a08 178 TxStatus send_data(uint16_t addr16, const uint8_t *const data, uint16_t len);
spastor 0:fcaad0dfa051 179
spastor 0:fcaad0dfa051 180 /* Allow using XBee::set_param() methods for local radio from this class */
spastor 0:fcaad0dfa051 181 using XBee::set_param;
spastor 0:fcaad0dfa051 182
spastor 0:fcaad0dfa051 183 /** set_param - sets a parameter in a remote radio by sending an AT command and waiting for the response.
spastor 0:fcaad0dfa051 184 *
spastor 0:fcaad0dfa051 185 * @param remote remote device
spastor 0:fcaad0dfa051 186 * @param param parameter to be set.
spastor 0:fcaad0dfa051 187 * @param data the parameter value (4 bytes) to be set.
spastor 0:fcaad0dfa051 188 * @returns the command response status.
spastor 0:fcaad0dfa051 189 */
spastor 0:fcaad0dfa051 190 virtual AtCmdFrame::AtCmdResp set_param(const RemoteXBee& remote, const char * const param, uint32_t data);
spastor 0:fcaad0dfa051 191
spastor 0:fcaad0dfa051 192 /** set_param - sets a parameter in a remote radio by sending an AT command and waiting for the response.
spastor 0:fcaad0dfa051 193 *
spastor 0:fcaad0dfa051 194 * @param remote remote device
spastor 0:fcaad0dfa051 195 * @param param parameter to be set.
spastor 0:fcaad0dfa051 196 * @param the parameter value byte array (len bytes) to be set.
spastor 0:fcaad0dfa051 197 * @param len number of bytes of the parameter value.
spastor 0:fcaad0dfa051 198 * @returns the command response status.
spastor 0:fcaad0dfa051 199 */
spastor 0:fcaad0dfa051 200 virtual AtCmdFrame::AtCmdResp set_param(const RemoteXBee& remote, const char * const param, const uint8_t * data = NULL, uint16_t len = 0);
spastor 0:fcaad0dfa051 201
spastor 0:fcaad0dfa051 202 /* Allow using XBee::get_param() methods for local radio from this class */
spastor 0:fcaad0dfa051 203 using XBee::get_param;
spastor 0:fcaad0dfa051 204
spastor 0:fcaad0dfa051 205 /** get_param - gets a parameter from a remote radio by sending an AT command and waiting for the response.
spastor 0:fcaad0dfa051 206 *
spastor 0:fcaad0dfa051 207 * @param remote remote device
spastor 0:fcaad0dfa051 208 * @param param parameter to be get.
spastor 0:fcaad0dfa051 209 * @param data pointer where the param value (4 bytes) will be stored.
spastor 0:fcaad0dfa051 210 * @returns the command response status.
spastor 0:fcaad0dfa051 211 */
spastor 0:fcaad0dfa051 212 virtual AtCmdFrame::AtCmdResp get_param(const RemoteXBee& remote, const char * const param, uint32_t * const data);
spastor 0:fcaad0dfa051 213
spastor 0:fcaad0dfa051 214 /** get_param - gets a parameter from a remote radio by sending an AT command and waiting for the response.
spastor 0:fcaad0dfa051 215 *
spastor 0:fcaad0dfa051 216 * @param remote remote device
spastor 0:fcaad0dfa051 217 * @param param parameter to be get.
spastor 0:fcaad0dfa051 218 * @param data pointer where the param value (n bytes) will be stored.
spastor 0:fcaad0dfa051 219 * @param len pointer where the number of bytes of the param value will be stored.
spastor 0:fcaad0dfa051 220 * @returns the command response status.
spastor 0:fcaad0dfa051 221 */
spastor 0:fcaad0dfa051 222 virtual AtCmdFrame::AtCmdResp get_param(const RemoteXBee& remote, const char * const param, uint8_t * const data, uint16_t * const len);
spastor 0:fcaad0dfa051 223
spastor 0:fcaad0dfa051 224 /************************* IO member methods **************************/
spastor 0:fcaad0dfa051 225 /** set_pin_config - configures a radio IO line
spastor 0:fcaad0dfa051 226 *
spastor 0:fcaad0dfa051 227 * @param remote remote device
spastor 0:fcaad0dfa051 228 * @param line IO line being configured
spastor 0:fcaad0dfa051 229 * @param mode configuration mode for the selected line
spastor 0:fcaad0dfa051 230 * @returns
spastor 0:fcaad0dfa051 231 * Success if the operation was successful,
spastor 0:fcaad0dfa051 232 * Failure otherwise
spastor 0:fcaad0dfa051 233 */
spastor 0:fcaad0dfa051 234 RadioStatus set_pin_config(const RemoteXBee& remote, IoLine line, IoMode mode);
spastor 0:fcaad0dfa051 235
spastor 0:fcaad0dfa051 236 /** get_pin_config - gets the configuration of a radio IO line
spastor 0:fcaad0dfa051 237 *
spastor 0:fcaad0dfa051 238 * @param remote remote device
spastor 0:fcaad0dfa051 239 * @param line IO line being read to get its configuration
spastor 0:fcaad0dfa051 240 * @param mode pointer where the configuration will be stored
spastor 0:fcaad0dfa051 241 * @returns
spastor 0:fcaad0dfa051 242 * Success if the operation was successful,
spastor 0:fcaad0dfa051 243 * Failure otherwise
spastor 0:fcaad0dfa051 244 */
spastor 0:fcaad0dfa051 245 RadioStatus get_pin_config(const RemoteXBee& remote, IoLine line, IoMode * const mode);
spastor 0:fcaad0dfa051 246
spastor 0:fcaad0dfa051 247 /** set_dio - sets to low/high a DIO line
spastor 0:fcaad0dfa051 248 *
spastor 0:fcaad0dfa051 249 * @param remote remote device
spastor 0:fcaad0dfa051 250 * @param line DIO line being set
spastor 0:fcaad0dfa051 251 * @param val value that will be set in the DIO line
spastor 0:fcaad0dfa051 252 * @returns
spastor 0:fcaad0dfa051 253 * Success if the operation was successful,
spastor 0:fcaad0dfa051 254 * Failure otherwise
spastor 0:fcaad0dfa051 255 */
spastor 0:fcaad0dfa051 256 RadioStatus set_dio(const RemoteXBee& remote, IoLine line, DioVal val);
spastor 0:fcaad0dfa051 257
spastor 0:fcaad0dfa051 258 /** get_dio - read the value of a DIO configured as digital input
spastor 0:fcaad0dfa051 259 *
spastor 0:fcaad0dfa051 260 * @param remote remote device
spastor 0:fcaad0dfa051 261 * @param line DIO line being read
spastor 0:fcaad0dfa051 262 * @param val pointer where the DIO value read will be stored
spastor 0:fcaad0dfa051 263 * @returns
spastor 0:fcaad0dfa051 264 * Success if the operation was successful,
spastor 0:fcaad0dfa051 265 * Failure otherwise
spastor 0:fcaad0dfa051 266 */
spastor 0:fcaad0dfa051 267 RadioStatus get_dio(const RemoteXBee& remote, IoLine line, DioVal * const val);
spastor 0:fcaad0dfa051 268
spastor 0:fcaad0dfa051 269 /** get_adc - read the value of the espcified ADC line
spastor 0:fcaad0dfa051 270 *
spastor 0:fcaad0dfa051 271 * @param remote remote device
spastor 0:fcaad0dfa051 272 * @param line ADC line being read
spastor 0:fcaad0dfa051 273 * @param val pointer where the value read from the ADC will be stored
spastor 0:fcaad0dfa051 274 * @returns
spastor 0:fcaad0dfa051 275 * Success if the operation was successful,
spastor 0:fcaad0dfa051 276 * Failure otherwise
spastor 0:fcaad0dfa051 277 */
spastor 0:fcaad0dfa051 278 RadioStatus get_adc(const RemoteXBee& remote, IoLine line, uint16_t * const val);
spastor 0:fcaad0dfa051 279
spastor 0:fcaad0dfa051 280 /** set_pwm - sets the duty cycle of a PWM line
spastor 0:fcaad0dfa051 281 *
spastor 0:fcaad0dfa051 282 * @param remote remote device
spastor 0:fcaad0dfa051 283 * @param line PWM line being set
spastor 0:fcaad0dfa051 284 * @param duty_cycle duty cycle that will be set in the PWM line
spastor 0:fcaad0dfa051 285 * @returns
spastor 0:fcaad0dfa051 286 * Success if the operation was successful,
spastor 0:fcaad0dfa051 287 * Failure otherwise
spastor 0:fcaad0dfa051 288 */
spastor 0:fcaad0dfa051 289 RadioStatus set_pwm(const RemoteXBee& remote, IoLine line, float duty_cycle);
spastor 0:fcaad0dfa051 290
spastor 0:fcaad0dfa051 291 /** set_pin_pull_up - enables or disables the internal pull-up resistor of a line
spastor 0:fcaad0dfa051 292 *
spastor 0:fcaad0dfa051 293 * @param remote remote device
spastor 0:fcaad0dfa051 294 * @param line line being configured for pull-up
spastor 0:fcaad0dfa051 295 * @param enable whether to enable the internal pull-up resistor.
spastor 0:fcaad0dfa051 296 * @returns
spastor 0:fcaad0dfa051 297 * Success if the operation was successful,
spastor 0:fcaad0dfa051 298 * Failure otherwise
spastor 0:fcaad0dfa051 299 */
spastor 0:fcaad0dfa051 300 RadioStatus set_pin_pull_up(const RemoteXBee& remote, IoLine line, bool enable);
spastor 0:fcaad0dfa051 301
spastor 0:fcaad0dfa051 302 /** enable_dio_change_detection - enables or disables the notification when a change is detected in a digital input line.
spastor 0:fcaad0dfa051 303 * In other words, it will force an IO Sample transmission when the DIO state changes. Only for DIO0 to DIO7.
spastor 0:fcaad0dfa051 304 *
spastor 0:fcaad0dfa051 305 * @param remote remote device
spastor 0:fcaad0dfa051 306 * @param line line being configured for pull-up
spastor 0:fcaad0dfa051 307 * @param enable whether to enable the internal pull-up resistor.
spastor 0:fcaad0dfa051 308 * @returns
spastor 0:fcaad0dfa051 309 * Success if the operation was successful,
spastor 0:fcaad0dfa051 310 * Failure otherwise
spastor 0:fcaad0dfa051 311 */
spastor 0:fcaad0dfa051 312 RadioStatus enable_dio_change_detection(const RemoteXBee& remote, IoLine line, bool enable);
spastor 0:fcaad0dfa051 313
spastor 0:fcaad0dfa051 314 /* TODO: With current firmware ATM0 fails: Returns just OK and sets pwm to 0 */
spastor 0:fcaad0dfa051 315 #ifdef GET_PWM_AVAILABLE
spastor 0:fcaad0dfa051 316 /** get_pwm - gets the duty cycle of a PWM line
spastor 0:fcaad0dfa051 317 *
spastor 0:fcaad0dfa051 318 * @param remote remote device
spastor 0:fcaad0dfa051 319 * @param line PWM line being read
spastor 0:fcaad0dfa051 320 * @param duty_cycle pointer where the value of the duty cycle read from
spastor 0:fcaad0dfa051 321 * the PWM line will be stored
spastor 0:fcaad0dfa051 322 * @returns
spastor 0:fcaad0dfa051 323 * Success if the operation was successful,
spastor 0:fcaad0dfa051 324 * Failure otherwise
spastor 0:fcaad0dfa051 325 */
spastor 0:fcaad0dfa051 326 RadioStatus get_pwm(const RemoteXBee& remote, IoLine line, float * const duty_cycle);
spastor 0:fcaad0dfa051 327 #endif
spastor 0:fcaad0dfa051 328
spastor 0:fcaad0dfa051 329 protected:
spastor 0:fcaad0dfa051 330 inline bool is_PRO()
spastor 0:fcaad0dfa051 331 {
spastor 0:fcaad0dfa051 332 return (_hw_version & 0xFF00U) == 0x1800U;
spastor 0:fcaad0dfa051 333 }
spastor 0:fcaad0dfa051 334
spastor 0:fcaad0dfa051 335 /** Synchronization lost counter, automatically updated by the library */
spastor 0:fcaad0dfa051 336 volatile uint16_t _sync_lost_cnt;
spastor 0:fcaad0dfa051 337
spastor 0:fcaad0dfa051 338 /** Frame handler used for the node discovery. Registered when a callback function
spastor 0:fcaad0dfa051 339 * is registered */
spastor 0:fcaad0dfa051 340 FH_NodeDiscovery802 *_nd_handler;
spastor 0:fcaad0dfa051 341
spastor 0:fcaad0dfa051 342 /** Frame handler used for the rx 64 bit packets. Automatically registered when a callback
spastor 0:fcaad0dfa051 343 * function is registered */
spastor 0:fcaad0dfa051 344 FH_RxPacket64b802 *_rx_64b_handler;
spastor 0:fcaad0dfa051 345
spastor 0:fcaad0dfa051 346 /** Frame handler used for the rx 16 bit packets. Automatically registered when a callback
spastor 0:fcaad0dfa051 347 * function is registered */
spastor 0:fcaad0dfa051 348 FH_RxPacket16b802 *_rx_16b_handler;
spastor 0:fcaad0dfa051 349
spastor 0:fcaad0dfa051 350 /** Frame handler used for the 64 bit IO Data Samples packets. Automatically registered when a callback
spastor 0:fcaad0dfa051 351 * function is registered */
spastor 0:fcaad0dfa051 352 FH_IoDataSampe64b802 *_io_data_64b_handler;
spastor 0:fcaad0dfa051 353
spastor 0:fcaad0dfa051 354 /** Frame handler used for the 16 bit IO Data Samples packets. Automatically registered when a callback
spastor 0:fcaad0dfa051 355 * function is registered */
spastor 0:fcaad0dfa051 356 FH_IoDataSampe16b802 *_io_data_16b_handler;
spastor 0:fcaad0dfa051 357
spastor 0:fcaad0dfa051 358 /** Method called directly by the library when a modem status frame is received to
spastor 0:fcaad0dfa051 359 * update the internal status variables */
spastor 0:fcaad0dfa051 360 virtual void radio_status_update(AtCmdFrame::ModemStatus modem_status);
spastor 0:fcaad0dfa051 361
spastor 0:fcaad0dfa051 362 /* Allow using XBee::send_data() methods from this class */
spastor 0:fcaad0dfa051 363 using XBee::send_data;
spastor 0:fcaad0dfa051 364
spastor 0:fcaad0dfa051 365 private:
spastor 0:fcaad0dfa051 366
spastor 0:fcaad0dfa051 367 };
spastor 0:fcaad0dfa051 368
spastor 0:fcaad0dfa051 369 } /* namespace XBeeLib */
spastor 0:fcaad0dfa051 370
spastor 0:fcaad0dfa051 371 #endif /* __XBEE_802_H_ */
spastor 0:fcaad0dfa051 372
spastor 0:fcaad0dfa051 373