lacteApp
C++17 service for Lacte hardware
Loading...
Searching...
No Matches
FramebufferUi.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <unistd.h>
4
5#include "ui/UiApp.hpp"
6
7namespace lacte::ui {
8
9// Процесс framebuffer UI для целевого устройства: рисует GUI молочной дверцы
10// напрямую в /dev/fb0 через TinyGui (см. LacteApp/ui/framebuffer/lacte_gui),
11// принимает touch-ввод и синхронизирует открытие/закрытие дверцы с платой
12// HMI по UART. Имеет смысл только на целевой (Linux) сборке. Здесь
13// реализован только exec() — подключение к шине и жизненный цикл приходят
14// из UiApp. См. FramebufferUi.cpp.
15class FramebufferUi : public UiApp {
16 public:
17 using UiApp::UiApp;
18 ~FramebufferUi() override {
19 stop();
20 } // останавливаем поток UI, прежде чем нас не станет
21
22 protected:
23 auto exec() -> int override;
24};
25
26// true только тогда, когда это Linux-сборка и присутствуют все устройства,
27// нужные этому UI (framebuffer, touch-ввод, HMI UART). Лаунчер (LacteApp)
28// использует эту функцию, чтобы решить, стоит ли вообще запускать
29// framebuffer UI — так что рабочая станция или CI-машина, у которых нет
30// HMI-обвязки, никогда его не запускают. Сделана inline (не в .cpp), чтобы
31// вызывающим, которым нужна только эта проверка, не приходилось линковать
32// весь framebuffer UI.
33inline auto framebuffer_interfaces_available() -> bool {
34#ifdef __linux__
35 return access("/dev/fb0", F_OK) == 0 &&
36 access("/dev/input/event1", F_OK) == 0 &&
37 access("/dev/ptyhmi-sniff", F_OK) == 0;
38#else
39 return false;
40#endif
41}
42
43// true только на Linux-сборке, когда присутствует HMI UART-устройство -
44// LacteApp (не какой-либо конкретный UI, см. собственный doc-комментарий
45// SystemState.hpp) использует эту функцию, чтобы решить, стоит ли вообще
46// открывать m_hmi_uart_interface: рабочая станция или CI-машина без
47// HMI-обвязки никогда этого не делает. Тот же путь устройства, что уже
48// входит в собственную проверку FramebufferUi'я выше (сама эта функция
49// намеренно НЕ переиспользует hmi_interface_available() внутри себя -
50// framebuffer UI сохраняет собственное, независимое условие запуска, не
51// связанное с тем, читает ли LacteApp HMI - см. doc-комментарий класса
52// LacteApp о том, что UI больше вообще не знает о HMI).
53inline auto hmi_interface_available() -> bool {
54#ifdef __linux__
55 return access("/dev/ptyhmi-sniff", F_OK) == 0;
56#else
57 return false;
58#endif
59}
60
61} // namespace lacte::ui
UiApp(const AppContext &ctx, const uint32_t address, const std::string &name)
Definition UiApp.hpp:52
auto exec() -> int override
UiApp(const AppContext &ctx, const uint32_t address, const std::string &name)
Definition UiApp.hpp:52
auto hmi_interface_available() -> bool
auto framebuffer_interfaces_available() -> bool