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

📄 devicediscoverer.cpp

📁 symbian系统下
💻 CPP
字号:
/*
* ============================================================================
*  Name     : CDeviceDiscoverer from DeviceDiscoverer.h
*  Part of  : BluetoothPMPExample
*  Created  : 06.06.2006 by Forum Nokia
*  Implementation notes:
*     Initial content was generated by Series 60 AppWizard.
*  Version  :
*  Copyright: Nokia Corporation
* ============================================================================
*/

// INCLUDE FILES
#include "DeviceDiscoverer.h"

_LIT(KBTLinkManagerTxt,"BTLinkManager");

CDeviceDiscoverer* CDeviceDiscoverer::NewL(RSocketServ& aSocketServ,
										   MDeviceDiscoObserver& aObserver)
	{
	CDeviceDiscoverer* self = CDeviceDiscoverer::NewLC(aSocketServ, aObserver);
    CleanupStack::Pop(self);
	return self;
	}


CDeviceDiscoverer* CDeviceDiscoverer::NewLC(RSocketServ& aSocketServ,
											MDeviceDiscoObserver& aObserver)
	{
	CDeviceDiscoverer* self = new (ELeave) CDeviceDiscoverer(aSocketServ,
		aObserver);
	CleanupStack::PushL(self);
	self->ConstructL();
	return self;
	}


void CDeviceDiscoverer::ConstructL()
	{
	}


// ----------------------------------------------------------------------------
// CDeviceDiscoverer::CDeviceDiscoverer(RSocketServ *aSocketServ,
//										MDeviceDiscoObserver *aObserver)
//
// constructor
// ----------------------------------------------------------------------------
CDeviceDiscoverer::CDeviceDiscoverer(RSocketServ& aSocketServ,
									 MDeviceDiscoObserver& aObserver):
	CActive(CActive::EPriorityStandard),
	iSocketServ(aSocketServ),
	iDiscoveredDeviceCount(0),
	iObserver(aObserver)
	{
	CActiveScheduler::Add(this);
	}


// ----------------------------------------------------------------------------
// CDeviceDiscoverer::~CDeviceDiscoverer()
//
// destructor
// ----------------------------------------------------------------------------
CDeviceDiscoverer::~CDeviceDiscoverer()
	{ 
	// cancel active object
	Cancel();
	}


// ----------------------------------------------------------------------------
// CDeviceDiscoverer::DiscoverDevicesL(TDeviceDataList *aDevDataList)
//
// discover remote devices.  RHostResolver will be used to do the discovery.
// any found devices will be placed in aDevDataList.
// ----------------------------------------------------------------------------
void CDeviceDiscoverer::DiscoverDevicesL(TDeviceDataList* aDevDataList)
	{

	iDiscoveredDeviceCount=0;
	// wipe existing device data list, start fresh
	iDevDataList=aDevDataList;
	iDevDataList->Reset();

	// load protocol for discovery
	TProtocolDesc pdesc;
	User::LeaveIfError(iSocketServ.FindProtocol(KBTLinkManagerTxt(), pdesc));

	// initialize host resolver
	User::LeaveIfError(iResolver.Open(iSocketServ, pdesc.iAddrFamily, pdesc.iProtocol));

	// start device discovery by invoking remote address lookup
	iAddr.SetIAC(KGIAC);
	iAddr.SetAction(KHostResInquiry|KHostResName|KHostResIgnoreCache);
	iResolver.GetByAddress(iAddr, iEntry, iStatus);
	SetActive();
	}


void CDeviceDiscoverer::RunL()
	{
	// RHostResolver.GetByAddress(..) has completed, process results
	if ( iStatus!=KErrNone )
		{
		// all devices (if any) done, notify 
		iObserver.HandleDeviceDiscoveryCompleteL();
		}
	else 
		{
		// new device data entry
		TDeviceData *devData = new (ELeave) TDeviceData();
		devData->iDeviceName = iEntry().iName;
		devData->iDeviceAddr = 
			static_cast<TBTSockAddr>(iEntry().iAddr).BTAddr();
		devData->iDeviceServicePort = 0;
		// add device data entry
		iDevDataList->Append(devData);

		iDiscoveredDeviceCount++;
		
		iObserver.DeviceDiscoveredL(*devData);

		// get next discovered device
		iResolver.Next(iEntry, iStatus);
		// wait for resolver to complete
		SetActive();
		}
	}

void CDeviceDiscoverer::DoCancel()
	{
	// cancel and close resolver
	iResolver.Close();
	}

// ----------------------------------------------------------------------------
// CDeviceDiscoverer::HasDevices()
//
// returns true if any devices were discovered
// ----------------------------------------------------------------------------
TBool CDeviceDiscoverer::HasDevices()
	{
	return ( iDiscoveredDeviceCount>0 );
	}

⌨️ 快捷键说明

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