BTLE demo for MAXWSNENV.

Dependencies:   BLE_API BMP180 Si7020 mbed MaximBLE

Committer:
enginerd
Date:
Thu Aug 18 21:09:13 2016 +0000
Revision:
2:6f76d6160601
Parent:
0:f71931ae3db1
Updated library versions.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kgills 0:f71931ae3db1 1 /*******************************************************************************
kgills 0:f71931ae3db1 2 * Copyright (C) 2015 Maxim Integrated Products, Inc., All Rights Reserved.
kgills 0:f71931ae3db1 3 *
kgills 0:f71931ae3db1 4 * Permission is hereby granted, free of charge, to any person obtaining a
kgills 0:f71931ae3db1 5 * copy of this software and associated documentation files (the "Software"),
kgills 0:f71931ae3db1 6 * to deal in the Software without restriction, including without limitation
kgills 0:f71931ae3db1 7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
kgills 0:f71931ae3db1 8 * and/or sell copies of the Software, and to permit persons to whom the
kgills 0:f71931ae3db1 9 * Software is furnished to do so, subject to the following conditions:
kgills 0:f71931ae3db1 10 *
kgills 0:f71931ae3db1 11 * The above copyright notice and this permission notice shall be included
kgills 0:f71931ae3db1 12 * in all copies or substantial portions of the Software.
kgills 0:f71931ae3db1 13 *
kgills 0:f71931ae3db1 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
kgills 0:f71931ae3db1 15 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
kgills 0:f71931ae3db1 16 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
kgills 0:f71931ae3db1 17 * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
kgills 0:f71931ae3db1 18 * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
kgills 0:f71931ae3db1 19 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
kgills 0:f71931ae3db1 20 * OTHER DEALINGS IN THE SOFTWARE.
kgills 0:f71931ae3db1 21 *
kgills 0:f71931ae3db1 22 * Except as contained in this notice, the name of Maxim Integrated
kgills 0:f71931ae3db1 23 * Products, Inc. shall not be used except as stated in the Maxim Integrated
kgills 0:f71931ae3db1 24 * Products, Inc. Branding Policy.
kgills 0:f71931ae3db1 25 *
kgills 0:f71931ae3db1 26 * The mere transfer of this software does not imply any licenses
kgills 0:f71931ae3db1 27 * of trade secrets, proprietary technology, copyrights, patents,
kgills 0:f71931ae3db1 28 * trademarks, maskwork rights, or any other form of intellectual
kgills 0:f71931ae3db1 29 * property whatsoever. Maxim Integrated Products, Inc. retains all
kgills 0:f71931ae3db1 30 * ownership rights.
kgills 0:f71931ae3db1 31 *******************************************************************************
kgills 0:f71931ae3db1 32 */
kgills 0:f71931ae3db1 33
kgills 0:f71931ae3db1 34 #ifndef __BLE_CURRENTTIMECHAR_H__
kgills 0:f71931ae3db1 35 #define __BLE_CURRENTTIMECHAR_H__
kgills 0:f71931ae3db1 36
kgills 0:f71931ae3db1 37 #include "mbed.h"
kgills 0:f71931ae3db1 38 #include "Characteristic.h"
kgills 0:f71931ae3db1 39
kgills 0:f71931ae3db1 40 /**
kgills 0:f71931ae3db1 41 * @class CurrentTimeChar
kgills 0:f71931ae3db1 42 * @brief CurrentTimeChar characteristic class.
kgills 0:f71931ae3db1 43 * @details Sub class from the characteristic class.
kgills 0:f71931ae3db1 44 */
kgills 0:f71931ae3db1 45
kgills 0:f71931ae3db1 46 class CurrentTimeChar : public Characteristic
kgills 0:f71931ae3db1 47 {
kgills 0:f71931ae3db1 48 public:
kgills 0:f71931ae3db1 49
kgills 0:f71931ae3db1 50 typedef enum {
kgills 0:f71931ae3db1 51 MON = 1,
kgills 0:f71931ae3db1 52 TUE = 2,
kgills 0:f71931ae3db1 53 WED = 3,
kgills 0:f71931ae3db1 54 THU = 4,
kgills 0:f71931ae3db1 55 FRI = 5,
kgills 0:f71931ae3db1 56 SAT = 6,
kgills 0:f71931ae3db1 57 SUN = 7
kgills 0:f71931ae3db1 58 } day_of_week_t;
kgills 0:f71931ae3db1 59
kgills 0:f71931ae3db1 60 static const unsigned OFFSET_OF_YEAR = 0;
kgills 0:f71931ae3db1 61 static const unsigned OFFSET_OF_MONTH = OFFSET_OF_YEAR + 2;
kgills 0:f71931ae3db1 62 static const unsigned OFFSET_OF_DAY = OFFSET_OF_MONTH + 1;
kgills 0:f71931ae3db1 63 static const unsigned OFFSET_OF_HOUR = OFFSET_OF_DAY + 1;
kgills 0:f71931ae3db1 64 static const unsigned OFFSET_OF_MIN = OFFSET_OF_HOUR + 1;
kgills 0:f71931ae3db1 65 static const unsigned OFFSET_OF_SEC = OFFSET_OF_MIN + 1;
kgills 0:f71931ae3db1 66 static const unsigned OFFSET_OF_DOW = OFFSET_OF_SEC + 1;
kgills 0:f71931ae3db1 67 static const unsigned OFFSET_OF_SSEC = OFFSET_OF_DOW + 1;
kgills 0:f71931ae3db1 68 static const unsigned OFFSET_OF_REASON = OFFSET_OF_SSEC + 1;
kgills 0:f71931ae3db1 69
kgills 0:f71931ae3db1 70 static const unsigned CHAR_BYTES = OFFSET_OF_REASON + 1;
kgills 0:f71931ae3db1 71
kgills 0:f71931ae3db1 72 CurrentTimeChar() :
kgills 0:f71931ae3db1 73 gattChar(GattCharacteristic::UUID_CURRENT_TIME_CHAR, bytes, CHAR_BYTES, CHAR_BYTES,
kgills 0:f71931ae3db1 74 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ |
kgills 0:f71931ae3db1 75 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY |
kgills 0:f71931ae3db1 76 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE)
kgills 0:f71931ae3db1 77 {
kgills 0:f71931ae3db1 78 // Default no timestamp and zero for the value
kgills 0:f71931ae3db1 79 memset(bytes, 0x0, CHAR_BYTES);
kgills 0:f71931ae3db1 80 }
kgills 0:f71931ae3db1 81
kgills 0:f71931ae3db1 82 ~CurrentTimeChar() {}
kgills 0:f71931ae3db1 83
kgills 0:f71931ae3db1 84 virtual GattCharacteristic *getChar(void)
kgills 0:f71931ae3db1 85 {
kgills 0:f71931ae3db1 86 return &gattChar;
kgills 0:f71931ae3db1 87 }
kgills 0:f71931ae3db1 88
kgills 0:f71931ae3db1 89 virtual uint8_t getNumBytes(void)
kgills 0:f71931ae3db1 90 {
kgills 0:f71931ae3db1 91 return CHAR_BYTES;
kgills 0:f71931ae3db1 92 }
kgills 0:f71931ae3db1 93
kgills 0:f71931ae3db1 94 virtual uint8_t *getBytes(void)
kgills 0:f71931ae3db1 95 {
kgills 0:f71931ae3db1 96 return bytes;
kgills 0:f71931ae3db1 97 }
kgills 0:f71931ae3db1 98
kgills 0:f71931ae3db1 99 // Update the characteristic value
kgills 0:f71931ae3db1 100 void update(time_t current_time)
kgills 0:f71931ae3db1 101 {
kgills 0:f71931ae3db1 102 // Convert time_t to date_time
kgills 0:f71931ae3db1 103 date_time(current_time, &bytes[OFFSET_OF_YEAR]);
kgills 0:f71931ae3db1 104
kgills 0:f71931ae3db1 105 // Set SSec to 0
kgills 0:f71931ae3db1 106 bytes[OFFSET_OF_SSEC] = 0;
kgills 0:f71931ae3db1 107
kgills 0:f71931ae3db1 108 // Set day of the week
kgills 0:f71931ae3db1 109 struct tm ts = *localtime(&current_time);
kgills 0:f71931ae3db1 110 if(ts.tm_wday == 0) {
kgills 0:f71931ae3db1 111 bytes[OFFSET_OF_DOW] = 7;
kgills 0:f71931ae3db1 112 } else {
kgills 0:f71931ae3db1 113 bytes[OFFSET_OF_DOW] = ts.tm_wday;
kgills 0:f71931ae3db1 114 }
kgills 0:f71931ae3db1 115 }
kgills 0:f71931ae3db1 116
kgills 0:f71931ae3db1 117 // Update the characteristic value with the RTC
kgills 0:f71931ae3db1 118 void update(void)
kgills 0:f71931ae3db1 119 {
kgills 0:f71931ae3db1 120 update(time(NULL));
kgills 0:f71931ae3db1 121 }
kgills 0:f71931ae3db1 122
kgills 0:f71931ae3db1 123 // Get the characteristic value
kgills 0:f71931ae3db1 124 time_t get_value(void)
kgills 0:f71931ae3db1 125 {
kgills 0:f71931ae3db1 126 struct tm ts;
kgills 0:f71931ae3db1 127 ts.tm_year = (bytes[OFFSET_OF_YEAR + 1] << 8) +
kgills 0:f71931ae3db1 128 bytes[OFFSET_OF_YEAR] - 1900;
kgills 0:f71931ae3db1 129
kgills 0:f71931ae3db1 130 ts.tm_mon = bytes[OFFSET_OF_MONTH] - 1;
kgills 0:f71931ae3db1 131 ts.tm_mday = bytes[OFFSET_OF_DAY];
kgills 0:f71931ae3db1 132 ts.tm_hour = bytes[OFFSET_OF_HOUR];
kgills 0:f71931ae3db1 133 ts.tm_min = bytes[OFFSET_OF_MIN];
kgills 0:f71931ae3db1 134 ts.tm_sec = bytes[OFFSET_OF_SEC];
kgills 0:f71931ae3db1 135
kgills 0:f71931ae3db1 136 return mktime(&ts);
kgills 0:f71931ae3db1 137 }
kgills 0:f71931ae3db1 138
kgills 0:f71931ae3db1 139 // Update the RTC with the characteristic value
kgills 0:f71931ae3db1 140 void update_rtc()
kgills 0:f71931ae3db1 141 {
kgills 0:f71931ae3db1 142 set_time(this->get_value());
kgills 0:f71931ae3db1 143 }
kgills 0:f71931ae3db1 144
kgills 0:f71931ae3db1 145 private:
kgills 0:f71931ae3db1 146 GattCharacteristic gattChar;
kgills 0:f71931ae3db1 147 uint8_t bytes[CHAR_BYTES];
kgills 0:f71931ae3db1 148 };
kgills 0:f71931ae3db1 149
kgills 0:f71931ae3db1 150 #endif /* #ifndef __BLE_CURRENTTIMECHAR_H__*/