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

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

?? btdiscoverer.cpp

?? Series_60_DP_1_0_2_0_Thread_And_Active_Objects_Example_v1_0 Symbian os S60線程與活動對象實例
?? CPP
字號:
/*
* ============================================================================
*  Name     : CBTDiscoverer from BTDiscoverer.h
*  Part of  : ThreadAndAO
*  Created  : 12.1.2005 by Forum Nokia
*  Version  : 1.0
*  Copyright: Nokia Corporation
* ============================================================================
*/

// INCLUDES
#include "..\inc\btdiscoverer.h"
#include "SharedIntermediator.h"
#include "BluetoothInfo.h"

#include <btmanclient.h>
#include <btextnotifiers.h>
#include <aknlists.h>
#include <btsdp.h>

#include <bt_sock.h> 
#include <BTDevice.h>

_LIT(KBTProtocol, "BTLinkManager");
_LIT( KLine, "-" );

const TInt KMinBTAddressLength = 5;

CBTDiscoverer* CBTDiscoverer::NewL(CSharedIntermediator* aSMediator)
    {
    CBTDiscoverer* self = CBTDiscoverer::NewLC(aSMediator);
    CleanupStack::Pop(self);
    return self;
    }

CBTDiscoverer* CBTDiscoverer::NewLC(CSharedIntermediator* aSMediator)
    {
    CBTDiscoverer* self = new (ELeave) CBTDiscoverer(aSMediator);
    self->ConstructL();
    CleanupStack::PushL(self);
    return self;
    }

// ----------------------------------------------------------------------------
// CBTDiscoverer::CBTDiscoverer(void)
//
// Constructor.
// ----------------------------------------------------------------------------
CBTDiscoverer::CBTDiscoverer(CSharedIntermediator* aSMediator)
	: CActive(EPriorityStandard),iSMediator (aSMediator)
	{
	iDeviceNames =  new (ELeave) CArrayPtrFlat<HBufC>(1);
	iInqSockAddrArray = new (ELeave) RArray<TInquirySockAddr>; 
	iDeviceAddress = new (ELeave) RArray<HBufC*>;
	}

// ----------------------------------------------------------------------------
// CBTDiscoverer::CBTDiscoverer(void)
//
// Destructor.
// ----------------------------------------------------------------------------
CBTDiscoverer::~CBTDiscoverer(void)
	{
	Cancel();

	iDeviceNames->ResetAndDestroy();
	delete iDeviceNames;
	iDeviceNames = 0;

	iInqSockAddrArray->Close();
	delete iInqSockAddrArray;
	iInqSockAddrArray = 0;

	iDeviceAddress->Close();
	delete iDeviceAddress;
	iDeviceAddress = 0;

	iHostResolver.Close();
	iSocketServer.Close();
	}

// Standard Symbian OS 2nd phase constructor
void CBTDiscoverer::ConstructL()
    {
	CActiveScheduler::Add(this);
    }
// ----------------------------------------------------------------------------
// CBTDiscoverer::GetNames()
//
// Return a pointer to list of names.
// ----------------------------------------------------------------------------
CArrayPtrFlat< HBufC >* CBTDiscoverer::GetNames()
	{
	return iDeviceNames;
	}

// ----------------------------------------------------------------------------
// CBTDiscoverer::GetDeviceAddress()
//
// Return a pointer to list of addresses.
// ----------------------------------------------------------------------------
RArray<HBufC*>* CBTDiscoverer::GetDeviceAddress()
	{
	return iDeviceAddress;
	}

// ----------------------------------------------------------------------------
// CBTDiscoverer::StartDiscoveringDevicesL()
//
// Find devices.
// ----------------------------------------------------------------------------
 void CBTDiscoverer::StartDiscoveringDevicesL()
	{
	User::LeaveIfError(iSocketServer.Connect() ); 
	
	TProtocolDesc protocolInfo;

	// Gets the description of a protocol by name.
	User::LeaveIfError(iSocketServer.FindProtocol( (TBuf<32> &)KBTProtocol, protocolInfo) ); 

	// Initialises a name resolution service provided by a particular protocol. 
	// It must be called before other object functions are used.
	User::LeaveIfError(iHostResolver.Open(iSocketServer, protocolInfo.iAddrFamily, 
		protocolInfo.iProtocol ) ); 

	// Interested in all bluetooth devices that have BT turned on.
	iSockAddr.SetIAC(KGIAC); 

	// Resolve name of the device and device address. Do not use cache.
	iSockAddr.SetAction(KHostResInquiry | KHostResName | KHostResIgnoreCache); 
	
	// Start discovering devices asynchronously. RunL is called.
	iHostResolver.GetByAddress(iSockAddr,iNameEntry,iStatus); 

	// Set this active object active.
	SetActive();

	}

// ----------------------------------------------------------------------------
// CBTDiscoverer::RunL()
//
// ----------------------------------------------------------------------------
 void CBTDiscoverer::RunL()
	{
	
	// Found a new device, iStatus would be KErrHostResNoMoreResults
	// if no more new devices are found.
	if ( iStatus == KErrNone ) 
		{	
		PushListL(iNameEntry); 
		// Find the next bluetooth device
		iHostResolver.Next(iNameEntry,iStatus);

		SetActive();
		}	
	}

// ----------------------------------------------------------------------------
// CBTDiscoverer::TransformSockAddress(TInquirySockAddr& aInquirySockAddr)
//
// Transform inquiryaddress to format XX-XX-XX-XX-XX (BT address)
// ----------------------------------------------------------------------------
void CBTDiscoverer::TransformSockAddress(TInquirySockAddr& aInquirySockAddr) 
	{
	TBTDevAddr localAddr= aInquirySockAddr.BTAddr();
	TBuf<1024> btAddr; 
		
	for(TInt i=0; i < localAddr.Des().Length() ;i++) 
		{ 
		btAddr.AppendNumFixedWidthUC(localAddr[i],EHex,2);
		if ( i != localAddr.Des().Length() -1 ) 
			{
			btAddr.Append( KLine );
			}
		}

	HBufC* element = HBufC::New(KBTDeviceAddress);
	element = btAddr.Alloc();
	iDeviceAddress->Append( element );
	}

// ----------------------------------------------------------------------------
// CBTDiscoverer::RunError(TInt aError)
// ----------------------------------------------------------------------------
TInt CBTDiscoverer::RunError(TInt)
	{
	return KErrNone;
	}

// ----------------------------------------------------------------------------
// CBTDiscoverer::DoCancel()
// ----------------------------------------------------------------------------
 void CBTDiscoverer::DoCancel()
	{
	iHostResolver.Cancel();
	}

// ----------------------------------------------------------------------------
// CBTDiscoverer::PushListL(TNameEntry& aNameEntry) 
//
// Separete both name/address from the aNameEntry and insert them into separe 
// lists.
// ----------------------------------------------------------------------------
void CBTDiscoverer::PushListL(TNameEntry& aNameEntry) 
	{ 

	TInquirySockAddr &addr = TInquirySockAddr::Cast(aNameEntry().iAddr); 

	// Add only different devices. 
	for( TInt i = 0; i < iInqSockAddrArray->Count(); i++ )
		{ 
		if( (*iInqSockAddrArray)[i].BTAddr() == addr.BTAddr( ) || 
			 addr.BTAddr().Des().Length() < KMinBTAddressLength )
			{ 
			return; 
			}	 
		}	 

	HBufC* element = HBufC::New(KBTDeviceLength);

	// Check the length of the bluetooth device name
	if ( aNameEntry().iName.Length() >= KBTDeviceLength )
		{
		element = aNameEntry().iName.Left( KBTDeviceLength -1 ).Alloc();
		}
	// Get the name 
	else {
		element = aNameEntry().iName.Alloc();
		}
	// Add the name onto the list. Devices must have some kind of name otherwise
	// it won't be added.
	if ( element->Length() != 0 ) 
		{
		iDeviceNames->AppendL( element );
		}
	else 
		{
		return;
		}
	
	TInquirySockAddr *addr_ptr = new (ELeave)TInquirySockAddr( addr ); 
	
	CleanupStack::PushL(addr_ptr); 

	// Append the BT address onto the list
	User::LeaveIfError( iInqSockAddrArray->Append(*addr_ptr) ); 
	CleanupStack::Pop(); 

	// Make address printable.
	TransformSockAddress( *addr_ptr );

	// Get name of the device and BT address as hex. Add name&address into shared intermediator.
	TPtr16 deviceName = (*iDeviceNames)[ iDeviceNames->Count() - 1 ]->Des();
	TPtr16 deviceBTAddr = (*iDeviceAddress)[ iDeviceAddress->Count() - 1 ]->Des();
	TBluetoothInfo btInfo = TBluetoothInfo (deviceName, deviceBTAddr);

	// Give data to the shared intermediator. Shared intermediator gives
	// device names to the listbox after this.
	iSMediator->AddBluetoothInfo(btInfo);
	}

// ----------------------------------------------------------------------------
// CBTDiscoverer::RefreshDevices()
//
// Cancels the wait for completion of an outstanding bluetooth request. 
// Cleans lists and starts the search again by calling GetByAddress.
// ----------------------------------------------------------------------------
void CBTDiscoverer::RefreshDevices()
	{
	
	// In case bt discover is already active.
	Cancel();

	 //Clear all lists 
	iDeviceNames->Reset();
	iInqSockAddrArray->Reset();
	iDeviceAddress->Reset();
	
	iSockAddr.SetAction(KHostResInquiry | KHostResName | KHostResIgnoreCache); 

	// Start discovering devices asynchronously. RunL is called afterwards.
	iHostResolver.GetByAddress(iSockAddr,iNameEntry,iStatus); 
	SetActive();
	}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久综合狠狠综合久久激情| 亚洲欧美偷拍三级| 亚洲国产日韩一区二区| 国产91清纯白嫩初高中在线观看 | 国产在线播放一区| 欧美一区二区美女| 男女男精品视频| 日韩欧美亚洲国产精品字幕久久久| 一区二区视频在线看| 国产视频一区在线观看| 波多野结衣一区二区三区 | 欧美日韩综合在线免费观看| 日韩欧美成人午夜| 国产成人免费av在线| 国产香蕉久久精品综合网| 韩国女主播成人在线| 久久女同精品一区二区| 国产乱子轮精品视频| 久久先锋影音av鲁色资源网| 五月天激情综合| 欧美一卡2卡三卡4卡5免费| 韩国三级中文字幕hd久久精品| 精品蜜桃在线看| 99精品国产99久久久久久白柏| 伊人夜夜躁av伊人久久| 欧美一区二区三区思思人| 久久99精品久久久久婷婷| 久久久精品国产99久久精品芒果| 国产成人精品免费视频网站| 亚洲日本va午夜在线影院| 日韩精品自拍偷拍| 色一情一乱一乱一91av| 日韩精品高清不卡| 亚洲欧美偷拍卡通变态| 欧美tickling挠脚心丨vk| 91网页版在线| 国产a久久麻豆| 韩国中文字幕2020精品| 日韩在线卡一卡二| 一区二区三区在线播放| 欧美高清精品3d| 国产自产v一区二区三区c| 亚洲在线中文字幕| 国产午夜精品一区二区 | 国产99久久久国产精品 | 国产婷婷色一区二区三区在线| 日本韩国欧美一区| 丁香激情综合国产| 激情丁香综合五月| 日韩成人dvd| 性久久久久久久久| 亚洲风情在线资源站| 亚洲五码中文字幕| 一区二区三区四区视频精品免费| 国产精品五月天| 国产精品视频看| 专区另类欧美日韩| 亚洲精品视频免费观看| 一区二区国产盗摄色噜噜| 一色屋精品亚洲香蕉网站| 中文字幕免费不卡在线| 欧美丰满高潮xxxx喷水动漫| 在线国产电影不卡| 欧美日韩中文字幕精品| 欧美日韩成人综合在线一区二区| 欧美丝袜丝nylons| 日韩无一区二区| 国产欧美一区二区在线观看| 国产精品毛片无遮挡高清| 依依成人综合视频| 蜜臀av一区二区| 粉嫩嫩av羞羞动漫久久久| 91网站最新网址| 日韩欧美一级二级| 国产精品色噜噜| 亚洲一二三四区| 日韩国产在线一| 国产一区二三区好的| 国产91在线观看丝袜| 欧美日韩高清一区| 国产日韩欧美在线一区| 午夜精品视频一区| 国产精品99久久久| 欧美在线观看视频一区二区| 久久午夜国产精品| 亚洲最快最全在线视频| 偷拍日韩校园综合在线| 91丝袜美腿高跟国产极品老师 | 青青青爽久久午夜综合久久午夜| 国产98色在线|日韩| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 丝袜美腿亚洲一区二区图片| av在线播放不卡| 国产亚洲欧美日韩俺去了| 日韩av成人高清| 欧美精品xxxxbbbb| 亚洲一区自拍偷拍| 91在线一区二区三区| 久久久久久久性| 久久精品国产99国产| 欧美卡1卡2卡| 青青草国产精品亚洲专区无| 欧美一区二区在线看| 香蕉影视欧美成人| 欧美最猛黑人xxxxx猛交| 欧美精品一区二区精品网| 一区二区三区丝袜| 91麻豆高清视频| ...xxx性欧美| 91精彩视频在线| 亚洲一线二线三线视频| 欧美日韩一区二区在线视频| 亚洲一区二区三区四区在线观看 | 亚洲乱码国产乱码精品精可以看| 成人黄色小视频在线观看| 亚洲欧美色综合| 欧美性做爰猛烈叫床潮| 日韩精品一级中文字幕精品视频免费观看| 91国在线观看| 国产一区二区在线免费观看| 国产欧美日韩另类一区| 欧美性videosxxxxx| 毛片不卡一区二区| 日韩毛片精品高清免费| 欧美电影一区二区三区| 香蕉av福利精品导航| 欧美日韩在线播放三区四区| 日本网站在线观看一区二区三区| 日韩精品一区二区三区三区免费| 国产原创一区二区| 一区二区高清视频在线观看| 欧美一级欧美三级| 不卡的av电影| 久久er精品视频| 亚洲综合色在线| 国产精品拍天天在线| 欧美一区二区在线不卡| 色狠狠色噜噜噜综合网| 国产精品一区一区| 久久精品国产色蜜蜜麻豆| 夜色激情一区二区| 日韩理论片中文av| 亚洲国产精品av| 国产亚洲精品7777| 精品福利一区二区三区免费视频| 日韩欧美国产综合| 在线免费观看日韩欧美| 91一区二区三区在线观看| 国产suv一区二区三区88区| 极品少妇一区二区三区精品视频| 五月天激情综合网| 视频一区欧美日韩| 亚洲a一区二区| 亚洲欧美国产三级| 国产精品狼人久久影院观看方式| 26uuu国产一区二区三区| 精品三级在线观看| 精品88久久久久88久久久| 日韩一区二区免费在线观看| 欧美一区二区视频网站| 日韩欧美第一区| 久久久久久电影| 国产精品第四页| 亚洲第一激情av| 精品一区二区三区免费播放| 麻豆极品一区二区三区| 国产成人综合网| 色婷婷精品大在线视频| 欧美日韩综合不卡| 久久久亚洲精华液精华液精华液| 日本一区二区三区国色天香| 中文字幕字幕中文在线中不卡视频| 亚洲午夜私人影院| 久久国产精品露脸对白| 97久久人人超碰| 91精品国产色综合久久ai换脸 | 国产成人自拍高清视频在线免费播放| 成人av网站在线观看| 色综合久久久久网| 欧美成人高清电影在线| 中文字幕一区二区三| 免费欧美高清视频| 欧洲色大大久久| 亚洲精品免费播放| 国产精品一区在线观看你懂的| 欧美日韩在线不卡| 亚洲美女视频一区| 国产精品资源在线看| 91精品国产美女浴室洗澡无遮挡| 国产精品久久久久久一区二区三区 | 久久伊人蜜桃av一区二区| 亚洲国产精品久久人人爱| zzijzzij亚洲日本少妇熟睡| 日韩欧美在线一区二区三区| 亚洲国产日韩综合久久精品| 99国产精品国产精品久久| 中文字幕成人在线观看| 国产精品资源网站| 国产精品视频一二| 成人精品一区二区三区中文字幕|