bluetoothengine/btnotif/src/BTNInqNotifier.cpp
branchRCL_3
changeset 56 9386f31cc85b
child 61 269724087bed
--- /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 <eikenv.h>          // Eikon environment
+
+#include "btninqnotifier.h"  // Own class definition
+#include "btNotifDebug.h"    // Debugging macros
+#include <StringLoader.h>    // Localisation stringloader
+#include <BTNotif.rsg>          // 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