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

📄 caps.cpp

📁 ril source code for Windows CE
💻 CPP
📖 第 1 页 / 共 4 页
字号:
    prstnc->dwGetInkey          = RIL_SIMTKN_MEIMPLEMENTS;
    prstnc->dwGetInput          = RIL_SIMTKN_MEIMPLEMENTS;
    prstnc->dwSelectItem        = RIL_SIMTKN_MEIMPLEMENTS;
    prstnc->dwSetupMenu         = RIL_SIMTKN_MEIMPLEMENTS;
    prstnc->dwSetupIdleModeText = RIL_SIMTKN_MEIMPLEMENTS;
    prstnc->dwLocalInfo         = RIL_SIMTKN_RADIOIMPLEMENTS_NONOTIFICATION;
    prstnc->dwSetupEventList    = RIL_SIMTKN_MEIMPLEMENTS;

    prstnc->dwSendDTMF          = g_rppPDDParams->dwDevCapsSIMTKN_SendDTMF;

    prstnc->dwLaunchBrowser     = RIL_SIMTKN_MEIMPLEMENTS;
    prstnc->dwOpenChannel       = RIL_SIMTKN_RADIOIMPLEMENTS_REQUESTMEINPUT;
    prstnc->dwCloseChannel      = RIL_SIMTKN_RADIOIMPLEMENTS_NOTIFICATION;
    prstnc->dwReceiveData       = RIL_SIMTKN_RADIOIMPLEMENTS_NOTIFICATION;
    prstnc->dwSendData          = RIL_SIMTKN_RADIOIMPLEMENTS_NOTIFICATION;
    prstnc->dwTimerManagement   = RIL_SIMTKN_RADIOIMPLEMENTS_NONOTIFICATION;
    prstnc->dwRunAtCmd          = RIL_SIMTKN_RADIOIMPLEMENTS_NOTIFICATION;

    prstnc->dwNotifyFlags       = (RIL_CAPS_NOTIFY_SIMTOOLKITCMD       |
                                   RIL_CAPS_NOTIFY_SIMTOOLKITCALLSETUP |
                                   RIL_CAPS_NOTIFY_SIMTOOLKITEVENT);

    prstec = &(prstnc->rstecEvents);
    prstec->cbSize               = sizeof(RILSIMTOOLKITEVENTCAPS);
    prstec->dwParams             = RIL_PARAM_SIMTKE_ALL;
    prstec->dwMTCall             = RIL_SIMTKN_RADIOIMPLEMENTS_NONOTIFICATION;
    prstec->dwCallConnected      = RIL_SIMTKN_RADIOIMPLEMENTS_NONOTIFICATION;
    prstec->dwCallDisconnected   = RIL_SIMTKN_RADIOIMPLEMENTS_NONOTIFICATION;
    prstec->dwLocationStatus     = RIL_SIMTKN_RADIOIMPLEMENTS_NONOTIFICATION;
    prstec->dwUserActivity       = RIL_SIMTKN_MEIMPLEMENTS;
    prstec->dwIdleScreen         = RIL_SIMTKN_MEIMPLEMENTS;
    prstec->dwLanguageSelection  = RIL_SIMTKN_MEIMPLEMENTS;
    prstec->dwBrowserTermination = RIL_SIMTKN_NOSUPPORT;
    prstec->dwDataAvailable      = RIL_SIMTKN_NOSUPPORT;
    prstec->dwChannelStatus      = RIL_SIMTKN_NOSUPPORT;
    prstec->dwDisplayChange      = RIL_SIMTKN_NOSUPPORT;

    pBlob = (void*)prstnc;
    cbBlob = sizeof(RILSIMTOOLKITNOTIFYCAPS);

Error:
    if (FAILED(hr)) {
        FreeBlob(prstnc);
    }

    return hr;
}

//
//
//
static HRESULT ParseGetSignalQualityImplemenation(LPCSTR szRsp, void*& pBlob, UINT& cbBlob)
{
    FUNCTION_TRACE(ParseGetSignalQualityImplemenation);
    HRESULT hr = S_OK;
    DWORD * pdwSignalQualityImplCaps = NULL;

    pBlob = NULL;
    cbBlob = 0;

    pdwSignalQualityImplCaps = (DWORD *)AllocBlob(sizeof(DWORD));
    if (!pdwSignalQualityImplCaps) {
        hr = E_OUTOFMEMORY;
        goto Error;
    }

    *pdwSignalQualityImplCaps = RIL_CAPS_SIGNALQUALITY_NOTIFICATION;

    pBlob = (void*)pdwSignalQualityImplCaps;
    cbBlob = sizeof(DWORD);

Error:
    if (FAILED(hr)) {
        FreeBlob(pdwSignalQualityImplCaps);
    }

    return hr;
}

//
//
//
static HRESULT ParseGetDevCapsSIMSupport(LPCSTR szRsp, void*& pBlob, UINT& cbBlob)
{
    FUNCTION_TRACE(ParseGetDevCapsSIMSupport);
    HRESULT hr = S_OK;
    DWORD * pdwSimSupportCaps = NULL;

    pBlob = NULL;
    cbBlob = 0;

    pdwSimSupportCaps = (DWORD *)AllocBlob(sizeof(DWORD));
    if (!pdwSimSupportCaps) {
        hr = E_OUTOFMEMORY;
        goto Error;
    }

    // GSM devices have SIM support.
    *pdwSimSupportCaps = RIL_CAPS_SIM_BASIC;

    pBlob = (void*)pdwSimSupportCaps;
    cbBlob = sizeof(DWORD);

Error:
    if (FAILED(hr)) {
        FreeBlob(pdwSimSupportCaps);
    }

    return hr;
}

//
//
//
static HRESULT ParseGetCallProgressNotification(LPCSTR szRsp, void*& pBlob, UINT& cbBlob)
{
    TBD_FUNCTION(ParseGetCallProgressNotification);
    HRESULT hr = S_OK;
    DWORD * pdwCallProgressNotification = NULL;

    pBlob = NULL;
    cbBlob = 0;

    pdwCallProgressNotification = (DWORD *)AllocBlob(sizeof(DWORD));
    if (!pdwCallProgressNotification) {
        hr = E_OUTOFMEMORY;
        goto Error;
    }

    *pdwCallProgressNotification = true;

    pBlob = (void*)pdwCallProgressNotification;
    cbBlob = sizeof(DWORD);

Error:
    if (FAILED(hr)) {
        FreeBlob(pdwCallProgressNotification);
    }

    return hr;
}


//
//
//
static HRESULT ParseGetNotificationImplemenation(LPCSTR szRsp, void*& pBlob, UINT& cbBlob)
{
    FUNCTION_TRACE(ParseGetNotificationImplemenation);
    HRESULT hr = S_OK;
    DWORD * pdwNotificationImplCaps = 0;

    pBlob = NULL;
    cbBlob = 0;

    pdwNotificationImplCaps = (DWORD *)AllocBlob(sizeof(DWORD));
    if (!pdwNotificationImplCaps) {
        hr = E_OUTOFMEMORY;
        goto Error;
    }
    *pdwNotificationImplCaps = 0;

    if (!GetRegistryDWORD(HKEY_LOCAL_MACHINE, RIL_CAPS_NOTIFICATION_KEY, RIL_CAPS_NOTIFICATION_IMPL_PARAMS, pdwNotificationImplCaps)) {
        DEBUGMSG(ZONE_ERROR, (TEXT("RIL : E : ParseGetNotificationImplemenation - Failed to read NotificationImplCaps from registry. \r\n")));
    }

    pBlob = (void*)pdwNotificationImplCaps;
    cbBlob = sizeof(DWORD);

Error:
    if (FAILED(hr)) {
        FreeBlob(pdwNotificationImplCaps);
    }

    return hr;
}


//
//
//
HRESULT RILDrv_GetDevCaps(DWORD dwParam, DWORD dwCapsType)
{
    FUNCTION_TRACE(RILDrv_GetDevCaps);
    HRESULT hr = S_OK;
    LPCSTR szCmd = NULL;
    DWORD dwOptions = CMDOPT_NONE;
    PFN_CMD_PARSE pfnParse = NULL;
    BOOL fSpoofed = FALSE;
    char szCmdBuf[ MAX_PATH ];
    CRilInstanceHandle* pHandle = ExtractHandle(dwParam);
    if (!pHandle) {
        hr = E_FAIL;
        goto Error;
    }

    switch (dwCapsType)
    {
        case RIL_CAPSTYPE_DIAL:
            szCmd = NULL;
            dwOptions = CMDOPT_NOOP;
            pfnParse = ParseGetDevCapsDial;
            break;

        case RIL_CAPSTYPE_DTMFDURATIONRANGE:
            szCmd = "AT+VTD=?\r";
            pfnParse = ParseGetDevCapsDTMFDurationRange;
            break;

        case RIL_CAPSTYPE_CALLMGTCMDS:
            szCmd = "AT+CHLD=?\r";
            pfnParse = ParseGetDevCapsCallMgtCmds;
            break;

        case RIL_CAPSTYPE_BEARERSERVICE:
            szCmd = "AT+CBST=?\r";
            pfnParse = ParseGetDevCapsBearerSvc;
            break;

        case RIL_CAPSTYPE_RLP:
            szCmd = "AT+CRLP=?\r";
            pfnParse = ParseGetDevCapsRLP;
            break;

        case RIL_CAPSTYPE_EQUIPMENTSTATES:
            szCmd = "AT+CFUN=?\r";
            pfnParse = ParseGetDevCapsEquipmentStates;
            break;

        case RIL_CAPSTYPE_PBSTORELOCATIONS:
            szCmd = "AT+CPBS=?\r";
            pfnParse = ParseGetDevCapsPBStoreLocs;
            break;

        case RIL_CAPSTYPE_PBINDEXRANGE:
            szCmd = "AT+CPBR=?\r";
            pfnParse = ParseGetDevCapsPBIndexRange;
            break;

        case RIL_CAPSTYPE_PBENTRYLENGTH:
            szCmd = "AT+CPBF=?\r";
            pfnParse = ParseGetDevCapsPBEntryLength;
            break;

        case RIL_CAPSTYPE_MSGSERVICETYPES:
            szCmd = "AT+CSMS=?\r";
            pfnParse = ParseGetDevCapsMsgSvcTypes;
            break;

        case RIL_CAPSTYPE_MSGMEMORYLOCATIONS:
            szCmd = "AT+CPMS=?\r";
            pfnParse = ParseGetDevCapsMsgMemoryLocs;
            break;

        case RIL_CAPSTYPE_BROADCASTMSGLANGS:
            szCmd = NULL;
            dwOptions = CMDOPT_NOOP;
            pfnParse = ParseGetDevCapsBroadcastMsgLangs;
            break;

        case RIL_CAPSTYPE_MSGCONFIGINDEXRANGE:
            szCmd = NULL;
            dwOptions = CMDOPT_NOOP;
            pfnParse = ParseGetDevCapsMsgConfigIndexRange;
            break;

        case RIL_CAPSTYPE_MSGSTATUSVALUES:
            szCmd = "AT+CMGL=?\r";
            pfnParse = ParseGetDevCapsMsgStatusValues;
            break;

        case RIL_CAPSTYPE_PREFOPINDEXRANGE:
            szCmd = "AT+CPOL=?\r";
            pfnParse = ParseGetDevCapsPrefOpIndexRange;
            break;

        case RIL_CAPSTYPE_LOCKFACILITIES:
#ifdef RIL_RADIO_RESILIENCE
            if (ShouldSpoofCommand() && g_cbLastLockCapsSize)
            {
                fSpoofed = TRUE;
                void *pLockCaps = AllocBlob(g_cbLastLockCapsSize);
                if (!pLockCaps) {
                    hr = E_OUTOFMEMORY;
                    goto Error;
                }
                hr = pHandle->GetDevice()->GetNextCmdID();
                memcpy(pLockCaps, g_pLastLockCaps, g_cbLastLockCapsSize);
                pHandle->Notify(RIL_RESULT_OK, hr, pLockCaps, g_cbLastLockCapsSize);
            }
            else
#endif
            {
                szCmd = "AT+CLCK=?\r";
                pfnParse = ParseGetDevCapsLockFacilities;
            }
            break;

        case RIL_CAPSTYPE_LOCKINGPWDLENGTHS:
            szCmd = "AT+CPWD=?\r";
            pfnParse = ParseGetDevCapsLockPwdLengths;
            break;

        case RIL_CAPSTYPE_BARRTYPES:
            szCmd = "AT+CLCK=?\r";
            pfnParse = ParseGetDevCapsBarrTypes;
            break;

        case RIL_CAPSTYPE_BARRINGPWDLENGTHS:
            szCmd = "AT+CPWD=?\r";
            pfnParse = ParseGetDevCapsBarrPwdLengths;
            break;

        case RIL_CAPSTYPE_FORWARDINGREASONS:
            szCmd = "AT+CCFC=?\r";
            pfnParse = ParseGetDevCapsFwdReasons;
            break;

        case RIL_CAPSTYPE_INFOCLASSES:
            szCmd = NULL;
            dwOptions = CMDOPT_NOOP;
            pfnParse = ParseGetDevCapsInfoClasses;
            break;

        case RIL_CAPSTYPE_HSCSD:
            szCmd = "AT+CHSD;+CHSN=?\r";
            pfnParse = ParseGetDevCapsHSCSD;
            break;

        case RIL_CAPSTYPE_SIMTOOLKITNOTIFICATIONS:
            szCmd = NULL;
            dwOptions = CMDOPT_NOOP;
            pfnParse = ParseGetDevCapsSimToolkitNotifications;
            break;


        case RIL_CAPSTYPE_GPRSCLASS:
            szCmd = "AT+CGCLASS=?\r";
            pfnParse = ParseGetGprsCapsClass;
            break;
        case RIL_CAPSTYPE_GPRSCONTEXT:
            szCmd = "AT+CGDCONT=?\r";
            pfnParse = ParseGetGprsCapsContext;
            break;
        case RIL_CAPSTYPE_GPRSQOS:
            szCmd = "AT+CGQREQ=?\r";
            pfnParse = ParseGetGprsCapsQOS;
            break;
        case RIL_CAPSTYPE_GPRSQOSMIN:
            szCmd = "AT+CGQMIN=?\r";
            pfnParse = ParseGetGprsCapsQOSMin;
            break;
        case RIL_CAPSTYPE_GPRSMOSMS:
            szCmd = "AT+CGSMS=?\r";
            pfnParse = ParseGetGprsCapsSMOSMS;
            break;

        case RIL_CAPSTYPE_DATACOMPRESSION:
            szCmd = "AT+DS=?\r";
            pfnParse = ParseGetDevCapsDataCompression;
            break;
        case RIL_CAPSTYPE_ERRORCORRECTION:
            szCmd = "AT+ES=?\r";
            pfnParse = ParseGetDevCapsErrorCorrection;
            break;

        case RIL_CAPSTYPE_SIGNALQUALITYIMPLEMENTATION:
            szCmd = NULL;
            dwOptions = CMDOPT_NOOP;
            pfnParse = ParseGetSignalQualityImplemenation;
            break;

        case RIL_CAPSTYPE_SIMSUPPORT:
            szCmd = NULL;
            dwOptions = CMDOPT_NOOP;
            pfnParse = ParseGetDevCapsSIMSupport;
            break;

        case RIL_CAPSTYPE_CALLPROGRESSNOTIFICATION:
            szCmd = NULL;
            dwOptions = CMDOPT_NOOP;
            pfnParse = ParseGetCallProgressNotification;
            break;

        case RIL_CAPSTYPE_NOTIFICATIONIMPLEMENTATION:
            szCmd = NULL;
            dwOptions = CMDOPT_NOOP;
            pfnParse = ParseGetNotificationImplemenation;
            break;

        case RIL_CAPSTYPE_NITZNOTIFICATION:
            if ( !(g_rppPDDParams->pfnParseGetNITZSupported) )
                {
                hr = E_NOTIMPL;
                goto Error;
                }
            SAFE_PDD_CREATECOMMAND( szCmdBuf, ARRAYSIZE(szCmdBuf), hr, PDD_CreateCommand_GetNITZSupported( szCmdBuf, ARRAYSIZE(szCmdBuf) ) );
            if ( FAILED( hr ) )
                {
                goto Error;
                }
            szCmd = szCmdBuf;
            pfnParse = g_rppPDDParams->pfnParseGetNITZSupported;
            break;

        default:
            hr = E_INVALIDARG;
            goto Error;
    }

    if (!fSpoofed)
        if (!QueueCmd(pHandle, szCmd, dwOptions, APIID_GETDEVCAPS, pfnParse, NULL, hr)) {
            hr = E_FAIL;
            goto Error;
        }

Error:
    return hr;
}

⌨️ 快捷键说明

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