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

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

?? util.h

?? ril source code for Windows CE
?? H
?? 第 1 頁 / 共 3 頁
字號(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:

util.h

Abstract:


Notes:


--*/

#pragma once

#include "rildebug.h"
#include "FunctionTrace.h"

//
// Character mapping structure used for binary search
//
struct CHARMAP {
    char ch;
    WCHAR wch;
};

//
// Encoding types
//
enum ENCODING_TYPE {
    ENCODING_GSMDEFAULT = 0,// GSM Default alphabet
    ENCODING_GSMDEFAULT_HEX, // GSM Default alphabet, HEX encoded
    ENCODING_GSMDEFAULT_UNPACKED, // GSM Default alphabet, 7 bit packed see GSM 07.07 5.5
    ENCODING_GSMDEFAULT_HEX_UNPACKED, // GSM Default alphabet, HEX encoded, not 7 bit packed see GSM 07.07 5.5
    ENCODING_GSMDEFAULT_UNICODE, // Unicode alphabet, HEX encoded
    ENCODING_GSMDEFAULT_UTF8, // Unicode alphabet, UTF-8 encoded
    // Others to be added later
};

//
// Function declarations
//
BOOL UnicodeCharToGSM(const WCHAR wch, char *pchRet);
BOOL GSMCharToUnicode(const char ch, WCHAR *pwchRet);
char SemiByteToChar(const BYTE bByte, const BOOL fHigh);
BYTE SemiByteCharsToByte(const char chHigh, const char chLow);
BOOL GSMHexToGSM(const LPCSTR sIn, const UINT cbIn, __out_bcount( cbOut ) const LPSTR sOut, const UINT cbOut, UINT& rcbUsed);
BOOL GSMToGSMHex(const LPCSTR sIn, const UINT cbIn, __out_bcount( cbOut ) const LPSTR sOut, const UINT cbOut, UINT& rcbUsed);
BOOL ConvertFromUnicode(const ENCODING_TYPE enc, const LPCWSTR wsIn, const UINT cchIn, __out_bcount( cbOut ) const LPSTR sOut, const UINT cbOut,
                        UINT& rcbUsed);
BOOL ConvertToUnicode(const ENCODING_TYPE enc, const LPCSTR sIn, const UINT cbIn, __out_ecount( cchOut ) const LPWSTR wsOut, const UINT cchOut,
                      UINT& rcchUsed);
BOOL ConvertTECharSetToUnicode(const LPCSTR sIn, const UINT cchIn,
                               const LPWSTR wsOut, const UINT cchOut,
                               UINT * pcchUsed);
BOOL ConvertUnicodeToTECharSet(const LPWSTR wsIn, const UINT cchIn,
                               const LPSTR sOut, const UINT cchOut,
                               UINT * pcchUsed);
HRESULT RILAddressToString(const RILADDRESS& rraAddress, __out_bcount( cbOut ) const LPSTR szOut, const UINT cbOut, BYTE& rbTypeOfAddress, ENCODING_TYPE etEncoding = ENCODING_GSMDEFAULT_HEX);
BOOL StringToRILAddress(const LPCSTR szAddress, const BYTE bTypeOfAddress, RILADDRESS& rraAddress, ENCODING_TYPE etEncoding = ENCODING_GSMDEFAULT_HEX);
HRESULT RILSubAddressToString(const RILSUBADDRESS& rrsaSubAddress, __out_ecount( cchOut ) const LPSTR szOut, const UINT cchOut, BYTE& rbType);
BOOL StringToRILSubAddress(const LPCSTR szSubAddress, const BYTE bType, RILSUBADDRESS& rrsaSubAddress);
HRESULT DetermineSimResponseError(DWORD dwSW1, DWORD dwSW2);
BOOL IsElementarySimFile(DWORD dwFileID);
BOOL ComposeCmdWithByteArray(const LPCSTR szPrefix, const BYTE* const pbBytes, const UINT cbBytes,
                             const LPCSTR szPostfix, LPSTR& rszCmd);
char * BeginLineSpecificCommand( __out_ecount( cchSize ) char *szCmdDst, UINT cchSize, DWORD dwAddressId);
BOOL AllocateOrReallocateStorage(BYTE** const prgrData, const size_t stSize, const UINT nUsed, UINT* const pnAllocated,
                                 const UINT nGrowSize);
void UpdateSIMState(DWORD dwSimState);
HRESULT StringFilterW( __out_ecount( cchDest ) LPWSTR wszDest, size_t cchDest, const WCHAR *wszSrc, const WCHAR *wszFilter);

#ifdef GPRS_CONTEXT_CACHING
void UpdateGPRSContextCommandCache( LPCSTR szCmd );
void ClearGPRSContextCommandCache();
bool IsGPRSContextCommandCached( LPCSTR szCmd );
#endif GPRS_CONTEXT_CACHING
#ifdef RIL_RADIO_RESILIENCE
void SavePINSecure(LPCSTR szNewPIN);
BOOL FetchPINSecure(LPSTR szPinBuffer, DWORD cbBufferSIze);
#endif // RIL_RADIO_RESILIENCE
void IndicateCallActivityToAudioSubsystem(BOOL fActive, BOOL fCheckCallList);
//
// Class declarations
//

// Growable character buffer
class CBuffer
{
public:
            CBuffer();
            virtual ~CBuffer();

    BOOL    Append(const LPCSTR szString, const UINT cbString);
    LPSTR   GetData() const     { return m_szData; };
    UINT    GetLength() const   { return m_cbLength; };
    LPSTR   GiveUpData();
    void    InheritData(CBuffer* pSrcBuffer);

protected:
    LPSTR   m_szData;
    UINT    m_cbLength;
    UINT    m_cbAlloc;
};


// Doubly-linked list element
class CListElem
{
public:
                CListElem() : m_pNext(NULL), m_pPrev(NULL) {};
                ~CListElem() {};

    CListElem*  GetNext() const         { return m_pNext; };
    CListElem*  GetPrev() const         { return m_pPrev; };

    void        SetNext(CListElem* p)   { m_pNext = p; };
    void        SetPrev(CListElem* p)   { m_pPrev = p; };

private:
    CListElem*  m_pNext;
    CListElem*  m_pPrev;
};


// Callback used when entering exclusive use mode
typedef void (*PFN_SHRDUSE_ACTION)(DWORD dwParam);


// Shared resource with readers/writers synchronization
class CSharedResource
{
public:
            CSharedResource();
            ~CSharedResource();

    BOOL    Init(const HANDLE hCancelEvent);
    BOOL    EnterSharedUse();
    BOOL    ExitSharedUse();
    BOOL    EnterExclusiveUse(PFN_SHRDUSE_ACTION pfnAction, const DWORD dwParam) const;
    BOOL    ExitExclusiveUse() const;

private:
    BOOL                m_fInited;
    CRITICAL_SECTION    m_cs;
    DWORD               m_dwSharedUsers;
    HANDLE              m_hSharedUseSph;
    HANDLE              m_hExclusiveUseSph;
    HANDLE              m_hCancelEvent;
};


// Function to be passed to CQueue::Enum().
//    This function should return TRUE for enumeration to stop.
typedef BOOL (*PFN_QUEUE_ENUM)(void* pItem, DWORD dwData);

// Function to be passed to CQueue::ConditionalGet().
//    This function should return TRUE for for the item to be removed from the queue.
typedef BOOL (*PFN_QUEUE_TEST)(void* pItem, DWORD dwData);

// Function to be used to destroy items in the queue
// when the queue is destroyed.
typedef void (*PFN_QUEUE_ITEMDTOR)(void *pItem);

template <class Type, UINT Size>
class CBoundedQueue
{
private:
    CEvent              m_eventSpace;
    CUniquelyNamedEvent m_eventItems;
    Type *              m_rgpItems[Size];
    UINT                m_nUsed;
    PFN_QUEUE_ITEMDTOR  m_pfnItemDtor;
    CRITICAL_SECTION    m_cs;

public:
            CBoundedQueue(PFN_QUEUE_ITEMDTOR pfnItemDtor = NULL);
    virtual ~CBoundedQueue();

    BOOL    Ready() const { return m_eventSpace.Ready() && m_eventItems.Ready(); }
    BOOL    Init();
    BOOL    Put(Type* const pItem);
    BOOL    Get(Type** ppItem);
    BOOL    Peek(Type** ppItem);
    HRESULT ConditionalGet(const PFN_QUEUE_TEST pfnTest, const DWORD dwData, Type** rpItem);

    const
    TCHAR * GetItemsEventName() { return m_eventItems.GetName(); }
    HANDLE  GetItemsEvent() { return m_eventItems.GetHandle(); }
    HANDLE  GetSpaceEvent() { return m_eventSpace.GetHandle(); }
};

template <class Type, UINT Size>
CBoundedQueue<Type, Size>::CBoundedQueue(PFN_QUEUE_ITEMDTOR pfnItemDtor)
:   m_nUsed(0),
    m_pfnItemDtor(pfnItemDtor)
{
    InitializeCriticalSection(&m_cs);

    for (UINT i = 0; i < Size; i++)
        m_rgpItems[i] = NULL;
}

template <class Type, UINT Size>
CBoundedQueue<Type, Size>::~CBoundedQueue()
{
    // In case someone is still waiting on
    // this queue, try to avoid conflicts...
    if (m_eventItems.Ready())
        m_eventItems.Reset();   // no items to dequeue
    if (m_eventSpace.Ready())
        m_eventSpace.Reset();   // no space for enqueue

    if (m_pfnItemDtor)
    {
        for (UINT i = 0; i < m_nUsed; i++)
        {
            m_pfnItemDtor(m_rgpItems[i]);
            m_rgpItems[i] = NULL;
        }
    }

    m_nUsed = 0;

    DeleteCriticalSection(&m_cs);
}

template <class Type, UINT Size>
BOOL CBoundedQueue<Type, Size>::Init()
{
    return
        m_eventSpace.Init(TRUE, TRUE) &&
        m_eventItems.Init(TRUE, FALSE, TEXT("CBoundedQueue_"));
}

template <class Type, UINT Size>
BOOL CBoundedQueue<Type, Size>::Put(Type * const pItem)
{
    ASSERT(Ready());

    SYNCBLOCK(m_cs);

    if (m_nUsed < Size)
    {
        // Put the element in our queue.
        m_rgpItems[m_nUsed++] = pItem;

        // If this filled the queue buffer,
        // then reset the space avail event.
        if (m_nUsed == Size)
            m_eventSpace.Reset();

        // There's something new in the queue,
        // so signal waiting threads.
        m_eventItems.Set();

        return TRUE;
    }
    else
    {
        return FALSE;
    }
}

template <class Type, UINT Size>
BOOL CBoundedQueue<Type, Size>::Get(Type ** ppItem)
{
    return ConditionalGet(NULL, 0, ppItem);
}

template <class Type, UINT Size>
BOOL CBoundedQueue<Type, Size>::Peek(Type ** ppItem)
{
    ASSERT(Ready());

    ASSERT(ppItem);
    if (!ppItem)
        return FALSE;

    SYNCBLOCK(m_cs);

    if (m_nUsed > 0)
    {
        // Copy the element from the queue.
        *ppItem = m_rgpItems[0];

        return TRUE;
    }
    else
    {
        return FALSE;
    }
}

template <class Type, UINT Size>
HRESULT CBoundedQueue<Type, Size>::ConditionalGet(const PFN_QUEUE_TEST pfnTest,
                                                  const DWORD dwData,
                                                  Type** ppItem)
{
    ASSERT(Ready());

    ASSERT(ppItem);
    if (!ppItem)
        return S_FALSE;

    SYNCBLOCK(m_cs);

    if (m_nUsed > 0)
    {
        // Copy the element from the queue.
        Type * pItem = m_rgpItems[0];

        // If there is a condition, make sure
        // it is satisfied.
        if (pfnTest && !pfnTest(pItem, dwData))
            return E_FAIL;

        // One less in queue now...
        m_nUsed--;

        if (m_nUsed)
        {
            // Slide remaining items over to the beginning of the buffer.
            memmove(m_rgpItems, (BYTE*)m_rgpItems + sizeof(Type*), sizeof(Type*) * m_nUsed);

            // If we just made space, then set this event.
            if (Size - 1 == m_nUsed)
                m_eventSpace.Set();
        }
        else
        {
            // The last item was copied from the queue,
            // so reset this event.
            m_eventItems.Reset();
        }

        // NULL out the space that was freed up.
        m_rgpItems[m_nUsed] = NULL;

        // Set the output parameter.
        *ppItem = pItem;

        return S_OK;
    }
    else
    {
        return S_FALSE;
    }
}

template <class Type>
class CUnboundedQueue
{
private:
    CUniquelyNamedEvent m_eventItems;
    Type **             m_rgpItems;
    DWORD               m_dwInitialSize;
    DWORD               m_dwCurrentSize;
    UINT                m_nUsed;
    PFN_QUEUE_ITEMDTOR  m_pfnItemDtor;
    CRITICAL_SECTION    m_cs;

protected:
    BOOL    GrowQueue();

public:
            CUnboundedQueue(PFN_QUEUE_ITEMDTOR pfnItemDtor = NULL);
    virtual ~CUnboundedQueue();

    BOOL    Ready() const { return m_rgpItems != NULL && m_eventItems.Ready(); }
    BOOL    Init(DWORD dwInitialSize);
    BOOL    Put(Type* const pItem);
    BOOL    Get(Type** ppItem);
    BOOL    Peek(Type** ppItem);
    HRESULT ConditionalGet(const PFN_QUEUE_TEST pfnTest, const DWORD dwData, Type** rpItem);

    const
    TCHAR * GetItemsEventName() { return m_eventItems.GetName(); }
    HANDLE  GetItemsEvent() { return m_eventItems.GetHandle(); }

    UINT    GetSize() { return m_nUsed; }
    DWORD   GetCurrentBufferSize() { return m_dwCurrentSize; }
};

template <class Type>
CUnboundedQueue<Type>::CUnboundedQueue(PFN_QUEUE_ITEMDTOR pfnItemDtor)
:   m_nUsed(0),
    m_dwInitialSize(0),
    m_dwCurrentSize(0),
    m_rgpItems(NULL),
    m_pfnItemDtor(pfnItemDtor)
{
    InitializeCriticalSection(&m_cs);
}

template <class Type>

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美性大战久久久久久久| 国产婷婷色一区二区三区四区 | 美国精品在线观看| 色综合天天综合网国产成人综合天| 欧美一区二区三区的| 久久久久久黄色| 国产专区综合网| 欧美日韩www| 成人性视频免费网站| 欧美成人激情免费网| 美女一区二区视频| 日韩一区二区电影网| 日本aⅴ免费视频一区二区三区| 欧美在线观看视频在线| 日韩写真欧美这视频| 玉米视频成人免费看| 91最新地址在线播放| 欧美精品色综合| 日本不卡不码高清免费观看| 中文字幕亚洲视频| 91亚洲精华国产精华精华液| 中文欧美字幕免费| 99久久婷婷国产综合精品电影| 久久久美女毛片| 国产成人一区二区精品非洲| 国产嫩草影院久久久久| 精品一区二区三区在线观看| 精品国内片67194| 国产精品99久久久久久久vr| 欧美韩国一区二区| 成人免费高清在线| 88在线观看91蜜桃国自产| 麻豆一区二区在线| 国产精品丝袜在线| 欧美一区二区网站| 国产盗摄视频一区二区三区| 国产精品免费aⅴ片在线观看| 欧美日韩dvd在线观看| 免费一区二区视频| 国产欧美日韩在线视频| 国产一区二区不卡老阿姨| 国产婷婷色一区二区三区在线| 国产呦萝稀缺另类资源| 亚洲丝袜自拍清纯另类| 欧美人xxxx| 日本三级亚洲精品| 亚洲一区在线观看免费观看电影高清 | 久久婷婷久久一区二区三区| 亚洲国产一区二区视频| 日韩欧美一区二区在线视频| 久草中文综合在线| 一区二区久久久久久| 成人短视频下载| 亚洲在线视频免费观看| 亚洲国产精品久久久男人的天堂| 欧美mv日韩mv| 99re66热这里只有精品3直播| 中文字幕中文字幕中文字幕亚洲无线| 欧美自拍丝袜亚洲| 国产福利视频一区二区三区| 悠悠色在线精品| 久久精品一区蜜桃臀影院| 欧美在线|欧美| 久久国产精品72免费观看| 日日夜夜精品视频免费| 日韩一区欧美小说| 91精品国产91久久综合桃花 | 91精品国产入口在线| 激情小说欧美图片| 久久国产精品99久久久久久老狼 | 美女www一区二区| 亚洲欧美一区二区视频| 欧美男女性生活在线直播观看| 懂色av一区二区三区免费观看| 日韩高清一区二区| 久久久精品免费网站| 欧美一卡2卡三卡4卡5免费| 成人aaaa免费全部观看| 久久国产精品免费| 99国产一区二区三精品乱码| 国产精品综合在线视频| 美女脱光内衣内裤视频久久网站| 26uuu另类欧美| 5566中文字幕一区二区电影| 国产91丝袜在线播放九色| 日产欧产美韩系列久久99| 亚洲欧美视频一区| 久久久久久黄色| 欧美一区二区三区在线看| 99精品久久只有精品| 国产91高潮流白浆在线麻豆| 精品中文字幕一区二区小辣椒| 一区二区三区色| 亚洲一区二区欧美日韩 | 日本亚洲电影天堂| 亚洲国产精品天堂| 亚洲黄色性网站| 亚洲激情在线播放| 中文字幕在线不卡| 亚洲成av人片| 日韩不卡一区二区| 青椒成人免费视频| 国模一区二区三区白浆| 日韩国产在线观看| 精品视频资源站| 欧美中文字幕一二三区视频| 91网上在线视频| 国产精品123| 成人丝袜视频网| 一本久久综合亚洲鲁鲁五月天| 欧美日韩一本到| 欧美大片日本大片免费观看| 日韩一区二区三区在线视频| 欧美一区二区三区思思人| 6080国产精品一区二区| 欧美精品久久久久久久多人混战| 91麻豆精品91久久久久同性| 欧美视频一区二区在线观看| 欧美日韩一区二区三区免费看| 精品视频免费在线| 欧美电影免费观看高清完整版在| 亚洲中国最大av网站| 亚洲国产视频在线| 日韩国产欧美在线视频| 国产一区二区久久| 成人深夜视频在线观看| 国内外成人在线| 色哦色哦哦色天天综合| 制服丝袜亚洲精品中文字幕| 国产丝袜美腿一区二区三区| 最新欧美精品一区二区三区| 亚洲精品免费视频| 麻豆久久一区二区| 岛国av在线一区| 精品一区在线看| 色综合天天综合| 欧美午夜一区二区三区| 91极品美女在线| 日韩色在线观看| 国产精品国产精品国产专区不片| 国产喂奶挤奶一区二区三区| 亚洲激情一二三区| 免费黄网站欧美| 色一情一伦一子一伦一区| 日韩欧美卡一卡二| 国产精品美女久久久久久久| 日韩经典一区二区| 精品无码三级在线观看视频| 久久av老司机精品网站导航| 成人高清av在线| 宅男在线国产精品| 午夜精品视频一区| 懂色av一区二区三区免费观看 | 粉嫩久久99精品久久久久久夜| 色视频欧美一区二区三区| 欧美一区二区视频观看视频| 亚洲自拍偷拍九九九| 国产盗摄视频一区二区三区| 欧美色爱综合网| 亚洲电影中文字幕在线观看| 国产综合色产在线精品| 日本道精品一区二区三区| ...av二区三区久久精品| 三级欧美韩日大片在线看| 国产一区二三区| 精品久久久久久无| 亚洲自拍欧美精品| 欧美日韩一区二区三区高清| 国产精品网站在线观看| 免费欧美高清视频| 91精品国产入口| 一区二区成人在线观看| 久久成人麻豆午夜电影| 欧美va在线播放| 日韩精品一二区| 91麻豆精品国产91久久久| 一区二区三区四区在线播放| 成人影视亚洲图片在线| 国产精品入口麻豆九色| 国产一区二区三区日韩| 亚洲宅男天堂在线观看无病毒| 国产福利91精品一区二区三区| 日韩欧美亚洲一区二区| 亚洲成人三级小说| 欧美日韩中字一区| 亚洲欧美日韩国产成人精品影院 | 日本一区二区三区久久久久久久久不| 国产精品自在欧美一区| 欧美大片日本大片免费观看| 欧美mv日韩mv| 白白色 亚洲乱淫| 国产精品天干天干在观线| 偷窥国产亚洲免费视频| 91视频在线看| 亚洲免费成人av| 欧美三级中文字| 五月天丁香久久| 国产免费成人在线视频| 国产美女视频一区| 欧美色成人综合|