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:
Thu May 14 16:21:39 2015 +0200
Revision:
2:2ee1b6d51df2
Parent:
1:794d1d3e4a08
Child:
3:8662ebe83570
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 2:2ee1b6d51df2 156 /** send_data_asyncr - sends data to a remote device not waiting for the packet answer
spastor 0:fcaad0dfa051 157 *
hbujanda 2:2ee1b6d51df2 158 * @param remote remote device
hbujanda 1:794d1d3e4a08 159 * @param data pointer to the data that will be sent
hbujanda 1:794d1d3e4a08 160 * @param len number of bytes that will be transmitted
hbujanda 1:794d1d3e4a08 161 * @returns the result of the data transfer
hbujanda 1:794d1d3e4a08 162 * TxStatusSuccess if the operation was successful,
hbujanda 1:794d1d3e4a08 163 * the error code otherwise
spastor 0:fcaad0dfa051 164 */
hbujanda 2:2ee1b6d51df2 165 TxStatus send_data_asyncr(const RemoteXBee& remote, const uint8_t *const data, uint16_t len);
hbujanda 1:794d1d3e4a08 166
hbujanda 2:2ee1b6d51df2 167 /** get_remote_node_by_id - searches for a device in the network with the specified Node Identifier.
hbujanda 1:794d1d3e4a08 168 *
hbujanda 2:2ee1b6d51df2 169 * @param node_id node id of the device we are looking for
hbujanda 2:2ee1b6d51df2 170 * @returns a RemoteXBee802 with the 16-bit and 64-bit address of the remote device whose node id matches with the parameter.
hbujanda 2:2ee1b6d51df2 171 * If node is not found, the returned object will have invalid addresses (RemoteXBee802::is_valid() will return false).
hbujanda 1:794d1d3e4a08 172 */
hbujanda 2:2ee1b6d51df2 173 RemoteXBee802 get_remote_node_by_id(const char * const node_id);
spastor 0:fcaad0dfa051 174
spastor 0:fcaad0dfa051 175 /* Allow using XBee::set_param() methods for local radio from this class */
spastor 0:fcaad0dfa051 176 using XBee::set_param;
spastor 0:fcaad0dfa051 177
spastor 0:fcaad0dfa051 178 /** set_param - sets a parameter in a remote radio by sending an AT command and waiting for the response.
spastor 0:fcaad0dfa051 179 *
spastor 0:fcaad0dfa051 180 * @param remote remote device
spastor 0:fcaad0dfa051 181 * @param param parameter to be set.
spastor 0:fcaad0dfa051 182 * @param data the parameter value (4 bytes) to be set.
spastor 0:fcaad0dfa051 183 * @returns the command response status.
spastor 0:fcaad0dfa051 184 */
spastor 0:fcaad0dfa051 185 virtual AtCmdFrame::AtCmdResp set_param(const RemoteXBee& remote, const char * const param, uint32_t data);
spastor 0:fcaad0dfa051 186
spastor 0:fcaad0dfa051 187 /** set_param - sets a parameter in a remote radio by sending an AT command and waiting for the response.
spastor 0:fcaad0dfa051 188 *
spastor 0:fcaad0dfa051 189 * @param remote remote device
spastor 0:fcaad0dfa051 190 * @param param parameter to be set.
spastor 0:fcaad0dfa051 191 * @param the parameter value byte array (len bytes) to be set.
spastor 0:fcaad0dfa051 192 * @param len number of bytes of the parameter value.
spastor 0:fcaad0dfa051 193 * @returns the command response status.
spastor 0:fcaad0dfa051 194 */
spastor 0:fcaad0dfa051 195 virtual AtCmdFrame::AtCmdResp set_param(const RemoteXBee& remote, const char * const param, const uint8_t * data = NULL, uint16_t len = 0);
spastor 0:fcaad0dfa051 196
spastor 0:fcaad0dfa051 197 /* Allow using XBee::get_param() methods for local radio from this class */
spastor 0:fcaad0dfa051 198 using XBee::get_param;
spastor 0:fcaad0dfa051 199
spastor 0:fcaad0dfa051 200 /** get_param - gets a parameter from a remote radio by sending an AT command and waiting for the response.
spastor 0:fcaad0dfa051 201 *
spastor 0:fcaad0dfa051 202 * @param remote remote device
spastor 0:fcaad0dfa051 203 * @param param parameter to be get.
spastor 0:fcaad0dfa051 204 * @param data pointer where the param value (4 bytes) will be stored.
spastor 0:fcaad0dfa051 205 * @returns the command response status.
spastor 0:fcaad0dfa051 206 */
spastor 0:fcaad0dfa051 207 virtual AtCmdFrame::AtCmdResp get_param(const RemoteXBee& remote, const char * const param, uint32_t * const data);
spastor 0:fcaad0dfa051 208
spastor 0:fcaad0dfa051 209 /** get_param - gets a parameter from a remote radio by sending an AT command and waiting for the response.
spastor 0:fcaad0dfa051 210 *
spastor 0:fcaad0dfa051 211 * @param remote remote device
spastor 0:fcaad0dfa051 212 * @param param parameter to be get.
spastor 0:fcaad0dfa051 213 * @param data pointer where the param value (n bytes) will be stored.
spastor 0:fcaad0dfa051 214 * @param len pointer where the number of bytes of the param value will be stored.
spastor 0:fcaad0dfa051 215 * @returns the command response status.
spastor 0:fcaad0dfa051 216 */
spastor 0:fcaad0dfa051 217 virtual AtCmdFrame::AtCmdResp get_param(const RemoteXBee& remote, const char * const param, uint8_t * const data, uint16_t * const len);
spastor 0:fcaad0dfa051 218
spastor 0:fcaad0dfa051 219 /************************* IO member methods **************************/
spastor 0:fcaad0dfa051 220 /** set_pin_config - configures a radio IO line
spastor 0:fcaad0dfa051 221 *
spastor 0:fcaad0dfa051 222 * @param remote remote device
spastor 0:fcaad0dfa051 223 * @param line IO line being configured
spastor 0:fcaad0dfa051 224 * @param mode configuration mode for the selected line
spastor 0:fcaad0dfa051 225 * @returns
spastor 0:fcaad0dfa051 226 * Success if the operation was successful,
spastor 0:fcaad0dfa051 227 * Failure otherwise
spastor 0:fcaad0dfa051 228 */
spastor 0:fcaad0dfa051 229 RadioStatus set_pin_config(const RemoteXBee& remote, IoLine line, IoMode mode);
spastor 0:fcaad0dfa051 230
spastor 0:fcaad0dfa051 231 /** get_pin_config - gets the configuration of a radio IO line
spastor 0:fcaad0dfa051 232 *
spastor 0:fcaad0dfa051 233 * @param remote remote device
spastor 0:fcaad0dfa051 234 * @param line IO line being read to get its configuration
spastor 0:fcaad0dfa051 235 * @param mode pointer where the configuration will be stored
spastor 0:fcaad0dfa051 236 * @returns
spastor 0:fcaad0dfa051 237 * Success if the operation was successful,
spastor 0:fcaad0dfa051 238 * Failure otherwise
spastor 0:fcaad0dfa051 239 */
spastor 0:fcaad0dfa051 240 RadioStatus get_pin_config(const RemoteXBee& remote, IoLine line, IoMode * const mode);
spastor 0:fcaad0dfa051 241
spastor 0:fcaad0dfa051 242 /** set_dio - sets to low/high a DIO line
spastor 0:fcaad0dfa051 243 *
spastor 0:fcaad0dfa051 244 * @param remote remote device
spastor 0:fcaad0dfa051 245 * @param line DIO line being set
spastor 0:fcaad0dfa051 246 * @param val value that will be set in the DIO line
spastor 0:fcaad0dfa051 247 * @returns
spastor 0:fcaad0dfa051 248 * Success if the operation was successful,
spastor 0:fcaad0dfa051 249 * Failure otherwise
spastor 0:fcaad0dfa051 250 */
spastor 0:fcaad0dfa051 251 RadioStatus set_dio(const RemoteXBee& remote, IoLine line, DioVal val);
spastor 0:fcaad0dfa051 252
spastor 0:fcaad0dfa051 253 /** get_dio - read the value of a DIO configured as digital input
spastor 0:fcaad0dfa051 254 *
spastor 0:fcaad0dfa051 255 * @param remote remote device
spastor 0:fcaad0dfa051 256 * @param line DIO line being read
spastor 0:fcaad0dfa051 257 * @param val pointer where the DIO value read will be stored
spastor 0:fcaad0dfa051 258 * @returns
spastor 0:fcaad0dfa051 259 * Success if the operation was successful,
spastor 0:fcaad0dfa051 260 * Failure otherwise
spastor 0:fcaad0dfa051 261 */
spastor 0:fcaad0dfa051 262 RadioStatus get_dio(const RemoteXBee& remote, IoLine line, DioVal * const val);
spastor 0:fcaad0dfa051 263
spastor 0:fcaad0dfa051 264 /** get_adc - read the value of the espcified ADC line
spastor 0:fcaad0dfa051 265 *
spastor 0:fcaad0dfa051 266 * @param remote remote device
spastor 0:fcaad0dfa051 267 * @param line ADC line being read
spastor 0:fcaad0dfa051 268 * @param val pointer where the value read from the ADC will be stored
spastor 0:fcaad0dfa051 269 * @returns
spastor 0:fcaad0dfa051 270 * Success if the operation was successful,
spastor 0:fcaad0dfa051 271 * Failure otherwise
spastor 0:fcaad0dfa051 272 */
spastor 0:fcaad0dfa051 273 RadioStatus get_adc(const RemoteXBee& remote, IoLine line, uint16_t * const val);
spastor 0:fcaad0dfa051 274
spastor 0:fcaad0dfa051 275 /** set_pwm - sets the duty cycle of a PWM line
spastor 0:fcaad0dfa051 276 *
spastor 0:fcaad0dfa051 277 * @param remote remote device
spastor 0:fcaad0dfa051 278 * @param line PWM line being set
spastor 0:fcaad0dfa051 279 * @param duty_cycle duty cycle that will be set in the PWM line
spastor 0:fcaad0dfa051 280 * @returns
spastor 0:fcaad0dfa051 281 * Success if the operation was successful,
spastor 0:fcaad0dfa051 282 * Failure otherwise
spastor 0:fcaad0dfa051 283 */
spastor 0:fcaad0dfa051 284 RadioStatus set_pwm(const RemoteXBee& remote, IoLine line, float duty_cycle);
spastor 0:fcaad0dfa051 285
spastor 0:fcaad0dfa051 286 /** set_pin_pull_up - enables or disables the internal pull-up resistor of a line
spastor 0:fcaad0dfa051 287 *
spastor 0:fcaad0dfa051 288 * @param remote remote device
spastor 0:fcaad0dfa051 289 * @param line line being configured for pull-up
spastor 0:fcaad0dfa051 290 * @param enable whether to enable the internal pull-up resistor.
spastor 0:fcaad0dfa051 291 * @returns
spastor 0:fcaad0dfa051 292 * Success if the operation was successful,
spastor 0:fcaad0dfa051 293 * Failure otherwise
spastor 0:fcaad0dfa051 294 */
spastor 0:fcaad0dfa051 295 RadioStatus set_pin_pull_up(const RemoteXBee& remote, IoLine line, bool enable);
spastor 0:fcaad0dfa051 296
spastor 0:fcaad0dfa051 297 /** enable_dio_change_detection - enables or disables the notification when a change is detected in a digital input line.
spastor 0:fcaad0dfa051 298 * In other words, it will force an IO Sample transmission when the DIO state changes. Only for DIO0 to DIO7.
spastor 0:fcaad0dfa051 299 *
spastor 0:fcaad0dfa051 300 * @param remote remote device
spastor 0:fcaad0dfa051 301 * @param line line being configured for pull-up
spastor 0:fcaad0dfa051 302 * @param enable whether to enable the internal pull-up resistor.
spastor 0:fcaad0dfa051 303 * @returns
spastor 0:fcaad0dfa051 304 * Success if the operation was successful,
spastor 0:fcaad0dfa051 305 * Failure otherwise
spastor 0:fcaad0dfa051 306 */
spastor 0:fcaad0dfa051 307 RadioStatus enable_dio_change_detection(const RemoteXBee& remote, IoLine line, bool enable);
spastor 0:fcaad0dfa051 308
spastor 0:fcaad0dfa051 309 /* TODO: With current firmware ATM0 fails: Returns just OK and sets pwm to 0 */
spastor 0:fcaad0dfa051 310 #ifdef GET_PWM_AVAILABLE
spastor 0:fcaad0dfa051 311 /** get_pwm - gets the duty cycle of a PWM line
spastor 0:fcaad0dfa051 312 *
spastor 0:fcaad0dfa051 313 * @param remote remote device
spastor 0:fcaad0dfa051 314 * @param line PWM line being read
spastor 0:fcaad0dfa051 315 * @param duty_cycle pointer where the value of the duty cycle read from
spastor 0:fcaad0dfa051 316 * the PWM line will be stored
spastor 0:fcaad0dfa051 317 * @returns
spastor 0:fcaad0dfa051 318 * Success if the operation was successful,
spastor 0:fcaad0dfa051 319 * Failure otherwise
spastor 0:fcaad0dfa051 320 */
spastor 0:fcaad0dfa051 321 RadioStatus get_pwm(const RemoteXBee& remote, IoLine line, float * const duty_cycle);
spastor 0:fcaad0dfa051 322 #endif
spastor 0:fcaad0dfa051 323
spastor 0:fcaad0dfa051 324 protected:
spastor 0:fcaad0dfa051 325 inline bool is_PRO()
spastor 0:fcaad0dfa051 326 {
spastor 0:fcaad0dfa051 327 return (_hw_version & 0xFF00U) == 0x1800U;
spastor 0:fcaad0dfa051 328 }
spastor 0:fcaad0dfa051 329
spastor 0:fcaad0dfa051 330 /** Synchronization lost counter, automatically updated by the library */
spastor 0:fcaad0dfa051 331 volatile uint16_t _sync_lost_cnt;
spastor 0:fcaad0dfa051 332
spastor 0:fcaad0dfa051 333 /** Frame handler used for the node discovery. Registered when a callback function
spastor 0:fcaad0dfa051 334 * is registered */
spastor 0:fcaad0dfa051 335 FH_NodeDiscovery802 *_nd_handler;
spastor 0:fcaad0dfa051 336
spastor 0:fcaad0dfa051 337 /** Frame handler used for the rx 64 bit packets. Automatically registered when a callback
spastor 0:fcaad0dfa051 338 * function is registered */
spastor 0:fcaad0dfa051 339 FH_RxPacket64b802 *_rx_64b_handler;
spastor 0:fcaad0dfa051 340
spastor 0:fcaad0dfa051 341 /** Frame handler used for the rx 16 bit packets. Automatically registered when a callback
spastor 0:fcaad0dfa051 342 * function is registered */
spastor 0:fcaad0dfa051 343 FH_RxPacket16b802 *_rx_16b_handler;
spastor 0:fcaad0dfa051 344
spastor 0:fcaad0dfa051 345 /** Frame handler used for the 64 bit IO Data Samples packets. Automatically registered when a callback
spastor 0:fcaad0dfa051 346 * function is registered */
spastor 0:fcaad0dfa051 347 FH_IoDataSampe64b802 *_io_data_64b_handler;
spastor 0:fcaad0dfa051 348
spastor 0:fcaad0dfa051 349 /** Frame handler used for the 16 bit IO Data Samples packets. Automatically registered when a callback
spastor 0:fcaad0dfa051 350 * function is registered */
spastor 0:fcaad0dfa051 351 FH_IoDataSampe16b802 *_io_data_16b_handler;
spastor 0:fcaad0dfa051 352
spastor 0:fcaad0dfa051 353 /** Method called directly by the library when a modem status frame is received to
spastor 0:fcaad0dfa051 354 * update the internal status variables */
spastor 0:fcaad0dfa051 355 virtual void radio_status_update(AtCmdFrame::ModemStatus modem_status);
spastor 0:fcaad0dfa051 356
spastor 0:fcaad0dfa051 357 /* Allow using XBee::send_data() methods from this class */
spastor 0:fcaad0dfa051 358 using XBee::send_data;
spastor 0:fcaad0dfa051 359
spastor 0:fcaad0dfa051 360 private:
spastor 0:fcaad0dfa051 361
spastor 0:fcaad0dfa051 362 };
spastor 0:fcaad0dfa051 363
spastor 0:fcaad0dfa051 364 } /* namespace XBeeLib */
spastor 0:fcaad0dfa051 365
spastor 0:fcaad0dfa051 366 #endif /* __XBEE_802_H_ */
spastor 0:fcaad0dfa051 367
spastor 0:fcaad0dfa051 368