diff -r a2efdd544abf -r b47902b73a93 datasourcemodules/bluetoothgpspositioningmodule/btgpspsy/src/Connecting/BTGPSDeviceInfoHandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/datasourcemodules/bluetoothgpspositioningmodule/btgpspsy/src/Connecting/BTGPSDeviceInfoHandler.cpp Fri Jun 04 10:34:15 2010 +0100 @@ -0,0 +1,209 @@ +// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of "Eclipse Public License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.eclipse.org/legal/epl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// + + + +// INCLUDE FILES +#include +#include "BTGPSDeviceManager.h" +#include "BTGPSDeviceInfoHandler.h" +#include "BTGPSConnectManagerExt.h" +#include "BTGPSSettingManager.h" +#include "BTGPSHandlerFactory.h" +#include "BTGPSLogging.h" + +// EXTERNAL DATA STRUCTURES + +// EXTERNAL FUNCTION PROTOTYPES + +// CONSTANTS +// Device array granularity +const TInt KBTGPSDeviceArrayGranularity = 1; + +// ============================= LOCAL FUNCTIONS =============================== + +// ============================ MEMBER FUNCTIONS =============================== + + +// ----------------------------------------------------------------------------- +// CBTGPSDeviceInfoHandler::NewL +// ----------------------------------------------------------------------------- +CBTGPSDeviceInfoHandler* CBTGPSDeviceInfoHandler::NewL( + MBTGPSConnectManagerExt& aManagerExt) + { + CBTGPSDeviceInfoHandler* self = new (ELeave) CBTGPSDeviceInfoHandler( + aManagerExt); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(); + return self; + } + +// ----------------------------------------------------------------------------- +// CBTGPSDeviceInfoHandler::~CBTGPSDeviceInfoHandler +// ----------------------------------------------------------------------------- +CBTGPSDeviceInfoHandler::~CBTGPSDeviceInfoHandler() + { + + if(iIdle) + { + iIdle->Cancel(); + delete iIdle; + } + if(iDeviceArray) + { + iDeviceArray->ResetAndDestroy(); + delete iDeviceArray; + } + delete iBtDevMan; + } + + +// ----------------------------------------------------------------------------- +// CBTGPSDeviceInfoHandler::ConstructL +// ----------------------------------------------------------------------------- +void CBTGPSDeviceInfoHandler::ConstructL() + { + TRACESTRING("CBTGPSDeviceInfoHandler::ConstructL start...") + + //construct idle object + iIdle = CIdle::NewL(CActive::EPriorityStandard); + + //construct BT device manager + iBtDevMan = CBTGPSDevMan::NewL(this); + iDeviceArray = new (ELeave) RBTDeviceArray( KBTGPSDeviceArrayGranularity ); + + TInt err(KErrNone); + + err = iManagerExt.SettingManager().GetBTDeviceInfo(iValid, iBtSockAddr); + + if(err!=KErrNone || !iValid) + { + //device information is not found in setting + iErrCode = KErrNotFound; + iIdle->Start(TCallBack( + HandlerCompleteCallback, + this)); + return; + } + + //Get paired devices + TBTRegistrySearch searchPattern; + searchPattern.FindBonded(); + iBtDevMan->GetDevices(searchPattern, iDeviceArray); + + TRACESTRING("CBTGPSDeviceInfoHandler::ConstructL end") + } + +// ----------------------------------------------------------------------------- +// CBTGPSDeviceInfoHandler::CBTGPSDeviceInfoHandler +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +CBTGPSDeviceInfoHandler::CBTGPSDeviceInfoHandler( + MBTGPSConnectManagerExt& aManagerExt) + : iManagerExt(aManagerExt) + { + } + +// ----------------------------------------------------------------------------- +// CBTGPSDeviceInfoHandler::HandleAddDeviceComplete +// ----------------------------------------------------------------------------- +void CBTGPSDeviceInfoHandler::HandleAddDeviceComplete( + TInt /*aErr*/ ) + { + //nothing to do + } + +// ----------------------------------------------------------------------------- +// CBTGPSDeviceInfoHandler::HandleDeleteDevicesComplete +// ----------------------------------------------------------------------------- +void CBTGPSDeviceInfoHandler::HandleDeleteDevicesComplete( + TInt /*aErr*/ ) + { + //nothing to do + } + +// ----------------------------------------------------------------------------- +// CBTGPSDeviceInfoHandler::HandleGetDevicesComplete +// ----------------------------------------------------------------------------- +void CBTGPSDeviceInfoHandler::HandleGetDevicesComplete( + TInt aErr, + RBTDeviceArray* aDeviceArray) + { + TRACESTRING2("CBTGPSDeviceInfoHandler::HandleGetDevicesComplete start...%d", aErr) + iErrCode = aErr; + + if(iErrCode==KErrNone && aDeviceArray) + { + iErrCode = KErrNotFound; + + TInt count = aDeviceArray->Count(); + for (TInt i = 0; i < count; i++) + { + const TBTDevAddr& dev = (*aDeviceArray)[i]->BDAddr(); + if(dev == iBtSockAddr.BTAddr()) + { + //BT Address is paired + //Set device info to device manager + TBTDeviceType deviceType(EBTDeviceTypeUnknown); + switch(iValid) + { + case TBTGPSSettingsApi::EBtDeviceInvalid: + break; + case TBTGPSSettingsApi::EBtDeviceNonNokGps: + deviceType = EBTDeviceTypeNonNokGps; + break; + case TBTGPSSettingsApi::EBtDeviceNokGps: + default: + deviceType = EBTDeviceTypeNokGps; + break; + } + iManagerExt.DeviceManager().SetDeviceInfo( + iBtSockAddr, + deviceType); + + //Notify device is paired + iErrCode = KErrNone; + break; + } + } + } + //Notify result + iIdle->Start(TCallBack( + HandlerCompleteCallback, + this)); + } + +// ----------------------------------------------------------------------------- +// CBTGPSDeviceInfoHandler::HandlerCompleteCallback +// ----------------------------------------------------------------------------- +TInt CBTGPSDeviceInfoHandler::HandlerCompleteCallback(TAny* aAny) + { + reinterpret_cast( aAny )-> + HandlerCompleteNotify(); + + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CBTGPSDeviceInfoHandler::HandlerCompleteNotify +// ----------------------------------------------------------------------------- +void CBTGPSDeviceInfoHandler::HandlerCompleteNotify() + { + iManagerExt.HandlerComplete(EDeviceInfoHandler,iErrCode); + } + +// End of File