📄 devicediscoverer.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 + -