init ems server code
This commit is contained in:
182
plat/public/src/pub_timer.c
Normal file
182
plat/public/src/pub_timer.c
Normal file
@@ -0,0 +1,182 @@
|
||||
//////////////////////////////////////////////////
|
||||
//Title : wxc_timer.c
|
||||
//Auhtor : Liu Wei
|
||||
//Desc : WXC2 Public Timer Managemnet
|
||||
//Created : 2007-04-27
|
||||
//Revision :
|
||||
//
|
||||
//Revision :
|
||||
//
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
#include "./include/pub_timer.h"
|
||||
|
||||
/*@ignore@*/
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// ///
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
//by simon at 23/9/25
|
||||
u8 TMHeap[TMHEAP_MM_SIZE];
|
||||
WxcTimerNode tTimerListHead;
|
||||
WxcTimerNode *pTLHead;
|
||||
WxcTimerNode *pTLCur;
|
||||
|
||||
extern void TimerAdd ( WxcTimer * pTimer )
|
||||
{
|
||||
WxcTimerNode *pTNode;
|
||||
|
||||
assert ( NULL != pTimer && NULL != pTimer->pFunc );
|
||||
assert ( pTimer->dExpires && pTimer->dSuitNumber < TM_CLOCK_MAX );
|
||||
|
||||
//pTimer->dSuitNumber = ? : 1;
|
||||
|
||||
pTNode =
|
||||
( WxcTimerNode * ) WxcMalloc ( GET_TNODE_SIZE ( pTimer->dSuitNumber ) );
|
||||
if( NULL == pTNode )
|
||||
{
|
||||
return ;
|
||||
}
|
||||
pTNode->pNext = NULL;
|
||||
pTNode->pPrev = pTLCur;
|
||||
pTNode->pTimer = ( WxcTimer * ) ( pTNode + 4 * sizeof ( void * ) );
|
||||
pTimer->pTimerNode = ( void * ) pTNode;
|
||||
memcpy ( pTNode->pTimer, pTimer, sizeof ( WxcTimer ) );
|
||||
pTNode->dClockArray = ( u32 * ) ( pTNode->pTimer + sizeof ( WxcTimer ) );
|
||||
pTLCur = pTNode;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// ///
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// ///
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
inline void TimerStart ( WxcTimer * pTimer, u16 dSuitId )
|
||||
{
|
||||
assert ( pTimer && pTimer->pTimerNode );
|
||||
assert ( dSuitId < pTimer->dSuitNumber );
|
||||
|
||||
( ( WxcTimerNode * ) pTimer->pTimerNode )->dClockArray[dSuitId] = 1;
|
||||
}
|
||||
|
||||
extern void TimerMod ( WxcTimer * pTimer, u16 dExpires )
|
||||
{
|
||||
int i;
|
||||
|
||||
assert ( NULL != pTimer && dExpires );
|
||||
|
||||
pTimer->dExpires = dExpires;
|
||||
for ( i = 0; i < pTimer->dSuitNumber; i++ )
|
||||
{
|
||||
TimerStart ( pTimer, i );
|
||||
}
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// ///
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
extern void TimerDel ( WxcTimer * pTimer )
|
||||
{
|
||||
assert ( pTimer && pTimer->pTimerNode );
|
||||
|
||||
WxcFree ( pTimer->pTimerNode );
|
||||
pTimer->pTimerNode = NULL;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// ///
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
extern inline void TimerStop ( WxcTimer * pTimer, u16 dSuitId )
|
||||
{
|
||||
assert ( NULL != pTimer && dSuitId < pTimer->dSuitNumber );
|
||||
|
||||
( ( WxcTimerNode * ) pTimer->pTimerNode )->dClockArray[dSuitId] = 0;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// ///
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#define TimerRestart(pTimer) TimerStart(pTimer)
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// ///
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
static void *TM_Alloc ( u16 dSize )
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// ///
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
static void TM_Free ( void *p )
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// ///
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
static inline int TM_Pending ( WxcTimerNode * pTNode, u16 dSuitId )
|
||||
{
|
||||
return ( pTNode->dClockArray[dSuitId] ? 1 : 0 );
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// ///
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
static inline int TM_Expiring ( WxcTimerNode * pTNode, u16 dSuitId )
|
||||
{
|
||||
return ( TimerAfter
|
||||
( pTNode->dClockArray[dSuitId], pTNode->pTimer->dExpires ) );
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// ///
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
extern inline void TM_Init ( )
|
||||
{
|
||||
pTLCur = pTLHead = &tTimerListHead;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// ///
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
extern void TM_RT ( )
|
||||
{
|
||||
u16 sid;
|
||||
WxcTimer *pTimer;
|
||||
WxcTimerNode *pTNode;
|
||||
|
||||
pTNode = pTLHead;
|
||||
|
||||
for ( ; NULL != pTNode; pTNode = pTNode->pNext )
|
||||
{
|
||||
pTimer = pTNode->pTimer;
|
||||
for ( sid = 0; sid <= pTimer->dSuitNumber; sid++ )
|
||||
{
|
||||
if ( !TM_Pending ( pTNode, sid ) )
|
||||
{
|
||||
pTNode->dClockArray[sid]++;
|
||||
if ( TM_Expiring ( pTNode, sid ) )
|
||||
{
|
||||
pTimer->pFunc ( pTimer->dData, sid );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*@end@*/
|
||||
Reference in New Issue
Block a user