1 #ifndef __MENU_H__
2 #define __MENU_H__
3 
4 #include "key.h"
5 #include "sh1106.h"
6 #include <stdio.h>
7 #include "aos/kernel.h"
8 extern uint8_t g_haasedu_boardname;
9 extern int g_haasboard_is_k1c;
10 
11 typedef int MENU_ID_TYP;
12 
13 #ifdef EDU_TAG
14 #undef EDU_TAG
15 #endif
16 #define EDU_TAG "eduk1_demo"
17 typedef enum {
18     MENU_TASK_IDLE,
19     MENU_TASK_RUNNING,
20     MENU_TASK_INITING,
21     MENU_TASK_UNINITING
22 } MENU_TASK_STATE_ENU;
23 
24 typedef struct {
25     int (*pMenuTaskInit)(void);
26     int (*pMenuTaskEnd)(void);
27     // user don't need to care
28     MENU_TASK_STATE_ENU menu_task_state;
29 } MENU_TASK_TYP;
30 
31 typedef enum {
32     MENU_COVER_NONE,
33     MENU_COVER_TEXT,
34     MENU_COVER_IMG,
35     MENU_COVER_FUNC,
36 } MENU_COVER_MODE_ENU;
37 
38 typedef struct {
39     MENU_COVER_MODE_ENU MenuCoverMode;
40     char *text;
41     icon_t *img;
42     void (*draw_func)(int *);
43     int draw_index;
44 } MENU_COVER_TYP;
45 
46 typedef struct {
47     struct MenuTyp **pMenuList;
48     uint8_t          MenuListSize;
49 } MENU_LIST_TYP;
50 
51 typedef struct MenuTyp {
52     char *MenuName;                  // 菜单名称字符串
53     MENU_COVER_TYP *MenuCover;                 // 封面
54     MENU_TASK_TYP *pMenuTask;                  // 指向菜单任务的指针
55     void (*pTaskKeyDeal)(key_code_t key_code); // 指向菜单任务按键处理函数的指针
56     struct MENU_LIST_TYP *pChildrenList; // 指向子菜单列表的指针
57 
58     // user don't need to care
59     MENU_ID_TYP     MenuID;
60     struct MenuTyp *pParent; // 指向上层菜单的指针
61     struct MenuTyp *pChild; // 指向子菜单的指针
62     struct MenuTyp *pRight; // 指向右菜单的指针
63     struct MenuTyp *pLeft;  // 指向左菜单的指针
64 } MENU_TYP;
65 
66 void menu_init(void);
67 static void public_key_event_handle(key_code_t key_code);
68 static void menu_key_event_handle(key_code_t key_code);
69 static void menu_show_cover_task(void);
70 static int menu_task_start(MENU_TYP *pMenu);
71 static int menu_task_exit(MENU_TYP *pMenu);
72 
73 static uint8_t icon_data_skip_left[16] = {0x00, 0x00, 0x80, 0x60, 0x18, 0x04,
74                                           0x02, 0x00, 0x00, 0x00, 0x01, 0x06,
75                                           0x18, 0x20, 0x40, 0x00};
76 static icon_t  icon_skip_left          = {icon_data_skip_left, 8, 16};
77 
78 static uint8_t icon_data_skip_right[16] = {0x00, 0x02, 0x04, 0x18, 0x60, 0x80,
79                                            0x00, 0x00, 0x00, 0x40, 0x20, 0x18,
80                                            0x06, 0x01, 0x00, 0x00};
81 static icon_t  icon_skip_right          = {icon_data_skip_right, 8, 16};
82 
83 static uint8_t icon_data_error_ufo[75] = {
84     0x18, 0x24, 0x00, 0x18, 0x24, 0x00, 0x18, 0x38, 0x2A, 0xFB, 0x3B,
85     0x2B, 0xBB, 0x3B, 0x2B, 0xFB, 0x3A, 0x38, 0x18, 0x00, 0x24, 0x18,
86     0x00, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
87     0x80, 0x00, 0xA8, 0x00, 0xAA, 0x00, 0xA8, 0x00, 0x80, 0x00, 0x00,
88     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xA8,
89     0xA8, 0x02, 0xF8, 0x2A, 0xD0, 0x02, 0xF8, 0x2A, 0xD0, 0x02, 0x70,
90     0x8A, 0x70, 0x02, 0xF8, 0x28, 0xD0, 0x00, 0x00, 0x00};
91 static icon_t icon_error_ufo = {icon_data_error_ufo, 25, 24};
92 
93 static uint8_t icon_data_loadlines0_32_32[] = {
94     0x00, 0x00, 0x00, 0x00, 0x30, 0x70, 0xE0, 0xC0, 0x80, 0x00, 0x00, 0x00,
95     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
96     0xC0, 0xE0, 0x70, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80,
97     0x80, 0x80, 0x80, 0x81, 0x83, 0x87, 0x8E, 0x04, 0x00, 0x00, 0x00, 0x00,
98     0x00, 0x00, 0x00, 0x00, 0x04, 0x8E, 0x87, 0x83, 0x81, 0x80, 0x80, 0x80,
99     0x80, 0x80, 0x80, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x81,
100     0xC1, 0xE1, 0x71, 0x20, 0x00, 0x00, 0x00, 0xE0, 0xE0, 0x00, 0x00, 0x00,
101     0x20, 0x71, 0xE1, 0xC1, 0x81, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00,
102     0x00, 0x00, 0x00, 0x00, 0x0C, 0x0E, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00,
103     0x00, 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
104     0x03, 0x07, 0x0E, 0x0C, 0x00, 0x00, 0x00, 0x00};
105 static icon_t icon_loadlines0_32_32 = {icon_data_loadlines0_32_32, 32, 32};
106 
107 static uint8_t icon_data_loadlines1_32_32[] = {
108     0x00, 0x00, 0x00, 0x00, 0x30, 0x70, 0xE0, 0xC0, 0x80, 0x00, 0x00, 0x00,
109     0x00, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
110     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80,
111     0x80, 0x80, 0x80, 0x81, 0x83, 0x87, 0x8E, 0x04, 0x00, 0x00, 0x00, 0x07,
112     0x07, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
113     0x80, 0x80, 0x80, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x81,
114     0xC1, 0xE1, 0x71, 0x20, 0x00, 0x00, 0x00, 0xE0, 0xE0, 0x00, 0x00, 0x00,
115     0x20, 0x71, 0xE1, 0xC1, 0x81, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00,
116     0x00, 0x00, 0x00, 0x00, 0x0C, 0x0E, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00,
117     0x00, 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
118     0x03, 0x07, 0x0E, 0x0C, 0x00, 0x00, 0x00, 0x00};
119 static icon_t icon_loadlines1_32_32 = {icon_data_loadlines1_32_32, 32, 32};
120 
121 static uint8_t icon_data_loadlines2_32_32[] = {
122     0x00, 0x00, 0x00, 0x00, 0x30, 0x70, 0xE0, 0xC0, 0x80, 0x00, 0x00, 0x00,
123     0x00, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
124     0xC0, 0xE0, 0x70, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80,
125     0x80, 0x80, 0x80, 0x81, 0x83, 0x87, 0x8E, 0x04, 0x00, 0x00, 0x00, 0x07,
126     0x07, 0x00, 0x00, 0x00, 0x04, 0x0E, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00,
127     0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x81,
128     0xC1, 0xE1, 0x71, 0x20, 0x00, 0x00, 0x00, 0xE0, 0xE0, 0x00, 0x00, 0x00,
129     0x20, 0x70, 0xE0, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
130     0x00, 0x00, 0x00, 0x00, 0x0C, 0x0E, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00,
131     0x00, 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
132     0x03, 0x07, 0x0E, 0x0C, 0x00, 0x00, 0x00, 0x00};
133 static icon_t icon_loadlines2_32_32 = {icon_data_loadlines2_32_32, 32, 32};
134 
135 static uint8_t icon_data_loadlines3_32_32[] = {
136     0x00, 0x00, 0x00, 0x00, 0x30, 0x70, 0xE0, 0xC0, 0x80, 0x00, 0x00, 0x00,
137     0x00, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
138     0xC0, 0xE0, 0x70, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80,
139     0x80, 0x80, 0x80, 0x81, 0x83, 0x87, 0x8E, 0x04, 0x00, 0x00, 0x00, 0x07,
140     0x07, 0x00, 0x00, 0x00, 0x04, 0x8E, 0x87, 0x83, 0x81, 0x80, 0x80, 0x80,
141     0x80, 0x80, 0x80, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x81,
142     0xC1, 0xE1, 0x71, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
143     0x20, 0x71, 0xE1, 0xC1, 0x81, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00,
144     0x00, 0x00, 0x00, 0x00, 0x0C, 0x0E, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00,
145     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
146     0x03, 0x07, 0x0E, 0x0C, 0x00, 0x00, 0x00, 0x00};
147 static icon_t icon_loadlines3_32_32 = {icon_data_loadlines3_32_32, 32, 32};
148 
149 static uint8_t icon_data_loadlines4_32_32[] = {
150     0x00, 0x00, 0x00, 0x00, 0x30, 0x70, 0xE0, 0xC0, 0x80, 0x00, 0x00, 0x00,
151     0x00, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
152     0xC0, 0xE0, 0x70, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80,
153     0x80, 0x80, 0x80, 0x81, 0x83, 0x87, 0x8E, 0x04, 0x00, 0x00, 0x00, 0x07,
154     0x07, 0x00, 0x00, 0x00, 0x04, 0x8E, 0x87, 0x83, 0x81, 0x80, 0x80, 0x80,
155     0x80, 0x80, 0x80, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x81,
156     0xC1, 0xE1, 0x71, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
157     0x20, 0x71, 0xE1, 0xC1, 0x81, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00,
158     0x00, 0x00, 0x00, 0x00, 0x0C, 0x0E, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00,
159     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
160     0x03, 0x07, 0x0E, 0x0C, 0x00, 0x00, 0x00, 0x00};
161 static icon_t icon_loadlines4_32_32 = {icon_data_loadlines4_32_32, 32, 32};
162 
163 static uint8_t icon_data_loadlines5_32_32[] = {
164     0x00, 0x00, 0x00, 0x00, 0x30, 0x70, 0xE0, 0xC0, 0x80, 0x00, 0x00, 0x00,
165     0x00, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
166     0xC0, 0xE0, 0x70, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80,
167     0x80, 0x80, 0x80, 0x81, 0x83, 0x87, 0x8E, 0x04, 0x00, 0x00, 0x00, 0x07,
168     0x07, 0x00, 0x00, 0x00, 0x04, 0x8E, 0x87, 0x83, 0x81, 0x80, 0x80, 0x80,
169     0x80, 0x80, 0x80, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
170     0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xE0, 0x00, 0x00, 0x00,
171     0x20, 0x71, 0xE1, 0xC1, 0x81, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00,
172     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
173     0x00, 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
174     0x03, 0x07, 0x0E, 0x0C, 0x00, 0x00, 0x00, 0x00};
175 static icon_t icon_loadlines5_32_32 = {icon_data_loadlines5_32_32, 32, 32};
176 
177 static uint8_t icon_data_loadlines6_32_32[] = {
178     0x00, 0x00, 0x00, 0x00, 0x30, 0x70, 0xE0, 0xC0, 0x80, 0x00, 0x00, 0x00,
179     0x00, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
180     0xC0, 0xE0, 0x70, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
181     0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x0E, 0x04, 0x00, 0x00, 0x00, 0x07,
182     0x07, 0x00, 0x00, 0x00, 0x04, 0x8E, 0x87, 0x83, 0x81, 0x80, 0x80, 0x80,
183     0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
184     0xC0, 0xE0, 0x70, 0x20, 0x00, 0x00, 0x00, 0xE0, 0xE0, 0x00, 0x00, 0x00,
185     0x20, 0x71, 0xE1, 0xC1, 0x81, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00,
186     0x00, 0x00, 0x00, 0x00, 0x0C, 0x0E, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00,
187     0x00, 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
188     0x03, 0x07, 0x0E, 0x0C, 0x00, 0x00, 0x00, 0x00};
189 static icon_t icon_loadlines6_32_32 = {icon_data_loadlines6_32_32, 32, 32};
190 
191 static uint8_t icon_data_loadlines7_32_32[] = {
192     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
193     0x00, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
194     0xC0, 0xE0, 0x70, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80,
195     0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x07,
196     0x07, 0x00, 0x00, 0x00, 0x04, 0x8E, 0x87, 0x83, 0x81, 0x80, 0x80, 0x80,
197     0x80, 0x80, 0x80, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x81,
198     0xC1, 0xE1, 0x71, 0x20, 0x00, 0x00, 0x00, 0xE0, 0xE0, 0x00, 0x00, 0x00,
199     0x20, 0x71, 0xE1, 0xC1, 0x81, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00,
200     0x00, 0x00, 0x00, 0x00, 0x0C, 0x0E, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00,
201     0x00, 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
202     0x03, 0x07, 0x0E, 0x0C, 0x00, 0x00, 0x00, 0x00};
203 static icon_t icon_loadlines7_32_32 = {icon_data_loadlines7_32_32, 32, 32};
204 
205 #endif
206