Răsfoiți Sursa

Rolling 20201204

jomjol 5 ani în urmă
părinte
comite
816f93222b

+ 9 - 1
README.md

@@ -25,7 +25,15 @@ A 3d-printable housing can be found here: https://www.thingiverse.com/thing:4571
 
 **General remark:** Beside the `firmware.bin`, typically also the content of `/html` needs to be updated!
 
-##### Rolling - (2020-12-03)
+##### Rolling - (2020-12-04)
+
+* Implementation of a setup modus at the beginning of a new installation. It guides the user through a check of the parameters and setting and disables at the end automatically.
+  Special modus is entered if `SetupMode=true` in section `[System]`
+* Bug fix: wrong rounding in case of no analog counters and decimal shift
+
+
+2020-12-03
+
 
 * Move source code to `/main` to full compatibility between pure ESP-IDF and Platformio w/ espressif
 

+ 11 - 0
code/components/jomjol_flowcontroll/ClassFlowControll.cpp

@@ -66,6 +66,7 @@ std::vector<HTMLInfo*> ClassFlowControll::GetAllAnalog()
 void ClassFlowControll::SetInitialParameter(void)
 {
     AutoStart = false;
+    SetupModeActive = false;
     AutoIntervall = 10;
 }
 
@@ -309,6 +310,16 @@ bool ClassFlowControll::ReadParameter(FILE* pfile, string& aktparamgraph)
             xTaskCreate(&task_doTimeSync, "update_time", configMINIMAL_STACK_SIZE * 16, &TimeUpdateIntervall, tskIDLE_PRIORITY, NULL);
         }      
 
+        if ((toUpper(zerlegt[0]) == "SETUPMODE") && (zerlegt.size() > 1))
+        {
+            if (toUpper(zerlegt[1]) == "TRUE")
+            {
+                SetupModeActive = true;
+            }        
+        }      
+
+
+
     }
     return true;
 }

+ 2 - 0
code/components/jomjol_flowcontroll/ClassFlowControll.h

@@ -21,6 +21,7 @@ protected:
 
 	bool AutoStart;
 	float AutoIntervall;
+	bool SetupModeActive;
 	void SetInitialParameter(void);	
 	std::string aktstatus;
 	int TimeUpdateIntervall;
@@ -29,6 +30,7 @@ protected:
 public:
 	void InitFlow(std::string config);
 	bool doFlow(string time);
+	bool getStatusSetupModus(){return SetupModeActive;};
 	string getReadout(bool _rawvalue, bool _noerror);
 	string UpdatePrevalue(std::string _newvalue);
 	string GetPrevalue();	

+ 3 - 1
code/components/jomjol_flowcontroll/ClassFlowPostProcessing.cpp

@@ -313,7 +313,6 @@ bool ClassFlowPostProcessing::doFlow(string zwtime)
 
     ReturnRawValue = ShiftDecimal(ReturnRawValue, DecimalShift);   
 
-
     if (!PreValueUse || !PreValueOkay)
     {
         ReturnValue = ReturnRawValue;
@@ -391,6 +390,9 @@ string ClassFlowPostProcessing::getReadoutParam(bool _rawValue, bool _noerror)
 
 string ClassFlowPostProcessing::RundeOutput(float _in, int _anzNachkomma){
     std::stringstream stream;
+    if (_anzNachkomma < 0) {
+        _anzNachkomma = 0;
+    }
     stream << std::fixed << std::setprecision(_anzNachkomma) << _in;
     return stream.str();  
 }

+ 7 - 0
code/components/jomjol_tfliteclass/server_tflite.cpp

@@ -29,6 +29,12 @@ bool flowisrunning = false;
 long auto_intervall = 0;
 bool auto_isrunning = false;
 
+bool isSetupModusActive() {
+    return tfliteflow.getStatusSetupModus();
+    return false;
+}
+
+
 void KillTFliteTasks()
 {
     printf("Handle: xHandleblink_task_doFlow: %ld\n", (long) xHandleblink_task_doFlow);    
@@ -418,6 +424,7 @@ void task_autodoFlow(void *pvParameter)
     doInit();
     
     auto_isrunning = tfliteflow.isAutoStart(auto_intervall);
+    auto_isrunning = auto_isrunning && (!isSetupModusActive());
 
     while (auto_isrunning)
     {

+ 3 - 1
code/components/jomjol_tfliteclass/server_tflite.h

@@ -10,4 +10,6 @@ void register_server_tflite_uri(httpd_handle_t server);
 
 void KillTFliteTasks();
 
-void TFliteDoAutoStart();
+void TFliteDoAutoStart();
+
+bool isSetupModusActive();

+ 10 - 1
code/main/server_main.cpp

@@ -13,6 +13,8 @@
 
 #include "esp_wifi.h"
 
+#include "server_tflite.h"
+
 
 httpd_handle_t server = NULL;   
 
@@ -152,7 +154,9 @@ esp_err_t hello_main_handler(httpd_req_t *req)
 
     if ((strcmp(req->uri, "/") == 0))
     {
-        filetosend = filetosend + "/html/index.html";
+        {
+            filetosend = filetosend + "/html/index.html";
+        }
     }
     else
     {
@@ -163,6 +167,11 @@ esp_err_t hello_main_handler(httpd_req_t *req)
         }
     }
 
+    if (filetosend == "/sdcard/html/index.html" && isSetupModusActive()) {
+        printf("System ist im Setupmodus --> index.html --> setup.html");
+        filetosend = "/sdcard/html/setup.html";
+    }
+
     printf("Filename: %s\n", filename);
     
     printf("File requested: %s\n", filetosend.c_str());    

+ 2 - 2
code/main/version.cpp

@@ -1,4 +1,4 @@
-const char* GIT_REV="c5059b4";
+const char* GIT_REV="9e85b12";
 const char* GIT_TAG="";
 const char* GIT_BRANCH="rolling";
-const char* BUILD_TIME="2020-12-03 20:31";
+const char* BUILD_TIME="2020-12-04 22:01";

+ 2 - 2
code/version.cpp

@@ -1,4 +1,4 @@
-const char* GIT_REV="c5059b4";
+const char* GIT_REV="9e85b12";
 const char* GIT_TAG="";
 const char* GIT_BRANCH="rolling";
-const char* BUILD_TIME="2020-12-03 20:27";
+const char* BUILD_TIME="2020-12-04 22:01";

BIN
firmware/bootloader.bin


BIN
firmware/firmware.bin


BIN
firmware/html.zip


+ 1 - 0
sd-card/config/config.ini

@@ -59,5 +59,6 @@ LogfileRetentionInDays = 3
 
 [System]
 TimeZone = CET-1CEST,M3.5.0,M10.5.0/3
+SetupMode = true
 
 [Ende]

+ 1 - 0
sd-card/html/debug.log

@@ -0,0 +1 @@
+[1204/185120.033:ERROR:directory_reader_win.cc(43)] FindFirstFile: Das System kann den angegebenen Pfad nicht finden. (0x3)

+ 37 - 0
sd-card/html/edit_explain_0.html

@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<html style="width: fit-content">
+<head>
+<title>jomjol - AI on the edge</title>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<style>
+.h_iframe iframe {width:995px;height:605px;}
+.h_iframe {width:995px;height:605px;}
+
+h1 {font-size: 2em; margin-block-end: 0.3em;}
+h2 {font-size: 1.5em;margin-block-start: 0.3em;}
+h3 {font-size: 1.2em;}
+p {font-size: 1em;}
+
+
+
+</style>
+</head>
+
+<body style="font-family: arial">
+
+This is your first start of the digitizer. You need to go through 5 steps, to customize the setting. Just follow the instructions:
+<p>
+<ol>
+<li>Define a reference image on which the digits, counters and reference points are marked</li>
+<li>Define two references, which are used to align the image and identify fixed positions on the image</li>
+<li>Mark and define the digits to recognize</li>
+<li>Mark and define the analog counters to be recognized</li>
+<li>Adopt general settings</li>
+</ol>
+<p>
+Just use the buttons "Next" and "Previous" to nagivate through the process. 
+
+</body>
+</html>

+ 81 - 0
sd-card/html/edit_explain_6.html

@@ -0,0 +1,81 @@
+<!DOCTYPE html>
+<html style="width: fit-content">
+<head>
+<title>jomjol - AI on the edge</title>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<style>
+.h_iframe iframe {width:995px;height:605px;}
+.h_iframe {width:995px;height:605px;}
+
+h1 {font-size: 2em; margin-block-end: 0.3em;}
+h2 {font-size: 1.5em;margin-block-start: 0.3em;}
+h3 {font-size: 1.2em;}
+p {font-size: 1em;}
+
+
+.button {
+	padding: 5px 20px;
+    width: 211px;
+	font-size: 16px;	
+}
+
+
+</style>
+</head>
+
+<body style="font-family: arial">
+
+    <h4>Finished!</h4>
+
+    <p>
+        Now you are finished with the setup and ready to reboot to the normal mode.
+        <br>
+        Once you have pushed below button, the setup modus will be left and the digitizer start to normal operation mode.
+        <br>
+        After a view seconds you can reload this page again and will go to normal operation mode. 
+        <br>
+        All settings can be changed later on as well in the configuration menue.
+    </p>
+
+    <p>
+        <button class="button" onclick="reboot()">Leave Setup Modus and Reboot to Normal</button>
+    </p>
+
+    <script type="text/javascript" src="./gethost.js"></script> 
+    <script type="text/javascript" src="./readconfigparam.js"></script> 
+
+    <script type="text/javascript">
+        var canvas = document.getElementById('canvas'),
+            basepath = "http://192.168.178.22"; 
+            aktstatu = 0;
+    
+    function reboot() {
+        if (confirm("Do you want to leave the configuration mode and restart the ESP32?\n\nPlease reload the page in about 30s.")) {
+            basepath = getbasepath(); 
+            if (!loadConfig(basepath)) {
+                alert("Setup Modus could not be deactivated!\Please retry.");
+                return;
+            } 
+            ParseConfig();	
+            param = getConfigParameters();
+            param["System"]["SetupMode"]["enabled"] = false;
+            param["System"]["SetupMode"]["value1"] = "false";
+            setConfigParameters(param);
+            var textToSave = setConfigParameters(param);
+		    FileDeleteOnServer("/config/config.ini", basepath);
+		    FileSendContent(textToSave, "/config/config.ini", basepath);
+
+            var stringota = "/reboot";
+            window.location = stringota;
+            window.location.href = stringota;
+            window.location.assign(stringota);
+            window.location.replace(stringota);
+        }
+    }
+
+    </script>
+
+</body>
+</html>

+ 29 - 0
sd-card/html/explain_0.html

@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html style="width: fit-content">
+<head>
+<title>jomjol - AI on the edge</title>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<style>
+.h_iframe iframe {width:995px;height:605px;}
+.h_iframe {width:995px;height:605px;}
+
+h1 {font-size: 2em; margin-block-end: 0.3em;}
+h2 {font-size: 1.5em;margin-block-start: 0.3em;}
+h3 {font-size: 1.2em;}
+p {font-size: 1em;}
+
+
+
+</style>
+</head>
+
+<body style="font-family: arial">
+
+<h4>Introduction</h4>
+<p>
+Read below!
+
+</body>
+</html>

+ 33 - 0
sd-card/html/explain_1.html

@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html style="width: fit-content">
+<head>
+<title>jomjol - AI on the edge</title>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<style>
+.h_iframe iframe {width:995px;height:605px;}
+.h_iframe {width:995px;height:605px;}
+
+h1 {font-size: 2em; margin-block-end: 0.3em;}
+h2 {font-size: 1.5em;margin-block-start: 0.3em;}
+h3 {font-size: 1.2em;}
+p {font-size: 1em;}
+
+
+
+</style>
+</head>
+
+<body style="font-family: arial">
+
+<h4>Reference Image</h4>
+The reference image is needed to define the digits, counters and references for alignment.
+<p>
+    The last taken raw image from the camera is taken. Use the Button "Create New Reference" to make your own reference.<br>
+    Most important feature is a straight alignment of the image. Use the Pre roate Angle and the fine alignment to fine tune the rotation of the image<br>
+    Finish the step by pushing <b>"Update Reference Image"</b>.
+</p>
+
+</body>
+</html>

+ 36 - 0
sd-card/html/explain_2.html

@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<html style="width: fit-content">
+<head>
+<title>jomjol - AI on the edge</title>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<style>
+.h_iframe iframe {width:995px;height:605px;}
+.h_iframe {width:995px;height:605px;}
+
+h1 {font-size: 2em; margin-block-end: 0.3em;}
+h2 {font-size: 1.5em;margin-block-start: 0.3em;}
+h3 {font-size: 1.2em;}
+p {font-size: 1em;}
+
+
+
+</style>
+</head>
+
+<body style="font-family: arial">
+
+<h4>Alignment References</h4>
+Two opposite alignment references are needed to identify unique fix points on the image.
+<p>
+    Mark the reference by drag and dop with the mouse or with the coordinates and push <b>"Update Reference"</b>.
+    <br> 
+    You can switch between the two reference with <b>"Select Reference"</b>.
+</p>
+<p>
+    Don't forget to save your changes with <b>"Save to Config.ini"</b>!.
+</p>
+
+</body>
+</html>

+ 37 - 0
sd-card/html/explain_3.html

@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<html style="width: fit-content">
+<head>
+<title>jomjol - AI on the edge</title>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<style>
+.h_iframe iframe {width:995px;height:605px;}
+.h_iframe {width:995px;height:605px;}
+
+h1 {font-size: 2em; margin-block-end: 0.3em;}
+h2 {font-size: 1.5em;margin-block-start: 0.3em;}
+h3 {font-size: 1.2em;}
+p {font-size: 1em;}
+
+
+
+</style>
+</head>
+
+<body style="font-family: arial">
+
+<h4>Define Digits</h4>
+Here you define your digits you want to read.
+<p>
+    With the drop down menue <b>"ROI x"</b> you can change between the different digits. Mark them with the mouse or the coordinates.
+    <br>
+    To create new ROIs use <b>"New ROIs"</b>. The order of the ROIs defines the positon within the reading. <br>
+    You can change it with <b>"move Next" / "move Previous"</b>.
+</p>
+<p>
+    Don't forget to save your changes with <b>"Save all to Config.ini"</b>!.
+</p>
+
+</body>
+</html>

+ 37 - 0
sd-card/html/explain_4.html

@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<html style="width: fit-content">
+<head>
+<title>jomjol - AI on the edge</title>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<style>
+.h_iframe iframe {width:995px;height:605px;}
+.h_iframe {width:995px;height:605px;}
+
+h1 {font-size: 2em; margin-block-end: 0.3em;}
+h2 {font-size: 1.5em;margin-block-start: 0.3em;}
+h3 {font-size: 1.2em;}
+p {font-size: 1em;}
+
+
+
+</style>
+</head>
+
+<body style="font-family: arial">
+
+<h4>Define Digits</h4>
+Here you define your analog counters you want to read. If you do not have analog counters delete all ROIs.
+<p>
+    With the drop down menue <b>"ROI x"</b> you can change between the different counters. Mark them with the mouse or the coordinates.
+    <br>
+    To create new ROIs use <b>"New ROIs"</b>. The order of the ROIs defines the positon within the reading. <br>
+    You can change it with <b>"move Next" / "move Previous"</b>.
+</p>
+<p>
+    Don't forget to save your changes with <b>"Save all to Config.ini"</b>!.
+</p>
+
+</body>
+</html>

+ 35 - 0
sd-card/html/explain_5.html

@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<html style="width: fit-content">
+<head>
+<title>jomjol - AI on the edge</title>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<style>
+.h_iframe iframe {width:995px;height:605px;}
+.h_iframe {width:995px;height:605px;}
+
+h1 {font-size: 2em; margin-block-end: 0.3em;}
+h2 {font-size: 1.5em;margin-block-start: 0.3em;}
+h3 {font-size: 1.2em;}
+p {font-size: 1em;}
+
+
+
+</style>
+</head>
+
+<body style="font-family: arial">
+
+<h4>General configuration parameters</h4>
+Here you define additional setting. The settings should fit for a normal setup. </p>
+<p>
+    Only if you want to connect to a MQTT-broker you need to adjust the corresponding parameters.
+</p>
+<p>
+    Don't forget to save your changes with <b>"Update Config.ini"</b>!.
+    <br>You should not reboot here, but leave the setup modus on the next page.
+</p>
+
+</body>
+</html>

+ 27 - 0
sd-card/html/explain_6.html

@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<html style="width: fit-content">
+<head>
+<title>jomjol - AI on the edge</title>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<style>
+.h_iframe iframe {width:995px;height:605px;}
+.h_iframe {width:995px;height:605px;}
+
+h1 {font-size: 2em; margin-block-end: 0.3em;}
+h2 {font-size: 1.5em;margin-block-start: 0.3em;}
+h3 {font-size: 1.2em;}
+p {font-size: 1em;}
+
+
+
+</style>
+</head>
+
+<body style="font-family: arial">
+
+<h4>Finished!</h4>
+Read below!
+</body>
+</html>

+ 2 - 2
sd-card/html/gethost.js

@@ -7,8 +7,8 @@ function getbasepath(){
     var host = window.location.hostname;
     if ((host == "127.0.0.1") || (host == "localhost"))
     {
-//        host = "http://192.168.178.26";          // jomjol interner test
-        host = "http://192.168.178.22";          // jomjol interner Real
+        host = "http://192.168.178.26";          // jomjol interner test
+//        host = "http://192.168.178.22";          // jomjol interner Real
 //        host = ".";                           // jomjol interner localhost   
     }
     else

+ 1 - 0
sd-card/html/index.html

@@ -97,6 +97,7 @@ li.dropdown {
     </div> 
 </ul>
 <p>
+
 <div class="h_iframe">
 	 <iframe name="maincontent" id ="maincontent" src="/wasserzaehler_roi.html" title="fileserver" allowfullscreen></iframe> 
 </div>

+ 3 - 1
sd-card/html/readconfigparam.js

@@ -73,7 +73,8 @@ function ParseConfig() {
      param[catname] = new Object();
      ParamAddValue(param, catname, "TimeZone");
      ParamAddValue(param, catname, "AutoAdjustSummertime");
-     ParamAddValue(param, catname, "TimeUpdateIntervall");     
+     ParamAddValue(param, catname, "TimeUpdateIntervall");   
+     ParamAddValue(param, catname, "SetupMode");         
 
      while (aktline < config_split.length){
           if (config_split[aktline].trim().toUpperCase() == "[MAKEIMAGE]") {
@@ -150,6 +151,7 @@ function ParseConfigParamSystem(_aktline){
           ParamExtractValue(param, linesplit, catname, "TimeZone", _aktline, isCom);
           ParamExtractValue(param, linesplit, catname, "AutoAdjustSummertime", _aktline, isCom);
           ParamExtractValue(param, linesplit, catname, "TimeUpdateIntervall", _aktline, isCom);
+          ParamExtractValue(param, linesplit, catname, "SetupMode", _aktline, isCom);
 
           ++_aktline;
      }    

+ 40 - 0
sd-card/html/setup - Kopie.html

@@ -0,0 +1,40 @@
+<!DOCTYPE html>
+<html style="width: fit-content">
+<head>
+<title>jomjol - AI on the edge</title>
+
+<style>
+
+div {
+   text-align:center;
+   width:995px;
+   height: 600px;
+}
+.iframe_work {
+   display:inline-block;
+   margin: 0px auto;
+   width:70%;
+   height: 100%;   
+}
+
+.iframe_info {
+   display:inline-block;
+   margin: 0px auto;
+   width:20%;   
+   height: 100%;     
+}
+
+</style>
+
+</head>
+
+<body style="font-family: arial">
+
+<div>
+<iframe class="iframe_work" name="iframe_work" id="iframe_work" src="/wasserzaehler_roi.html" allowfullscreen></iframe>
+<iframe class="iframe_info" name="iframe_info" id="iframe_info" src="/wasserzaehler_roi.html" allowfullscreen></iframe>
+</div>
+
+
+</body>
+</html>

+ 141 - 0
sd-card/html/setup.html

@@ -0,0 +1,141 @@
+<!DOCTYPE html>
+<html style="width: fit-content">
+<head>
+<title>jomjol - AI on the edge</title>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<style>
+.h_iframe iframe {width:995px;height:760px;}
+.h_iframe {width:995px;height:605px;}
+
+.h_iframe_explain iframe {width:995px;height:200px;}
+.h_iframe_explain {width:995px;height:200px;}
+
+h1 {font-size: 2em; margin-block-end: 0.3em;}
+h2 {font-size: 1.5em;margin-block-start: 0.3em;}
+h3 {font-size: 1.2em;}
+p {font-size: 1em;}
+
+.button {
+	padding: 5px 20px;
+    width: 211px;
+	font-size: 16px;	
+}
+</style>
+</head>
+
+<body style="font-family: arial">
+
+<h1>Digitizer - Initial Setup</h1>
+<table>
+   <tr>
+      <td>
+         <button class="button" id="previous" name="previous" onclick="clickPrevious()">Previous</button>
+         <button class="button" id="next" name="next" onclick="clickNext()">Next</button>
+      </td>
+   </tr>
+</table>
+
+
+<div class="h_iframe_explain" id="h_iframe_explain">
+   <iframe name="explaincontent" id ="explaincontent" src="" allowfullscreen></iframe> 
+</div>
+
+<div class="h_iframe">
+	 <iframe name="maincontent" id ="maincontent" src="" allowfullscreen></iframe> 
+</div>
+
+
+
+ 
+
+<script type="text/javascript">
+	var canvas = document.getElementById('canvas'),
+		basepath = "http://192.168.178.22"; 
+		aktstatu = 0;
+
+function clickNext() {
+   aktstatu++;
+   if (aktstatu > 6) {
+      aktstatu = 6;
+   }
+   LoadStep();
+}
+
+function clickPrevious() {
+   aktstatu--;
+   if (aktstatu < 0) {
+      aktstatu = 0;
+   }
+   LoadStep();
+}
+
+function LoadStep(){
+   switch (aktstatu) {
+      case 0:
+         document.getElementById('maincontent').src = '/edit_explain_0.html';
+         document.getElementById('h_iframe_explain').style.display = "none";  
+         document.getElementById("previous").disabled = true;
+         document.getElementById("next").disabled = false;
+         break;
+      case 1:
+         document.getElementById('maincontent').src = '/edit_reference.html';
+         document.getElementById('explaincontent').src = '/explain_1.html';
+         document.getElementById('h_iframe_explain').style.display = "";  
+         document.getElementById("previous").disabled = false;
+         document.getElementById("next").disabled = false;
+         break;
+      case 2:
+         document.getElementById('maincontent').src = '/edit_alignment.html';
+         document.getElementById('explaincontent').src = '/explain_2.html';
+         document.getElementById('h_iframe_explain').style.display = "";           
+         document.getElementById("previous").disabled = false;
+         document.getElementById("next").disabled = false;
+
+         break;
+      case 3:
+         document.getElementById('maincontent').src = '/edit_digits.html';
+         document.getElementById('explaincontent').src = '/explain_3.html';         
+         document.getElementById('h_iframe_explain').style.display = "";           
+         document.getElementById("previous").disabled = false;
+         document.getElementById("next").disabled = false;
+
+         break;
+      case 4:
+         document.getElementById('maincontent').src = '/edit_analog.html';
+         document.getElementById('explaincontent').src = '/explain_4.html';   
+         document.getElementById('h_iframe_explain').style.display = "";           
+         document.getElementById("previous").disabled = false;
+         document.getElementById("next").disabled = false;
+
+         break;
+      case 5:
+         document.getElementById('maincontent').src = '/edit_config_param.html';
+         document.getElementById('explaincontent').src = '/explain_5.html';            
+         document.getElementById('h_iframe_explain').style.display = "";           
+         document.getElementById("previous").disabled = false;
+         document.getElementById("next").disabled = false;
+
+         break; 
+      case 6:
+         document.getElementById('maincontent').src = '/edit_explain_6.html';
+         document.getElementById('explaincontent').src = '/explain_6.html';            
+         document.getElementById('h_iframe_explain').style.display = "none";  
+         document.getElementById("previous").disabled = false;
+         document.getElementById("next").disabled = true;
+
+         break;   
+      }
+
+
+}
+
+LoadStep();
+
+
+</script>
+ 
+
+</body>
+</html>

+ 1 - 1
sd-card/html/version.txt

@@ -1 +1 @@
-2.1.0
+3.0.0