15 #include <avr/eeprom.h> 16 #include "avr_helper.h" 26 __flash
const menu_t *current_menu = &main_menu;
29 void reset_menu_timeout(
void){
33 uint8_t lock_current_menu_item = 0;
35 void show_press_encoder_msg(int32_t d){
39 static void paint_menu_item(uint8_t mi){
43 switch(current_menu->items[mi].
type){
51 tmp = *(current_menu->items[mi].
u8);
55 tmp = *(current_menu->items[mi].
s8);
59 tmp = *(current_menu->items[mi].
u16);
63 tmp = *(current_menu->items[mi].
s16);
67 show_press_encoder_msg(0);
70 if(current_menu->items[mi].
paint != NULL){
71 current_menu->items[mi].
paint(current_menu->items[mi].
data);
79 static void edit_menu_item(uint8_t mi, int8_t delta){
81 switch(current_menu->items[mi].
type){
84 tmp = *(current_menu->items[mi].
u8);
85 tmp += delta * current_menu->items[mi].
step;
86 if(tmp > current_menu->items[mi].
u8_max)
87 tmp = current_menu->items[mi].
u8_max;
88 if(tmp < current_menu->items[mi].u8_min)
89 tmp = current_menu->items[mi].
u8_min;
90 *(current_menu->items[mi].
u8) = tmp;
93 tmp = *(current_menu->items[mi].
s8);
94 tmp += delta * current_menu->items[mi].
step;
95 if(tmp > current_menu->items[mi].
s8_max)
96 tmp = current_menu->items[mi].
s8_max;
97 if(tmp < current_menu->items[mi].s8_min)
98 tmp = current_menu->items[mi].
s8_min;
99 *(current_menu->items[mi].
s8) = tmp;
102 tmp = *(current_menu->items[mi].
u16);
103 tmp += delta * current_menu->items[mi].
step;
104 if(tmp > current_menu->items[mi].
u16_max)
105 tmp = current_menu->items[mi].
u16_max;
106 if(tmp < current_menu->items[mi].u16_min)
107 tmp = current_menu->items[mi].
u16_min;
108 *(current_menu->items[mi].
u16) = tmp;
111 tmp = *(current_menu->items[mi].
s16);
112 tmp += delta * current_menu->items[mi].
step;
113 if(tmp > current_menu->items[mi].
s16_max)
114 tmp = current_menu->items[mi].
s16_max;
115 if(tmp < current_menu->items[mi].s16_min)
116 tmp = current_menu->items[mi].
s16_min;
117 *(current_menu->items[mi].
s16) = tmp;
120 *(current_menu->items[mi].
onoff) = ! *(current_menu->items[mi].
onoff);
123 if(current_menu->items[mi].
edit != NULL){
124 current_menu->items[mi].
edit(delta, current_menu->items[mi].
data);
137 static uint8_t menu_item;
141 paint_menu_item(menu_item);
148 if(current_menu->items[menu_item].
type ==
MI_USER){
149 if(current_menu->items[menu_item].
action != NULL){
150 result = current_menu->items[menu_item].
action(current_menu->items[menu_item].
data);
157 if(current_menu->items[menu_item].
submenu != NULL){
158 current_menu = current_menu->items[menu_item].
submenu;
166 edit_menu_item(menu_item, 1);
169 edit_menu_item(menu_item, -1);
172 if(lock_current_menu_item)
break;
174 if(menu_item >= current_menu->item_count) menu_item = 0;
185 current_menu = &main_menu;
void center_str(uint8_t row, char *src)
вывод строки по центру дисплея
control_t get_control(void)
получение управляющей команды
void show_scale(uint8_t row, uint8_t val)
отображение псевдографической горизонтальной шкалы
Вспомогательные эффекты ЖКИ
void reset_power_timeout(void)
сброс таймаута автоотключения питания
описания урганов управления
void update_config(void)
обновление EEPROM с параметрами настройки
void show_number(int32_t num)
вывод десятичного числа
void show_rpad_str_p(uint8_t line, const char *src)
вывод строки из flash с очисткой дисплея справа