menu.cpp 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. #include "stm32g4xx_hal.h"
  2. #include "cmsis_os.h"
  3. #include "menu_tree.h"
  4. #include <stdio.h>
  5. #define MON_DELAY 1000
  6. osThreadId menu_update_handle;
  7. menuItem* selectedMenuItem;
  8. bool update_flag = false;
  9. //static void vMenuEvent(void const *params);
  10. static void vUpdate(void const *params);
  11. //
  12. void menu_init(void)
  13. {
  14. #if 0
  15. // Очередь для событий кнопок
  16. osMessageQDef(vButEventQueue, 1, uint8_t);
  17. v_queue_event = osMessageCreate(osMessageQ(vButEventQueue), NULL);
  18. // Обработка событий
  19. osThreadDef(M_Event_Thread, vMenuEvent, osPriorityNormal, 0, 6*configMINIMAL_STACK_SIZE);
  20. v_task_event_handle = osThreadCreate(osThread(M_Event_Thread), NULL);
  21. #endif
  22. // Обновление меню
  23. osThreadDef(menu_up_thr, vUpdate, osPriorityNormal, 0, 6*configMINIMAL_STACK_SIZE);
  24. menu_update_handle = osThreadCreate(osThread(menu_up_thr), NULL);
  25. selectedMenuItem = (menuItem *) &m_main;
  26. (*(selectedMenuItem->func_draw))(selectedMenuItem->Select);
  27. #if 0
  28. osTimerDef(vSoundTimer, v_sound_tim);
  29. v_sound_timer_handle = osTimerCreate(osTimer(vSoundTimer), osTimerOnce, NULL);
  30. osMutexDef(menu_mut);
  31. v_menu_mutex_id = osMutexCreate(osMutex(menu_mut));
  32. #endif
  33. }
  34. //
  35. static void vUpdate(void const *params)
  36. {
  37. for (;;)
  38. {
  39. // Текущий экран меню нужно перерисовать
  40. if (update_flag)
  41. {
  42. (*(selectedMenuItem->func_draw))(selectedMenuItem->Select);
  43. }
  44. osDelay(MON_DELAY);
  45. }
  46. }