26 lines
3.8 KiB
C
26 lines
3.8 KiB
C
#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. */
|