menu.cpp 1.8 KB

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