/** @file OSX_Task.h @brief OSAL ±â¹ÝÀÇ ¹ü¿ë ŽºÅ© API ¹ü¿ëÀ¸·Î »ç¿ë °¡´ÉÇÑ Å½ºÅ© Skeleton Copyright 2006~2010 Digital STREAM Technology, Inc. All Rights Reserved */ #ifndef __OSX_TASK_H__ #define __OSX_TASK_H__ #include "DHL_OSAL.h" #ifdef __cplusplus extern "C" { #endif #if COMMENT ____Overview____(){} #endif /** @file OSX_Task.h - °³³ä °ü·Ã ³»¿ëÀº ±¸±Û ¹®¼­ Âü°í. - ¹®¼­ À̸§: - URL - module overview - dependencies - OSAL (Task, Tick, MsgQ, ...) ŸÀÌ¹Ö Á¤È®µµ´Â OSALÀÇ Tick Á¤È®µµ¿¡ µû¸¥´Ù. ¾ÆÁÖ Á¤È®ÇÑ °èÃø ¿ëÀ¸·Î´Â ÀûÀýÇÏÁö ¾ÊÀ» ¼ö ÀÖÀ½. */ #if COMMENT ____Config____(){} #endif /* OSX Task Á¤º¸¸¦ À§ÇÑ ¿µ¿ªÀº ¹Ì¸® °íÁ¤µÈ Å©±â·Î ÇÒ´çÇØ ³õ´Â´Ù. */ #ifndef OSX_MAX_TASK #define OSX_MAX_TASK 32 #endif /* task command proc ¿¡¼­ »ç¿ëÇÒ argumentÀÇ ÃÖ´ë °¹¼ö. ÀÌ °ªÀº ¿ÜºÎ¿¡¼­ override °¡´ÉÇÏ´Ù. */ #ifndef OSX_MAX_USER_PARAMS #define OSX_MAX_USER_PARAMS 4 #endif #if OSX_MAX_USER_PARAMS > 8 #error too many user params #endif #if COMMENT ____Types____(){} #endif /** @brief OSX ŽºÅ© ÇÚµé. OSX_TaskStart ½ÇÇà °á°ú·Î ¸®ÅϵǴ °ªÀÌ´Ù. */ typedef UINT32 H_OSX_TASK; /** @brief command id ŸÀÔ. ÀÏ¹Ý ¼ýÀÚ °ªÀÌ´Ù. ÀÌ ¿µ¿ª Áß¿¡¼­ »ç¿ëÀÚ°¡ »ç¿ëÇÒ ¼ö ¾ø´Â ¿¹¾à ¿µ¿ªÀÌ ÀÖ´Ù. - cmd id 0Àº »ç¿ë ºÒ°¡. - cmd id°¡ OSX_CMD_RESERVED ÀÌ»óÀÇ °ª »ç¿ë ºÒ°¡. */ typedef UINT8 T_OSX_TASK_CMD; /** @brief ŽºÅ© »ý¼º ÆÄ¶ó¹ÌÅÍ. OSX_TaskStart ÀÇ ÀÎÀÚ·Î ÇÊ¿äÇÔ. µðÆúÆ® °ªÀº OSX_TaskGetDefaultInitSetting API·Î ¾òÀ» ¼ö ÀÖÀ¸³ª °¡´ÉÇÏ¸é °¢°¢ ÁöÁ¤ÇØ ÁÖ´Â °ÍÀÌ ±ÇÀåµÊ. */ typedef struct { char *name; ///< ÀÌ Å½ºÆ® À̸§. ÃÖ´ë 8ÀÚ. /** this will be copied into internal DB. so local stack space can be used for name. */ int max_scheduled_cmd; ///< ÀÌ Å½ºÅ©¿¡¼­ µ¿½Ã¿¡ Áö¿øÇÏ´Â ¿¹¾à ¸í·É¾î ÃÖ´ë °¹¼ö. 0º¸´Ù Ä¿¾ß ÇÔ. int priority; ///< ŽºÅ©ÀÇ ¿ì¼± ¼øÀ§. int stack_size; ///< ŽºÅ©ÀÇ ½ºÅà ũ±â. int num_cmd_param; ///< command ÀÎÀÚ·Î ¸î °³°¡ ÇÊ¿äÇÑÁö. ///< 0À» ÁöÁ¤Çϸé 1·Î ÀÚµ¿ ¼³Á¤µÈ´Ù. int msg_que_size; ///< task message queueÀÇ Å©±â. ///< 0À» ÁöÁ¤ÇÏ¸é µðÆúÆ® 20À¸·Î Àç¼³Á¤µÊ. } S_OSX_TASK_INIT_SETTING; /** @brief command proc. OSX_TaskSendCmd ¿¡¼­ »ç¿ëµÈ´Ù. param °¡º¯ ÀÎÀÚÀÇ ½ÇÁ¦ °¹¼ö´Â ÀÌ prototype ¿¡¼­´Â ¾Ë ¼ö¾ø´Ù. task start ÇÒ ¶§ ÁöÁ¤ÇÑ °¹¼ö ¸¸Å­ »ç¿ë °¡´ÉÇÏ´Ù. */ typedef void (*F_OSX_TASK_PROC)(T_OSX_TASK_CMD nIdCmd, UINT32 param, ...); /** @brief OSX_TaskScheduleCmd ³»ºÎ¿¡¼­ ÁöÁ¤ÇÏ´Â flagµé. ½ÇÇà ¸ðµå °ü·ÃÇØ¼­´Â */ typedef enum { /** Áï½Ã ½ÇÇà ¿É¼Ç. °¡Àå ÀϹÝÀûÀÎ ¿É¼Ç. ÁöÁ¤ÇÏÁö ¾ÊÀ¸¸é ÀÌ ¸ðµå·Î µ¿ÀÛ. */ eTASK_FLAG_Normal = 0x0, /** Áö¿¬ ½ÇÇà ¿É¼Ç. ¹Ù·Î ½ÇÇàÇÏÁö ¾Ê°í ÁöÁ¤ÇÑ delay¸¸Å­ ±â´Ù¸° ÈÄ¿¡ ½ÇÇà. */ eTASK_FLAG_Delayed = 0x1, /** ¹Ýº¹ ½ÇÇà ¿É¼Ç. interval (ÁÖ±â)¿¡ ¸ÂÃç ¹Ýº¹ ½ÇÇà. */ eTASK_FLAG_Repeat = 0x2, /** °¢Á¾ ÆÄ»ý ¸ðµåµé */ eTASK_FLAG_WaitAndRepeat = (eTASK_FLAG_Delayed | eTASK_FLAG_Repeat), eTASK_FLAG_NowAndRepeat = (eTASK_FLAG_Normal | eTASK_FLAG_Repeat), /* ¸ðµç °æ¿ìÀÇ ¼ö: call ------------------------------------------> time Normal Action Delayed Action WaitAndRepeat Action Action Action ... NowAndRepeat Action Action Action Action ... |<-delay->|<-delay->|<-delay->|<-delay->| */ } E_OSX_TASK_CMD_FLAGS; /** @brief taskÀÇ °£´ÜÇÑ Á¤º¸ OSX_TaskGetInfo API ¿¡¼­ »ç¿ë. */ typedef struct { DHL_OS_TASK_ID tid; } S_OSX_TASK_INFO; #if COMMENT ____Defines____(){} #endif /* cmd id Áß¿¡¼­ ¿¹¾à µÈ ºÎºÐ. ÀÌ °ª ÀÌ»óÀº »ç¿ë ±ÝÁöÀÓ. */ #define OSX_CMD_RESERVED 0xf0 #if COMMENT ____LowLevel_API____(){} #endif /** @brief ŽºÅ©¿¡¼­ ¸í·ÉÀ» Á÷Á¢ ½ÇÇàÇϵµ·Ï Çϰųª, ¿¹¾à ÇÑ´Ù. nDelayMs°¡ 0ÀÌ¸é ¹Ù·Î ½ÇÇàµÇ¸ç, 0º¸´Ù Å©¸é ÁöÁ¤ ½Ã°£ ¸¸Å­ Áö¿¬µÇ¾ú´Ù°¡ ½ÇÇàµÈ´Ù. - ¹Ýº¹ ½ÇÇà - ÁÖ±âÀûÀ¸·Î °è¼Ó ¸í·ÉÀÌ ¹Ýº¹ ½ÇÇàµÈ´Ù. - ¹Ýº¹ ½ÇÇà µ¿ÀÛÀ» ÁßÁö½ÃŰ·Á¸é ¹Ýµå½Ã Stop API¸¦ È£ÃâÇØÁà¾ß ÇÑ´Ù. - 1ȸ ½ÇÇà (Á÷Á¢ ½ÇÇà ¶Ç´Â ¿¹¾à ½ÇÇà) - ÁöÁ¤ ½Ã°£ °æ°ú ÈÄ 1ȸ¸¸ callbackÀÌ È£ÃâµÈ´Ù. - º°µµ·Î stop API¸¦ È£ÃâÇØ ÁÖÁö ¾Ê¾Æµµ µÈ´Ù. @param[in] handle ŽºÅ© ÇÚµé. OSX_TaskStart ·Î ¸¸µé¾îÁø °ÍÀ̾î¾ß ÇÑ´Ù. @param[in] nIdCmd ¸í·É id @param[in] nDelayMs ¹Ð¸®ÃÊ ´ÜÀ§ÀÇ ½Ã°£. 0ÀÌ¸é ¹Ù·Î ½ÇÇà. 0º¸´Ù Å©°í eTASK_FLAG_Delayed Ç÷¡±×°¡ ÀÖÀ¸¸é Áö¿¬ ½ÇÇà. @param[in] flags E_OSX_TASK_CMD_FLAGS Ç÷¡±×. @param[in] func ¸í·É ½ÇÇà½Ã È£ÃâµÉ Äݹé ÇÔ¼ö. @param[in] param Äݹé ÇÔ¼ö·Î bypass Àü´Þ µÇ´Â »ç¿ëÀÚ ÆÄ¶ó¹ÌÅÍ va list. */ DHL_RESULT OSX_TaskRegisterCmdV(H_OSX_TASK handle, T_OSX_TASK_CMD nIdCmd, UINT32 nDelayMs, UINT16 flags, F_OSX_TASK_PROC func, va_list param); /** @brief ŽºÅ©¿¡¼­ Áï½Ã ¸í·É ½ÇÇà. @param[in] handle ŽºÅ© ÇÚµé. OSX_TaskStart ·Î ¸¸µé¾îÁø °ÍÀ̾î¾ß ÇÑ´Ù. @param[in] nIdCmd ¸í·É id @param[in] flags E_OSX_TASK_CMD_FLAGS Ç÷¡±×. Áö¿¬/¹Ýº¹ ±â´ÉÀÇ flag´Â ¹«½ÃµÊ. @param[in] func ¸í·É ½ÇÇà½Ã È£ÃâµÉ Äݹé ÇÔ¼ö. @param[in] param Äݹé ÇÔ¼ö·Î bypass Àü´Þ µÇ´Â »ç¿ëÀÚ ÆÄ¶ó¹ÌÅÍ va list. ¸î°³ÀÇ paramÀÌ ÇÊ¿äÇÑÁö´Â Start ÇÒ ¶§ init setting¿¡¼­ ÁöÁ¤. */ DHL_RESULT OSX_TaskRunCmd(H_OSX_TASK handle, T_OSX_TASK_CMD nIdCmd, UINT16 flags, F_OSX_TASK_PROC func, ...); /** @brief ŽºÅ©¿¡¼­ Áö¿¬/¹Ýº¹ ¸í·É ½ÇÇà. @param[in] handle ŽºÅ© ÇÚµé. OSX_TaskStart ·Î ¸¸µé¾îÁø °ÍÀ̾î¾ß ÇÑ´Ù. @param[in] nIdCmd ¸í·É id @param[in] nDelayMs ¹Ð¸®ÃÊ ´ÜÀ§ÀÇ ½Ã°£. 0ÀÌ¸é ¹Ù·Î ½ÇÇà. 0º¸´Ù Å©°í eTASK_FLAG_Delayed Ç÷¡±×°¡ ÀÖÀ¸¸é Áö¿¬ ½ÇÇà. @param[in] flags E_OSX_TASK_CMD_FLAGS Ç÷¡±×. @param[in] func ¸í·É ½ÇÇà½Ã È£ÃâµÉ Äݹé ÇÔ¼ö. @param[in] param Äݹé ÇÔ¼ö·Î bypass Àü´Þ µÇ´Â »ç¿ëÀÚ ÆÄ¶ó¹ÌÅÍ va list. ¸î°³ÀÇ paramÀÌ ÇÊ¿äÇÑÁö´Â Start ÇÒ ¶§ init setting¿¡¼­ ÁöÁ¤. */ DHL_RESULT OSX_TaskScheduleCmd(H_OSX_TASK handle, T_OSX_TASK_CMD nIdCmd, UINT32 nDelayMs, UINT16 flags, F_OSX_TASK_PROC func, ...); /** @brief ¿¹¾à µÇ¾î ÀÖ´Â ´ë±â ¸í·É °­Á¦ Á¾·á. ¹Ýº¹, Áö¿¬ ¸í·ÉÀÇ °æ¿ì¿¡¸¸ È¿°ú°¡ ÀÖ´Ù. @param[in] handle ŽºÅ© ÇÚµé. OSX_TaskStart ·Î ¸¸µé¾îÁø´Ù. @param[in] nIdCmd Á¤Áö ½Ãų ¸í·É */ DHL_RESULT OSX_TaskStopCmd(H_OSX_TASK handle, T_OSX_TASK_CMD nIdCmd); /** @brief Low-level ŸÀÌ¸Ó Å½ºÅ© µ¿±âÈ­. ¸ðµç ¸í·É ½ÇÇà APIµéÀÌ ºñµ¿±âÀûÀ¸·Î ¼öÇàµÇ´Âµ¥, ÀÌ API¸¦ ÀÌ¿ëÇÏ¿© µ¿±âÈ­ °¡´É. task¿¡¼­ ÀÌ ¸í·ÉÀ» ÀνÄÇϰí ack¸¦ º¸³¾ ¶§ ±îÁö blocking µÈ´Ù. @param[in] handle ŽºÅ© ÇÚµé. OSX_TaskStart ·Î ¸¸µé¾îÁø´Ù. @return */ DHL_RESULT OSX_TaskSync(H_OSX_TASK handle); /** @brief ŽºÅ© ³»ºÎ Á¤º¸ ÄÜ¼Ö Ãâ·Â. ÁöÁ¤ÇÑ Å½ºÅ©ÀÇ Á¤º¸¸¦ µð¹ö±× Äֿܼ¡ Ãâ·ÂÇÑ´Ù. DHL_OS_Printf ¸¦ ÀÌ¿ëÇÏ¿© Ãâ·ÂµÈ´Ù. NULLÀ» ÁöÁ¤Çϸé Àüü osx ŽºÅ© Á¤º¸¸¦ Ãâ·ÂÇÑ´Ù. @param[in] handle ŽºÅ© ÇÚµé */ void OSX_TaskShow(H_OSX_TASK handle); /** @brief ŽºÅ© ÇÚµé Á¤º¸, ³»ºÎ »óÅ Á¤º¸ query */ void OSX_TaskGetInfo(H_OSX_TASK handle, S_OSX_TASK_INFO *pinfo); /** @brief ŽºÅ© »ý¼º. @param[in] setting ŽºÅ© ¼Ó¼º. @param[out] pHandle »ý¼ºµÈ ŽºÅ© ÇÚµé. @return */ DHL_RESULT OSX_TaskStart(S_OSX_TASK_INIT_SETTING *setting, H_OSX_TASK *pHandle); /** @brief ŽºÅ© Á¾·á ±×·ì ³»¿¡¼­ ÇöÀç µ¿ÀÛ ÁßÀÎ ¸ðµç ŸÀ̸Ӱ¡ ¿ÏÀü Á¾·á µÈ ÈÄ¿¡ »èÁ¦µÈ´Ù. - ÇöÀç callback ½ÇÇà ÁßÀÎ ¸í·ÉÀº ¿Ï·á ÈÄ Á¾·á. - µî·Ï µÇ¾î ÀÖ°í callback Áغñ ÁßÀÎ ¸í·ÉÀº ±×³É cancel. @param[in] handle ŽºÅ© ÇÚµé */ void OSX_TaskShutdown(H_OSX_TASK handle); /** @brief ŽºÅ© »ý¼º ÆÄ¶ó¹ÌÅÍÀÇ µðÆúÆ® °ª ȹµæ. @param[out] setting µðÆúÆ® ¼Ó¼º. */ void OSX_TaskGetDefaultInitSetting(S_OSX_TASK_INIT_SETTING *setting); #ifdef __cplusplus } /* extern "C" */ #endif #endif /* __OSX_TASK_H__ */