Digi International Inc. / Mbed 2 deprecated XBeeDM_power_mngmnt_pin_sleep

Dependencies:   XBeeLib mbed

Fork of XBeeZB_power_mngmnt_pin_sleep by Digi International Inc.

Committer:
hbujanda
Date:
Mon May 11 18:03:48 2015 +0200
Revision:
0:5e030e8ab809
Automatic upload

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hbujanda 0:5e030e8ab809 1 /**
hbujanda 0:5e030e8ab809 2 * Copyright (c) 2015 Digi International Inc.,
hbujanda 0:5e030e8ab809 3 * All rights not expressly granted are reserved.
hbujanda 0:5e030e8ab809 4 *
hbujanda 0:5e030e8ab809 5 * This Source Code Form is subject to the terms of the Mozilla Public
hbujanda 0:5e030e8ab809 6 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
hbujanda 0:5e030e8ab809 7 * You can obtain one at http://mozilla.org/MPL/2.0/.
hbujanda 0:5e030e8ab809 8 *
hbujanda 0:5e030e8ab809 9 * Digi International Inc. 11001 Bren Road East, Minnetonka, MN 55343
hbujanda 0:5e030e8ab809 10 * =======================================================================
hbujanda 0:5e030e8ab809 11 */
hbujanda 0:5e030e8ab809 12
hbujanda 0:5e030e8ab809 13 #include "mbed.h"
hbujanda 0:5e030e8ab809 14 #include "XBeeLib.h"
hbujanda 0:5e030e8ab809 15 #if defined(ENABLE_LOGGING)
hbujanda 0:5e030e8ab809 16 #include "DigiLoggerMbedSerial.h"
hbujanda 0:5e030e8ab809 17 using namespace DigiLog;
hbujanda 0:5e030e8ab809 18 #endif
hbujanda 0:5e030e8ab809 19
hbujanda 0:5e030e8ab809 20 using namespace XBeeLib;
hbujanda 0:5e030e8ab809 21
hbujanda 0:5e030e8ab809 22 //TODO: Configure pin according to your hardware
hbujanda 0:5e030e8ab809 23 #define SLEEP_REQ_PIN P0_4
hbujanda 0:5e030e8ab809 24
hbujanda 0:5e030e8ab809 25 //TODO: Configure pin according to your hardware
hbujanda 0:5e030e8ab809 26 #define ON_SLEEP_PIN P0_5
hbujanda 0:5e030e8ab809 27
hbujanda 0:5e030e8ab809 28 #define SLEEP_SECONDS (40) /* 40 seconds, for demo */
hbujanda 0:5e030e8ab809 29 //#define SLEEP_SECONDS (86400) /* 24 hours */
hbujanda 0:5e030e8ab809 30
hbujanda 0:5e030e8ab809 31 Serial *log_serial;
hbujanda 0:5e030e8ab809 32
hbujanda 0:5e030e8ab809 33 DigitalOut* _sleep_req = NULL;
hbujanda 0:5e030e8ab809 34 DigitalIn* _on_sleep = NULL;
hbujanda 0:5e030e8ab809 35
hbujanda 0:5e030e8ab809 36 void radio_sleep()
hbujanda 0:5e030e8ab809 37 {
hbujanda 0:5e030e8ab809 38 _sleep_req->write(1);
hbujanda 0:5e030e8ab809 39 }
hbujanda 0:5e030e8ab809 40
hbujanda 0:5e030e8ab809 41 void radio_on()
hbujanda 0:5e030e8ab809 42 {
hbujanda 0:5e030e8ab809 43 _sleep_req->write(0);
hbujanda 0:5e030e8ab809 44 }
hbujanda 0:5e030e8ab809 45
hbujanda 0:5e030e8ab809 46 bool is_radio_sleeping()
hbujanda 0:5e030e8ab809 47 {
hbujanda 0:5e030e8ab809 48 return _on_sleep->read() == 0;
hbujanda 0:5e030e8ab809 49 }
hbujanda 0:5e030e8ab809 50
hbujanda 0:5e030e8ab809 51 static void send_sample(XBeeZB& xbee)
hbujanda 0:5e030e8ab809 52 {
hbujanda 0:5e030e8ab809 53 char data[60];
hbujanda 0:5e030e8ab809 54 static uint16_t sample = 0;
hbujanda 0:5e030e8ab809 55 const uint16_t data_len = sprintf(data, "\r\nSensor sample: %u, next sample in %lu seconds\r\n",
hbujanda 0:5e030e8ab809 56 sample++, (uint32_t)SLEEP_SECONDS);
hbujanda 0:5e030e8ab809 57
hbujanda 0:5e030e8ab809 58 const TxStatus txStatus = xbee.send_data_to_coordinator((const uint8_t *)data, data_len);
hbujanda 0:5e030e8ab809 59 if (txStatus == TxStatusSuccess)
hbujanda 0:5e030e8ab809 60 log_serial->printf("send_data_to_coordinator OK\r\n");
hbujanda 0:5e030e8ab809 61 else
hbujanda 0:5e030e8ab809 62 log_serial->printf("send_data_to_coordinator failed with %d\r\n", (int) txStatus);
hbujanda 0:5e030e8ab809 63 }
hbujanda 0:5e030e8ab809 64
hbujanda 0:5e030e8ab809 65 int main()
hbujanda 0:5e030e8ab809 66 {
hbujanda 0:5e030e8ab809 67 AtCmdFrame::AtCmdResp cmdresp;
hbujanda 0:5e030e8ab809 68
hbujanda 0:5e030e8ab809 69 /* Configure cpu pins to control the radio power management pins:
hbujanda 0:5e030e8ab809 70 * - _sleep_req: This pin connected to the radio SLEEP_RQ pin (pin 9) will allow the cpu to request the radio
hbujanda 0:5e030e8ab809 71 * to sleep or awake.
hbujanda 0:5e030e8ab809 72 * - _on_sleep: This pin connected to radio ON/SLEEP# pin (pin 13) will allow the cpu to know if the radio
hbujanda 0:5e030e8ab809 73 * is awaked or sleept.
hbujanda 0:5e030e8ab809 74 */
hbujanda 0:5e030e8ab809 75 _sleep_req = new DigitalOut(SLEEP_REQ_PIN);
hbujanda 0:5e030e8ab809 76 _on_sleep = new DigitalIn(ON_SLEEP_PIN);
hbujanda 0:5e030e8ab809 77
hbujanda 0:5e030e8ab809 78 /* Set the radio on so we can send initialization messages to the radio */
hbujanda 0:5e030e8ab809 79 radio_on();
hbujanda 0:5e030e8ab809 80
hbujanda 0:5e030e8ab809 81 log_serial = new Serial(DEBUG_TX, DEBUG_RX);
hbujanda 0:5e030e8ab809 82 log_serial->baud(9600);
hbujanda 0:5e030e8ab809 83 log_serial->printf("Sample application to demo how to send unicast and broadcast data with the XBeeZB\r\n\r\n");
hbujanda 0:5e030e8ab809 84 log_serial->printf(XB_LIB_BANNER);
hbujanda 0:5e030e8ab809 85
hbujanda 0:5e030e8ab809 86 #if defined(ENABLE_LOGGING)
hbujanda 0:5e030e8ab809 87 new DigiLoggerMbedSerial(log_serial, LogLevelInfo);
hbujanda 0:5e030e8ab809 88 #endif
hbujanda 0:5e030e8ab809 89
hbujanda 0:5e030e8ab809 90 XBeeZB xbee = XBeeZB(RADIO_TX, RADIO_RX, RADIO_RESET, NC, NC, 9600);
hbujanda 0:5e030e8ab809 91
hbujanda 0:5e030e8ab809 92 RadioStatus radioStatus = xbee.init();
hbujanda 0:5e030e8ab809 93 MBED_ASSERT(radioStatus == Success);
hbujanda 0:5e030e8ab809 94
hbujanda 0:5e030e8ab809 95 /* Configure Sleep mode */
hbujanda 0:5e030e8ab809 96 cmdresp = xbee.set_param("SM", 1); /* Pin Sleep */
hbujanda 0:5e030e8ab809 97 if (cmdresp != AtCmdFrame::AtCmdRespOk) {
hbujanda 0:5e030e8ab809 98 log_serial->printf("SM Failed!!\r\n");
hbujanda 0:5e030e8ab809 99 }
hbujanda 0:5e030e8ab809 100
hbujanda 0:5e030e8ab809 101 /* Wait until the device has joined the network */
hbujanda 0:5e030e8ab809 102 log_serial->printf("Waiting for device to join the network: ");
hbujanda 0:5e030e8ab809 103 while (!xbee.is_joined()) {
hbujanda 0:5e030e8ab809 104 wait_ms(1000);
hbujanda 0:5e030e8ab809 105 log_serial->printf(".");
hbujanda 0:5e030e8ab809 106 }
hbujanda 0:5e030e8ab809 107 log_serial->printf("OK\r\n");
hbujanda 0:5e030e8ab809 108
hbujanda 0:5e030e8ab809 109 /* Start sending samples */
hbujanda 0:5e030e8ab809 110 while (1) {
hbujanda 0:5e030e8ab809 111 if (xbee.is_joined()) {
hbujanda 0:5e030e8ab809 112 /* Awake the radio */
hbujanda 0:5e030e8ab809 113 radio_on();
hbujanda 0:5e030e8ab809 114
hbujanda 0:5e030e8ab809 115 /* Wait until radio awakes. Typically 14 mS */
hbujanda 0:5e030e8ab809 116 while(is_radio_sleeping());
hbujanda 0:5e030e8ab809 117
hbujanda 0:5e030e8ab809 118 send_sample(xbee);
hbujanda 0:5e030e8ab809 119
hbujanda 0:5e030e8ab809 120 /* Sleep the radio again */
hbujanda 0:5e030e8ab809 121 radio_sleep();
hbujanda 0:5e030e8ab809 122 }
hbujanda 0:5e030e8ab809 123
hbujanda 0:5e030e8ab809 124 wait(SLEEP_SECONDS);
hbujanda 0:5e030e8ab809 125 }
hbujanda 0:5e030e8ab809 126
hbujanda 0:5e030e8ab809 127 delete(log_serial);
hbujanda 0:5e030e8ab809 128 }