Helmut Tschemernjak / Mbed 2 deprecated Turtle_RadioShuttle

Dependencies:   mbed BufferedSerial SX1276GenericLib OLED_SSD1306 HELIOS_Si7021 NVProperty RadioShuttle-STM32L4 USBDeviceHT

Committer:
Helmut Tschemernjak
Date:
Wed May 29 11:18:32 2019 +0200
Revision:
61:6e462fa1b7d5
Parent:
46:a9241f24f4b7
Updated OLED lib

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Helmut Tschemernjak 37:77fa81e4ad79 1 /*
Helmut Tschemernjak 37:77fa81e4ad79 2 * The file is Licensed under the Apache License, Version 2.0
Helmut Tschemernjak 37:77fa81e4ad79 3 * (c) 2017 Helmut Tschemernjak
Helmut Tschemernjak 37:77fa81e4ad79 4 * 30826 Garbsen (Hannover) Germany
Helmut Tschemernjak 37:77fa81e4ad79 5 */
Helmut Tschemernjak 37:77fa81e4ad79 6
Helmut Tschemernjak 37:77fa81e4ad79 7 #include "mbed.h"
Helmut Tschemernjak 37:77fa81e4ad79 8 #include "PinMap.h"
Helmut Tschemernjak 37:77fa81e4ad79 9
Helmut Tschemernjak 37:77fa81e4ad79 10 #if defined(FEATURE_LORA) && defined(FEATURE_RADIOTESTSAMPLE)
Helmut Tschemernjak 37:77fa81e4ad79 11
Helmut Tschemernjak 37:77fa81e4ad79 12 #include "sx1276-mbed-hal.h"
Helmut Tschemernjak 37:77fa81e4ad79 13 #include "RadioShuttle.h"
Helmut Tschemernjak 37:77fa81e4ad79 14 #include "RadioStatus.h"
Helmut Tschemernjak 37:77fa81e4ad79 15 #include "RadioSecurity.h"
Helmut Tschemernjak 37:77fa81e4ad79 16 #include "main.h"
Helmut Tschemernjak 37:77fa81e4ad79 17 #ifdef FEATURE_NVPROPERTY
Helmut Tschemernjak 37:77fa81e4ad79 18 #include <NVPropertyProviderInterface.h>
Helmut Tschemernjak 37:77fa81e4ad79 19 #include "NVProperty.h"
Helmut Tschemernjak 37:77fa81e4ad79 20 #endif
Helmut Tschemernjak 37:77fa81e4ad79 21
Helmut Tschemernjak 37:77fa81e4ad79 22
Helmut Tschemernjak 37:77fa81e4ad79 23
Helmut Tschemernjak 37:77fa81e4ad79 24 #define CHECK_ERROR_RET(func, err) { \
Helmut Tschemernjak 37:77fa81e4ad79 25 if (err) { \
Helmut Tschemernjak 37:77fa81e4ad79 26 dprintf("Error in %s: %s", func, rs->StrError(err)); \
Helmut Tschemernjak 37:77fa81e4ad79 27 return err; \
Helmut Tschemernjak 37:77fa81e4ad79 28 } \
Helmut Tschemernjak 37:77fa81e4ad79 29 }
Helmut Tschemernjak 37:77fa81e4ad79 30
Helmut Tschemernjak 37:77fa81e4ad79 31 // #define RADIO_SERVER 1
Helmut Tschemernjak 37:77fa81e4ad79 32
Helmut Tschemernjak 37:77fa81e4ad79 33
Helmut Tschemernjak 37:77fa81e4ad79 34 bool usePassword = false; // password the can used indepenend of AES
Helmut Tschemernjak 37:77fa81e4ad79 35 bool server; // automatically being set if radioTypeMode RadioShuttle::RS_Station_Basic
Helmut Tschemernjak 37:77fa81e4ad79 36 bool useAES = false; // AES needs the usePassword option on
Helmut Tschemernjak 37:77fa81e4ad79 37 const char *appPassword; // the AES password
Helmut Tschemernjak 37:77fa81e4ad79 38
Helmut Tschemernjak 37:77fa81e4ad79 39 static const int myTempSensorApp = 0x0001; // Must be unique world wide.
Helmut Tschemernjak 37:77fa81e4ad79 40 #ifdef RADIO_SERVER
Helmut Tschemernjak 37:77fa81e4ad79 41 int myDeviceID = 1;
Helmut Tschemernjak 37:77fa81e4ad79 42 int remoteDeviceID = 14;
Helmut Tschemernjak 37:77fa81e4ad79 43 uint32_t myCode = 0;
Helmut Tschemernjak 37:77fa81e4ad79 44 RadioShuttle::RadioType radioTypeMode = RadioShuttle::RS_Station_Basic; // 1 = RS_Node_Offline, 3 = RS_Node_Online, 4 = RS_Station_Basic
Helmut Tschemernjak 37:77fa81e4ad79 45 #else
Helmut Tschemernjak 37:77fa81e4ad79 46 int myDeviceID = 14;
Helmut Tschemernjak 37:77fa81e4ad79 47 int remoteDeviceID = 1;
Helmut Tschemernjak 37:77fa81e4ad79 48 uint32_t myCode = 0;
Helmut Tschemernjak 37:77fa81e4ad79 49 RadioShuttle::RadioType radioTypeMode = RadioShuttle::RS_Node_Offline; // 1 = RS_Node_Offline, 3 = RS_Node_Online, 4 = RS_Station_Basic
Helmut Tschemernjak 37:77fa81e4ad79 50 #endif
Helmut Tschemernjak 37:77fa81e4ad79 51
Helmut Tschemernjak 37:77fa81e4ad79 52
Helmut Tschemernjak 37:77fa81e4ad79 53 /*
Helmut Tschemernjak 37:77fa81e4ad79 54 * For details review: SX1276GenericLib/sx1276/sx1276.h
Helmut Tschemernjak 37:77fa81e4ad79 55 * Supported spreading factors SF 7,8, 9, 10, 11, (12 does not work well)
Helmut Tschemernjak 37:77fa81e4ad79 56 * Working frequencies using the 125000 bandwidth which leaves
Helmut Tschemernjak 37:77fa81e4ad79 57 * sufficient distance to the neighbour channel
Helmut Tschemernjak 37:77fa81e4ad79 58 * EU: 868.1, 868.3, 868.5 (Default LoRaWAN EU channels)
Helmut Tschemernjak 37:77fa81e4ad79 59 * EU: 865.1, 865.3, 865.5, 865.7, 865.9 (additional channels)
Helmut Tschemernjak 37:77fa81e4ad79 60 * EU: 866.1, 866.3, 866.5, 866.7, 866.9 (additional channels)
Helmut Tschemernjak 37:77fa81e4ad79 61 * EU: 867.1, 867.3, 867.5, 867.7, 867.9 (additional channels)
Helmut Tschemernjak 37:77fa81e4ad79 62 * Utilisation of these channels should not exceed 1% per hour per node
Helmut Tschemernjak 37:77fa81e4ad79 63 * Bandwidth changes other than 125k requires different channels distances
Helmut Tschemernjak 37:77fa81e4ad79 64 */
Helmut Tschemernjak 37:77fa81e4ad79 65 RadioShuttle::RadioProfile myProfile[] = {
Helmut Tschemernjak 37:77fa81e4ad79 66 /*
Helmut Tschemernjak 37:77fa81e4ad79 67 * Our default profile
Helmut Tschemernjak 37:77fa81e4ad79 68 * frequency, bandwidth, TX power, spreading factor, frequency-offset
Helmut Tschemernjak 37:77fa81e4ad79 69 */
Helmut Tschemernjak 37:77fa81e4ad79 70 { 868100000, 125000, 14, 7, 0 },
Helmut Tschemernjak 37:77fa81e4ad79 71 { 0, 0, 0, 0, 0 },
Helmut Tschemernjak 37:77fa81e4ad79 72 };
Helmut Tschemernjak 37:77fa81e4ad79 73
Helmut Tschemernjak 37:77fa81e4ad79 74
Helmut Tschemernjak 37:77fa81e4ad79 75 struct sensor {
Helmut Tschemernjak 37:77fa81e4ad79 76 uint8_t version;
Helmut Tschemernjak 37:77fa81e4ad79 77 uint8_t padding;
Helmut Tschemernjak 37:77fa81e4ad79 78 uint16_t pm25;
Helmut Tschemernjak 37:77fa81e4ad79 79 uint16_t pm10;
Helmut Tschemernjak 37:77fa81e4ad79 80 uint16_t id;
Helmut Tschemernjak 37:77fa81e4ad79 81 } PMAppData;
Helmut Tschemernjak 37:77fa81e4ad79 82
Helmut Tschemernjak 37:77fa81e4ad79 83
Helmut Tschemernjak 37:77fa81e4ad79 84 void TempSensorRecvHandler(int AppID, RadioShuttle::devid_t stationID, int msgID, int status, void *buffer, int length)
Helmut Tschemernjak 37:77fa81e4ad79 85 {
Helmut Tschemernjak 37:77fa81e4ad79 86 switch(status) {
Helmut Tschemernjak 37:77fa81e4ad79 87 case RadioShuttle::MS_SentCompleted: // A SendMsg has been sent.
Helmut Tschemernjak 37:77fa81e4ad79 88 dprintf("MSG_SentCompleted: id=%d %d bytes", msgID, length);
Helmut Tschemernjak 37:77fa81e4ad79 89 break;
Helmut Tschemernjak 37:77fa81e4ad79 90 case RadioShuttle::MS_SentCompletedConfirmed:// A SendMsg has been sent and confirmed
Helmut Tschemernjak 37:77fa81e4ad79 91 dprintf("MSG_SentCompletedConfirmed: id=%d %d bytes", msgID, length);
Helmut Tschemernjak 37:77fa81e4ad79 92 break;
Helmut Tschemernjak 37:77fa81e4ad79 93 case RadioShuttle::MS_SentTimeout: // A timeout occurred, number of retries exceeded
Helmut Tschemernjak 37:77fa81e4ad79 94 dprintf("MSG_SentTimeout ID: %d", msgID);
Helmut Tschemernjak 37:77fa81e4ad79 95 break;
Helmut Tschemernjak 37:77fa81e4ad79 96
Helmut Tschemernjak 37:77fa81e4ad79 97 case RadioShuttle::MS_RecvData: // a simple input message
Helmut Tschemernjak 37:77fa81e4ad79 98 dprintf("MSG_RecvData ID: %d, len=%d", msgID, length);
Helmut Tschemernjak 37:77fa81e4ad79 99 // dump("MSG_RecvData", buffer, length);
Helmut Tschemernjak 37:77fa81e4ad79 100 break;
Helmut Tschemernjak 37:77fa81e4ad79 101 case RadioShuttle::MS_RecvDataConfirmed: // received a confirmed message
Helmut Tschemernjak 37:77fa81e4ad79 102 dprintf("MSG_RecvDataConfirmed ID: %d, len=%d", msgID, length);
Helmut Tschemernjak 37:77fa81e4ad79 103 // dump("MSG_RecvDataConfirmed", buffer, length);
Helmut Tschemernjak 37:77fa81e4ad79 104 break;
Helmut Tschemernjak 37:77fa81e4ad79 105 case RadioShuttle::MS_NoStationFound:
Helmut Tschemernjak 37:77fa81e4ad79 106 dprintf("MSG_NoStationFound");
Helmut Tschemernjak 37:77fa81e4ad79 107 break;
Helmut Tschemernjak 37:77fa81e4ad79 108 case RadioShuttle::MS_NoStationSupportsApp:
Helmut Tschemernjak 37:77fa81e4ad79 109 dprintf("MSG_NoStationSupportsApp");
Helmut Tschemernjak 37:77fa81e4ad79 110 break;
Helmut Tschemernjak 37:77fa81e4ad79 111 case RadioShuttle::MS_AuthenicationRequired: // the password does not match.
Helmut Tschemernjak 37:77fa81e4ad79 112 dprintf("MSG_AuthenicationRequired");
Helmut Tschemernjak 37:77fa81e4ad79 113 break;
Helmut Tschemernjak 37:77fa81e4ad79 114
Helmut Tschemernjak 37:77fa81e4ad79 115 case RadioShuttle::MS_StationConnected: // a confirmation that the connection was accepted
Helmut Tschemernjak 37:77fa81e4ad79 116 dprintf("MSG_StationConnected");
Helmut Tschemernjak 37:77fa81e4ad79 117 break;
Helmut Tschemernjak 37:77fa81e4ad79 118 case RadioShuttle::MS_StationDisconnected: // a confirmation that the disconnect was accepted
Helmut Tschemernjak 37:77fa81e4ad79 119 dprintf("MSG_StationDisconnected");
Helmut Tschemernjak 37:77fa81e4ad79 120 break;
Helmut Tschemernjak 37:77fa81e4ad79 121 default:
Helmut Tschemernjak 37:77fa81e4ad79 122 break;
Helmut Tschemernjak 37:77fa81e4ad79 123 }
Helmut Tschemernjak 37:77fa81e4ad79 124 }
Helmut Tschemernjak 37:77fa81e4ad79 125
Helmut Tschemernjak 37:77fa81e4ad79 126
Helmut Tschemernjak 37:77fa81e4ad79 127 Radio *radio;
Helmut Tschemernjak 37:77fa81e4ad79 128 RadioShuttle *rs;
Helmut Tschemernjak 37:77fa81e4ad79 129 RadioStatusInterface *statusIntf;
Helmut Tschemernjak 37:77fa81e4ad79 130 RadioSecurityInterface *securityIntf;
Helmut Tschemernjak 37:77fa81e4ad79 131
Helmut Tschemernjak 37:77fa81e4ad79 132 int InitRadio()
Helmut Tschemernjak 37:77fa81e4ad79 133 {
Helmut Tschemernjak 37:77fa81e4ad79 134 Radio *radio;
Helmut Tschemernjak 37:77fa81e4ad79 135 RSCode err;
Helmut Tschemernjak 37:77fa81e4ad79 136
Helmut Tschemernjak 37:77fa81e4ad79 137 #ifdef FEATURE_NVPROPERTY
Helmut Tschemernjak 37:77fa81e4ad79 138 NVProperty prop;
Helmut Tschemernjak 37:77fa81e4ad79 139 int value;
Helmut Tschemernjak 37:77fa81e4ad79 140
Helmut Tschemernjak 37:77fa81e4ad79 141 myDeviceID = prop.GetProperty(prop.LORA_DEVICE_ID, 0);
Helmut Tschemernjak 37:77fa81e4ad79 142 myCode = prop.GetProperty(prop.LORA_CODE_ID, 0);
Helmut Tschemernjak 37:77fa81e4ad79 143 if ((value = prop.GetProperty(prop.LORA_RADIO_TYPE, 0)) != 0)
Helmut Tschemernjak 37:77fa81e4ad79 144 radioTypeMode = (RadioShuttle::RadioType)value;
Helmut Tschemernjak 37:77fa81e4ad79 145
Helmut Tschemernjak 37:77fa81e4ad79 146 if (myDeviceID == 0 || myCode == 0 || radioTypeMode == 0) {
Helmut Tschemernjak 37:77fa81e4ad79 147 dprintf("LORA_DEVICE_ID or LORA_CODE_ID or LORA_RADIO_TYPE not set, use PropertyEditor to set this!");
Helmut Tschemernjak 37:77fa81e4ad79 148 return -1;
Helmut Tschemernjak 37:77fa81e4ad79 149 }
Helmut Tschemernjak 37:77fa81e4ad79 150 /*
Helmut Tschemernjak 37:77fa81e4ad79 151 * Here are optional properties for custom settings
Helmut Tschemernjak 37:77fa81e4ad79 152 */
Helmut Tschemernjak 37:77fa81e4ad79 153 if ((value = prop.GetProperty(prop.LORA_REMOTE_ID, 0)) != 0)
Helmut Tschemernjak 37:77fa81e4ad79 154 remoteDeviceID = value;
Helmut Tschemernjak 37:77fa81e4ad79 155 if ((value = prop.GetProperty(prop.LORA_FREQUENCY, 0)) != 0)
Helmut Tschemernjak 37:77fa81e4ad79 156 myProfile[0].Frequency = value;
Helmut Tschemernjak 37:77fa81e4ad79 157 if ((value = prop.GetProperty(prop.LORA_BANDWIDTH, 0)) != 0)
Helmut Tschemernjak 37:77fa81e4ad79 158 myProfile[0].Bandwidth = value;
Helmut Tschemernjak 37:77fa81e4ad79 159 if ((value = prop.GetProperty(prop.LORA_SPREADING_FACTOR, 0)) != 0)
Helmut Tschemernjak 37:77fa81e4ad79 160 myProfile[0].SpreadingFaktor = value;
Helmut Tschemernjak 37:77fa81e4ad79 161 if ((value = prop.GetProperty(prop.LORA_TXPOWER, 0)) != 0)
Helmut Tschemernjak 37:77fa81e4ad79 162 myProfile[0].TXPower = value;
Helmut Tschemernjak 37:77fa81e4ad79 163 if ((value = prop.GetProperty(prop.LORA_FREQUENCY_OFFSET, 0)) != 0)
Helmut Tschemernjak 37:77fa81e4ad79 164 myProfile[0].FrequencyOffset = value;
Helmut Tschemernjak 37:77fa81e4ad79 165 appPassword = prop.GetProperty(prop.LORA_APP_PWD, (const char *)NULL);
Helmut Tschemernjak 37:77fa81e4ad79 166 #endif
Helmut Tschemernjak 37:77fa81e4ad79 167
Helmut Tschemernjak 37:77fa81e4ad79 168 if (radioTypeMode >= RadioShuttle::RS_Station_Basic)
Helmut Tschemernjak 37:77fa81e4ad79 169 server = true;
Helmut Tschemernjak 37:77fa81e4ad79 170
Helmut Tschemernjak 37:77fa81e4ad79 171 #ifdef TARGET_DISCO_L072CZ_LRWAN1
Helmut Tschemernjak 37:77fa81e4ad79 172 radio = new SX1276Generic(NULL, MURATA_SX1276,
Helmut Tschemernjak 37:77fa81e4ad79 173 LORA_SPI_MOSI, LORA_SPI_MISO, LORA_SPI_SCLK, LORA_CS, LORA_RESET,
Helmut Tschemernjak 37:77fa81e4ad79 174 LORA_DIO0, LORA_DIO1, LORA_DIO2, LORA_DIO3, LORA_DIO4, LORA_DIO5,
Helmut Tschemernjak 37:77fa81e4ad79 175 LORA_ANT_RX, LORA_ANT_TX, LORA_ANT_BOOST, LORA_TCXO);
Helmut Tschemernjak 37:77fa81e4ad79 176 #elif defined(HELTECL432_REV1)
Helmut Tschemernjak 37:77fa81e4ad79 177 radio = new SX1276Generic(NULL, HELTEC_L4_1276,
Helmut Tschemernjak 37:77fa81e4ad79 178 LORA_SPI_MOSI, LORA_SPI_MISO, LORA_SPI_SCLK, LORA_CS, LORA_RESET,
Helmut Tschemernjak 37:77fa81e4ad79 179 LORA_DIO0, LORA_DIO1, LORA_DIO2, LORA_DIO3, LORA_DIO4, LORA_DIO5,
Helmut Tschemernjak 37:77fa81e4ad79 180 LORA_ANT_PWR);
Helmut Tschemernjak 37:77fa81e4ad79 181 #else // RFM95
Helmut Tschemernjak 37:77fa81e4ad79 182 radio = new SX1276Generic(NULL, RFM95_SX1276,
Helmut Tschemernjak 37:77fa81e4ad79 183 LORA_SPI_MOSI, LORA_SPI_MISO, LORA_SPI_SCLK, LORA_CS, LORA_RESET,
Helmut Tschemernjak 37:77fa81e4ad79 184 LORA_DIO0, LORA_DIO1, LORA_DIO2, LORA_DIO3, LORA_DIO4, LORA_DIO5);
Helmut Tschemernjak 37:77fa81e4ad79 185 #endif
Helmut Tschemernjak 37:77fa81e4ad79 186
Helmut Tschemernjak 37:77fa81e4ad79 187
Helmut Tschemernjak 37:77fa81e4ad79 188 statusIntf = new MyRadioStatus();
Helmut Tschemernjak 37:77fa81e4ad79 189 securityIntf = new RadioSecurity();
Helmut Tschemernjak 37:77fa81e4ad79 190
Helmut Tschemernjak 37:77fa81e4ad79 191 rs = new RadioShuttle("MyRadioShuttle");
Helmut Tschemernjak 37:77fa81e4ad79 192
Helmut Tschemernjak 37:77fa81e4ad79 193 rs->EnablePacketTrace(RadioShuttle::DEV_ID_ANY, true, true);
Helmut Tschemernjak 37:77fa81e4ad79 194
Helmut Tschemernjak 37:77fa81e4ad79 195 err = rs->AddLicense(myDeviceID, myCode);
Helmut Tschemernjak 37:77fa81e4ad79 196 CHECK_ERROR_RET("AddLicense", err);
Helmut Tschemernjak 37:77fa81e4ad79 197
Helmut Tschemernjak 37:77fa81e4ad79 198 err = rs->AddRadio(radio, MODEM_LORA, myProfile);
Helmut Tschemernjak 37:77fa81e4ad79 199 CHECK_ERROR_RET("AddRadio", err);
Helmut Tschemernjak 37:77fa81e4ad79 200 dprintf("Radio: %.1f MHz, SF%d, %.f kHz", (float)myProfile[0].Frequency/1000000.0, myProfile[0].SpreadingFaktor, (float)myProfile[0].Bandwidth/1000.0);
Helmut Tschemernjak 37:77fa81e4ad79 201
Helmut Tschemernjak 37:77fa81e4ad79 202 rs->AddRadioStatus(statusIntf);
Helmut Tschemernjak 37:77fa81e4ad79 203 CHECK_ERROR_RET("AddRadioStatus", err);
Helmut Tschemernjak 37:77fa81e4ad79 204
Helmut Tschemernjak 37:77fa81e4ad79 205 rs->AddRadioSecurity(securityIntf);
Helmut Tschemernjak 37:77fa81e4ad79 206 CHECK_ERROR_RET("AddRadioSecurity", err);
Helmut Tschemernjak 37:77fa81e4ad79 207
Helmut Tschemernjak 37:77fa81e4ad79 208 /*
Helmut Tschemernjak 37:77fa81e4ad79 209 * The password parameter can be NULL if no password is required
Helmut Tschemernjak 37:77fa81e4ad79 210 */
Helmut Tschemernjak 37:77fa81e4ad79 211 err = rs->RegisterApplication(myTempSensorApp, &TempSensorRecvHandler, (void *)appPassword);
Helmut Tschemernjak 37:77fa81e4ad79 212 CHECK_ERROR_RET("RegisterApplication", err);
Helmut Tschemernjak 37:77fa81e4ad79 213
Helmut Tschemernjak 37:77fa81e4ad79 214 if (server) {
Helmut Tschemernjak 37:77fa81e4ad79 215 // usually RadioShuttle::RS_Station_Basic, set via properties
Helmut Tschemernjak 37:77fa81e4ad79 216 err = rs->Startup(radioTypeMode);
Helmut Tschemernjak 37:77fa81e4ad79 217 dprintf("Startup as a Server: %s ID=%d", rs->GetRadioName(rs->GetRadioType()), myDeviceID);
Helmut Tschemernjak 37:77fa81e4ad79 218 } else {
Helmut Tschemernjak 37:77fa81e4ad79 219 // usually RadioShuttle::RS_Node_Online or RadioShuttle, set via properties
Helmut Tschemernjak 37:77fa81e4ad79 220 err = rs->Startup(radioTypeMode);
Helmut Tschemernjak 37:77fa81e4ad79 221 dprintf("Startup as a Node: %s ID=%d", rs->GetRadioName(rs->GetRadioType()), myDeviceID);
Helmut Tschemernjak 37:77fa81e4ad79 222 if (!err && rs->AppRequiresAuthentication(myTempSensorApp) == RS_PasswordSet) {
Helmut Tschemernjak 37:77fa81e4ad79 223 err = rs->Connect(myTempSensorApp, remoteDeviceID);
Helmut Tschemernjak 37:77fa81e4ad79 224 }
Helmut Tschemernjak 37:77fa81e4ad79 225 }
Helmut Tschemernjak 37:77fa81e4ad79 226 CHECK_ERROR_RET("Startup", err);
Helmut Tschemernjak 37:77fa81e4ad79 227 return 0;
Helmut Tschemernjak 37:77fa81e4ad79 228 }
Helmut Tschemernjak 37:77fa81e4ad79 229
Helmut Tschemernjak 37:77fa81e4ad79 230 void DeInitRadio()
Helmut Tschemernjak 37:77fa81e4ad79 231 {
Helmut Tschemernjak 37:77fa81e4ad79 232 if (securityIntf) {
Helmut Tschemernjak 37:77fa81e4ad79 233 delete securityIntf;
Helmut Tschemernjak 37:77fa81e4ad79 234 securityIntf = NULL;
Helmut Tschemernjak 37:77fa81e4ad79 235 }
Helmut Tschemernjak 37:77fa81e4ad79 236 if (statusIntf) {
Helmut Tschemernjak 37:77fa81e4ad79 237 delete statusIntf;
Helmut Tschemernjak 37:77fa81e4ad79 238 statusIntf = NULL;
Helmut Tschemernjak 37:77fa81e4ad79 239 }
Helmut Tschemernjak 37:77fa81e4ad79 240 if (rs) {
Helmut Tschemernjak 37:77fa81e4ad79 241 delete rs;
Helmut Tschemernjak 37:77fa81e4ad79 242 rs = NULL;
Helmut Tschemernjak 37:77fa81e4ad79 243 }
Helmut Tschemernjak 37:77fa81e4ad79 244 if (radio) {
Helmut Tschemernjak 37:77fa81e4ad79 245 delete radio;
Helmut Tschemernjak 37:77fa81e4ad79 246 radio = NULL;
Helmut Tschemernjak 37:77fa81e4ad79 247 }
Helmut Tschemernjak 37:77fa81e4ad79 248 }
Helmut Tschemernjak 37:77fa81e4ad79 249
Helmut Tschemernjak 37:77fa81e4ad79 250
Helmut Tschemernjak 37:77fa81e4ad79 251 int RadioUpdate(bool keyPressed)
Helmut Tschemernjak 37:77fa81e4ad79 252 {
Helmut Tschemernjak 37:77fa81e4ad79 253 if (!rs)
Helmut Tschemernjak 37:77fa81e4ad79 254 return 0;
Helmut Tschemernjak 37:77fa81e4ad79 255
Helmut Tschemernjak 37:77fa81e4ad79 256 if (keyPressed) {
Helmut Tschemernjak 37:77fa81e4ad79 257 int flags = 0;
Helmut Tschemernjak 37:77fa81e4ad79 258 flags |= RadioShuttle::MF_NeedsConfirm; // optional
Helmut Tschemernjak 37:77fa81e4ad79 259 if (usePassword && useAES)
Helmut Tschemernjak 37:77fa81e4ad79 260 flags |= RadioShuttle::MF_Encrypted;
Helmut Tschemernjak 37:77fa81e4ad79 261 if (server) {
Helmut Tschemernjak 37:77fa81e4ad79 262 static char msg[] = "The server feels very good today";
Helmut Tschemernjak 37:77fa81e4ad79 263 rs->SendMsg(myTempSensorApp, msg, sizeof(msg), flags, remoteDeviceID);
Helmut Tschemernjak 37:77fa81e4ad79 264 } else {
Helmut Tschemernjak 37:77fa81e4ad79 265 static char msg[] = "Hello, the temperature is 26 celsius";
Helmut Tschemernjak 37:77fa81e4ad79 266 rs->SendMsg(myTempSensorApp, msg, sizeof(msg), flags, remoteDeviceID);
Helmut Tschemernjak 37:77fa81e4ad79 267 }
Helmut Tschemernjak 37:77fa81e4ad79 268 }
Helmut Tschemernjak 37:77fa81e4ad79 269 rs->RunShuttle();
Helmut Tschemernjak 37:77fa81e4ad79 270 return 0;
Helmut Tschemernjak 37:77fa81e4ad79 271 }
Helmut Tschemernjak 37:77fa81e4ad79 272
Helmut Tschemernjak 37:77fa81e4ad79 273 bool RadioISIdle()
Helmut Tschemernjak 37:77fa81e4ad79 274 {
Helmut Tschemernjak 37:77fa81e4ad79 275 if (!rs)
Helmut Tschemernjak 37:77fa81e4ad79 276 return true;
Helmut Tschemernjak 37:77fa81e4ad79 277 return rs->Idle();
Helmut Tschemernjak 37:77fa81e4ad79 278 }
Helmut Tschemernjak 37:77fa81e4ad79 279
Helmut Tschemernjak 37:77fa81e4ad79 280 void InitLoRaChipWithShutdown()
Helmut Tschemernjak 37:77fa81e4ad79 281 {
Helmut Tschemernjak 37:77fa81e4ad79 282 #ifdef LORA_CS
Helmut Tschemernjak 37:77fa81e4ad79 283 if (LORA_CS == NC)
Helmut Tschemernjak 37:77fa81e4ad79 284 return;
Helmut Tschemernjak 37:77fa81e4ad79 285 #ifdef HELTECL432_REV1
Helmut Tschemernjak 37:77fa81e4ad79 286 Radio *radio = new SX1276Generic(NULL, HELTEC_L4_1276,
Helmut Tschemernjak 37:77fa81e4ad79 287 LORA_SPI_MOSI, LORA_SPI_MISO, LORA_SPI_SCLK, LORA_CS, LORA_RESET,
Helmut Tschemernjak 37:77fa81e4ad79 288 LORA_DIO0, LORA_DIO1, LORA_DIO2, LORA_DIO3, LORA_DIO4, LORA_DIO5, LORA_ANT_PWR);
Helmut Tschemernjak 37:77fa81e4ad79 289 #else
Helmut Tschemernjak 37:77fa81e4ad79 290 Radio *radio = new SX1276Generic(NULL, RFM95_SX1276,
Helmut Tschemernjak 37:77fa81e4ad79 291 LORA_SPI_MOSI, LORA_SPI_MISO, LORA_SPI_SCLK, LORA_CS, LORA_RESET,
Helmut Tschemernjak 37:77fa81e4ad79 292 LORA_DIO0, LORA_DIO1, LORA_DIO2, LORA_DIO3, LORA_DIO4, LORA_DIO5);
Helmut Tschemernjak 37:77fa81e4ad79 293 #endif
Helmut Tschemernjak 37:77fa81e4ad79 294
Helmut Tschemernjak 37:77fa81e4ad79 295 RadioEvents_t radioEvents;
Helmut Tschemernjak 37:77fa81e4ad79 296 memset(&radioEvents, 0, sizeof(radioEvents));
Helmut Tschemernjak 37:77fa81e4ad79 297 if (radio->Init(&radioEvents)) {
Helmut Tschemernjak 37:77fa81e4ad79 298 radio->Sleep();
Helmut Tschemernjak 37:77fa81e4ad79 299 delete radio;
Helmut Tschemernjak 37:77fa81e4ad79 300 }
Helmut Tschemernjak 37:77fa81e4ad79 301 #endif
Helmut Tschemernjak 37:77fa81e4ad79 302 }
Helmut Tschemernjak 40:46374c762e37 303
Helmut Tschemernjak 40:46374c762e37 304
Helmut Tschemernjak 40:46374c762e37 305 void RadioContinuesTX(void)
Helmut Tschemernjak 40:46374c762e37 306 {
Helmut Tschemernjak 40:46374c762e37 307 Radio *radio;
Helmut Tschemernjak 40:46374c762e37 308
Helmut Tschemernjak 40:46374c762e37 309 #ifdef FEATURE_NVPROPERTY
Helmut Tschemernjak 40:46374c762e37 310 NVProperty prop;
Helmut Tschemernjak 40:46374c762e37 311 int value;
Helmut Tschemernjak 40:46374c762e37 312
Helmut Tschemernjak 40:46374c762e37 313 /*
Helmut Tschemernjak 40:46374c762e37 314 * Here are optional properties for custom settings
Helmut Tschemernjak 40:46374c762e37 315 */
Helmut Tschemernjak 40:46374c762e37 316 if ((value = prop.GetProperty(prop.LORA_FREQUENCY, 0)) != 0)
Helmut Tschemernjak 40:46374c762e37 317 myProfile[0].Frequency = value;
Helmut Tschemernjak 40:46374c762e37 318 if ((value = prop.GetProperty(prop.LORA_TXPOWER, 0)) != 0)
Helmut Tschemernjak 40:46374c762e37 319 myProfile[0].TXPower = value;
Helmut Tschemernjak 46:a9241f24f4b7 320 if ((value = prop.GetProperty(prop.LORA_SPREADING_FACTOR, 0)) != 0)
Helmut Tschemernjak 46:a9241f24f4b7 321 myProfile[0].SpreadingFaktor = value;
Helmut Tschemernjak 40:46374c762e37 322 #endif
Helmut Tschemernjak 40:46374c762e37 323
Helmut Tschemernjak 40:46374c762e37 324
Helmut Tschemernjak 40:46374c762e37 325 #ifdef TARGET_DISCO_L072CZ_LRWAN1
Helmut Tschemernjak 40:46374c762e37 326 radio = new SX1276Generic(NULL, MURATA_SX1276,
Helmut Tschemernjak 40:46374c762e37 327 LORA_SPI_MOSI, LORA_SPI_MISO, LORA_SPI_SCLK, LORA_CS, LORA_RESET,
Helmut Tschemernjak 40:46374c762e37 328 LORA_DIO0, LORA_DIO1, LORA_DIO2, LORA_DIO3, LORA_DIO4, LORA_DIO5,
Helmut Tschemernjak 40:46374c762e37 329 LORA_ANT_RX, LORA_ANT_TX, LORA_ANT_BOOST, LORA_TCXO);
Helmut Tschemernjak 40:46374c762e37 330 #elif defined(HELTECL432_REV1)
Helmut Tschemernjak 40:46374c762e37 331 radio = new SX1276Generic(NULL, HELTEC_L4_1276,
Helmut Tschemernjak 40:46374c762e37 332 LORA_SPI_MOSI, LORA_SPI_MISO, LORA_SPI_SCLK, LORA_CS, LORA_RESET,
Helmut Tschemernjak 40:46374c762e37 333 LORA_DIO0, LORA_DIO1, LORA_DIO2, LORA_DIO3, LORA_DIO4, LORA_DIO5,
Helmut Tschemernjak 40:46374c762e37 334 LORA_ANT_PWR);
Helmut Tschemernjak 40:46374c762e37 335 #else // RFM95
Helmut Tschemernjak 40:46374c762e37 336 radio = new SX1276Generic(NULL, RFM95_SX1276,
Helmut Tschemernjak 40:46374c762e37 337 LORA_SPI_MOSI, LORA_SPI_MISO, LORA_SPI_SCLK, LORA_CS, LORA_RESET,
Helmut Tschemernjak 40:46374c762e37 338 LORA_DIO0, LORA_DIO1, LORA_DIO2, LORA_DIO3, LORA_DIO4, LORA_DIO5);
Helmut Tschemernjak 40:46374c762e37 339 #endif
Helmut Tschemernjak 40:46374c762e37 340
Helmut Tschemernjak 40:46374c762e37 341 dprintf("RadioContinuesTX test, press reset to abort");
Helmut Tschemernjak 40:46374c762e37 342 while(true) {
Helmut Tschemernjak 40:46374c762e37 343 int secs = 10;
Helmut Tschemernjak 40:46374c762e37 344 radio->SetTxContinuousWave(myProfile[0].Frequency, myProfile[0].TXPower, secs);
Helmut Tschemernjak 40:46374c762e37 345 wait_ms(secs * 1000);
Helmut Tschemernjak 40:46374c762e37 346 rprintf(".");
Helmut Tschemernjak 40:46374c762e37 347 }
Helmut Tschemernjak 40:46374c762e37 348 }
Helmut Tschemernjak 40:46374c762e37 349
Helmut Tschemernjak 37:77fa81e4ad79 350 #endif // FEATURE_LORA