#ifndef __GRP_MENU_H__ #define __GRP_MENU_H__ /* config */ #define MAX_NUM_MENU 32 /* ÃÖ´ë·Î ¸¸µé ¼ö ÀÖ´Â menu °¹¼ö : 1-32 »ç¿ë °¡´É, 0¹øÀº Ưº°ÇÑ ¿ëµµ·Î »ç¿ëµÊ */ #define MAX_NUM_TIMER 64 /* »ç¿ë °¡´ÉÇÑ timerÀÇ °¹¼ö */ #define MAX_NUM_FRAME 64 /* menu ´ç »ý¼ºÇÒ ¼ö ÀÖ´Â frameÀÇ °¹¼ö */ #define DMG_TIME_FOREVER ((UINT32)-1) #define DMG_TIME_DEFAULT ((UINT32)-2) #define DMG_MENU_ID_NONE ((tDMG_MenuId)-1) #define DMG_MENU_ID_DEFAULT ((tDMG_MenuId)-2) #define DMG_FRAME_ID_NONE ((tDMG_FrameId)-1) #define DMG_FRAME_ID_DEFAULT ((tDMG_FrameId)-2) #define DMG_KEY_NONE ((UINT32)-1) #define DMG_HIWORD(w) ((w)>>16) #define DMG_LOWORD(w) ((w)&0xffff) #define DMG_MAKEWORD(n1,n2) (((n1)&0xffff)<<16|((n2)&0xffff)) typedef UINT8 tDMG_MenuId; typedef UINT32 tDMG_FrameId; typedef UINT32 tDMG_MenuList; /* user procÀÇ °¢ command º° param ¿ëµµ -id -param1 -param2 opt eDMG_CMD_ON_MENU_ENTER current menu pointer NULL eDMG_CMD_ON_MENU_ACTIVE current menu pointer inactived menu id eDMG_CMD_ON_MENU_INACTIVE current menu pointer to be actived menu id eDMG_CMD_ON_MENU_INVISIBLE current menu pointer to be actived menu id eDMG_CMD_ON_MENU_EXIT current menu pointer to be actived menu id eDMG_CMD_ON_MENU_UPDATE current menu pointer user param eDMG_CMD_ON_FRAME_ACTIVE current frame pointer inactived frame id eDMG_CMD_ON_FRAME_INACTIVE current frame pointer actived frame id eDMG_CMD_ON_FRAME_INVISIBLE current frame pointer actived frame id eDMG_CMD_ON_FRAME_EXIT current frame pointer NULL eDMG_CMD_ON_REDRAW ÇØ´ç menu pointer ÇØ´ç frame pointer eDMG_CMD_ON_TIME timer id elapsed time eDMG_CMD_ON_TIMEOUT elapsed time NULL eDMG_CMD_ON_KEY ÇØ´ç menu pointer key code eDMG_CMD_ON_USER_DEFINE ÇØ´ç param1 °ª ÇØ´ç param2 °ª user define id set commandÀÇ param º° ¿ëµµ(³»ºÎ¿ë) -id -param1 -param2 -opt eDMG_CMD_SET_KEY key code NULL pseudo key ¿©ºÎ eDMG_CMD_SET_TIMER timer id duration(ms) option eDMG_CMD_SET_MENU_START menu id opt NULL eDMG_CMD_SET_MENU_EXIT menu id NULL NULL eDMG_CMD_SET_FRAME_ACTIVE frame id NULL NULL eDMG_CMD_SET_FRAME_INACTIVE frame id NULL NULL eDMG_CMD_SET_SYNC NULL NULL NULL eDMG_CMD_SET_REDRAW NULL NULL NULL eDMG_CMD_SET_USER_DEFINE param1 param2 user define id eDMG_CMD_SET_MENU_PARAM1 menu id tDMG_Menu:param1 eDMG_CMD_SET_MENU_PARAM2 menu id tDMG_Menu:param1 */ typedef enum { eDMG_CMD_NONE, //¾Æ¹«·± ÀÇ¹Ì ¾ø´Â command /* ¸Þ´º USER PROC¿¡¸¸ Àü´ÞµÊ. param1¿¡ ÇØ´ç Menu¿¡ ´ëÇÑ Æ÷ÀÎÅͰ¡ Àü´ÞµÊ ¸¸ÀÏ USER PROC¿¡¼­ ¸®ÅϰªÀ¸·Î FALSE¸¦ ³Ñ±â¸é ±âº» 󸮰¡ ÁøÇàµÇ°í TRUE¸¦ ¸®ÅϰªÀ¸·Î ³Ñ±â¸é ¾Æ¹« 󸮸¦ ÇÏÁö ¾ÊÀ½ */ eDMG_CMD_ON_MENU_ENTER, eDMG_CMD_ON_MENU_ACTIVE, eDMG_CMD_ON_MENU_INACTIVE, eDMG_CMD_ON_MENU_INVISIBLE, eDMG_CMD_ON_MENU_EXIT, eDMG_CMD_ON_MENU_UPDATE, /* ÇÁ·¹ÀÓ USER PROC¿¡¸¸ Àü´ÞµÊ. param1 : menu Æ÷ÀÎÅÍ , param2 : frame Æ÷ÀÎÅÍ */ eDMG_CMD_ON_FRAME_ACTIVE, /* frame activeµÉ ¶§*/ eDMG_CMD_ON_FRAME_INACTIVE, /* frame inactiveµÉ ¶§*/ eDMG_CMD_ON_FRAME_INVISIBLE, /* frame invisibleµÉ ¶§*/ eDMG_CMD_ON_FRAME_EXIT, /* ¸Þ´º°¡ exitµÉ ¶§*/ /* È­¸éÀ» »õ·Ó°Ô ±×¸². ¸ÕÀú Menu User ProcÀ» È£ÃâÇϰí, ¸®ÅϰªÀÌ falseÀÏ °æ¿ì, Ȱ¼ºÈ­µÈ frameÀÇ user procÀ» È£ÃâÇÔ. param1¿¡´Â menu Æ÷ÀÎÅÍ, param2¿¡´Â frame Æ÷ÀÎÅÍ °ªÀÌ µé¾î°¨ */ eDMG_CMD_ON_REDRAW, /* ¸ÕÀú menu¿¡ Àü´ÞµÇ°í, 󸮵ÇÁö ¾ÊÀ¸¸é 󸮵ɶ§±îÁö ¸Þ´º ¾ÈÀÇ ¸ðµç frame¿¡ Àü´ÞµÊ param1 : timer id, param2 : elapsed time */ eDMG_CMD_ON_TIME, /* ¸ÕÀú menu¿¡ Àü´ÞµÇ°í, 󸮵ÇÁö ¾ÊÀ¸¸é Ȱ¼ºÈ­µÈ frame¿¡ Àü´ÞµÊ param1 : elapsed time */ eDMG_CMD_ON_TIMEOUT, /* ¸ÕÀú menu¿¡ Àü´ÞµÇ°í, 󸮵ÇÁö ¾ÊÀ¸¸é Ȱ¼ºÈ­µÈ frame¿¡ Àü´ÞµÊ param1 : menu Æ÷ÀÎÅÍ, param2 : key code */ eDMG_CMD_ON_KEY, eDMG_CMD_ON_USER_DEFINED, /* param1 : key code */ eDMG_CMD_SET_KEY=0x40, /* param1 : id, opt : opt, param2 : duration */ eDMG_CMD_SET_TIMER=0x80, /* param1 : id */ eDMG_CMD_SET_MENU_START, eDMG_CMD_SET_MENU_EXIT, /* param1 : menu id, param2 : frame id */ eDMG_CMD_SET_FRAME_ACTIVE, eDMG_CMD_SET_FRAME_INACTIVE, eDMG_CMD_SET_SYNC, eDMG_CMD_SET_REDRAW, eDMG_CMD_SET_USER_DEFINE, /* »ç¿ëÀÚ Á¤ÀÇ */ eDMG_CMD_SET_MENU_PARAM1, eDMG_CMD_SET_MENU_PARAM2, } tDMG_CMD; /* ¾Æ·¡ ÄÚµåÀÇ Å©±â°¡ ³Ê¹« Ä¿Áö¹Ç·Î macro°¡ ¾Æ´Ñ functionÀ¸·Î »ç¿ëµÇ´Â °ÍÀÌ ¹Ù¶÷Á÷ÇÔ. */ #ifdef __DEFINE_DMG_STR__ #define __DMG_CMD_STR(cmd) \ cmd==eDMG_CMD_ON_MENU_ENTER?"on menu enter":\ cmd==eDMG_CMD_ON_MENU_ACTIVE?"on menu active":\ cmd==eDMG_CMD_ON_MENU_INACTIVE?"on menu inactive":\ cmd==eDMG_CMD_ON_MENU_INVISIBLE?"on menu invisible":\ cmd==eDMG_CMD_ON_MENU_EXIT?"on menu exit":\ cmd==eDMG_CMD_ON_MENU_UPDATE?"on menu update":\ cmd==eDMG_CMD_ON_FRAME_ACTIVE?"on frame active":\ cmd==eDMG_CMD_ON_FRAME_INACTIVE?"on frame inactive":\ cmd==eDMG_CMD_ON_FRAME_INVISIBLE?"on frame invisible":\ cmd==eDMG_CMD_ON_FRAME_EXIT?"on frame exit":\ cmd==eDMG_CMD_ON_REDRAW?"on redraw":\ cmd==eDMG_CMD_ON_TIME?"on time":\ cmd==eDMG_CMD_ON_TIMEOUT?"on timeout":\ cmd==eDMG_CMD_ON_KEY?"on key":\ cmd==eDMG_CMD_ON_USER_DEFINED?"on user define":\ cmd==eDMG_CMD_SET_KEY?"set key":\ cmd==eDMG_CMD_SET_TIMER?"set timer":\ cmd==eDMG_CMD_SET_MENU_START?"set menu start":\ cmd==eDMG_CMD_SET_MENU_EXIT?"set menu exit":\ cmd==eDMG_CMD_SET_FRAME_ACTIVE?"set frame active":\ cmd==eDMG_CMD_SET_FRAME_INACTIVE?"set frame inactive":\ cmd==eDMG_CMD_SET_SYNC?"set sync":\ cmd==eDMG_CMD_SET_REDRAW?"set redraw":\ cmd==eDMG_CMD_SET_USER_DEFINE?"set user define":\ cmd==eDMG_CMD_SET_MENU_PARAM1?"set menu param1":\ cmd==eDMG_CMD_SET_MENU_PARAM2?"set menu param2":\ "unknown" /* function definition */ const char *DMG_CMD_STR(tDMG_CMD cmd) { return __DMG_CMD_STR(cmd); } #else /* function declaration only */ const char *DMG_CMD_STR(tDMG_CMD cmd); #endif /* command optionÀº »óÀ§ 2byte¸¦ »ç¿ëÇÔ. ÇÏÀ§ 2byte´Â user optionµéÀÓ */ typedef enum { eDMG_CMD_OPT_TIMER_ONESHOT=0x10000, eDMG_CMD_OPT_TIMER_LOCAL1=0x20000, /* menu¿¡¼­¸¸ »ç¿ëÇÔ, menuÀÌ ¹Ù²î¸é ÀÚµ¿ reset*/ eDMG_CMD_OPT_TIMER_LOCAL2=0x40000, /* frame¿¡¼­¸¸ »ç¿ëÇÔ, menu°¡ ¹Ù²î¸é ÀÚµ¿ reset*/ eDMG_CMD_OPT_SYNC=0x100000, eDMG_CMD_OPT_USER_KEY=0x200000, /* RCU°¡ ¾Æ´Ï¶ó, »ç¿ëÀÚ¿¡ ÀÇÇØ »ý¼ºµÈ Ű.*/ eDMG_CMD_OPT_MENU_UPDATE=0x400000, /* menu start¿¡¼­ »ç¿ëµÇ´Â opt·Î update ¸ðµå·Î µ¿ÀÛÇÔ */ eDMG_CMD_OPT_URGENT=0x800000 /* urgent, inner msgq¿¡¼­ ó¸®µÊ */ } tDMG_CmdOpt; typedef enum { eDMG_STATUS_EXIT=0, /* ¸Þ´ºÀÇ Ãʱ⠻óÅÂ, MenuStart¸¦ È£ÃâÇϸé INITED »óÅ·ΠÀüÀÌµÊ */ eDMG_STATUS_ACTIVE, /* ¸Þ´º°¡ ÃÖ»óÀ§¿¡ ¶° ÀÖÀ½ */ eDMG_STATUS_INACTIVE, /* ¸Þ´º°¡ ¶° ÀÖ±ä ÇÏÁö¸¸, »óÀ§ ¸Þ´º¿¡ ÀÇÇØ °¡·ÁÁü */ eDMG_STATUS_INVISIBLE /* »óÀ§ ¸Þ´º ¶§¹®¿¡ ¸Þ´º°¡ ¾Æ¹« °Íµµ º¸ÀÌÁö ¾ÊÀ½ */ } tDMG_Status; typedef enum { /* menu manage - start */ eDMG_MENU_MANAGE_DENY=0, /* »õ·Î¿î ¸Þ´º¸¦ ¶ç¿ìÁö ¾ÊÀ½ */ eDMG_MENU_MANAGE_DENY_BUT_INACTIVE, /* »õ·Î¿î ¸Þ´º¸¦ ¶ç¿ìÁö ¾ÊÀ¸³ª, INACTIVE »óÅ·ΠÀüÀÌÇÔ */ eDMG_MENU_MANAGE_DENY_BUT_HIDE, /* »õ·Î¿î ¸Þ´º¸¦ ¶ç¿ìÁö ¾ÊÀ¸³ª, INVISIBLE »óÅ·ΠÀüÀÌÇÔ */ eDMG_MENU_MANAGE_INACTIVE_AND_DRAW, /* ±âÁ¸ ¸Þ´º¸¦ ±×´ë·Î µÎ°í ±× À§¿¡ »õ·Î¿î ¸Þ´º¸¦ ±×¸² */ eDMG_MENU_MANAGE_HIDE_PREV_AND_DRAW, /* ±âÁ¸ ¸Þ´º¸¦ HIDEÇÏ°í »õ·Î¿î ¸Þ´º¸¦ ±×¸² */ eDMG_MENU_MANAGE_HIDE_ALL_AND_DRAW, eDMG_MENU_MANAGE_EXIT_PREV_AND_DRAW, /* ±âÁ¸ ÃÖ»óÀ§ ¸Þ´º EXIT ÈÄ »õ·Î¿î ¸Þ´º¸¦ ±×¸² */ eDMG_MENU_MANAGE_EXIT_ALL_AND_DRAW, /* ±âÁ¸ ¸Þ´º EXIT ÈÄ »õ·Î¿î ¸Þ´º¸¦ ±×¸² */ /* menu manange - exit */ eDMG_MENU_MANAGE_EXIT, /* ÀϹÝÀûÀÎ Á¾·á */ eDMG_MENU_MANAGE_EXIT_SILENT, /* ÇØ´ç ¸Þ´º¿¡ EXIT¸¦ º¸³»Áö ¾Ê°í Á¾·áÇÔ */ } tDMG_MenuManange; typedef struct { BOOL is_start; tDMG_MenuId active_id; tDMG_MenuId action_id; /* is_start°¡ trueÀÏ °æ¿ì new active id, falseÀÏ °æ¿ì delete menu id */ tDMG_MenuId new_active_id; /* ¸¸ÀÏ is_start°¡ false¶ó¸é new_active_id¿¡ menu¸¦ ³Ö¾îÁÜ */ tDMG_MenuList inactive_list; tDMG_MenuList invisible_list; } tDMG_MenuManageParam; typedef BOOL (*tDMG_UserProc)(tDMG_CMD cmd, UINT32 opt, UINT32 param1, UINT32 param2); /* TRUEÀ̸é 󸮵Ê, FALSEÀ̸é menu¿¡¼­ ó¸®ÇÔ. */ typedef tDMG_MenuManange (*tDMG_MenuManageProc)(tDMG_MenuManageParam *pmanage_param); typedef struct { tDMG_FrameId id; char *name; UINT16 cur_item_id; /*ÇöÀç ¼±ÅÃµÈ item id.*/ UINT16 num_item; /* itemÀÇ °¹¼ö */ UINT32 param1; /* »ç¿ëÀÚ°¡ Á¤ÀÇÇØ¼­ »ç¿ëÇÔ */ UINT32 param2; /* »ç¿ëÀÚ°¡ Á¤ÀÇÇØ¼­ »ç¿ëÇÔ */ UINT32 timeout_ms; tDMG_UserProc user_proc; } tDMG_Frame; typedef struct _tDMG_Menu { tDMG_MenuId id; /* menu id 0Àº »ç¿ë ºÒ°¡ -> Ưº°ÇÑ ¿ëµµ·Î »ç¿ëÇÔ, MID´Â menu°¡ invisible »óÅ¿¡ ÀÖÀ» ¶§ ÀÏÁ¾ÀÇ priority ¿ªÇÒÀ» ÇÔ Áï priority°¡ ³ôÀº °Í(0¿¡ °¡±î¿î °Í)ÀÌ ¿ì¼± ¼øÀ§¸¦ °¡Áü 1-31»çÀÌÀÇ °ªÀ» »ç¿ëÇÒ °Í */ char *name; tDMG_Status status; UINT32 priority; DHL_OS_TASK_ID task_id; tDMG_Frame *pcur_frame; tDMG_Frame *pframe_list[MAX_NUM_FRAME]; UINT32 timeout_ms; struct _tDMG_Menu *pbelow; UINT32 param1; /* »ç¿ëÀÚ°¡ Á¤ÀÇÇØ¼­ »ç¿ëÇÔ */ UINT32 param2; tDMG_UserProc user_proc; } tDMG_Menu; typedef struct { tDMG_CMD cmd; UINT32 opt; UINT32 param1; UINT32 param2; } tDMG_Message; typedef struct { tDMG_Menu *pcur_menu; tDMG_Menu *pprev_menu; tDMG_Frame *pcur_frame; tDMG_Frame *pprev_frame; UINT32 ms_last_key; /* ¸¶Áö¸·À¸·Î ۰¡ ´­·ÁÁø ¶§ */ tDMG_CMD last_cmd; /* not used */ } tDMG_MenuInfo; BOOL DMG_GetMenuStatus(tDMG_MenuId menu_id); void DMG_SendMessage(tDMG_CMD cmd, UINT32 opt, UINT32 param1, UINT32 param2); tDMG_Menu *DMG_CreateMenu(tDMG_MenuId id, char *name, UINT32 timeout_ms, tDMG_UserProc user_proc); tDMG_Frame *DMG_CreateFrame(tDMG_Menu *pmenu, tDMG_FrameId id, char *name, UINT32 num_item, tDMG_UserProc user_proc); tDMG_Frame *DMG_AttachFrame(tDMG_Menu *pmenu, tDMG_Frame *pframe); tDMG_Menu *DMG_GetMenu(tDMG_MenuId menu_id); tDMG_Frame *DMG_GetFrame(tDMG_MenuId menu_id, tDMG_FrameId frame_id); tDMG_Menu *DMG_GetCurMenu(void); tDMG_Frame *DMG_GetCurFrame(void); void DMG_SetFrame(tDMG_CMD cmd, tDMG_MenuId menu_id, tDMG_FrameId frame_id, BOOL buse_msgq); void DMG_SetRedraw(BOOL buse_msgq); void DMG_SetTimer(UINT32 timer_id, UINT32 duration, UINT32 opt); void DMG_KillTimer(UINT32 timer_id); void DMG_SetKeyInput(UINT32 key_code); /* RCU¿¡ ÀÇÇÑ Å° ¹ß»ýÀÌ ¾Æ´Ï¶ó ³»ºÎÀûÀΠŰ ¹ß»ý ½Ã »ç¿ë */ void DMG_SetUserKeyInput(UINT32 key_code); void DMG_SetUserDefined(UINT32 id, UINT32 param1, UINT32 param2); void DMG_SetMenuTimeout(tDMG_MenuId id, UINT32 timeout); void DMG_SetFrameTimeout(tDMG_MenuId menu_id, tDMG_FrameId id, UINT32 timeout); void DMG_SetMenuParam1(tDMG_MenuId id, UINT32 param); void DMG_SetMenuParam2(tDMG_MenuId id, UINT32 param); void DMG_SetFrameParam1(tDMG_MenuId menu_id, tDMG_FrameId frame_id, UINT32 param); void DMG_SetFrameParam2(tDMG_MenuId menu_id, tDMG_FrameId frame_id, UINT32 param); UINT32 DMG_GetKeyInput(UINT32 time_ms); void DMG_GetMenuInfo(tDMG_MenuInfo *pinfo); BOOL DMG_IsMenuOn(tDMG_MenuId menu_id); void DMG_MenuStart(tDMG_MenuId menu_id); void DMG_MenuUpdate(tDMG_MenuId menu_id, UINT32 param); void DMG_MenuExit(tDMG_MenuId menu_id); void DMG_MenuExit_ActiveAll(void); void DMG_MenuInit(tDMG_MenuManageProc menu_manage_proc); #endif /* __GRP_MENU_H__ */