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