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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? msg.cpp

?? ril source code for Windows CE
?? CPP
?? 第 1 頁(yè) / 共 3 頁(yè)
字號(hào):
//
// Copyright (c) Microsoft Corporation.  All rights reserved.
//
//
// Use of this sample source code is subject to the terms of the Microsoft
// license agreement under which you licensed this sample source code. If
// you did not accept the terms of the license agreement, you are not
// authorized to use this sample source code. For the terms of the license,
// please see the license agreement between you and Microsoft or, if applicable,
// see the LICENSE.RTF on your install media or the root of your tools installation.
// THE SAMPLE SOURCE CODE IS PROVIDED "AS IS", WITH NO WARRANTIES.
//
/*++
THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
PARTICULAR PURPOSE.

Module Name:

msg.cpp

Abstract:


Notes:


--*/


#include "precomp.h"
#undef assert
#include "Safeint.hxx"


//
// Broadcast message languages
//
static const BYTE g_rgbBroadcastLangs[] =
{
    15,         // RIL_DCSLANG_UNKNOWN
    0,          // RIL_DCSLANG_GERMAN
    1,          // RIL_DCSLANG_ENGLISH
    2,          // RIL_DCSLANG_ITALIAN
    3,          // RIL_DCSLANG_FRENSH
    4,          // RIL_DCSLANG_SPANISH
    5,          // RIL_DCSLANG_DUTCH
    6,          // RIL_DCSLANG_SWEDISH
    7,          // RIL_DCSLANG_DANISH
    8,          // RIL_DCSLANG_PORTUGUESE
    9,          // RIL_DCSLANG_FINNISH
    10,         // RIL_DCSLANG_NORWEGIAN
    11,         // RIL_DCSLANG_GREEK
    12,         // RIL_DCSLANG_TURKISH
    13,         // RIL_DCSLANG_HUNGARIAN
    14,         // RIL_DCSLANG_POLISH
    32,         // RIL_DCSLANG_CZECH
    33,         // RIL_DCSLANG_HEBREW
    34,         // RIL_DCSLANG_ARABIC
    35,         // RIL_DCSLANG_RUSSIAN
    36,         // RIL_DCSLANG_ICELANDIC
};
#define NUM_LANGUAGES   (sizeof(g_rgbBroadcastLangs) / sizeof(BYTE))


//
// Message storage locations
//
static const LPCSTR g_rgszMsgLocations[] =
{
    "",             // RIL_MSGLOC_UNKNOWN
    "BM",           // RIL_MSGLOC_BROADCAST
    "SM",           // RIL_MSGLOC_SIM
    "SR"            // RIL_MSGLOC_STATUSREPORT
};
#define NUM_MSGLOCS     (sizeof(g_rgszMsgLocations) / sizeof(LPCSTR))


//
// Message status values
//
static const DWORD g_rgdwMsgStats[] =
{
    RIL_MSGSTATUS_RECUNREAD,    // 0
    RIL_MSGSTATUS_RECREAD,      // 1
    RIL_MSGSTATUS_STOUNSENT,    // 2
    RIL_MSGSTATUS_STOSENT,      // 3
};
#define NUM_MSGSTATS    (sizeof(g_rgdwMsgStats) / sizeof(DWORD))


//
// Appends specified GSM broadcast DCS value value to the generated DCS range
//
static void AppendLangString(const LPCSTR szAppend, LPSTR& szWalk, const UINT cbOut, UINT& rcbUsed)
{
    FUNCTION_TRACE(AppendLangString);
    UINT cbAppend = strlen(szAppend);

    if ((1 < rcbUsed) && (rcbUsed + 1 <= cbOut))  // Need for and room for ','
    {
        *szWalk = ',';  // Overwrite '\0'
        szWalk++;
        *szWalk = '\0';  // Add '\0' back
        rcbUsed++;  // Caller has already counted the '\0', so just count the ',' here
    }

    if (rcbUsed + cbAppend <= cbOut)
    {
        strncpyz(szWalk, szAppend, cbOut - rcbUsed);
        szWalk += cbAppend;
        rcbUsed += cbAppend;
    }
    else
    {
        DEBUGCHK(FALSE);
    }
}


//
// Generates a GSM broadcast DCSs range string corresponding to the specified language mask
//
static void MakeBroadcastLangRange(const DWORD dwLanguages, const LPSTR szOut, const UINT cbOut)
{
    FUNCTION_TRACE(MakeBroadcastLangRange);
    UINT i;
    LPSTR szWalk = szOut;
    UINT cbUsed = 0;
    char szNumber[4];

    *szWalk = '\0';

    // The empty string is sufficient for RIL_DCSLANG_ALL.

    if (RIL_DCSLANG_ALL != dwLanguages)
    {
        cbUsed = 1;  // Account for the '\0'

        // Iterate through all bits of the mask to see which languages to add
        for (i = 0; (i < sizeof(DWORD)*8) && (i < NUM_LANGUAGES); i++)
        {
            if ((dwLanguages >> i) & 0x01)
            {
                StringCbPrintfA( szNumber, sizeof(szNumber), "%hu", g_rgbBroadcastLangs[i] );
                DEBUGCHK('\0' == szNumber[1] || '\0' == szNumber[2]);
                AppendLangString(szNumber, szWalk, cbOut, cbUsed);
            }
        }
    }
}


static void MakeBroadcastMsgIDs(const RILRANGE rgrrRange[], DWORD dwNumRanges, __out_bcount( cbOut ) const LPSTR szOut, const UINT cbOut)
{
    LPSTR szWalk = szOut;
    LPCSTR szEnd = szOut + cbOut;
    DWORD cbRange = 0;
    char szRange[64];
    char c_szRangeFmt[] = ",%u-%u";
    char c_szSingleFmt[] = ",%u";
    LPCSTR szRangeFmt = c_szRangeFmt + 1;
    LPCSTR szSingleFmt = c_szSingleFmt + 1;

    for (DWORD dwCurrentRange = 0; dwCurrentRange < dwNumRanges; dwCurrentRange++)
    {
        if (rgrrRange[dwCurrentRange].dwMinValue == rgrrRange[dwCurrentRange].dwMaxValue)
        {
            cbRange = _snprintfz(szRange, 64, szSingleFmt, rgrrRange[dwCurrentRange].dwMinValue);
        }
        else
        {
            cbRange = _snprintfz(szRange, 64, szRangeFmt, rgrrRange[dwCurrentRange].dwMinValue, rgrrRange[dwCurrentRange].dwMaxValue);
        }

        if (szWalk + cbRange < szEnd)
        {
            StringCchCopyExA( szWalk, szEnd - szWalk, szRange, &szWalk, NULL, STRSAFE_IGNORE_NULLS );
        }
        else
        {
            break;
        }

        szRangeFmt = c_szRangeFmt;
        szSingleFmt = c_szSingleFmt;
    }

    *szWalk = '\0';
}

//
// Set a flag in the language mask correponding to the
//    specified GSM broadcast DCS value
//
static BOOL AppendLanguage(const UINT nValue, DWORD& rdwLanguages)
{
    FUNCTION_TRACE(AppendLanguage);
    UINT i;
    BOOL fRet = FALSE;

    for (i = 0 ; i < NUM_LANGUAGES; i++)
    {
        if (nValue == g_rgbBroadcastLangs[i])
        {
            DEBUGCHK(i < 32);
            rdwLanguages |= (0x01 << i);
            break;
        }
    }
    return fRet;
}


//
// Parses a range of GSM broadcast DCSs into a language mask
//
static BOOL ParseBroadcastLangRange(LPCSTR szRange, DWORD& rdwLanguages)
{
    FUNCTION_TRACE(ParseBroadcastLangRange);
    UINT nValue1;
    UINT nValue2;
    UINT i;
    BOOL fRet = FALSE;

    if (*szRange)
    {
        // Start off with none...
        rdwLanguages = 0;

        while (1)
        {
            if (!ParseUInt(szRange, TRUE, nValue1, szRange))
            {
                goto Error;
            }
            if (MatchStringBeginning(szRange, "-", szRange) &&
                ParseUInt(szRange, TRUE, nValue2, szRange))
            {
                // This is a mini-range
                DEBUGCHK(nValue1 < nValue2);
                for (i = nValue1; i <= nValue2; i++)
                {
                    (void)AppendLanguage(i, rdwLanguages);
                }
            }
            else
            {
                (void)AppendLanguage(nValue1, rdwLanguages);
            }

            // If there is no trailing comma, we're done
            if (!MatchStringBeginning(szRange, ",", szRange))
            {
                break;
            }
        }
    }
    else
    {
        // An empty string implies all languages.
        rdwLanguages = RIL_DCSLANG_ALL;
    }
    fRet = TRUE;

    Error:
    return fRet;
}

BOOL ParseGetLocation(const LPCSTR szRspOrig, UINT& rnLocation, LPCSTR& rszPointer)
{
    FUNCTION_TRACE(ParseGetLocation);
    char szLocation[MAX_PATH];
    UINT nLocation;

    LPCSTR szRsp = szRspOrig;

    // Parse "<xxx_location>"
    if (!ParseString(szRsp, szLocation, MAX_PATH, szRsp))
    {
        return FALSE;
    }

    for (nLocation = NUM_MSGLOCS-1; nLocation > 0; nLocation--)
    {
        if (!strcmp(szLocation, g_rgszMsgLocations[nLocation]))
        {
            break;
        }
    }

    rnLocation = nLocation;
    rszPointer = szRsp;
    return TRUE;
}

static BOOL ParseGetLocationAmount(LPCSTR szRsp, LPCSTR& rszPointer, PUINT pLocation, PUINT pUsed, PUINT pTotal)
{
    FUNCTION_TRACE(ParseGetLocationAmount);
    UINT nLocation;
    UINT nUsed;
    UINT nTotal;

    // Go past initial ',' if it's there
    if (*szRsp==',')
    {
        szRsp++;
    }

    // Parse "<xxx_location>"
    if (!ParseGetLocation(szRsp, nLocation, szRsp))
    {
        return FALSE;
    }

    // Parse ",<xxx_used>"
    if (!MatchStringBeginning(szRsp, ",", szRsp) ||
        !ParseUInt(szRsp, TRUE, nUsed, szRsp))
    {
        return FALSE;
    }

    // Parse ",<xxx_total>"
    if (!MatchStringBeginning(szRsp, ",", szRsp) ||
        !ParseUInt(szRsp, TRUE, nTotal, szRsp))
    {
        return FALSE;
    }

    *pLocation = nLocation;
    *pUsed = nUsed;
    *pTotal = nTotal;
    rszPointer = szRsp;
    return TRUE;
}

//
//
//
static HRESULT ParseGetMsgServiceOptionsRsp(LPCSTR szRsp, void*& pBlob, UINT& cbBlob)
{
    FUNCTION_TRACE(ParseGetMsgServiceOptionsRsp);
    HRESULT hr = E_FAIL;
    RILMSGSERVICEINFO* prmsi = NULL;
    UINT nValue;
    UINT nLocation;
    UINT nUsed;
    UINT nTotal;

    pBlob = NULL;
    cbBlob = 0;

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

    // Parse "<prefix>+CSMS: <svc_type>"
    if (!ParseRspPrefix(szRsp, szRsp)                  ||
        !MatchStringBeginning(szRsp, "+CSMS: ", szRsp) ||
        !ParseUInt(szRsp, TRUE, nValue, szRsp))
    {
        goto Error;
    }

    if (!nValue)
    {
        prmsi->dwService = RIL_MSGSVCTYPE_PHASE2;
    }
    else if (1 == nValue)
    {
        prmsi->dwService = RIL_MSGSVCTYPE_PHASE2PLUS;
    }
    else
    {
        prmsi->dwService = RIL_MSGSVCTYPE_UNKNOWN;
    }
    prmsi->dwParams |= RIL_PARAM_MSI_SERVICE;

    // Parse ",<incoming>"
    prmsi->dwMsgClasses = RIL_MSGCLASS_NONE;
    if (!MatchStringBeginning(szRsp, ",", szRsp) ||
        !ParseUIntAndVerifyAbove(szRsp, TRUE, 2, nValue, szRsp))
    {
        goto Error;
    }

    if (1 == nValue)
    {
        prmsi->dwMsgClasses |= RIL_MSGCLASS_INCOMING;
    }

    // Parse ",<outgoing>"
    if (!MatchStringBeginning(szRsp, ",", szRsp) ||
        !ParseUIntAndVerifyAbove(szRsp, TRUE, 2, nValue, szRsp))
    {
        goto Error;
    }

    if (1 == nValue)
    {
        prmsi->dwMsgClasses |= RIL_MSGCLASS_OUTGOING;
    }

    // Parse ",<broadcast><postfix>"
    if (!MatchStringBeginning(szRsp, ",", szRsp) ||
        !ParseUIntAndVerifyAbove(szRsp, TRUE, 2, nValue, szRsp)   ||
        !ParseRspPostfix(szRsp, szRsp))
    {
        goto Error;
    }

    if (1 == nValue)
    {
        prmsi->dwMsgClasses |= RIL_MSGCLASS_BROADCAST;
    }
    prmsi->dwParams |= RIL_PARAM_MSI_MSGCLASSES;

    // Parse "<prefix>+CPMS: "
    if (!ParseRspPrefix(szRsp, szRsp)                  ||
        !MatchStringBeginning(szRsp, "+CPMS: ", szRsp))
    {
        goto Error;
    }

    // Parse Read fields
    if (!ParseGetLocationAmount(szRsp, szRsp, &nLocation, &nUsed, &nTotal))
    {
        goto Error;
    }

    prmsi->dwReadLocation = nLocation;
    prmsi->dwReadUsed = nUsed;
    prmsi->dwReadTotal = nTotal;
    prmsi->dwParams |= RIL_PARAM_MSI_READLOCATION | RIL_PARAM_MSI_READUSED | RIL_PARAM_MSI_READTOTAL;

    // Note: If write or store fields are missing, we use the values from the last set of fields.
    // Therefore, we don't check the return value from the following two ParseGetLocationAmount calls.
    // This works around issues with some radios where some versions of the radio firmware don't report
    // all three sets of fields.

    // Parse Write fields
    ParseGetLocationAmount(szRsp, szRsp, &nLocation, &nUsed, &nTotal);
    prmsi->dwWriteLocation = nLocation;
    prmsi->dwWriteUsed = nUsed;
    prmsi->dwWriteTotal = nTotal;
    prmsi->dwParams |= RIL_PARAM_MSI_WRITELOCATION | RIL_PARAM_MSI_WRITEUSED | RIL_PARAM_MSI_WRITETOTAL;

    // Parse Store fields
    ParseGetLocationAmount(szRsp, szRsp, &nLocation, &nUsed, &nTotal);
    prmsi->dwStoreLocation = nLocation;
    prmsi->dwStoreUsed = nUsed;
    prmsi->dwStoreTotal = nTotal;
    prmsi->dwParams |= RIL_PARAM_MSI_STORELOCATION | RIL_PARAM_MSI_STOREUSED | RIL_PARAM_MSI_STORETOTAL;

    ParseRspPostfix(szRsp, szRsp);
    pBlob = (void*)prmsi;
    cbBlob = sizeof(RILMSGSERVICEINFO);

    hr = S_OK;

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

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

    if (!QueueCmd(pHandle, "AT+CSMS?;+CPMS?\r", CMDOPT_NONE, APIID_GETMSGSERVICEOPTIONS,
                  ParseGetMsgServiceOptionsRsp, NULL, hr))
    {
        hr = E_FAIL;
        goto Error;
    }

    Error:
    return hr;
}


//
//
//
HRESULT RILDrv_SetMsgServiceOptions(DWORD dwParam, const RILMSGSERVICEINFO* lpMsgServiceInfo)
{
    FUNCTION_TRACE(RILDrv_SetMsgServiceOptions);
    CNotificationData* pnd = NULL;
    char szCmd[MAX_PATH];
    LPSTR szWalk = szCmd;
    UINT nValue=0;
    RILMSGSTORAGEINFO rmsi; memset(&rmsi,0,sizeof(rmsi)); // zero struct
    HRESULT hr = S_OK;

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩一区二区三区视频| 国产日韩视频一区二区三区| 亚洲第一狼人社区| 欧美欧美欧美欧美首页| 天天色综合天天| 欧美xxxx在线观看| 高清久久久久久| 亚洲欧美怡红院| 欧美性生交片4| 水蜜桃久久夜色精品一区的特点| 56国语精品自产拍在线观看| 美国三级日本三级久久99| 日韩精品专区在线影院观看| 国产精品综合二区| 久久久久国产精品麻豆ai换脸| 国产宾馆实践打屁股91| 国产精品成人在线观看| 91老师片黄在线观看| 婷婷激情综合网| 久久色.com| 91玉足脚交白嫩脚丫在线播放| 亚洲成人动漫精品| 久久久久久久久久久久电影| 99精品一区二区| 午夜精品久久久久久久99水蜜桃 | 免费成人在线观看视频| 久久人人97超碰com| 91黄色免费网站| 久久99精品一区二区三区| 中文字幕在线不卡一区| 制服丝袜亚洲色图| 大尺度一区二区| 日日摸夜夜添夜夜添亚洲女人| 久久久精品国产99久久精品芒果| 91在线云播放| 久久精品国产免费| 亚洲伦在线观看| 欧美mv日韩mv亚洲| 91在线高清观看| 国产在线视频一区二区三区| 亚洲一区二区av电影| 国产情人综合久久777777| 欧美性色综合网| av网站免费线看精品| 蜜臀a∨国产成人精品| 成人免费在线观看入口| 久久综合丝袜日本网| 欧美日本国产一区| 91在线观看成人| 成人丝袜视频网| 韩国av一区二区三区在线观看| 亚洲在线一区二区三区| 国产精品福利一区二区三区| 精品福利一区二区三区 | 在线日韩国产精品| 国产不卡视频在线播放| 激情伊人五月天久久综合| 亚洲成av人片在线观看| 亚洲日穴在线视频| 久久精品一区二区三区四区| 日韩一级高清毛片| 欧美日韩亚洲综合一区| 91免费视频网| 99久久精品免费观看| 成人综合在线观看| 国产一区二区三区av电影| 美女一区二区视频| 免费观看成人鲁鲁鲁鲁鲁视频| 亚洲国产日韩a在线播放性色| 亚洲欧美在线高清| 自拍偷拍欧美激情| 1024精品合集| 一区二区中文字幕在线| 国产精品三级av在线播放| 久久久久国产精品麻豆| 久久亚洲影视婷婷| 精品国产免费一区二区三区香蕉| 69堂精品视频| 91精品国产乱| 欧美sm极限捆绑bd| 国产视频一区在线播放| 欧美激情一区二区三区不卡| 欧美国产成人在线| 中文字幕一区二区在线观看| 国产精品麻豆久久久| 国产精品全国免费观看高清| 中文字幕av一区二区三区| 国产精品视频免费| 国产精品不卡在线| 依依成人精品视频| 午夜影院久久久| 六月丁香婷婷色狠狠久久| 久久99国产精品尤物| 国产精品综合在线视频| 成人app下载| 日本精品视频一区二区三区| 欧美日韩一区 二区 三区 久久精品| 欧美老人xxxx18| 日韩美女天天操| 亚洲欧洲国产日韩| 亚洲国产裸拍裸体视频在线观看乱了 | 亚瑟在线精品视频| 久久国产人妖系列| 夫妻av一区二区| 日本高清不卡在线观看| 91精品久久久久久久99蜜桃| 精品成人佐山爱一区二区| 欧美国产日韩精品免费观看| 一区二区三区在线免费观看| 丝袜美腿亚洲一区二区图片| 国产综合色精品一区二区三区| 不卡av在线免费观看| 欧美视频在线观看一区二区| 日韩欧美国产三级电影视频| 国产精品久久久久久久裸模 | 亚洲国产精品久久久久秋霞影院 | 精品久久国产老人久久综合| 中文字幕不卡在线播放| 亚洲超碰97人人做人人爱| 国产综合色产在线精品| 日本乱码高清不卡字幕| 久久影院电视剧免费观看| 一区二区三区av电影| 国产一区在线不卡| 欧洲中文字幕精品| 国产欧美一区二区精品性色 | 国产精品久久久久久久浪潮网站| 亚洲成人久久影院| 99久久99久久精品免费观看 | 国产欧美一区视频| 丝袜脚交一区二区| 色综合久久88色综合天天6| 欧美videofree性高清杂交| 亚洲精品欧美激情| 国产不卡高清在线观看视频| 欧美一级国产精品| 一区二区久久久| 成人小视频在线| 欧美videos中文字幕| 亚洲高清视频中文字幕| 成人性色生活片| 久久综合狠狠综合久久综合88 | 色94色欧美sute亚洲线路一久| 亚洲精品一区二区三区福利| 亚洲一区二区中文在线| 粉嫩av亚洲一区二区图片| 日韩一区二区电影| 亚洲国产视频一区| 色94色欧美sute亚洲线路一ni| 久久精品视频一区二区三区| 另类专区欧美蜜桃臀第一页| 欧美高清精品3d| 一区二区在线观看免费视频播放| 国产不卡视频在线播放| 国产亚洲视频系列| 免费在线观看一区| 欧美精品aⅴ在线视频| 亚洲黄色尤物视频| 91在线视频免费观看| 国产女人18水真多18精品一级做| 久久草av在线| 日韩欧美国产综合| 久久综合综合久久综合| 日韩午夜三级在线| 美女性感视频久久| 日韩欧美在线1卡| 日韩高清不卡在线| 制服丝袜亚洲网站| 久久激五月天综合精品| 日韩精品一区二区三区中文精品| 人人超碰91尤物精品国产| 欧美高清视频不卡网| 老司机一区二区| 久久综合九色综合97婷婷女人| 国产乱子轮精品视频| 久久久久久久综合日本| 国产东北露脸精品视频| 中文字幕乱码亚洲精品一区| 成人免费看黄yyy456| 亚洲欧美成人一区二区三区| 色综合久久综合网欧美综合网| 亚洲欧美日韩国产一区二区三区| 91老师片黄在线观看| 天天综合日日夜夜精品| 日韩欧美一级特黄在线播放| 韩国中文字幕2020精品| 国产欧美日韩综合精品一区二区| 风间由美一区二区三区在线观看| 国产精品福利一区| 在线观看国产一区二区| 亚洲国产精品影院| 日韩精品一区二区三区在线观看| 国产精品一级二级三级| 1000部国产精品成人观看| 欧美日韩美女一区二区| 黄页网站大全一区二区| 一区视频在线播放| 欧美另类z0zxhd电影| 丁香六月综合激情| 夜夜爽夜夜爽精品视频|