diff --git a/ampel-firmware/lorawan.cpp b/ampel-firmware/lorawan.cpp index dfb256a37fff21f6135d17f3976cae702e2f7bcf..9b667986994246283482d7f1032fba2e86a4d991 100644 --- a/ampel-firmware/lorawan.cpp +++ b/ampel-firmware/lorawan.cpp @@ -98,6 +98,12 @@ namespace lorawan { u1_t nwkKey[16]; u1_t artKey[16]; LMIC_getSessionKeys(&netid, &devaddr, nwkKey, artKey); + config::lora_session_saved = true; + config::lora_netid = netid; + config::lora_devaddr = devaddr; + memcpy(config::lorawan_nwk_key, nwkKey, 16); + memcpy(config::lorawan_art_key, artKey, 16); + config::save(); //NOTE: Saving session to EEPROM seems like a good idea at first, but unfortunately: too much info is needed, and a counter would need to be save every single time data is sent. Serial.print(F(" netid: ")); Serial.println(netid, DEC); diff --git a/ampel-firmware/web_config.cpp b/ampel-firmware/web_config.cpp index e8fa324dab9e274de667311e683d9dd06e8f0af9..bdcf6bd0235bd063311cc4f5f0c8fd42b9a39f08 100644 --- a/ampel-firmware/web_config.cpp +++ b/ampel-firmware/web_config.cpp @@ -143,6 +143,22 @@ namespace web_config { LORAWAN_APPLICATION_EUI).build(); PasswordTParameter<33> appKeyParam = Builder<PasswordTParameter<33>>("app_key").label("App key (MSB)").defaultValue( LORAWAN_APPLICATION_KEY).build(); + + CheckboxTParameter savedLoraSession = + Builder<CheckboxTParameter>("lora_session").label("LoRa session has been saved?").defaultValue(false).build(); + + +// u4_t netid = 0; +// devaddr_t devaddr = 0; +// u1_t nwkKey[16]; +// u1_t artKey[16]; +// LMIC_getSessionKeys(&netid, &devaddr, nwkKey, artKey); + IntTParameter<uint32_t> savedLoraNetIdParam = + Builder<IntTParameter<uint32_t>>("netid").label("netid").defaultValue(0).placeholder("?").build(); + IntTParameter<uint32_t> savedDevaddrParam = + Builder<IntTParameter<uint32_t>>("devaddr").label("devaddr").defaultValue(0).placeholder("?").build(); + PasswordTParameter<17> nwkKeyParam = Builder<PasswordTParameter<17>>("nwkKey").label("nwkKey").defaultValue("").build(); + PasswordTParameter<17> artKeyParam = Builder<PasswordTParameter<17>>("artKey").label("artKey").defaultValue("").build(); #endif OptionalGroupHtmlFormatProvider optionalGroupHtmlFormatProvider; @@ -209,6 +225,15 @@ namespace web_config { loraParams.addItem(&deviceEUIParam); loraParams.addItem(&appEUIParam); loraParams.addItem(&appKeyParam); + + //TODO : Test + //TODO : Hide some. + //TODO : rename + loraParams.addItem(&savedLoraSession); + loraParams.addItem(&savedLoraNetIdParam); + loraParams.addItem(&savedDevaddrParam); + loraParams.addItem(&nwkKeyParam); + loraParams.addItem(&artKeyParam); #endif iotWebConf->addParameterGroup(&co2Params); @@ -335,5 +360,11 @@ namespace config { char *lorawan_device_eui = web_config::deviceEUIParam.value(); char *lorawan_app_key = web_config::appKeyParam.value(); char *lorawan_app_eui = web_config::appEUIParam.value(); + + bool &lora_session_saved = web_config::savedLoraSession.value(); + uint32_t &lora_netid = web_config::savedLoraNetIdParam.value(); + uint32_t &lora_devaddr = web_config::savedDevaddrParam.value(); + char *lorawan_nwk_key = web_config::nwkKeyParam.value(); + char *lorawan_art_key = web_config::artKeyParam.value(); #endif } diff --git a/ampel-firmware/web_config.h b/ampel-firmware/web_config.h index c9b23af91bb82c49fa26dfd141b388600d10ff7c..43dd3eef07b5816d54ed99e38a9be51026b9cfe8 100644 --- a/ampel-firmware/web_config.h +++ b/ampel-firmware/web_config.h @@ -58,6 +58,12 @@ namespace config { extern char *lorawan_device_eui; extern char *lorawan_app_key; extern char *lorawan_app_eui; + + extern bool &lora_session_saved; + extern uint32_t &lora_netid; + extern uint32_t &lora_devaddr; + extern char *lorawan_nwk_key; + extern char *lorawan_art_key; #endif // Transmission rate