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

📄 tbluetoothattributeparser.cpp

📁 symbian下的案例
💻 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 + -