25 return std::to_string(*value) +
"%";
33 std::ostringstream out;
34 out <<
"0x" << std::hex << *value;
92 : m_bus_(
bus), m_runtime_(runtime) {}
95 std::scoped_lock lock(m_mutex_);
97 if (!m_last_health_) {
98 m_runtime_.set_enabled(
false);
107 std::scoped_lock lock(m_mutex_);
109 m_runtime_.apply_snapshot(*
snapshot);
114 std::scoped_lock lock(m_mutex_);
116 m_runtime_.apply_snapshot(*
snapshot);
117 m_runtime_.set_aeration(
snapshot->aeration);
122 std::scoped_lock lock(m_mutex_);
125 if (!m_last_health_) {
126 m_status_ =
"door open ignored: lacte board is offline";
134 m_runtime_.set_enabled(
true);
135 m_status_ =
"door opened: ui enabled";
139 std::scoped_lock lock(m_mutex_);
140 m_door_open_ =
false;
141 if (m_runtime_.enabled()) {
145 m_runtime_.set_enabled(
false);
146 m_status_ =
"door closed: ui disabled";
152 std::scoped_lock lock(m_mutex_);
153 m_requested_board_online_ = !m_requested_board_online_;
154 if (m_bus_.set_test_board_online(m_requested_board_online_,
156 m_status_ = m_requested_board_online_ ?
"test board connected"
157 :
"test board disconnected";
159 m_status_ =
"board toggle is available only with virtual backend";
166 std::scoped_lock lock(m_mutex_);
168 m_status_ =
"aeration changed locally";
174 std::scoped_lock lock(m_mutex_);
177 m_status_ =
"aeration sent to backend";
181 std::scoped_lock lock(m_mutex_);
184 m_status_ =
"snapshot refreshed";
188 std::scoped_lock lock(m_mutex_);
189 m_runtime_.set_enabled(
false);
193 std::scoped_lock lock(m_mutex_);
194 return m_runtime_.aeration();
200 std::scoped_lock lock(m_mutex_);
205 state.
aeration = m_runtime_.aeration();
207 if (
const auto snapshot = m_runtime_.last_snapshot()) {
216 if (!
snapshot->system_state.empty()) {
224 std::recursive_mutex m_mutex_;
227 bool m_door_open_{
false};
228 bool m_requested_board_online_{
true};
229 bool m_last_health_{
false};
230 std::string m_status_{
"connected"};
UiBusClient: собственный клиент UI на шине lacte - создаётся и принадлежит самому UiApp (см.
UI-состояние, управляемое push-сообщениями от бэкенда (см.
ConsoleModel(bus::UiBusClient &bus, bus::UiRuntime &runtime)
void set_aeration(const int value)
static constexpr auto K_BUS_OP_TIMEOUT
static constexpr int K_MAX_AERATION_PERCENT
static constexpr auto K_BUS_SLOW_OP_TIMEOUT
auto snapshot() -> DisplayState
void adjust_aeration(const int delta)
void refresh_snapshot_with_aeration()
constexpr auto K_PARAM_AERATION
Имя параметра бэкенда (и ключ заголовка снапшота) для уровня аэрации.
auto optional_text(const std::optional< std::uint64_t > &value) -> std::string
std::string milk_system_sn