/* DMW_MsgQue.h */ #ifndef __DMW_MSGQUE_H__ #define __DMW_MSGQUE_H__ typedef struct { UINT8 *MsgBuf; int nMsgSize; // Msg ÇѰ³ÀÇ Å©±â. »ç¿ëÀÚ Á¤ÀÇ typeÀÇ sizeof() Å©±â¶ó°í º¸¸é µÈ´Ù. int nMaxQueSize; int nNumberMsg; DHL_OS_SEMA_ID Mutex; DHL_OS_SEMA_ID Sema4; // counting sema4 char *(*pfnMsgName)(void *pMsg); } DMW_MSGQUE; typedef char *(*DMW_FN_MSG_NAME)(void *msg); typedef BOOL (*DMW_FN_MSG_CHECK)(void *msg, UINT32 param); typedef void (*DMW_FN_MSG_DELETE)(void *msg); STATUS DMW_SYS_InitMsgQue(DMW_MSGQUE *hMsgQue, int nMsgSize, int nInitialQueSize, DMW_FN_MSG_NAME pfnName); // MsgQue¸¦ ÃʱâÈ­ ÇÑ´Ù. // nMsgSize´Â »ç¿ëÀÚ ¸Þ½ÃÁö ÇϳªÀÇ byte Å©±âÀÌ´Ù. // pfnNameÀº µð¹ö±ë ¿ëµµ·Î »ç¿ëµÇ¸ç, °¢ ¸Þ½ÃÁö¿¡ À̸§À» ºÎ¿©ÇÏ¿© consol¿¡ Ãâ·ÁÇÒ ¶§ »ç¿ë. // »ç¿ëÇÏÁö ¾ÊÀ¸·Á¸é NULLÀ» ÁöÁ¤ÇÑ´Ù. STATUS DMW_SYS_AddUserMsg(DMW_MSGQUE *hMsgQue, void *pMsg); STATUS DMW_SYS_GetUserMsg(DMW_MSGQUE *hMsgQue, void *pMsg, UINT32 uTimeoutTicks); // timeout Àº MsgQue¿¡ ¸Þ½ÃÁö°¡ ¾ø´Â °æ¿ì ±â´Ù¸®°Ô µÉ ½Ã°£ÀÌ´Ù. // 0 ÀÌ¸é ±â´Ù¸®Áö ¾ÊÀ½. ¸Þ½ÃÁö°¡ ¾øÀ¸¸é ¹Ù·Î ¿¡·¯¸¦ ¸®ÅÏÇÑ´Ù. // (UINT32)-1 À̸é timeout ¾øÀÌ ¹«ÇÑÁ¤ ±â´Ù¸°´Ù. // timeout °ªÀº OS tick ´ÜÀ§ÀÓ. BOOL DMW_SYS_UserMsgExist(DMW_MSGQUE *hMsgQue); // ¸Þ½ÃÁö°¡ Çϳª¶óµµ Á¸ÀçÇϸé true¸¦ ¸®ÅÏ. BOOL DMW_SYS_CheckSpecificMsgExist(DMW_MSGQUE *hMsgQue, DMW_FN_MSG_CHECK pfnCheck, UINT32 param); // ƯÁ¤ ¸Þ½ÃÁö°¡ Á¸ÀçÇÏ´ÂÁö üũÇÒ ¶§ »ç¿ë. // ¸Þ½ÃÁö ºñ±³ (comparion check) ÇÔ¼ö Æ÷ÀÎÅ͸¦ ÀÎÀÚ·Î Á¦°øÇØ¾ß ÇÑ´Ù. STATUS DMW_SYS_DeleteMsgConditionally(DMW_MSGQUE *hMsgQue, DMW_FN_MSG_CHECK fnCondition, UINT32 param, DMW_FN_MSG_DELETE fnDelete); // ƯÁ¤ Á¶°Ç¿¡ ¸Â´Â ¸Þ½ÃÁö¸¦ Queue¿¡¼­ »èÁ¦. // void DMW_SYS_PrintUserMsgs(DMW_MSGQUE *hMsgQue, DMW_FN_MSG_NAME fnName2); // ¸Þ½ÃÁö Å¥ÀÇ ³»¿ëÀ» consol¿¡ Ç¥½Ã. // ¸Þ½ÃÁö´Â ±×³É void * ·Î °£ÁֵǾî ÀúÀåµÇ¾ú±â ¶§¹®¿¡ // ¾î¶² ¸Þ½ÃÁöÀÎÁö¸¦ ¾Ë·ÁÁÖ´Â naming functionÀ» Á¦°øÇØ¾ß °¢ ¸Þ½ÃÁö¸¦ ±¸º°ÇØ º¼¼ö ÀÖ´Ù. // ¿©±â¼­ ÀÎÀÚ·Î ÁöÁ¤ÇÑ naming functionÀÌ MsgQue¸¦ óÀ½ »ý¼ºÇÒ ¶§ // ÁöÁ¤Çß´ø naming function º¸´Ù ¿ì¼±ÇÑ´Ù. // Áï fnName2°¡ NULLÀ̸é pfnNameÀ» »ç¿ëÇÔ. #endif // __DMW_MSGQUE_H__