A demo application for HXC900 LoRaWAN module using Nucleo-L053R8.

Dependencies:   mbed

Committer:
fahadmirza
Date:
Thu Jan 24 23:45:12 2019 +0000
Revision:
39:cb0e5a76ab15
Parent:
32:2d0678039a09
Doxygen style header

Who changed what in which revision?

UserRevisionLine numberNew contents of line
fahadmirza 4:511677d804ac 1 /*
fahadmirza 4:511677d804ac 2 _ _ _____ _______
fahadmirza 4:511677d804ac 3 | | | | |_ _| |__ __|
fahadmirza 4:511677d804ac 4 | |__| | __ ___ __ | | ___ | |
fahadmirza 4:511677d804ac 5 | __ |/ _` \ \/ / | | / _ \| |
fahadmirza 4:511677d804ac 6 | | | | (_| |> < _| || (_) | |
fahadmirza 4:511677d804ac 7 |_| |_|\__,_/_/\_\_____\___/|_|
fahadmirza 4:511677d804ac 8 (C)2017 HaxIoT
fahadmirza 4:511677d804ac 9 */
fahadmirza 4:511677d804ac 10 /*******************************************************************************
fahadmirza 22:5b77cf59d630 11 * @File : lora_conf.h
fahadmirza 22:5b77cf59d630 12 * @Author : Fahad Mirza (Haxiot)
fahadmirza 22:5b77cf59d630 13 * @Version : V1.0.0
fahadmirza 22:5b77cf59d630 14 * @Modified: 18 October, 2018
fahadmirza 22:5b77cf59d630 15 * @Brief : LoRaWAN Configuration
fahadmirza 4:511677d804ac 16 ******************************************************************************
fahadmirza 4:511677d804ac 17 * @attention
fahadmirza 4:511677d804ac 18 *
fahadmirza 4:511677d804ac 19 * <h2><center>&copy; COPYRIGHT(c) 2017 Haxiot</center></h2>
fahadmirza 4:511677d804ac 20 *
fahadmirza 4:511677d804ac 21 * Redistribution and use in source and binary forms, with or without modification,
fahadmirza 4:511677d804ac 22 * are permitted provided that the following conditions are met:
fahadmirza 4:511677d804ac 23 * 1. Redistributions of source code must retain the above copyright notice,
fahadmirza 4:511677d804ac 24 * this list of conditions and the following disclaimer.
fahadmirza 4:511677d804ac 25 * 2. Redistributions in binary form must reproduce the above copyright notice,
fahadmirza 4:511677d804ac 26 * this list of conditions and the following disclaimer in the documentation
fahadmirza 4:511677d804ac 27 * and/or other materials provided with the distribution.
fahadmirza 4:511677d804ac 28 * 3. Neither the name of Haxiot nor the names of its contributors
fahadmirza 4:511677d804ac 29 * may be used to endorse or promote products derived from this software
fahadmirza 4:511677d804ac 30 * without specific prior written permission.
fahadmirza 4:511677d804ac 31 *
fahadmirza 4:511677d804ac 32 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
fahadmirza 4:511677d804ac 33 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
fahadmirza 4:511677d804ac 34 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
fahadmirza 4:511677d804ac 35 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
fahadmirza 4:511677d804ac 36 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
fahadmirza 4:511677d804ac 37 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
fahadmirza 4:511677d804ac 38 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
fahadmirza 4:511677d804ac 39 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
fahadmirza 4:511677d804ac 40 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
fahadmirza 4:511677d804ac 41 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
fahadmirza 4:511677d804ac 42 *
fahadmirza 4:511677d804ac 43 ******************************************************************************
fahadmirza 4:511677d804ac 44 */
fahadmirza 4:511677d804ac 45
fahadmirza 4:511677d804ac 46 #ifndef __LORA_CONF_H
fahadmirza 4:511677d804ac 47 #define __LORA_CONF_H
fahadmirza 4:511677d804ac 48
fahadmirza 4:511677d804ac 49 #ifdef __cplusplus
fahadmirza 4:511677d804ac 50 extern "C" {
fahadmirza 4:511677d804ac 51 #endif
fahadmirza 4:511677d804ac 52
fahadmirza 6:1d09b7960d57 53 #include <ctype.h>
fahadmirza 6:1d09b7960d57 54 #include <string.h>
fahadmirza 22:5b77cf59d630 55 #include "lora_driver.h"
fahadmirza 32:2d0678039a09 56 #include "hxcclient_bsp.h"
fahadmirza 32:2d0678039a09 57
fahadmirza 4:511677d804ac 58
fahadmirza 15:2860c960d2ff 59 /* Macros --------------------------------------------------------------------*/
fahadmirza 32:2d0678039a09 60 #define UPLINK_CYCLE (15000U) // Send packet every 15s
fahadmirza 32:2d0678039a09 61
fahadmirza 4:511677d804ac 62
fahadmirza 22:5b77cf59d630 63 /* Private function declaration ----------------------------------------------*/
fahadmirza 28:c777d977b252 64 static uint8_t GetSensorData(uint8_t *buffer, uint8_t bufSize, uint8_t *ack, uint8_t *port);
fahadmirza 32:2d0678039a09 65 static void LedControl(uint8_t *buffer, uint8_t dataSize);
fahadmirza 32:2d0678039a09 66 static void UpdateUplinkRate(uint8_t *buffer, uint8_t dataSize);
fahadmirza 32:2d0678039a09 67 static void ParseDownlink(uint8_t *buffer, uint8_t dataSize, uint8_t ack, uint8_t port);
fahadmirza 32:2d0678039a09 68 static void TolowerArray(char *array, uint8_t arraySize);
fahadmirza 32:2d0678039a09 69
fahadmirza 4:511677d804ac 70
fahadmirza 22:5b77cf59d630 71 /* Private variables ---------------------------------------------------------*/
fahadmirza 32:2d0678039a09 72 enum DownlinkType
fahadmirza 32:2d0678039a09 73 {
fahadmirza 32:2d0678039a09 74 DW_LED = 1,
fahadmirza 32:2d0678039a09 75 DW_UPLINK_RATE,
fahadmirza 32:2d0678039a09 76 }eDownlinkType;
fahadmirza 32:2d0678039a09 77
fahadmirza 22:5b77cf59d630 78 static sLoraConfig_t LoraConfigParam =
fahadmirza 22:5b77cf59d630 79 {
fahadmirza 24:f3b987589609 80 .JoinMode = OTAA,
fahadmirza 24:f3b987589609 81 .AdrStatus = ADR_OFF,
fahadmirza 30:c58316bab0fb 82 .Class = 'C',
fahadmirza 27:517ca3a30ad7 83 .DevEui = "AUTO",
fahadmirza 30:c58316bab0fb 84 .AppEui = "E0A5B81425B5D2C7",
fahadmirza 30:c58316bab0fb 85 .AppKey = "CDF5E6547CF354542335DCAEB657DBDF"
fahadmirza 22:5b77cf59d630 86 };
fahadmirza 4:511677d804ac 87
fahadmirza 22:5b77cf59d630 88 static sLoraDriverParam_t LoraDriverParam =
fahadmirza 22:5b77cf59d630 89 {
fahadmirza 32:2d0678039a09 90 .UplinkCycle = UPLINK_CYCLE,
fahadmirza 32:2d0678039a09 91 .UplinkHandler = GetSensorData,
fahadmirza 32:2d0678039a09 92 .DownlinkHandler = ParseDownlink
fahadmirza 22:5b77cf59d630 93 };
fahadmirza 8:60cfc0029421 94
fahadmirza 4:511677d804ac 95 /* Private function definitions ----------------------------------------------*/
fahadmirza 4:511677d804ac 96 /******************************************************************************
fahadmirza 4:511677d804ac 97 * @Brief : Uplink packet handler for lora_driver
fahadmirza 4:511677d804ac 98 * @Param : Pointer for payload buffer, data size, ack configuration and port
fahadmirza 28:c777d977b252 99 * @Return: packet size
fahadmirza 4:511677d804ac 100 ******************************************************************************/
fahadmirza 28:c777d977b252 101 static uint8_t GetSensorData(uint8_t *buffer, uint8_t bufSize, uint8_t *ack, uint8_t *port)
fahadmirza 4:511677d804ac 102 {
fahadmirza 20:1ed8723a3a87 103 /* Prepare an unconfirmed uplink packet for port 2 */
fahadmirza 4:511677d804ac 104 uint8_t size = 0;
fahadmirza 4:511677d804ac 105
fahadmirza 32:2d0678039a09 106 uint16_t tempInt = HXC_BSP_GetTemperature();
fahadmirza 32:2d0678039a09 107 // Checkout our user manual to convert tempInt into degree Celcius
fahadmirza 19:0c90e38fc9c5 108
fahadmirza 31:174c745f921c 109
fahadmirza 32:2d0678039a09 110 buffer[size++] = (uint8_t)Lora_getFwVersion(); // This function returns uint16_t
fahadmirza 31:174c745f921c 111 buffer[size++] = Lora_getBatteryLevel();
fahadmirza 32:2d0678039a09 112 buffer[size++] = (tempInt >> 8) & 0xFF;
fahadmirza 32:2d0678039a09 113 buffer[size++] = tempInt & 0xFF;
fahadmirza 32:2d0678039a09 114 buffer[size++] = HXC_BSP_GetSlideSwitchStatus();
fahadmirza 4:511677d804ac 115
fahadmirza 22:5b77cf59d630 116 *ack = (uint8_t)UNCONFIRMED;
fahadmirza 4:511677d804ac 117 *port = 2;
fahadmirza 28:c777d977b252 118
fahadmirza 28:c777d977b252 119 return size;
fahadmirza 4:511677d804ac 120 }
fahadmirza 4:511677d804ac 121
fahadmirza 22:5b77cf59d630 122
fahadmirza 4:511677d804ac 123 /******************************************************************************
fahadmirza 4:511677d804ac 124 * @Brief : Downlink packet handler for lora_driver
fahadmirza 8:60cfc0029421 125 * Valid downlink messages are: 'red', 'green', 'blue' and 'off'
fahadmirza 4:511677d804ac 126 * @Param : Payload buffer, data size, ack configuration and port
fahadmirza 15:2860c960d2ff 127 * @Return: None
fahadmirza 4:511677d804ac 128 ******************************************************************************/
fahadmirza 32:2d0678039a09 129 static void ParseDownlink(uint8_t *buffer, uint8_t dataSize, uint8_t ack, uint8_t port)
fahadmirza 4:511677d804ac 130 {
fahadmirza 32:2d0678039a09 131 switch(port)
fahadmirza 32:2d0678039a09 132 {
fahadmirza 32:2d0678039a09 133 case DW_LED:
fahadmirza 32:2d0678039a09 134 {
fahadmirza 32:2d0678039a09 135 LedControl(buffer, dataSize);
fahadmirza 32:2d0678039a09 136 break;
fahadmirza 32:2d0678039a09 137 }
fahadmirza 32:2d0678039a09 138 case DW_UPLINK_RATE:
fahadmirza 32:2d0678039a09 139 {
fahadmirza 32:2d0678039a09 140 UpdateUplinkRate(buffer, dataSize);
fahadmirza 32:2d0678039a09 141 break;
fahadmirza 32:2d0678039a09 142 }
fahadmirza 32:2d0678039a09 143 default:
fahadmirza 32:2d0678039a09 144 {
fahadmirza 32:2d0678039a09 145 break;
fahadmirza 32:2d0678039a09 146 }
fahadmirza 32:2d0678039a09 147 }
fahadmirza 32:2d0678039a09 148 }
fahadmirza 32:2d0678039a09 149 static void LedControl(uint8_t *buffer, uint8_t dataSize)
fahadmirza 32:2d0678039a09 150 {
fahadmirza 32:2d0678039a09 151 TolowerArray((char *)buffer, dataSize);
fahadmirza 6:1d09b7960d57 152
fahadmirza 6:1d09b7960d57 153 if(strncmp("red", (const char *)buffer, 3) == 0)
fahadmirza 6:1d09b7960d57 154 {
fahadmirza 32:2d0678039a09 155 HXC_BSP_RGB_On(RED);
fahadmirza 6:1d09b7960d57 156 }
fahadmirza 6:1d09b7960d57 157 else if(strncmp("green", (const char *)buffer, 5) == 0)
fahadmirza 6:1d09b7960d57 158 {
fahadmirza 32:2d0678039a09 159 HXC_BSP_RGB_On(GREEN);
fahadmirza 6:1d09b7960d57 160 }
fahadmirza 6:1d09b7960d57 161 else if(strncmp("blue", (const char *)buffer, 4) == 0)
fahadmirza 4:511677d804ac 162 {
fahadmirza 32:2d0678039a09 163 HXC_BSP_RGB_On(BLUE);
fahadmirza 32:2d0678039a09 164 }
fahadmirza 32:2d0678039a09 165 else if(strncmp("off", (const char *)buffer, 3) == 0)
fahadmirza 32:2d0678039a09 166 {
fahadmirza 32:2d0678039a09 167 HXC_BSP_RGB_Off();
fahadmirza 6:1d09b7960d57 168 }
fahadmirza 32:2d0678039a09 169 else
fahadmirza 6:1d09b7960d57 170 {
fahadmirza 32:2d0678039a09 171 // Users can send any combinations of the RGB
fahadmirza 32:2d0678039a09 172 // using last 3bits. eLedColor_t is arranged
fahadmirza 32:2d0678039a09 173 // in chronological order.
fahadmirza 32:2d0678039a09 174 HXC_BSP_RGB_On((eLedColor_t)(buffer[0] & 0x07));
fahadmirza 6:1d09b7960d57 175 }
fahadmirza 6:1d09b7960d57 176 }
fahadmirza 6:1d09b7960d57 177
fahadmirza 32:2d0678039a09 178 static void UpdateUplinkRate(uint8_t *buffer, uint8_t dataSize)
fahadmirza 32:2d0678039a09 179 {
fahadmirza 32:2d0678039a09 180 //Lora_updateUplinkRate();
fahadmirza 32:2d0678039a09 181 }
fahadmirza 32:2d0678039a09 182
fahadmirza 8:60cfc0029421 183
fahadmirza 8:60cfc0029421 184 /******************************************************************************
fahadmirza 8:60cfc0029421 185 * @Brief : Upper case to lower case for an array
fahadmirza 8:60cfc0029421 186 * @Param : Pointer to array containing characters and array size
fahadmirza 15:2860c960d2ff 187 * @Return: None
fahadmirza 8:60cfc0029421 188 ******************************************************************************/
fahadmirza 32:2d0678039a09 189 static void TolowerArray(char *array, uint8_t arraySize)
fahadmirza 6:1d09b7960d57 190 {
fahadmirza 8:60cfc0029421 191 for(uint8_t i = 0; i < arraySize; i++)
fahadmirza 6:1d09b7960d57 192 {
fahadmirza 8:60cfc0029421 193 array[i] = tolower(array[i]);
fahadmirza 4:511677d804ac 194 }
fahadmirza 4:511677d804ac 195 }
fahadmirza 4:511677d804ac 196
fahadmirza 4:511677d804ac 197 #ifdef __cplusplus
fahadmirza 4:511677d804ac 198 }
fahadmirza 4:511677d804ac 199 #endif /* __cplusplus */
fahadmirza 4:511677d804ac 200
fahadmirza 32:2d0678039a09 201 #endif