diff --git a/code/components/jomjol_flowcontroll/ClassFlowCNNGeneral.cpp b/code/components/jomjol_flowcontroll/ClassFlowCNNGeneral.cpp index ac652534..4eb3544a 100644 --- a/code/components/jomjol_flowcontroll/ClassFlowCNNGeneral.cpp +++ b/code/components/jomjol_flowcontroll/ClassFlowCNNGeneral.cpp @@ -20,8 +20,7 @@ static const char* TAG = "CNN"; #endif -ClassFlowCNNGeneral::ClassFlowCNNGeneral(ClassFlowAlignment *_flowalign, t_CNNType _cnntype) : ClassFlowImage(NULL, TAG) -{ +ClassFlowCNNGeneral::ClassFlowCNNGeneral(ClassFlowAlignment *_flowalign, t_CNNType _cnntype) : ClassFlowImage(NULL, TAG) { string cnnmodelfile = ""; modelxsize = 1; modelysize = 1; @@ -38,16 +37,16 @@ ClassFlowCNNGeneral::ClassFlowCNNGeneral(ClassFlowAlignment *_flowalign, t_CNNTy } -string ClassFlowCNNGeneral::getReadout(int _analog = 0, bool _extendedResolution, int prev, float _before_narrow_Analog, float analogDigitalTransitionStart) -{ +string ClassFlowCNNGeneral::getReadout(int _analog = 0, bool _extendedResolution, int prev, float _before_narrow_Analog, float analogDigitalTransitionStart) { string result = ""; - if (GENERAL[_analog]->ROI.size() == 0) + if (GENERAL[_analog]->ROI.size() == 0) { return result; + } + LogFile.WriteToFile(ESP_LOG_DEBUG, TAG, "getReadout _analog=" + std::to_string(_analog) + ", _extendedResolution=" + std::to_string(_extendedResolution) + ", prev=" + std::to_string(prev)); - if (CNNType == Analogue || CNNType == Analogue100) - { + if (CNNType == Analogue || CNNType == Analogue100) { float number = GENERAL[_analog]->ROI[GENERAL[_analog]->ROI.size() - 1]->result_float; int result_after_decimal_point = ((int) floor(number * 10) + 10) % 10; @@ -55,37 +54,35 @@ string ClassFlowCNNGeneral::getReadout(int _analog = 0, bool _extendedResolution // LogFile.WriteToFile(ESP_LOG_DEBUG, TAG, "getReadout(analog) number=" + std::to_string(number) + ", result_after_decimal_point=" + std::to_string(result_after_decimal_point) + ", prev=" + std::to_string(prev)); result = std::to_string(prev); - if (_extendedResolution) + if (_extendedResolution) { result = result + std::to_string(result_after_decimal_point); + } - for (int i = GENERAL[_analog]->ROI.size() - 2; i >= 0; --i) - { + for (int i = GENERAL[_analog]->ROI.size() - 2; i >= 0; --i) { prev = PointerEvalAnalogNew(GENERAL[_analog]->ROI[i]->result_float, prev); result = std::to_string(prev) + result; } return result; } - if (CNNType == Digital) - { - for (int i = 0; i < GENERAL[_analog]->ROI.size(); ++i) - { - if (GENERAL[_analog]->ROI[i]->result_klasse >= 10) + if (CNNType == Digital) { + for (int i = 0; i < GENERAL[_analog]->ROI.size(); ++i) { + if (GENERAL[_analog]->ROI[i]->result_klasse >= 10) { result = result + "N"; - else + } + else { result = result + std::to_string(GENERAL[_analog]->ROI[i]->result_klasse); + } } return result; } - if ((CNNType == DoubleHyprid10) || (CNNType == Digital100)) - { - + if ((CNNType == DoubleHyprid10) || (CNNType == Digital100)) { float number = GENERAL[_analog]->ROI[GENERAL[_analog]->ROI.size() - 1]->result_float; - if (number >= 0) // NaN? - { - if (_extendedResolution) // is only set if it is the first digit (no analogue before!) - { + // NaN? + if (number >= 0) { + // is only set if it is the first digit (no analogue before!) + if (_extendedResolution) { int result_after_decimal_point = ((int) floor(number * 10)) % 10; int result_before_decimal_point = ((int) floor(number)) % 10; @@ -93,36 +90,32 @@ string ClassFlowCNNGeneral::getReadout(int _analog = 0, bool _extendedResolution prev = result_before_decimal_point; LogFile.WriteToFile(ESP_LOG_DEBUG, TAG, "getReadout(dig100-ext) result_before_decimal_point=" + std::to_string(result_before_decimal_point) + ", result_after_decimal_point=" + std::to_string(result_after_decimal_point) + ", prev=" + std::to_string(prev)); } - else - { - if (_before_narrow_Analog >= 0) + else { + if (_before_narrow_Analog >= 0) { prev = PointerEvalHybridNew(GENERAL[_analog]->ROI[GENERAL[_analog]->ROI.size() - 1]->result_float, _before_narrow_Analog, prev, true, analogDigitalTransitionStart); - else + } + else { prev = PointerEvalHybridNew(GENERAL[_analog]->ROI[GENERAL[_analog]->ROI.size() - 1]->result_float, prev, prev); + } result = std::to_string(prev); LogFile.WriteToFile(ESP_LOG_DEBUG, TAG, "getReadout(dig100) prev=" + std::to_string(prev)); - } } - else - { + else { result = "N"; - if (_extendedResolution && (CNNType != Digital)) + if (_extendedResolution && (CNNType != Digital)) { result = "NN"; + } } - for (int i = GENERAL[_analog]->ROI.size() - 2; i >= 0; --i) - { - if (GENERAL[_analog]->ROI[i]->result_float >= 0) - { + for (int i = GENERAL[_analog]->ROI.size() - 2; i >= 0; --i) { + if (GENERAL[_analog]->ROI[i]->result_float >= 0) { prev = PointerEvalHybridNew(GENERAL[_analog]->ROI[i]->result_float, GENERAL[_analog]->ROI[i+1]->result_float, prev); LogFile.WriteToFile(ESP_LOG_DEBUG, TAG, "getReadout#PointerEvalHybridNew()= " + std::to_string(prev)); result = std::to_string(prev) + result; LogFile.WriteToFile(ESP_LOG_DEBUG, TAG, "getReadout#result= " + result); - } - else - { + else { prev = -1; result = "N" + result; LogFile.WriteToFile(ESP_LOG_DEBUG, TAG, "getReadout(result_float<0 /'N') result_float=" + std::to_string(GENERAL[_analog]->ROI[i]->result_float)); @@ -150,14 +143,12 @@ string ClassFlowCNNGeneral::getReadout(int _analog = 0, bool _extendedResolution * * @return int the determined number of the current ROI */ -int ClassFlowCNNGeneral::PointerEvalHybridNew(float number, float number_of_predecessors, int eval_predecessors, bool Analog_Predecessors, float digitalAnalogTransitionStart) -{ +int ClassFlowCNNGeneral::PointerEvalHybridNew(float number, float number_of_predecessors, int eval_predecessors, bool Analog_Predecessors, float digitalAnalogTransitionStart) { int result; int result_after_decimal_point = ((int) floor(number * 10)) % 10; int result_before_decimal_point = ((int) floor(number) + 10) % 10; - if (eval_predecessors < 0) - { + if (eval_predecessors < 0) { // on first digit is no spezial logic for transition needed // we use the recognition as given. The result is the int value of the recognition // add precisition of 2 digits and round before trunc @@ -168,37 +159,40 @@ int ClassFlowCNNGeneral::PointerEvalHybridNew(float number, float number_of_pred return result; } - if (Analog_Predecessors) - { + if (Analog_Predecessors) { result = PointerEvalAnalogToDigitNew(number, number_of_predecessors, eval_predecessors, digitalAnalogTransitionStart); LogFile.WriteToFile(ESP_LOG_DEBUG, TAG, "PointerEvalHybridNew - Analog predecessor, evaluation over PointerEvalAnalogNew = " + std::to_string(result) + " number: " + std::to_string(number) + " number_of_predecessors = " + std::to_string(number_of_predecessors)+ " eval_predecessors = " + std::to_string(eval_predecessors) + " Digital_Uncertainty = " + std::to_string(Digital_Uncertainty)); return result; } - if ((number_of_predecessors >= Digital_Transition_Area_Predecessor ) && (number_of_predecessors <= (10.0 - Digital_Transition_Area_Predecessor))) - { + if ((number_of_predecessors >= Digital_Transition_Area_Predecessor ) && (number_of_predecessors <= (10.0 - Digital_Transition_Area_Predecessor))) { // no digit change, because predecessor is far enough away (0+/-DigitalTransitionRangePredecessor) --> number is rounded - if ((result_after_decimal_point <= DigitalBand) || (result_after_decimal_point >= (10-DigitalBand))) // Band around the digit --> Round off, as digit reaches inaccuracy in the frame + // Band around the digit --> Round off, as digit reaches inaccuracy in the frame + if ((result_after_decimal_point <= DigitalBand) || (result_after_decimal_point >= (10-DigitalBand))) { result = ((int) round(number) + 10) % 10; - else + } + else { result = ((int) trunc(number) + 10) % 10; + } LogFile.WriteToFile(ESP_LOG_DEBUG, TAG, "PointerEvalHybridNew - NO analogue predecessor, no change of digits, as pre-decimal point far enough away = " + std::to_string(result) + " number: " + std::to_string(number) + " number_of_predecessors = " + std::to_string(number_of_predecessors)+ " eval_predecessors = " + std::to_string(eval_predecessors) + " Digital_Uncertainty = " + std::to_string(Digital_Uncertainty)); return result; } - if (eval_predecessors <= 1) // Zero crossing at the predecessor has taken place (! evaluation via Prev_value and not number!) --> round up here (2.8 --> 3, but also 3.1 --> 3) - { + // Zero crossing at the predecessor has taken place (! evaluation via Prev_value and not number!) --> round up here (2.8 --> 3, but also 3.1 --> 3) + if (eval_predecessors <= 1) { // We simply assume that the current digit after the zero crossing of the predecessor // has passed through at least half (x.5) - if (result_after_decimal_point > 5) + if (result_after_decimal_point > 5) { // The current digit does not yet have a zero crossing, but the predecessor does.. result = (result_before_decimal_point + 1) % 10; - else + } + else { // Act. digit and predecessor have zero crossing result = result_before_decimal_point % 10; + } LogFile.WriteToFile(ESP_LOG_DEBUG, TAG, "PointerEvalHybridNew - NO analogue predecessor, zero crossing has taken placen = " + std::to_string(result) + " number: " + std::to_string(number) + " number_of_predecessors = " + std::to_string(number_of_predecessors)+ " eval_predecessors = " + std::to_string(eval_predecessors) + " Digital_Uncertainty = " + std::to_string(Digital_Uncertainty)); return result; @@ -210,13 +204,15 @@ int ClassFlowCNNGeneral::PointerEvalHybridNew(float number, float number_of_pred // everything >=x.4 can be considered as current number in transition. With 9.x predecessor the current // number can still be x.6 - x.7. // Preceding (else - branch) does not already happen from 9. - if (Digital_Transition_Area_Forward>=number_of_predecessors || result_after_decimal_point >= 4) + if (Digital_Transition_Area_Forward>=number_of_predecessors || result_after_decimal_point >= 4) { // The current digit, like the previous digit, does not yet have a zero crossing. result = result_before_decimal_point % 10; - else + } + else { // current digit precedes the smaller digit (9.x). So already >=x.0 while the previous digit has not yet // has no zero crossing. Therefore, it is reduced by 1. result = (result_before_decimal_point - 1 + 10) % 10; + } LogFile.WriteToFile(ESP_LOG_DEBUG, TAG, "PointerEvalHybridNew - O analogue predecessor, >= 9.5 --> no zero crossing yet = " + std::to_string(result) + " number: " + std::to_string(number) + " number_of_predecessors = " + std::to_string(number_of_predecessors)+ " eval_predecessors = " + std::to_string(eval_predecessors) + " Digital_Uncertainty = " + std::to_string(Digital_Uncertainty) + " result_after_decimal_point = " + std::to_string(result_after_decimal_point)); @@ -224,8 +220,7 @@ int ClassFlowCNNGeneral::PointerEvalHybridNew(float number, float number_of_pred } -int ClassFlowCNNGeneral::PointerEvalAnalogToDigitNew(float number, float numeral_preceder, int eval_predecessors, float analogDigitalTransitionStart) -{ +int ClassFlowCNNGeneral::PointerEvalAnalogToDigitNew(float number, float numeral_preceder, int eval_predecessors, float analogDigitalTransitionStart) { int result; int result_after_decimal_point = ((int) floor(number * 10)) % 10; int result_before_decimal_point = ((int) floor(number) + 10) % 10; @@ -243,7 +238,8 @@ int ClassFlowCNNGeneral::PointerEvalAnalogToDigitNew(float number, float numeral " number: " + std::to_string(number) + " numeral_preceder: " + std::to_string(numeral_preceder) + " erg before comma: " + std::to_string(result_before_decimal_point) + " erg after comma: " + std::to_string(result_after_decimal_point)); - } else { + } + else { result = (int) ((int) trunc(number) + 10) % 10; LogFile.WriteToFile(ESP_LOG_DEBUG, TAG, "PointerEvalAnalogToDigitNew - NO digital Uncertainty - Result = " + std::to_string(result) + " number: " + std::to_string(number) + " numeral_preceder = " + std::to_string(numeral_preceder)); @@ -252,28 +248,23 @@ int ClassFlowCNNGeneral::PointerEvalAnalogToDigitNew(float number, float numeral // No zero crossing has taken place. // Only eval_predecessors used because numeral_preceder could be wrong here. // numeral_preceder<=0.1 & eval_predecessors=9 corresponds to analogue was reset because of previous analogue that are not yet at 0. - if ((eval_predecessors>=6 && (numeral_preceder>analogDigitalTransitionStart || numeral_preceder<=0.2) && roundedUp)) - { + if ((eval_predecessors>=6 && (numeral_preceder>analogDigitalTransitionStart || numeral_preceder<=0.2) && roundedUp)) { result = ((result_before_decimal_point+10) - 1) % 10; LogFile.WriteToFile(ESP_LOG_DEBUG, TAG, "PointerEvalAnalogToDigitNew - Nulldurchgang noch nicht stattgefunden = " + std::to_string(result) + " number: " + std::to_string(number) + " numeral_preceder = " + std::to_string(numeral_preceder) + " eerg after comma = " + std::to_string(result_after_decimal_point)); - } return result; - } -int ClassFlowCNNGeneral::PointerEvalAnalogNew(float number, int numeral_preceder) -{ +int ClassFlowCNNGeneral::PointerEvalAnalogNew(float number, int numeral_preceder) { float number_min, number_max; int result; - if (numeral_preceder == -1) - { + if (numeral_preceder == -1) { result = (int) floor(number); LogFile.WriteToFile(ESP_LOG_DEBUG, TAG, "PointerEvalAnalogNew - No predecessor - Result = " + std::to_string(result) + " number: " + std::to_string(number) + " numeral_preceder = " + std::to_string(numeral_preceder) + " Analog_error = " + std::to_string(Analog_error)); @@ -283,17 +274,14 @@ int ClassFlowCNNGeneral::PointerEvalAnalogNew(float number, int numeral_preceder number_min = number - Analog_error / 10.0; number_max = number + Analog_error / 10.0; - if ((int) floor(number_max) - (int) floor(number_min) != 0) - { - if (numeral_preceder <= Analog_error) - { + if ((int) floor(number_max) - (int) floor(number_min) != 0) { + if (numeral_preceder <= Analog_error) { result = ((int) floor(number_max) + 10) % 10; LogFile.WriteToFile(ESP_LOG_DEBUG, TAG, "PointerEvalAnalogNew - number ambiguous, correction upwards - result = " + std::to_string(result) + " number: " + std::to_string(number) + " numeral_preceder = " + std::to_string(numeral_preceder) + " Analog_error = " + std::to_string(Analog_error)); return result; } - if (numeral_preceder >= 10 - Analog_error) - { + if (numeral_preceder >= 10 - Analog_error) { result = ((int) floor(number_min) + 10) % 10; LogFile.WriteToFile(ESP_LOG_DEBUG, TAG, "PointerEvalAnalogNew - number ambiguous, downward correction - result = " + std::to_string(result) + " number: " + std::to_string(number) + " numeral_preceder = " + std::to_string(numeral_preceder) + " Analog_error = " + std::to_string(Analog_error)); @@ -301,7 +289,6 @@ int ClassFlowCNNGeneral::PointerEvalAnalogNew(float number, int numeral_preceder } } - result = ((int) floor(number) + 10) % 10; LogFile.WriteToFile(ESP_LOG_DEBUG, TAG, "PointerEvalAnalogNew - number unambiguous, no correction necessary - result = " + std::to_string(result) + " number: " + std::to_string(number) + " numeral_preceder = " + std::to_string(numeral_preceder) + " Analog_error = " + std::to_string(Analog_error)); @@ -310,25 +297,25 @@ int ClassFlowCNNGeneral::PointerEvalAnalogNew(float number, int numeral_preceder } -bool ClassFlowCNNGeneral::ReadParameter(FILE* pfile, string& aktparamgraph) -{ +bool ClassFlowCNNGeneral::ReadParameter(FILE* pfile, string& aktparamgraph) { std::vector splitted; aktparamgraph = trim(aktparamgraph); - if (aktparamgraph.size() == 0) - if (!this->GetNextParagraph(pfile, aktparamgraph)) + if (aktparamgraph.size() == 0) { + if (!this->GetNextParagraph(pfile, aktparamgraph)) { return false; - + } + } if ((toUpper(aktparamgraph) != "[ANALOG]") && (toUpper(aktparamgraph) != ";[ANALOG]") && (toUpper(aktparamgraph) != "[DIGIT]") && (toUpper(aktparamgraph) != ";[DIGIT]") - && (toUpper(aktparamgraph) != "[DIGITS]") && (toUpper(aktparamgraph) != ";[DIGITS]") - ) // Paragraph passt nicht + && (toUpper(aktparamgraph) != "[DIGITS]") && (toUpper(aktparamgraph) != ";[DIGITS]")) { + // Paragraph passt nicht return false; + } - if (aktparamgraph[0] == ';') - { + if (aktparamgraph[0] == ';') { disabled = true; while (getNextLine(pfile, &aktparamgraph) && !isNewParagraph(aktparamgraph)); ESP_LOGD(TAG, "[Analog/Digit] is disabled!"); @@ -336,36 +323,31 @@ bool ClassFlowCNNGeneral::ReadParameter(FILE* pfile, string& aktparamgraph) } - while (this->getNextLine(pfile, &aktparamgraph) && !this->isNewParagraph(aktparamgraph)) - { + while (this->getNextLine(pfile, &aktparamgraph) && !this->isNewParagraph(aktparamgraph)) { splitted = ZerlegeZeile(aktparamgraph); - if ((toUpper(splitted[0]) == "ROIIMAGESLOCATION") && (splitted.size() > 1)) - { + if ((toUpper(splitted[0]) == "ROIIMAGESLOCATION") && (splitted.size() > 1)) { this->imagesLocation = "/sdcard" + splitted[1]; this->isLogImage = true; } - if ((toUpper(splitted[0]) == "LOGIMAGESELECT") && (splitted.size() > 1)) - { + + if ((toUpper(splitted[0]) == "LOGIMAGESELECT") && (splitted.size() > 1)) { LogImageSelect = splitted[1]; isLogImageSelect = true; } - if ((toUpper(splitted[0]) == "ROIIMAGESRETENTION") && (splitted.size() > 1)) - { + if ((toUpper(splitted[0]) == "ROIIMAGESRETENTION") && (splitted.size() > 1)) { this->imagesRetention = std::stoi(splitted[1]); } - if ((toUpper(splitted[0]) == "MODEL") && (splitted.size() > 1)) - { + if ((toUpper(splitted[0]) == "MODEL") && (splitted.size() > 1)) { this->cnnmodelfile = splitted[1]; } - if ((toUpper(splitted[0]) == "CNNGOODTHRESHOLD") && (splitted.size() > 1)) - { + if ((toUpper(splitted[0]) == "CNNGOODTHRESHOLD") && (splitted.size() > 1)) { CNNGoodThreshold = std::stof(splitted[1]); } - if (splitted.size() >= 5) - { + + if (splitted.size() >= 5) { general* _analog = GetGENERAL(splitted[0], true); roi* neuroi = _analog->ROI[_analog->ROI.size()-1]; neuroi->posx = std::stoi(splitted[1]); @@ -373,19 +355,20 @@ bool ClassFlowCNNGeneral::ReadParameter(FILE* pfile, string& aktparamgraph) neuroi->deltax = std::stoi(splitted[3]); neuroi->deltay = std::stoi(splitted[4]); neuroi->CCW = false; - if (splitted.size() >= 6) - { + + if (splitted.size() >= 6) { neuroi->CCW = toUpper(splitted[5]) == "TRUE"; } + neuroi->result_float = -1; neuroi->image = NULL; neuroi->image_org = NULL; } - if ((toUpper(splitted[0]) == "SAVEALLFILES") && (splitted.size() > 1)) - { - if (toUpper(splitted[1]) == "TRUE") + if ((toUpper(splitted[0]) == "SAVEALLFILES") && (splitted.size() > 1)) { + if (toUpper(splitted[1]) == "TRUE") { SaveAllFiles = true; + } } } @@ -396,55 +379,57 @@ bool ClassFlowCNNGeneral::ReadParameter(FILE* pfile, string& aktparamgraph) } - for (int _ana = 0; _ana < GENERAL.size(); ++_ana) - for (int i = 0; i < GENERAL[_ana]->ROI.size(); ++i) - { + for (int _ana = 0; _ana < GENERAL.size(); ++_ana) { + for (int i = 0; i < GENERAL[_ana]->ROI.size(); ++i) { GENERAL[_ana]->ROI[i]->image = new CImageBasis("ROI " + GENERAL[_ana]->ROI[i]->name, modelxsize, modelysize, modelchannel); GENERAL[_ana]->ROI[i]->image_org = new CImageBasis("ROI " + GENERAL[_ana]->ROI[i]->name + " original", GENERAL[_ana]->ROI[i]->deltax, GENERAL[_ana]->ROI[i]->deltay, 3); } + } return true; } -general* ClassFlowCNNGeneral::FindGENERAL(string _name_number) -{ - for (int i = 0; i < GENERAL.size(); ++i) - if (GENERAL[i]->name == _name_number) +general* ClassFlowCNNGeneral::FindGENERAL(string _name_number) { + for (int i = 0; i < GENERAL.size(); ++i) { + if (GENERAL[i]->name == _name_number) { return GENERAL[i]; + } + } + return NULL; } -general* ClassFlowCNNGeneral::GetGENERAL(string _name, bool _create = true) -{ +general* ClassFlowCNNGeneral::GetGENERAL(string _name, bool _create = true) { string _analog, _roi; int _pospunkt = _name.find_first_of("."); - if (_pospunkt > -1) - { + if (_pospunkt > -1) { _analog = _name.substr(0, _pospunkt); _roi = _name.substr(_pospunkt+1, _name.length() - _pospunkt - 1); } - else - { + else { _analog = "default"; _roi = _name; } general *_ret = NULL; - for (int i = 0; i < GENERAL.size(); ++i) - if (GENERAL[i]->name == _analog) + for (int i = 0; i < GENERAL.size(); ++i) { + if (GENERAL[i]->name == _analog) { _ret = GENERAL[i]; + } + } - if (!_create) // not found and should not be created + // not found and should not be created + if (!_create) { return _ret; + } - if (_ret == NULL) - { + if (_ret == NULL) { _ret = new general; _ret->name = _analog; GENERAL.push_back(_ret); @@ -461,8 +446,7 @@ general* ClassFlowCNNGeneral::GetGENERAL(string _name, bool _create = true) } -string ClassFlowCNNGeneral::getHTMLSingleStep(string host) -{ +string ClassFlowCNNGeneral::getHTMLSingleStep(string host) { string result, zw; std::vector htmlinfo; @@ -470,8 +454,8 @@ string ClassFlowCNNGeneral::getHTMLSingleStep(string host) result = result + "Analog Pointers:

"; htmlinfo = GetHTMLInfo(); - for (int i = 0; i < htmlinfo.size(); ++i) - { + + for (int i = 0; i < htmlinfo.size(); ++i) { std::stringstream stream; stream << std::fixed << std::setprecision(1) << htmlinfo[i]->val; zw = stream.str(); @@ -479,15 +463,14 @@ string ClassFlowCNNGeneral::getHTMLSingleStep(string host) result = result + "filename + "\"> " + zw; delete htmlinfo[i]; } + htmlinfo.clear(); return result; } -bool ClassFlowCNNGeneral::doFlow(string time) -{ - +bool ClassFlowCNNGeneral::doFlow(string time) { #ifdef HEAP_TRACING_CLASS_FLOW_CNN_GENERAL_DO_ALING_AND_CUT //register a buffer to record the memory trace ESP_ERROR_CHECK( heap_trace_init_standalone(trace_record, NUM_RECORDS) ); @@ -495,8 +478,9 @@ bool ClassFlowCNNGeneral::doFlow(string time) ESP_ERROR_CHECK( heap_trace_start(HEAP_TRACE_LEAKS) ); #endif - if (disabled) + if (disabled) { return true; + } if (!doAlignAndCut(time)){ return false; @@ -517,79 +501,80 @@ bool ClassFlowCNNGeneral::doFlow(string time) } -bool ClassFlowCNNGeneral::doAlignAndCut(string time) -{ - if (disabled) +bool ClassFlowCNNGeneral::doAlignAndCut(string time) { + if (disabled) { return true; + } CAlignAndCutImage *caic = flowpostalignment->GetAlignAndCutImage(); - for (int _ana = 0; _ana < GENERAL.size(); ++_ana) - for (int i = 0; i < GENERAL[_ana]->ROI.size(); ++i) - { + for (int _ana = 0; _ana < GENERAL.size(); ++_ana) { + for (int i = 0; i < GENERAL[_ana]->ROI.size(); ++i) { ESP_LOGD(TAG, "General %d - Align&Cut", i); caic->CutAndSave(GENERAL[_ana]->ROI[i]->posx, GENERAL[_ana]->ROI[i]->posy, GENERAL[_ana]->ROI[i]->deltax, GENERAL[_ana]->ROI[i]->deltay, GENERAL[_ana]->ROI[i]->image_org); - if (SaveAllFiles) - { - if (GENERAL[_ana]->name == "default") + if (SaveAllFiles) { + if (GENERAL[_ana]->name == "default") { GENERAL[_ana]->ROI[i]->image_org->SaveToFile(FormatFileName("/sdcard/img_tmp/" + GENERAL[_ana]->ROI[i]->name + ".jpg")); - else + } + else { GENERAL[_ana]->ROI[i]->image_org->SaveToFile(FormatFileName("/sdcard/img_tmp/" + GENERAL[_ana]->name + "_" + GENERAL[_ana]->ROI[i]->name + ".jpg")); + } } GENERAL[_ana]->ROI[i]->image_org->Resize(modelxsize, modelysize, GENERAL[_ana]->ROI[i]->image); - if (SaveAllFiles) - { - if (GENERAL[_ana]->name == "default") + if (SaveAllFiles) { + if (GENERAL[_ana]->name == "default") { GENERAL[_ana]->ROI[i]->image->SaveToFile(FormatFileName("/sdcard/img_tmp/" + GENERAL[_ana]->ROI[i]->name + ".jpg")); - else + } + else { GENERAL[_ana]->ROI[i]->image->SaveToFile(FormatFileName("/sdcard/img_tmp/" + GENERAL[_ana]->name + "_" + GENERAL[_ana]->ROI[i]->name + ".jpg")); + } } } + } return true; } -void ClassFlowCNNGeneral::DrawROI(CImageBasis *_zw) -{ - if (_zw->ImageOkay()) - { - if (CNNType == Analogue || CNNType == Analogue100) - { +void ClassFlowCNNGeneral::DrawROI(CImageBasis *_zw) { + if (_zw->ImageOkay()) { + if (CNNType == Analogue || CNNType == Analogue100) { int r = 0; int g = 255; int b = 0; - for (int _ana = 0; _ana < GENERAL.size(); ++_ana) - for (int i = 0; i < GENERAL[_ana]->ROI.size(); ++i) - { + for (int _ana = 0; _ana < GENERAL.size(); ++_ana) { + for (int i = 0; i < GENERAL[_ana]->ROI.size(); ++i) { _zw->drawRect(GENERAL[_ana]->ROI[i]->posx, GENERAL[_ana]->ROI[i]->posy, GENERAL[_ana]->ROI[i]->deltax, GENERAL[_ana]->ROI[i]->deltay, r, g, b, 1); _zw->drawEllipse( (int) (GENERAL[_ana]->ROI[i]->posx + GENERAL[_ana]->ROI[i]->deltax/2), (int) (GENERAL[_ana]->ROI[i]->posy + GENERAL[_ana]->ROI[i]->deltay/2), (int) (GENERAL[_ana]->ROI[i]->deltax/2), (int) (GENERAL[_ana]->ROI[i]->deltay/2), r, g, b, 2); _zw->drawLine((int) (GENERAL[_ana]->ROI[i]->posx + GENERAL[_ana]->ROI[i]->deltax/2), (int) GENERAL[_ana]->ROI[i]->posy, (int) (GENERAL[_ana]->ROI[i]->posx + GENERAL[_ana]->ROI[i]->deltax/2), (int) (GENERAL[_ana]->ROI[i]->posy + GENERAL[_ana]->ROI[i]->deltay), r, g, b, 2); _zw->drawLine((int) GENERAL[_ana]->ROI[i]->posx, (int) (GENERAL[_ana]->ROI[i]->posy + GENERAL[_ana]->ROI[i]->deltay/2), (int) GENERAL[_ana]->ROI[i]->posx + GENERAL[_ana]->ROI[i]->deltax, (int) (GENERAL[_ana]->ROI[i]->posy + GENERAL[_ana]->ROI[i]->deltay/2), r, g, b, 2); } + } } - else - { - for (int _dig = 0; _dig < GENERAL.size(); ++_dig) - for (int i = 0; i < GENERAL[_dig]->ROI.size(); ++i) + else { + for (int _dig = 0; _dig < GENERAL.size(); ++_dig) { + for (int i = 0; i < GENERAL[_dig]->ROI.size(); ++i) { _zw->drawRect(GENERAL[_dig]->ROI[i]->posx, GENERAL[_dig]->ROI[i]->posy, GENERAL[_dig]->ROI[i]->deltax, GENERAL[_dig]->ROI[i]->deltay, 0, 0, (255 - _dig*100), 2); + } + } } } } -bool ClassFlowCNNGeneral::getNetworkParameter() -{ - if (disabled) +bool ClassFlowCNNGeneral::getNetworkParameter() { + if (disabled) { return true; + } CTfLiteClass *tflite = new CTfLiteClass; string zwcnn = "/sdcard" + cnnmodelfile; zwcnn = FormatFileName(zwcnn); ESP_LOGD(TAG, "%s", zwcnn.c_str()); + if (!tflite->LoadModel(zwcnn)) { LogFile.WriteToFile(ESP_LOG_ERROR, TAG, "Can't load tflite model " + cnnmodelfile + " -> Init aborted!"); LogFile.WriteHeapInfo("getNetworkParameter-LoadModel"); @@ -604,16 +589,14 @@ bool ClassFlowCNNGeneral::getNetworkParameter() return false; } - if (CNNType == AutoDetect) - { + if (CNNType == AutoDetect) { tflite->GetInputDimension(false); modelxsize = tflite->ReadInputDimenstion(0); modelysize = tflite->ReadInputDimenstion(1); modelchannel = tflite->ReadInputDimenstion(2); int _anzoutputdimensions = tflite->GetAnzOutPut(); - switch (_anzoutputdimensions) - { + switch (_anzoutputdimensions) { case 2: CNNType = Analogue; ESP_LOGD(TAG, "TFlite-Type set to Analogue"); @@ -639,7 +622,8 @@ bool ClassFlowCNNGeneral::getNetworkParameter() if (modelxsize==32 && modelysize == 32) { CNNType = Analogue100; ESP_LOGD(TAG, "TFlite-Type set to Analogue100"); - } else { + } + else { CNNType = Digital100; ESP_LOGD(TAG, "TFlite-Type set to Digital"); } @@ -654,10 +638,10 @@ bool ClassFlowCNNGeneral::getNetworkParameter() } -bool ClassFlowCNNGeneral::doNeuralNetwork(string time) -{ - if (disabled) +bool ClassFlowCNNGeneral::doNeuralNetwork(string time) { + if (disabled) { return true; + } string logPath = CreateLogFolder(time); @@ -680,11 +664,11 @@ bool ClassFlowCNNGeneral::doNeuralNetwork(string time) return false; } - for (int n = 0; n < GENERAL.size(); ++n) // For each NUMBER - { + // For each NUMBER + for (int n = 0; n < GENERAL.size(); ++n) { LogFile.WriteToFile(ESP_LOG_DEBUG, TAG, "Processing Number '" + GENERAL[n]->name + "'"); - for (int roi = 0; roi < GENERAL[n]->ROI.size(); ++roi) // For each ROI - { + // For each ROI + for (int roi = 0; roi < GENERAL[n]->ROI.size(); ++roi) { LogFile.WriteToFile(ESP_LOG_DEBUG, TAG, "ROI #" + std::to_string(roi) + " - TfLite"); //ESP_LOGD(TAG, "General %d - TfLite", i); @@ -703,14 +687,17 @@ bool ClassFlowCNNGeneral::doNeuralNetwork(string time) f2 = tflite->GetOutputValue(1); float result = fmod(atan2(f1, f2) / (M_PI * 2) + 2, 1); - if(GENERAL[n]->ROI[roi]->CCW) + if(GENERAL[n]->ROI[roi]->CCW) { GENERAL[n]->ROI[roi]->result_float = 10 - (result * 10); - else + } + else { GENERAL[n]->ROI[roi]->result_float = result * 10; + } ESP_LOGD(TAG, "General result (Analog)%i - CCW: %d - %f", roi, GENERAL[n]->ROI[roi]->CCW, GENERAL[n]->ROI[roi]->result_float); - if (isLogImage) + if (isLogImage) { LogImage(logPath, GENERAL[n]->ROI[roi]->name, &GENERAL[n]->ROI[roi]->result_float, NULL, time, GENERAL[n]->ROI[roi]->image_org); + } } break; case Digital: @@ -720,22 +707,19 @@ bool ClassFlowCNNGeneral::doNeuralNetwork(string time) GENERAL[n]->ROI[roi]->result_klasse = tflite->GetClassFromImageBasis(GENERAL[n]->ROI[roi]->image); ESP_LOGD(TAG, "General result (Digit)%i: %d", roi, GENERAL[n]->ROI[roi]->result_klasse); - if (isLogImage) - { + if (isLogImage) { string _imagename = GENERAL[n]->name + "_" + GENERAL[n]->ROI[roi]->name; - if (isLogImageSelect) - { - if (LogImageSelect.find(GENERAL[n]->ROI[roi]->name) != std::string::npos) + if (isLogImageSelect) { + if (LogImageSelect.find(GENERAL[n]->ROI[roi]->name) != std::string::npos) { LogImage(logPath, _imagename, NULL, &GENERAL[n]->ROI[roi]->result_klasse, time, GENERAL[n]->ROI[roi]->image_org); + } } - else - { + else { LogImage(logPath, _imagename, NULL, &GENERAL[n]->ROI[roi]->result_klasse, time, GENERAL[n]->ROI[roi]->image_org); } } } break; - case DoubleHyprid10: { LogFile.WriteToFile(ESP_LOG_DEBUG, TAG, "CNN Type: DoubleHyprid10"); @@ -758,62 +742,56 @@ bool ClassFlowCNNGeneral::doNeuralNetwork(string time) float result = _num; - if (_valplus > _valminus) - { + if (_valplus > _valminus) { result = result + _valplus / (_valplus + _val); _fit = _val + _valplus; } - else - { + else { result = result - _valminus / (_val + _valminus); _fit = _val + _valminus; - } - if (result >= 10) + + if (result >= 10) { result = result - 10; - if (result < 0) + } + + if (result < 0) { result = result + 10; + } string zw = "_num (p, m): " + to_string(_num) + " " + to_string(_numplus) + " " + to_string(_numminus); zw = zw + " _val (p, m): " + to_string(_val) + " " + to_string(_valplus) + " " + to_string(_valminus); zw = zw + " result: " + to_string(result) + " _fit: " + to_string(_fit); LogFile.WriteToFile(ESP_LOG_DEBUG, TAG, zw); - _result_save_file = result; - if (_fit < CNNGoodThreshold) - { + if (_fit < CNNGoodThreshold) { GENERAL[n]->ROI[roi]->isReject = true; result = -1; _result_save_file+= 100; // In case fit is not sufficient, the result should still be saved with "-10x.y". string zw = "Value Rejected due to Threshold (Fit: " + to_string(_fit) + ", Threshold: " + to_string(CNNGoodThreshold) + ")"; LogFile.WriteToFile(ESP_LOG_WARN, TAG, zw); } - else - { + else { GENERAL[n]->ROI[roi]->isReject = false; } - GENERAL[n]->ROI[roi]->result_float = result; ESP_LOGD(TAG, "Result General(Analog)%i: %f", roi, GENERAL[n]->ROI[roi]->result_float); - if (isLogImage) - { + if (isLogImage) { string _imagename = GENERAL[n]->name + "_" + GENERAL[n]->ROI[roi]->name; - if (isLogImageSelect) - { - if (LogImageSelect.find(GENERAL[n]->ROI[roi]->name) != std::string::npos) + if (isLogImageSelect) { + if (LogImageSelect.find(GENERAL[n]->ROI[roi]->name) != std::string::npos) { LogImage(logPath, _imagename, &_result_save_file, NULL, time, GENERAL[n]->ROI[roi]->image_org); + } } - else - { + else { LogImage(logPath, _imagename, &_result_save_file, NULL, time, GENERAL[n]->ROI[roi]->image_org); } } - } - break; + } break; case Digital100: case Analogue100: { @@ -826,28 +804,27 @@ bool ClassFlowCNNGeneral::doNeuralNetwork(string time) _num = tflite->GetOutClassification(); - if(GENERAL[n]->ROI[roi]->CCW) - GENERAL[n]->ROI[roi]->result_float = 10 - ((float)_num / 10.0); - else + if(GENERAL[n]->ROI[roi]->CCW) { + GENERAL[n]->ROI[roi]->result_float = 10 - ((float)_num / 10.0); + } + else { GENERAL[n]->ROI[roi]->result_float = (float)_num / 10.0; + } _result_save_file = GENERAL[n]->ROI[roi]->result_float; - GENERAL[n]->ROI[roi]->isReject = false; ESP_LOGD(TAG, "Result General(Analog)%i - CCW: %d - %f", roi, GENERAL[n]->ROI[roi]->CCW, GENERAL[n]->ROI[roi]->result_float); - if (isLogImage) - { + if (isLogImage) { string _imagename = GENERAL[n]->name + "_" + GENERAL[n]->ROI[roi]->name; - if (isLogImageSelect) - { - if (LogImageSelect.find(GENERAL[n]->ROI[roi]->name) != std::string::npos) + if (isLogImageSelect) { + if (LogImageSelect.find(GENERAL[n]->ROI[roi]->name) != std::string::npos) { LogImage(logPath, _imagename, &_result_save_file, NULL, time, GENERAL[n]->ROI[roi]->image_org); + } } - else - { + else { LogImage(logPath, _imagename, &_result_save_file, NULL, time, GENERAL[n]->ROI[roi]->image_org); } } @@ -866,93 +843,94 @@ bool ClassFlowCNNGeneral::doNeuralNetwork(string time) } -bool ClassFlowCNNGeneral::isExtendedResolution(int _number) -{ - if (CNNType == Digital) +bool ClassFlowCNNGeneral::isExtendedResolution(int _number) { + if (CNNType == Digital) { return false; + } + return true; } -std::vector ClassFlowCNNGeneral::GetHTMLInfo() -{ +std::vector ClassFlowCNNGeneral::GetHTMLInfo() { std::vector result; - for (int _ana = 0; _ana < GENERAL.size(); ++_ana) - for (int i = 0; i < GENERAL[_ana]->ROI.size(); ++i) - { + for (int _ana = 0; _ana < GENERAL.size(); ++_ana) { + for (int i = 0; i < GENERAL[_ana]->ROI.size(); ++i) { ESP_LOGD(TAG, "Image: %d", (int) GENERAL[_ana]->ROI[i]->image); - if (GENERAL[_ana]->ROI[i]->image) - { - if (GENERAL[_ana]->name == "default") + if (GENERAL[_ana]->ROI[i]->image) { + if (GENERAL[_ana]->name == "default") { GENERAL[_ana]->ROI[i]->image->SaveToFile(FormatFileName("/sdcard/img_tmp/" + GENERAL[_ana]->ROI[i]->name + ".jpg")); - else + } + else { GENERAL[_ana]->ROI[i]->image->SaveToFile(FormatFileName("/sdcard/img_tmp/" + GENERAL[_ana]->name + "_" + GENERAL[_ana]->ROI[i]->name + ".jpg")); + } } HTMLInfo *zw = new HTMLInfo; - if (GENERAL[_ana]->name == "default") - { + if (GENERAL[_ana]->name == "default") { zw->filename = GENERAL[_ana]->ROI[i]->name + ".jpg"; zw->filename_org = GENERAL[_ana]->ROI[i]->name + ".jpg"; } - else - { + else { zw->filename = GENERAL[_ana]->name + "_" + GENERAL[_ana]->ROI[i]->name + ".jpg"; zw->filename_org = GENERAL[_ana]->name + "_" + GENERAL[_ana]->ROI[i]->name + ".jpg"; } - if (CNNType == Digital) + if (CNNType == Digital) { zw->val = GENERAL[_ana]->ROI[i]->result_klasse; - else + } + else { zw->val = GENERAL[_ana]->ROI[i]->result_float; + } + zw->image = GENERAL[_ana]->ROI[i]->image; zw->image_org = GENERAL[_ana]->ROI[i]->image_org; result.push_back(zw); } + } return result; } -int ClassFlowCNNGeneral::getNumberGENERAL() -{ +int ClassFlowCNNGeneral::getNumberGENERAL() { return GENERAL.size(); } -string ClassFlowCNNGeneral::getNameGENERAL(int _analog) -{ - if (_analog < GENERAL.size()) +string ClassFlowCNNGeneral::getNameGENERAL(int _analog) { + if (_analog < GENERAL.size()) { return GENERAL[_analog]->name; + } return "GENERAL DOES NOT EXIST"; } -general* ClassFlowCNNGeneral::GetGENERAL(int _analog) -{ - if (_analog < GENERAL.size()) +general* ClassFlowCNNGeneral::GetGENERAL(int _analog) { + if (_analog < GENERAL.size()) { return GENERAL[_analog]; + } return NULL; } -void ClassFlowCNNGeneral::UpdateNameNumbers(std::vector *_name_numbers) -{ - for (int _dig = 0; _dig < GENERAL.size(); _dig++) - { +void ClassFlowCNNGeneral::UpdateNameNumbers(std::vector *_name_numbers) { + for (int _dig = 0; _dig < GENERAL.size(); _dig++) { std::string _name = GENERAL[_dig]->name; bool found = false; - for (int i = 0; i < (*_name_numbers).size(); ++i) - { - if ((*_name_numbers)[i] == _name) + + for (int i = 0; i < (*_name_numbers).size(); ++i) { + if ((*_name_numbers)[i] == _name) { found = true; + } } - if (!found) + if (!found) { (*_name_numbers).push_back(_name); + } } } @@ -961,26 +939,25 @@ string ClassFlowCNNGeneral::getReadoutRawString(int _analog) { string rt = ""; - if (_analog >= GENERAL.size() || GENERAL[_analog]==NULL || GENERAL[_analog]->ROI.size() == 0) + if (_analog >= GENERAL.size() || GENERAL[_analog]==NULL || GENERAL[_analog]->ROI.size() == 0) { return rt; + } - for (int i = 0; i < GENERAL[_analog]->ROI.size(); ++i) - { - if (CNNType == Analogue || CNNType == Analogue100) - { + for (int i = 0; i < GENERAL[_analog]->ROI.size(); ++i) { + if (CNNType == Analogue || CNNType == Analogue100) { rt = rt + "," + RundeOutput(GENERAL[_analog]->ROI[i]->result_float, 1); } - if (CNNType == Digital) - { - if (GENERAL[_analog]->ROI[i]->result_klasse == 10) + if (CNNType == Digital) { + if (GENERAL[_analog]->ROI[i]->result_klasse >= 10) { rt = rt + ",N"; - else + } + else { rt = rt + "," + RundeOutput(GENERAL[_analog]->ROI[i]->result_klasse, 0); + } } - if ((CNNType == DoubleHyprid10) || (CNNType == Digital100)) - { + if ((CNNType == DoubleHyprid10) || (CNNType == Digital100)) { rt = rt + "," + RundeOutput(GENERAL[_analog]->ROI[i]->result_float, 1); } } diff --git a/code/components/jomjol_flowcontroll/MainFlowControl.cpp b/code/components/jomjol_flowcontroll/MainFlowControl.cpp index 1d3fcb64..85ed3067 100644 --- a/code/components/jomjol_flowcontroll/MainFlowControl.cpp +++ b/code/components/jomjol_flowcontroll/MainFlowControl.cpp @@ -48,51 +48,45 @@ bool isPlannedReboot = false; static const char *TAG = "MAINCTRL"; - //#define DEBUG_DETAIL_ON -void CheckIsPlannedReboot() -{ - FILE *pfile; +void CheckIsPlannedReboot() { + FILE *pfile; + if ((pfile = fopen("/sdcard/reboot.txt", "r")) == NULL) { - //LogFile.WriteToFile(ESP_LOG_DEBUG, TAG, "Initial boot or not a planned reboot"); + //LogFile.WriteToFile(ESP_LOG_DEBUG, TAG, "Initial boot or not a planned reboot"); isPlannedReboot = false; - } + } else { - LogFile.WriteToFile(ESP_LOG_DEBUG, TAG, "Planned reboot"); + LogFile.WriteToFile(ESP_LOG_DEBUG, TAG, "Planned reboot"); DeleteFile("/sdcard/reboot.txt"); // Prevent Boot Loop!!! isPlannedReboot = true; - } + } } -bool getIsPlannedReboot() -{ +bool getIsPlannedReboot() { return isPlannedReboot; } -int getCountFlowRounds() -{ +int getCountFlowRounds() { return countRounds; } -esp_err_t GetJPG(std::string _filename, httpd_req_t *req) -{ +esp_err_t GetJPG(std::string _filename, httpd_req_t *req) { return flowctrl.GetJPGStream(_filename, req); } -esp_err_t GetRawJPG(httpd_req_t *req) -{ +esp_err_t GetRawJPG(httpd_req_t *req) { return flowctrl.SendRawJPG(req); } -bool isSetupModusActive() -{ +bool isSetupModusActive() { return flowctrl.getStatusSetupModus(); } @@ -102,19 +96,19 @@ void DeleteMainFlowTask() #ifdef DEBUG_DETAIL_ON ESP_LOGD(TAG, "DeleteMainFlowTask: xHandletask_autodoFlow: %ld", (long) xHandletask_autodoFlow); #endif - if( xHandletask_autodoFlow != NULL ) - { + + if( xHandletask_autodoFlow != NULL ) { vTaskDelete(xHandletask_autodoFlow); xHandletask_autodoFlow = NULL; } + #ifdef DEBUG_DETAIL_ON ESP_LOGD(TAG, "Killed: xHandletask_autodoFlow"); #endif } -void doInit(void) -{ +void doInit() { #ifdef DEBUG_DETAIL_ON ESP_LOGD(TAG, "Start flowctrl.InitFlow(config);"); #endif @@ -132,8 +126,7 @@ void doInit(void) } -bool doflow(void) -{ +bool doflow() { std::string zw_time = getCurrentTimeString(LOGFILE_TIME_FORMAT); ESP_LOGD(TAG, "doflow - start %s", zw_time.c_str()); flowisrunning = true; @@ -148,8 +141,7 @@ bool doflow(void) } -esp_err_t handler_get_heap(httpd_req_t *req) -{ +esp_err_t handler_get_heap(httpd_req_t *req) { #ifdef DEBUG_DETAIL_ON LogFile.WriteHeapInfo("handler_get_heap - Start"); ESP_LOGD(TAG, "handler_get_heap uri: %s", req->uri); @@ -172,12 +164,10 @@ esp_err_t handler_get_heap(httpd_req_t *req) httpd_resp_set_hdr(req, "Access-Control-Allow-Origin", "*"); - if (zw.length() > 0) - { + if (zw.length() > 0) { httpd_resp_send(req, zw.c_str(), zw.length()); } - else - { + else { httpd_resp_send(req, NULL, 0); } @@ -189,8 +179,7 @@ esp_err_t handler_get_heap(httpd_req_t *req) } -esp_err_t handler_init(httpd_req_t *req) -{ +esp_err_t handler_init(httpd_req_t *req) { #ifdef DEBUG_DETAIL_ON LogFile.WriteHeapInfo("handler_init - Start"); ESP_LOGD(TAG, "handler_doinit uri: %s", req->uri); @@ -213,8 +202,7 @@ esp_err_t handler_init(httpd_req_t *req) } -esp_err_t handler_stream(httpd_req_t *req) -{ +esp_err_t handler_stream(httpd_req_t *req) { #ifdef DEBUG_DETAIL_ON LogFile.WriteHeapInfo("handler_stream - Start"); ESP_LOGD(TAG, "handler_stream uri: %s", req->uri); @@ -224,16 +212,15 @@ esp_err_t handler_stream(httpd_req_t *req) char _value[10]; bool flashlightOn = false; - if (httpd_req_get_url_query_str(req, _query, 50) == ESP_OK) - { + if (httpd_req_get_url_query_str(req, _query, 50) == ESP_OK) { // ESP_LOGD(TAG, "Query: %s", _query); - if (httpd_query_key_value(_query, "flashlight", _value, 10) == ESP_OK) - { + if (httpd_query_key_value(_query, "flashlight", _value, 10) == ESP_OK) { #ifdef DEBUG_DETAIL_ON ESP_LOGD(TAG, "flashlight is found%s", _value); #endif - if (strlen(_value) > 0) + if (strlen(_value) > 0) { flashlightOn = true; + } } } @@ -279,20 +266,17 @@ esp_err_t handler_flow_start(httpd_req_t *req) { #ifdef ENABLE_MQTT esp_err_t MQTTCtrlFlowStart(std::string _topic) { - #ifdef DEBUG_DETAIL_ON LogFile.WriteHeapInfo("MQTTCtrlFlowStart - Start"); #endif ESP_LOGD(TAG, "MQTTCtrlFlowStart: topic %s", _topic.c_str()); - if (autostartIsEnabled) - { + if (autostartIsEnabled) { xTaskAbortDelay(xHandletask_autodoFlow); // Delay will be aborted if task is in blocked (waiting) state. If task is already running, no action LogFile.WriteToFile(ESP_LOG_DEBUG, TAG, "Flow start triggered by MQTT topic " + _topic); } - else - { + else { LogFile.WriteToFile(ESP_LOG_WARN, TAG, "Flow start triggered by MQTT topic " + _topic + ", but flow is not active!"); } @@ -305,31 +289,26 @@ esp_err_t MQTTCtrlFlowStart(std::string _topic) { #endif //ENABLE_MQTT -esp_err_t handler_json(httpd_req_t *req) -{ +esp_err_t handler_json(httpd_req_t *req) { #ifdef DEBUG_DETAIL_ON LogFile.WriteHeapInfo("handler_json - Start"); #endif ESP_LOGD(TAG, "handler_JSON uri: %s", req->uri); - if (bTaskAutoFlowCreated) - { + if (bTaskAutoFlowCreated) { httpd_resp_set_hdr(req, "Access-Control-Allow-Origin", "*"); httpd_resp_set_type(req, "application/json"); std::string zw = flowctrl.getJSON(); - if (zw.length() > 0) - { + if (zw.length() > 0) { httpd_resp_send(req, zw.c_str(), zw.length()); } - else - { + else { httpd_resp_send(req, NULL, 0); } } - else - { + else { httpd_resp_send_err(req, HTTPD_403_FORBIDDEN, "Flow not (yet) started: REST API /json not yet available!"); return ESP_ERR_NOT_FOUND; } @@ -342,14 +321,12 @@ esp_err_t handler_json(httpd_req_t *req) } -esp_err_t handler_wasserzaehler(httpd_req_t *req) -{ +esp_err_t handler_wasserzaehler(httpd_req_t *req) { #ifdef DEBUG_DETAIL_ON LogFile.WriteHeapInfo("handler water counter - Start"); #endif - if (bTaskAutoFlowCreated) - { + if (bTaskAutoFlowCreated) { bool _rawValue = false; bool _noerror = false; bool _all = false; @@ -361,34 +338,30 @@ esp_err_t handler_wasserzaehler(httpd_req_t *req) char _query[100]; char _size[10]; - if (httpd_req_get_url_query_str(req, _query, 100) == ESP_OK) - { + if (httpd_req_get_url_query_str(req, _query, 100) == ESP_OK) { // ESP_LOGD(TAG, "Query: %s", _query); - if (httpd_query_key_value(_query, "all", _size, 10) == ESP_OK) - { + if (httpd_query_key_value(_query, "all", _size, 10) == ESP_OK) { #ifdef DEBUG_DETAIL_ON ESP_LOGD(TAG, "all is found%s", _size); #endif _all = true; } - if (httpd_query_key_value(_query, "type", _size, 10) == ESP_OK) - { + if (httpd_query_key_value(_query, "type", _size, 10) == ESP_OK) { #ifdef DEBUG_DETAIL_ON ESP_LOGD(TAG, "all is found: %s", _size); #endif _type = std::string(_size); } - if (httpd_query_key_value(_query, "rawvalue", _size, 10) == ESP_OK) - { + if (httpd_query_key_value(_query, "rawvalue", _size, 10) == ESP_OK) { #ifdef DEBUG_DETAIL_ON ESP_LOGD(TAG, "rawvalue is found: %s", _size); #endif _rawValue = true; } - if (httpd_query_key_value(_query, "noerror", _size, 10) == ESP_OK) - { + + if (httpd_query_key_value(_query, "noerror", _size, 10) == ESP_OK) { #ifdef DEBUG_DETAIL_ON ESP_LOGD(TAG, "noerror is found: %s", _size); #endif @@ -398,37 +371,42 @@ esp_err_t handler_wasserzaehler(httpd_req_t *req) httpd_resp_set_hdr(req, "Access-Control-Allow-Origin", "*"); - if (_all) - { + if (_all) { httpd_resp_set_type(req, "text/plain"); ESP_LOGD(TAG, "TYPE: %s", _type.c_str()); int _intype = READOUT_TYPE_VALUE; - if (_type == "prevalue") + + if (_type == "prevalue") { _intype = READOUT_TYPE_PREVALUE; - if (_type == "raw") + } + + if (_type == "raw") { _intype = READOUT_TYPE_RAWVALUE; - if (_type == "error") + } + + if (_type == "error") { _intype = READOUT_TYPE_ERROR; - + } zw = flowctrl.getReadoutAll(_intype); ESP_LOGD(TAG, "ZW: %s", zw.c_str()); - if (zw.length() > 0) - httpd_resp_send(req, zw.c_str(), zw.length()); + + if (zw.length() > 0) { + httpd_resp_send(req, zw.c_str(), zw.length()); + } return ESP_OK; } - std::string *status = flowctrl.getActStatus(); string query = std::string(_query); // ESP_LOGD(TAG, "Query: %s, query.c_str()); - if (query.find("full") != std::string::npos) - { + if (query.find("full") != std::string::npos) { string txt; txt = ""; - if ((countRounds <= 1) && (*status != std::string("Flow finished"))) { // First round not completed yet + if ((countRounds <= 1) && (*status != std::string("Flow finished"))) { + // First round not completed yet txt += "

Please wait for the first round to complete!

Current state: " + *status + "

\n"; } else { @@ -439,15 +417,16 @@ esp_err_t handler_wasserzaehler(httpd_req_t *req) } zw = flowctrl.getReadout(_rawValue, _noerror, 0); - if (zw.length() > 0) + + if (zw.length() > 0) { httpd_resp_sendstr_chunk(req, zw.c_str()); + } - - if (query.find("full") != std::string::npos) - { + if (query.find("full") != std::string::npos) { string txt, zw; - if ((countRounds <= 1) && (*status != std::string("Flow finished"))) { // First round not completed yet + if ((countRounds <= 1) && (*status != std::string("Flow finished"))) { + // First round not completed yet // Nothing to do } else { @@ -459,23 +438,26 @@ esp_err_t handler_wasserzaehler(httpd_req_t *req) std::vector htmlinfodig; htmlinfodig = flowctrl.GetAllDigital(); - for (int i = 0; i < htmlinfodig.size(); ++i) - { - if (flowctrl.GetTypeDigital() == Digital) - { - if (htmlinfodig[i]->val == 10) + for (int i = 0; i < htmlinfodig.size(); ++i) { + if (flowctrl.GetTypeDigital() == Digital) { + if (htmlinfodig[i]->val >= 10) { zw = "NaN"; - else + } + else { zw = to_string((int) htmlinfodig[i]->val); + } txt += "

" + zw + "

filename + "\">

\n"; } - else - { + else { std::stringstream stream; stream << std::fixed << std::setprecision(1) << htmlinfodig[i]->val; zw = stream.str(); + if (std::stod(zw) >= 10) { + zw = "NaN"; + } + txt += "

" + zw + "

filename + "\">

\n"; } delete htmlinfodig[i]; @@ -486,31 +468,35 @@ esp_err_t handler_wasserzaehler(httpd_req_t *req) txt += "\n"; httpd_resp_sendstr_chunk(req, txt.c_str()); - /* Analog ROIs */ txt = "

Recognized Analog ROIs (previous round)

\n"; txt += "\n"; std::vector htmlinfoana; htmlinfoana = flowctrl.GetAllAnalog(); - for (int i = 0; i < htmlinfoana.size(); ++i) - { + + for (int i = 0; i < htmlinfoana.size(); ++i) { std::stringstream stream; stream << std::fixed << std::setprecision(1) << htmlinfoana[i]->val; zw = stream.str(); + if (std::stod(zw) >= 10) { + zw = "NaN"; + } + txt += "\n"; - delete htmlinfoana[i]; + delete htmlinfoana[i]; } + htmlinfoana.clear(); txt += "\n

" + zw + "

filename + "\">

\n"; httpd_resp_sendstr_chunk(req, txt.c_str()); - /* Full Image * Only show it after the image got taken and aligned */ txt = "

Aligned Image (current round)

\n"; + if ((*status == std::string("Initialization")) || (*status == std::string("Initialization (delayed)")) || (*status == std::string("Take Image"))) { @@ -526,8 +512,7 @@ esp_err_t handler_wasserzaehler(httpd_req_t *req) /* Respond with an empty chunk to signal HTTP response completion */ httpd_resp_sendstr_chunk(req, NULL); } - else - { + else { httpd_resp_send_err(req, HTTPD_403_FORBIDDEN, "Flow not (yet) started: REST API /value not available!"); return ESP_ERR_NOT_FOUND; } @@ -540,8 +525,7 @@ esp_err_t handler_wasserzaehler(httpd_req_t *req) } -esp_err_t handler_editflow(httpd_req_t *req) -{ +esp_err_t handler_editflow(httpd_req_t *req) { #ifdef DEBUG_DETAIL_ON LogFile.WriteHeapInfo("handler_editflow - Start"); #endif @@ -552,10 +536,8 @@ esp_err_t handler_editflow(httpd_req_t *req) char _valuechar[30]; string _task; - if (httpd_req_get_url_query_str(req, _query, 200) == ESP_OK) - { - if (httpd_query_key_value(_query, "task", _valuechar, 30) == ESP_OK) - { + if (httpd_req_get_url_query_str(req, _query, 200) == ESP_OK) { + if (httpd_query_key_value(_query, "task", _valuechar, 30) == ESP_OK) { #ifdef DEBUG_DETAIL_ON ESP_LOGD(TAG, "task is found: %s", _valuechar); #endif @@ -563,27 +545,22 @@ esp_err_t handler_editflow(httpd_req_t *req) } } - if (_task.compare("namenumbers") == 0) - { + if (_task.compare("namenumbers") == 0) { ESP_LOGD(TAG, "Get NUMBER list"); return get_numbers_file_handler(req); } - if (_task.compare("data") == 0) - { + if (_task.compare("data") == 0) { ESP_LOGD(TAG, "Get data list"); return get_data_file_handler(req); } - if (_task.compare("tflite") == 0) - { + if (_task.compare("tflite") == 0) { ESP_LOGD(TAG, "Get tflite list"); return get_tflite_file_handler(req); } - - if (_task.compare("copy") == 0) - { + if (_task.compare("copy") == 0) { string in, out, zw; httpd_query_key_value(_query, "in", _valuechar, 30); @@ -605,9 +582,7 @@ esp_err_t handler_editflow(httpd_req_t *req) httpd_resp_send(req, zw.c_str(), zw.length()); } - - if (_task.compare("cutref") == 0) - { + if (_task.compare("cutref") == 0) { string in, out, zw; int x, y, dx, dy; bool enhance = false; @@ -643,11 +618,9 @@ esp_err_t handler_editflow(httpd_req_t *req) ESP_LOGD(TAG, "dy: %s", zw.c_str()); #endif - if (httpd_query_key_value(_query, "enhance", _valuechar, 10) == ESP_OK) - { + if (httpd_query_key_value(_query, "enhance", _valuechar, 10) == ESP_OK) { zw = string(_valuechar); - if (zw.compare("true") == 0) - { + if (zw.compare("true") == 0) { enhance = true; } } @@ -665,8 +638,7 @@ esp_err_t handler_editflow(httpd_req_t *req) delete caic; CImageBasis *cim = new CImageBasis("cutref", out2); - if (enhance) - { + if (enhance) { cim->Contrast(90); } @@ -674,8 +646,6 @@ esp_err_t handler_editflow(httpd_req_t *req) delete cim; psram_deinit_shared_memory_for_take_image_step(); - - zw = "CutImage Done"; } else { @@ -686,11 +656,10 @@ esp_err_t handler_editflow(httpd_req_t *req) httpd_resp_set_hdr(req, "Access-Control-Allow-Origin", "*"); httpd_resp_send(req, zw.c_str(), zw.length()); - } - if (_task.compare("test_take") == 0) - { + if ((_task.compare("test_take") == 0) || (_task.compare("cam_settings") == 0)) { + std::string _zw = ""; std::string _host = ""; int bri = -100; int sat = -100; @@ -739,31 +708,39 @@ esp_err_t handler_editflow(httpd_req_t *req) } if (httpd_query_key_value(_query, "gs", _valuechar, 30) == ESP_OK) { std::string _gr = std::string(_valuechar); - if (stoi(_gr) != 0) + if (stoi(_gr) != 0) { grayscale = true; - else + } + else { grayscale = false; + } } if (httpd_query_key_value(_query, "ne", _valuechar, 30) == ESP_OK) { std::string _ne = std::string(_valuechar); - if (stoi(_ne) != 0) + if (stoi(_ne) != 0) { negative = true; - else + } + else { negative = false; + } } if (httpd_query_key_value(_query, "a2", _valuechar, 30) == ESP_OK) { std::string _a2 = std::string(_valuechar); - if (stoi(_a2) != 0) + if (stoi(_a2) != 0) { aec2 = true; - else + } + else { aec2 = false; + } } if (httpd_query_key_value(_query, "z", _valuechar, 30) == ESP_OK) { std::string _zoom = std::string(_valuechar); - if (stoi(_zoom) != 0) + if (stoi(_zoom) != 0) { zoom = true; - else + } + else { zoom = false; + } } if (httpd_query_key_value(_query, "zm", _valuechar, 30) == ESP_OK) { std::string _zm = std::string(_valuechar); @@ -783,15 +760,24 @@ esp_err_t handler_editflow(httpd_req_t *req) Camera.SetZoom(zoom, zoommode, zoomoffsetx, zoomoffsety); Camera.SetBrightnessContrastSaturation(bri, con, sat, aelevel, grayscale, negative, aec2, sharpnessLevel); Camera.SetLEDIntensity(intens); - ESP_LOGD(TAG, "test_take - vor TakeImage"); - std::string zw = flowctrl.doSingleStep("[TakeImage]", _host); + + if (_task.compare("cam_settings") == 0) + { + ESP_LOGD(TAG, "Cam Settings set"); + _zw = "Cam Settings set"; + } + + else + { + ESP_LOGD(TAG, "test_take - vor TakeImage"); + _zw = flowctrl.doSingleStep("[TakeImage]", _host); + } + httpd_resp_set_hdr(req, "Access-Control-Allow-Origin", "*"); - httpd_resp_send(req, zw.c_str(), zw.length()); + httpd_resp_send(req, _zw.c_str(), _zw.length()); } - - - if (_task.compare("test_align") == 0) - { + + if (_task.compare("test_align") == 0) { std::string _host = ""; if (httpd_query_key_value(_query, "host", _valuechar, 30) == ESP_OK) { _host = std::string(_valuechar); @@ -812,8 +798,7 @@ esp_err_t handler_editflow(httpd_req_t *req) } -esp_err_t handler_statusflow(httpd_req_t *req) -{ +esp_err_t handler_statusflow(httpd_req_t *req) { #ifdef DEBUG_DETAIL_ON LogFile.WriteHeapInfo("handler_statusflow - Start"); #endif @@ -821,8 +806,7 @@ esp_err_t handler_statusflow(httpd_req_t *req) const char* resp_str; httpd_resp_set_hdr(req, "Access-Control-Allow-Origin", "*"); - if (bTaskAutoFlowCreated) - { + if (bTaskAutoFlowCreated) { #ifdef DEBUG_DETAIL_ON ESP_LOGD(TAG, "handler_statusflow: %s", req->uri); #endif @@ -832,8 +816,7 @@ esp_err_t handler_statusflow(httpd_req_t *req) httpd_resp_send(req, resp_str, HTTPD_RESP_USE_STRLEN); } - else - { + else { resp_str = "Flow task not yet created"; httpd_resp_send(req, resp_str, HTTPD_RESP_USE_STRLEN); } @@ -846,8 +829,7 @@ esp_err_t handler_statusflow(httpd_req_t *req) } -esp_err_t handler_cputemp(httpd_req_t *req) -{ +esp_err_t handler_cputemp(httpd_req_t *req) { #ifdef DEBUG_DETAIL_ON LogFile.WriteHeapInfo("handler_cputemp - Start"); #endif @@ -863,19 +845,16 @@ esp_err_t handler_cputemp(httpd_req_t *req) } -esp_err_t handler_rssi(httpd_req_t *req) -{ +esp_err_t handler_rssi(httpd_req_t *req) { #ifdef DEBUG_DETAIL_ON LogFile.WriteHeapInfo("handler_rssi - Start"); #endif - if (getWIFIisConnected()) - { + if (getWIFIisConnected()) { httpd_resp_set_hdr(req, "Access-Control-Allow-Origin", "*"); httpd_resp_send(req, std::to_string(get_WIFI_RSSI()).c_str(), HTTPD_RESP_USE_STRLEN); } - else - { + else { httpd_resp_send_err(req, HTTPD_403_FORBIDDEN, "WIFI not (yet) connected: REST API /rssi not available!"); return ESP_ERR_NOT_FOUND; } @@ -888,9 +867,7 @@ esp_err_t handler_rssi(httpd_req_t *req) } -esp_err_t handler_uptime(httpd_req_t *req) -{ - +esp_err_t handler_uptime(httpd_req_t *req) { #ifdef DEBUG_DETAIL_ON LogFile.WriteHeapInfo("handler_uptime - Start"); #endif @@ -908,8 +885,7 @@ esp_err_t handler_uptime(httpd_req_t *req) } -esp_err_t handler_prevalue(httpd_req_t *req) -{ +esp_err_t handler_prevalue(httpd_req_t *req) { #ifdef DEBUG_DETAIL_ON LogFile.WriteHeapInfo("handler_prevalue - Start"); ESP_LOGD(TAG, "handler_prevalue: %s", req->uri); @@ -938,7 +914,8 @@ esp_err_t handler_prevalue(httpd_req_t *req) ESP_LOGD(TAG, "Query: %s", _query); #endif - if (httpd_query_key_value(_query, "numbers", _numbersname, 50) != ESP_OK) { // If request is incomplete + if (httpd_query_key_value(_query, "numbers", _numbersname, 50) != ESP_OK) { + // If request is incomplete sReturnMessage = "E91: Query parameter incomplete or not valid!
" "Call /setPreValue to show REST API usage info and/or check documentation"; httpd_resp_send(req, sReturnMessage.c_str(), sReturnMessage.length()); @@ -951,12 +928,14 @@ esp_err_t handler_prevalue(httpd_req_t *req) #endif } } - else { // if no parameter is provided, print handler usage + else { + // if no parameter is provided, print handler usage httpd_resp_send(req, RESTUsageInfo.c_str(), RESTUsageInfo.length()); return ESP_OK; } - if (strlen(_value) == 0) { // If no value is povided --> return actual PreValue + if (strlen(_value) == 0) { + // If no value is povided --> return actual PreValue sReturnMessage = flowctrl.GetPrevalue(std::string(_numbersname)); if (sReturnMessage.empty()) { @@ -995,14 +974,12 @@ esp_err_t handler_prevalue(httpd_req_t *req) } -void task_autodoFlow(void *pvParameter) -{ +void task_autodoFlow(void *pvParameter) { int64_t fr_start, fr_delta_ms; bTaskAutoFlowCreated = true; - if (!isPlannedReboot && (esp_reset_reason() == ESP_RST_PANIC)) - { + if (!isPlannedReboot && (esp_reset_reason() == ESP_RST_PANIC)) { flowctrl.setActStatus("Initialization (delayed)"); //#ifdef ENABLE_MQTT //MQTTPublish(mqttServer_getMainTopic() + "/" + "status", "Initialization (delayed)", false); // Right now, not possible -> MQTT Service is going to be started later @@ -1016,8 +993,7 @@ void task_autodoFlow(void *pvParameter) flowctrl.setAutoStartInterval(auto_interval); autostartIsEnabled = flowctrl.getIsAutoStart(); - if (isSetupModusActive()) - { + if (isSetupModusActive()) { LogFile.WriteToFile(ESP_LOG_INFO, TAG, "We are in Setup Mode -> Not starting Auto Flow!"); autostartIsEnabled = false; std::string zw_time = getCurrentTimeString(LOGFILE_TIME_FORMAT); @@ -1031,22 +1007,19 @@ void task_autodoFlow(void *pvParameter) LogFile.WriteToFile(ESP_LOG_INFO, TAG, "Autostart is not enabled -> Not starting Flow"); } - while (autostartIsEnabled) - { + while (autostartIsEnabled) { LogFile.WriteToFile(ESP_LOG_DEBUG, TAG, "----------------------------------------------------------------"); // Clear separation between runs std::string _zw = "Round #" + std::to_string(++countRounds) + " started"; time_t roundStartTime = getUpTime(); LogFile.WriteToFile(ESP_LOG_INFO, TAG, _zw); fr_start = esp_timer_get_time(); - if (flowisrunning) - { + if (flowisrunning) { #ifdef DEBUG_DETAIL_ON ESP_LOGD(TAG, "Autoflow: doFlow is already running!"); #endif } - else - { + else { #ifdef DEBUG_DETAIL_ON ESP_LOGD(TAG, "Autoflow: doFlow is started"); #endif @@ -1086,16 +1059,16 @@ void task_autodoFlow(void *pvParameter) #endif fr_delta_ms = (esp_timer_get_time() - fr_start) / 1000; - if (auto_interval > fr_delta_ms) - { + + if (auto_interval > fr_delta_ms) { const TickType_t xDelay = (auto_interval - fr_delta_ms) / portTICK_PERIOD_MS; ESP_LOGD(TAG, "Autoflow: sleep for: %ldms", (long) xDelay); vTaskDelay( xDelay ); } } - while(1) // Keep flow task running to handle necessary sub tasks like reboot handler, etc.. - { + while(1) { + // Keep flow task running to handle necessary sub tasks like reboot handler, etc.. vTaskDelay(2000 / portTICK_PERIOD_MS); } @@ -1105,25 +1078,24 @@ void task_autodoFlow(void *pvParameter) } -void InitializeFlowTask() -{ +void InitializeFlowTask() { BaseType_t xReturned; ESP_LOGD(TAG, "getESPHeapInfo: %s", getESPHeapInfo().c_str()); uint32_t stackSize = 16 * 1024; xReturned = xTaskCreatePinnedToCore(&task_autodoFlow, "task_autodoFlow", stackSize, NULL, tskIDLE_PRIORITY+2, &xHandletask_autodoFlow, 0); - if( xReturned != pdPASS ) - { + + if( xReturned != pdPASS ) { LogFile.WriteToFile(ESP_LOG_ERROR, TAG, "Creation task_autodoFlow failed. Requested stack size:" + std::to_string(stackSize)); LogFile.WriteHeapInfo("Creation task_autodoFlow failed"); } + ESP_LOGD(TAG, "getESPHeapInfo: %s", getESPHeapInfo().c_str()); } -void register_server_main_flow_task_uri(httpd_handle_t server) -{ +void register_server_main_flow_task_uri(httpd_handle_t server) { ESP_LOGI(TAG, "server_main_flow_task - Registering URI handlers"); httpd_uri_t camuri = { }; @@ -1223,5 +1195,4 @@ void register_server_main_flow_task_uri(httpd_handle_t server) camuri.handler = handler_stream; camuri.user_ctx = (void*) "stream"; httpd_register_uri_handler(server, &camuri); - } diff --git a/sd-card/html/edit_alignment.html b/sd-card/html/edit_alignment.html index 5a2356eb..17864e21 100644 --- a/sd-card/html/edit_alignment.html +++ b/sd-card/html/edit_alignment.html @@ -162,37 +162,63 @@ diff --git a/sd-card/html/edit_config_param_template.html b/sd-card/html/edit_config_param_template.html index 0d268599..1ad7226d 100644 --- a/sd-card/html/edit_config_param_template.html +++ b/sd-card/html/edit_config_param_template.html @@ -1794,50 +1794,52 @@ - - + - diff --git a/sd-card/html/readconfigcommon.js b/sd-card/html/readconfigcommon.js index d7864587..70b5dda4 100644 --- a/sd-card/html/readconfigcommon.js +++ b/sd-card/html/readconfigcommon.js @@ -39,13 +39,11 @@ function createReader(file) { } - function ZerlegeZeile(input, delimiter = " =\t\r") { var Output = Array(0); // delimiter = " =,\t"; - /* The input can have multiple formats: * - key = value * - key = value1 value2 value3 ... @@ -82,7 +80,6 @@ function ZerlegeZeile(input, delimiter = " =\t\r") } return Output; - } @@ -110,7 +107,6 @@ function findDelimiterPos(input, delimiter) return pos; } - function trim(istring, adddelimiter) { @@ -247,19 +243,21 @@ function SaveCanvasToImage(_canvas, _filename, _delete = true, _domainname = "") } -function MakeContrastImageZW(zw, _enhance, _domainname){ - _filename = zw["name"].replace("/config/", "/img_tmp/"); - url = _domainname + "/editflow?task=cutref&in=/config/reference.jpg&out=" + _filename + "&x=" + zw["x"] + "&y=" + zw["y"] + "&dx=" + zw["dx"] + "&dy=" + zw["dy"]; +function MakeRefImageZW(zw, _enhance, _domainname){ + var _filename = zw["name"].replace("/config/", "/img_tmp/"); + + var url = _domainname + "/editflow?task=cutref&in=/config/reference.jpg&out=" + _filename + "&x=" + zw["x"] + "&y=" + zw["y"] + "&dx=" + zw["dx"] + "&dy=" + zw["dy"]; + if (_enhance == true){ url = url + "&enhance=true"; } var xhttp = new XMLHttpRequest(); + try { xhttp.open("GET", url, false); xhttp.send(); - } - catch (error){} + } catch (error){} if (xhttp.responseText == "CutImage Done") { firework.launch('Image Contrast got enhanced', 'success', 5000); @@ -269,28 +267,3 @@ function MakeContrastImageZW(zw, _enhance, _domainname){ return false; } } - - -function MakeRefZW(zw, _domainname){ - _filetarget = zw["name"].replace("/config/", "/img_tmp/"); - _filetarget = _filetarget.replace(".jpg", "_org.jpg"); - url = _domainname + "/editflow?task=cutref&in=/config/reference.jpg&out="+_filetarget+"&x=" + zw["x"] + "&y=" + zw["y"] + "&dx=" + zw["dx"] + "&dy=" + zw["dy"]; - var xhttp = new XMLHttpRequest(); - try { - xhttp.open("GET", url, false); - xhttp.send(); - } - catch (error){} - - if (xhttp.responseText == "CutImage Done") { - _filetarget2 = zw["name"].replace("/config/", "/img_tmp/"); - // _filetarget2 = _filetarget2.replace(".jpg", "_org.jpg"); - FileCopyOnServer(_filetarget, _filetarget2, _domainname); - firework.launch('Marker got updated', 'success', 5000); - return true; - } - else { - return false; - } -} - diff --git a/sd-card/html/readconfigparam.js b/sd-card/html/readconfigparam.js index 1be26ff2..641b94ec 100644 --- a/sd-card/html/readconfigparam.js +++ b/sd-card/html/readconfigparam.js @@ -467,8 +467,6 @@ function WriteConfigININew() } } - - config_split = new Array(0); for (var cat in param) { @@ -565,7 +563,6 @@ function WriteConfigININew() } - function isCommented(input) { let isComment = false; @@ -602,7 +599,6 @@ function getConfigCategory() { } - function ExtractROIs(_aktline, _type){ var linesplit = ZerlegeZeile(_aktline); abc = getNUMBERS(linesplit[0], _type); @@ -678,7 +674,6 @@ function getNUMBERS(_name, _type, _create = true) } - function CopyReferenceToImgTmp(_domainname) { for (index = 0; index < 2; ++index) @@ -700,7 +695,7 @@ function GetReferencesInfo(){ } -function UpdateConfigReference(_domainname){ +function UpdateConfigReferences(_domainname){ for (var index = 0; index < 2; ++index) { _filenamenach = REFERENCES[index]["name"]; @@ -712,11 +707,35 @@ function UpdateConfigReference(_domainname){ _filenamevon = _filenamevon.replace(".jpg", "_org.jpg"); FileDeleteOnServer(_filenamenach, _domainname); FileCopyOnServer(_filenamevon, _filenamenach, _domainname); - } } +function UpdateConfigReference(_anzneueref, _domainname){ + var index = 0; + + if (_anzneueref == 1) { + index = 0; + } + + else if (_anzneueref == 2) { + index = 1; + } + + _filenamenach = REFERENCES[index]["name"]; + _filenamevon = _filenamenach.replace("/config/", "/img_tmp/"); + + FileDeleteOnServer(_filenamenach, _domainname); + FileCopyOnServer(_filenamevon, _filenamenach, _domainname); + + _filenamenach = _filenamenach.replace(".jpg", "_org.jpg"); + _filenamevon = _filenamevon.replace(".jpg", "_org.jpg"); + + FileDeleteOnServer(_filenamenach, _domainname); + FileCopyOnServer(_filenamevon, _filenamenach, _domainname); +} + + function getNUMBERInfo(){ return NUMBERS; }