XBee modules

Dependencies:   DigiLogger

Fork of XBeeLib by Digi International Inc.

Committer:
spastor
Date:
Mon May 18 13:16:55 2015 +0200
Revision:
3:8662ebe83570
Parent:
2:2ee1b6d51df2
Child:
4:629712865107
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(__DIGI_RADIO_H_)
spastor 0:fcaad0dfa051 14 #define __DIGI_RADIO_H_
spastor 0:fcaad0dfa051 15
spastor 0:fcaad0dfa051 16 #include <stdint.h>
spastor 0:fcaad0dfa051 17 #include "config.h"
spastor 0:fcaad0dfa051 18 #include "Utils/Debug.h"
spastor 0:fcaad0dfa051 19 #include "Frames/AtCmdFrame.h"
spastor 0:fcaad0dfa051 20 #include "FrameHandlers/FrameHandler.h"
spastor 0:fcaad0dfa051 21 #include "FrameHandlers/FH_ModemStatus.h"
spastor 0:fcaad0dfa051 22 #include "FrameBuffer/FrameBuffer.h"
spastor 0:fcaad0dfa051 23 #include "Addresses.h"
spastor 0:fcaad0dfa051 24 #include "RemoteXBee/RemoteXBee.h"
spastor 0:fcaad0dfa051 25 #include "IO/IO.h"
spastor 0:fcaad0dfa051 26
spastor 0:fcaad0dfa051 27 #define MAX_FRAME_HANDLERS 4
spastor 0:fcaad0dfa051 28 #define RESET_TIMEOUT_MS 5000
spastor 0:fcaad0dfa051 29
spastor 0:fcaad0dfa051 30 #define DR_API_FRAME_OVERHEAD 4 /* Start of frame + frame len + checksum */
spastor 0:fcaad0dfa051 31 #define DR_MIN_API_FRAME_LEN 4
spastor 0:fcaad0dfa051 32 #define DR_START_OF_FRAME 0x7E
spastor 0:fcaad0dfa051 33 #define DR_ESCAPE_BYTE 0x7D
spastor 0:fcaad0dfa051 34 #define DR_XON_BYTE 0x11
spastor 0:fcaad0dfa051 35 #define DR_XOFF_BYTE 0x13
spastor 0:fcaad0dfa051 36 #define DR_ESCAPE_XOR_BYTE 0x20
spastor 0:fcaad0dfa051 37
spastor 0:fcaad0dfa051 38 /* TODO, verify these flags work in all modules */
spastor 0:fcaad0dfa051 39 #define DISABLE_RETRIES_AND_ROUTE_REPAIR 0x01
spastor 0:fcaad0dfa051 40 #define ENABLE_APS_ENCRYPTION 0x20
spastor 0:fcaad0dfa051 41 #define USE_EXTENDED_TX_TIMEOUT 0x40
spastor 0:fcaad0dfa051 42
spastor 0:fcaad0dfa051 43 namespace XBeeLib {
spastor 0:fcaad0dfa051 44
spastor 0:fcaad0dfa051 45 /**
spastor 0:fcaad0dfa051 46 * @defgroup RadioStatus
spastor 0:fcaad0dfa051 47 * @{
spastor 0:fcaad0dfa051 48 */
spastor 0:fcaad0dfa051 49 /**
spastor 0:fcaad0dfa051 50 * RadioStatus
spastor 0:fcaad0dfa051 51 */
spastor 0:fcaad0dfa051 52 enum RadioStatus {
spastor 0:fcaad0dfa051 53 Success = 0, /**< Success */
spastor 0:fcaad0dfa051 54 Failure = -1, /**< Failure */
spastor 0:fcaad0dfa051 55 OpNotSupported = -2, /**< Option Not Supported */
spastor 0:fcaad0dfa051 56 };
spastor 0:fcaad0dfa051 57 /**
spastor 0:fcaad0dfa051 58 * @}
spastor 0:fcaad0dfa051 59 */
spastor 0:fcaad0dfa051 60
spastor 0:fcaad0dfa051 61 /**
spastor 0:fcaad0dfa051 62 * @defgroup RadioType
spastor 0:fcaad0dfa051 63 * @{
spastor 0:fcaad0dfa051 64 */
spastor 0:fcaad0dfa051 65 /**
spastor 0:fcaad0dfa051 66 * RadioType
spastor 0:fcaad0dfa051 67 */
spastor 0:fcaad0dfa051 68 enum RadioType {
spastor 0:fcaad0dfa051 69 Unknown = 0, /**< Not detected yet */
spastor 0:fcaad0dfa051 70 XB24_A_S1 = 0x17, /**< S1 */
spastor 0:fcaad0dfa051 71 XBP24_A_S1 = 0x18, /**< S1 */
spastor 0:fcaad0dfa051 72 XB24_B_S2 = 0x19, /**< S2 */
spastor 0:fcaad0dfa051 73 XBP24_B_S2 = 0x1A, /**< S2 */
spastor 0:fcaad0dfa051 74 XBP09_D = 0x1B, /**< S4 */
spastor 0:fcaad0dfa051 75 XBP09_XC = 0x1C, /**< S3 */
spastor 0:fcaad0dfa051 76 XBP08_D = 0x1D, /**< 868MHz S5 */
spastor 0:fcaad0dfa051 77 XBP24_B_S2B = 0x1E, /**< S2B */
spastor 0:fcaad0dfa051 78 XB24_WF = 0x1F, /**< S6 */
spastor 0:fcaad0dfa051 79 XBP24_C_SMT = 0x21, /**< XBee PRO SMT S2C */
spastor 0:fcaad0dfa051 80 XB24_C_SMT = 0x22, /**< XBee SMT S2C */
spastor 0:fcaad0dfa051 81 XBP09_XC_B = 0x23, /**< S3B */
spastor 0:fcaad0dfa051 82 XBP09_B = 0x23, /**< S3B */
spastor 0:fcaad0dfa051 83 XB8 = 0x24, /**< S8 */
spastor 0:fcaad0dfa051 84 XB2B_WF_TH = 0x27, /**< S6B TH */
spastor 0:fcaad0dfa051 85 XB2B_WF_SMT = 0x28, /**< S6B SMT */
spastor 0:fcaad0dfa051 86 XBP24_C_TH = 0x2D, /**< S2C TH */
spastor 0:fcaad0dfa051 87 XB24_C_TH = 0x2E, /**< S2C TH */
spastor 0:fcaad0dfa051 88 };
spastor 0:fcaad0dfa051 89 /**
spastor 0:fcaad0dfa051 90 * @}
spastor 0:fcaad0dfa051 91 */
spastor 0:fcaad0dfa051 92
spastor 0:fcaad0dfa051 93 /**
spastor 0:fcaad0dfa051 94 * @defgroup TxStatus
spastor 0:fcaad0dfa051 95 * @{
spastor 0:fcaad0dfa051 96 */
spastor 0:fcaad0dfa051 97 /**
spastor 0:fcaad0dfa051 98 * TxStatus
spastor 0:fcaad0dfa051 99 */
spastor 0:fcaad0dfa051 100 enum TxStatus {
spastor 0:fcaad0dfa051 101 TxStatusSuccess = 0, /**< Success */
spastor 0:fcaad0dfa051 102 TxStatusAckFail = 1, /**< MAC ACK Failure */
spastor 0:fcaad0dfa051 103 TxStatusCCAFail = 2, /**< CCA Failure */
spastor 0:fcaad0dfa051 104 TxStatusInvDestEP = 0x15, /**< Invalid destination endpoint */
spastor 0:fcaad0dfa051 105 TxStatusNwAckFail = 0x21, /**< Network ACK Failure */
spastor 0:fcaad0dfa051 106 TxStatusNotJoinNw = 0x22, /**< Not Joined to Network */
spastor 0:fcaad0dfa051 107 TxStatusSelfAddr = 0x23, /**< Self-addressed */
spastor 0:fcaad0dfa051 108 TxStatusAddrNotFound = 0x24, /**< Address Not Found */
spastor 0:fcaad0dfa051 109 TxStatusRouteNotFound = 0x25, /**< Route Not Found */
spastor 0:fcaad0dfa051 110 TxStatusBroadSrcFail2Heard = 0x26, /**< Broadcast source failed to hear a neighbor relay the message */
spastor 0:fcaad0dfa051 111 TxStatusInvBindTableIdx = 0x2B, /**< Invalid binding table index */
spastor 0:fcaad0dfa051 112 TxStatusResourceError = 0x2C, /**< Resource error lack of free buffers, timers, etc. */
spastor 0:fcaad0dfa051 113 TxStatusAttBroadcWithAPS = 0x2D, /**< Attempted broadcast with APS transmission */
spastor 0:fcaad0dfa051 114 TxStatusAttUnicWithAPSEE0 = 0x2E, /**< Attempted unicast with APS transmission, but EE=0 */
spastor 0:fcaad0dfa051 115 TxStatusResourceError2 = 0x31, /**< TxStatusResourceError2 */
spastor 0:fcaad0dfa051 116 TxStatusInternalError = 0x32, /**< Resource error lack of free buffers, timers, etc. */
spastor 0:fcaad0dfa051 117 TxStatusPayloadTooLarge = 0x74, /**< Data payload too large */
spastor 0:fcaad0dfa051 118 TxStatusIndirectMsgUnReq = 0x75, /**< Indirect message unrequested */
spastor 0:fcaad0dfa051 119 TxStatusInvalidAddr = 0xfe, /**< Invalid Address (Error generated by the library) */
spastor 0:fcaad0dfa051 120 TxStatusTimeout = 0xff, /**< Timeout (Error generated by the library) */
spastor 0:fcaad0dfa051 121 };
spastor 0:fcaad0dfa051 122 /**
spastor 0:fcaad0dfa051 123 * @}
spastor 0:fcaad0dfa051 124 */
spastor 0:fcaad0dfa051 125
spastor 0:fcaad0dfa051 126 /**
spastor 0:fcaad0dfa051 127 * @defgroup PmMode
spastor 0:fcaad0dfa051 128 * @{
spastor 0:fcaad0dfa051 129 */
spastor 0:fcaad0dfa051 130 /**
spastor 0:fcaad0dfa051 131 * PmMode
spastor 0:fcaad0dfa051 132 */
spastor 0:fcaad0dfa051 133 enum PmMode {
spastor 0:fcaad0dfa051 134 SleepDisabled = 0, /**< SleepDisabled */
spastor 0:fcaad0dfa051 135 PinSleep = 1, /**< PinSleep */
spastor 0:fcaad0dfa051 136 PinDoze = 2, /**< PinDoze */
spastor 0:fcaad0dfa051 137 CyclicSeleep = 4, /**< CyclicSeleep */
spastor 0:fcaad0dfa051 138 CyclicSeleepPinW = 5, /**< CyclicSeleepPinW */
spastor 0:fcaad0dfa051 139 };
spastor 0:fcaad0dfa051 140 /**
spastor 0:fcaad0dfa051 141 * @}
spastor 0:fcaad0dfa051 142 */
spastor 0:fcaad0dfa051 143
spastor 0:fcaad0dfa051 144 /**
spastor 0:fcaad0dfa051 145 * @defgroup NetworkRole
spastor 0:fcaad0dfa051 146 * @{
spastor 0:fcaad0dfa051 147 */
spastor 0:fcaad0dfa051 148 /**
spastor 0:fcaad0dfa051 149 * NetworkRole
spastor 0:fcaad0dfa051 150 */
spastor 0:fcaad0dfa051 151 enum NetworkRole {
spastor 0:fcaad0dfa051 152 UnknownRole, /**< Unknown Role */
spastor 0:fcaad0dfa051 153 Coordinator, /**< Coordinator */
spastor 0:fcaad0dfa051 154 Router, /**< Router */
spastor 0:fcaad0dfa051 155 EndDevice, /**< EndDevice */
spastor 0:fcaad0dfa051 156 };
spastor 0:fcaad0dfa051 157 /**
spastor 0:fcaad0dfa051 158 * @}
spastor 0:fcaad0dfa051 159 */
spastor 0:fcaad0dfa051 160
spastor 0:fcaad0dfa051 161 /**
spastor 0:fcaad0dfa051 162 * @defgroup RadioLocation
spastor 0:fcaad0dfa051 163 * @{
spastor 0:fcaad0dfa051 164 */
spastor 0:fcaad0dfa051 165 /**
spastor 0:fcaad0dfa051 166 * RadioLocation
spastor 0:fcaad0dfa051 167 */
spastor 0:fcaad0dfa051 168 enum RadioLocation {
spastor 0:fcaad0dfa051 169 RadioLocal = 0, /**< Local Radio */
spastor 0:fcaad0dfa051 170 RadioRemote = 1, /**< Remote Radio */
spastor 0:fcaad0dfa051 171 };
spastor 0:fcaad0dfa051 172 /**
spastor 0:fcaad0dfa051 173 * @}
spastor 0:fcaad0dfa051 174 */
spastor 0:fcaad0dfa051 175
spastor 0:fcaad0dfa051 176 /** Parent Class for XBee modules, not to be directly used */
spastor 0:fcaad0dfa051 177 class XBee
spastor 0:fcaad0dfa051 178 {
spastor 0:fcaad0dfa051 179 private:
spastor 0:fcaad0dfa051 180 /** wait_for_module_to_reset - waits until a Modem Status packet with a reset status
spastor 0:fcaad0dfa051 181 * is received, or the timeout expires.
spastor 0:fcaad0dfa051 182 *
spastor 0:fcaad0dfa051 183 * @returns
spastor 0:fcaad0dfa051 184 * Success if a Modem Status was received,
spastor 0:fcaad0dfa051 185 * Failure otherwise
spastor 0:fcaad0dfa051 186 */
spastor 0:fcaad0dfa051 187 RadioStatus wait_for_module_to_reset(volatile uint16_t *rst_cnt_p, uint16_t init_rst_cnt);
spastor 0:fcaad0dfa051 188
spastor 0:fcaad0dfa051 189 protected:
spastor 0:fcaad0dfa051 190 /** timer used by local and remote objects */
spastor 0:fcaad0dfa051 191 static Timer _timer;
spastor 0:fcaad0dfa051 192
spastor 0:fcaad0dfa051 193 /** buffer to store the received frames */
spastor 0:fcaad0dfa051 194 static FrameBuffer _framebuf;
spastor 0:fcaad0dfa051 195
spastor 0:fcaad0dfa051 196 public:
spastor 0:fcaad0dfa051 197
spastor 0:fcaad0dfa051 198 /**
spastor 0:fcaad0dfa051 199 * RadioMode
spastor 0:fcaad0dfa051 200 */
spastor 0:fcaad0dfa051 201 enum RadioMode {
spastor 0:fcaad0dfa051 202 ModeUnknown = 0, /**< Unknown */
spastor 0:fcaad0dfa051 203 ModeAPI1 = 1, /**< API1 */
spastor 0:fcaad0dfa051 204 ModeAPI2 = 2, /**< API2 */
spastor 0:fcaad0dfa051 205 ModeTransparent = 3, /**< Transparent */
spastor 0:fcaad0dfa051 206 ModeBootloader = 4, /**< Bootloader */
spastor 0:fcaad0dfa051 207 };
spastor 0:fcaad0dfa051 208
spastor 0:fcaad0dfa051 209 /** Class constructor
spastor 0:fcaad0dfa051 210 * @param tx the TX pin of the UART that will interface the XBee module
spastor 0:fcaad0dfa051 211 * @param rx the RX pin of the UART that will interface the XBee module
spastor 0:fcaad0dfa051 212 * @param reset the pin to which the XBee's reset line is attached to, use NC if not available
spastor 0:fcaad0dfa051 213 * @param rts the RTS pin for the UART that will interface the XBee module, use NC if not available
spastor 0:fcaad0dfa051 214 * @param cts the CTS pin for the UART that will interface the XBee module, use NC if not available
spastor 0:fcaad0dfa051 215 * @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 216 * to this baud rate (ATBD parameter). By default it is configured to 9600 bps
spastor 0:fcaad0dfa051 217 * */
spastor 0:fcaad0dfa051 218 XBee(PinName tx, PinName rx, PinName reset = NC, PinName rts = NC, PinName cts = NC, int baud = 9600);
spastor 0:fcaad0dfa051 219
spastor 0:fcaad0dfa051 220 XBee(const XBee& other); /* Intentionally not implemented */
spastor 0:fcaad0dfa051 221 /** Class destructor */
spastor 0:fcaad0dfa051 222 virtual ~XBee();
spastor 0:fcaad0dfa051 223
spastor 0:fcaad0dfa051 224 /** init- initializes object
spastor 0:fcaad0dfa051 225 * This function must be called just after creating the object so it initializes internal data.
spastor 0:fcaad0dfa051 226 * @returns
spastor 0:fcaad0dfa051 227 * Success if the module has been properly initialized and is ready to process data.
spastor 0:fcaad0dfa051 228 * Failure otherwise.
spastor 0:fcaad0dfa051 229 */
spastor 0:fcaad0dfa051 230 RadioStatus init();
spastor 0:fcaad0dfa051 231
spastor 0:fcaad0dfa051 232 /** get_addr64 - returns the 64bit address of the local device
spastor 0:fcaad0dfa051 233 *
spastor 0:fcaad0dfa051 234 * @returns the 64bit address of the local device
spastor 0:fcaad0dfa051 235 */
spastor 0:fcaad0dfa051 236 uint64_t get_addr64() const;
spastor 0:fcaad0dfa051 237
spastor 0:fcaad0dfa051 238 /** get_addr16 - returns the 16bit address of the local device
spastor 0:fcaad0dfa051 239 *
spastor 0:fcaad0dfa051 240 * @returns the 16-bit address of the local device.
spastor 0:fcaad0dfa051 241 */
spastor 0:fcaad0dfa051 242 uint16_t get_addr16() const;
spastor 0:fcaad0dfa051 243
spastor 0:fcaad0dfa051 244 /** get_network_address - gets the 16bit network address of the device
spastor 0:fcaad0dfa051 245 *
spastor 0:fcaad0dfa051 246 * @param addr pointer where the device 16bit network address will be stored
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 get_network_address(uint16_t * const addr);
spastor 0:fcaad0dfa051 252
spastor 0:fcaad0dfa051 253 /** hardware_reset - performs a hardware reset. The reset GPIO must have
spastor 0:fcaad0dfa051 254 * been provided to the constructor
spastor 0:fcaad0dfa051 255 *
spastor 0:fcaad0dfa051 256 * @returns
spastor 0:fcaad0dfa051 257 * Success if the operation was successful,
spastor 0:fcaad0dfa051 258 * Failure otherwise
spastor 0:fcaad0dfa051 259 */
spastor 0:fcaad0dfa051 260 RadioStatus hardware_reset();
spastor 0:fcaad0dfa051 261
spastor 0:fcaad0dfa051 262 /** software_reset - performs a firmware reset
spastor 0:fcaad0dfa051 263 *
spastor 0:fcaad0dfa051 264 * @returns
spastor 0:fcaad0dfa051 265 * Success if the operation was successful,
spastor 0:fcaad0dfa051 266 * Failure otherwise
spastor 0:fcaad0dfa051 267 */
spastor 0:fcaad0dfa051 268 RadioStatus software_reset();
spastor 0:fcaad0dfa051 269
spastor 0:fcaad0dfa051 270 /** device_reset - performs a hardware reset if there is a GPIO connected to the
spastor 0:fcaad0dfa051 271 * reset line of the device. Otherwise, performs a firmware reset.
spastor 0:fcaad0dfa051 272 *
spastor 0:fcaad0dfa051 273 * @returns
spastor 0:fcaad0dfa051 274 * Success if the operation was successful,
spastor 0:fcaad0dfa051 275 * Failure otherwise
spastor 0:fcaad0dfa051 276 */
spastor 0:fcaad0dfa051 277 #if defined(UNIT_TEST)
spastor 0:fcaad0dfa051 278 virtual
spastor 0:fcaad0dfa051 279 #endif
spastor 0:fcaad0dfa051 280 RadioStatus device_reset();
spastor 0:fcaad0dfa051 281
spastor 0:fcaad0dfa051 282 /** get_radio_type - returns the type of radio, in most cases the hardware version
spastor 0:fcaad0dfa051 283 *
spastor 0:fcaad0dfa051 284 * @returns the radio type
spastor 0:fcaad0dfa051 285 */
spastor 0:fcaad0dfa051 286 RadioType get_radio_type() const;
spastor 0:fcaad0dfa051 287
spastor 0:fcaad0dfa051 288 /** set_tx_options - sets the transmit options byte, used with the transmit frames.
spastor 0:fcaad0dfa051 289 * Valid flags are:
spastor 0:fcaad0dfa051 290 * - DISABLE_RETRIES_AND_ROUTE_REPAIR
spastor 0:fcaad0dfa051 291 * - ENABLE_APS_ENCRYPTION
spastor 0:fcaad0dfa051 292 * - USE_EXTENDED_TX_TIMEOUT
spastor 0:fcaad0dfa051 293 *
spastor 0:fcaad0dfa051 294 * @param options variable with the option flags
spastor 0:fcaad0dfa051 295 */
spastor 0:fcaad0dfa051 296 void set_tx_options(uint8_t options);
spastor 0:fcaad0dfa051 297
spastor 0:fcaad0dfa051 298 /** set_broadcast_radius - sets the max number of hops for a broadcast msg.
spastor 0:fcaad0dfa051 299 * When set to 0 uses the maximum possible.
spastor 0:fcaad0dfa051 300 *
spastor 0:fcaad0dfa051 301 * @param bc_radius variable with the broadcast radious
spastor 0:fcaad0dfa051 302 */
spastor 0:fcaad0dfa051 303 void set_broadcast_radius(uint8_t bc_radius);
spastor 0:fcaad0dfa051 304
spastor 0:fcaad0dfa051 305 /** get_tx_options - returns the tx options byte configured in the library.
spastor 0:fcaad0dfa051 306 *
spastor 0:fcaad0dfa051 307 * @returns the tx options byte configured in the library.
spastor 0:fcaad0dfa051 308 */
spastor 0:fcaad0dfa051 309 uint8_t get_tx_options() const;
spastor 0:fcaad0dfa051 310
spastor 0:fcaad0dfa051 311 /** get_bc_radius - returns the broadcast radius configured in the library.
spastor 0:fcaad0dfa051 312 *
spastor 0:fcaad0dfa051 313 * @returns the broadcast radius configured in the library.
spastor 0:fcaad0dfa051 314 */
spastor 0:fcaad0dfa051 315 uint8_t get_bc_radius() const;
spastor 0:fcaad0dfa051 316
spastor 0:fcaad0dfa051 317 /************************ Configuration member methods *************************/
spastor 0:fcaad0dfa051 318 /** write_config - write settings to non volatile memory
spastor 0:fcaad0dfa051 319 *
spastor 0:fcaad0dfa051 320 * @returns
spastor 0:fcaad0dfa051 321 * Success if the operation was successful,
spastor 0:fcaad0dfa051 322 * Failure otherwise
spastor 0:fcaad0dfa051 323 */
spastor 0:fcaad0dfa051 324 RadioStatus write_config();
spastor 0:fcaad0dfa051 325
spastor 0:fcaad0dfa051 326 /** config_io_sample_destination - configures to which node a remote module will send its IO Samples to.
spastor 0:fcaad0dfa051 327 * @Note: this will modify 'remote' DH and DL parameters, if the remote node is configured in transparent mode this could lead to unwanted behavior.
spastor 0:fcaad0dfa051 328 * Consult the module's reference manual for more information.
spastor 0:fcaad0dfa051 329 *
spastor 0:fcaad0dfa051 330 * @param remote remote device that will be sending the IO Samples
spastor 0:fcaad0dfa051 331 * @param destination remote device that will be receiving the IO Samples sent by 'remote'
spastor 0:fcaad0dfa051 332 * @returns the result of the data transfer
spastor 0:fcaad0dfa051 333 * Success if the operation was successful,
spastor 0:fcaad0dfa051 334 * Failure otherwise
spastor 0:fcaad0dfa051 335 */
spastor 0:fcaad0dfa051 336 RadioStatus config_io_sample_destination(const RemoteXBee& remote, const RemoteXBee& destination);
spastor 0:fcaad0dfa051 337
spastor 0:fcaad0dfa051 338 /** set_io_sample_rate - configures how often the IO Samples should be sent to the destination (see @ref send_io_sample_to).
spastor 0:fcaad0dfa051 339 *
spastor 0:fcaad0dfa051 340 * @param remote remote device that will be sending the IO Samples
spastor 0:fcaad0dfa051 341 * @param seconds the IO Sample sending rate in seconds (granularity is of 1 millisecond). Maximum is 65.535 seconds.
spastor 0:fcaad0dfa051 342 * @returns the result of the data transfer
spastor 0:fcaad0dfa051 343 * Success if the operation was successful,
spastor 0:fcaad0dfa051 344 * Failure otherwise
spastor 0:fcaad0dfa051 345 */
spastor 0:fcaad0dfa051 346 RadioStatus set_io_sample_rate(const RemoteXBee& remote, float seconds);
spastor 0:fcaad0dfa051 347
spastor 0:fcaad0dfa051 348 /** set_power_level - sets the power level at which the radio will transmit
spastor 0:fcaad0dfa051 349 *
spastor 0:fcaad0dfa051 350 * @param level power level at which the radio will transmit
spastor 0:fcaad0dfa051 351 * @returns
spastor 0:fcaad0dfa051 352 * Success if the operation was successful,
spastor 0:fcaad0dfa051 353 * Failure otherwise
spastor 0:fcaad0dfa051 354 */
spastor 0:fcaad0dfa051 355 RadioStatus set_power_level(uint8_t level);
spastor 0:fcaad0dfa051 356
spastor 0:fcaad0dfa051 357 /** get_power_level - reads the power level configured in the radio
spastor 0:fcaad0dfa051 358 *
spastor 0:fcaad0dfa051 359 * @param level pointer where the read power level will be stored
spastor 0:fcaad0dfa051 360 * @returns
spastor 0:fcaad0dfa051 361 * Success if the operation was successful,
spastor 0:fcaad0dfa051 362 * Failure otherwise
spastor 0:fcaad0dfa051 363 */
spastor 0:fcaad0dfa051 364 RadioStatus get_power_level(uint8_t * const level);
spastor 0:fcaad0dfa051 365
spastor 0:fcaad0dfa051 366 /** get_hw_version - gets the hardware version of the radio
spastor 0:fcaad0dfa051 367 *
spastor 0:fcaad0dfa051 368 * @returns the hardware version of the radio
spastor 0:fcaad0dfa051 369 */
spastor 0:fcaad0dfa051 370 uint16_t get_hw_version() const;
spastor 0:fcaad0dfa051 371
spastor 0:fcaad0dfa051 372 /** get_fw_version - gets the firmware version of the radio
spastor 0:fcaad0dfa051 373 *
spastor 0:fcaad0dfa051 374 * @returns the firmware version of the radio
spastor 0:fcaad0dfa051 375 */
spastor 0:fcaad0dfa051 376 uint16_t get_fw_version() const;
spastor 0:fcaad0dfa051 377
spastor 0:fcaad0dfa051 378 /** set_node_identifier - configures the Node Identifier string
spastor 0:fcaad0dfa051 379 *
spastor 0:fcaad0dfa051 380 * @param node_id NULL-terminated string with the Node Identifier that will be set on the module. Up to 20 characters length (21 with NULL-terminator).
spastor 0:fcaad0dfa051 381 * @returns
spastor 0:fcaad0dfa051 382 * Success if the operation was successful,
spastor 0:fcaad0dfa051 383 * Failure otherwise
spastor 0:fcaad0dfa051 384 */
spastor 0:fcaad0dfa051 385 RadioStatus set_node_identifier(const char * const node_id);
spastor 0:fcaad0dfa051 386
spastor 0:fcaad0dfa051 387 /** get_node_identifier - reads the configured Node Identifier string
spastor 0:fcaad0dfa051 388 *
spastor 0:fcaad0dfa051 389 * @param node_id Pointer to where to store the read Node Identifier, it must point to a buffer with at least 21-bytes length.
spastor 0:fcaad0dfa051 390 * @returns
spastor 0:fcaad0dfa051 391 * Success if the operation was successful,
spastor 0:fcaad0dfa051 392 * Failure otherwise
spastor 0:fcaad0dfa051 393 */
spastor 0:fcaad0dfa051 394 RadioStatus get_node_identifier(char * const node_id);
spastor 0:fcaad0dfa051 395
spastor 0:fcaad0dfa051 396 /** start_node_discovery - starts a node discovery operation. The responses
spastor 0:fcaad0dfa051 397 * have to be processes on the callback function that have to be registered
spastor 0:fcaad0dfa051 398 * for that purpose
spastor 0:fcaad0dfa051 399 *
spastor 0:fcaad0dfa051 400 * @returns
spastor 0:fcaad0dfa051 401 * Success if the operation was successful,
spastor 0:fcaad0dfa051 402 * Failure otherwise
spastor 0:fcaad0dfa051 403 */
spastor 0:fcaad0dfa051 404 RadioStatus start_node_discovery();
spastor 0:fcaad0dfa051 405
hbujanda 2:2ee1b6d51df2 406 #define XBEEZB_ND_OPTION_APPEND_DD (1 << 0)
hbujanda 2:2ee1b6d51df2 407 #define XBEEZB_ND_OPTION_SELF_RESPONSE (1 << 1)
hbujanda 2:2ee1b6d51df2 408 #define XBEE802_ND_OPTION_SELF_RESPONSE (1 << 0)
hbujanda 2:2ee1b6d51df2 409
spastor 0:fcaad0dfa051 410 /** config_node_discovery - configures the node discovery operation
spastor 0:fcaad0dfa051 411 *
spastor 0:fcaad0dfa051 412 * @param timeout_ms max allowed time for devices in the network to answer
spastor 0:fcaad0dfa051 413 * to the Node Discovery request
spastor 0:fcaad0dfa051 414 * @param options node discovery options (flags)
hbujanda 2:2ee1b6d51df2 415 * XBEE802_ND_OPTION_SELF_RESPONSE - to allow the module self responding (802.15.4 only)
hbujanda 2:2ee1b6d51df2 416 * XBEEZB_ND_OPTION_SELF_RESPONSE - to allow the module self responding (ZigBee only)
hbujanda 2:2ee1b6d51df2 417 * XBEEZB_ND_OPTION_APPEND_DD - to append the DD value to the response (ZigBee only)
spastor 0:fcaad0dfa051 418 * @returns
spastor 0:fcaad0dfa051 419 * Success if the operation was successful,
spastor 0:fcaad0dfa051 420 * Failure otherwise
spastor 0:fcaad0dfa051 421 */
spastor 0:fcaad0dfa051 422 RadioStatus config_node_discovery(uint16_t timeout_ms, uint8_t options = 0);
spastor 0:fcaad0dfa051 423
spastor 0:fcaad0dfa051 424 /** get_config_node_discovery - reads the configuration of the node discovery
spastor 0:fcaad0dfa051 425 * settings
spastor 0:fcaad0dfa051 426 *
spastor 0:fcaad0dfa051 427 * @param timeout_ms pointer where the node discovery time out value will be stored
spastor 0:fcaad0dfa051 428 * @param options pointer whre the node discovery options (flags) will be saved
spastor 0:fcaad0dfa051 429 * @returns
spastor 0:fcaad0dfa051 430 * Success if the operation was successful,
spastor 0:fcaad0dfa051 431 * Failure otherwise
spastor 0:fcaad0dfa051 432 */
spastor 0:fcaad0dfa051 433 RadioStatus get_config_node_discovery(uint16_t * const timeout_ms, uint8_t * const options);
spastor 0:fcaad0dfa051 434
spastor 0:fcaad0dfa051 435 /** set_timeout - sets the timeout in ms, used by sync methods
spastor 0:fcaad0dfa051 436 *
spastor 0:fcaad0dfa051 437 * @param timeout_ms new timeout in ms
spastor 0:fcaad0dfa051 438 */
spastor 0:fcaad0dfa051 439 void set_timeout(uint16_t timeout_ms);
spastor 0:fcaad0dfa051 440
spastor 0:fcaad0dfa051 441 /** get_timeout - gets the timeout in ms configured in the library. This value
spastor 0:fcaad0dfa051 442 * is used in sync commands
spastor 0:fcaad0dfa051 443 *
spastor 0:fcaad0dfa051 444 * @returns the configured timeout value in ms
spastor 0:fcaad0dfa051 445 */
spastor 0:fcaad0dfa051 446 uint16_t get_timeout() const;
spastor 0:fcaad0dfa051 447
spastor 0:fcaad0dfa051 448 /* ... */
spastor 0:fcaad0dfa051 449
spastor 0:fcaad0dfa051 450 /*********************** send_data member methods ************************/
spastor 3:8662ebe83570 451 /** send_data - sends data to a remote device
spastor 0:fcaad0dfa051 452 *
spastor 0:fcaad0dfa051 453 * @param remote remote device
spastor 0:fcaad0dfa051 454 * @param data pointer to the data that will be sent
spastor 0:fcaad0dfa051 455 * @param len number of bytes that will be transmitted
spastor 3:8662ebe83570 456 * @param syncr if true, method waits for the packet answer with the result of the operation
spastor 0:fcaad0dfa051 457 * @returns the result of the data transfer
spastor 0:fcaad0dfa051 458 * TxStatusSuccess if the operation was successful,
spastor 0:fcaad0dfa051 459 * the error code otherwise
spastor 0:fcaad0dfa051 460 */
spastor 3:8662ebe83570 461 virtual TxStatus send_data(const RemoteXBee& remote, const uint8_t *const data, uint16_t len, bool syncr = true) = 0;
spastor 0:fcaad0dfa051 462
spastor 3:8662ebe83570 463 /** send_data_broadcast - sends data to all devices in the network, using the broadcast address.
spastor 0:fcaad0dfa051 464 *
spastor 0:fcaad0dfa051 465 * @param data pointer to the data that will be sent
spastor 0:fcaad0dfa051 466 * @param len number of bytes that will be transmitted
spastor 3:8662ebe83570 467 * @param syncr if true, method waits for the packet answer with the result of the operation
spastor 0:fcaad0dfa051 468 * @returns the result of the data transfer
spastor 0:fcaad0dfa051 469 * TxStatusSuccess if the operation was successful,
spastor 0:fcaad0dfa051 470 * the error code otherwise
spastor 0:fcaad0dfa051 471 */
spastor 3:8662ebe83570 472 TxStatus send_data_broadcast(const uint8_t *const data, uint16_t len, bool syncr = true);
spastor 0:fcaad0dfa051 473
spastor 0:fcaad0dfa051 474 /** set_param - sets a parameter in the local radio by sending an AT command and waiting for the response.
spastor 0:fcaad0dfa051 475 *
spastor 0:fcaad0dfa051 476 * @param param parameter to be set.
spastor 0:fcaad0dfa051 477 * @param data the parameter value (4 bytes) to be set.
spastor 0:fcaad0dfa051 478 * @returns the command response status.
spastor 0:fcaad0dfa051 479 */
spastor 0:fcaad0dfa051 480 AtCmdFrame::AtCmdResp set_param(const char * const param, uint32_t data);
spastor 0:fcaad0dfa051 481
spastor 0:fcaad0dfa051 482 /** set_param - sets a parameter in the local radio by sending an AT command and waiting for the response.
spastor 0:fcaad0dfa051 483 *
spastor 0:fcaad0dfa051 484 * @param param parameter to be set.
spastor 0:fcaad0dfa051 485 * @param data the parameter value byte array (len bytes) to be set.
spastor 0:fcaad0dfa051 486 * @param len number of bytes of the parameter value.
spastor 0:fcaad0dfa051 487 * @returns the command response status.
spastor 0:fcaad0dfa051 488 */
spastor 0:fcaad0dfa051 489 AtCmdFrame::AtCmdResp set_param(const char * const param, const uint8_t * data = NULL, uint16_t len = 0);
spastor 0:fcaad0dfa051 490
spastor 0:fcaad0dfa051 491 /** get_param - gets a parameter from the local radio by sending an AT command and waiting for the response.
spastor 0:fcaad0dfa051 492 *
spastor 0:fcaad0dfa051 493 * @param param parameter to be get.
spastor 0:fcaad0dfa051 494 * @param data pointer where the param value (4 bytes) will be stored.
spastor 0:fcaad0dfa051 495 * @returns the command response status.
spastor 0:fcaad0dfa051 496 */
spastor 0:fcaad0dfa051 497 AtCmdFrame::AtCmdResp get_param(const char * const param, uint32_t * const data);
spastor 0:fcaad0dfa051 498
spastor 0:fcaad0dfa051 499 /** get_param - gets a parameter from the local radio by sending an AT command and waiting for the response.
spastor 0:fcaad0dfa051 500 *
spastor 0:fcaad0dfa051 501 * @param param parameter to be get.
spastor 0:fcaad0dfa051 502 * @param data pointer where the param value (n bytes) will be stored.
spastor 0:fcaad0dfa051 503 * @param len pointer where the number of bytes of the param value will be stored.
spastor 0:fcaad0dfa051 504 * @returns the command response status.
spastor 0:fcaad0dfa051 505 */
spastor 0:fcaad0dfa051 506 AtCmdFrame::AtCmdResp get_param(const char * const param, uint8_t * const data, uint16_t * const len);
spastor 0:fcaad0dfa051 507
spastor 0:fcaad0dfa051 508 /** set_param - sets a parameter in a remote radio by sending an AT command and waiting for the response.
spastor 0:fcaad0dfa051 509 *
spastor 0:fcaad0dfa051 510 * @param remote remote device
spastor 0:fcaad0dfa051 511 * @param param parameter to be set.
spastor 0:fcaad0dfa051 512 * @param data the parameter value (4 bytes) to be set.
spastor 0:fcaad0dfa051 513 * @returns the command response status.
spastor 0:fcaad0dfa051 514 */
spastor 0:fcaad0dfa051 515 virtual AtCmdFrame::AtCmdResp set_param(const RemoteXBee& remote, const char * const param, uint32_t data) = 0;
spastor 0:fcaad0dfa051 516
spastor 0:fcaad0dfa051 517 /** set_param - sets a parameter in a remote radio by sending an AT command and waiting for the response.
spastor 0:fcaad0dfa051 518 *
spastor 0:fcaad0dfa051 519 * @param remote remote device
spastor 0:fcaad0dfa051 520 * @param param parameter to be set.
spastor 0:fcaad0dfa051 521 * @param data the parameter value byte array (len bytes) to be set.
spastor 0:fcaad0dfa051 522 * @param len number of bytes of the parameter value.
spastor 0:fcaad0dfa051 523 * @returns the command response status.
spastor 0:fcaad0dfa051 524 */
spastor 0:fcaad0dfa051 525 virtual AtCmdFrame::AtCmdResp set_param(const RemoteXBee& remote, const char * const param, const uint8_t * data = NULL, uint16_t len = 0) = 0;
spastor 0:fcaad0dfa051 526
spastor 0:fcaad0dfa051 527 /** get_param - gets a parameter from a remote radio by sending an AT command and waiting for the response.
spastor 0:fcaad0dfa051 528 *
spastor 0:fcaad0dfa051 529 * @param remote remote device
spastor 0:fcaad0dfa051 530 * @param param parameter to be get.
spastor 0:fcaad0dfa051 531 * @param data pointer where the param value (4 bytes) will be stored.
spastor 0:fcaad0dfa051 532 * @returns the command response status.
spastor 0:fcaad0dfa051 533 */
spastor 0:fcaad0dfa051 534 virtual AtCmdFrame::AtCmdResp get_param(const RemoteXBee& remote, const char * const param, uint32_t * const data) = 0;
spastor 0:fcaad0dfa051 535
spastor 0:fcaad0dfa051 536 /** get_param - gets a parameter from a remote radio by sending an AT command and waiting for the response.
spastor 0:fcaad0dfa051 537 *
spastor 0:fcaad0dfa051 538 * @param remote remote device
spastor 0:fcaad0dfa051 539 * @param param parameter to be get.
spastor 0:fcaad0dfa051 540 * @param data pointer where the param value (n bytes) will be stored.
spastor 0:fcaad0dfa051 541 * @param len pointer where the number of bytes of the param value will be stored.
spastor 0:fcaad0dfa051 542 * @returns the command response status.
spastor 0:fcaad0dfa051 543 */
spastor 0:fcaad0dfa051 544 virtual AtCmdFrame::AtCmdResp get_param(const RemoteXBee& remote, const char * const param, uint8_t * const data, uint16_t * const len) = 0;
spastor 0:fcaad0dfa051 545
spastor 0:fcaad0dfa051 546 #if defined(ENABLE_PM_SUPPORT)
spastor 0:fcaad0dfa051 547 /** set_pm_control - sets the operational mode of the Power Management on
spastor 0:fcaad0dfa051 548 * the radio and registers the GPIOs used to handle the
spastor 0:fcaad0dfa051 549 * Power Management
spastor 0:fcaad0dfa051 550 *
spastor 0:fcaad0dfa051 551 * @param mode operational mode of the power management
spastor 0:fcaad0dfa051 552 * @param on_sleep pin used to detect the on/sleep status of the module
spastor 0:fcaad0dfa051 553 * @param sleep_rq pin used to request the module to go to sleep (when pin
spastor 0:fcaad0dfa051 554 * sleep mode is used
spastor 0:fcaad0dfa051 555 * @returns the result of the configuration operation
spastor 0:fcaad0dfa051 556 * Success if the operation was successful,
spastor 0:fcaad0dfa051 557 * Failure otherwise
spastor 0:fcaad0dfa051 558 */
spastor 0:fcaad0dfa051 559 RadioStatus set_pm_control(PmMode mode, PinName on_sleep = NC, PinName sleep_rq = NC);
spastor 0:fcaad0dfa051 560
spastor 0:fcaad0dfa051 561 /** get_pm_mode - gets the power management mode programmed in the radio.
spastor 0:fcaad0dfa051 562 *
spastor 0:fcaad0dfa051 563 * @param mode pointer where the read mode will be stored.
spastor 0:fcaad0dfa051 564 * @returns the result of the configuration operation
spastor 0:fcaad0dfa051 565 * Success if the operation was successful,
spastor 0:fcaad0dfa051 566 * Failure otherwise
spastor 0:fcaad0dfa051 567 */
spastor 0:fcaad0dfa051 568 RadioStatus get_pm_mode(PmMode *mode);
spastor 0:fcaad0dfa051 569
spastor 0:fcaad0dfa051 570 /** config_pm_timing - configures the power management timing parameters.
spastor 0:fcaad0dfa051 571 *
spastor 0:fcaad0dfa051 572 * @param before_sleep_ms number of miliseconds of inactivity before the radio will
spastor 0:fcaad0dfa051 573 * automatically go to sleep again (when using cyclic sleep).
spastor 0:fcaad0dfa051 574 * @param total_sleep_period_ms time interval in ms the radio will be sleeping. Once
spastor 0:fcaad0dfa051 575 * this time passes, the radio will wakeup, will check for
spastor 0:fcaad0dfa051 576 * packets and will wait before_sleep_ms of inactivity
spastor 0:fcaad0dfa051 577 * before entering again in sleep mode.
spastor 0:fcaad0dfa051 578 * @returns the result of the configuration operation
spastor 0:fcaad0dfa051 579 * Success if the operation was successful,
spastor 0:fcaad0dfa051 580 * Failure otherwise
spastor 0:fcaad0dfa051 581 */
spastor 0:fcaad0dfa051 582 RadioStatus config_pm_timing(uint32_t before_sleep_ms, uint32_t total_sleep_period_ms);
spastor 0:fcaad0dfa051 583
spastor 0:fcaad0dfa051 584 /** enter_sleep_mode - sets the radio into low power mode. If the pm working mode
spastor 0:fcaad0dfa051 585 * is pin-sleep, then it will use the GPIO, otherwise, it will
spastor 0:fcaad0dfa051 586 * use the serial interface.
spastor 0:fcaad0dfa051 587 *
spastor 0:fcaad0dfa051 588 * @note the method does not wait until the radio enters in sleep mode, it returns
spastor 0:fcaad0dfa051 589 * without making any verification.
spastor 0:fcaad0dfa051 590 * @returns the result of the operation
spastor 0:fcaad0dfa051 591 * Success if the operation was successful,
spastor 0:fcaad0dfa051 592 * Failure otherwise
spastor 0:fcaad0dfa051 593 */
spastor 0:fcaad0dfa051 594 RadioStatus enter_sleep_mode();
spastor 0:fcaad0dfa051 595
spastor 0:fcaad0dfa051 596 /** exit_sleep_mode - for the pm mode called pin-sleep, sets the radio into active power
spastor 0:fcaad0dfa051 597 * using the corresponding GPIO.
spastor 0:fcaad0dfa051 598 *
spastor 0:fcaad0dfa051 599 */
spastor 0:fcaad0dfa051 600 void exit_sleep_mode();
spastor 0:fcaad0dfa051 601
spastor 0:fcaad0dfa051 602 /** is_sleeping - checks if the radio is sleeping or if its active.
spastor 0:fcaad0dfa051 603 *
spastor 0:fcaad0dfa051 604 * @returns true if the radio is sleeping, false otherwisw
spastor 0:fcaad0dfa051 605 */
spastor 0:fcaad0dfa051 606 bool is_sleeping();
spastor 0:fcaad0dfa051 607
spastor 0:fcaad0dfa051 608 /** register_wakeup_cb - registers the callback function that will be called
spastor 0:fcaad0dfa051 609 * when the radio wakes up from sleep mode.
spastor 0:fcaad0dfa051 610 *
spastor 0:fcaad0dfa051 611 * @param f function pointer with the callback function
spastor 0:fcaad0dfa051 612 */
spastor 0:fcaad0dfa051 613 void register_wakeup_cb(void (*f)(void));
spastor 0:fcaad0dfa051 614
spastor 0:fcaad0dfa051 615 /** unregister_wakeup_cb - removes the wakeup callback */
spastor 0:fcaad0dfa051 616 void unregister_wakeup_cb();
spastor 0:fcaad0dfa051 617 #endif /* defined(ENABLE_PM_SUPPORT) */
spastor 0:fcaad0dfa051 618
spastor 0:fcaad0dfa051 619 /** process_rx_frames - method that process the frames queued in the reception
spastor 0:fcaad0dfa051 620 * buffer. Calls the process_frame_data method of the frame
spastor 0:fcaad0dfa051 621 * handlers registered
spastor 0:fcaad0dfa051 622 *
spastor 0:fcaad0dfa051 623 * @returns Number of dropped frames since latest call to this method.
spastor 0:fcaad0dfa051 624 */
spastor 0:fcaad0dfa051 625 uint32_t process_rx_frames();
spastor 0:fcaad0dfa051 626
spastor 0:fcaad0dfa051 627 /** register_modem_status_cb - registers the callback function that will be called
spastor 0:fcaad0dfa051 628 * when a Modem Status packet is received
spastor 0:fcaad0dfa051 629 *
spastor 0:fcaad0dfa051 630 * @param function function pointer with the callback function
spastor 0:fcaad0dfa051 631 */
spastor 0:fcaad0dfa051 632 void register_modem_status_cb(modem_status_cb_t function);
spastor 0:fcaad0dfa051 633
spastor 0:fcaad0dfa051 634 /** unregister_modem_status_cb - removes the Modem Status reception callback */
spastor 0:fcaad0dfa051 635 void unregister_modem_status_cb();
spastor 0:fcaad0dfa051 636
spastor 0:fcaad0dfa051 637 protected:
spastor 0:fcaad0dfa051 638
spastor 0:fcaad0dfa051 639 enum RadioProtocol {
spastor 0:fcaad0dfa051 640 None,
spastor 0:fcaad0dfa051 641 ZigBee,
spastor 0:fcaad0dfa051 642 Raw_802_15_4,
spastor 0:fcaad0dfa051 643 #ifdef EXTRA_XBEE_PROTOCOLS
spastor 0:fcaad0dfa051 644 XBeeWiFi,
spastor 0:fcaad0dfa051 645 DigiMesh,
spastor 0:fcaad0dfa051 646 SmartEnergy,
spastor 0:fcaad0dfa051 647 DigiPoint,
spastor 0:fcaad0dfa051 648 ZNet,
spastor 0:fcaad0dfa051 649 #endif
spastor 0:fcaad0dfa051 650 };
spastor 0:fcaad0dfa051 651 /** send_byte_escaping_if - sends a byte, through the serial interface, to
spastor 0:fcaad0dfa051 652 * the radio, escaping the byte if the working mode of the radio is API2.
spastor 0:fcaad0dfa051 653 *
spastor 0:fcaad0dfa051 654 * @param line PWM line being set
spastor 0:fcaad0dfa051 655 * @param data the byte that will be send to radio
spastor 0:fcaad0dfa051 656 */
spastor 0:fcaad0dfa051 657 void send_byte_escaping_if(uint8_t data);
spastor 0:fcaad0dfa051 658
spastor 0:fcaad0dfa051 659 /** uart_read_cb - serial interface callback, called when data is received on
spastor 0:fcaad0dfa051 660 * the serial port. The function parses the incoming data and, when a good
spastor 0:fcaad0dfa051 661 * frame is detected, saves it in the frame list
spastor 0:fcaad0dfa051 662 */
spastor 0:fcaad0dfa051 663 void uart_read_cb();
spastor 0:fcaad0dfa051 664
spastor 0:fcaad0dfa051 665 /** get_this_api_frame - searches in the FrameBuffer for an incoming frame
spastor 0:fcaad0dfa051 666 * with frameid equal to id and frame type equal to type
spastor 0:fcaad0dfa051 667 * or type2. If after timeout the frame hast not been found,
spastor 0:fcaad0dfa051 668 * returns.
spastor 0:fcaad0dfa051 669 *
spastor 0:fcaad0dfa051 670 * @param id id of the frame we are looking for.
spastor 0:fcaad0dfa051 671 * @param type tye type we expect the frame to be.
spastor 0:fcaad0dfa051 672 * @param type2 alternative valid type, if provided.
spastor 0:fcaad0dfa051 673 * @returns a pointer to the frame found in the FrameBuffer or a null pointer if
spastor 0:fcaad0dfa051 674 * the frame has not been found and the timeout expired.
spastor 0:fcaad0dfa051 675 */
spastor 0:fcaad0dfa051 676 ApiFrame * get_this_api_frame(uint8_t id, ApiFrame::ApiFrameType type,
spastor 0:fcaad0dfa051 677 ApiFrame::ApiFrameType type2 = ApiFrame::Invalid);
spastor 0:fcaad0dfa051 678
spastor 0:fcaad0dfa051 679 /** send_api_frame - method to send, over the serial port, an API frame
spastor 0:fcaad0dfa051 680 *
spastor 0:fcaad0dfa051 681 * @param frame pointer to the frame that will be sent.
spastor 0:fcaad0dfa051 682 */
spastor 0:fcaad0dfa051 683 #if defined(UNIT_TEST)
spastor 0:fcaad0dfa051 684 virtual
spastor 0:fcaad0dfa051 685 #endif
spastor 0:fcaad0dfa051 686 void send_api_frame(ApiFrame *frame);
spastor 0:fcaad0dfa051 687
spastor 0:fcaad0dfa051 688 /** update_radio_status - method called when a modem status frame is received
spastor 0:fcaad0dfa051 689 * to update the internal status variables of the library.
spastor 0:fcaad0dfa051 690 * @note This is not a pure virtual function because it can be called while
spastor 0:fcaad0dfa051 691 * the object is being constructed and we need the implementation of the
spastor 0:fcaad0dfa051 692 * base class.
spastor 0:fcaad0dfa051 693 *
spastor 0:fcaad0dfa051 694 * @param status byte with the status received in the modem status frame
spastor 0:fcaad0dfa051 695 */
spastor 0:fcaad0dfa051 696 virtual void radio_status_update(AtCmdFrame::ModemStatus modem_status);
spastor 0:fcaad0dfa051 697
spastor 0:fcaad0dfa051 698 /** Method used internaly by the derived classes to transmit data to
spastor 0:fcaad0dfa051 699 * remote nodes, waiting for the answer from the device
spastor 0:fcaad0dfa051 700 *
spastor 0:fcaad0dfa051 701 * @param frame frame that will be sent to the radio (have to be a
spastor 0:fcaad0dfa051 702 * proper transmit frame
spastor 0:fcaad0dfa051 703 * @returns the result of the data transfer
spastor 0:fcaad0dfa051 704 * TxStatusSuccess if the operation was successful,
spastor 0:fcaad0dfa051 705 * the error code otherwise
spastor 0:fcaad0dfa051 706 */
spastor 0:fcaad0dfa051 707 TxStatus send_data(ApiFrame *frame);
spastor 0:fcaad0dfa051 708
spastor 0:fcaad0dfa051 709 /** send_at_cmd - sends an AT command to the radio and waits for the response.
spastor 0:fcaad0dfa051 710 *
spastor 0:fcaad0dfa051 711 * @param frame api frame with the command and command params.
spastor 0:fcaad0dfa051 712 * @param buf pointer where the param response (n bytes) will be stored.
spastor 0:fcaad0dfa051 713 * @param len pointer where the number of bytes of the param response will be stored.
spastor 0:fcaad0dfa051 714 * @param radio_location radio location, either RadioLocal or RadioRemote.
spastor 0:fcaad0dfa051 715 * @param reverse reverse the byte ordering of the response saved in buf.
spastor 0:fcaad0dfa051 716 * @returns the command response status.
spastor 0:fcaad0dfa051 717 */
spastor 0:fcaad0dfa051 718 AtCmdFrame::AtCmdResp send_at_cmd(AtCmdFrame *frame,
spastor 0:fcaad0dfa051 719 uint8_t *const buf, uint16_t *const len, RadioLocation radio_location = RadioLocal, bool reverse = true);
spastor 0:fcaad0dfa051 720
spastor 0:fcaad0dfa051 721 /* send_at_cmd - methods used internally by other methods */
spastor 0:fcaad0dfa051 722 AtCmdFrame::AtCmdResp send_at_cmd(AtCmdFrame *frame);
spastor 0:fcaad0dfa051 723 AtCmdFrame::AtCmdResp send_at_cmd(AtCmdFrame *frame, uint8_t *data);
spastor 0:fcaad0dfa051 724 AtCmdFrame::AtCmdResp send_at_cmd(AtCmdFrame *frame, uint16_t *data);
spastor 0:fcaad0dfa051 725 AtCmdFrame::AtCmdResp send_at_cmd(AtCmdFrame *frame, uint32_t *data);
spastor 0:fcaad0dfa051 726
spastor 0:fcaad0dfa051 727 #if defined(ENABLE_PM_SUPPORT)
spastor 0:fcaad0dfa051 728 /** Sets the radio into low power mode. This method is used by enter_sleep_mode() */
spastor 0:fcaad0dfa051 729 RadioStatus sleep_now();
spastor 0:fcaad0dfa051 730 #endif /* defined(ENABLE_PM_SUPPORT) */
spastor 0:fcaad0dfa051 731
spastor 0:fcaad0dfa051 732 /** register_frame_handler - registers an object to handle incoming frames from
spastor 0:fcaad0dfa051 733 * the radio.
spastor 0:fcaad0dfa051 734 * @note For any type of frame more than one handler can be registered and all
spastor 0:fcaad0dfa051 735 * of them are called, sequentially, when a frame of that type arrives.
spastor 0:fcaad0dfa051 736 *
spastor 0:fcaad0dfa051 737 * @param handler pointer to the frame handler object
spastor 0:fcaad0dfa051 738 * @returns the result of the registration
spastor 0:fcaad0dfa051 739 * Success if the operation was successful,
spastor 0:fcaad0dfa051 740 * Failure otherwise
spastor 0:fcaad0dfa051 741 */
spastor 0:fcaad0dfa051 742 RadioStatus register_frame_handler(FrameHandler *const handler);
spastor 0:fcaad0dfa051 743
spastor 0:fcaad0dfa051 744 /** unregister_frame_handler - removes a previously registered frame handler
spastor 0:fcaad0dfa051 745 *
spastor 0:fcaad0dfa051 746 * @param handler pointer to the frame handler object
spastor 0:fcaad0dfa051 747 * @returns the result of the unregister operation
spastor 0:fcaad0dfa051 748 * Success if the operation was successful,
spastor 0:fcaad0dfa051 749 * Failure otherwise
spastor 0:fcaad0dfa051 750 */
spastor 0:fcaad0dfa051 751 RadioStatus unregister_frame_handler(FrameHandler *const handler);
spastor 0:fcaad0dfa051 752
spastor 0:fcaad0dfa051 753 /** get_radio_protocol - returns the RF protocol that the connected module uses
spastor 0:fcaad0dfa051 754 * based on its firmware and hardware versions
spastor 0:fcaad0dfa051 755 *
spastor 0:fcaad0dfa051 756 * @returns a RadioProtocol enum.
spastor 0:fcaad0dfa051 757 */
spastor 0:fcaad0dfa051 758 RadioProtocol get_radio_protocol(void) const;
spastor 0:fcaad0dfa051 759
spastor 3:8662ebe83570 760 /** _get_iosample - forces an io_sample read (reads all digital and analog inputs)
spastor 0:fcaad0dfa051 761 *
spastor 0:fcaad0dfa051 762 * @param remote remote device
spastor 0:fcaad0dfa051 763 * @param io_sample buffer where the io_sample response is copied
spastor 0:fcaad0dfa051 764 * @param len pointer where the length of the io_sample response is stored
spastor 0:fcaad0dfa051 765 * @returns
spastor 0:fcaad0dfa051 766 * Success if the operation was successful,
spastor 0:fcaad0dfa051 767 * Failure otherwise
spastor 0:fcaad0dfa051 768 */
spastor 3:8662ebe83570 769 RadioStatus _get_iosample(const RemoteXBee& remote, uint8_t * const io_sample, uint16_t * const len);
spastor 0:fcaad0dfa051 770
hbujanda 2:2ee1b6d51df2 771 void _get_remote_node_by_id(const char * const node_id, uint64_t * addr64, uint16_t * addr16);
hbujanda 2:2ee1b6d51df2 772
hbujanda 2:2ee1b6d51df2 773 /** check_radio_flow_control - checks that the radio has the CTS "D7" and RTS "D6" pins configured
hbujanda 2:2ee1b6d51df2 774 * according to the serial hardware flow control selected by the user
hbujanda 2:2ee1b6d51df2 775 *
hbujanda 2:2ee1b6d51df2 776 * @returns true if check success.
hbujanda 2:2ee1b6d51df2 777 */
hbujanda 2:2ee1b6d51df2 778 bool check_radio_flow_control();
hbujanda 2:2ee1b6d51df2 779
hbujanda 1:794d1d3e4a08 780 /** serial hardware flow control selected by the user (RTSCTS, RTS,CTS) */
hbujanda 1:794d1d3e4a08 781 SerialBase::Flow _serial_flow_type;
spastor 0:fcaad0dfa051 782
spastor 0:fcaad0dfa051 783 /** Operating mode of the module (API1, API2,...) */
spastor 0:fcaad0dfa051 784 RadioMode _mode;
spastor 0:fcaad0dfa051 785
spastor 0:fcaad0dfa051 786 /** Type of radio, mainly the hardware version, but may differ in some cases */
spastor 0:fcaad0dfa051 787 RadioType _type;
spastor 0:fcaad0dfa051 788
spastor 0:fcaad0dfa051 789 /** Hardware version value of the radio */
spastor 0:fcaad0dfa051 790 uint16_t _hw_version;
spastor 0:fcaad0dfa051 791
spastor 0:fcaad0dfa051 792 /** Firmware version value of the radio */
spastor 0:fcaad0dfa051 793 uint16_t _fw_version;
spastor 0:fcaad0dfa051 794
spastor 0:fcaad0dfa051 795 /** Timeout in ms for sync operations (when we wait for a response) */
spastor 0:fcaad0dfa051 796 uint16_t _timeout_ms;
spastor 0:fcaad0dfa051 797
spastor 0:fcaad0dfa051 798 /** Device 64 bit address (SH, SL) */
spastor 0:fcaad0dfa051 799 uint64_t _dev_addr64;
spastor 0:fcaad0dfa051 800
spastor 0:fcaad0dfa051 801 /** Device 16 bit address (MY) */
spastor 0:fcaad0dfa051 802 uint16_t _dev_addr16;
spastor 0:fcaad0dfa051 803
spastor 0:fcaad0dfa051 804 /** Serial Interface, use RawSerial as we dont use the streams */
spastor 0:fcaad0dfa051 805 RawSerial *_uart;
spastor 0:fcaad0dfa051 806
spastor 0:fcaad0dfa051 807 /** IO connected to the radio reset line */
spastor 0:fcaad0dfa051 808 DigitalOut *_reset;
spastor 0:fcaad0dfa051 809
spastor 0:fcaad0dfa051 810 /** Transmit options byte */
spastor 0:fcaad0dfa051 811 uint8_t _tx_options;
spastor 0:fcaad0dfa051 812
spastor 0:fcaad0dfa051 813 /** Broadcast radius, number of hops a broadcast transmission can occur.
spastor 0:fcaad0dfa051 814 * When set to 0 it will use the maximum */
spastor 0:fcaad0dfa051 815 uint8_t _bc_radius;
spastor 0:fcaad0dfa051 816 /** Array of frame handler pointers. We use an array instead of a vector or other
spastor 0:fcaad0dfa051 817 * data structure to save memory and avoid dynamic memory allocation, to avoid
spastor 0:fcaad0dfa051 818 * memory fragmentation */
spastor 0:fcaad0dfa051 819 FrameHandler *_fhandlers[MAX_FRAME_HANDLERS];
spastor 0:fcaad0dfa051 820
spastor 0:fcaad0dfa051 821 /** Hardware reset counter, automatically updated by the library */
spastor 0:fcaad0dfa051 822 volatile uint16_t _hw_reset_cnt;
spastor 0:fcaad0dfa051 823
spastor 0:fcaad0dfa051 824 /** Watchdog reset counter, automatically updated by the library */
spastor 0:fcaad0dfa051 825 volatile uint16_t _wd_reset_cnt;
spastor 0:fcaad0dfa051 826
spastor 0:fcaad0dfa051 827 uint16_t _reset_timeout;
spastor 0:fcaad0dfa051 828
spastor 0:fcaad0dfa051 829 /** Frame handler used for the Modem Status packets. Automatically registered when a callback
spastor 0:fcaad0dfa051 830 * function is registered */
spastor 0:fcaad0dfa051 831 FH_ModemStatus *_modem_status_handler;
spastor 0:fcaad0dfa051 832
spastor 0:fcaad0dfa051 833 /** Latest modem status received */
spastor 0:fcaad0dfa051 834 AtCmdFrame::ModemStatus _modem_status;
spastor 0:fcaad0dfa051 835
spastor 0:fcaad0dfa051 836 /** Library is initializing */
spastor 0:fcaad0dfa051 837 bool _initializing;
spastor 0:fcaad0dfa051 838
spastor 0:fcaad0dfa051 839 #if defined(ENABLE_PM_SUPPORT)
spastor 0:fcaad0dfa051 840 /* Power Management mode used by the radio */
spastor 0:fcaad0dfa051 841 PmMode _pm_mode;
spastor 0:fcaad0dfa051 842 /** IO connected to the radio on_sleep line */
spastor 0:fcaad0dfa051 843 InterruptIn *_on_sleep;
spastor 0:fcaad0dfa051 844 /** IO connected to the radio sleep_req line */
spastor 0:fcaad0dfa051 845 DigitalOut *_sleep_req;
spastor 0:fcaad0dfa051 846 #endif
spastor 0:fcaad0dfa051 847 };
spastor 0:fcaad0dfa051 848
spastor 0:fcaad0dfa051 849 } /* namespace XBeeLib */
spastor 0:fcaad0dfa051 850
spastor 0:fcaad0dfa051 851 #endif /* defined(__DIGI_RADIO_H_) */
spastor 0:fcaad0dfa051 852
spastor 0:fcaad0dfa051 853
spastor 0:fcaad0dfa051 854