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

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

?? comhand.cpp

?? ril source code for Windows CE
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
        {
            // Break is detected on the downstream port
            if (ClearCommBreak(m_hDownstream))
            {
                DEBUGMSG(ZONE_ERROR, (TEXT("RILDrv : E : CComHandle::GetDTRDropResponse : Detected comm break\r\n")));
            }
        }

        if (dwMask & EV_RXCHAR)
        {
            while (1)
            {
                // Get up to 1K of data
                if (!DOWNST_READFILE(m_hDownstream, szData, 1024, &dwRead))
                {
                    goto Error;
                }

                if (!dwRead)
                {
                    break;
                }
#ifdef DEBUG
                DEBUGMSG(ZONE_TRACE, (TEXT("RILDrv : t : CComHandle::GetDTRDropResponse : Read bytes(3): %s\r\n"), TString(PrintableString(szData, dwRead))));
#endif
                // Append what we got to the temporary buffer
                if (!bufTemp.Append(szData, dwRead))
                {
                    // Critically low on memory
                    SignalCriticalError(RILLOG_EVENT_LOWMEMORY, __LINE__, __FILE__);
                    goto Error;
                }

                // Get the accumulated string
                szTotal = bufTemp.GetData();
                cbTotal = bufTemp.GetLength();
#ifdef DEBUG
                DEBUGMSG(ZONE_TRACE, (TEXT("RILDrv : t : CComHandle::GetDTRDropResponse : Accumulated DTR response has %d chars: %s\r\n"), cbTotal,
                           TString(PrintableString(szTotal, cbTotal))));
#endif
                // Look for the indication of successful DTR drop
                if (MatchBytesAnywhere((BYTE*)szTotal, cbTotal, (BYTE*)"0\r\r\n", 4, const_cast<const BYTE*&>(pbRemainder)))
                {
                    // We found "0\r\r\n", i.e. OK<CR> followed by <CR><LF> (starting an unsolicited notification)
                    DEBUGCHK(NULL != pbRemainder);

                    // Include the terminating <CR><LF> in the remainder
                    pbRemainder -= 2;
                }
                else if (MatchBytesEnd((BYTE*)szTotal, cbTotal, (BYTE*)"0\r", 2, const_cast<const BYTE*&>(pbRemainder)))
               {
                    // We found '0\r" at the very end of the data
                    DEBUGCHK(NULL != pbRemainder);
                }

                if (pbRemainder)
                {
                    szRemainder = (LPCSTR)pbRemainder;
                    // Store any data before OK into the backup buffer
                    cbDataBeforeOK = szRemainder - szTotal - 2;
                    if (cbDataBeforeOK && !m_pBuffer->Append(szTotal, cbDataBeforeOK))
                    {
                        // Critically low on memory
                        SignalCriticalError(RILLOG_EVENT_LOWMEMORY, __LINE__, __FILE__);
                        goto Error;
                    }

                    // Store any data after OK in the response buffer of the read thread
                    cbDataAfterOK = cbTotal - (szRemainder - szTotal);
                    if (cbDataAfterOK && !pRilDevice->AppendReadBytes(szRemainder, cbDataAfterOK, false))
                    {
                        goto Error;
                    }
#ifdef DEBUG
                    DEBUGMSG(ZONE_INFO, (TEXT("RILDrv : i : CComHandle::GetDTRDropResponse : DTR successfuly dropped: %d bytes before, %d bytes after: %s\r\n"),
                               cbDataBeforeOK, cbDataAfterOK, TString(PrintableString(szRemainder,cbDataAfterOK))));
#endif
                    fRet = TRUE;
                    goto Error;
                }
            }
        }
    }

    Error:
    if (!fRet && bufTemp.GetLength())
    {
        // Append any data we've accumulated
        (void)m_pBuffer->Append(bufTemp.GetData(), bufTemp.GetLength());
        DEBUGMSG(ZONE_TRACE, (TEXT("RILDrv : t : CComHandle::GetDTRDropResponse : Stored %d bytes in the buffer\r\n"), bufTemp.GetLength()));
    }
    return fRet;
}


//
// A custom action callback passed to EnterExclusiveUse() below
//
void CComHandle::ResetCommMask(DWORD dwParam)
{
    FUNCTION_TRACE(ResetCommMask);
    DEBUGCHK(NULL != dwParam);

    HANDLE hCom = (HANDLE)dwParam;

    // Release any threads waiting on comm events
    (void)SetCommMask(hCom, 0);
}

HRESULT ParseGetSignalQuality(LPCSTR szRsp, void*& pBlob, UINT& cbBlob);
HRESULT ParseBatteryInfo(LPCSTR szRsp, void*& pBlob, UINT& cbBlob);

#ifdef SUPPRESS_ONLINE_SIGNAL_STRENGTH
extern char gszGetSignalQualityLast[128];
#endif

#ifdef SUPPRESS_ONLINE_BATTERY_INFO
extern char gszGetBatteryInfoLast[128];
#endif

//
// Interrupt other serial operations on the downstream port and send an RIL command
// WARNING: this routine enters Exclusive Use mode, effectively blocking any other virtual
//          serial port operation, so MAKE SURE not to block inside this routine.
//
BOOL CComHandle::SendRILCmdsInDataMode(CRilHandle* const pRilDevice, BOOL& rfBackToCmdMode)
{
    // FUNCTION_TRACE(CComHandle::SendRILCmdsInDataMode);
    DEBUGCHK(FALSE != m_fInited);
    DEBUGCHK(FALSE != m_fPortOpened);
    DEBUGCHK(FALSE != m_fDataMode);
    DEBUGCHK(m_hDownstream != INVALID_HANDLE_VALUE);

    DCB dcbOld; memset(&dcbOld,0,sizeof(dcbOld)); // zero struct
    COMMTIMEOUTS ctOld; memset(&ctOld,0,sizeof(ctOld)); // zero struct
    CCommand* pCmd = NULL;
    CCommand* pCmdPeeked = NULL;
    DWORD dwStartTime;
    UINT nAttempts;
    BOOL fInCmdMode = FALSE;
    HRESULT hr;
    DWORD dwMask=0;
    DWORD dwTimeAllowedInCmdMode;
    BOOL fEnteredExclusiveUse = FALSE;
    BOOL fPortInitSucceded = FALSE;
    BOOL fATOTimedOut;
    BOOL fDummy;
    BOOL fRet = FALSE;
    DWORD dwStatus;



    rfBackToCmdMode = FALSE;
    if (GetCommModemStatus(m_hDownstream, &dwStatus))
    {
#ifndef NO_RLSD_SUPPORT
        if (!(dwStatus & MS_RLSD_ON))
        {
            // RLSD is off, which means that data connections has been dropped
            DEBUGMSG(ZONE_INFO, (TEXT("RILDrv : i : CComHandle::SendRILCmdsInDataMode : Detected remote disconnect due to loss of RLSD\r\n")));
            fInCmdMode = TRUE;
        }
#endif
    }

    // Send out all the no-op commands at the front of the queue without dropping out of data mode
    while (!fInCmdMode && g_pCmdQ->Peek(pCmdPeeked))
    {
        if (pCmdPeeked->FNoOp())
        {
            // Delete whatever was in the command structure
            delete pCmd;
            pCmd = NULL;

            // Get the next command
            hr = g_pCmdQ->Get(pCmd, 0);
            if (FAILED(hr))
            {
                goto Error;
            }

            // Send the command
            if (!SendRILCmdHandleRsp(pRilDevice, pCmd, rfBackToCmdMode, fDummy))
            {
                goto Error;
            }
            DEBUGCHK(NULL == pCmd);
        }
#ifdef SUPPRESS_ONLINE_SIGNAL_STRENGTH
        // Option to avoid getting signal strength while connected (avoids dropping DTR during data calls)
        else if (pCmdPeeked->GetParseFunc()==ParseGetSignalQuality)
        {
            DEBUGMSG(ZONE_INFO, (TEXT("RILDrv : i : CComHandle::SendRILCmdsInDataMode : Faking signal quality\r\n")));
            // Delete whatever was in the command structure
            delete pCmd;
            pCmd = NULL;

            // Get the next command
            hr = g_pCmdQ->Get(pCmd, 0);
            if (FAILED(hr))
            {
                goto Error;
            }

            // Allocate a new response
            CResponse *pRsp = NULL;
            if (FAILED(PDD_GetResponseObject(pRsp)) || !pRsp)
            {
                // Critically low on memory
                SignalCriticalError(RILLOG_EVENT_LOWMEMORY, __LINE__, __FILE__);
                goto Error;
            }

            // Create an OK response (since the command was a no-op, it can't fail)
            char *szRemainder;
            UINT cbRemainder;
            if (!pRsp->AppendString(gszGetSignalQualityLast, strlen(gszGetSignalQualityLast), const_cast<LPCSTR&>(szRemainder), cbRemainder, FALSE))
            {
                goto Error;
            }

            BOOL fHungUp;
            if (!pRilDevice->HandleRsp(pCmd, pRsp, fHungUp, g_bRadioOff))
            {
                goto Error;
            }
            DEBUGCHK(NULL == pCmd);
        }
#endif // SUPPRESS_ONLINE_SIGNAL_STRENGTH
#ifdef SUPPRESS_ONLINE_BATTERY_INFO
        // Option to avoid getting battery strength while connected (avoids dropping DTR during data calls)
        else if (pCmdPeeked->GetParseFunc()==ParseBatteryInfo)
        {
            DEBUGMSG(ZONE_INFO, (TEXT("RILDrv : i : CComHandle::SendRILCmdsInDataMode : Faking battery info\r\n")));
            // Delete whatever was in the command structure
            delete pCmd;
            pCmd = NULL;

            // Get the next command
            hr = g_pCmdQ->Get(pCmd, 0);
            if (FAILED(hr))
            {
                goto Error;
            }

            // Allocate a new response
            CResponse *pRsp = NULL;
            if (FAILED(PDD_GetResponseObject(pRsp)) || !pRsp)
            {
                // Critically low on memory
                SignalCriticalError(RILLOG_EVENT_LOWMEMORY, __LINE__, __FILE__);
                goto Error;
            }

            // Create an OK response (since the command was a no-op, it can't fail)
            char *szRemainder;
            UINT cbRemainder;
            if (!pRsp->AppendString(gszGetBatteryInfoLast, strlen(gszGetBatteryInfoLast), szRemainder, cbRemainder, FALSE))
            {
                goto Error;
            }

            BOOL fHungUp;
            if (!pRilDevice->HandleRsp(pCmd, pRsp, fHungUp, g_bRadioOff))
            {
                goto Error;
            }
            DEBUGCHK(NULL == pCmd);
        }
#endif // SUPPRESS_ONLINE_BATTERY_INFO
        else
        {
            break;
        }

    }
    pCmdPeeked = NULL;


    // See how much of the next quantum we can spend in the command mode
    dwTimeAllowedInCmdMode = CalculateCmdModeTime();
    DEBUGMSG(ZONE_TRACE, (TEXT("RILDrv : t : CComHandle::SendRILCmdsInDataMode : Time allowed in cmd mode: %d msec\r\n"), dwTimeAllowedInCmdMode));

    // See if there are any commands in the queue
    if (!g_pCmdQ->Peek(pCmdPeeked))
    {
        goto Error;
    }
    // See if the first command in the queue will take too long
    if (!FEnoughTimeToSendCmd(pCmdPeeked, dwTimeAllowedInCmdMode))
    {
        goto Error;
    }

    pCmdPeeked = NULL;

    // Get the comm mask used now
    (void)GetCommMask(m_hDownstream, &dwMask);

#ifndef DEDICATED_DATA_PORT
    SetEvent(m_hDataModeInterrupted);
#endif

    // Enter exclusive use mode
    if (!EnterExclusiveUse())
    {
        goto Error;
    }
    fEnteredExclusiveUse = TRUE;
    dwStartTime = GetTickCount();

    // Intialize downstream port for RIL use
    if (!InitComPortForRIL(&dcbOld, &ctOld))
    {
        goto Error;
    }
    fPortInitSucceded = TRUE;

    nAttempts = 0;
    while (!fInCmdMode && nAttempts < MAX_DTR_ATTEMPTS)
    {
#ifdef NO_DTR_SUPPORT
        WriteCharsToComPort(pRilDevice, "+++", 3);
#else
        // Drop the DTR
        (void)EscapeCommFunction(m_hDownstream, CLRDTR);
        DEBUGMSG(ZONE_INFO, (TEXT("RILDrv : i : CComHandle::SendRILCmdsInDataMode : Dropping DTR\r\n")));
#endif
        // Verify that we got an "OK" response
        fInCmdMode = GetDTRDropResponse(pRilDevice);
        
        (void)EscapeCommFunction(m_hDownstream, SETDTR);
        ++nAttempts;
    }

    SetTimeoutStatus(!fInCmdMode);

    // If we couldn't drop the DTR for some reason, bail for now
    if (!fInCmdMode)
    {
        DEBUGMSG(ZONE_ERROR, (TEXT("RILDrv : E : CComHandle::SendRILCmdsInDataMode : Could not drop DTR\r\n")));
        goto Error;
    }

    // Temporarily release threads waiting for command mode to operate
    if (!SetEvent(m_hCommandModeEvent))
    {
        goto Error;
    }

    // Send as many commands as we can in the time we have (make sure to send at least one command)
    while (!g_pCmdQ->FEmpty())
    {
        // Delete whatever was in the command structure
        delete pCmd;
        pCmd = NULL;

        // Get the next command
        hr = g_pCmdQ->Get(pCmd, 0);
        if (FAILED(hr))
        {
            goto Error;
        }

        // Send the command
        if (!SendRILCmdHandleRsp(pRilDevice, pCmd, rfBackToCmdMode, fDummy))
        {
            goto Error;
        }
        DEBUGCHK(NULL == pCmd);

        // If this command forced us to hangup the data connection, bail out
        if (rfBackToCmdMode)
        {
            fRet = TRUE;
            goto Error;
        }

        // See if we can send another command
        if (!g_pCmdQ->Peek(pCmdPeeked) ||
            !FEnoughTimeToSendCmd(pCmdPeeked, dwTimeAllowedInCmdMode - (GetTickCount() - dwStartTime)))
        {
            break;
        }
    }
    pCmdPeeked = NULL;

    // Return to the data mode
    nAttempts = 0;
    do
    {
        pCmd = new CCommand;
        if (!pCmd ||
            !pCmd->Init(NULL, "ATO\r", NULL,
                        CMDOPT_IGNORERSP | CMDOPT_REQUIRECONNECTRSP,
                        EXECTIME_API_DEFAULT,
                        g_TimeoutCmdOnline,
                        NULL, NULL, 0, 0, 0, APIID_NONE, NULL, NULL))
        {
            goto Error;
        }

        if (!SendRILCmdHandleRsp(pRilDevice, pCmd, rfBackToCmdMode, fATOTimedOut))
        {
            goto Error;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲黄色片在线观看| 精品视频全国免费看| 欧美人妖巨大在线| 午夜激情久久久| 久久这里只有精品6| 在线视频欧美精品| 欧美日韩欧美一区二区| 国产一本一道久久香蕉| 一区二区不卡在线视频 午夜欧美不卡在| 欧美猛男超大videosgay| 欧美在线观看视频一区二区三区| 日韩你懂的在线观看| 国产一区二区在线观看免费| 亚洲一级在线观看| 国产精品久久二区二区| 欧美精品自拍偷拍| 91在线精品一区二区三区| 久草这里只有精品视频| 婷婷国产在线综合| 亚洲美女偷拍久久| 中文字幕av一区二区三区免费看| 日韩欧美国产系列| 久久精品国产77777蜜臀| 亚洲天堂中文字幕| 久久久精品综合| 91精品国产色综合久久久蜜香臀| 91麻豆免费看| 风间由美一区二区三区在线观看| 盗摄精品av一区二区三区| 国产精品视频yy9299一区| 精品久久久久久久久久久院品网| 欧美精选一区二区| 欧美高清视频在线高清观看mv色露露十八| 成人免费va视频| 国产福利一区在线观看| 国产一区在线精品| 激情五月婷婷综合| 久色婷婷小香蕉久久| 奇米精品一区二区三区在线观看一| 亚洲高清免费观看高清完整版在线观看| 国产精品国产精品国产专区不蜜| 久久久亚洲精品石原莉奈| 26uuu亚洲综合色欧美| 精品国内二区三区| 欧美精品一区二区三区四区| 精品久久久三级丝袜| 精品国产不卡一区二区三区| 日韩一区二区电影| 精品国产露脸精彩对白| 精品美女一区二区| 久久无码av三级| 久久久.com| 欧美激情一区二区三区蜜桃视频| 国产亚洲制服色| 一本大道av伊人久久综合| 国产偷国产偷亚洲高清人白洁| 亚洲精品一区二区三区福利 | 国产精品影音先锋| 欧美国产精品一区二区| 91超碰这里只有精品国产| 不卡影院免费观看| 成人av在线一区二区| 国产成人精品亚洲日本在线桃色| 亚洲超碰精品一区二区| 丝袜诱惑制服诱惑色一区在线观看| 亚洲精品国久久99热| 亚洲一区二区免费视频| 依依成人精品视频| 亚洲高清免费一级二级三级| 青青草91视频| 极品少妇xxxx精品少妇偷拍| 亚洲成a人片在线不卡一二三区| 最近日韩中文字幕| 日本不卡视频在线观看| 国产一区二区美女诱惑| 在线看国产一区| 欧美精品一区二区三区一线天视频 | 成人av在线影院| 91福利国产精品| 国产午夜亚洲精品羞羞网站| 亚洲精品一二三区| 精品亚洲国产成人av制服丝袜| a级高清视频欧美日韩| 91精品国产综合久久久久久久| 日本一区二区高清| 美国毛片一区二区| 欧美日韩一区二区三区不卡| 亚洲色图视频网| 日本不卡一区二区| 色婷婷国产精品综合在线观看| 2023国产精品| 男人的天堂亚洲一区| 日本道在线观看一区二区| 国产欧美一区二区精品忘忧草| 亚洲aⅴ怡春院| 欧美日韩大陆一区二区| 亚洲一区二区三区四区在线观看| 成人午夜av在线| 欧美激情一区二区三区蜜桃视频| 久久99精品久久久久| 日韩免费在线观看| 丝袜美腿亚洲一区二区图片| 欧美日韩高清一区二区三区| 亚洲小说欧美激情另类| 欧美猛男男办公室激情| 日韩和欧美一区二区三区| 91精品国产综合久久久久久| 青青草一区二区三区| 精品国产免费人成在线观看| 国产在线一区观看| 国产精品麻豆欧美日韩ww| 成人app下载| 午夜精品福利一区二区三区蜜桃| 欧美浪妇xxxx高跟鞋交| 麻豆精品一区二区av白丝在线| 久久久久国产一区二区三区四区| 狠狠色狠狠色综合| 亚洲青青青在线视频| 欧美日本一区二区| 国产一区二三区| 亚洲综合色成人| 这里只有精品视频在线观看| 久久精品国产精品亚洲红杏| 欧美极品少妇xxxxⅹ高跟鞋 | 91在线高清观看| 另类小说视频一区二区| 日韩一区欧美一区| 日韩欧美美女一区二区三区| 丁香网亚洲国际| 免费在线观看精品| 久久精品亚洲麻豆av一区二区| 91美女在线视频| 激情另类小说区图片区视频区| 亚洲视频狠狠干| 精品91自产拍在线观看一区| 色94色欧美sute亚洲线路二| 国产精品91一区二区| 亚洲大片一区二区三区| 中文字幕一区二区三区乱码在线| 日韩欧美的一区| 欧美日韩和欧美的一区二区| 成人免费高清视频在线观看| 国产激情一区二区三区桃花岛亚洲| 亚洲综合av网| 亚洲精品一卡二卡| 国产精品精品国产色婷婷| 国产天堂亚洲国产碰碰| 精品国产人成亚洲区| 欧美精品欧美精品系列| 在线观看亚洲专区| 欧美视频在线一区二区三区| 欧美视频完全免费看| 欧美日韩国产电影| 9191成人精品久久| 欧美一区二区三区视频在线| 欧美日韩一区在线| 欧美日韩国产另类不卡| 欧美性大战xxxxx久久久| 欧美日韩一级二级| 欧美一激情一区二区三区| 精品少妇一区二区三区免费观看| 91麻豆精品国产综合久久久久久| 欧美喷水一区二区| 精品久久人人做人人爽| 综合分类小说区另类春色亚洲小说欧美| 中文字幕精品在线不卡| 亚洲美女免费视频| 日本欧美大码aⅴ在线播放| 国产精品资源网| 91极品视觉盛宴| 国产香蕉久久精品综合网| 中文字幕亚洲一区二区av在线| 亚洲精品成人在线| 久久精品国产99久久6| 99国产精品久久久久久久久久久| 欧美日韩国产经典色站一区二区三区| 欧美成人aa大片| 亚洲欧美日韩久久| 精品一区二区久久久| 欧美伊人久久久久久久久影院| 欧美一二三四区在线| 亚洲天堂网中文字| 国内精品久久久久影院色| 欧美视频日韩视频在线观看| 国产精品不卡在线| 久久精品久久99精品久久| 色一情一乱一乱一91av| 欧美激情一二三区| 国产麻豆一精品一av一免费| 5858s免费视频成人| 亚洲综合精品自拍| 99久久99久久精品免费看蜜桃| 精品美女被调教视频大全网站| 亚洲bt欧美bt精品777| 欧美一区二区久久| 五月天视频一区| 色综合久久中文综合久久97| 日韩免费在线观看| 婷婷夜色潮精品综合在线| 国产成人三级在线观看|