HXC Client Shield Repository.

Dependencies:   mbed

Committer:
kashish_mbed
Date:
Mon Mar 29 15:37:08 2021 +0000
Revision:
0:bacc6e701fb4
Child:
2:52bb5ee0a72d
Initial Commit

Who changed what in which revision?

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