5#include <runtime/runtime.hpp>
13#include "ConsoleApp.hpp"
19#include "libraries/interfaces/UartLinux.hpp"
20#include "protocols/lacte/VirtualBoard.hpp"
21#include "sqlite_bus_adapter.hpp"
76 :
public insitech::ConsoleApp<LacteApp, insitech::DefaultTerminationReasons,
157 friend insitech::AppShell<LacteApp, insitech::DefaultTerminationReasons,
180 m_args_.bin_path = std::move(path);
194 m_db_path_override_ = std::move(path);
206 apply_door_signal(lost);
209 auto run_impl(std::istream& input = std::cin) -> int;
229 void attach_virtual_board();
243 void connect_bus(
const AppContext& ctx, uint32_t address,
244 const std::string& name, uint32_t ui_notifier_address);
250 void apply_door_signal(
bool door_signal_lost);
256 std::shared_ptr<lacte::bus::ModelBusClient> m_bus_;
282 mutable std::mutex m_ui_notifier_mx_;
283 std::shared_ptr<lacte::bus::UiBusClient> m_ui_notifier_;
308 std::atomic_bool m_tearing_down_{
false};
315 auto health() ->
bool override {
319 auto get_param(
const std::string& param) -> std::optional<int>
override {
326 auto set_param(
const std::string& param,
const int value) ->
bool override {
338 auto get_snapshot() -> lacte::bus::BoardSnapshot
override {
339 return build_snapshot(runtime().current());
359 auto build_snapshot(
const BoardData& board_state)
const
360 -> lacte::bus::BoardSnapshot;
369 std::string test_mode;
370 std::string flash_path;
371 std::string device_name;
372 std::chrono::milliseconds check_update_interval{};
373 std::string bin_path;
374 bool virtual_mode{
false};
388 int64_t log_min_level{};
397 std::string m_db_path_override_;
413 std::shared_ptr<AppDb> m_storage_;
422 std::optional<AppDbBusAdapter> m_storage_bus_;
427 std::unique_ptr<lacte::ui::UiApp> m_ui_;
430 std::mutex m_stop_mx_;
431 std::mutex m_gui_mx_;
456 explicit LacteApp(AppContext& ctx,
const std::string& bin_path =
"");
458 ~LacteApp()
override =
default;
460 void user_signal_handler(
int signum)
override;
462 void try_to_update();
471 void ensure_dictionary_up_to_date()
const;
473 void ping_test(std::istream& cin, std::ostream& cout);
Схема БД приложения (модели + сгенерированные meta-описания полей/имени таблицы) и AppDb — тонкая обё...
Собственные типы runtime-полей платы и кортеж RuntimeFields, называющий весь набор - и ничего больше.
std::tuple< BoardOnlineStatus, proto::lacte::InfoPacketType, proto::lacte::BoardErrorDiff, proto::lacte::VersionPacketType, proto::lacte::UIDPacketType, proto::lacte::RFIDNumberType, proto::lacte::MagicWord, proto::lacte::LacteId, proto::lacte::LacteSn, proto::lacte::ProductVolume, proto::lacte::ProdDate, proto::lacte::ProductShelfLife, proto::lacte::UsageTime, proto::lacte::McuUid, proto::lacte::MachineSn, proto::lacte::ActivationTime, proto::lacte::MilkCounter, proto::lacte::TimeCounter, SoftVersion, proto::lacte::AerationParam > RuntimeFields
BoardModel - связь с самой платой lacte, и больше ничего: проводной протокол (m_host_proto),...
typename detail::BoardReadingOf< RuntimeFields >::type BoardData
insitech::database::SqliteBusAdapter< insitech::database::meta::StatMeta, insitech::database::meta::ServiceInfoMeta, insitech::database::meta::ErrorsMeta, insitech::database::meta::DictionaryMeta > AppDbBusAdapter
insitech::runtime::Runtime< RuntimeFields > LacteRuntime
ModelBusClient: собственный клиент Model на шине lacte - создаётся и принадлежит самому Model (см.
Совмещённое состояние системы из ДВУХ независимых каналов связи: online-статуса платы lacte (proto::l...
UiBusClient: собственный клиент UI на шине lacte - создаётся и принадлежит самому UiApp (см.
proto::interface::UartLinuxInterface m_hmi_uart_interface
proto::back_board_proto::HeadFlags last_flags_
BoardModel m_board_model_
void set_db_path_for_tests(std::string path)
proto::interface::UartLinuxInterface m_uart_interface
std::shared_ptr< insitech::LoggerBusClient > m_client_
void reset_test_mode_for_tests()
void set_bin_path_for_tests(std::string path)
auto run_impl(std::istream &input=std::cin) -> int
static uint8_t hmi_tx_buffer[K_HMI_TX_BUFFER_SIZE]
static constexpr std::size_t K_HMI_TX_BUFFER_SIZE
std::unique_ptr< proto::lacte::VirtualBoard > m_virtual_board
auto get_bus() const -> lacte::bus::ModelBusClient *
Шинный клиент, на котором это приложение обслуживает запросы ModelBusHandler, если таковой есть - тот...
proto::back_board_proto::HeadPacketTypes last_packet_
void set_door_signal_lost_for_tests(const bool lost)
proto::back_board_proto::BackBoardProtocol< hmi_tx_buffer, hmi_tx_buffer > m_hmi_protocol_
lacte::SystemStateResolver m_system_state_
auto get_bin_path() const -> std::string
Хранит последний известный HMI-сигнал двери (единственная величина, которую сегодня физически некому ...
Серверный контракт: реализуйте эти методы, и ModelBusClient::ServeModel() будет их обслуживать.
virtual auto health() -> bool=0
Здоров ли бэкенд/диспенсер.
virtual auto get_rfid_data() -> RfidData=0
Формирует сырые данные текущей приложенной RFID-карты (см.
virtual auto get_snapshot() -> BoardSnapshot=0
Формирует текущий снапшот устройства.
Протокольная конечная точка (endpoint) для связи с задней платой (back board) поверх кадров головной ...
constexpr auto K_PARAM_AERATION
Имя параметра бэкенда (и ключ заголовка снапшота) для уровня аэрации.