#ifndef __MENU_H
#define __MENU_H


//
void menu_init(void);


//
uint8_t menu_get_current_id(void);


typedef struct 
{
	void        *Next;
	void        *Previous;
	void        *Parent;
	void        *Child;
	uint8_t     Select;
    bool        Focus;
	void        (*func_draw)(uint8_t);
    void        (*func_change)(bool);
} menuItem;


extern menuItem* selectedMenuItem;
 

//
#define MAKE_MENU(Name, Next, Previous, Parent, Child, Select, Focus, func_draw, func_change) \
    extern menuItem Next;     \
	extern menuItem Previous; \
	extern menuItem Parent;   \
	extern menuItem Child;  \
	menuItem Name = {(void*) &Next, (void*)&Previous, (void*)&Parent, (void*)&Child, (uint8_t)Select, bool(Focus), func_draw, func_change}

#define PREVIOUS   (selectedMenuItem->Previous)
#define NEXT       (selectedMenuItem->Next)
#define PARENT     (selectedMenuItem->Parent)
#define CHILD      (selectedMenuItem->Child)
#define SELECT	   (selectedMenuItem->Select)

    
// Главное меню. Отрисовка.
void draw_main(uint8_t sel);
    

//
void empty_func_bool(bool);
    
 
    
    
    
    
    
    
void empty_func(void);
void draw_logo(uint8_t sel);



// Измерения. Отрисовка.
void draw_meas(uint8_t sel);

// Диалог для измерения дозы
void draw_dose_dialog(uint8_t sel);

// Настройка порогов
void draw_threshold(uint8_t sel);

// Время. Отрисовка.
void draw_time(uint8_t sel);

// Дата. Отрисовка.
void draw_data(uint8_t sel);

// Подсветка. Отрисовка.
void draw_blight(uint8_t sel);

// Звук. Отрисовка.
void draw_sound(uint8_t sel);

// Обновление. Отрисовка.
void draw_update(uint8_t sel);

// Журнал. Отрисовка.
void draw_log(uint8_t sel);

// -------------------------------------------------------------------------- //

//
void menu_change_blight(uint8_t sel);
//
void menu_change_sound(uint8_t sel);
//
void menu_change_log(uint8_t sel);

// -------------------------------------------------------------------------- //
// Menu functions



//
void button_sel_1(void);
//
void button_gamma_thr_set_sel(void);
//
void button_beta_thr_set_sel(void);
//
void button_dose_thr_set_sel(void);
//
void button_thr_sel(void);
//
void button_log_sel(void);
//
void button_time_sel(void);
//
void button_time_set_sel(void);
//
void button_data_set_sel(void);
//
void button_start_measuring(void);
//
void button_start_dose(void);
//
void button_settings(void);
//
void button_shutdown(void);
//
void button_down_1(void);
//
void button_up_down_dose(void);
//
void button_up_1(void);
//
void but_time_up(void);
//
void but_time_down(void);
//
void but_exit_1(void);
//
void but_exit_meas(void);
//
void button_sel_blight(void);
//
void button_exit_blight(void);
//
void button_exit_sound(void);
//
void button_exit_log(void);
//
void button_sel_sound(void);
//
void button_sel_update(void);
//
void button_sel_log(void);
//
void button_sel_log_period(void);
//
void draw_gamma_tr_up(void);
//
void draw_gamma_tr_down(void);
//
void draw_gamma_right(void);
//
void draw_gamma_left(void);
//
void draw_beta_tr_up(void);
//
void draw_beta_tr_down(void);
//
void draw_beta_right(void);
//
void draw_beta_left(void);
//
void draw_dose_tr_up(void);
//
void draw_dose_tr_down(void);
//
void draw_dose_right(void);
//
void draw_dose_left(void);
//
void draw_time_up(void);
//
void draw_time_down(void);
//
void draw_data_up(void);
//
void draw_data_down(void);
//
void draw_time_right(void);
//
void draw_time_left(void);
//
void draw_log_up(void);
//
void draw_log_down(void);
//
void draw_log_right(void);
//
void draw_log_left(void);


//
//osStatus menu_block(uint32_t ms);

//
void menu_unblock(void);


extern void menuChange(const menuItem* NewMenu);

//extern osTimerId       v_sound_timer_handle;


#endif  // __MENU_H

