ソースを参照

Начал добавлять меню.

unknown 2 週間 前
コミット
5486fdcfea

+ 59 - 0
desk/modules/menu/menu.cpp

@@ -0,0 +1,59 @@
+#include "stm32g4xx_hal.h"
+#include "cmsis_os.h"
+#include "menu_tree.h"
+#include <stdio.h>
+
+#define MON_DELAY           1000
+
+osThreadId  menu_update_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(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);
+    }
+}

+ 219 - 0
desk/modules/menu/menu.h

@@ -0,0 +1,219 @@
+#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
+

+ 33 - 0
desk/modules/menu/menu_functions.cpp

@@ -0,0 +1,33 @@
+#include "stm32g4xx_hal.h"
+#include "menu_functions.h"
+#include "menu_items.h"
+//#include "menu_string.h"
+#include "menu.h"
+#include "config.h"
+#include "FreeRTOS.h"
+#include "task.h"
+
+
+
+extern bool update_flag;
+
+
+//
+void button_left(void)
+{
+    //menuChange(PREVIOUS, false);
+}
+
+
+//
+void button_right(void)
+{
+    //menuChange(NEXT, true);
+}
+
+
+//
+void button_enter(void)
+{
+    //menuFocus();
+}

+ 6 - 0
desk/modules/menu/menu_functions.h

@@ -0,0 +1,6 @@
+#ifndef __MENU_FUNCTIONS_H
+#define __MENU_FUNCTIONS_H
+
+
+#endif  // __MENU_FUNCTIONS_H
+

+ 28 - 0
desk/modules/menu/menu_items.cpp

@@ -0,0 +1,28 @@
+#include "stm32g4xx_hal.h"
+#include "menu_items.h"
+#include "FreeRTOS.h"
+#include "task.h"
+#include <string.h>
+#include <stdio.h>
+
+#define DBG if(1)
+
+extern bool update_flag;
+
+
+// Главное меню. Отрисовка.
+void draw_main(uint8_t sel)
+{
+    static int counter = 0;
+    update_flag = true;
+    
+    DBG printf("\033c");
+    DBG printf("This is mani screen\r\n");
+    DBG printf("Test counter: %u\r\n", counter++);
+    
+}
+
+
+//
+void empty_func_bool(bool) {}
+

+ 8 - 0
desk/modules/menu/menu_items.h

@@ -0,0 +1,8 @@
+#ifndef __MENU_ITEMS_H
+#define __MENU_ITEMS_H
+
+
+
+
+#endif  // __MENU_ITEMS_H
+

+ 39 - 0
desk/modules/menu/menu_tree.h

@@ -0,0 +1,39 @@
+#ifndef __MENU_TREE_H
+#define __MENU_TREE_H
+
+
+#include "menu.h"
+
+typedef enum
+{
+    MCELL_NULL = 0,
+    MCELL_MAIN,
+    MCELL_K1,
+} menu_cell_t;
+
+
+menuItem NULL_MENU = {0, 0, 0, 0, 0, false, 0, 0};
+
+MAKE_MENU(NULL_ENTRY, NULL_MENU, NULL_MENU, NULL_MENU, NULL_MENU, MCELL_NULL, false, 0, 0);
+
+//                		NEXT,      		PREVIOUS,    	 PARENT,     	CHILD
+
+//MAKE_MENU(Name, Next, Previous, Parent, Child, Select, Focus, func_draw, func_change)
+
+// Главный экран. Отображает пройденный путь, статус и т.п
+MAKE_MENU(m_main, 		NULL_ENTRY,		NULL_ENTRY,		NULL_ENTRY,		NULL_ENTRY,
+          MCELL_MAIN,   false,          &draw_main,     &empty_func_bool);
+
+
+
+// Экран настроек. Пока отобразим один условный коэффициент.
+
+#if 0
+// Коэффициент 1
+MAKE_MENU(m_k1, 		NULL_ENTRY,     NULL_ENTRY,   	NULL_ENTRY,		NULL_ENTRY,	0, 		&draw_main,
+		 &button_up_1,  &button_down_1,	&empty_func, 	&button_start_measuring,    &button_start_measuring);
+#endif
+
+
+#endif  // __MENU_TREE_H
+

+ 4 - 0
desk/user/main.cpp

@@ -7,6 +7,7 @@
 #include "oled_common.h"
 #include "settings.h"
 #include "uart_bridge.h"
+#include "menu.h"
 #include <stdio.h>
 
 void SystemClock_Config(void);
@@ -65,6 +66,9 @@ void StartupTask(void const *argument)
     
     // Дисплей
     init_oled();
+    
+    // Меню
+    menu_init();
 #if 0    
     for (;;) {
         HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_6);

+ 12 - 0
project/ewarm/desk/desk.ewp

@@ -2503,6 +2503,18 @@
             <file>
                 <name>$PROJ_DIR$\..\..\..\desk\modules\menu\control.cpp</name>
             </file>
+            <file>
+                <name>$PROJ_DIR$\..\..\..\desk\modules\menu\menu.cpp</name>
+            </file>
+            <file>
+                <name>$PROJ_DIR$\..\..\..\desk\modules\menu\menu_functions.cpp</name>
+            </file>
+            <file>
+                <name>$PROJ_DIR$\..\..\..\desk\modules\menu\menu_items.cpp</name>
+            </file>
+            <file>
+                <name>$PROJ_DIR$\..\..\..\desk\modules\menu\menu_tree.h</name>
+            </file>
         </group>
         <group>
             <name>settings</name>

+ 12 - 0
project/ewarm/desk/desk.ewt

@@ -3203,6 +3203,18 @@
             <file>
                 <name>$PROJ_DIR$\..\..\..\desk\modules\menu\control.cpp</name>
             </file>
+            <file>
+                <name>$PROJ_DIR$\..\..\..\desk\modules\menu\menu.cpp</name>
+            </file>
+            <file>
+                <name>$PROJ_DIR$\..\..\..\desk\modules\menu\menu_functions.cpp</name>
+            </file>
+            <file>
+                <name>$PROJ_DIR$\..\..\..\desk\modules\menu\menu_items.cpp</name>
+            </file>
+            <file>
+                <name>$PROJ_DIR$\..\..\..\desk\modules\menu\menu_tree.h</name>
+            </file>
         </group>
         <group>
             <name>settings</name>

ファイルの差分が大きいため隠しています
+ 1 - 2
project/ewarm/settings/tuber.wsdt


この差分においてかなりの量のファイルが変更されているため、一部のファイルを表示していません