diff --git a/src/httpserver/http_fns.c b/src/httpserver/http_fns.c index bda4be016..de889f3c5 100644 --- a/src/httpserver/http_fns.c +++ b/src/httpserver/http_fns.c @@ -1159,6 +1159,7 @@ int http_fn_cfg(http_request_t *request) { poststr(request,htmlHeader); poststr(request,g_header); poststr(request,"
"); + poststr(request,"
"); poststr(request,"
"); poststr(request,"
"); poststr(request,"
"); @@ -1321,6 +1322,42 @@ int http_fn_cfg_pins(http_request_t *request) { return 0; } +int http_fn_cfg_generic(http_request_t *request) { + int iChanged = 0; + int iChangedRequested = 0; + int i; + char tmpA[128]; + char tmpB[64]; + + http_setup(request, httpMimeTypeHTML); + poststr(request,htmlHeader); + poststr(request,g_header); + + if( http_getArg(request->url,"boot_ok_delay",tmpA,sizeof(tmpA))) { + i = atoi(tmpA); + if(i <= 0) { + poststr(request,"
Boot ok delay must be at least 1 second
"); + i = 1; + } + hprintf128(request,"
Setting boot OK delay to %i
",i); + CFG_SetBootOkSeconds(i); + } + + poststr(request,"
\ +
\ +
\""); + poststr(request,"
"); + + poststr(request,htmlReturnToCfg); + HTTP_AddBuildFooter(request); + poststr(request,htmlEnd); + + poststr(request, NULL); + return 0; +} + void XR809_RequestOTAHTTP(const char *s); int http_fn_ota_exec(http_request_t *request) { diff --git a/src/httpserver/http_fns.h b/src/httpserver/http_fns.h index 78056b54e..09975db85 100644 --- a/src/httpserver/http_fns.h +++ b/src/httpserver/http_fns.h @@ -29,3 +29,4 @@ int http_fn_empty_url(http_request_t *request); int http_fn_other(http_request_t *request); int http_fn_cm(http_request_t *request); int http_fn_startup_command(http_request_t *request); +int http_fn_cfg_generic(http_request_t *request); diff --git a/src/httpserver/new_http.c b/src/httpserver/new_http.c index 5236e6951..4bd7612fb 100644 --- a/src/httpserver/new_http.c +++ b/src/httpserver/new_http.c @@ -530,6 +530,7 @@ int HTTP_ProcessPacket(http_request_t *request) { if(http_checkUrlBase(urlStr,"cmd_tool")) return http_fn_cmd_tool(request); if(http_checkUrlBase(urlStr,"config_dump_table")) return http_fn_config_dump_table(request); if(http_checkUrlBase(urlStr,"startup_command")) return http_fn_startup_command(request); + if(http_checkUrlBase(urlStr,"cfg_generic")) return http_fn_cfg_generic(request); if(http_checkUrlBase(urlStr,"cfg_quick")) return http_fn_cfg_quick(request); if(http_checkUrlBase(urlStr,"cfg_ha")) return http_fn_cfg_ha(request); diff --git a/src/new_cfg.c b/src/new_cfg.c index 5bf7b6c4f..7a1ac90cb 100644 --- a/src/new_cfg.c +++ b/src/new_cfg.c @@ -8,6 +8,7 @@ #include "hal/hal_flashConfig.h" #include "cmnds/cmd_public.h" +#define DEFAULT_BOOT_SUCCESS_TIME 30 mainConfig_t g_cfg; int g_configInitialized = 0; @@ -120,6 +121,7 @@ static void CFG_SetDefaultConfig() { g_cfg.ident0 = CFG_IDENT_0; g_cfg.ident1 = CFG_IDENT_1; g_cfg.ident2 = CFG_IDENT_2; + g_cfg.timeRequiredToMarkBootSuccessfull = DEFAULT_BOOT_SUCCESS_TIME; strcpy(g_cfg.ping_host,"192.168.0.1"); strcpy(g_cfg.mqtt_host, "192.168.0.113"); strcpy(g_cfg.mqtt_brokerName, "test"); @@ -144,6 +146,24 @@ const char *CFG_GetShortStartupCommand() { return g_cfg.initCommandLine; } +void CFG_SetBootOkSeconds(int v) { + // at least 1 second, always + if(v < 1) + v = 1; + if(g_cfg.timeRequiredToMarkBootSuccessfull != v) { + g_cfg.timeRequiredToMarkBootSuccessfull = v; + g_cfg_pendingChanges++; + } +} +int CFG_GetBootOkSeconds() { + if(g_configInitialized==0){ + return DEFAULT_BOOT_SUCCESS_TIME; + } + if(g_cfg.timeRequiredToMarkBootSuccessfull <= 0) { + return DEFAULT_BOOT_SUCCESS_TIME; + } + return g_cfg.timeRequiredToMarkBootSuccessfull; +} const char *CFG_GetPingHost() { return g_cfg.ping_host; } diff --git a/src/new_cfg.h b/src/new_cfg.h index 20212a36d..aec23ca6c 100644 --- a/src/new_cfg.h +++ b/src/new_cfg.h @@ -42,7 +42,8 @@ int CFG_GetPingIntervalSeconds(); void CFG_SetPingHost(const char *s); void CFG_SetPingDisconnectedSecondsToRestart(int i); void CFG_SetPingIntervalSeconds(int i); - +void CFG_SetBootOkSeconds(int v); +int CFG_GetBootOkSeconds(); diff --git a/src/new_pins.h b/src/new_pins.h index 5f0a37e7e..ebf5b4999 100644 --- a/src/new_pins.h +++ b/src/new_pins.h @@ -118,7 +118,8 @@ typedef struct mainConfig_s { pinsState_t pins; byte unusedSectorA[256]; byte unusedSectorB[128]; - byte unusedSectorC[56]; + byte unusedSectorC[55]; + byte timeRequiredToMarkBootSuccessfull; int ping_interval; int ping_seconds; char ping_host[64]; diff --git a/src/user_main.c b/src/user_main.c index 9fbb144e4..20b4f1edd 100644 --- a/src/user_main.c +++ b/src/user_main.c @@ -158,6 +158,7 @@ void CFG_Save_SetupTimer() { void Main_OnPingCheckerReply(int ms) { g_timeSinceLastPingReply = 0; } +int g_bBootMarkedOK = 0; void Main_OnEverySecond() { int bMQTTconnected; @@ -207,9 +208,14 @@ void Main_OnEverySecond() } // when we hit 30s, mark as boot complete. - if (g_secondsElapsed == BOOT_COMPLETE_SECONDS){ - HAL_FlashVars_SaveBootComplete(); - g_bootFailures = HAL_FlashVars_GetBootFailures(); + if(g_bBootMarkedOK==false) { + int bootCompleteSeconds = CFG_GetBootOkSeconds(); + if (g_secondsElapsed > bootCompleteSeconds){ + ADDLOGF_INFO("Boot complete time reached (%i seconds)\n",bootCompleteSeconds); + HAL_FlashVars_SaveBootComplete(); + g_bootFailures = HAL_FlashVars_GetBootFailures(); + g_bBootMarkedOK = true; + } } if (g_openAP){