From 569182250231ab33f0658766272ff9c134924c5a Mon Sep 17 00:00:00 2001 From: John Date: Sat, 30 Apr 2022 15:41:10 +0200 Subject: [PATCH] add enum for scan status --- src/ebusd/datahandler.h | 12 ++++++++++-- src/ebusd/mainloop.cpp | 14 ++++++-------- src/ebusd/mqtthandler.cpp | 17 ++++++++++++++--- src/ebusd/mqtthandler.h | 4 ++-- 4 files changed, 32 insertions(+), 15 deletions(-) diff --git a/src/ebusd/datahandler.h b/src/ebusd/datahandler.h index b7dd223a..a4f161e8 100755 --- a/src/ebusd/datahandler.h +++ b/src/ebusd/datahandler.h @@ -40,6 +40,14 @@ using std::map; class UserInfo; class DataHandler; +/** type for scan status. */ +enum scanStatus_t { + SCAN_STATUS_NONE = 0, //!< no scan status (never started before) + SCAN_STATUS_RUNNING = 1, //!< scan is currently running + SCAN_STATUS_FINISHED = 2, //!< scan is finished +}; + + /** * Helper function for getting the argp definition for all known @a DataHandler instances. * @return a pointer to the argp_child structure, or nullptr. @@ -162,9 +170,9 @@ class DataSink : virtual public DataHandler { /** * Notify the sink of the latest scan status. - * @param scanStatus a string describing the scan status. + * @param scanStatus the scan status. */ - virtual void notifyScanStatus(const string& scanStatus) {} + virtual void notifyScanStatus(scanStatus_t scanStatus) {} protected: /** the allowed access levels. */ diff --git a/src/ebusd/mainloop.cpp b/src/ebusd/mainloop.cpp index 89479bb2..f49bc139 100644 --- a/src/ebusd/mainloop.cpp +++ b/src/ebusd/mainloop.cpp @@ -218,7 +218,7 @@ void MainLoop::run() { time_t lastTaskRun, now, start, lastSignal = 0, since, sinkSince = 1, nextCheckRun; int taskDelay = 5; symbol_t lastScanAddress = 0; // 0 is known to be a master - string lastScanStatus = "."; + scanStatus_t lastScanStatus = SCAN_STATUS_NONE; time(&now); start = now; lastTaskRun = now; @@ -254,7 +254,7 @@ void MainLoop::run() { } if (m_scanConfig) { bool loadDelay = false; - string scanStatus = lastScanStatus; + scanStatus_t scanStatus = lastScanStatus; if (m_initialScan != ESC && reload && m_busHandler->hasSignal()) { loadDelay = true; result_t result; @@ -262,7 +262,7 @@ void MainLoop::run() { logNotice(lf_main, "starting initial full scan"); result = m_busHandler->startScan(true, "*"); if (result == RESULT_OK) { - scanStatus = "running"; + scanStatus = SCAN_STATUS_RUNNING; } } else if (m_initialScan == BROADCAST) { logNotice(lf_main, "starting initial broadcast scan"); @@ -286,7 +286,7 @@ void MainLoop::run() { if (m_busHandler->formatScanResult(m_initialScan, false, &ret)) { logNotice(lf_main, "initial scan result: %s", ret.str().c_str()); } - scanStatus = "running"; + scanStatus = SCAN_STATUS_RUNNING; } } if (result != RESULT_OK) { @@ -301,11 +301,9 @@ void MainLoop::run() { if (lastScanAddress == SYN) { taskDelay = 5; lastScanAddress = 0; - scanStatus = "finished"; + scanStatus = SCAN_STATUS_FINISHED; } else { - if (scanStatus != "running") { - scanStatus = "running"; - } + scanStatus = SCAN_STATUS_RUNNING; nextCheckRun = now + CHECK_INITIAL_DELAY; result_t result = m_busHandler->scanAndWait(lastScanAddress, true); taskDelay = (result == RESULT_ERR_NO_SIGNAL) ? 10 : 1; diff --git a/src/ebusd/mqtthandler.cpp b/src/ebusd/mqtthandler.cpp index 052aed1e..d71211e2 100755 --- a/src/ebusd/mqtthandler.cpp +++ b/src/ebusd/mqtthandler.cpp @@ -479,7 +479,7 @@ void splitFields(const string& str, vector* row); MqttHandler::MqttHandler(UserInfo* userInfo, BusHandler* busHandler, MessageMap* messages) : DataSink(userInfo, "mqtt"), DataSource(busHandler), WaitThread(), m_messages(messages), m_connected(false), - m_initialConnectFailed(false), m_lastUpdateCheckResult("."), m_lastScanStatus("."), m_lastErrorLogTime(0) { + m_initialConnectFailed(false), m_lastUpdateCheckResult("."), m_lastScanStatus(SCAN_STATUS_NONE), m_lastErrorLogTime(0) { m_definitionsSince = 0; m_mosquitto = nullptr; bool hasIntegration = false; @@ -831,12 +831,23 @@ void MqttHandler::notifyUpdateCheckResult(const string& checkResult) { } } -void MqttHandler::notifyScanStatus(const string& scanStatus) { +void MqttHandler::notifyScanStatus(scanStatus_t scanStatus) { if (scanStatus != m_lastScanStatus) { m_lastScanStatus = scanStatus; if (m_globalTopic.has("name")) { const string sep = (g_publishFormat & OF_JSON) ? "\"" : ""; - publishTopic(m_globalTopic.get("", "scan"), sep + (scanStatus.empty() ? "OK" : scanStatus) + sep, true); + string message; + switch (scanStatus) { + case SCAN_STATUS_RUNNING: + message = "running"; + break; + case SCAN_STATUS_FINISHED: + message = "finished"; + break; + default: + message = "OK"; + } + publishTopic(m_globalTopic.get("", "scan"), sep + message + sep, true); } } } diff --git a/src/ebusd/mqtthandler.h b/src/ebusd/mqtthandler.h index e7a4f563..ba0f887f 100644 --- a/src/ebusd/mqtthandler.h +++ b/src/ebusd/mqtthandler.h @@ -95,7 +95,7 @@ class MqttHandler : public DataSink, public DataSource, public WaitThread { void notifyUpdateCheckResult(const string& checkResult) override; // @copydoc - void notifyScanStatus(const string& scanStatus) override; + void notifyScanStatus(scanStatus_t scanStatus) override; protected: // @copydoc @@ -209,7 +209,7 @@ class MqttHandler : public DataSink, public DataSource, public WaitThread { string m_lastUpdateCheckResult; /** the last scan status. */ - string m_lastScanStatus; + scanStatus_t m_lastScanStatus; /** the last system time when a communication error was logged. */ time_t m_lastErrorLogTime;