#include "configuration.h" #include "defines.h" #include "LoRaWan_APP.h" #include #include #include #include #include #include "HT_SSD1306Wire.h" #include #include #include #include #include #include #include const uint32_t MAGIC = 0xaffe0001; config_t myConfig = { .magic = MAGIC, .appEui = { 0, 0, 0, 0, 0, 0, 0, 0 }, .appKey = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, .modbus_poll_slots = { { .typ = INPUT_REGISTERS, .id = 7, .address = 0x01 }, { .typ = INPUT_REGISTERS, .id = 7, .address = 0x02 }, { .typ = UNASSIGNED, .id = 0, .address = 0 }, } }; uint8_t devEui[8]; uint8_t appEui[8]; uint8_t appKey[16]; uint8_t nwkSKey[16]; uint8_t appSKey[16]; uint32_t devAddr; LoRaMacRegion_t loraWanRegion; bool overTheAirActivation; SSD1306Wire confDisplay(0x3c, 500000, SDA_OLED, SCL_OLED, GEOMETRY_128_64, RST_OLED);; // addr , freq , i2c group , resolution , rst WebServer server(80); const char *ssid = "ModbusLoraConf"; #define TEST_PASSWORD #ifndef TEST_PASSWORD char password[12]; #else const char *password = "test1234"; #endif extern uint8_t devEui[8]; bool configSaved = false; int configParsingFailed = 0; enum { PARSING_OK, PARSING_INVALID, PARSING_TOO_MANY, PARSING_TOO_FEW } configParsingError; static void displayStatus(uint8_t numOfStations) { confDisplay.clear(); confDisplay.display(); confDisplay.drawString(1, 0, "Config Mode running"); char buf[64]; memset(buf, 0, sizeof(buf)); sprintf(buf, "SSID: %s", ssid); confDisplay.drawString(1, 12, buf); memset(buf, 0, sizeof(buf)); sprintf(buf, "Key: %s", password); confDisplay.drawString(1, 24, buf); confDisplay.display(); memset(buf, 0, sizeof(buf)); sprintf(buf, "Num of stations: %d", numOfStations); confDisplay.drawString(1, 36, buf); confDisplay.display(); } static void displayInit() { digitalWrite(Vext,LOW); confDisplay.init(); confDisplay.setFont(ArialMT_Plain_10); confDisplay.setTextAlignment(TEXT_ALIGN_LEFT); confDisplay.screenRotate(ANGLE_180_DEGREE); confDisplay.clear(); confDisplay.drawString(1, 0, "Config Mode starting"); confDisplay.display(); } static void handleRoot() { // bool configValid = (configBlock.magic == MAGIC); std::stringstream buffer; buffer << "" " " " Modbus LoRaWAN Gateway" " " " " "

Modbus LoRaWAN Gateway - Configuration Page

"; if (configSaved) { configSaved = false; buffer << "

Configuration saved

"; } if (configParsingFailed) { configParsingFailed = 0; buffer << "

Error when parsing field " << configParsingFailed << ", error " << configParsingError << "

"; } buffer << "
" " " " " "
"; buffer << "