亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? pshookswtask.cpp

?? 基于sipfoundy 公司開發(fā)的sipx協(xié)議API
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
//// Copyright (C) 2004, 2005 Pingtel Corp.// //// $$//////////////////////////////////////////////////////////////////////////////// SYSTEM INCLUDES#include <assert.h>// APPLICATION INCLUDES#include "os/OsEventMsg.h"#include "os/OsNotification.h"#include "os/OsQueuedEvent.h"#include "os/OsReadLock.h"#include "os/OsTimer.h"#include "os/OsWriteLock.h"#include "ps/PsHookswTask.h"#include "ps/PsPhoneTask.h"#include "tao/TaoPhoneComponentAdaptor.h"// EXTERNAL FUNCTIONS// EXTERNAL VARIABLES// Everything within the HOOKSW_TEMP_HACK defines should be removed when we// fully switch over to using the new style of hook switch handling#define HOOKSW_TEMP_HACK#ifdef HOOKSW_TEMP_HACKint oldStyleHooksw = 0;                   // 0 ==> optimized hooksw handling                                          // 1 ==> old-style hooksw handling#endif// CONSTANTSconst int DEBOUNCE_TIMER_MSECS = 25;      // 25 millisecondsconst int SHORT_DEBOUNCE_MSECS = 100;     // 100 millisecondsconst int LONG_DEBOUNCE_MSECS  = 400;     // 400 milliseconds#ifdef HOOKSW_TEMP_HACKconst int DEBOUNCE_MSECS = 20;            //  20 milliseconds#endif// STATIC VARIABLE INITIALIZATIONSPsHookswTask* PsHookswTask::spInstance = 0;OsBSem        PsHookswTask::sLock(OsBSem::Q_PRIORITY, OsBSem::FULL);/* //////////////////////////// PUBLIC //////////////////////////////////// *//* ============================ CREATORS ================================== */// Return a pointer to the Hooksw task, creating it if necessaryPsHookswTask* PsHookswTask::getHookswTask(void){   UtlBoolean isStarted;   // If the task object already exists, and the corresponding low-level task   // has been started, then use it   if (spInstance != NULL && spInstance->isStarted())      return spInstance;   // If the task does not yet exist or hasn't been started, then acquire   // the lock to ensure that only one instance of the task is started   sLock.acquire();   if (spInstance == NULL)       spInstance = new PsHookswTask();   isStarted = spInstance->isStarted();   if (!isStarted)   {      isStarted = spInstance->start();      assert(isStarted);   }   sLock.release();   return spInstance;}// DestructorPsHookswTask::~PsHookswTask(){   delete mpHookswDev;   delete mpTimer;   spInstance = NULL;}/* ============================ MANIPULATORS ============================== */// Create a hookswitch message and post it to the Hookswitch task.// Return the result of the message send operation.OsStatus PsHookswTask::postEvent(const int msg, void* source,                                 const int hookswState,                                 const OsTime& rTimeout){   PsMsg    hookswMsg(msg, source, hookswState, 0);   OsStatus res;   res = postMessage(hookswMsg, rTimeout);   return res;}/* ============================ ACCESSORS ================================= */// Return the hookswitch stateconst int PsHookswTask::getHookswitchState(void){   OsReadLock lock(mMutex);        // acquire a read lock   return mHookswState;}/* ============================ INQUIRY =================================== *//* //////////////////////////// PROTECTED ///////////////////////////////// */// Default constructor (called only indirectly via getHookswTask())PsHookswTask::PsHookswTask():  OsServerTask("PsHooksw"),   mMutex(OsRWMutex::Q_PRIORITY),  // create mutex for protecting data   mHookswState(ON_HOOK),          // initially, assume we are on hook   mpHookswDev(NULL),              // not yet initialized   mDebounceState(WAIT_FOR_INTR),  // initial debounce state   mDebounceTicks(0),              // initial debounce tick count   mDebounceHookswState(ON_HOOK),  // initial debounce hookswitch state   mpTimer(NULL),                  // not yet initialized   mpTimerEvent(NULL)              // not yet initialized{   // create the object used to manage the hookswitch device   mpHookswDev = PsHookswDev::getHookswDev(this);   // enable hookswitch interrupts   mpHookswDev->enableIntr(TRUE);  // start by looking for offhook   // create the timer that will be used to "debounce" the hookswitch   mpTimer      = new OsTimer(&mIncomingQ, 0);   mpTimerEvent = (OsQueuedEvent*) mpTimer->getNotifier();}/* //////////////////////////// PRIVATE /////////////////////////////////// */// Handle an incoming message.// Return TRUE if the message was handled, otherwise FALSE.UtlBoolean PsHookswTask::handleMessage(OsMsg& rMsg){   UtlBoolean processed;   OsWriteLock lock(mMutex);            // acquire a write lock   switch (rMsg.getMsgType())   {   case OsMsg::OS_EVENT:      processed = handleEventMessage((OsEventMsg&) rMsg);      break;   case OsMsg::PS_MSG:      processed = handlePhoneMessage((PsMsg&) rMsg);      break;   default:      assert(FALSE);      processed = FALSE;                // unexpected message type      break;   }   return processed;}// Handle an incoming event message (timer expiration).// Return TRUE if the message was handled, otherwise FALSE.// A write lock should be acquired before calling this method.UtlBoolean PsHookswTask::handleEventMessage(const OsEventMsg& rMsg){   int          debounceInterval;   int          hookswState;   PsPhoneTask* pPhoneTask;   UtlBoolean    processed;   OsTimer*     pTimer;   OsStatus     res;   processed = TRUE;   switch(rMsg.getMsgSubType())   {   case OsEventMsg::NOTIFY:      rMsg.getEventData((int&) pTimer); // get timer object      assert(pTimer == mpTimer);      hookswState = readHwHookswState();// determine HW hook state#ifdef HOOKSW_TEMP_HACK      if (oldStyleHooksw)      {         if (hookswState == mHookswState)         {                                 // no change since last time,            if (mHookswState == ON_HOOK)   //  enable the hooksw interrupt               mpHookswDev->enableIntr(TRUE);  //  look for off hook            else               mpHookswDev->enableIntr(FALSE); //  look for on hook         }         else         {            mHookswState = hookswState;    // update the hookswitch state            // Send a hookswitch message to the phone set with the new state            pPhoneTask = PsPhoneTask::getPhoneTask();            res = pPhoneTask->postEvent(PsMsg::HOOKSW_STATE, // msg type                                        this,            // source                                        mHookswState,    // hooksw state                                        0);              // not used            assert(res == OS_SUCCESS);            startDebounceTimer();          // rearm the debounce timer         }      }      else      {#endif      mDebounceTicks++;      switch (mDebounceState)      {      case SHORT_DEBOUNCE:      case LONG_DEBOUNCE:         debounceInterval = ((mDebounceState == SHORT_DEBOUNCE)                             ? SHORT_DEBOUNCE_MSECS : LONG_DEBOUNCE_MSECS);         if (mDebounceHookswState != hookswState)  // is state still bouncing?         {            mDebounceHookswState = hookswState;    // stay in the current            mDebounceTicks = 0;                    // state         }         if ((mDebounceTicks * DEBOUNCE_TIMER_MSECS) >= debounceInterval)         {            if (mDebounceHookswState != mHookswState)            {               mHookswState = hookswState;    // update the hookswitch state               // Send a hookswitch message to the phone set with the new state               pPhoneTask = PsPhoneTask::getPhoneTask();               res = pPhoneTask->postEvent(PsMsg::HOOKSW_STATE, // msg type                                           this,                // source                                           mHookswState,        // hooksw state                                           0);                  // not used               assert(res == OS_SUCCESS);               mDebounceState = ((mDebounceState == SHORT_DEBOUNCE)                                 ? LONG_DEBOUNCE : WAIT_FOR_INTR);               mDebounceTicks = 0;            }            else            {               mDebounceState = WAIT_FOR_INTR;// enable the hooksw interrupt               mDebounceTicks = 0;            }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人精品午夜视频免费| 亚洲日本欧美天堂| 美洲天堂一区二卡三卡四卡视频| 欧美区在线观看| 五月激情综合婷婷| 4438亚洲最大| 久久激情五月婷婷| 久久久久久久久久久黄色| 国产成人在线免费观看| 欧美国产综合色视频| 波多野结衣的一区二区三区| 国产精品国产精品国产专区不蜜| 色嗨嗨av一区二区三区| 亚洲午夜国产一区99re久久| 欧美福利一区二区| 久久国产免费看| 中文字幕精品一区| 精品污污网站免费看| 久久国产精品色婷婷| 国产精品青草久久| 欧美美女喷水视频| 极品瑜伽女神91| 中文字幕亚洲区| 欧美二区三区的天堂| 国产精品资源在线看| 一区2区3区在线看| 欧美mv日韩mv| 91久久精品午夜一区二区| 免费看欧美女人艹b| 国产精品拍天天在线| 欧美精品丝袜久久久中文字幕| 精品一区二区免费视频| 伊人色综合久久天天| 欧美tickling挠脚心丨vk| 972aa.com艺术欧美| 青青草国产成人99久久| 自拍偷自拍亚洲精品播放| 欧美久久久一区| heyzo一本久久综合| 奇米综合一区二区三区精品视频| 国产精品国产成人国产三级| 日韩一区二区三区免费看| 成人app在线观看| 奇米一区二区三区| 国产精品国产三级国产aⅴ无密码| 欧美一级生活片| 91首页免费视频| 国产一区二区三区综合| 亚洲一卡二卡三卡四卡五卡| 国产精品免费人成网站| 日韩女同互慰一区二区| 欧美在线不卡视频| 99久久国产综合精品色伊| 激情五月婷婷综合| 日韩高清在线观看| 一区二区三区蜜桃| 《视频一区视频二区| 久久精品视频一区二区| 日韩亚洲欧美高清| 色综合久久中文综合久久牛| 激情都市一区二区| 久久精品国产在热久久| 亚洲成人福利片| 亚洲欧洲日韩综合一区二区| 精品国产凹凸成av人导航| 欧美一级午夜免费电影| 欧美日韩大陆在线| 在线免费不卡电影| 一本色道**综合亚洲精品蜜桃冫| 国产成a人亚洲精| 国产一区久久久| 久久99深爱久久99精品| 日韩在线观看一区二区| 午夜国产不卡在线观看视频| 亚洲国产毛片aaaaa无费看| 亚洲黄色尤物视频| 亚洲一级片在线观看| 亚洲一二三区在线观看| 亚洲电影欧美电影有声小说| 亚洲一级二级三级在线免费观看| 亚洲精品菠萝久久久久久久| 亚洲精品欧美综合四区| 亚洲一区免费观看| 亚洲国产视频在线| 日本不卡免费在线视频| 日韩电影在线免费| 免费久久精品视频| 国产在线一区观看| 国v精品久久久网| av一二三不卡影片| 色哟哟国产精品| 欧美色中文字幕| 日韩一级视频免费观看在线| 日韩免费高清视频| 欧美电视剧在线观看完整版| 久久久久久久国产精品影院| 欧美国产精品劲爆| 亚洲欧美一区二区视频| 亚洲一卡二卡三卡四卡无卡久久 | 国产精品一色哟哟哟| 国产美女主播视频一区| 成人性生交大合| 色偷偷久久人人79超碰人人澡| 欧美日韩精品三区| 欧美成va人片在线观看| 国产精品三级视频| 亚洲va欧美va人人爽| 极品少妇xxxx偷拍精品少妇| 国产不卡视频一区二区三区| 成人精品视频一区二区三区 | 国产欧美一区二区精品忘忧草| 欧美激情一区在线| 亚洲午夜久久久久久久久久久 | 国产精品资源在线| av中文字幕一区| 9191成人精品久久| 久久久久久久久蜜桃| 一级特黄大欧美久久久| 国产综合色精品一区二区三区| 99视频国产精品| 在线播放日韩导航| 国产精品国产三级国产| 视频一区二区中文字幕| 成人丝袜视频网| 欧美一区午夜视频在线观看| 欧美国产禁国产网站cc| 日韩黄色在线观看| 成人爱爱电影网址| 精品国产一区二区精华| 亚洲男人的天堂网| 国产麻豆日韩欧美久久| 欧美日韩中文另类| 1024成人网| 国产成人av一区二区三区在线| 欧美视频在线观看一区| 欧美国产1区2区| 九九九精品视频| 欧美在线观看视频一区二区三区| 久久久久综合网| 国产精品一二二区| 欧美视频精品在线观看| 国产精品网友自拍| 久久精品99国产精品| 欧美日韩午夜在线| 日韩理论电影院| 国产成人在线影院| 精品国产亚洲在线| 美女视频一区二区三区| 欧美日韩国产一二三| 亚洲精品视频自拍| 成人国产精品免费| 久久午夜羞羞影院免费观看| 日韩国产在线观看| 欧美视频在线一区二区三区| 亚洲精选视频在线| 97精品久久久久中文字幕| 久久久亚洲午夜电影| 看电影不卡的网站| 日韩欧美中文字幕精品| 舔着乳尖日韩一区| 欧美日韩精品福利| 亚洲综合成人网| 色爱区综合激月婷婷| 亚洲欧美日韩国产一区二区三区 | 国产综合久久久久久久久久久久| 91精品在线麻豆| 亚洲国产精品人人做人人爽| 欧美少妇bbb| 午夜亚洲福利老司机| 欧美视频一区在线观看| 亚洲国产一区视频| 欧美日韩一区二区三区免费看 | 国产精品久线观看视频| 国产iv一区二区三区| 国产女人aaa级久久久级| 国产精品羞羞答答xxdd| 欧美国产精品一区| 91视频在线观看免费| 亚洲综合色丁香婷婷六月图片| 欧美在线观看你懂的| 日韩和欧美的一区| 日韩欧美国产一区在线观看| 国内精品免费**视频| 久久精品一区四区| www.欧美精品一二区| 亚洲男人电影天堂| 欧美久久一二三四区| 久久99精品国产麻豆婷婷| 久久久久久久久久久久久女国产乱 | 制服丝袜中文字幕一区| 喷水一区二区三区| 久久久久久久久久久电影| 成人听书哪个软件好| 亚洲最新视频在线观看| 在线播放日韩导航| 国产激情精品久久久第一区二区| 国产精品国产三级国产有无不卡| 欧美中文一区二区三区| 另类成人小视频在线| 国产精品午夜久久|