Fahad Mirza
/
Nucleo_HXC900
A demo application for HXC900 LoRaWAN module using Nucleo-L053R8.
lora_conf.h@39:cb0e5a76ab15, 2019-01-24 (annotated)
- 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?
User | Revision | Line number | New 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>© 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 |