Files
templates/c/set-protocol/include/set_deif_gauge.h
T

26 lines
3.8 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#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. */