Добавить общую графику прибора DEIF для HDMI

This commit is contained in:
2026-11-06 21:21:36 +03:00
parent 491fa11569
commit cf75c5c855
3 changed files with 63 additions and 0 deletions
+1
View File
@@ -45,6 +45,7 @@ set(SETPROTOCOL_LEGACY_SOURCES
set(SETPROTOCOL_SOURCES
src/deif_xdi.c # Общий DEIF-кодек и автомат SLAVE используются всеми платформами.
src/set_deif_gauge.c # Переносимая графика DEIF повторяет шкалы и движитель SETGUI без зависимости от Qt.
src/set_regmap.c
src/set_emu_ump.c
src/set_emu_tms.c
+25
View File
@@ -0,0 +1,25 @@
#ifndef SET_DEIF_GAUGE_H /* Переносимая геометрия прибора подключается один раз. */
#define SET_DEIF_GAUGE_H /* Макет повторяет прибор SETGUI в логических пикселях 600×510. */
#include <stdint.h> /* Цвет передаётся как RGB888 независимо от framebuffer и Qt. */
#include "pcan_abi.h" /* Общий макрос экспорта делает графику доступной также из shared-библиотеки. */
#ifdef __cplusplus /* Qt/C++ использует те же немодифицированные имена функций C. */
extern "C" { /* Открывает переносимый ABI без привязки к конкретному GUI. */
#endif /* Начало совместимости с C++. */
typedef struct { /* Снимок содержит физические значения, а не wire-байты CAN. */
double value[6], angle, command[3]; /* Порядок value совпадает с deif_xdi.h; command: POWER%, RPM%, градусы. */
unsigned valid, angle_kind, commands, role, node, source; /* Маска свежести, тип угла, черновики и подписи роли/узлов; role=2 обозначает MASTER, остальные роли показывают принятые данные. */
} setp_deif_gauge_values; /* Выбор свежести и фактического угла выполняет общее протокольное ядро. */
typedef struct { /* Потребитель преобразует логические пиксели в свой холст. */
void *user; /* Непрозрачный контекст рисующего порта. */
void (*line)(void *,double,double,double,double,uint32_t,double); /* Отрезок x1/y1/x2/y2, RGB888 и толщина в пикселях эталона; порт сохраняет сглаживание при масштабировании. */
void (*rect)(void *,double,double,double,double,uint32_t); /* Прямоугольник x/y/w/h; ненулевой старший байт задаёт alpha, RGB888 без старшего байта означает непрозрачный цвет. */
void (*text)(void *,double,double,double,double,const char *,uint32_t,double,unsigned); /* UTF-8, RGB888, размер Qt в пунктах; style: 1 bold, 2 stretch80%, 4 left, 8 right. */
void (*triangle)(void *,const double *,uint32_t); /* Три пары логических координат задают заполненные указатели движителя без копирования геометрии в порт. */
void (*azimuth)(void *,unsigned); /* Значение 1 включает одинаковый масштаб X/Y вокруг центра компаса; 0 возвращает растяжение остальных элементов макета. */
} setp_deif_gauge_painter; /* Ни Qt, ни Linux, ни выделение памяти не входят в контракт. */
PCAN_ABI_API void setp_deif_gauge_draw(const setp_deif_gauge_values *v,const setp_deif_gauge_painter *p); /* Рисует шкалы и движитель; ноль азимута направлен вверх. */
PCAN_ABI_API int setp_deif_gauge_hit(double x,double y,double *value); /* Возвращает 1=POWER%, 2=RPM%, 3=угол либо 0 вне активных зон. */
#ifdef __cplusplus /* Закрывает единый ABI при включении заголовка из Qt/C++. */
} /* Конец extern C. */
#endif /* Чистая C99-сборка не получает лишних конструкций C++. */
#endif /* Конец общего интерфейса графики DEIF. */
File diff suppressed because one or more lines are too long