#include "stm32g4xx_hal.h"
#include "cmsis_os.h"
#include "menu_tree.h"
#include <stdio.h>

#define MON_DELAY           1000

osThreadId  menu_update_handle;
osThreadId  menu_control_handle;

menuItem* selectedMenuItem;
bool update_flag = false;

//static void vMenuEvent(void const *params);
static void vUpdate(void const *params);


//
void menu_init(void)
{
#if 0  
    // Очередь для событий кнопок
    osMessageQDef(vButEventQueue, 1, uint8_t);
    v_queue_event = osMessageCreate(osMessageQ(vButEventQueue), NULL);
    
    // Обработка событий
    osThreadDef(M_Event_Thread, vMenuEvent, osPriorityNormal, 0, 6*configMINIMAL_STACK_SIZE);
    v_task_event_handle = osThreadCreate(osThread(M_Event_Thread), NULL);
#endif
    
    osThreadDef(control_thr, vControl, osPriorityNormal, 0, 6*configMINIMAL_STACK_SIZE);
    menu_update_handle = osThreadCreate(osThread(control_thr), NULL);
    
    // Обновление меню
    osThreadDef(menu_up_thr, vUpdate, osPriorityNormal, 0, 6*configMINIMAL_STACK_SIZE);
    menu_update_handle = osThreadCreate(osThread(menu_up_thr), NULL);
    
    selectedMenuItem = (menuItem *) &m_main;
    (*(selectedMenuItem->func_draw))(selectedMenuItem->Select);

#if 0        
    osTimerDef(vSoundTimer, v_sound_tim);
	v_sound_timer_handle = osTimerCreate(osTimer(vSoundTimer), osTimerOnce, NULL);
    
    osMutexDef(menu_mut);
    v_menu_mutex_id = osMutexCreate(osMutex(menu_mut));      
#endif    
}

//
static void vUpdate(void const *params)
{
    for (;;)
    {
        // Текущий экран меню нужно перерисовать
        if (update_flag)
        {
            (*(selectedMenuItem->func_draw))(selectedMenuItem->Select);
        }
        
        osDelay(MON_DELAY);
    }
}