/** @file DHL_Timer.h @brief OSAL ±â¹ÝÀÇ ¹ü¿ë ŸÀÌ¸Ó API ¹ü¿ëÀ¸·Î »ç¿ë °¡´ÉÇÑ ±¸°£ ŸÀ̸Ó. Copyright 2006~2010 Digital STREAM Technology, Inc. All Rights Reserved */ #ifndef __DHL_TIMER_API_H__ #define __DHL_TIMER_API_H__ #include "DHL_OSAL.h" #ifdef __cplusplus extern "C" { #endif #if COMMENT ____Overview____(){} #endif /** @file DHL_Timer.h - °³³ä °ü·Ã ³»¿ëÀº ±¸±Û ¹®¼­ Âü°í. - ¹®¼­ À̸§: DHL API ¸Å´º¾ó - URL http://docs.google.com/View?docid=0AQZYAjzYyTl_ZGdmcWJ4eDZfMjFjajZ6aGc0OA - module overview - ŸÀ̸Ó: ŸÀÌ¸Ó ¾ÆÀ̵ð - ŸÀÌ¸Ó À̺¥Æ®: ÁöÁ¤ ½Ã°£ °æ°ú ÈÄ callbackÀÌ ºÒ¸®´Â Çö»óÀ» ¸»ÇÔ. - ŸÀÌ¸Ó ±×·ì: ÇÑ Å½ºÅ©¿¡¼­ °°ÀÌ Ã³¸®µÇ´Â ŸÀ̸ӵéÀÇ ÁýÇÕ. - dependencies - OSAL (Task, Tick, MsgQ, ...) ŸÀÌ¹Ö Á¤È®µµ´Â OSALÀÇ Tick Á¤È®µµ¿¡ µû¸¥´Ù. ¾ÆÁÖ Á¤È®ÇÑ °èÃø ¿ëÀ¸·Î´Â ÀûÀýÇÏÁö ¾ÊÀ» ¼ö ÀÖÀ½. */ #if COMMENT ____Config____(){} #endif /* ŸÀÌ¸Ó °ü·Ã ³»¿ë Áß¿¡¼­ platform dependent ÇÑ ³»¿ëµéÀº ¾Æ·¡ º°µµÀÇ ÆÄÀÏ ¾Æ·¡ ÆÄÀÏÀº ¹Ýµå½Ã platform Çì´õ Æú´õ¿¡¼­ Á¦°øµÇ¾î¾ß ÇÑ´Ù. ÇÊ¿äÇÑ ³»¿ëµé: DHL_TIMER_MAX_ENTRY DHL_TIMER_TASK_PRIORITY DHL_TIMER_TASK_STKSIZE ±×¸®°í °¢ Timer ID °ªµé. */ #include "DHL_Timer_Config.h" #if COMMENT ____Types____(){} #endif /** @brief ŸÀÌ¸Ó ±×·ì ÇÚµé. DHL_TIMER_Initialize ½ÇÇà °á°ú·Î ¸®ÅϵǴ °ªÀÌ´Ù. µ¿ÀÏ ±×·ì¿¡ ¼ÓÇÑ Å¸ÀÌ¸Ó IDµéÀº °°Àº ŽºÅ©¿¡¼­ ¼­ºñ½ºµÈ´Ù. µû¶ó¼­ ŸÀÌ¸Ó ¼º°Ý¿¡ µû¶ó ÇÊ¿äÇÑ ¸¸Å­ÀÇ Å½ºÅ©¸¦ ¸¸µé¾î »ç¿ëÇØ¾ß ÇÑ´Ù. */ typedef void *DHL_TMHANDLE; /** @brief ŸÀÌ¸Ó ±×·ì »ý¼º ÆÄ¶ó¹ÌÅÍ. DHL_TIMER_Initialize ÀÇ ÀÎÀÚ·Î ÇÊ¿äÇÔ. */ typedef struct { char *name; ///< ÀÌ Å¸ÀÌ¸Ó ±×·ìÀÇ À̸§. ÃÖ´ë 8ÀÚ. /** this will be copied into timer record DB. so local stack space can be used for name. */ int max_timer_entry; ///< ÀÌ ±×·ì¿¡¼­ ÃÖ´ë·Î Áö¿øÇϴ ŸÀÌ¸Ó °¹¼ö. 0º¸´Ù Ä¿¾ß ÇÔ. int task_priority; ///< ŸÀÌ¸Ó Å½ºÅ©ÀÇ ¿ì¼± ¼øÀ§. int stack_size; ///< ŸÀÌ¸Ó Å½ºÅ©ÀÇ ½ºÅà ũ±â. BOOL use_mutex_lock; ///< º¸È£¿¡ mutex¸¦ »ç¿ëÇÒ °ÍÀÎÁö ¿©ºÎ. /** - if true, mutex is used for access timer record. - if false, interrupt is temporarily disabled during timer record access. if you want to use timer in ISR, set this FALSE. */ //--------- version 2 extension ------------- // if set to 0, it should be compatible to version 1 operation. int num_user_param; ///< »ç¿ëÀÚ ÆÄ¶ó¹ÌÅÍ·Î ¸î °³°¡ ÇÊ¿äÇÑÁö. ///< ±âÁ¸¿¡´Â ÇϳªÀÇ »ç¿ëÀÚ ÆÄ¶ó¹ÌÅ͸¸ Á¦°øÇÏ¿´À¸³ª, ÀÓÀÇ °¹¼ö·Î È®Àå ÇÒ ¼ö ÀÖµµ·Ï ÇÔ. ///< 0À» ÁöÁ¤Çϸé 1·Î ÀÚµ¿ ¼³Á¤µÈ´Ù. int msg_que_size; ///< timer task message queueÀÇ Å©±â. ///< ±âÁ¸¿¡´Â ¼Ò½º Äڵ忡 20 À¸·Î fix µÇ¾î ÀÖ¾úÀ½. ///< 0À» ÁöÁ¤ÇÏ¸é µðÆúÆ® 20À¸·Î Àç¼³Á¤µÊ. } DHL_TIMER_INIT_PARAM; /** @brief »ç¿ëÀÚ Å¸ÀÌ¸Ó callback ŸÀÔ. DHL_TIMER_Start ¹× DHL_SYS_StartTimer ¿¡¼­ »ç¿ëµÈ´Ù. »ç¿ëÀÚ´Â ¾Æ·¡¿Í µ¿ÀÏÇÑ prototypeÀÇ callback ÇÔ¼ö¸¦ Á¦°øÇØ¾ß ÇÑ´Ù. */ typedef void (*DHL_TIMER_PROC)(UINT32 nIDTimer, UINT32 param); // »ç¿ëÀÚ Å¸ÀÌ¸Ó Çڵ鷯 /** @brief version 2ÀÇ Å¸ÀÌ¸Ó callback ŸÀÔ. DHL_TIMER_StartEx ¿¡¼­ »ç¿ëµÈ´Ù. param ¹è¿­ÀÇ ½ÇÁ¦ element °¹¼ö´Â ÀÌ prototype ¿¡¼­´Â ¾Ë ¼ö¾ø´Ù. timer init ÇÒ ¶§ ÁöÁ¤ÇÑ °¹¼ö ¸¸Å­ »ç¿ë °¡´ÉÇÏ´Ù. */ typedef void (*DHL_TIMER_PROC_EX)(UINT32 nIDTimer, UINT32 *params); // »ç¿ëÀÚ Å¸ÀÌ¸Ó Çڵ鷯 /** DHL_TIMER_StartEx ¿¡¼­ ÁöÁ¤ÇÏ´Â flagµé. */ typedef enum { /** continuous mode */ eTIMER_FLAG_Continue = 0x0, /** one shot mode */ eTIMER_FLAG_OneShot = 0x1, /** one shot ÀÌ ¾Æ´Ñ °æ¿ì¿¡¸¸ Àǹ̰¡ ÀÖÀ¸¸ç, Áö±Ý ¹Ù·Î 1ȸ¸¦ ¼öÇàÇÑ ÈÄ¿¡ ÁöÁ¤µÈ ½Ã°£ ÀÌÈÄ interval timer¸¦ ±âµ¿ÇÑ´Ù. */ eTIMER_FLAG_NowAndContinue = 0x2, /** ³»ºÎ¿ëµµ·Î »ç¿ëµÇ¾î ¿¹¾à. */ eTIMER_FLAG_Reserved = 0xC0, } DHL_TIMER_FLAGS; #if COMMENT ____Defines____(){} #endif #if COMMENT ____LowLevel_API____(){} #endif /** @brief Low-level ŸÀ̸Ӹ¦ µî·ÏÇÑ´Ù. timer Çϳª¸¦ µî·ÏÇÑ´Ù. ÀÌÈÄ ÀÏÁ¤ ½Ã°£ÀÌ Áö³ª¸é timer callbackÀÌ È£ÃâµÈ´Ù. ŸÀ̸ÓÀÇ ¼¼ºÎ µ¿ÀÛÀ» ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù. - ÀÎÅ͹ú ŸÀÌ¸Ó - ÁÖ±âÀûÀ¸·Î °è¼Ó ŸÀÌ¸Ó callbackÀÌ È£ÃâµÈ´Ù. - ŸÀÌ¸Ó µ¿ÀÛÀ» ÁßÁö½ÃŰ·Á¸é ¹Ýµå½Ã Stop API¸¦ È£ÃâÇØÁà¾ß ÇÑ´Ù. - ¿ø¼¦ ŸÀÌ¸Ó - ÁöÁ¤ ½Ã°£ °æ°ú ÈÄ 1ȸ¸¸ callbackÀÌ È£ÃâµÈ´Ù. - º°µµ·Î ŸÀÌ¸Ó cancel API¸¦ È£ÃâÇØ ÁÖÁö ¾Ê¾Æµµ µÈ´Ù. @param[in] handle ŸÀÌ¸Ó ±×·ì ÇÚµé. DHL_TIMER_Initialize ·Î ¸¸µé¾îÁø °ÍÀ̾î¾ß ÇÑ´Ù. @param[in] nIdTimer ŸÀÌ¸Ó ID. ÀÌ ±×·ì ³»¿¡¼­ ÀÌ Å¸À̸Ӹ¦ ´ëÇ¥ÇÒ ¼ö ÀÖ´Â Áߺ¹µÇÁö ¾Ê´Â id °ª. @param[in] nPeriodMs ¹Ð¸®ÃÊ ´ÜÀ§ÀÇ ÁÖ±â. @param[in] func ŸÀ̹ö À̺¥Æ® ¹ß»ý ½Ã È£ÃâµÉ Äݹé ÇÔ¼ö. @param[in] param Äݹé ÇÔ¼ö·Î bypass Àü´Þ µÇ´Â »ç¿ëÀÚ ÆÄ¶ó¹ÌÅÍ. @param[in] bOneShot TRUE À̸é ÁöÁ¤µÈ ½Ã°£ °æ°ú ÈÄ 1ȸ¸¸ È£Ã⠵Ǵ ¿ø¼¦ ŸÀ̸ӷΠµ¿ÀÛ. FALSE À̸é ÁÖ±âÀûÀ¸·Î È£ÃâµÇ´Â ÀÎÅ͹ú ŸÀ̸ӷΠµ¿ÀÛ. @return */ DHL_RESULT DHL_TIMER_Start(DHL_TMHANDLE handle, UINT32 nIdTimer, UINT32 nPeriodMs, DHL_TIMER_PROC func, UINT32 param, BOOL bOneShot); /** @brief DHL_TIMER_Start APIÀÇ È®Àå. paramÀº UINT32 °ª¿¡¼­ UINT32 array pointer·Î º¯°æ µÇ¾úÀ½. OneShot ¸ðµå ¿Ü¿¡ ´Ù¾çÇÑ ¸ðµå¸¦ Áö¿øÇϱâ À§ÇØ flag·Î º¯°æ. @param[in] params »ç¿ëÀÚ ÆÄ¶ó¹ÌÅ͵éÀÇ ¹è¿­ Æ÷ÀÎÅÍ. ¸î °³ÀÇ ÆÄ¶ó¹ÌÅͰ¡ »ç¿ë °¡´ÉÇÑÁö´Â Initialize ÇÒ ¶§ °áÁ¤µÈ´Ù. @param[in] flags DHL_TIMER_FLAGS Ç÷¡±× Áß¿¡ Çϳª. */ DHL_RESULT DHL_TIMER_StartEx(DHL_TMHANDLE handle, UINT32 nIdTimer, UINT32 nPeriodMs, DHL_TIMER_PROC_EX func, int numParam, UINT32 *params, UINT16 flags); /** @brief Low-level ŸÀÌ¸Ó µî·Ï ÇØÁ¦ ÁöÁ¤ ±×·ì¿¡¼­ timer id¸¦ Á¦°ÅÇÑ´Ù. ´õ ÀÌ»ó ÇØ´ç ŸÀ̸Ӵ ȣÃâµÇÁö ¾Ê´Â´Ù. ¿ø¼¦ ŸÀ̸ÓÀÇ °æ¿ì º°µµ·Î ŸÀÌ¸Ó cancel API¸¦ È£ÃâÇØ ÁÖÁö ¾Ê¾Æµµ µÈ´Ù. @param[in] handle ŸÀÌ¸Ó ±×·ì ÇÚµé. DHL_TIMER_Initialize ·Î ¸¸µé¾îÁø´Ù. @param[in] nIdTimer Á¤Áö ½Ãų ŸÀÌ¸Ó ID @return */ DHL_RESULT DHL_TIMER_Stop(DHL_TMHANDLE handle, UINT32 nIdTimer); /** @brief Low-level ŸÀÌ¸Ó Å½ºÅ© µ¿±âÈ­. ŸÀÌ¸Ó Å½ºÅ©¿Í È£Ãâ ŽºÅ©°£ÀÇ µ¿±â¸¦ ¸ÂÃá´Ù. ÀÌ ÇÔ¼ö´Â Å»ýÀûÀ¸·Î blocking mode·Î µ¿ÀÛÇÑ´Ù. @param[in] handle ŸÀÌ¸Ó ±×·ì ÇÚµé. DHL_TIMER_Initialize ·Î ¸¸µé¾îÁø´Ù. @return */ DHL_RESULT DHL_TIMER_Sync(DHL_TMHANDLE handle); /** @brief Low-level ŸÀÌ¸Ó Á¤º¸ Ãâ·Â. ÁöÁ¤ÇÑ Å¸ÀÌ¸Ó ±×·ìÀÇ Á¤º¸¸¦ µð¹ö±× Äֿܼ¡ Ãâ·ÂÇÑ´Ù. DHL_OS_Printf ¸¦ ÀÌ¿ëÇÏ¿© Ãâ·ÂµÈ´Ù. @param[in] handle ŸÀÌ¸Ó ±×·ì ÇÚµé */ void DHL_TIMER_Show(DHL_TMHANDLE handle); /** @brief Low-level ŸÀÌ¸Ó Å½ºÅ© »ý¼º (±×·ì ÃʱâÈ­) timer moduleÀ» ÃʱâÈ­ ÇÑ´Ù. @param[in] param ŸÀÌ¸Ó ±×·ì ¼Ó¼º. @param[out] pHandle »ý¼ºµÈ ŸÀÌ¸Ó ±×·ì ÇÚµé. @return */ DHL_RESULT DHL_TIMER_Initialize(DHL_TIMER_INIT_PARAM *param, DHL_TMHANDLE *pHandle); /** @brief Low-level ŸÀÌ¸Ó Å½ºÅ© Á¦°Å (±×·ì »èÁ¦) ±×·ì ³»¿¡¼­ ÇöÀç µ¿ÀÛ ÁßÀÎ ¸ðµç ŸÀ̸Ӱ¡ ¿ÏÀü Á¾·á µÈ ÈÄ¿¡ »èÁ¦µÈ´Ù. - ÇöÀç À̺¥Æ®°¡ ¹ß»ýµÇ¾î ó¸® ÁßÀΠŸÀ̸Ӵ À̺¥Æ® ó¸® ÈÄ Á¾·á. - µî·Ï µÇ¾î ÀÖ°í callback Áغñ ÁßÀΠŸÀ̸Ӵ ±×³É cancel. @param[in] handle ŸÀÌ¸Ó ±×·ì ÇÚµé */ void DHL_TIMER_Terminate(DHL_TMHANDLE handle); #if COMMENT ____HighLevel_API____(){} #endif /** @brief High-level ŸÀÌ¸Ó id Çϳª¸¦ ½ÃÀÛÇÑ´Ù. DHL_SYS_TimerInit ¿¡¼­ µðÆúÆ®·Î »ý¼ºµÈ ŸÀÌ¸Ó ±×·ì¿¡ Ãß°¡µÈ´Ù. °¢ ÀÎÀÚ ¹× ¸®ÅϰªÀÇ Àǹ̴ DHL_TIMER_Start ¿Í µ¿ÀÏÇÏ´Ù. */ DHL_RESULT DHL_SYS_StartTimer(UINT32 nIdTimer, UINT32 nPeriodMs, DHL_TIMER_PROC func, UINT32 param, BOOL bOneShot); /** @brief High-level ŸÀÌ¸Ó id Çϳª¸¦ Á¾·áÇÑ´Ù. DHL_SYS_TimerInit ¿¡¼­ µðÆúÆ®·Î »ý¼ºµÈ ŸÀÌ¸Ó ±×·ì¿¡¼­ Á¦°ÅµÈ´Ù. °¢ ÀÎÀÚ ¹× ¸®ÅϰªÀÇ Àǹ̴ DHL_TIMER_Stop °ú µ¿ÀÏÇÏ´Ù. */ DHL_RESULT DHL_SYS_KillTimer(UINT32 nIdTimer); /** @brief High-level ŸÀÌ¸Ó Á¤º¸ Ãâ·Â. DHL_SYS_TimerInit ¿¡¼­ µðÆúÆ®·Î »ý¼ºµÈ ŸÀÌ¸Ó ±×·ì¿¡ ´ëÇÑ Á¤º¸´Ù. */ void DHL_SYS_ShowTimer(void); /** @brief High-level ŸÀÌ¸Ó ¸ðµâ ÃʱâÈ­ µðÆúÆ® priority, µðÆúÆ® stack size µîÀº ÀϺΠDHL_TimerConfig.h ³»¿ëÀ» Âü°íÇÏ¿© »ý¼ºµÈ´Ù. */ DHL_RESULT DHL_SYS_TimerInit(void); #ifdef __cplusplus } /* extern "C" */ #endif #endif /* __DHL_TIMER_API_H__ */