From 99876d175b5835110415485d8fc946d96ca2d184 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20=C3=96hrstr=C3=B6m?= Date: Mon, 10 Aug 2020 21:20:54 +0200 Subject: [PATCH] Do not stop wmbusmeters while resetting. --- src/serial.cc | 7 ++++--- src/wmbus.cc | 14 ++++++-------- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/src/serial.cc b/src/serial.cc index 6b13dcb..831fcba 100644 --- a/src/serial.cc +++ b/src/serial.cc @@ -694,7 +694,6 @@ void SerialCommunicationManagerImp::stop() { debug("(serial) stopping manager\n"); running_ = false; - assert(0); if (main_thread_ != 0) { if (signalsInstalled()) @@ -846,8 +845,9 @@ void *SerialCommunicationManagerImp::eventLoop() } pthread_mutex_unlock(&devices_lock_); - if (!all_working) + if (!all_working && resetting_ == false) { + debug("(serial) not all devices working, emergency exit!\n"); stop(); break; } @@ -968,8 +968,9 @@ void *SerialCommunicationManagerImp::eventLoop() } } - if (non_working.size() > 0) + if (non_working.size() > 0 && resetting_ == false) { + debug("(serial) non working devices found, exiting.\n"); stop(); break; } diff --git a/src/wmbus.cc b/src/wmbus.cc index 3a695d6..4100104 100644 --- a/src/wmbus.cc +++ b/src/wmbus.cc @@ -3401,9 +3401,8 @@ bool WMBusCommonImplementation::reset() resetting = true; serial()->manager()->resetInitiated(); serial()->close(); - fprintf(stderr, "STOPPED serial, sleeping....\n"); - usleep(3000*1000); // Sleep for two seconds. - fprintf(stderr, "DONE sleeping\n"); + // Give the device 3 seconds to shut down properly. + usleep(3000*1000); } AccessCheck rc = serial()->open(false); @@ -3418,7 +3417,6 @@ bool WMBusCommonImplementation::reset() // Invoke any other device specific resets for this device. deviceReset(); - debug("(GURKA) %d\n", resetting); if (resetting) serial()->manager()->resetCompleted(); // If init, then no link modes are configured. @@ -3437,7 +3435,7 @@ void WMBusCommonImplementation::checkStatus() { string msg; strprintf(msg, "Hit max protocol errors(%d)! Resetting device %s %s!", protocol_error_count_, toString(type()), device().c_str()); - logAlarm("PROTOCOL_ERROR", msg); + logAlarm("device_failure", msg); bool ok = reset(); if (ok) { @@ -3447,7 +3445,7 @@ void WMBusCommonImplementation::checkStatus() } strprintf(msg, "Failed to reset wmbus device %s %s! Emergency exit!", toString(type()), device().c_str()); - logAlarm("WMBUS_DEVICE_ERROR", msg); + logAlarm("device_failure", msg); manager_->stop(); return; } @@ -3480,7 +3478,7 @@ void WMBusCommonImplementation::checkStatus() timeout_, now.c_str(), expected_activity_.c_str(), since, toString(type()), device().c_str()); - logAlarm("TIMEOUT_ERROR", msg); + logAlarm("inactivity", msg); bool ok = reset(); if (ok) @@ -3490,7 +3488,7 @@ void WMBusCommonImplementation::checkStatus() else { strprintf(msg, "Failed to reset wmbus device %s %s! Emergency exit!", toString(type()), device().c_str()); - logAlarm("WMBUS_DEVICE_ERROR", msg); + logAlarm("device_failure", msg); manager_->stop(); } }