Example #1
0
/*
 * Device Detach
 */
void
cwm_detach(COM_DEV *dev)
{
    struct ath_cwm *cw_struct = CWM_HANDLE(dev);
    struct ath_cwm_eventq_entry *eventqentry;

    if (cw_struct == NULL) {
        return;
    }

    CWM_DBG_PRINT(cw_struct->wlandev, "%s\n", __func__);

    /* Cleanup resources */
    TIMER_CANCEL(&cw_struct->ac_timer, CANCEL_NO_SLEEP);
    TIMER_FREE(&cw_struct->ac_timer);
    spin_lock_destroy(&cw_struct->ac_lock);

    while (!TAILQ_EMPTY(&cw_struct->ac_eventq)) {
        eventqentry = TAILQ_FIRST(&cw_struct->ac_eventq);
        TAILQ_REMOVE(&cw_struct->ac_eventq, eventqentry, ce_entry);
        OS_FREE(eventqentry);
        eventqentry = NULL;
    }

    /* free CWM memory */
    OS_FREE(cw_struct);
    cw_struct = NULL;
}
//清除所有脚本定时器
void CGlobalScriptTimer::ClearScriptTimer()
{
	itST it = m_ScriptTimers.begin();
	for(;it != m_ScriptTimers.end();it++)
	{
		TIMER_CANCEL((*it).first);
	}
	m_ScriptTimers.clear();

	itWS itW = m_WaitScripts.begin();
	for(;itW != m_WaitScripts.end();itW++)
	{
		TIMER_CANCEL((*itW).first);
	}
	m_WaitScripts.clear();
}
void stModuParam::ClearTimerAndEvent()
{
	if (Timers.size()>0)
	{
		for(stModuParam::itTimer it=Timers.begin(); it!=Timers.end();)
		{
			stTimerParam* pParam = (*it);
			if(pParam->lTimerID > 0)
				int nNum = TIMER_CANCEL(pParam->lTimerID);
			pParam->lTimerID = -1;
			it=Timers.erase(it);		
			OBJ_RELEASE(stTimerParam,pParam);
		}
		Timers.clear();
	}


	if (Events.size()>0)
	{
		for (list<stEventParam*>::iterator it=Events.begin(); it!=Events.end(); ++it)
		{		
			OBJ_RELEASE(stEventParam,(*it));
		}
		Events.clear();
	}
	
}
Example #4
0
/*
 * CWM Stop
 */
void cwm_stop(COM_DEV *dev)
{
    struct ath_cwm *cw_struct = CWM_HANDLE(dev);

    if (cw_struct == NULL) {
        return;
    }

    CWM_DBG_PRINT(cw_struct->wlandev, "%s\n", __func__);

    if (cw_struct->ac_running) {
        cw_struct->ac_running = 0;
        TIMER_CANCEL(&cw_struct->ac_timer, CANCEL_NO_SLEEP);
    }
}
//注销一个脚本定时器
long CGlobalScriptTimer::UnRegisterTimer(long lUserData,long lTimerID)
{
	long lTimerNum = 0;
	itST it = m_ScriptTimers.begin();
	for(;it != m_ScriptTimers.end();)
	{
		tagScriptTimer &scripttimer = (*it).second;
		if( scripttimer.lUserData == lUserData &&
			(lTimerID == -1 ||  (*it).first == lTimerID) )
		{
			TIMER_CANCEL((*it).first);
			it = m_ScriptTimers.erase(it);
			lTimerNum++;
		}
		else
		{
			it++;
		}
	}
	return lTimerNum;
}
//定时触发
void stModuParam::OnTimerOut(long lTimerID)
{
	//处理定时器
	itTimer it = Timers.begin();
	for(;it != Timers.end();it++)
	{
		if((*it)->lTimerID == lTimerID)
		{
			stTimerParam *pTimerParam =  (*it);
			if(pTimerParam->nCalledCount++ >= pTimerParam->nCount)
			{	
				//注销定时器
				int nNum = TIMER_CANCEL(pTimerParam->lTimerID);
				pTimerParam->lTimerID = -1; 
				it = Timers.erase(it);

				OBJ_RELEASE(stTimerParam, pTimerParam);
				return;
			}
		}
	}
	return;
}