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

📄 data.cpp

📁 ril source code for Windows CE
💻 CPP
📖 第 1 页 / 共 4 页
字号:
            }
            if (!nValue)
            {
                hr = E_INVALIDARG;
                goto Error;
            }
        }

        (void)_snprintfz(szWalk, MAX_PATH - (szWalk - szCmd), "%u", nValue);
        szWalk = strchr(szWalk, '\0');  // NO_TYPO: 27
        DEBUGCHK(NULL != szWalk);
    }


    // Add ";+CHSN="
    (void)strncpyz(szWalk, ";+CHSN=", MAX_PATH - (szWalk - szCmd));

    szWalk = strchr(szWalk, '\0');  // NO_TYPO: 27
    DEBUGCHK(NULL != szWalk);

    // Add "<auir>"
    if (lpHscsdInfo->dwParams & RIL_PARAM_HSCSDI_AIRINTERFACEUSERRATE)
    {
        if (RIL_HSCSDAIURATE_UNKNOWN == lpHscsdInfo->dwAirInterfaceUserRate)
        {
            hr = E_INVALIDARG;
            goto Error;
        }

        if (RIL_HSCSDAIURATE_DEFAULT == lpHscsdInfo->dwAirInterfaceUserRate)
        {
            nValue = 0;
        }
        else if (RIL_HSCSDAIURATE_57600 >= lpHscsdInfo->dwAirInterfaceUserRate)
        {
            nValue = g_rgdwHSCSDAirRates[lpHscsdInfo->dwAirInterfaceUserRate];
        }
        else 
        {
            hr = E_INVALIDARG;
            goto Error;
        }

        (void)_snprintfz(szWalk, MAX_PATH - (szWalk - szCmd), "%u", nValue);
        szWalk = strchr(szWalk, '\0');  // NO_TYPO: 27
        DEBUGCHK(NULL != szWalk);
    }

    // Add ","
    (void)strncpyz(szWalk, ",", MAX_PATH - (szWalk - szCmd));
    szWalk = strchr(szWalk, '\0');  // NO_TYPO: 27
    DEBUGCHK(NULL != szWalk);

    // Add "<rx_timeslots>"
    if (lpHscsdInfo->dwParams & RIL_PARAM_HSCSDI_NONTRANSPRXTIMESLOTS)
    {
        if (RIL_HSCSDTIMESLOTS_DEFAULT == lpHscsdInfo->dwNonTranspRxTimeslots)
        {
            nValue = 0;
        }
        else
        {
            nValue = lpHscsdInfo->dwNonTranspRxTimeslots;
        }

        (void)_snprintfz(szWalk, MAX_PATH - (szWalk - szCmd), "%u", nValue);
        szWalk = strchr(szWalk, '\0');  // NO_TYPO: 27
        DEBUGCHK(NULL != szWalk);
    }

    // Add ","
    (void)strncpyz(szWalk, ",", MAX_PATH - (szWalk - szCmd));
    szWalk = strchr(szWalk, '\0');  // NO_TYPO: 27
    DEBUGCHK(NULL != szWalk);

    // Add "<top_rx_timeslots>"
    if (lpHscsdInfo->dwParams & RIL_PARAM_HSCSDI_RXTIMESLOTSLIMIT)
    {
        if (RIL_HSCSDTIMESLOTSLIMIT_NONE == lpHscsdInfo->dwRxTimeslotsLimit)
        {
            nValue = 0;
        }
        else
        {
            nValue = lpHscsdInfo->dwRxTimeslotsLimit;
        }

        (void)_snprintfz(szWalk, MAX_PATH - (szWalk - szCmd), "%u", nValue);
        szWalk = strchr(szWalk, '\0');  // NO_TYPO: 27
        DEBUGCHK(NULL != szWalk);
    }

    // Add ","
    (void)strncpyz(szWalk, ",", MAX_PATH - (szWalk - szCmd));
    szWalk = strchr(szWalk, '\0');  // NO_TYPO: 27
    DEBUGCHK(NULL != szWalk);

    // Add "<codings>"
    if (lpHscsdInfo->dwParams & RIL_PARAM_HSCSDI_NONTRANSPCHANNELCODINGS)
    {
        nValue = 0;
        if (RIL_HSCSDCODING_ALL != lpHscsdInfo->dwNonTranspChannelCodings)
        {
            for (i = 0 ; i < NUM_HSCSDCODINGS; i++)
            {
                if (lpHscsdInfo->dwNonTranspChannelCodings & g_rgdwHSCSDCodings[i])
                {
                    nValue += (0x01 << i);
                }
            }
            if (!nValue)
            {
                hr = E_INVALIDARG;
                goto Error;
            }
        }

        (void)_snprintfz(szWalk, MAX_PATH - (szWalk - szCmd), "%u", nValue);
        szWalk = strchr(szWalk, '\0');  // NO_TYPO: 27
        DEBUGCHK(NULL != szWalk);
    }

    if (lpHscsdInfo->dwParams & RIL_PARAM_HSCSDI_AUTOSVCLEVELUPGRADING)
    {
        // Add ";+CHSU=<mode>"
        (void)_snprintfz(szWalk, MAX_PATH - (szWalk - szCmd), ";+CHSU=%u",
                         (lpHscsdInfo->fAutoSvcLevelUpgrading ? 1 : 0));
        szWalk = strchr(szWalk, '\0');  // NO_TYPO: 27
        DEBUGCHK(NULL != szWalk);
    }

    // Add "<CR>"
    (void)strncpyz(szWalk, "\r", MAX_PATH - (szWalk - szCmd));
    if (!QueueCmd(pHandle, szCmd, CMDOPT_NONE, APIID_SETHSCSDOPTIONS, NULL, NULL, hr))
    {
        hr = E_FAIL;
        goto Error;
    }

    Error:

    return hr;
}
//
//
//
static HRESULT ParseGetHSCSDCallSettings(LPCSTR szRsp, void*& pBlob, UINT& cbBlob)
{
    FUNCTION_TRACE(ParseGetHSCSDCallSettings);
    UINT nValue;
    UINT i;
    RILCALLHSCSDINFO* prchscsdi = NULL;
    HRESULT hr = S_OK;

    pBlob = NULL;
    cbBlob = 0;

    prchscsdi = (RILCALLHSCSDINFO*)AllocBlob(sizeof(RILCALLHSCSDINFO));
    if (!prchscsdi)
    {
        hr = E_OUTOFMEMORY;
        goto Error;
    }
    memset(prchscsdi, 0x00, sizeof(RILCALLHSCSDINFO));
    prchscsdi->cbSize = sizeof(RILCALLHSCSDINFO);

    // Parse "<prefix>+CHSC: <rx_timeslots>"
    if (!ParseRspPrefix(szRsp, szRsp)                  ||
        !MatchStringBeginning(szRsp, "+CHSC: ", szRsp) ||
        !ParseUInt(szRsp, TRUE, nValue, szRsp))
    {
        hr = E_FAIL;
        goto Error;
    }
    prchscsdi->dwRxTimeslots = nValue;
    prchscsdi->dwParams |= RIL_PARAM_CHSCSDI_RXTIMESLOTS;

    // Parse ",<tx_timeslots>"
    if (!MatchStringBeginning(szRsp, ",", szRsp) ||
        !ParseUInt(szRsp, TRUE, nValue, szRsp))
    {
        hr = E_FAIL;
        goto Error;
    }
    prchscsdi->dwTxTimeslots = nValue;
    prchscsdi->dwParams |= RIL_PARAM_CHSCSDI_TXTIMESLOTS;

    // Parse ",<aiur>"
    if (!MatchStringBeginning(szRsp, ",", szRsp) ||
        !ParseUInt(szRsp, TRUE, nValue, szRsp))
    {
        hr = E_FAIL;
        goto Error;
    }
    for (i = 0; i < NUM_HSCSDAIRRATES; i++)
    {
        if (nValue == g_rgdwHSCSDAirRates[i])
        {
            prchscsdi->dwAirInterfaceUserRate = i;
            break;
        }
    }
    if (NUM_HSCSDAIRRATES == i)
    {
        // We couldn't match the response with anything
        prchscsdi->dwAirInterfaceUserRate = RIL_HSCSDAIURATE_UNKNOWN;
    }
    prchscsdi->dwParams |= RIL_PARAM_CHSCSDI_AIRINTERFACEUSERRATE;

    // Parse ",<coding><postfix>"
    if (!MatchStringBeginning(szRsp, ",", szRsp) ||
        !ParseUInt(szRsp, TRUE, nValue, szRsp)   ||
        !ParseRspPostfix(szRsp, szRsp))
    {
        hr = E_FAIL;
        goto Error;
    }
    for (i = 0 ; i < NUM_HSCSDCODINGS; i++)
    {
        if ((0x01 << i) == (int)nValue)
        {
            prchscsdi->dwChannelCoding = g_rgdwHSCSDCodings[i];
            break;
        }
    }
    if (NUM_HSCSDCODINGS == i)
    {
        prchscsdi->dwChannelCoding = RIL_HSCSDCODING_UNKNOWN;
    }
    prchscsdi->dwParams |= RIL_PARAM_CHSCSDI_CHANNELCODING;

    pBlob = (void*)prchscsdi;
    cbBlob = sizeof(RILCALLHSCSDINFO);

    Error:
    if (FAILED(hr))
    {
        FreeBlob(prchscsdi);
    }
    return hr;
}


//
//
//
HRESULT RILDrv_GetHSCSDCallSettings(DWORD dwParam)
{
    FUNCTION_TRACE(RILDrv_GetHSCSDCallSettings);

    HRESULT hr = S_OK;
    CRilInstanceHandle* pHandle = ExtractHandle(dwParam);
    if (!pHandle)
    {
        hr = E_FAIL;
        goto Error;
    }

    if (!QueueCmd(pHandle, "AT+CHSC\r", CMDOPT_NONE, APIID_GETHSCSDCALLSETTINGS, ParseGetHSCSDCallSettings, NULL, hr))
    {
        hr = E_FAIL;
        goto Error;
    }

    Error:

    return hr;
}


//
//
//
static HRESULT ParseGetBearerServiceOptions(LPCSTR szRsp, void*& pBlob, UINT& cbBlob)
{
    FUNCTION_TRACE(ParseGetBearerServiceOptions);
    UINT nValue;
    UINT i;
    RILBEARERSVCINFO* prbsi = NULL;
    HRESULT hr = S_OK;

    pBlob = NULL;
    cbBlob = 0;

    prbsi = (RILBEARERSVCINFO*)AllocBlob(sizeof(RILBEARERSVCINFO));
    if (!prbsi)
    {
        hr = E_OUTOFMEMORY;
        goto Error;
    }
    memset(prbsi, 0x00, sizeof(RILBEARERSVCINFO));
    prbsi->cbSize = sizeof(RILBEARERSVCINFO);

    // Parse "<prefix>+CBST: <speed>"
    if (!ParseRspPrefix(szRsp, szRsp)                  ||
        !MatchStringBeginning(szRsp, "+CBST: ", szRsp) ||
        !ParseUInt(szRsp, TRUE, nValue, szRsp))
    {
        hr = E_FAIL;
        goto Error;
    }
    for (i = 0; i < NUM_CONNSPEEDS; i++)
    {
        if (nValue == g_rgdwConnSpeeds[i])
        {
            prbsi->dwSpeed = i;
            break;
        }
    }
    if (NUM_CONNSPEEDS == i)
    {
        // We couldn't match the response with anything
        prbsi->dwSpeed = RIL_SPEED_UNKNOWN;
    }
    prbsi->dwParams |= RIL_PARAM_BSI_SPEED;

    // Parse ",<svc_name>"
    if (!MatchStringBeginning(szRsp, ",", szRsp) ||
        !ParseUInt(szRsp, TRUE, nValue, szRsp))
    {
        hr = E_FAIL;
        goto Error;
    }
    for (i = 0; i < NUM_BEARERSVCNAMES; i++)
    {
        if (nValue == g_rgdwBearerSvcNames[i])
        {
            prbsi->dwServiceName = i;
            break;
        }
    }
    if (NUM_BEARERSVCNAMES == i)
    {
        // We couldn't match the response with anything
        prbsi->dwServiceName = RIL_BSVCNAME_UNKNOWN;
    }
    prbsi->dwParams |= RIL_PARAM_BSI_SERVICENAME;

    // Parse ",<conn_element><postfix>"
    if (!MatchStringBeginning(szRsp, ",", szRsp) ||
        !ParseUInt(szRsp, TRUE, nValue, szRsp)   ||
        !ParseRspPostfix(szRsp, szRsp))
    {
        hr = E_FAIL;
        goto Error;
    }
    for (i = 0; i < NUM_BEARERSVCCONNELEMS; i++)
    {
        if (nValue == g_rgdwBearerSvcConnElems[i])
        {
            prbsi->dwConnectionElement = i;
            break;
        }
    }
    if (NUM_BEARERSVCCONNELEMS == i)
    {
        // We couldn't match the response with anything
        prbsi->dwConnectionElement = RIL_BSVCCE_UNKNOWN;
    }
    prbsi->dwParams |= RIL_PARAM_BSI_CONNECTIONELEMENT;

    pBlob = (void*)prbsi;
    cbBlob = sizeof(RILBEARERSVCINFO);

    Error:
    if (FAILED(hr))
    {
        FreeBlob(prbsi);
    }
    return hr;
}


//
//
//
HRESULT RILDrv_GetBearerServiceOptions(DWORD dwParam)
{
    FUNCTION_TRACE(RILDrv_GetBearerServiceOptions);
    HRESULT hr = S_OK;
    CRilInstanceHandle* pHandle = ExtractHandle(dwParam);
    if (!pHandle)
    {
        hr = E_FAIL;
        goto Error;
    }

    if (!QueueCmd(pHandle, "AT+CBST?\r", CMDOPT_NONE, APIID_GETBEARERSERVICEOPTIONS, ParseGetBearerServiceOptions,
                  NULL, hr))
    {
        hr = E_FAIL;
        goto Error;
    }

    Error:
    return hr;
}


//
//
//
HRESULT RILDrv_SetBearerServiceOptions(DWORD dwParam, const RILBEARERSVCINFO* lpBearerServiceInfo)
{
    FUNCTION_TRACE(RILDrv_SetBearerServiceOptions);
    char szCmd[MAX_PATH];
    LPSTR szWalk = szCmd;
    HRESULT hr = S_OK;
    CRilInstanceHandle* pHandle = ExtractHandle(dwParam);
    if (!pHandle || !lpBearerServiceInfo)
    {
        hr = E_FAIL;
        goto Error;
    }

    // Add "AT+CBST="
    (void)strncpyz(szWalk, "AT+CBST=", MAX_PATH - (szWalk - szCmd));
    szWalk = strchr(szWalk, '\0');  // NO_TYPO: 27
    DEBUGCHK(NULL != szWalk);

    // Add "<speed>"
    if (lpBearerServiceInfo->dwParams & RIL_PARAM_BSI_SPEED)
    {
        DEBUGCHK(RIL_SPEED_64000_MULTIMEDIA >= lpBearerServiceInfo->dwSpeed);

        if ( RIL_SPEED_UNKNOWN == lpBearerServiceInfo->dwSpeed ||
             lpBearerServiceInfo->dwSpeed > RIL_SPEED_64000_TRANSP )
        {
            hr = E_INVALIDARG;
            goto Error;
        }

        (void)_snprintfz(szWalk, MAX_PATH - (szWalk - szCmd), "%u", g_rgdwConnSpeeds[lpBearerServiceInfo->dwSpeed]);
        szWalk = strchr(szWalk, '\0');  // NO_TYPO: 27
        DEBUGCHK(NULL != szWalk);
    }

    // Add ","
    (void)strncpyz(szWalk, ",", MAX_PATH - (szWalk - szCmd));
    szWalk = strchr(szWalk, '\0');  // NO_TYPO: 27
    DEBUGCHK(NULL != szWalk);

    // Add "<svc_name>"
    if (lpBearerServiceInfo->dwParams & RIL_PARAM_BSI_SERVICENAME)
    {

⌨️ 快捷键说明

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