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

📄 tbluetoothattributeparser.cpp

📁 series60 应用程序开发的源代码 series60 应用程序开发的源代码
💻 CPP
字号:
/**
*
* @brief Definition of TBluetoothAttributeParser
*
* Copyright (c) EMCC Software Ltd 2003
* @version 1.0
*/

// System include
#include <bt_sock.h>

// User include
#include "BluetoothDefinitions.h"
#include "BluetoothAttributeObserver.h"
#include "TBluetoothAttributeParser.h"

/**
* Constructor
*
* Set observer and flag to indicate success / failure
*
* @param aObserver an Observer that will get called iff a value service & port are found
* @param aContinueSearching flag set to indicate success / failure.
*
**/
TBluetoothAttributeParser::TBluetoothAttributeParser(MBluetoothAttributeObserver& aObserver, TBool& aContinueSearching)
: iObserver(aObserver),
  iContinueSearching(aContinueSearching)
{
    iProcessingState = EStartOfDesOne;
    iFinished = EFalse;
}

/**
* VisitAttributeValueL
*
* Called for every member of the Data Element Sequence of this attribute.
* Only interested in the RFCOMM and Port information
*
* An OS defined function
*
* @param aValue the attrubute's value
* @param aType the type of data encapsulated by aValue
**/
void TBluetoothAttributeParser::VisitAttributeValueL(CSdpAttrValue& aValue, TSdpElementType /*aType*/)
{
    switch ( iProcessingState )
    {
        case EStartOfDesOne:
        case EStartOfDesTwo:
        case EL2Cap:
        case EEndOfDesTwo:
        case EStartDesThree:
            break; // check nothing

        case ERFComm:
            CompareRFCOMM( aValue );
            break;

        case ERFCommPort:
            GetPort( aValue );
            break;

        case EEndOfDesThree:
        case EEndOfDesOne:
            break; // check nothing

        default: // unexpected output -- panic
            Panic(EBadAttributeValue);
            break;
    }

    Next();
}

/**
 * Called at the start of a list. OS Specified function
 *
 * @param aList the list your starting on
 * @return none
 */
void TBluetoothAttributeParser::StartListL(CSdpAttrValueList& /*aList*/)
{
}

/**
 * Called at the end of list. OS Specified function
 *
 * @param none
 * @return none
 */
void TBluetoothAttributeParser::EndListL()
{
    switch ( iProcessingState )
    {
        // are we at the end of a list
        case EEndOfDesOne:
        case EEndOfDesTwo:
        case EEndOfDesThree:
            break;

        default:
            User::Leave(KErrGeneral);
            break;
    }

    Next();
}

/**
* CompareRFCOMM
*
* Check to see if RFCOMM is an advertised service
*
* @param aAttrValue the attribute value
**/
void TBluetoothAttributeParser::CompareRFCOMM( CSdpAttrValue& aAttrValue )
{
    TBool success = EFalse;

    if ( aAttrValue.Type() == ETypeUUID )
    {
        if ( aAttrValue.UUID() == KRFCOMM )
        {
            success = ETrue;
        }
    }

    if (!success)
        iContinueSearching = EFalse;
}

/**
* GetPort
*
* Obtain Port information and return to the observer
*
* @param aAttrValue the attribute value
* @return none
**/
void TBluetoothAttributeParser::GetPort( CSdpAttrValue& aAttrValue )
{
    TBool success = EFalse;

    if ( aAttrValue.Type() == ETypeUint )
    {
        iPort = aAttrValue.Uint();
        iObserver.SetPort(iPort);
        success = ETrue;
    }

    if (!success)
        iContinueSearching = EFalse;
}

/**
* Next
*
* Move the State flag on to the next member of the Data Element Sequence
*
* @param none
* @return none
**/
void TBluetoothAttributeParser::Next()
{
    __ASSERT_DEBUG(iProcessingState != EFinished, Panic(EBadAttributeValue));

    // move to the next item
    iProcessingState = static_cast<EProcessingState>( static_cast<TInt>(iProcessingState) + 1 );
}

⌨️ 快捷键说明

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