diff -r 613943a21004 -r 9386f31cc85b bluetoothengine/btnotif/src/BTNInqNotifier.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bluetoothengine/btnotif/src/BTNInqNotifier.cpp Wed Sep 01 12:20:04 2010 +0100 @@ -0,0 +1,166 @@ +/* +* Copyright (c) 2002 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: Declares Bluetooth device inquiry notifier class. +* +*/ + + +// INCLUDE FILES +#include // Eikon environment + +#include "btninqnotifier.h" // Own class definition +#include "btNotifDebug.h" // Debugging macros +#include // Localisation stringloader +#include // Own resources + + +// ================= MEMBER FUNCTIONS ======================= + +// ---------------------------------------------------------- +// CBTInqNotifier::NewL +// Two-phased constructor. +// ---------------------------------------------------------- +// +CBTInqNotifier* CBTInqNotifier::NewL() + { + CBTInqNotifier* self=new (ELeave) CBTInqNotifier(); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(); + return self; + } + +// ---------------------------------------------------------- +// CBTInqNotifier::CBTInqNotifier +// C++ default constructor can NOT contain any code, that +// might leave. +// ---------------------------------------------------------- +// +CBTInqNotifier::CBTInqNotifier() + { + } + +// ---------------------------------------------------------- +// Destructor +// ---------------------------------------------------------- +// +CBTInqNotifier::~CBTInqNotifier() + { + FLOG(_L("[BTNOTIF]\t CBTInqNotifier::~CBTInqNotifier()")); + delete iUi; + iUi = NULL; + FLOG(_L("[BTNOTIF]\t CBTInqNotifier::~CBTInqNotifier() completed")); + } + +// ---------------------------------------------------------- +// CBTInqNotifier::RegisterL +// ---------------------------------------------------------- +// +CBTInqNotifier::TNotifierInfo CBTInqNotifier::RegisterL() + { + + iInfo.iUid=KDeviceSelectionNotifierUid; + iInfo.iChannel=KBTInquiryChannel; + iInfo.iPriority=ENotifierPriorityVHigh; // User input level + return iInfo; + } + +// ---------------------------------------------------------- +// CBTInqNotifier::GetParamsL +// Initialize parameters and launch device search. +// ---------------------------------------------------------- +// +void CBTInqNotifier::GetParamsL(const TDesC8& aBuffer, TInt aReplySlot, const RMessagePtr2& aMessage) + { + FLOG(_L("[BTNOTIF]\t CBTInqNotifier::GetParamsL()")); + + if( !iMessage.IsNull() ) + { + aMessage.Complete(KErrInUse); + return; + } + + iMessage = aMessage; + iReplySlot = aReplySlot; + + TBTDeviceClass cod; + TBTDeviceSelectionParamsPckg pckg; + pckg.Copy(aBuffer); + + LaunchInquiryL(pckg().DeviceClass()); + + FLOG(_L("[BTNOTIF]\t CBTInqNotifier::GetParamsL() completed ")); + } + +// ---------------------------------------------------------- +// CBTInqNotifier::NotifyDeviceSearchCompleted +// Notified by InquiryUI, return to caller by completing message +// ---------------------------------------------------------- +// +void CBTInqNotifier::NotifyDeviceSearchCompleted(TInt aErr, const TBTDeviceResponseParams& aDevice) + { + FTRACE(FPrint( _L("[BTNOTIF]\t CBTInqNotifier::NotifyDeviceSearchCompleted aErr %d"), aErr )); + CompleteMessage(TBTDeviceResponseParamsPckg( aDevice ), aErr); + } + +// ---------------------------------------------------------- +// CBTInqNotifier::Cancel +// Release all own resources (member variables) +// ---------------------------------------------------------- +// +void CBTInqNotifier::Cancel() + { + FLOG(_L("[BTNOTIF]\t CBTInqNotifier::Cancel()")); + if( iUi ) + { + iUi->Cancel(); + delete iUi; + iUi = NULL; + } + CBTNotifierBase::Cancel(); + FLOG(_L("[BTNOTIF]\t CBTInqNotifier::Cancel() completed")); + } + +// ---------------------------------------------------------- +// Ensure BT is ON; there are not too many connections; InqUi +// is launched successfully. +// ---------------------------------------------------------- +// +void CBTInqNotifier::LaunchInquiryL(const TBTDeviceClass& aDesiredDevice) + { + // Turn BT on if it is not yet. + if ( !CheckAndSetPowerOnL() ) + { + CompleteMessage(KErrGeneral); + return; + } + + TInt linkCount; + User::LeaveIfError(RProperty::Get(KPropertyUidBluetoothCategory, + KPropertyKeyBluetoothGetPHYCount, linkCount)); + if ( linkCount > 6 ) //support only piconet + { + iNotifUiUtil->ShowInfoNoteL( R_BT_BUSY_NOTE, ECmdBTnotifUnavailable ); + User::Leave(KErrInUse); + } + + // launch Inquiry UI + + iUi = new (ELeave) CBTInqUI( this, iNotifUiUtil, aDesiredDevice); + + + iUi->ConstructL(); + } + +// End of File