⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 enfora.cpp

📁 Windows CE documentation and examples from the Windows CE development manuals. There are lots of exa
💻 CPP
📖 第 1 页 / 共 5 页
字号:
                    if (g_rgfCallStates[GlobalCallStateIndex].dwID &&  
                       (g_rgfCallStates[GlobalCallStateIndex].dwParams & RIL_PARAM_CI_CPISTATUS) && 
                       (RIL_CPISTAT_CONNECTED == g_rgfCallStates[GlobalCallStateIndex].dwStatus))
                    {
                        SetupCallListEvaluation ();
                        break;
                    }
                }
            }
        }

    }


    fRet = TRUE;

Error:

   /* The following example will cause problems down the road:
      %CPI: 1,0,0,1,1,0,"14257272470<cr><lf>
      Notice the missing end quote. In this case the check for CRLF will fail in if (!ParseRspPostfix(szPointer, szPointer)).
      If the check is performed here, the pointer can be placed to point at the next CRLF to avoid the failure. 

      In another case, we made it here because we did parse a CPI, but the total command is not correct yet. It is possible that the 
      response is complete (contains a cr lf, but the contents are invalid. In this case, the command should be purged; otherwise,
      it will block subsequent notification processing.
   */
    if (!ParseRspPostfix(rszPointer, szDummy))
    {
        if (FindRspPostfix(rszPointer, rszPointer))
        {
            DEBUGMSG(ZONE_ATCMD, (TEXT("RILDrv : i : Parse CPI: fix up <cr><lf> \r\n")));
            rszPointer -= 2; // Length of "\r\n"
            fRet = TRUE;
        }
    }

    return fRet;
}

BOOL CResponseTI::ParseNotificationOEM
(
    LPCSTR& szPointer,
    BOOL& fExpectCRLF,
    BOOL fDataOnNotificationPort
#ifdef RIL_WATSON_REPORT    
    , BOOL& fErrorNotification
#endif
)
{
    BOOL fRetVal = TRUE;

    if (MatchStringBeginning(szPointer, "CONNECT 9600", szPointer))
    { 
        if (!ParseV25Response(15))
        {
            fRetVal = FALSE;
            goto Error;
        }
        fExpectCRLF = FALSE;
    }
    else if (MatchStringAnywhere(szPointer, "AT-Command Interpreter ready", szPointer))
    {
        m_fUnsolicited = FALSE;
        g_fSignalQualityReceived = FALSE;

#ifdef RIL_RADIO_RESILIENCE
        // If this isn't the initial message sent on boot, then it is a radio reset
        if (g_fInitedFirstTime)
        {
            SignalCriticalError(RILLOG_EVENT_GENERALREINIT, __LINE__, __FILE__);        
            MakeError(RIL_E_RADIOREBOOTED);
        }
#endif // RIL_RADIO_RESILIENCE
    }
    else if (MatchStringAnywhere(szPointer, "%CPI: ", szPointer))
    {
        if (!ParseCallProgressInformation(szPointer))
        {
            fRetVal = FALSE;
            goto Error;
        }
    }
    else if (MatchStringBeginning(szPointer, "%CSQ: ", szPointer))
    {        
        LPCSTR szPostfix;
        if (!FindRspPostfix(szPointer, szPostfix))
        {
            // This isn't a complete signal quality notification -- no need to parse it
            fRetVal = FALSE;
            goto Error;
        }
        if (!g_fSignalQualityReceived)
        {
            memset(&g_rsq, 0x00, sizeof(RILSIGNALQUALITY));
        }
        g_rsq.cbSize = sizeof(RILSIGNALQUALITY);
        // OEM1 can provide signal strength notifications
        if (!ParseSignalQualityData(szPointer, &g_rsq, szPointer))
        {
            fRetVal = FALSE;
            goto Error;
        }
        m_fUnsolicited = TRUE;
        m_dwCode = RIL_NOTIFY_SIGNALQUALITY;
        if (!SetBlob((void*)&g_rsq, sizeof(RILSIGNALQUALITY)))
        {
            fRetVal = FALSE;
            goto Error;
        }   
        g_fSignalQualityReceived = TRUE;
    }
    // HW-SPECIFIC:OEM1 hardware issues a CSTAT notification when the SIM PB is ready or SMS store is ready
    else if (MatchStringBeginning(szPointer, "%CSTAT: ", szPointer))
    {
        RILEQUIPMENTSTATE res;
        UINT  nStatus;
        DWORD dwEntity = 0;
        BOOL fReady = FALSE;

        // Parse the following integer to se which state the SIM has reached
        if(MatchStringBeginning(szPointer, "PHB", szPointer))
            dwEntity = RIL_READYSTATE_SIM_PB;
        else if(MatchStringBeginning(szPointer, "SMS", szPointer))
            dwEntity = RIL_READYSTATE_SMS;
        else if(MatchStringBeginning(szPointer, "RDY", szPointer))
        {
            dwEntity = RIL_READYSTATE_SIM_PB | RIL_READYSTATE_SMS;
            fReady = TRUE;
        }

        if(!MatchStringBeginning(szPointer, ",", szPointer)  ||
           !ParseUInt(szPointer, FALSE, nStatus, szPointer))
        {
            fRetVal = FALSE;
            goto Error;
        }
        if((1 != nStatus)  || (0 == dwEntity))  // if report is Not Ready - then just ignore it
        {
            fRetVal = FALSE;
            goto Error;
        }

        if ( fReady )
        {
            /* radio is ready; read required SIM files */
            StartSIMRecordReadThread();
        }

        // send the remaining init commands the first time we are told SMS is ready
        if((dwEntity & RIL_READYSTATE_SMS) && !(g_dwReadyState & RIL_READYSTATE_SMS))
            (void)SendComInitString(COM_SMSINIT_INDEX);

        g_dwReadyState |= dwEntity;    
        m_fUnsolicited = TRUE;
        m_dwCode = RIL_NOTIFY_RADIOEQUIPMENTSTATECHANGED;
        memset(&res, 0x00, sizeof(RILEQUIPMENTSTATE));
        res.cbSize = sizeof(RILEQUIPMENTSTATE);
        res.dwParams = RIL_PARAM_EQUIPMENTSTATE_READYSTATE;
        res.dwReadyState = g_dwReadyState;
        if (!SetBlob((void*)(&res), res.cbSize))
        {
            fRetVal = FALSE;
            goto Error;
        }
    }
    // HW-SPECIFIC:OEM1 hardware issues a CTZV network date/time notification.
    else if (MatchStringBeginning(szPointer, "%CTZV: \"", szPointer))
    {
        UINT dwDate[3];
        UINT dwTime[3];
        UINT dwOffset;
        BOOL fPass = FALSE;
        BOOL fNegative = FALSE;
        RILNITZINFO RilNitzInfo;

        memset (&RilNitzInfo, 0, sizeof(RilNitzInfo));
        RilNitzInfo.cbSize = sizeof(RilNitzInfo);
        RilNitzInfo.dwNotificationCode = RIL_NOTIFY_NITZ;
        RilNitzInfo.dwParams = RIL_PARAM_NITZ_SYSTEMTIME | RIL_PARAM_NITZ_TIMEZONEOFFSET;


        for(UINT i=0; i<3; i++ )
        {
            if(ParseUInt(szPointer, TRUE, dwDate[i], szPointer))
            {
                if (MatchStringBeginning(szPointer, "/", szPointer))
                {
                    continue;
                }
                else
                {
                    if ( 2 == i ) fPass = TRUE;
                    break;
                }
            }
        }

        if ( TRUE == fPass )
        {
            RilNitzInfo.SysTime.wYear = dwDate[0];
            RilNitzInfo.SysTime.wMonth = dwDate[1];
            RilNitzInfo.SysTime.wDay = dwDate[2];
            fPass = FALSE;

            if (MatchStringBeginning(szPointer, ",", szPointer))
            {
                for(UINT i=0; i<3; i++ )
                {
                    if(ParseUInt(szPointer, TRUE, dwTime[i], szPointer))
                    {
                        if (MatchStringBeginning(szPointer, ":", szPointer))
                        {
                            continue;
                        }
                        else
                        {
                            if ( 2 == i ) fPass = TRUE;
                            break;
                        }
                    }
                }
            }

        }

        if ( TRUE == fPass )
        {
            RilNitzInfo.SysTime.wHour = dwTime[0];
            RilNitzInfo.SysTime.wMinute = dwTime[1];
            RilNitzInfo.SysTime.wSecond = dwTime[2];
            fPass = FALSE;

            if (MatchStringBeginning(szPointer, "-", szPointer))
            {
                fNegative = TRUE;
            }
            else
            {
                MatchStringBeginning(szPointer, "+", szPointer);
            }


            if(ParseUInt(szPointer, TRUE, dwOffset, szPointer))
            {
                fPass = TRUE;
                RilNitzInfo.TimeZoneOffsetMinutes = 60 * (fNegative ? (0-dwOffset):dwOffset);
            }
        }

        if ( TRUE == fPass )
        {
            MatchStringAnywhere(szPointer, "\"", szPointer);

            m_fUnsolicited = TRUE;
            m_dwCode = RIL_NOTIFY_NITZ;
            if (!SetBlob((void*)(&RilNitzInfo), RilNitzInfo.cbSize))
            {
                fRetVal = FALSE;
                goto Error;
            }
        }
        else
        {
            fRetVal = FALSE;
            goto Error;
        }
    }
    // HW-SPECIFIC:OEM1 hardware issues a CGEV notification when the GPRS context state is changed
    // currently only context deactivations by teh network are processed (previously reported by 3 (NO CARRIER))
    else if (MatchStringBeginning(szPointer, "+CGEV: ", szPointer))
    {
        bool fSendingNotification = false;
        RILGPRSCONTEXTACTIVATED rGPRSca;
        memset(&rGPRSca, 0x00, sizeof(RILGPRSCONTEXTACTIVATED));
        rGPRSca.cbSize = sizeof(RILGPRSCONTEXTACTIVATED);

        if (MatchStringBeginning(szPointer, "NW DETACH", szPointer))
        {
            DEBUGMSG(ZONE_ATCMD, (TEXT("RILDrv : i :Parse CGEV: found NW DETACH \r\n")));
            memset(&rGPRSca, 0, sizeof(rGPRSca));
            rGPRSca.cbSize = sizeof(rGPRSca);
            rGPRSca.fActivated = FALSE;
            rGPRSca.dwEvent = RIL_RILGPRSCONTEXTACTIVATED_NWDETACH;
            m_fUnsolicited = TRUE;
            m_dwCode = RIL_NOTIFY_GPRSCONNECTIONSTATUS;
            if (!SetBlob((void*)&rGPRSca, sizeof(RILGPRSCONTEXTACTIVATED)))    {
               fRetVal = FALSE;
               goto Error;
                }
           fSendingNotification = true;
        }
        else if (MatchStringBeginning(szPointer, "NW DEACT", szPointer))
        {
            UINT nCid;
            // format is <PDP_Type, <PDP_Addr>, [<cid>]
            DEBUGMSG(ZONE_ATCMD, (TEXT("RILDrv : i : Parse CGEV: found NW DEACT \r\n")));
            MatchStringBeginning(szPointer, ",", szPointer); // skip over PDP_Type, ignore failure
            MatchStringBeginning(szPointer, ",", szPointer); // and PDP_Addr
            memset(&rGPRSca, 0, sizeof(rGPRSca));
            rGPRSca.cbSize = sizeof(rGPRSca);
            rGPRSca.fActivated = FALSE;
            rGPRSca.dwEvent = RIL_RILGPRSCONTEXTACTIVATED_NWDEACT;
            if(ParseUInt(szPointer, FALSE, nCid, szPointer))
            {
                rGPRSca.dwContextID = nCid;
            }
            else
            {
                rGPRSca.dwContextID = ((DWORD)-1); //unknown call ID
            }
            // currently we send up a disconnect notification regardless of any parsing failures
           m_fUnsolicited = TRUE;
           m_dwCode = RIL_NOTIFY_GPRSCONNECTIONSTATUS;
           if (!SetBlob((void*)&rGPRSca, sizeof(RILGPRSCONTEXTACTIVATED)))    {
               fRetVal = FALSE;
               goto Error;
            }
           fSendingNotification = true;            
        }
        else if (MatchStringBeginning(szPointer, "ME DEACT", szPointer))
        {
            DEBUGMSG(ZONE_ATCMD, (TEXT("RILDrv : i : Parse CGEV: found ME DEACT \r\n")));

            EnterCriticalSection(&g_csGPRSDeactLock); 
            g_fDeactNotificationRcvd = TRUE;
            g_LastDeactNotificationRcvd = GetTickCount();
            LeaveCriticalSection(&g_csGPRSDeactLock); 
                
            UINT nCid;
            // format is <PDP_Type, <PDP_Addr>, [<cid>]
            // +CGEV: ME DEACT "IP","010.172.070.192",1<cr><lf>
            
            MatchStringAnywhere(szPointer, ",", szPointer); // skip over PDP_Type, ignore failure
            MatchStringAnywhere(szPointer, ",", szPointer); // and PDP_Addr
            if(ParseUInt(szPointer, FALSE, nCid, szPointer))
            {
                rGPRSca.dwContextID = nCid;
            }
            else
            {
                rGPRSca.dwContextID = ((DWORD)-1); //unknown call ID
            }
            DEBUGMSG(ZONE_ATCMD, (TEXT("RILDrv : i : Parse CGEV: After parsing context id, cid = [%d]\r\n"), nCid));
          
            // Even though this came as a notification from the radio, fake this to be a result
            // by setting m_fUnsolicited to FALSE (i.e. solicited)
            
            m_fUnsolicited = FALSE;
            m_dwCode = RIL_NOTIFY_GPRSCONNECTIONSTATUS;
            if (!SetBlob((void*)&rGPRSca, sizeof(RILGPRSCONTEXTACTIVATED)))    {
                fRetVal = FALSE;
                goto Error;
                }
            fSendingNotification = true;
        }
        else if (MatchStringBeginning(szPointer, "ME DETACH", szPointer))
        {
            DEBUGMSG(ZONE_ATCMD, (TEXT("RILDrv : i : Parse CGEV: found ME DETACH \r\n")));
        }
        else if (MatchStringBeginning(szPointer, "NW REACT", szPointer))
        {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -