Fahad Mirza / Mbed 2 deprecated Nucleo_HXC900

Dependencies:   mbed

Committer:
fahadmirza
Date:
Thu Nov 01 23:55:31 2018 +0000
Revision:
27:517ca3a30ad7
Parent:
24:f3b987589609
Child:
28:c777d977b252
-Max_Payload_Size defined; -Replaced Appeui, Appkey with a general statement; -and DevEui as Auto. implemented print_deveui function; - forget to update keys will be stuck in infinite loop; -During rejoin,stop uplink timer; -stop rejoin timer in event fun

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 4:511677d804ac 56
fahadmirza 15:2860c960d2ff 57 /* Macros --------------------------------------------------------------------*/
fahadmirza 15:2860c960d2ff 58 #define SENSORS_MEASURE_CYCLE (15000U) // Send packet every 15s
fahadmirza 4:511677d804ac 59
fahadmirza 22:5b77cf59d630 60 /* Private function declaration ----------------------------------------------*/
fahadmirza 22:5b77cf59d630 61 static void GetSensorData(uint8_t *buffer, uint8_t *dataSize, uint8_t *ack, uint8_t *port);
fahadmirza 22:5b77cf59d630 62 static void LedControl(uint8_t *buffer, uint8_t dataSize, uint8_t ack, uint8_t port);
fahadmirza 22:5b77cf59d630 63 static void tolower_array(char *array, uint8_t arraySize);
fahadmirza 4:511677d804ac 64
fahadmirza 22:5b77cf59d630 65 /* Private variables ---------------------------------------------------------*/
fahadmirza 22:5b77cf59d630 66 static sLoraConfig_t LoraConfigParam =
fahadmirza 22:5b77cf59d630 67 {
fahadmirza 24:f3b987589609 68 .JoinMode = OTAA,
fahadmirza 24:f3b987589609 69 .AdrStatus = ADR_OFF,
fahadmirza 24:f3b987589609 70 .Class = 'A',
fahadmirza 27:517ca3a30ad7 71 .DevEui = "AUTO",
fahadmirza 27:517ca3a30ad7 72 .AppEui = "<Use your device specific EUI>",
fahadmirza 27:517ca3a30ad7 73 .AppKey = "<Use your device specific KEY>"
fahadmirza 22:5b77cf59d630 74 };
fahadmirza 4:511677d804ac 75
fahadmirza 22:5b77cf59d630 76 static sLoraDriverParam_t LoraDriverParam =
fahadmirza 22:5b77cf59d630 77 {
fahadmirza 22:5b77cf59d630 78 .SensorMeasureTime = SENSORS_MEASURE_CYCLE,
fahadmirza 22:5b77cf59d630 79 .SendDataHandler = GetSensorData,
fahadmirza 22:5b77cf59d630 80 .ReceiveDataHandler = LedControl
fahadmirza 22:5b77cf59d630 81 };
fahadmirza 8:60cfc0029421 82
fahadmirza 4:511677d804ac 83 /* Private function definitions ----------------------------------------------*/
fahadmirza 4:511677d804ac 84 /******************************************************************************
fahadmirza 4:511677d804ac 85 * @Brief : Uplink packet handler for lora_driver
fahadmirza 4:511677d804ac 86 * @Param : Pointer for payload buffer, data size, ack configuration and port
fahadmirza 15:2860c960d2ff 87 * @Return: None
fahadmirza 4:511677d804ac 88 ******************************************************************************/
fahadmirza 4:511677d804ac 89 static void GetSensorData(uint8_t *buffer, uint8_t *dataSize, uint8_t *ack, uint8_t *port)
fahadmirza 4:511677d804ac 90 {
fahadmirza 20:1ed8723a3a87 91 /* Prepare an unconfirmed uplink packet for port 2 */
fahadmirza 4:511677d804ac 92 uint8_t size = 0;
fahadmirza 4:511677d804ac 93
fahadmirza 21:f1d561ed31a1 94 // Converts and read the analog input value (value from 0.0 to 1.0)
fahadmirza 21:f1d561ed31a1 95 float temperatureValue = temperatureSensor.read();
fahadmirza 21:f1d561ed31a1 96 // Change the value to be in the 0 to 3300 range
fahadmirza 21:f1d561ed31a1 97 uint16_t temperatureValueInt = temperatureValue * 3300;
fahadmirza 21:f1d561ed31a1 98 // Checkout our user manual to convert temperatureValueInt into degree Celcius
fahadmirza 19:0c90e38fc9c5 99
fahadmirza 19:0c90e38fc9c5 100 buffer[size++] = (temperatureValueInt >> 8) & 0xFF;
fahadmirza 19:0c90e38fc9c5 101 buffer[size++] = temperatureValueInt & 0xFF;
fahadmirza 19:0c90e38fc9c5 102 buffer[size++] = slideSwitch;
fahadmirza 4:511677d804ac 103
fahadmirza 4:511677d804ac 104 *dataSize = size;
fahadmirza 22:5b77cf59d630 105 *ack = (uint8_t)UNCONFIRMED;
fahadmirza 4:511677d804ac 106 *port = 2;
fahadmirza 4:511677d804ac 107 }
fahadmirza 4:511677d804ac 108
fahadmirza 22:5b77cf59d630 109
fahadmirza 4:511677d804ac 110 /******************************************************************************
fahadmirza 4:511677d804ac 111 * @Brief : Downlink packet handler for lora_driver
fahadmirza 8:60cfc0029421 112 * Valid downlink messages are: 'red', 'green', 'blue' and 'off'
fahadmirza 4:511677d804ac 113 * @Param : Payload buffer, data size, ack configuration and port
fahadmirza 15:2860c960d2ff 114 * @Return: None
fahadmirza 4:511677d804ac 115 ******************************************************************************/
fahadmirza 4:511677d804ac 116 static void LedControl(uint8_t *buffer, uint8_t dataSize, uint8_t ack, uint8_t port)
fahadmirza 4:511677d804ac 117 {
fahadmirza 8:60cfc0029421 118 tolower_array((char *)buffer, dataSize);
fahadmirza 6:1d09b7960d57 119
fahadmirza 6:1d09b7960d57 120 if(strncmp("red", (const char *)buffer, 3) == 0)
fahadmirza 6:1d09b7960d57 121 {
fahadmirza 6:1d09b7960d57 122 redLED = 1;
fahadmirza 6:1d09b7960d57 123 greenLED = 0;
fahadmirza 6:1d09b7960d57 124 blueLED = 0;
fahadmirza 6:1d09b7960d57 125 }
fahadmirza 6:1d09b7960d57 126 else if(strncmp("green", (const char *)buffer, 5) == 0)
fahadmirza 6:1d09b7960d57 127 {
fahadmirza 6:1d09b7960d57 128 redLED = 0;
fahadmirza 6:1d09b7960d57 129 greenLED = 1;
fahadmirza 6:1d09b7960d57 130 blueLED = 0;
fahadmirza 6:1d09b7960d57 131 }
fahadmirza 6:1d09b7960d57 132 else if(strncmp("blue", (const char *)buffer, 4) == 0)
fahadmirza 4:511677d804ac 133 {
fahadmirza 6:1d09b7960d57 134 redLED = 0;
fahadmirza 6:1d09b7960d57 135 greenLED = 0;
fahadmirza 6:1d09b7960d57 136 blueLED = 1;
fahadmirza 6:1d09b7960d57 137 }
fahadmirza 6:1d09b7960d57 138 else if(strncmp("off", (const char *)buffer, 4) == 0)
fahadmirza 6:1d09b7960d57 139 {
fahadmirza 6:1d09b7960d57 140 redLED = 0;
fahadmirza 6:1d09b7960d57 141 greenLED = 0;
fahadmirza 6:1d09b7960d57 142 blueLED = 0;
fahadmirza 6:1d09b7960d57 143 }
fahadmirza 6:1d09b7960d57 144 }
fahadmirza 6:1d09b7960d57 145
fahadmirza 8:60cfc0029421 146
fahadmirza 8:60cfc0029421 147 /******************************************************************************
fahadmirza 8:60cfc0029421 148 * @Brief : Upper case to lower case for an array
fahadmirza 8:60cfc0029421 149 * @Param : Pointer to array containing characters and array size
fahadmirza 15:2860c960d2ff 150 * @Return: None
fahadmirza 8:60cfc0029421 151 ******************************************************************************/
fahadmirza 8:60cfc0029421 152 static void tolower_array(char *array, uint8_t arraySize)
fahadmirza 6:1d09b7960d57 153 {
fahadmirza 8:60cfc0029421 154 for(uint8_t i = 0; i < arraySize; i++)
fahadmirza 6:1d09b7960d57 155 {
fahadmirza 8:60cfc0029421 156 array[i] = tolower(array[i]);
fahadmirza 4:511677d804ac 157 }
fahadmirza 4:511677d804ac 158 }
fahadmirza 4:511677d804ac 159
fahadmirza 4:511677d804ac 160 #ifdef __cplusplus
fahadmirza 4:511677d804ac 161 }
fahadmirza 4:511677d804ac 162 #endif /* __cplusplus */
fahadmirza 4:511677d804ac 163
fahadmirza 4:511677d804ac 164 #endif