SMART OS v2.8.0
smart_hmi.h
См. документацию.
1
11#ifndef SMART_HMI_H
12#define SMART_HMI_H
13
14#include <stdint.h>
15
17#define ITEM_FLAG_RO 0x00
19#define ITEM_FLAG_RW 0x01
21#define ITEM_FLAG_SU 0x02
22
24typedef enum {
46
48typedef struct {
49 const char *format;
50 uint32_t type;
51 uint32_t flags;
52 uint32_t param;
53 void *ptr;
55
57typedef struct {
58 const char *title;
59 const uint32_t count;
61} menu_t;
62
64typedef struct {
65 void *value_ptr;
66 uint32_t count;
67 const char * const *strings;
69
71#define MENU_PROTOTYPE(name) \
72 const menu_t name;
73
75#define MENU_ITEMS_COUNT(menu) (sizeof(menu) / sizeof(menu_item_t))
76
79#define MENU_ITEM(text, type, flags, param, ptr) \
80{text, type, (flags), (param), (void *)(ptr)}
81
84#define BEGIN_MENU(name) \
85 const menu_item_t name##_items[] = {
86
89#define END_MENU(name, text) \
90 }; \
91 const menu_t name = { \
92 text, \
93 MENU_ITEMS_COUNT(name##_items), \
94 name##_items \
95 };
96
98typedef enum {
100 DIALOG_OK
102
104typedef enum {
108} dlg_type_t;
109
112#define BEGIN_STRING_LIST(name) const char * const list_##name[] = {
113
116#define END_STRING_LIST };
117
119#define LIST_ITEMS_COUNT(list) (sizeof(list) / sizeof(char *))
120
122#define DECLARE_COMBOBOX(name, slot, lst) const combobox_t name = { \
123 .value_ptr = slot, \
124 .count = LIST_ITEMS_COUNT(list_##lst), \
125 .strings = list_##lst, };
126
128typedef enum {
132
135
141int menu_handler(const menu_t *m);
142
150dlg_result_t hmi_message_box(const char *title, const char *msg, dlg_type_t type);
151
156
158typedef enum {
159 KB_NULL = 0x000,
160 KB_ESC = 0x001,
161 KB_ENTER = 0x002,
162 KB_UP = 0x004,
163 KB_DOWN = 0x008,
164 KB_LEFT = 0x010,
165 KB_RIGHT = 0x020,
166 KB_F1 = 0x040,
167 KB_F2 = 0x080,
168 KB_STAR = 0x100,
169} keycode_t;
170
176
182
187
191void lcd_fill();
192
199void lcd_draw_dialog(const char *title, const char *text, dlg_type_t type);
200
208void lcd_draw_rectangle(uint32_t x, uint32_t y, uint32_t w, uint32_t h);
209
218void lcd_draw_bitmap(const uint8_t *xbm, uint8_t w, uint8_t h, uint8_t x, uint8_t y);
219
225void lcd_invert_block(int col, int row);
226
232
238void lcd_goto(uint8_t col, uint8_t row);
239
240void lcd_puts(const char *s);
241void lcd_printf(const char *fmtstr, ...);
242
243#endif
menu_item_type_t
Типы элементов меню
Definition: smart_hmi.h:24
@ ITEM_TYPE_SUBMENU
Подменю
Definition: smart_hmi.h:44
@ ITEM_TYPE_UPTIME
Форматированный вывод интервала времени
Definition: smart_hmi.h:40
@ ITEM_TYPE_STRING
Форматированный вывод строки
Definition: smart_hmi.h:32
@ ITEM_TYPE_ACTION
Действие (вызов обработчика)
Definition: smart_hmi.h:43
@ ITEM_TYPE_BIT_P
Форматированный вывод бита в битовом поле через указатель
Definition: smart_hmi.h:26
@ ITEM_TYPE_CHECK
Чек-бокс (вкл/выкл)
Definition: smart_hmi.h:35
@ ITEM_TYPE_DATE
Форматированный вывод даты
Definition: smart_hmi.h:37
@ ITEM_TYPE_FLOAT_P
Форматированный вывод вещественного числа через указатель
Definition: smart_hmi.h:31
@ ITEM_TYPE_IPV4
IPv4 IP-адрес
Definition: smart_hmi.h:42
@ ITEM_TYPE_INT
Форматированный вывод целого числа
Definition: smart_hmi.h:28
@ ITEM_TYPE_BIT
Форматированный вывод бита в битовом поле
Definition: smart_hmi.h:25
@ ITEM_TYPE_FLOAT
Форматированный вывод вещественного числа
Definition: smart_hmi.h:30
@ ITEM_TYPE_INT_P
Форматированный вывод целого числа через указатель
Definition: smart_hmi.h:29
@ ITEM_TYPE_SETTING
Уставка (переменная с метаданными)
Definition: smart_hmi.h:34
@ ITEM_TYPE_HEADER
Разделитель/заголовок группы элементов
Definition: smart_hmi.h:41
@ ITEM_TYPE_DATETIME
Форматированный вывод даты и времени события
Definition: smart_hmi.h:39
@ ITEM_TYPE_STRING_P
Форматированный вывод строки через указатель
Definition: smart_hmi.h:33
@ ITEM_TYPE_TIME
Форматированный вывод времени
Definition: smart_hmi.h:38
@ ITEM_TYPE_COMBO
Комбо-бокс (выбор из списка вариантов)
Definition: smart_hmi.h:36
@ ITEM_TYPE_BIT8
Форматированный вывод битового поля
Definition: smart_hmi.h:27
void lcd_draw_dialog(const char *title, const char *text, dlg_type_t type)
Отрисовать шаблон диалогового окна
dlg_result_t
Коды результата работы диалога
Definition: smart_hmi.h:98
@ DIALOG_CANCEL
Отмена
Definition: smart_hmi.h:99
@ DIALOG_OK
ОК
Definition: smart_hmi.h:100
dlg_result_t hmi_message_box(const char *title, const char *msg, dlg_type_t type)
Вызов диалога с текстовым сообщением
void lcd_clear()
Очистить экран
keycode_t kbd_get()
Получить клавишу из буфера клавиатуры
int menu_handler(const menu_t *m)
Обработчик отрисовки меню HMI.
void lcd_invert_block(int col, int row)
Инвертировать пиксели знакоместа стандартного шрифта 6х8.
hmi_event_t hmi_wait()
Ожидать события HMI.
void hmi_service()
Обработка сервисных задач, связанных с HMI.
keycode_t
Коды клавиш
Definition: smart_hmi.h:158
void lcd_buffer_clear()
Очистить буфера экрана без перерисовки
hmi_event_t
События HMI.
Definition: smart_hmi.h:128
@ HMI_EVENT_REDRAW
Перерисовка
Definition: smart_hmi.h:129
@ HMI_EVENT_KEY
Нажатие кноки
Definition: smart_hmi.h:130
void lcd_fill()
Отрисовать буфер на экране
void lcd_draw_rectangle(uint32_t x, uint32_t y, uint32_t w, uint32_t h)
Отрисовать прямоугольник
void lcd_goto(uint8_t col, uint8_t row)
Переместить курсор в позицию (col:row)
dlg_type_t
Тип диалога
Definition: smart_hmi.h:104
@ DLG_SAVECANCEL
Сохранить/Отмена
Definition: smart_hmi.h:106
@ DLG_YESNO
Да/Нет
Definition: smart_hmi.h:107
@ DLG_MSGBOX
Простое сообщение (ОК)
Definition: smart_hmi.h:105
keycode_t kbd_peek()
Проверить клавишу в буфере без изъятия
void lcd_draw_bitmap(const uint8_t *xbm, uint8_t w, uint8_t h, uint8_t x, uint8_t y)
Отрисовать изображение в формате XBM.
Метаданные элемента меню ComboBox.
Definition: smart_hmi.h:64
uint32_t count
Кол-ко элементов
Definition: smart_hmi.h:66
void * value_ptr
Указатель индекс выбранного элемента
Definition: smart_hmi.h:65
const char *const * strings
Указатель на список элементов
Definition: smart_hmi.h:67
Структура описания элемента меню
Definition: smart_hmi.h:48
const char * format
Формат-строка (в стиле printf())
Definition: smart_hmi.h:49
uint32_t flags
Флаги
Definition: smart_hmi.h:51
uint32_t param
Параметр типа элемента
Definition: smart_hmi.h:52
uint32_t type
Тип элемента меню menu_item_type_t.
Definition: smart_hmi.h:50
void * ptr
Указатель на блок данных
Definition: smart_hmi.h:53
Структура описания меню
Definition: smart_hmi.h:57
const char * title
Заголовок
Definition: smart_hmi.h:58
const uint32_t count
Кол-во элементов
Definition: smart_hmi.h:59
const menu_item_t * items
Массив элементов
Definition: smart_hmi.h:60