diff --git a/core/Publisher.cxx b/core/Publisher.cxx index 6aba885..acf2b7c 100644 --- a/core/Publisher.cxx +++ b/core/Publisher.cxx @@ -333,12 +333,19 @@ bool PublisherApp::print_receipt(const std::map& msg) return true; } +#define WEIGH_IDLE 0 +#define WEIGH_LIC 1 +#define WEIGH_STABLE 2 +#define WEIGH_PRINT 3 +#define WEIGH_ERROR 4 +#define WEIGH_LEAVE 5 + void PublisherApp::run() { - uint8_t send_sum = 0; - uint8_t is_print = 0; std::string license_no = ""; float stable_weight = 0; + int weigh_state = WEIGH_IDLE; + uint16_t weigh_timer = 0; while (!is_stopped()) { @@ -357,6 +364,7 @@ void PublisherApp::run() if (license_no == "") { license_no = info.License(); + weigh_state = WEIGH_LIC; } } else if (!DdsMsgData::ScaleInfo_queue_.empty()) @@ -378,19 +386,18 @@ void PublisherApp::run() else { stable_weight = 0; - send_sum = 0; } if (info.HasVehicle() == 0) { license_no = ""; - if (is_print == 1) + if (weigh_state == WEIGH_LEAVE) { std::this_thread::sleep_for(std::chrono::seconds(5)); std::map ctrl; ctrl["FrontBar"] = "down"; bar_ctrl(ctrl); - is_print = 0; + weigh_state = WEIGH_IDLE; } } } @@ -464,7 +471,7 @@ void PublisherApp::run() print_receipt(print_msg); - is_print = 1; + weigh_state = WEIGH_LEAVE; std::map ctrl; ctrl["FrontBar"] = "up"; bar_ctrl(ctrl); @@ -477,7 +484,7 @@ void PublisherApp::run() dds_lock.unlock(); std::this_thread::sleep_for(std::chrono::seconds(3)); - send_sum = 0; + weigh_state = WEIGH_ERROR; } else { @@ -486,17 +493,43 @@ void PublisherApp::run() } // logic - if (send_sum == 0) + switch (weigh_state) { - if ((stable_weight != 0) && (license_no != "")) - { - DEBUG("send summary"); - WeighingSystem::SummaryUpdate info; - info.License() = license_no; - info.StableValue() = stable_weight; - summary_writer_->write(&info); - send_sum = 1; - } + case WEIGH_IDLE: + weigh_timer = 0; + break; + case WEIGH_LIC: + if (weigh_timer++ > 600) + { + DEBUG("timer reach"); + DEBUG("license_no " << license_no); + DEBUG("stable_weight " << stable_weight); + weigh_state = WEIGH_STABLE; + weigh_timer = 0; + } + break; + case WEIGH_STABLE: + if ((stable_weight != 0) && (license_no != "")) + { + DEBUG("send summary"); + WeighingSystem::SummaryUpdate info; + info.License() = license_no; + info.StableValue() = stable_weight; + summary_writer_->write(&info); + weigh_state = WEIGH_PRINT; + } + break; + case WEIGH_PRINT: + break; + case WEIGH_ERROR: + std::this_thread::sleep_for(std::chrono::seconds(3)); + weigh_state = WEIGH_STABLE; + break; + case WEIGH_LEAVE: + break; + default: + weigh_state = WEIGH_IDLE; + break; } // Wait for period or stop event