diff --git a/Software/include/lora_net.h b/Software/include/lora_net.h index 58ddbb7..7b0f852 100644 --- a/Software/include/lora_net.h +++ b/Software/include/lora_net.h @@ -2,10 +2,16 @@ #define _LORA_NET_H_ #include + +#ifdef LORA_FEATURE_ENABLED #include +#elif defined(FEATURE_ENABLE_UARTLORA) +#include +#endif // local includes #include "lora_messages.h" +#include "debugger.h" #include "defaults.h" #include "config.h" #include "globals.h" diff --git a/Software/include/sanitycheck.h b/Software/include/sanitycheck.h index b30573e..f84559e 100644 --- a/Software/include/sanitycheck.h +++ b/Software/include/sanitycheck.h @@ -14,6 +14,9 @@ #error "You must define an WIFI_AP_PASSWORD for Standalone AP-Mode" #endif +#if defined(FEATURE_ENABLE_UARTLORA) && defined(FEATURE_ENABLE_LORA) + #error "You cannot enable LoRa and UART-Protocol at the same time!" +#endif #ifdef FEATURE_ENABLE_WIFI_CLIENT #ifndef WIFI_CLIENT_PASSWORD diff --git a/Software/platformio.ini b/Software/platformio.ini index 4b52bb9..9343657 100644 --- a/Software/platformio.ini +++ b/Software/platformio.ini @@ -30,6 +30,7 @@ build_flags= ;-DFEATURE_ENABLE_WIFI_CLIENT ;-DFEATURE_ENABLE_LORA ;-DCAPTIVE + -DFEATURE_ENABLE_UARTLORA -DWIFI_AP_IP_GW=10,0,0,1 -DADMIN_PASSWORD=${wifi_cred.ota_password} -DWIFI_CLIENT_SSID=${wifi_cred.wifi_client_ssid} diff --git a/Software/src/lora_net.cpp b/Software/src/lora_net.cpp index d7223d2..d813ea3 100644 --- a/Software/src/lora_net.cpp +++ b/Software/src/lora_net.cpp @@ -1,13 +1,19 @@ #include "lora_net.h" +#ifdef FEATURE_ENABLE_LORA LoRa_E220 e220ttl(GPIO_LORA_TX, GPIO_LORA_RX, GPIO_LORA_AUX, 3, 4); // Arduino RX <-- e220 TX, Arduino TX --> e220 RX AUX M0 M1 - void printParameters(struct Configuration configuration); void printModuleInformation(struct ModuleInformation moduleInformation); +#elif defined(FEATURE_ENABLE_UARTLORA) +SoftwareSerial SerialLoRa(GPIO_LORA_RX, GPIO_LORA_TX); // RX, TX +void Parse_LoRa_UartCommand(char input[], int size); +#endif bool InitLoRa(void (*MPinHelper)(int, int)) { - bool returnval; + bool returnval = false; + +#ifdef FEATURE_ENABLE_LORA e220ttl.setMPins = MPinHelper; returnval = e220ttl.begin(); @@ -60,11 +66,15 @@ bool InitLoRa(void (*MPinHelper)(int, int)) { MaintainDTC(DTC_NO_LORA_FOUND, DTC_WARN, true); } +#elif defined(FEATURE_ENABLE_UARTLORA) + // LORA UART Stuff here +#endif return returnval; } void LoRa_Process() { +#ifdef FEATURE_ENABLE_LORA if (e220ttl.available() > 1) { ResponseContainer rc = e220ttl.receiveMessageRSSI(); @@ -82,10 +92,50 @@ void LoRa_Process() Serial.println(rc.rssi, DEC); } } +#elif defined(FEATURE_ENABLE_UARTLORA) + + char packageInput[16]; + bool packageRecieved = false; + unsigned int bufferPtr = 0; + + if (SerialLoRa.available() && packageRecieved == false) + { + while (bufferPtr < sizeof(packageInput)) + { + packageInput[bufferPtr] = SerialLoRa.read(); + if (packageInput[bufferPtr] == '\n') + { + packageInput[bufferPtr] = 0; // terminate String + packageRecieved = true; + Debug_pushMessage("Got LoRa UART: %s\n", packageInput); + break; + } + else if ((packageInput[bufferPtr] >= 0x30) || (packageInput[bufferPtr] <= 0x5A)) // only accept Numbers, UpperCase-Letters and some special chars + { + if (bufferPtr < sizeof(packageInput) - 1) + { + bufferPtr++; + } + else + { + packageInput[bufferPtr] = 0; // terminate String, bc Buffer is full (package to long) + packageRecieved = true; // send it anyway to the parser + Debug_pushMessage("Got LoRa UART: %s\n", packageInput); + break; + } + } + } + } + + if (packageRecieved) + Parse_LoRa_UartCommand(packageInput, bufferPtr); + +#endif } void sendStatus_LoRa() { +#ifdef FEATURE_ENABLE_LORA struct { MessageType_t type = "STATUS"; @@ -101,8 +151,13 @@ void sendStatus_LoRa() ResponseStatus rs = e220ttl.sendFixedMessage(0xFF, 0xFF, 23, (byte *)&sendStatus, sizeof(sendStatus)); Serial.println(rs.getResponseDescription()); +#elif defined(FEATURE_ENABLE_UARTLORA) +// LORA UART SEND STUFF HERE +#endif } +#ifdef FEATURE_ENABLE_LORA + void printParameters(struct Configuration configuration) { Serial.println("----------------------------------------"); @@ -168,4 +223,27 @@ void printParameters(struct Configuration configuration) Serial.println(configuration.TRANSMISSION_MODE.getFixedTransmissionDescription()); Serial.println("----------------------------------------"); -} \ No newline at end of file +} +#endif + +#ifdef FEATURE_ENABLE_UARTLORA +void Parse_LoRa_UartCommand(char input[], int size) +{ + + char delimiter[] = ";"; + char *ptr; + char command[8]; + char value[8]; + + ptr = strtok(input, delimiter); + + while (ptr != NULL) + { + strncpy(command, ptr, sizeof(command)); + ptr = strtok(NULL, delimiter); + strncpy(value, ptr, sizeof(value)); + } + + Debug_pushMessage("Parsed LoRa UART Command: %s Value: %s\n", command, value); +} +#endif \ No newline at end of file diff --git a/Software/src/main.cpp b/Software/src/main.cpp index dc5626a..7be22b8 100644 --- a/Software/src/main.cpp +++ b/Software/src/main.cpp @@ -19,7 +19,7 @@ #include "globals.h" #include "dtc.h" #include "debugger.h" -#ifdef FEATURE_ENABLE_LORA +#if defined(FEATURE_ENABLE_LORA) || defined(FEATURE_ENABLE_UARTLORA) #include "lora_net.h" #endif @@ -49,7 +49,7 @@ void OverrideDisplay(uint32_t time, const char *message1, const char *message2, void initGlobals(); void maintainSysStat(); -#ifdef FEATURE_ENABLE_LORA +#if defined(FEATURE_ENABLE_UARTLORA) || defined(FEATURE_ENABLE_LORA) void setMPins_Helper(int pin, int status); void tmrCallback_StatusSender(); Ticker tmrStatusSender(tmrCallback_StatusSender, 30000, 0, MILLIS); @@ -72,7 +72,7 @@ Ticker tmrWiFiMaintainConnection(tmrCallback_WiFiMaintainConnection, 1000, 0, MI uint32_t DisplayOverrideFlag = 0; char DisplayOverrideValue[3][5] = {0}; -#ifdef FEATURE_ENABLE_LORA +#if defined(FEATURE_ENABLE_UARTLORA) || defined(FEATURE_ENABLE_LORA) void setMPins_Helper(int pin, int status) { i2c_io.write(pin, status); @@ -119,7 +119,7 @@ void setup() Serial.print("INA219 not Initialized\n"); } -#ifdef FEATURE_ENABLE_LORA +#if defined(FEATURE_ENABLE_UARTLORA) || defined(FEATURE_ENABLE_LORA) if (InitLoRa(&setMPins_Helper)) { Serial.print("Initialized LoRa_Transceiver\n"); @@ -229,9 +229,9 @@ void loop() DTC_Process(); Debug_Process(); -#ifdef FEATURE_ENABLE_LORA - tmrStatusSender.update(); +#if defined(FEATURE_ENABLE_LORA) || defined(FEATURE_ENABLE_UARTLORA) LoRa_Process(); + tmrStatusSender.update(); #endif #ifdef CAPTIVE @@ -380,7 +380,7 @@ void tmrCallback_InputGetter() } } -#ifdef FEATURE_ENABLE_LORA +#if defined(FEATURE_ENABLE_LORA) || defined(FEATURE_ENABLE_UARTLORA) void tmrCallback_StatusSender() { sendStatus_LoRa();