|
|
@@ -0,0 +1,294 @@
|
|
|
+#include "ClassFlowControll.h"
|
|
|
+
|
|
|
+#include "ClassLogFile.h"
|
|
|
+#include "time_sntp.h"
|
|
|
+#include "Helper.h"
|
|
|
+#include "server_ota.h"
|
|
|
+
|
|
|
+std::string ClassFlowControll::doSingleStep(std::string _stepname, std::string _host){
|
|
|
+ bool found = false;
|
|
|
+ std::string _classname = "";
|
|
|
+ std::string result = "";
|
|
|
+ if (_stepname.compare("[MakeImage]") == 0){
|
|
|
+ _classname = "ClassFlowMakeImage";
|
|
|
+ }
|
|
|
+ if (_stepname.compare("[Alignment]") == 0){
|
|
|
+ _classname = "ClassFlowAlignment";
|
|
|
+ }
|
|
|
+ if (_stepname.compare("[Digits]") == 0){
|
|
|
+ _classname = "ClassFlowDigit";
|
|
|
+ }
|
|
|
+ if (_stepname.compare("[Analog]") == 0){
|
|
|
+ _classname = "ClassFlowAnalog";
|
|
|
+ }
|
|
|
+// std::string zw = "Classname: " + _classname + "\n";
|
|
|
+// printf(zw.c_str());
|
|
|
+
|
|
|
+ for (int i = 0; i < FlowControll.size(); ++i)
|
|
|
+ if (FlowControll[i]->name().compare(_classname) == 0){
|
|
|
+ // printf(FlowControll[i]->name().c_str()); printf("\n");
|
|
|
+ FlowControll[i]->doFlow("");
|
|
|
+ result = FlowControll[i]->getHTMLSingleStep(_host);
|
|
|
+ found = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ return result;
|
|
|
+}
|
|
|
+
|
|
|
+std::vector<HTMLInfo*> ClassFlowControll::GetAllDigital()
|
|
|
+{
|
|
|
+ for (int i = 0; i < FlowControll.size(); ++i)
|
|
|
+ if (FlowControll[i]->name().compare("ClassFlowDigit") == 0)
|
|
|
+ return ((ClassFlowDigit*) (FlowControll[i]))->GetHTMLInfo();
|
|
|
+
|
|
|
+ std::vector<HTMLInfo*> empty;
|
|
|
+ return empty;
|
|
|
+}
|
|
|
+
|
|
|
+std::vector<HTMLInfo*> ClassFlowControll::GetAllAnalog()
|
|
|
+{
|
|
|
+ for (int i = 0; i < FlowControll.size(); ++i)
|
|
|
+ if (FlowControll[i]->name().compare("ClassFlowAnalog") == 0)
|
|
|
+ return ((ClassFlowAnalog*) (FlowControll[i]))->GetHTMLInfo();
|
|
|
+
|
|
|
+ std::vector<HTMLInfo*> empty;
|
|
|
+ return empty;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+void ClassFlowControll::SetInitialParameter(void)
|
|
|
+{
|
|
|
+ AutoStart = false;
|
|
|
+ AutoIntervall = 10;
|
|
|
+}
|
|
|
+
|
|
|
+bool ClassFlowControll::isAutoStart(long &_intervall)
|
|
|
+{
|
|
|
+ _intervall = AutoIntervall * 60 * 1000; // AutoIntervall: Minuten -> ms
|
|
|
+ return AutoStart;
|
|
|
+}
|
|
|
+
|
|
|
+ClassFlow* ClassFlowControll::CreateClassFlow(std::string _type)
|
|
|
+{
|
|
|
+ ClassFlow* cfc = NULL;
|
|
|
+
|
|
|
+ _type = trim(_type);
|
|
|
+
|
|
|
+ if (_type.compare("[MakeImage]") == 0)
|
|
|
+ cfc = new ClassFlowMakeImage(&FlowControll);
|
|
|
+ if (_type.compare("[Alignment]") == 0)
|
|
|
+ cfc = new ClassFlowAlignment(&FlowControll);
|
|
|
+ if (_type.compare("[Analog]") == 0)
|
|
|
+ cfc = new ClassFlowAnalog(&FlowControll);
|
|
|
+ if (_type.compare("[Digits]") == 0)
|
|
|
+ cfc = new ClassFlowDigit(&FlowControll);
|
|
|
+ if (_type.compare("[PostProcessing]") == 0)
|
|
|
+ {
|
|
|
+ cfc = new ClassFlowPostProcessing(&FlowControll);
|
|
|
+ flowpostprocessing = (ClassFlowPostProcessing*) cfc;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (cfc) // Wird nur angehangen, falls es nicht [AutoTimer] ist, denn dieses ist für FlowControll
|
|
|
+ FlowControll.push_back(cfc);
|
|
|
+
|
|
|
+ if (_type.compare("[AutoTimer]") == 0)
|
|
|
+ cfc = this;
|
|
|
+
|
|
|
+ if (_type.compare("[Debug]") == 0)
|
|
|
+ cfc = this;
|
|
|
+
|
|
|
+ return cfc;
|
|
|
+}
|
|
|
+
|
|
|
+void ClassFlowControll::InitFlow(std::string config)
|
|
|
+{
|
|
|
+ string line;
|
|
|
+
|
|
|
+ flowpostprocessing = NULL;
|
|
|
+
|
|
|
+ ClassFlow* cfc;
|
|
|
+ FILE* pFile;
|
|
|
+ config = FormatFileName(config);
|
|
|
+ pFile = fopen(config.c_str(), "r");
|
|
|
+
|
|
|
+ line = "";
|
|
|
+
|
|
|
+ char zw[1024];
|
|
|
+ if (pFile != NULL)
|
|
|
+ {
|
|
|
+ fgets(zw, 1024, pFile);
|
|
|
+ printf("%s", zw);
|
|
|
+ line = std::string(zw);
|
|
|
+ }
|
|
|
+
|
|
|
+ while ((line.size() > 0) && !(feof(pFile)))
|
|
|
+ {
|
|
|
+ cfc = CreateClassFlow(line);
|
|
|
+ if (cfc)
|
|
|
+ {
|
|
|
+ cfc->ReadParameter(pFile, line);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ fgets(zw, 1024, pFile);
|
|
|
+ printf("%s", zw);
|
|
|
+ line = std::string(zw);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ fclose(pFile);
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+std::string ClassFlowControll::getActStatus(){
|
|
|
+ return aktstatus;
|
|
|
+}
|
|
|
+
|
|
|
+bool ClassFlowControll::doFlow(string time)
|
|
|
+{
|
|
|
+ bool result = true;
|
|
|
+ std::string zw_time;
|
|
|
+ int repeat = 0;
|
|
|
+
|
|
|
+ for (int i = 0; i < FlowControll.size(); ++i)
|
|
|
+ {
|
|
|
+ zw_time = gettimestring("%Y%m%d-%H%M%S");
|
|
|
+ aktstatus = zw_time + ": " + FlowControll[i]->name();
|
|
|
+ string zw = "FlowControll.doFlow - " + FlowControll[i]->name();
|
|
|
+ LogFile.WriteToFile(zw);
|
|
|
+ if (!FlowControll[i]->doFlow(time)){
|
|
|
+ repeat++;
|
|
|
+ LogFile.WriteToFile("Fehler im vorheriger Schritt - wird zum " + to_string(repeat) + ". Mal wiederholt");
|
|
|
+ i = -1; // Soll wieder bei i = 0 anfangen ==> komplett von vorne !!!
|
|
|
+ result = false;
|
|
|
+ if (repeat > 5) {
|
|
|
+ LogFile.WriteToFile("Wiederholung 5x nicht erfolgreich --> reboot");
|
|
|
+ doReboot();
|
|
|
+ // Schritt wurde 5x wiederholt --> reboot
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ result = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ zw_time = gettimestring("%Y%m%d-%H%M%S");
|
|
|
+ aktstatus = zw_time + ": Flow is done";
|
|
|
+ return result;
|
|
|
+}
|
|
|
+
|
|
|
+string ClassFlowControll::getReadout(bool _rawvalue = false, bool _noerror = false)
|
|
|
+{
|
|
|
+ if (flowpostprocessing)
|
|
|
+ return flowpostprocessing->getReadoutParam(_rawvalue, _noerror);
|
|
|
+
|
|
|
+ string zw = "";
|
|
|
+ string result = "";
|
|
|
+
|
|
|
+ for (int i = 0; i < FlowControll.size(); ++i)
|
|
|
+ {
|
|
|
+ zw = FlowControll[i]->getReadout();
|
|
|
+ if (zw.length() > 0)
|
|
|
+ {
|
|
|
+ if (result.length() == 0)
|
|
|
+ result = zw;
|
|
|
+ else
|
|
|
+ result = result + "\t" + zw;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return result;
|
|
|
+}
|
|
|
+
|
|
|
+string ClassFlowControll::GetPrevalue()
|
|
|
+{
|
|
|
+ if (flowpostprocessing)
|
|
|
+ {
|
|
|
+ return flowpostprocessing->GetPreValue();
|
|
|
+ }
|
|
|
+
|
|
|
+ return std::string();
|
|
|
+}
|
|
|
+
|
|
|
+std::string ClassFlowControll::UpdatePrevalue(std::string _newvalue)
|
|
|
+{
|
|
|
+ float zw;
|
|
|
+ char* p;
|
|
|
+
|
|
|
+ _newvalue = trim(_newvalue);
|
|
|
+// printf("Input UpdatePreValue: %s\n", _newvalue.c_str());
|
|
|
+
|
|
|
+ if (_newvalue.compare("0.0") == 0)
|
|
|
+ {
|
|
|
+ zw = 0;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ zw = strtof(_newvalue.c_str(), &p);
|
|
|
+ if (zw == 0)
|
|
|
+ return "- Error in String to Value Conversion!!! Must be of format value=123.456";
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ if (flowpostprocessing)
|
|
|
+ {
|
|
|
+ flowpostprocessing->SavePreValue(zw);
|
|
|
+ return to_string(zw);
|
|
|
+ }
|
|
|
+
|
|
|
+ return std::string();
|
|
|
+}
|
|
|
+
|
|
|
+bool ClassFlowControll::ReadParameter(FILE* pfile, string& aktparamgraph)
|
|
|
+{
|
|
|
+ std::vector<string> zerlegt;
|
|
|
+
|
|
|
+ aktparamgraph = trim(aktparamgraph);
|
|
|
+
|
|
|
+ if (aktparamgraph.size() == 0)
|
|
|
+ if (!this->GetNextParagraph(pfile, aktparamgraph)){
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+// if ((aktparamgraph.compare("[Autotimer]") != 0) && (aktparamgraph.compare("[Debug]") != 0)) // Paragraph passt nich zu MakeImage
|
|
|
+ if (aktparamgraph.compare("[Autotimer]") != 0) // Paragraph passt nich zu MakeImage
|
|
|
+ return false;
|
|
|
+
|
|
|
+// if ((toUpper(aktparamgraph) != "[AUTOTIMER]") && (toUpper(aktparamgraph) != ("[DEBUG]"))) // Paragraph passt nich zu MakeImage
|
|
|
+// return false;
|
|
|
+
|
|
|
+ while (this->getNextLine(pfile, &aktparamgraph) && !this->isNewParagraph(aktparamgraph))
|
|
|
+ {
|
|
|
+ zerlegt = this->ZerlegeZeile(aktparamgraph);
|
|
|
+ if ((toUpper(zerlegt[0]) == "AUTOSTART") && (zerlegt.size() > 1))
|
|
|
+ {
|
|
|
+ if (toUpper(zerlegt[1]) == "TRUE")
|
|
|
+ {
|
|
|
+ AutoStart = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if ((toUpper(zerlegt[0]) == "INTERVALL") && (zerlegt.size() > 1))
|
|
|
+ {
|
|
|
+ AutoIntervall = std::stof(zerlegt[1]);
|
|
|
+ }
|
|
|
+
|
|
|
+/*
|
|
|
+ if ((toUpper(zerlegt[0]) == "LOGFILE") && (zerlegt.size() > 1))
|
|
|
+ {
|
|
|
+ if (toUpper(zerlegt[1]) == "TRUE")
|
|
|
+ {
|
|
|
+ LogFile.SwitchOnOff(true);
|
|
|
+ printf("TurnLogFile On\n");
|
|
|
+ }
|
|
|
+ if (toUpper(zerlegt[1]) == "FALSE")
|
|
|
+ {
|
|
|
+ LogFile.SwitchOnOff(false);
|
|
|
+ printf("TurnLogFile Off\n");
|
|
|
+ }
|
|
|
+ }
|
|
|
+*/
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+}
|
|
|
+
|