| 1 | |
|---|
| 2 | #include "DHL_OSAL.h" |
|---|
| 3 | #include "DHL_OSAL_Config.h" |
|---|
| 4 | #include "DHL_DBG.h" |
|---|
| 5 | |
|---|
| 6 | #define __DEFINE_DMG_STR__ |
|---|
| 7 | #include "DMG_Menu.h" |
|---|
| 8 | #undef __DEFINE_DMG_STR__ |
|---|
| 9 | |
|---|
| 10 | //#include <string.h> |
|---|
| 11 | //#include <string.h> |
|---|
| 12 | |
|---|
| 13 | |
|---|
| 14 | DHL_MODULE("GRP_M", 1); |
|---|
| 15 | |
|---|
| 16 | #define TIMER_NOUSE ((UINT32)-1) |
|---|
| 17 | |
|---|
| 18 | #define TIMER_ID_TIMEOUT MAX_NUM_TIMER |
|---|
| 19 | |
|---|
| 20 | #define NUM_MSGQ 16 |
|---|
| 21 | |
|---|
| 22 | #define MENU_TASK_PRIO TASK_PRI_MENU |
|---|
| 23 | #define MENU_STACK_SIZE 16384 |
|---|
| 24 | |
|---|
| 25 | #define USE_OLNY_ONE_INPUT_KEY 1 |
|---|
| 26 | //¿ÀÁ÷ ÇϳªÀÇ ÀԷ Ű¸¸À» ÀνÄÇÔ -> Ű ó¸®°¡ ´Ê¾î¼ ¹öÆÛ¿¡ ½×ÀÌÁö ¾ÊÀ½ |
|---|
| 27 | |
|---|
| 28 | |
|---|
| 29 | #if COMMENT |
|---|
| 30 | __Local_Var__(){} |
|---|
| 31 | #endif |
|---|
| 32 | |
|---|
| 33 | static DHL_OS_TASK_ID p_menu_task_id; |
|---|
| 34 | |
|---|
| 35 | static DHL_OS_MSGQ_ID p_msgq_id; |
|---|
| 36 | static DHL_OS_SEMA_ID p_mtx; |
|---|
| 37 | static DHL_OS_SEMA_ID p_sem_sync; |
|---|
| 38 | |
|---|
| 39 | static tDMG_Menu *p_pmenu_list[MAX_NUM_MENU]; /* ¸ðµç menu¿¡ ´ëÇÑ list */ |
|---|
| 40 | static tDMG_Menu *p_pcur_menu; |
|---|
| 41 | |
|---|
| 42 | static tDMG_MenuManageProc p_menu_manage_proc; |
|---|
| 43 | |
|---|
| 44 | static tDMG_MenuInfo p_menu_info; |
|---|
| 45 | |
|---|
| 46 | /* Menu initµµ µÇ±â Àü¿¡ SendMessage°¡ È£ÃâµÉ ¼ö ÀÖ´Â °æ¿ìÀÇ ¹®Á¦ |
|---|
| 47 | msgq_id üũ ¸¸À¸·Î´Â ÃæºÐÇÏÁö ¾Ê¾Æ¼ º°µµÀÇ º¸È£ ÄÚµå Ãß°¡ |
|---|
| 48 | */ |
|---|
| 49 | static BOOL p_menu_task_running; |
|---|
| 50 | |
|---|
| 51 | /* timer ¼³Á¤ */ |
|---|
| 52 | static struct { |
|---|
| 53 | UINT32 start_ms; |
|---|
| 54 | UINT32 prev_ms; |
|---|
| 55 | UINT32 dur_ms; /* ms ´ÜÀ§ */ |
|---|
| 56 | UINT32 opt; |
|---|
| 57 | } p_timer_list[MAX_NUM_TIMER+1]; /* ¸¶Áö¸· slotÀº timout¿ëÀ¸·Î »ç¿ëÇÔ.*/ |
|---|
| 58 | |
|---|
| 59 | |
|---|
| 60 | |
|---|
| 61 | #if COMMENT |
|---|
| 62 | __Debug_Trace__() {} |
|---|
| 63 | #endif |
|---|
| 64 | |
|---|
| 65 | /* |
|---|
| 66 | ƯÁ¤ ¸Þ´º¿¡ °üÇÑ command ¸¸ trace Çϱâ À§ÇÑ ±â´É. |
|---|
| 67 | »ç¿ë¹ýÀº trace_menu_by_id() µîÀ» Âü°í.. |
|---|
| 68 | */ |
|---|
| 69 | static int s_trace_menu_id; |
|---|
| 70 | static char s_trace_menu_name[100]; |
|---|
| 71 | |
|---|
| 72 | void p_trace_menu_cmd(tDMG_Menu *pmenu, tDMG_CMD cmd, UINT32 opt, UINT32 param1, UINT32 param2) |
|---|
| 73 | { |
|---|
| 74 | if (!pmenu) return; |
|---|
| 75 | if ( (pmenu->id == s_trace_menu_id) || |
|---|
| 76 | (s_trace_menu_name[0] && strstr(pmenu->name, s_trace_menu_name)!=0) ) |
|---|
| 77 | DHL_OS_Printf("==== menu trace: %x(%s), cmd %x(%s) opt %x, param %x %x\n", |
|---|
| 78 | pmenu->id, pmenu->name, |
|---|
| 79 | cmd, DMG_CMD_STR(cmd), opt, param1, param2); |
|---|
| 80 | } |
|---|
| 81 | |
|---|
| 82 | void p_trace_menu_cmd2(tDMG_Menu *pmenu, tDMG_Message *pmsg) |
|---|
| 83 | { |
|---|
| 84 | if (!pmsg) return; |
|---|
| 85 | p_trace_menu_cmd(pmenu, pmsg->cmd, pmsg->opt, pmsg->param1, pmsg->param2); |
|---|
| 86 | } |
|---|
| 87 | |
|---|
| 88 | |
|---|
| 89 | #if COMMENT |
|---|
| 90 | __Local_Func__() {} |
|---|
| 91 | #endif |
|---|
| 92 | |
|---|
| 93 | |
|---|
| 94 | static tDMG_Menu *p_get_menu(tDMG_MenuId menu_id) |
|---|
| 95 | { |
|---|
| 96 | int i; |
|---|
| 97 | |
|---|
| 98 | for(i=0; i<MAX_NUM_MENU && p_pmenu_list[i]; i++) { |
|---|
| 99 | if(p_pmenu_list[i]->id==menu_id) return p_pmenu_list[i]; |
|---|
| 100 | } |
|---|
| 101 | |
|---|
| 102 | return NULL; |
|---|
| 103 | } |
|---|
| 104 | |
|---|
| 105 | |
|---|
| 106 | static void p_insert_menu(tDMG_Menu *pmenu) |
|---|
| 107 | { |
|---|
| 108 | int i; |
|---|
| 109 | |
|---|
| 110 | for(i=0; i<MAX_NUM_MENU && p_pmenu_list[i]; i++); |
|---|
| 111 | |
|---|
| 112 | if(i==MAX_NUM_MENU) { |
|---|
| 113 | dprint(0, "!! %s : menu slot is empty\n", __FUNCTION__); |
|---|
| 114 | return; |
|---|
| 115 | } |
|---|
| 116 | |
|---|
| 117 | p_pmenu_list[i]=pmenu; |
|---|
| 118 | } |
|---|
| 119 | |
|---|
| 120 | |
|---|
| 121 | |
|---|
| 122 | static tDMG_Frame *p_get_frame(tDMG_Menu *pmenu, tDMG_FrameId frame_id) |
|---|
| 123 | { |
|---|
| 124 | int i; |
|---|
| 125 | |
|---|
| 126 | if(!pmenu) return NULL; |
|---|
| 127 | |
|---|
| 128 | for(i=0; i<MAX_NUM_FRAME && pmenu->pframe_list[i]; i++) { |
|---|
| 129 | if(pmenu->pframe_list[i]->id==frame_id) return pmenu->pframe_list[i]; |
|---|
| 130 | } |
|---|
| 131 | |
|---|
| 132 | return NULL; |
|---|
| 133 | } |
|---|
| 134 | |
|---|
| 135 | |
|---|
| 136 | static void p_msg_generator(tDMG_Menu *pmenu, tDMG_CMD cmd, UINT32 opt, UINT32 param1, UINT32 param2) |
|---|
| 137 | { |
|---|
| 138 | int i; |
|---|
| 139 | |
|---|
| 140 | if(!pmenu) return; |
|---|
| 141 | |
|---|
| 142 | p_trace_menu_cmd(pmenu, cmd, opt, param1, param2); |
|---|
| 143 | |
|---|
| 144 | switch(cmd) |
|---|
| 145 | { |
|---|
| 146 | case eDMG_CMD_ON_MENU_ACTIVE : |
|---|
| 147 | |
|---|
| 148 | if(pmenu->user_proc(cmd, opt, param1, param2)) break; /* ÀÌ¹Ì Ã³¸®µÇ¾úÀ½ */ |
|---|
| 149 | |
|---|
| 150 | if(pmenu->pcur_frame) |
|---|
| 151 | pmenu->pcur_frame->user_proc(eDMG_CMD_ON_FRAME_ACTIVE, 0, |
|---|
| 152 | (UINT32)pmenu->pcur_frame, (UINT32)DMG_FRAME_ID_NONE); |
|---|
| 153 | break; |
|---|
| 154 | |
|---|
| 155 | case eDMG_CMD_ON_MENU_INACTIVE : |
|---|
| 156 | if(pmenu->pcur_frame) |
|---|
| 157 | pmenu->pcur_frame->user_proc(eDMG_CMD_ON_FRAME_INACTIVE, 0, |
|---|
| 158 | (UINT32)pmenu->pcur_frame, (UINT32)DMG_FRAME_ID_NONE); |
|---|
| 159 | |
|---|
| 160 | pmenu->user_proc(cmd, opt, param1, param2); |
|---|
| 161 | |
|---|
| 162 | for(i=0; i<MAX_NUM_TIMER; i++) { |
|---|
| 163 | if(p_timer_list[i].opt&eDMG_CMD_OPT_TIMER_LOCAL1 || |
|---|
| 164 | p_timer_list[i].opt&eDMG_CMD_OPT_TIMER_LOCAL2) |
|---|
| 165 | p_timer_list[i].dur_ms=TIMER_NOUSE; |
|---|
| 166 | } |
|---|
| 167 | |
|---|
| 168 | break; |
|---|
| 169 | |
|---|
| 170 | case eDMG_CMD_ON_MENU_EXIT : |
|---|
| 171 | if(pmenu->pcur_frame) |
|---|
| 172 | pmenu->pcur_frame->user_proc(eDMG_CMD_ON_FRAME_EXIT, 0, |
|---|
| 173 | (UINT32)pmenu, (UINT32)pmenu->pcur_frame); |
|---|
| 174 | pmenu->user_proc(cmd, opt, param1, param2); |
|---|
| 175 | |
|---|
| 176 | for(i=0; i<MAX_NUM_TIMER; i++) { |
|---|
| 177 | if(p_timer_list[i].opt&eDMG_CMD_OPT_TIMER_LOCAL1 || |
|---|
| 178 | p_timer_list[i].opt&eDMG_CMD_OPT_TIMER_LOCAL2) |
|---|
| 179 | p_timer_list[i].dur_ms=TIMER_NOUSE; |
|---|
| 180 | } |
|---|
| 181 | |
|---|
| 182 | break; |
|---|
| 183 | |
|---|
| 184 | case eDMG_CMD_ON_MENU_INVISIBLE : |
|---|
| 185 | if(pmenu->pcur_frame) |
|---|
| 186 | pmenu->pcur_frame->user_proc(eDMG_CMD_ON_FRAME_INVISIBLE, 0, |
|---|
| 187 | (UINT32)pmenu, (UINT32)pmenu->pcur_frame); |
|---|
| 188 | pmenu->user_proc(cmd, opt, param1, param2); |
|---|
| 189 | |
|---|
| 190 | for(i=0; i<MAX_NUM_TIMER; i++) { |
|---|
| 191 | if(p_timer_list[i].opt&eDMG_CMD_OPT_TIMER_LOCAL1 || |
|---|
| 192 | p_timer_list[i].opt&eDMG_CMD_OPT_TIMER_LOCAL2) |
|---|
| 193 | p_timer_list[i].dur_ms=TIMER_NOUSE; |
|---|
| 194 | } |
|---|
| 195 | |
|---|
| 196 | break; |
|---|
| 197 | |
|---|
| 198 | case eDMG_CMD_ON_REDRAW : |
|---|
| 199 | { |
|---|
| 200 | int i; |
|---|
| 201 | tDMG_Menu *ptemp; |
|---|
| 202 | tDMG_Menu *pmenu_list[MAX_NUM_MENU]; |
|---|
| 203 | |
|---|
| 204 | for(i=0, ptemp=pmenu; ptemp; i++, ptemp=(tDMG_Menu *)ptemp->pbelow) |
|---|
| 205 | pmenu_list[i]=ptemp; |
|---|
| 206 | |
|---|
| 207 | for(i--; i>=0; i--) { |
|---|
| 208 | if(!pmenu_list[i]->user_proc(cmd, 0, (UINT32)pmenu_list[i], 0)) { |
|---|
| 209 | #if 0 /* redraw´Â menu´Ü¿¡¼ ´Ù ó¸®ÇÔ */ |
|---|
| 210 | if(pmenu_list[i]->pcur_frame) |
|---|
| 211 | pmenu_list[i]->pcur_frame->user_proc(cmd, 0, (UINT32)pmenu_list[i], |
|---|
| 212 | (UINT32)pmenu_list[i]->pcur_frame); |
|---|
| 213 | #endif |
|---|
| 214 | } |
|---|
| 215 | } |
|---|
| 216 | } |
|---|
| 217 | break; |
|---|
| 218 | |
|---|
| 219 | case eDMG_CMD_ON_TIME : |
|---|
| 220 | { |
|---|
| 221 | BOOL is_done; |
|---|
| 222 | tDMG_Menu *pm_temp; |
|---|
| 223 | int i; |
|---|
| 224 | |
|---|
| 225 | for(is_done=FALSE, pm_temp=pmenu; !is_done && pm_temp; pm_temp=(tDMG_Menu *)pm_temp->pbelow) { |
|---|
| 226 | |
|---|
| 227 | is_done=pm_temp->user_proc(cmd, opt, param1, param2); |
|---|
| 228 | |
|---|
| 229 | for(i=0; !is_done && pm_temp->pframe_list[i]; i++) { |
|---|
| 230 | is_done=pm_temp->pframe_list[i]->user_proc(cmd, opt, param1, param2); |
|---|
| 231 | } |
|---|
| 232 | |
|---|
| 233 | } |
|---|
| 234 | |
|---|
| 235 | } |
|---|
| 236 | break; |
|---|
| 237 | |
|---|
| 238 | case eDMG_CMD_ON_TIMEOUT : |
|---|
| 239 | |
|---|
| 240 | if(!pmenu->user_proc(cmd, opt, param1, param2)) { |
|---|
| 241 | if(pmenu->pcur_frame) |
|---|
| 242 | pmenu->pcur_frame->user_proc(cmd, opt, param1, param2); |
|---|
| 243 | } |
|---|
| 244 | break; |
|---|
| 245 | |
|---|
| 246 | case eDMG_CMD_ON_KEY : |
|---|
| 247 | /* active menuÀÇ active frame¿¡¸¸ key¸¦ Àü´ÞÇÔ */ |
|---|
| 248 | if(!pmenu->user_proc(cmd, opt, param1, param2)) { |
|---|
| 249 | if(pmenu->pcur_frame) |
|---|
| 250 | pmenu->pcur_frame->user_proc(eDMG_CMD_ON_KEY, opt, param1, param2); |
|---|
| 251 | } |
|---|
| 252 | break; |
|---|
| 253 | |
|---|
| 254 | case eDMG_CMD_ON_USER_DEFINED : |
|---|
| 255 | /* active menuÀÇ active frame¿¡¸¸ key¸¦ Àü´ÞÇÔ */ |
|---|
| 256 | { |
|---|
| 257 | BOOL is_done; |
|---|
| 258 | tDMG_Menu *pm_temp; |
|---|
| 259 | int i; |
|---|
| 260 | |
|---|
| 261 | for(is_done=FALSE, pm_temp=pmenu; !is_done && pm_temp; pm_temp=(tDMG_Menu *)pm_temp->pbelow) { |
|---|
| 262 | |
|---|
| 263 | is_done=pm_temp->user_proc(cmd, opt, param1, param2); |
|---|
| 264 | |
|---|
| 265 | for(i=0; !is_done && pm_temp->pframe_list[i]; i++) { |
|---|
| 266 | is_done=pm_temp->pframe_list[i]->user_proc(cmd, opt, param1, param2); |
|---|
| 267 | } |
|---|
| 268 | |
|---|
| 269 | } |
|---|
| 270 | |
|---|
| 271 | } |
|---|
| 272 | break; |
|---|
| 273 | |
|---|
| 274 | |
|---|
| 275 | default : |
|---|
| 276 | pmenu->user_proc(cmd, opt, param1, param2); |
|---|
| 277 | } |
|---|
| 278 | |
|---|
| 279 | } |
|---|
| 280 | |
|---|
| 281 | |
|---|
| 282 | static tDMG_MenuManange p_default_menu_manage_proc(tDMG_MenuManageParam *pmanage_param) |
|---|
| 283 | { |
|---|
| 284 | if(pmanage_param->is_start) |
|---|
| 285 | return eDMG_MENU_MANAGE_INACTIVE_AND_DRAW; |
|---|
| 286 | |
|---|
| 287 | return eDMG_MENU_MANAGE_EXIT; |
|---|
| 288 | } |
|---|
| 289 | |
|---|
| 290 | |
|---|
| 291 | static BOOL p_default_user_proc(tDMG_CMD cmd, UINT32 opt, UINT32 param1, UINT32 param2) |
|---|
| 292 | { |
|---|
| 293 | dprint(0, "%s : cmd(%s:0x%x), opt(0x%x), param1(0x%x), param2(0x%x)\n", |
|---|
| 294 | __FUNCTION__, DMG_CMD_STR(cmd), cmd, opt, param1, param2); |
|---|
| 295 | |
|---|
| 296 | return FALSE; |
|---|
| 297 | } |
|---|
| 298 | |
|---|
| 299 | |
|---|
| 300 | static void p_insert_inactive_menu_list(tDMG_Menu *pmenu) |
|---|
| 301 | { |
|---|
| 302 | tDMG_Menu *ptemp; |
|---|
| 303 | |
|---|
| 304 | if(!p_pcur_menu) { |
|---|
| 305 | dprint(2, "!! %s : cur active menu is not exist\n", __FUNCTION__); |
|---|
| 306 | return; |
|---|
| 307 | } |
|---|
| 308 | |
|---|
| 309 | for(ptemp=p_pcur_menu; ptemp->pbelow; ptemp=ptemp->pbelow); |
|---|
| 310 | |
|---|
| 311 | ptemp->pbelow=pmenu; |
|---|
| 312 | |
|---|
| 313 | pmenu->pbelow=NULL; |
|---|
| 314 | } |
|---|
| 315 | |
|---|
| 316 | |
|---|
| 317 | static void p_delete_inactive_menu_list(tDMG_MenuId menu_id) |
|---|
| 318 | { |
|---|
| 319 | tDMG_Menu *ptemp; |
|---|
| 320 | |
|---|
| 321 | if(!p_pcur_menu) { |
|---|
| 322 | dprint(2, "!! %s : cur active menu is not exist\n", __FUNCTION__); |
|---|
| 323 | return; |
|---|
| 324 | } |
|---|
| 325 | |
|---|
| 326 | for(ptemp=p_pcur_menu; ptemp->pbelow; ptemp=ptemp->pbelow) { |
|---|
| 327 | if(ptemp->pbelow->id==menu_id) { |
|---|
| 328 | ptemp->pbelow=ptemp->pbelow->pbelow; |
|---|
| 329 | break; |
|---|
| 330 | } |
|---|
| 331 | } |
|---|
| 332 | } |
|---|
| 333 | |
|---|
| 334 | |
|---|
| 335 | static tDMG_MenuList p_get_inactive_menu_list() |
|---|
| 336 | { |
|---|
| 337 | int i; |
|---|
| 338 | UINT32 menu_list; |
|---|
| 339 | |
|---|
| 340 | for(i=0, menu_list=0; i<MAX_NUM_MENU; i++) { |
|---|
| 341 | if(p_pmenu_list[i] && p_pmenu_list[i]->status==eDMG_STATUS_INACTIVE) |
|---|
| 342 | menu_list|=(1<<p_pmenu_list[i]->id); |
|---|
| 343 | } |
|---|
| 344 | |
|---|
| 345 | return menu_list; |
|---|
| 346 | } |
|---|
| 347 | |
|---|
| 348 | static tDMG_MenuList p_get_invisible_menu_list() |
|---|
| 349 | { |
|---|
| 350 | int i; |
|---|
| 351 | UINT32 menu_list; |
|---|
| 352 | |
|---|
| 353 | for(i=0, menu_list=0; i<MAX_NUM_MENU; i++) { |
|---|
| 354 | if(p_pmenu_list[i] && p_pmenu_list[i]->status==eDMG_STATUS_INVISIBLE) |
|---|
| 355 | menu_list|=(1<<p_pmenu_list[i]->id); |
|---|
| 356 | } |
|---|
| 357 | |
|---|
| 358 | return menu_list; |
|---|
| 359 | } |
|---|
| 360 | |
|---|
| 361 | static tDMG_Menu *p_get_max_prio_invisible_menu() |
|---|
| 362 | { |
|---|
| 363 | int i; |
|---|
| 364 | int min_prio=0xff; |
|---|
| 365 | tDMG_Menu *pmin_prio_menu=NULL; |
|---|
| 366 | |
|---|
| 367 | for(i=0; i<MAX_NUM_MENU; i++) { |
|---|
| 368 | if(p_pmenu_list[i] && p_pmenu_list[i]->status==eDMG_STATUS_INVISIBLE) { |
|---|
| 369 | if(p_pmenu_list[i]->id<min_prio) { |
|---|
| 370 | min_prio=p_pmenu_list[i]->id; |
|---|
| 371 | pmin_prio_menu=p_pmenu_list[i]; |
|---|
| 372 | } |
|---|
| 373 | } |
|---|
| 374 | } |
|---|
| 375 | |
|---|
| 376 | return pmin_prio_menu; |
|---|
| 377 | } |
|---|
| 378 | |
|---|
| 379 | |
|---|
| 380 | |
|---|
| 381 | #if COMMENT |
|---|
| 382 | __Task_Func__() {} |
|---|
| 383 | #endif |
|---|
| 384 | |
|---|
| 385 | |
|---|
| 386 | |
|---|
| 387 | |
|---|
| 388 | |
|---|
| 389 | |
|---|
| 390 | static void p_menu_task(void* arg) |
|---|
| 391 | { |
|---|
| 392 | int i; |
|---|
| 393 | DHL_RESULT result; |
|---|
| 394 | tDMG_Message rcv_msg; |
|---|
| 395 | int rcv_len; |
|---|
| 396 | |
|---|
| 397 | p_menu_task_id=DHL_OS_GetTaskID(); |
|---|
| 398 | |
|---|
| 399 | for(i=0; i<MAX_NUM_TIMER+1; i++) |
|---|
| 400 | p_timer_list[i].dur_ms=TIMER_NOUSE; |
|---|
| 401 | |
|---|
| 402 | p_menu_task_running = TRUE; |
|---|
| 403 | |
|---|
| 404 | while(1) |
|---|
| 405 | { |
|---|
| 406 | UINT32 min_ms=0xffffffff; |
|---|
| 407 | UINT32 cur_ms=DHL_OS_GetMsCount(); |
|---|
| 408 | |
|---|
| 409 | result=DHL_OS_ReceiveMessage(p_msgq_id, &rcv_msg, 0); |
|---|
| 410 | |
|---|
| 411 | if(result!=DHL_OK) { |
|---|
| 412 | /* ±ú¾î³¯ ½Ã°¢ °è»ê */ |
|---|
| 413 | for(i=0; i<MAX_NUM_TIMER+1; i++) { |
|---|
| 414 | if(p_timer_list[i].dur_ms==TIMER_NOUSE) continue; |
|---|
| 415 | |
|---|
| 416 | if(p_timer_list[i].prev_ms+p_timer_list[i].dur_ms<(UINT32)min_ms) { |
|---|
| 417 | min_ms=p_timer_list[i].prev_ms+p_timer_list[i].dur_ms; |
|---|
| 418 | } |
|---|
| 419 | } |
|---|
| 420 | |
|---|
| 421 | if(min_ms==0xffffffff) { |
|---|
| 422 | /* timer°¡ µî·ÏµÇÁö ¾ÊÀ½ */ |
|---|
| 423 | result=DHL_OS_ReceiveMessage(p_msgq_id, &rcv_msg, DHL_TIMEOUT_FOREVER); |
|---|
| 424 | } |
|---|
| 425 | else { |
|---|
| 426 | |
|---|
| 427 | if(min_ms>cur_ms) min_ms-=cur_ms; |
|---|
| 428 | else if(cur_ms-min_ms<10000) { //10Ãʺ¸´Ù ÀÛ´Ù¸é 0À¸·Î º¸Á¤ÇÔ |
|---|
| 429 | min_ms=0; |
|---|
| 430 | } |
|---|
| 431 | else { //turn aroundµÈ °æ¿ì. |
|---|
| 432 | min_ms=0xffffffff-(cur_ms-min_ms)+1; |
|---|
| 433 | } |
|---|
| 434 | |
|---|
| 435 | result=DHL_OS_ReceiveMessage(p_msgq_id, &rcv_msg, min_ms); |
|---|
| 436 | } |
|---|
| 437 | } |
|---|
| 438 | |
|---|
| 439 | |
|---|
| 440 | if(result==DHL_OK) { /* Á¤»ó ¼ö½Å */ |
|---|
| 441 | |
|---|
| 442 | //dprint(1, "--MSG RECEIVED(%s:0x%x), opt(0x%x), param1(0x%x), param2(0x%x)\n", |
|---|
| 443 | // DMG_CMD_STR(rcv_msg.cmd), rcv_msg.cmd, rcv_msg.opt, rcv_msg.param1, rcv_msg.param2); |
|---|
| 444 | |
|---|
| 445 | switch(rcv_msg.cmd) |
|---|
| 446 | { |
|---|
| 447 | case eDMG_CMD_SET_MENU_START : |
|---|
| 448 | { |
|---|
| 449 | tDMG_Menu *pmenu=(tDMG_Menu *)rcv_msg.param1, *ptemp; |
|---|
| 450 | tDMG_MenuManange menu_manage; |
|---|
| 451 | tDMG_MenuManageParam manage_param; |
|---|
| 452 | |
|---|
| 453 | if(!pmenu) { |
|---|
| 454 | /* ¸Þ´º¸¦ ÃʱâÈÇÏÁö ¾Ê¾ÒÀ¸¸é¼ menu exit¸¦ ÇÏ´Â °æ¿ì ÀÖÀ½ */ |
|---|
| 455 | dprint(0, "menu was not inited !!\n"); |
|---|
| 456 | continue; |
|---|
| 457 | } |
|---|
| 458 | |
|---|
| 459 | p_trace_menu_cmd2(pmenu, &rcv_msg); |
|---|
| 460 | |
|---|
| 461 | manage_param.is_start=TRUE; |
|---|
| 462 | manage_param.active_id=p_pcur_menu?p_pcur_menu->id:DMG_MENU_ID_NONE; |
|---|
| 463 | manage_param.action_id=pmenu->id; |
|---|
| 464 | |
|---|
| 465 | /* menu update : ±âÁ¸ ¸Þ´º°¡ ¶° ÀÖÀ» °æ¿ì update ¸Þ½ÃÁö¸¦ Àü´ÞÇÔ, ±×·¸Áö ¾ÊÀ¸¸é ¸Þ´º¸¦ ¶ç¿ò */ |
|---|
| 466 | if(rcv_msg.opt&eDMG_CMD_OPT_MENU_UPDATE) { |
|---|
| 467 | if(manage_param.active_id==pmenu->id) { |
|---|
| 468 | p_msg_generator(pmenu, eDMG_CMD_ON_MENU_UPDATE, rcv_msg.opt, (UINT32)p_pcur_menu, rcv_msg.param2); |
|---|
| 469 | continue; |
|---|
| 470 | } |
|---|
| 471 | } |
|---|
| 472 | |
|---|
| 473 | manage_param.inactive_list=p_get_inactive_menu_list(); |
|---|
| 474 | manage_param.invisible_list=p_get_invisible_menu_list(); |
|---|
| 475 | |
|---|
| 476 | menu_manage=p_menu_manage_proc(&manage_param); |
|---|
| 477 | |
|---|
| 478 | /*±âÁ¸ ¸Þ´º¿¡ ´ëÇÑ Ã³¸® */ |
|---|
| 479 | if(!p_pcur_menu); /* ±âÁ¸ ¸Þ´º°¡ ¾øÀ¸¸é ¾Æ¹« 󸮵µ ¾ÈÇÔ */ |
|---|
| 480 | else { |
|---|
| 481 | |
|---|
| 482 | switch(menu_manage) { |
|---|
| 483 | |
|---|
| 484 | case eDMG_MENU_MANAGE_DENY: |
|---|
| 485 | dprint(2, "cur menu(id:%d) is denied\n"); |
|---|
| 486 | continue; /* ±×³É ¹«½ÃÇÔ */ |
|---|
| 487 | |
|---|
| 488 | case eDMG_MENU_MANAGE_DENY_BUT_INACTIVE: |
|---|
| 489 | pmenu->status=eDMG_STATUS_INACTIVE; |
|---|
| 490 | p_insert_inactive_menu_list(pmenu); |
|---|
| 491 | |
|---|
| 492 | p_msg_generator(pmenu, eDMG_CMD_ON_MENU_ENTER, 0, (UINT32)p_pcur_menu, 0); |
|---|
| 493 | |
|---|
| 494 | continue; /* inactive »óÅ·Π¹Ù²Ù°í ¹«½Ã */ |
|---|
| 495 | |
|---|
| 496 | case eDMG_MENU_MANAGE_DENY_BUT_HIDE: |
|---|
| 497 | pmenu->status=eDMG_STATUS_INVISIBLE; |
|---|
| 498 | |
|---|
| 499 | p_msg_generator(pmenu, eDMG_CMD_ON_MENU_ENTER, 0, (UINT32)p_pcur_menu, 0); |
|---|
| 500 | |
|---|
| 501 | continue; /* invisible »óÅ·Π¹Ù²Ù°í ¹«½Ã */ |
|---|
| 502 | |
|---|
| 503 | case eDMG_MENU_MANAGE_INACTIVE_AND_DRAW: |
|---|
| 504 | p_pcur_menu->status=eDMG_STATUS_INACTIVE; |
|---|
| 505 | p_msg_generator(p_pcur_menu, eDMG_CMD_ON_MENU_INACTIVE, 0, (UINT32)p_pcur_menu, |
|---|
| 506 | pmenu?pmenu->id:DMG_MENU_ID_NONE); |
|---|
| 507 | |
|---|
| 508 | break; |
|---|
| 509 | |
|---|
| 510 | case eDMG_MENU_MANAGE_HIDE_PREV_AND_DRAW: |
|---|
| 511 | p_pcur_menu->status=eDMG_STATUS_INVISIBLE; |
|---|
| 512 | p_msg_generator(p_pcur_menu, eDMG_CMD_ON_MENU_INVISIBLE, 0, (UINT32)p_pcur_menu, |
|---|
| 513 | pmenu?pmenu->id:DMG_MENU_ID_NONE); |
|---|
| 514 | |
|---|
| 515 | p_pcur_menu=p_pcur_menu->pbelow; |
|---|
| 516 | |
|---|
| 517 | break; |
|---|
| 518 | |
|---|
| 519 | case eDMG_MENU_MANAGE_HIDE_ALL_AND_DRAW: |
|---|
| 520 | |
|---|
| 521 | for(ptemp=p_pcur_menu; ptemp; ptemp=ptemp->pbelow) { |
|---|
| 522 | ptemp->status=eDMG_STATUS_INVISIBLE; |
|---|
| 523 | p_msg_generator(ptemp, eDMG_CMD_ON_MENU_INVISIBLE, 0, (UINT32)p_pcur_menu, |
|---|
| 524 | pmenu?pmenu->id:DMG_MENU_ID_NONE); |
|---|
| 525 | } |
|---|
| 526 | |
|---|
| 527 | p_pcur_menu=NULL; /* inactive list°¡ ¸ðµÎ »ç¶óÁü */ |
|---|
| 528 | |
|---|
| 529 | break; |
|---|
| 530 | |
|---|
| 531 | case eDMG_MENU_MANAGE_EXIT_PREV_AND_DRAW: |
|---|
| 532 | |
|---|
| 533 | p_pcur_menu->status=eDMG_STATUS_EXIT; |
|---|
| 534 | p_msg_generator(p_pcur_menu, eDMG_CMD_ON_MENU_EXIT, 0, (UINT32)p_pcur_menu, |
|---|
| 535 | pmenu?pmenu->id:DMG_MENU_ID_NONE); |
|---|
| 536 | |
|---|
| 537 | p_pcur_menu=p_pcur_menu->pbelow; |
|---|
| 538 | |
|---|
| 539 | break; |
|---|
| 540 | |
|---|
| 541 | case eDMG_MENU_MANAGE_EXIT_ALL_AND_DRAW: |
|---|
| 542 | |
|---|
| 543 | for(i=0; i<MAX_NUM_MENU; i++) { |
|---|
| 544 | if(p_pmenu_list[i] && p_pmenu_list[i]->status!=eDMG_STATUS_EXIT) { |
|---|
| 545 | p_pcur_menu->status=eDMG_STATUS_EXIT; |
|---|
| 546 | p_msg_generator(p_pcur_menu, eDMG_CMD_ON_MENU_EXIT, 0, (UINT32)p_pcur_menu, |
|---|
| 547 | pmenu?pmenu->id:DMG_MENU_ID_NONE); |
|---|
| 548 | } |
|---|
| 549 | } |
|---|
| 550 | |
|---|
| 551 | p_pcur_menu=NULL; |
|---|
| 552 | |
|---|
| 553 | break; |
|---|
| 554 | |
|---|
| 555 | /* TODO: exit enumerate handle */ |
|---|
| 556 | case eDMG_MENU_MANAGE_EXIT: |
|---|
| 557 | case eDMG_MENU_MANAGE_EXIT_SILENT: |
|---|
| 558 | default: |
|---|
| 559 | |
|---|
| 560 | break; |
|---|
| 561 | } |
|---|
| 562 | } |
|---|
| 563 | |
|---|
| 564 | dprint(2, " -- %s : new menu is draw\n", __FUNCTION__); |
|---|
| 565 | |
|---|
| 566 | pmenu->pbelow=p_pcur_menu; |
|---|
| 567 | |
|---|
| 568 | /* menu info ¼öÁý */ |
|---|
| 569 | p_menu_info.pcur_menu=pmenu; |
|---|
| 570 | p_menu_info.pprev_menu=p_pcur_menu; |
|---|
| 571 | p_menu_info.pcur_frame=pmenu->pcur_frame; |
|---|
| 572 | p_menu_info.pprev_frame=NULL; |
|---|
| 573 | |
|---|
| 574 | p_pcur_menu=pmenu; |
|---|
| 575 | |
|---|
| 576 | p_pcur_menu->status=eDMG_STATUS_ACTIVE; |
|---|
| 577 | |
|---|
| 578 | p_msg_generator(p_pcur_menu, eDMG_CMD_ON_MENU_ENTER, 0, (UINT32)p_pcur_menu, 0); |
|---|
| 579 | |
|---|
| 580 | p_msg_generator(p_pcur_menu, eDMG_CMD_ON_MENU_ACTIVE, 0, (UINT32)p_pcur_menu, |
|---|
| 581 | p_menu_info.pprev_menu?p_menu_info.pprev_menu->id:DMG_MENU_ID_NONE); |
|---|
| 582 | |
|---|
| 583 | DMG_SetTimer(TIMER_ID_TIMEOUT, p_pcur_menu->timeout_ms, eDMG_CMD_OPT_TIMER_ONESHOT); |
|---|
| 584 | |
|---|
| 585 | break; |
|---|
| 586 | |
|---|
| 587 | } |
|---|
| 588 | |
|---|
| 589 | case eDMG_CMD_SET_MENU_EXIT : |
|---|
| 590 | { |
|---|
| 591 | tDMG_Menu *pmenu=DMG_GetMenu((tDMG_MenuId)rcv_msg.param1), *ptemp; |
|---|
| 592 | tDMG_MenuManange menu_manage; |
|---|
| 593 | tDMG_MenuManageParam manage_param; |
|---|
| 594 | |
|---|
| 595 | if(!pmenu) { |
|---|
| 596 | /* ¸Þ´º¸¦ »ý¼ºÇÏÁö ¾Ê¾ÒÀ¸¸é¼ menu exit¸¦ ÇÏ´Â °æ¿ì ÀÖÀ½ */ |
|---|
| 597 | dprint(0, "menu was not started !!\n"); |
|---|
| 598 | continue; |
|---|
| 599 | } |
|---|
| 600 | |
|---|
| 601 | p_trace_menu_cmd2(pmenu, &rcv_msg); |
|---|
| 602 | |
|---|
| 603 | manage_param.is_start=FALSE; |
|---|
| 604 | manage_param.active_id=p_pcur_menu?p_pcur_menu->id:DMG_MENU_ID_NONE; |
|---|
| 605 | manage_param.action_id=pmenu->id; |
|---|
| 606 | |
|---|
| 607 | manage_param.inactive_list=p_get_inactive_menu_list(); |
|---|
| 608 | manage_param.invisible_list=p_get_invisible_menu_list(); |
|---|
| 609 | |
|---|
| 610 | manage_param.new_active_id=DMG_MENU_ID_DEFAULT; |
|---|
| 611 | |
|---|
| 612 | menu_manage=p_menu_manage_proc(&manage_param); |
|---|
| 613 | |
|---|
| 614 | if(menu_manage==eDMG_MENU_MANAGE_EXIT) { |
|---|
| 615 | pmenu->status=eDMG_STATUS_EXIT; |
|---|
| 616 | if(p_pcur_menu==pmenu) |
|---|
| 617 | p_msg_generator(pmenu, eDMG_CMD_ON_MENU_EXIT, 0, (UINT32)pmenu, pmenu?pmenu->id:DMG_MENU_ID_NONE); |
|---|
| 618 | } |
|---|
| 619 | else if(menu_manage==eDMG_MENU_MANAGE_EXIT_SILENT) { |
|---|
| 620 | pmenu->status=eDMG_STATUS_EXIT; |
|---|
| 621 | } |
|---|
| 622 | else { |
|---|
| 623 | dprint(0, "!! %s(LINE:%d) : bad return value of manage proc\n", __FUNCTION__, __LINE__); |
|---|
| 624 | break; |
|---|
| 625 | } |
|---|
| 626 | |
|---|
| 627 | p_menu_info.pprev_menu=p_pcur_menu; |
|---|
| 628 | p_menu_info.pcur_menu=NULL; |
|---|
| 629 | p_menu_info.pcur_frame=NULL; |
|---|
| 630 | p_menu_info.pprev_frame=NULL; |
|---|
| 631 | |
|---|
| 632 | if(p_pcur_menu==pmenu) { /* ÇöÀç menu¸¦ Áö¿ò */ |
|---|
| 633 | /* ÇöÀç menu°¡ Áö¿öÁú ¶§ ¸»°í´Â ACTIVE menu¸¦ º¯°æÇÏÁö ¾ÊÀ½ */ |
|---|
| 634 | |
|---|
| 635 | if(manage_param.new_active_id==DMG_MENU_ID_NONE) { |
|---|
| 636 | p_pcur_menu=NULL; /* ÇöÀç Ȱ¼ºÈµÇ¾îÀÖ´Â menu´Â ¾øÀ½? */ |
|---|
| 637 | } |
|---|
| 638 | else { |
|---|
| 639 | |
|---|
| 640 | if(manage_param.new_active_id==DMG_MENU_ID_DEFAULT) { |
|---|
| 641 | ptemp=p_pcur_menu->pbelow; |
|---|
| 642 | |
|---|
| 643 | if(!ptemp) { /* invisible menu Áß¿¡¼ ãÀ½ */ |
|---|
| 644 | ptemp=p_get_max_prio_invisible_menu(); |
|---|
| 645 | } |
|---|
| 646 | } |
|---|
| 647 | else |
|---|
| 648 | ptemp=p_get_menu(manage_param.new_active_id); |
|---|
| 649 | |
|---|
| 650 | #if 0 //½ÇÁ¦ ÇÏÀ§¿¡ ¾î¶² ¸Þ´ºµµ ¾øÀ» ¼ö ÀÖÀ½ |
|---|
| 651 | if(!ptemp) { |
|---|
| 652 | dprint(0, "!! %s(LINE:%d) : bad menu_active_id\n", __FUNCTION__, __LINE__); |
|---|
| 653 | break; |
|---|
| 654 | } |
|---|
| 655 | #endif |
|---|
| 656 | if(ptemp && ptemp->status==eDMG_STATUS_EXIT) { |
|---|
| 657 | dprint(0, "!! %s(LINE:%d) : bad menu_active_id\n", __FUNCTION__, __LINE__); |
|---|
| 658 | break; |
|---|
| 659 | } |
|---|
| 660 | |
|---|
| 661 | p_pcur_menu=ptemp; |
|---|
| 662 | |
|---|
| 663 | if(p_pcur_menu) { |
|---|
| 664 | p_pcur_menu->status=eDMG_STATUS_ACTIVE; |
|---|
| 665 | p_msg_generator(p_pcur_menu, eDMG_CMD_ON_MENU_ACTIVE, 0, (UINT32)p_pcur_menu, |
|---|
| 666 | p_menu_info.pprev_menu?p_menu_info.pprev_menu->id:DMG_MENU_ID_NONE); |
|---|
| 667 | } |
|---|
| 668 | } |
|---|
| 669 | } |
|---|
| 670 | |
|---|
| 671 | /* Åë°è */ |
|---|
| 672 | p_menu_info.pcur_menu=p_pcur_menu; |
|---|
| 673 | |
|---|
| 674 | break; |
|---|
| 675 | } |
|---|
| 676 | |
|---|
| 677 | |
|---|
| 678 | case eDMG_CMD_SET_TIMER : |
|---|
| 679 | /* param1 : id, param2 : duration, opt : opt */ |
|---|
| 680 | p_timer_list[rcv_msg.param1].dur_ms=rcv_msg.param2; |
|---|
| 681 | p_timer_list[rcv_msg.param1].opt=rcv_msg.opt; |
|---|
| 682 | p_timer_list[rcv_msg.param1].start_ms=DHL_OS_GetMsCount(); |
|---|
| 683 | p_timer_list[rcv_msg.param1].prev_ms=DHL_OS_GetMsCount(); |
|---|
| 684 | break; |
|---|
| 685 | |
|---|
| 686 | case eDMG_CMD_SET_FRAME_ACTIVE : |
|---|
| 687 | |
|---|
| 688 | DMG_SetFrame(eDMG_CMD_SET_FRAME_ACTIVE, rcv_msg.param1, rcv_msg.param2, FALSE); |
|---|
| 689 | break; |
|---|
| 690 | |
|---|
| 691 | case eDMG_CMD_SET_REDRAW : |
|---|
| 692 | DMG_SetRedraw(FALSE); |
|---|
| 693 | break; |
|---|
| 694 | |
|---|
| 695 | case eDMG_CMD_SET_KEY : |
|---|
| 696 | |
|---|
| 697 | //message queue¸¦ ´Ù ¿¾îºÁ¼ Áߺ¹µÇ´Â ۰¡ ÀÖÀ¸¸é »èÁ¦ÇÔ |
|---|
| 698 | #if USE_OLNY_ONE_INPUT_KEY |
|---|
| 699 | { |
|---|
| 700 | tDMG_Message tmsg[NUM_MSGQ]; |
|---|
| 701 | int num_msgq; |
|---|
| 702 | |
|---|
| 703 | for(i=0; |
|---|
| 704 | i<NUM_MSGQ && DHL_OK==DHL_OS_ReceiveMessage(p_msgq_id, &tmsg[i], 0); |
|---|
| 705 | i++) |
|---|
| 706 | { |
|---|
| 707 | |
|---|
| 708 | if(tmsg[i].cmd==eDMG_CMD_SET_KEY && tmsg[i].param1==rcv_msg.param1) { |
|---|
| 709 | //¹ö¸² |
|---|
| 710 | tmsg[i].cmd=eDMG_CMD_NONE; |
|---|
| 711 | } |
|---|
| 712 | } |
|---|
| 713 | |
|---|
| 714 | num_msgq=i; |
|---|
| 715 | |
|---|
| 716 | for(i=0; i<num_msgq; i++) { |
|---|
| 717 | if(tmsg[i].cmd==eDMG_CMD_NONE) continue; |
|---|
| 718 | |
|---|
| 719 | DHL_OS_SendMessage(p_msgq_id, &tmsg[i], sizeof(tmsg)); |
|---|
| 720 | } |
|---|
| 721 | } |
|---|
| 722 | #endif |
|---|
| 723 | |
|---|
| 724 | if((rcv_msg.opt&eDMG_CMD_OPT_USER_KEY)==0) { |
|---|
| 725 | |
|---|
| 726 | if(p_pcur_menu) { |
|---|
| 727 | DMG_SetTimer(TIMER_ID_TIMEOUT, p_timer_list[TIMER_ID_TIMEOUT].dur_ms, |
|---|
| 728 | eDMG_CMD_OPT_TIMER_ONESHOT); |
|---|
| 729 | p_menu_info.ms_last_key=DHL_OS_GetMsCount(); |
|---|
| 730 | } |
|---|
| 731 | } |
|---|
| 732 | p_trace_menu_cmd2(p_pcur_menu, &rcv_msg); |
|---|
| 733 | p_msg_generator(p_pcur_menu, eDMG_CMD_ON_KEY, 0, (UINT32)p_pcur_menu, rcv_msg.param1); |
|---|
| 734 | break; |
|---|
| 735 | |
|---|
| 736 | |
|---|
| 737 | case eDMG_CMD_SET_USER_DEFINE : |
|---|
| 738 | p_trace_menu_cmd2(p_pcur_menu, &rcv_msg); |
|---|
| 739 | p_msg_generator(p_pcur_menu, eDMG_CMD_ON_USER_DEFINED, rcv_msg.opt, rcv_msg.param1, rcv_msg.param2); |
|---|
| 740 | break; |
|---|
| 741 | |
|---|
| 742 | case eDMG_CMD_SET_SYNC : |
|---|
| 743 | DHL_OS_GiveSemaphore((DHL_OS_SEMA_ID)rcv_msg.param1); |
|---|
| 744 | break; |
|---|
| 745 | |
|---|
| 746 | case eDMG_CMD_SET_MENU_PARAM1 : |
|---|
| 747 | case eDMG_CMD_SET_MENU_PARAM2 : |
|---|
| 748 | { |
|---|
| 749 | tDMG_Menu *pmenu=DMG_GetMenu((tDMG_MenuId)rcv_msg.param1); |
|---|
| 750 | if(!pmenu) { |
|---|
| 751 | dprint(0, "!! %s menu id invalid\n", DMG_CMD_STR(rcv_msg.cmd)); |
|---|
| 752 | break; |
|---|
| 753 | } |
|---|
| 754 | p_trace_menu_cmd2(pmenu, &rcv_msg); |
|---|
| 755 | dprint(2, " -- %s, menu 0x%x, param %x\n", DMG_CMD_STR(rcv_msg.cmd), pmenu->id, rcv_msg.param2); |
|---|
| 756 | if (rcv_msg.cmd==eDMG_CMD_SET_MENU_PARAM1) pmenu->param1 = rcv_msg.param2; |
|---|
| 757 | else pmenu->param2 = rcv_msg.param2; |
|---|
| 758 | break; |
|---|
| 759 | } |
|---|
| 760 | |
|---|
| 761 | default : |
|---|
| 762 | ; |
|---|
| 763 | |
|---|
| 764 | } |
|---|
| 765 | |
|---|
| 766 | continue; |
|---|
| 767 | /* comment : msg°¡ ÀÖÀ» ¶§´Â timer 󸮸¦ ÇÏÁö ¾Ê´Â´Ù. */ |
|---|
| 768 | } |
|---|
| 769 | |
|---|
| 770 | /* timer ó¸® */ |
|---|
| 771 | for(i=0; i<MAX_NUM_TIMER+1; i++) { |
|---|
| 772 | if(p_timer_list[i].dur_ms==TIMER_NOUSE) continue; |
|---|
| 773 | |
|---|
| 774 | if(DHL_OS_GetMsCount()-p_timer_list[i].prev_ms>=p_timer_list[i].dur_ms) { |
|---|
| 775 | |
|---|
| 776 | p_timer_list[i].prev_ms=DHL_OS_GetMsCount(); |
|---|
| 777 | |
|---|
| 778 | if(p_timer_list[i].opt & eDMG_CMD_OPT_TIMER_ONESHOT) |
|---|
| 779 | p_timer_list[i].dur_ms=TIMER_NOUSE; |
|---|
| 780 | |
|---|
| 781 | if(i==TIMER_ID_TIMEOUT) { /* timeout */ |
|---|
| 782 | p_msg_generator(p_pcur_menu, eDMG_CMD_ON_TIMEOUT, 0, |
|---|
| 783 | DHL_OS_GetMsCount()-p_timer_list[i].start_ms, 0); |
|---|
| 784 | } |
|---|
| 785 | else { |
|---|
| 786 | p_msg_generator(p_pcur_menu, eDMG_CMD_ON_TIME, 0, i, |
|---|
| 787 | DHL_OS_GetMsCount()-p_timer_list[i].start_ms); |
|---|
| 788 | } |
|---|
| 789 | } |
|---|
| 790 | } |
|---|
| 791 | DHL_OS_Delay(50); //BK 10->50 |
|---|
| 792 | } |
|---|
| 793 | DHL_OS_SelfDeleteTask(); |
|---|
| 794 | } |
|---|
| 795 | |
|---|
| 796 | |
|---|
| 797 | |
|---|
| 798 | #if COMMNET |
|---|
| 799 | __APIs__(){} |
|---|
| 800 | #endif |
|---|
| 801 | |
|---|
| 802 | // arzhna, 100409 |
|---|
| 803 | // ÁöÁ¤µÈ ¸Þ´ºÀÇ status¸¦ ¹Ýȯ |
|---|
| 804 | // FALSE : exit »óÅÂ |
|---|
| 805 | // TRUE : exit ÀÌ¿ÜÀÇ »óÅ (active µî) |
|---|
| 806 | BOOL DMG_GetMenuStatus(tDMG_MenuId menu_id) |
|---|
| 807 | { |
|---|
| 808 | tDMG_Menu *menu; |
|---|
| 809 | |
|---|
| 810 | menu = p_get_menu(menu_id); |
|---|
| 811 | |
|---|
| 812 | if(menu==NULL) |
|---|
| 813 | return FALSE; |
|---|
| 814 | else{ |
|---|
| 815 | if(menu->status==eDMG_STATUS_EXIT) |
|---|
| 816 | return FALSE; |
|---|
| 817 | else |
|---|
| 818 | return TRUE; |
|---|
| 819 | } |
|---|
| 820 | } |
|---|
| 821 | |
|---|
| 822 | |
|---|
| 823 | void DMG_SendMessage(tDMG_CMD cmd, UINT32 opt, UINT32 param1, UINT32 param2) |
|---|
| 824 | { |
|---|
| 825 | tDMG_Message send_msg; |
|---|
| 826 | |
|---|
| 827 | if(!p_msgq_id || !p_menu_task_running) |
|---|
| 828 | return; |
|---|
| 829 | |
|---|
| 830 | send_msg.cmd=cmd; |
|---|
| 831 | send_msg.opt=opt; |
|---|
| 832 | send_msg.param1=param1; |
|---|
| 833 | send_msg.param2=param2; |
|---|
| 834 | |
|---|
| 835 | if(opt&eDMG_CMD_OPT_SYNC) { |
|---|
| 836 | /* È£ÃâÇÏ´Â task¿Í µ¿±â¸¦ ¸ÂÃç¾ß ÇÔ */ |
|---|
| 837 | |
|---|
| 838 | dprint(0, "!! Command Sync mode\n"); |
|---|
| 839 | |
|---|
| 840 | DHL_OS_TakeSemaphore(p_mtx, DHL_TIMEOUT_FOREVER); |
|---|
| 841 | |
|---|
| 842 | DHL_OS_SendMessage(p_msgq_id, &send_msg, sizeof(send_msg)); |
|---|
| 843 | |
|---|
| 844 | send_msg.cmd=eDMG_CMD_SET_SYNC; |
|---|
| 845 | send_msg.param1=(UINT32)p_sem_sync; |
|---|
| 846 | |
|---|
| 847 | DHL_OS_SendMessage(p_msgq_id, &send_msg, sizeof(send_msg)); |
|---|
| 848 | |
|---|
| 849 | DHL_OS_TakeSemaphore(p_sem_sync, DHL_TIMEOUT_FOREVER); |
|---|
| 850 | |
|---|
| 851 | DHL_OS_GiveSemaphore(p_mtx); |
|---|
| 852 | } |
|---|
| 853 | else { |
|---|
| 854 | DHL_OS_SendMessage(p_msgq_id, &send_msg, sizeof(send_msg)); |
|---|
| 855 | } |
|---|
| 856 | } |
|---|
| 857 | |
|---|
| 858 | |
|---|
| 859 | tDMG_Menu *DMG_CreateMenu(tDMG_MenuId id, char *name, UINT32 timeout_ms, tDMG_UserProc user_proc) |
|---|
| 860 | { |
|---|
| 861 | |
|---|
| 862 | int i; |
|---|
| 863 | tDMG_Menu *pmenu; |
|---|
| 864 | |
|---|
| 865 | if(id==0 || id>=MAX_NUM_MENU) { |
|---|
| 866 | dprint(0, "!! %s : bad menu id\n", __FUNCTION__); |
|---|
| 867 | return NULL; |
|---|
| 868 | } |
|---|
| 869 | |
|---|
| 870 | if(p_get_menu(id)) { |
|---|
| 871 | dprint(0, "!! %s : menu(id:%d) is already created\n"); |
|---|
| 872 | return NULL; |
|---|
| 873 | } |
|---|
| 874 | |
|---|
| 875 | pmenu=(tDMG_Menu *)DHL_OS_Malloc(sizeof(*pmenu)); |
|---|
| 876 | |
|---|
| 877 | if(!pmenu) { |
|---|
| 878 | dprint(0, "!! %s : malloc failed\n", __FUNCTION__); |
|---|
| 879 | return NULL; |
|---|
| 880 | } |
|---|
| 881 | |
|---|
| 882 | pmenu->id=id; |
|---|
| 883 | pmenu->name=name; |
|---|
| 884 | |
|---|
| 885 | pmenu->status=eDMG_STATUS_EXIT; |
|---|
| 886 | |
|---|
| 887 | pmenu->priority=0; |
|---|
| 888 | |
|---|
| 889 | pmenu->timeout_ms=timeout_ms; |
|---|
| 890 | |
|---|
| 891 | if(user_proc) |
|---|
| 892 | pmenu->user_proc=user_proc; |
|---|
| 893 | else |
|---|
| 894 | pmenu->user_proc=p_default_user_proc; |
|---|
| 895 | |
|---|
| 896 | pmenu->pcur_frame=NULL; |
|---|
| 897 | |
|---|
| 898 | memset(&pmenu->pframe_list, 0, sizeof(pmenu->pframe_list)); |
|---|
| 899 | |
|---|
| 900 | pmenu->pbelow=NULL; |
|---|
| 901 | |
|---|
| 902 | p_insert_menu(pmenu); |
|---|
| 903 | |
|---|
| 904 | return pmenu; |
|---|
| 905 | } |
|---|
| 906 | |
|---|
| 907 | |
|---|
| 908 | tDMG_Frame *DMG_CreateFrame(tDMG_Menu *pmenu, tDMG_FrameId id, char *name, |
|---|
| 909 | UINT32 num_item, tDMG_UserProc user_proc) |
|---|
| 910 | { |
|---|
| 911 | int i; |
|---|
| 912 | |
|---|
| 913 | tDMG_Frame *pframe; |
|---|
| 914 | |
|---|
| 915 | pframe=(tDMG_Frame *)DHL_OS_Malloc(sizeof(*pframe)); |
|---|
| 916 | |
|---|
| 917 | if(!pframe) { |
|---|
| 918 | dprint(0, "!! %s : malloc failed\n", __FUNCTION__); |
|---|
| 919 | return NULL; |
|---|
| 920 | } |
|---|
| 921 | |
|---|
| 922 | pframe->id=id; |
|---|
| 923 | pframe->name=name; |
|---|
| 924 | pframe->num_item=num_item; |
|---|
| 925 | |
|---|
| 926 | if(pmenu) |
|---|
| 927 | pframe->timeout_ms=pmenu->timeout_ms; |
|---|
| 928 | else |
|---|
| 929 | pframe->timeout_ms=DMG_TIME_FOREVER; |
|---|
| 930 | |
|---|
| 931 | if(user_proc) |
|---|
| 932 | pframe->user_proc=user_proc; |
|---|
| 933 | else if(pmenu) |
|---|
| 934 | pframe->user_proc=pmenu->user_proc; |
|---|
| 935 | |
|---|
| 936 | pframe->cur_item_id=0; |
|---|
| 937 | pframe->param1=0; |
|---|
| 938 | pframe->param2=0; |
|---|
| 939 | |
|---|
| 940 | if(!pmenu) return pframe; |
|---|
| 941 | |
|---|
| 942 | return DMG_AttachFrame(pmenu, pframe); |
|---|
| 943 | } |
|---|
| 944 | |
|---|
| 945 | |
|---|
| 946 | tDMG_Frame *DMG_AttachFrame(tDMG_Menu *pmenu, tDMG_Frame *pframe) |
|---|
| 947 | { |
|---|
| 948 | int i; |
|---|
| 949 | |
|---|
| 950 | for(i=0; i<MAX_NUM_FRAME; i++) { |
|---|
| 951 | if(!pmenu->pframe_list[i]) { |
|---|
| 952 | pmenu->pframe_list[i]=pframe; |
|---|
| 953 | |
|---|
| 954 | if(i==0) { /* óÀ½ µî·ÏµÇ´Â °ÍÀ̶ó¸é ÀÌ frameÀÌ cur frameÀÌ µÈ´Ù. */ |
|---|
| 955 | pmenu->pcur_frame=pmenu->pframe_list[i]; |
|---|
| 956 | } |
|---|
| 957 | |
|---|
| 958 | break; |
|---|
| 959 | } |
|---|
| 960 | } |
|---|
| 961 | |
|---|
| 962 | if(i==MAX_NUM_FRAME) { |
|---|
| 963 | dprint(0, "!! %s : frame slot in menu is empty\n", __FUNCTION__); |
|---|
| 964 | } |
|---|
| 965 | |
|---|
| 966 | return pframe; |
|---|
| 967 | } |
|---|
| 968 | |
|---|
| 969 | |
|---|
| 970 | |
|---|
| 971 | tDMG_Menu *DMG_GetMenu(tDMG_MenuId menu_id) |
|---|
| 972 | { |
|---|
| 973 | return p_get_menu(menu_id); |
|---|
| 974 | } |
|---|
| 975 | |
|---|
| 976 | tDMG_Frame *DMG_GetFrame(tDMG_MenuId menu_id, tDMG_FrameId frame_id) |
|---|
| 977 | { |
|---|
| 978 | tDMG_Menu *pmenu; |
|---|
| 979 | |
|---|
| 980 | if(menu_id==DMG_MENU_ID_DEFAULT) { |
|---|
| 981 | if(!p_pcur_menu) return NULL; |
|---|
| 982 | menu_id=p_pcur_menu->id; |
|---|
| 983 | } |
|---|
| 984 | |
|---|
| 985 | pmenu=p_get_menu(menu_id); |
|---|
| 986 | |
|---|
| 987 | if(!pmenu) return NULL; |
|---|
| 988 | |
|---|
| 989 | return p_get_frame(pmenu, frame_id); |
|---|
| 990 | } |
|---|
| 991 | |
|---|
| 992 | tDMG_Menu *DMG_GetCurMenu() |
|---|
| 993 | { |
|---|
| 994 | return p_pcur_menu; |
|---|
| 995 | } |
|---|
| 996 | |
|---|
| 997 | |
|---|
| 998 | tDMG_Frame *DMG_GetCurFrame() |
|---|
| 999 | { |
|---|
| 1000 | if(!p_pcur_menu) return NULL; |
|---|
| 1001 | |
|---|
| 1002 | return p_pcur_menu->pcur_frame; |
|---|
| 1003 | } |
|---|
| 1004 | |
|---|
| 1005 | |
|---|
| 1006 | void DMG_SetFrame(tDMG_CMD cmd, tDMG_MenuId menu_id, tDMG_FrameId frame_id, BOOL buse_msgq) |
|---|
| 1007 | { |
|---|
| 1008 | int i; |
|---|
| 1009 | tDMG_Menu *pmenu; |
|---|
| 1010 | tDMG_Frame *pframe; |
|---|
| 1011 | |
|---|
| 1012 | if(menu_id==DMG_MENU_ID_DEFAULT) { |
|---|
| 1013 | if(!p_pcur_menu) return; |
|---|
| 1014 | menu_id=p_pcur_menu->id; |
|---|
| 1015 | } |
|---|
| 1016 | |
|---|
| 1017 | pmenu=p_get_menu(menu_id); |
|---|
| 1018 | |
|---|
| 1019 | dprint(1, "%s : menu id(%d), frame id(%d)\n", __FUNCTION__, menu_id, frame_id); |
|---|
| 1020 | |
|---|
| 1021 | if(cmd<eDMG_CMD_SET_FRAME_ACTIVE || cmd>eDMG_CMD_SET_FRAME_INACTIVE) return; |
|---|
| 1022 | |
|---|
| 1023 | if(!pmenu) { |
|---|
| 1024 | dprint(0, "!! %s : menu(id:%d,0x%x) is not exist\n", __FUNCTION__, menu_id, menu_id); |
|---|
| 1025 | return; |
|---|
| 1026 | } |
|---|
| 1027 | |
|---|
| 1028 | pframe=p_get_frame(pmenu, frame_id); |
|---|
| 1029 | |
|---|
| 1030 | if(!pframe) { |
|---|
| 1031 | dprint(0, "!! %s : frame(id:%d, 0x%x) is not exist in menu %d\n", |
|---|
| 1032 | __FUNCTION__, frame_id, frame_id, menu_id); |
|---|
| 1033 | return; |
|---|
| 1034 | } |
|---|
| 1035 | |
|---|
| 1036 | if(buse_msgq || p_menu_task_id!=DHL_OS_GetTaskID()) { |
|---|
| 1037 | /* buse_msgqÀÎ °æ¿ì¿Í task°¡ ´Ù¸¥ °æ¿ì´Â ¹«Á¶°Ç msgq¸¦ »ç¿ëÇÑ´Ù. */ |
|---|
| 1038 | DMG_SendMessage(cmd, 0, menu_id, frame_id); |
|---|
| 1039 | return; |
|---|
| 1040 | } |
|---|
| 1041 | |
|---|
| 1042 | //DHL_OS_Printf("---- pass0\n"); |
|---|
| 1043 | /* neverdai À§ÀÇ DHL_OS_Printf¹®À» »èÁ¦Çϸé Á״´Ù...¿øÀÎ ¸ð¸§ ³ªÁß¿¡ ÇØ°á ¿ä¸Á..091021 */ |
|---|
| 1044 | |
|---|
| 1045 | if(cmd==eDMG_CMD_SET_FRAME_ACTIVE) { |
|---|
| 1046 | |
|---|
| 1047 | p_menu_info.pprev_frame=pmenu->pcur_frame; |
|---|
| 1048 | p_menu_info.pcur_frame=pframe; |
|---|
| 1049 | |
|---|
| 1050 | if(p_pcur_menu && p_pcur_menu->id==menu_id) { /* activeµÈ menu */ |
|---|
| 1051 | if(pmenu->pcur_frame) |
|---|
| 1052 | pmenu->pcur_frame->user_proc(eDMG_CMD_ON_FRAME_INACTIVE, 0, |
|---|
| 1053 | (UINT32)pmenu->pcur_frame, |
|---|
| 1054 | pframe?(UINT32)pframe->id:DMG_FRAME_ID_NONE); |
|---|
| 1055 | |
|---|
| 1056 | pmenu->pcur_frame=pframe; |
|---|
| 1057 | |
|---|
| 1058 | for(i=0; i<MAX_NUM_TIMER; i++) { |
|---|
| 1059 | if(p_timer_list[i].opt&eDMG_CMD_OPT_TIMER_LOCAL2) |
|---|
| 1060 | p_timer_list[i].dur_ms=TIMER_NOUSE; |
|---|
| 1061 | } |
|---|
| 1062 | |
|---|
| 1063 | /* timeout ¼³Á¤ */ |
|---|
| 1064 | if(pframe->timeout_ms==DMG_TIME_DEFAULT) |
|---|
| 1065 | DMG_SetTimer(TIMER_ID_TIMEOUT, pmenu->timeout_ms, eDMG_CMD_OPT_TIMER_ONESHOT); |
|---|
| 1066 | else |
|---|
| 1067 | DMG_SetTimer(TIMER_ID_TIMEOUT, pframe->timeout_ms, eDMG_CMD_OPT_TIMER_ONESHOT); |
|---|
| 1068 | |
|---|
| 1069 | if(pmenu->pcur_frame) |
|---|
| 1070 | pmenu->pcur_frame->user_proc(eDMG_CMD_ON_FRAME_ACTIVE, 0, |
|---|
| 1071 | (UINT32)pmenu->pcur_frame, |
|---|
| 1072 | p_menu_info.pprev_frame?(UINT32)p_menu_info.pprev_frame->id:DMG_FRAME_ID_NONE); |
|---|
| 1073 | |
|---|
| 1074 | } |
|---|
| 1075 | else { |
|---|
| 1076 | pmenu->pcur_frame=pframe; |
|---|
| 1077 | } |
|---|
| 1078 | } |
|---|
| 1079 | else { |
|---|
| 1080 | |
|---|
| 1081 | if(pmenu->pcur_frame->id!=pframe->id) { |
|---|
| 1082 | /* ÇöÀç activeµÇ¾îÀÖ´Â frameÀ» inactive, delete½Ãų ¼ö ¾øÀ½ */ |
|---|
| 1083 | |
|---|
| 1084 | } |
|---|
| 1085 | else { |
|---|
| 1086 | pmenu->pcur_frame->user_proc(eDMG_CMD_ON_FRAME_INACTIVE, 0, (UINT32)pmenu->pcur_frame, |
|---|
| 1087 | (UINT32)DMG_FRAME_ID_NONE); |
|---|
| 1088 | |
|---|
| 1089 | for(i=0; i<MAX_NUM_TIMER; i++) { |
|---|
| 1090 | if(p_timer_list[i].opt&eDMG_CMD_OPT_TIMER_LOCAL2) |
|---|
| 1091 | p_timer_list[i].dur_ms=TIMER_NOUSE; |
|---|
| 1092 | } |
|---|
| 1093 | } |
|---|
| 1094 | |
|---|
| 1095 | } |
|---|
| 1096 | } |
|---|
| 1097 | |
|---|
| 1098 | |
|---|
| 1099 | |
|---|
| 1100 | void DMG_SetRedraw(BOOL buse_msgq) |
|---|
| 1101 | { |
|---|
| 1102 | if(!p_pcur_menu) return; |
|---|
| 1103 | |
|---|
| 1104 | p_msg_generator(p_pcur_menu, eDMG_CMD_ON_REDRAW, 0, 0, 0); |
|---|
| 1105 | } |
|---|
| 1106 | |
|---|
| 1107 | |
|---|
| 1108 | |
|---|
| 1109 | void DMG_SetTimer(UINT32 timer_id, UINT32 duration, UINT32 opt) |
|---|
| 1110 | { |
|---|
| 1111 | if(p_menu_task_id!=DHL_OS_GetTaskID()) |
|---|
| 1112 | DMG_SendMessage(eDMG_CMD_SET_TIMER, opt, timer_id, duration); |
|---|
| 1113 | else { |
|---|
| 1114 | p_timer_list[timer_id].dur_ms=duration; |
|---|
| 1115 | p_timer_list[timer_id].opt=opt; |
|---|
| 1116 | p_timer_list[timer_id].start_ms=DHL_OS_GetMsCount(); |
|---|
| 1117 | p_timer_list[timer_id].prev_ms=DHL_OS_GetMsCount(); |
|---|
| 1118 | } |
|---|
| 1119 | } |
|---|
| 1120 | |
|---|
| 1121 | void DMG_KillTimer(UINT32 timer_id) |
|---|
| 1122 | { |
|---|
| 1123 | if(p_menu_task_id!=DHL_OS_GetTaskID()) |
|---|
| 1124 | DMG_SendMessage(eDMG_CMD_SET_TIMER, 0, timer_id, TIMER_NOUSE); |
|---|
| 1125 | else { |
|---|
| 1126 | p_timer_list[timer_id].dur_ms=TIMER_NOUSE; |
|---|
| 1127 | p_timer_list[timer_id].opt=0; |
|---|
| 1128 | p_timer_list[timer_id].start_ms=0; |
|---|
| 1129 | p_timer_list[timer_id].prev_ms=0; |
|---|
| 1130 | } |
|---|
| 1131 | } |
|---|
| 1132 | |
|---|
| 1133 | |
|---|
| 1134 | void DMG_SetKeyInput(UINT32 key_code) |
|---|
| 1135 | { |
|---|
| 1136 | DMG_SendMessage(eDMG_CMD_SET_KEY, 0, key_code, 0); |
|---|
| 1137 | } |
|---|
| 1138 | |
|---|
| 1139 | void DMG_SetUserKeyInput(UINT32 key_code) |
|---|
| 1140 | { |
|---|
| 1141 | DMG_SendMessage(eDMG_CMD_SET_KEY, eDMG_CMD_OPT_USER_KEY, key_code, 0); |
|---|
| 1142 | } |
|---|
| 1143 | |
|---|
| 1144 | |
|---|
| 1145 | void DMG_SetUserDefined(UINT32 id, UINT32 param1, UINT32 param2) |
|---|
| 1146 | { |
|---|
| 1147 | DMG_SendMessage(eDMG_CMD_SET_USER_DEFINE, id, param1, param2); |
|---|
| 1148 | } |
|---|
| 1149 | |
|---|
| 1150 | void DMG_SetMenuTimeout(tDMG_MenuId id, UINT32 timeout) |
|---|
| 1151 | { |
|---|
| 1152 | tDMG_Menu *pmenu=DMG_GetMenu(id); |
|---|
| 1153 | |
|---|
| 1154 | if(!pmenu) { |
|---|
| 1155 | |
|---|
| 1156 | dprint(0, "!! %s : menu id is incorrect\n", __FUNCTION__); |
|---|
| 1157 | return; |
|---|
| 1158 | } |
|---|
| 1159 | |
|---|
| 1160 | pmenu->timeout_ms=timeout; |
|---|
| 1161 | DMG_SetTimer(TIMER_ID_TIMEOUT, timeout, eDMG_CMD_OPT_TIMER_ONESHOT); |
|---|
| 1162 | } |
|---|
| 1163 | |
|---|
| 1164 | void DMG_SetFrameTimeout(tDMG_MenuId menu_id, tDMG_FrameId frame_id, UINT32 timeout) |
|---|
| 1165 | { |
|---|
| 1166 | tDMG_Frame *pframe=DMG_GetFrame(menu_id, frame_id); |
|---|
| 1167 | |
|---|
| 1168 | if(!pframe) { |
|---|
| 1169 | |
|---|
| 1170 | dprint(0, "!! %s : menu or frame id is incorrect\n", __FUNCTION__); |
|---|
| 1171 | return; |
|---|
| 1172 | } |
|---|
| 1173 | |
|---|
| 1174 | pframe->timeout_ms=timeout; |
|---|
| 1175 | } |
|---|
| 1176 | |
|---|
| 1177 | |
|---|
| 1178 | void DMG_SetMenuParam1(tDMG_MenuId id, UINT32 param) |
|---|
| 1179 | { |
|---|
| 1180 | #if 1 |
|---|
| 1181 | DMG_SendMessage(eDMG_CMD_SET_MENU_PARAM1, 0, id, param); |
|---|
| 1182 | |
|---|
| 1183 | #else |
|---|
| 1184 | tDMG_Menu *pmenu=DMG_GetMenu(id); |
|---|
| 1185 | |
|---|
| 1186 | if(!pmenu) { |
|---|
| 1187 | |
|---|
| 1188 | dprint(0, "!! %s : menu id is incorrect\n", __FUNCTION__); |
|---|
| 1189 | return; |
|---|
| 1190 | } |
|---|
| 1191 | |
|---|
| 1192 | pmenu->param1=param; |
|---|
| 1193 | #endif |
|---|
| 1194 | } |
|---|
| 1195 | |
|---|
| 1196 | void DMG_SetMenuParam2(tDMG_MenuId id, UINT32 param) |
|---|
| 1197 | { |
|---|
| 1198 | #if 1 |
|---|
| 1199 | DMG_SendMessage(eDMG_CMD_SET_MENU_PARAM2, 0, id, param); |
|---|
| 1200 | |
|---|
| 1201 | #else |
|---|
| 1202 | tDMG_Menu *pmenu=DMG_GetMenu(id); |
|---|
| 1203 | |
|---|
| 1204 | if(!pmenu) { |
|---|
| 1205 | |
|---|
| 1206 | dprint(0, "!! %s : menu id is incorrect\n", __FUNCTION__); |
|---|
| 1207 | return; |
|---|
| 1208 | } |
|---|
| 1209 | |
|---|
| 1210 | pmenu->param2=param; |
|---|
| 1211 | #endif |
|---|
| 1212 | } |
|---|
| 1213 | |
|---|
| 1214 | |
|---|
| 1215 | void DMG_SetFrameParam1(tDMG_MenuId menu_id, tDMG_FrameId frame_id, UINT32 param) |
|---|
| 1216 | { |
|---|
| 1217 | tDMG_Frame *pframe=DMG_GetFrame(menu_id, frame_id); |
|---|
| 1218 | |
|---|
| 1219 | if(!pframe) { |
|---|
| 1220 | |
|---|
| 1221 | dprint(0, "!! %s : menu or frame id is incorrect\n", __FUNCTION__); |
|---|
| 1222 | return; |
|---|
| 1223 | } |
|---|
| 1224 | |
|---|
| 1225 | pframe->param1=param; |
|---|
| 1226 | } |
|---|
| 1227 | |
|---|
| 1228 | |
|---|
| 1229 | void DMG_SetFrameParam2(tDMG_MenuId menu_id, tDMG_FrameId frame_id, UINT32 param) |
|---|
| 1230 | { |
|---|
| 1231 | tDMG_Frame *pframe=DMG_GetFrame(menu_id, frame_id); |
|---|
| 1232 | |
|---|
| 1233 | if(!pframe) { |
|---|
| 1234 | |
|---|
| 1235 | dprint(0, "!! %s : menu or frame id is incorrect\n", __FUNCTION__); |
|---|
| 1236 | return; |
|---|
| 1237 | } |
|---|
| 1238 | |
|---|
| 1239 | pframe->param2=param; |
|---|
| 1240 | } |
|---|
| 1241 | |
|---|
| 1242 | |
|---|
| 1243 | |
|---|
| 1244 | UINT32 DMG_GetKeyInput(UINT32 time_ms) |
|---|
| 1245 | { |
|---|
| 1246 | DHL_RESULT res; |
|---|
| 1247 | tDMG_Message rcv_msg; |
|---|
| 1248 | int rcv_len; |
|---|
| 1249 | |
|---|
| 1250 | if(!p_msgq_id) return DMG_KEY_NONE; |
|---|
| 1251 | |
|---|
| 1252 | if(time_ms==DMG_TIME_FOREVER) |
|---|
| 1253 | res=DHL_OS_ReceiveMessage(p_msgq_id, &rcv_msg, DHL_TIMEOUT_FOREVER); |
|---|
| 1254 | else if(time_ms==0) |
|---|
| 1255 | res=DHL_OS_ReceiveMessage(p_msgq_id, &rcv_msg, 0); |
|---|
| 1256 | else |
|---|
| 1257 | res=DHL_OS_ReceiveMessage(p_msgq_id, &rcv_msg, time_ms); |
|---|
| 1258 | |
|---|
| 1259 | if(res!=DHL_OK) |
|---|
| 1260 | return DMG_KEY_NONE; |
|---|
| 1261 | |
|---|
| 1262 | if(rcv_msg.cmd!=eDMG_CMD_SET_KEY) return DMG_KEY_NONE; |
|---|
| 1263 | |
|---|
| 1264 | return rcv_msg.param1; |
|---|
| 1265 | } |
|---|
| 1266 | |
|---|
| 1267 | |
|---|
| 1268 | void DMG_GetMenuInfo(tDMG_MenuInfo *pinfo) |
|---|
| 1269 | { |
|---|
| 1270 | *pinfo=p_menu_info; |
|---|
| 1271 | } |
|---|
| 1272 | |
|---|
| 1273 | |
|---|
| 1274 | BOOL DMG_IsMenuOn(tDMG_MenuId menu_id) |
|---|
| 1275 | { |
|---|
| 1276 | int i; |
|---|
| 1277 | |
|---|
| 1278 | for(i=0; i<MAX_NUM_MENU; i++) { |
|---|
| 1279 | if(p_pmenu_list[i] && p_pmenu_list[i]->id==menu_id) { |
|---|
| 1280 | if(p_pmenu_list[i]->status!=eDMG_STATUS_EXIT) |
|---|
| 1281 | return TRUE; |
|---|
| 1282 | else |
|---|
| 1283 | return FALSE; |
|---|
| 1284 | } |
|---|
| 1285 | } |
|---|
| 1286 | |
|---|
| 1287 | return FALSE; |
|---|
| 1288 | } |
|---|
| 1289 | |
|---|
| 1290 | |
|---|
| 1291 | |
|---|
| 1292 | void DMG_MenuStart(tDMG_MenuId menu_id) |
|---|
| 1293 | { |
|---|
| 1294 | tDMG_Menu *pmenu=p_get_menu(menu_id); |
|---|
| 1295 | |
|---|
| 1296 | dprint(1, "%s : menu id(%d)\n", __FUNCTION__, menu_id); |
|---|
| 1297 | |
|---|
| 1298 | if(!pmenu) return; |
|---|
| 1299 | |
|---|
| 1300 | DMG_SendMessage(eDMG_CMD_SET_MENU_START, 0, (UINT32)pmenu, 0); |
|---|
| 1301 | |
|---|
| 1302 | } |
|---|
| 1303 | |
|---|
| 1304 | |
|---|
| 1305 | void DMG_MenuUpdate(tDMG_MenuId menu_id, UINT32 param) |
|---|
| 1306 | { |
|---|
| 1307 | tDMG_Menu *pmenu=p_get_menu(menu_id); |
|---|
| 1308 | |
|---|
| 1309 | dprint(1, "%s : menu id(%d)\n", __FUNCTION__, menu_id); |
|---|
| 1310 | |
|---|
| 1311 | if(!pmenu) return; |
|---|
| 1312 | |
|---|
| 1313 | DMG_SendMessage(eDMG_CMD_SET_MENU_START, eDMG_CMD_OPT_MENU_UPDATE, (UINT32)pmenu, param); |
|---|
| 1314 | } |
|---|
| 1315 | |
|---|
| 1316 | |
|---|
| 1317 | void DMG_MenuExit(tDMG_MenuId menu_id) |
|---|
| 1318 | { |
|---|
| 1319 | dprint(1, "%s \n", __FUNCTION__); |
|---|
| 1320 | |
|---|
| 1321 | if(menu_id==DMG_MENU_ID_DEFAULT) { |
|---|
| 1322 | if(!p_pcur_menu) return; |
|---|
| 1323 | menu_id=p_pcur_menu->id; |
|---|
| 1324 | } |
|---|
| 1325 | |
|---|
| 1326 | DMG_SendMessage(eDMG_CMD_SET_MENU_EXIT, 0, (UINT32)menu_id, 0); |
|---|
| 1327 | } |
|---|
| 1328 | |
|---|
| 1329 | |
|---|
| 1330 | void DMG_MenuExit_ActiveAll() |
|---|
| 1331 | { |
|---|
| 1332 | int i; |
|---|
| 1333 | |
|---|
| 1334 | dprint(1, "--------------------------------------\n"); |
|---|
| 1335 | for(i=0; i<MAX_NUM_MENU; i++) { |
|---|
| 1336 | if(!p_pmenu_list[i]) continue; |
|---|
| 1337 | if(p_pmenu_list[i]->status==eDMG_STATUS_EXIT) continue; |
|---|
| 1338 | |
|---|
| 1339 | /* idle°ú °°ÀÌ ExitÇÏÁö ¸»¾Æ¾ß ÇÏ´Â Áß¿äÇÑ menu id´Â ¿¹¿Ü½Ã۵µ·Ï ÇÑ´Ù. */ |
|---|
| 1340 | //if(p_pmenu_list[i]->id==0x0 || p_pmenu_list[i]->id == 0x1f) { |
|---|
| 1341 | if(p_pmenu_list[i]->id != 0x1f) { // idleÀº exitÇÏÁö ¾Ê´Â´Ù!! |
|---|
| 1342 | dprint(1, "Exit menu id(0x%02x), menu_name(%s)\n", p_pmenu_list[i]->id, p_pmenu_list[i]->name); |
|---|
| 1343 | DMG_MenuExit(p_pmenu_list[i]->id); |
|---|
| 1344 | } |
|---|
| 1345 | } |
|---|
| 1346 | dprint(1, "--------------------------------------\n"); |
|---|
| 1347 | } |
|---|
| 1348 | |
|---|
| 1349 | |
|---|
| 1350 | void DMG_MenuInit(tDMG_MenuManageProc menu_manage_proc) |
|---|
| 1351 | { |
|---|
| 1352 | static BOOL bmenu_inited=FALSE; |
|---|
| 1353 | |
|---|
| 1354 | if(bmenu_inited) return; |
|---|
| 1355 | |
|---|
| 1356 | bmenu_inited=TRUE; |
|---|
| 1357 | |
|---|
| 1358 | p_msgq_id=DHL_OS_CreateMessageQueue("menuq", 0, NUM_MSGQ, sizeof(tDMG_Message)); |
|---|
| 1359 | p_mtx=DHL_OS_CreateMutexSemaphore("menu mtx"); |
|---|
| 1360 | p_sem_sync=DHL_OS_CreateBinarySemaphore("menu sem", 0, FALSE); |
|---|
| 1361 | |
|---|
| 1362 | if(menu_manage_proc) |
|---|
| 1363 | p_menu_manage_proc=menu_manage_proc; |
|---|
| 1364 | else |
|---|
| 1365 | p_menu_manage_proc=p_default_menu_manage_proc; |
|---|
| 1366 | |
|---|
| 1367 | DHL_OS_CreateTask((DHL_OS_TASKFUNCTION)p_menu_task, "t_menu", MENU_TASK_PRIO, MENU_STACK_SIZE, 0); |
|---|
| 1368 | } |
|---|
| 1369 | |
|---|
| 1370 | |
|---|
| 1371 | |
|---|
| 1372 | |
|---|
| 1373 | |
|---|
| 1374 | #if COMMENT |
|---|
| 1375 | __Debug__() {} |
|---|
| 1376 | #endif |
|---|
| 1377 | |
|---|
| 1378 | void show_menu(int level) |
|---|
| 1379 | { |
|---|
| 1380 | int i; |
|---|
| 1381 | |
|---|
| 1382 | DHL_OS_Printf("---------------------------------\n"); |
|---|
| 1383 | for(i=0; i<MAX_NUM_MENU; i++) { |
|---|
| 1384 | if(!p_pmenu_list[i]) continue; |
|---|
| 1385 | if(level==0 && p_pmenu_list[i]->status==eDMG_STATUS_EXIT) continue; |
|---|
| 1386 | |
|---|
| 1387 | DHL_OS_Printf(" id(0x%02x), Status(%s), below 0x%x, %s\n", p_pmenu_list[i]->id, |
|---|
| 1388 | p_pmenu_list[i]->status==eDMG_STATUS_ACTIVE?"A":p_pmenu_list[i]->status==eDMG_STATUS_INACTIVE?"I": |
|---|
| 1389 | p_pmenu_list[i]->status==eDMG_STATUS_INVISIBLE?"H":"-", |
|---|
| 1390 | p_pmenu_list[i]->pbelow ? p_pmenu_list[i]->pbelow->id : 0xff, |
|---|
| 1391 | p_pmenu_list[i]->name); |
|---|
| 1392 | |
|---|
| 1393 | } |
|---|
| 1394 | if (s_trace_menu_id >= 0) |
|---|
| 1395 | DHL_OS_Printf("menu trace: id %x\n", s_trace_menu_id); |
|---|
| 1396 | if (s_trace_menu_name[0]) |
|---|
| 1397 | DHL_OS_Printf("menu trace keyword: '%s'\n", s_trace_menu_name); |
|---|
| 1398 | DHL_OS_Printf("---------------------------------\n"); |
|---|
| 1399 | } |
|---|
| 1400 | |
|---|
| 1401 | /* id¸¦ ÁöÁ¤ÇÏ¿© ƯÁ¤ menu¸¦ trace ÇÑ´Ù. */ |
|---|
| 1402 | void trace_menu_by_id(int id) |
|---|
| 1403 | { |
|---|
| 1404 | s_trace_menu_id = id; |
|---|
| 1405 | } |
|---|
| 1406 | |
|---|
| 1407 | /* ¸Þ´º À̸§ÀÇ ÀϺκРÀ» ÁöÁ¤ÇÏ¿© trace ÇÑ´Ù. */ |
|---|
| 1408 | void trace_menu_by_name(char *name) |
|---|
| 1409 | { |
|---|
| 1410 | if (name && name[0] && strlen(name)<sizeof(s_trace_menu_name)) |
|---|
| 1411 | strcpy(s_trace_menu_name, name); |
|---|
| 1412 | else |
|---|
| 1413 | s_trace_menu_name[0] = 0; |
|---|
| 1414 | } |
|---|
| 1415 | |
|---|
| 1416 | |
|---|
| 1417 | |
|---|
| 1418 | |
|---|
| 1419 | |
|---|
| 1420 | /* end of file */ |
|---|