bluetoothengine/btnotif/src/BTNInquiAO.cpp
branchRCL_3
changeset 55 613943a21004
parent 54 0ba996a9b75d
child 56 9386f31cc85b
--- a/bluetoothengine/btnotif/src/BTNInquiAO.cpp	Thu Aug 19 10:05:41 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,301 +0,0 @@
-/*
-* Copyright (c) 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:  Part of CBTInqUI class: use Active object to search BT devices.
-*
-*/
-#include "btninqui.h"
-#include "btNotifDebug.h"
-
-/**  Identification for active object request */
-const TInt KBTNotifInquiryNotifierReq = 20;
-
-// ----------------------------------------------------------
-// CBTInqUI::PrepareScannerL
-// ----------------------------------------------------------
-//
-void CBTInqUI::CreateScannerL()
-    {
-    FLOG(_L("[BTNOTIF]\t CBTInqUI::CreateScannerL()"));
-    
-    __ASSERT_DEBUG( iScanner == NULL, User::Panic(_L("BTNotifInqUI - iScanner not released!"),KErrAlreadyExists));
-        
-    // Create scanner object which will do the actual search
-    iScanner = CBTNotifActive::NewL( this, KBTNotifInquiryNotifierReq, CActive::EPriorityStandard );
-    User::LeaveIfError( iSocketServer.Connect() );
-    TProtocolDesc pInfo;
-    User::LeaveIfError( iSocketServer.FindProtocol( _L("BTLinkManager"), pInfo));
-    User::LeaveIfError( iHostResolver.Open(iSocketServer, pInfo.iAddrFamily, pInfo.iProtocol));
-    IssueRequestL();
-
-    FLOG(_L("[BTNOTIF]\t CBTInqUI::CreateScannerL() completed"));
-    }
-
-// ----------------------------------------------------------
-// CBTInqUI::IssueRequestL
-// Issue Bluetooth device inquiry/search itself.
-// Reads also inquiry mode from shared data.
-// ----------------------------------------------------------
-//
-void CBTInqUI::IssueRequestL()
-    {
-    FLOG(_L("[BTNOTIF]\t CBTInqUI::IssueRequestL()"));
-    
-    if (reinterpret_cast<CBTNotifierBase*>(iDevSearchObserver)->AutoLockOnL())
-        {
-        // Cancel bt inquiry immediately if device is locked.
-        FLOG(_L("[BTNOTIF]\t CBTInqUI::IssueRequestL() Device is locked"));
-        Cancel();
-        return;
-        }
-    
-    TUint action = 0; 
-    if( !iPageForName )
-        {
-        action = KHostResInquiry + KHostResEir + KHostResIgnoreCache;
-        }
-    else
-        {
-        TInt firstPartialNameDevIndex;
-        if (HaveDevsWithPartialName(firstPartialNameDevIndex))
-            {
-            FTRACE(FPrint(_L("[BTNOTIF]\t CBTInqUI::IssueRequestL() looking up device index %d (have partial name already)"), firstPartialNameDevIndex));
-
-            action = KHostResName + KHostResIgnoreCache;
-            TInquirySockAddr sa;
-            sa.SetBTAddr(iLastSeenDevicesArray->At(firstPartialNameDevIndex)->BDAddr());
-            iInquirySockAddr.SetBTAddr( sa.BTAddr() );            
-            }
-        else if( iCurrentlyResolvingUnnamedDeviceIndex < iDevsWithoutName.Count() )
-            {
-            FTRACE(FPrint(_L("[BTNOTIF]\t CBTInqUI::IssueRequestL() looking up device index %d (currently anonymous)"), iCurrentlyResolvingUnnamedDeviceIndex));
-
-            action = KHostResName + KHostResIgnoreCache;
-            TInquirySockAddr& sa = TInquirySockAddr::Cast( iDevsWithoutName[iCurrentlyResolvingUnnamedDeviceIndex].iAddr );
-            iInquirySockAddr.SetBTAddr( sa.BTAddr() );            
-            }
-        }
-    if (action)
-        {
-        iInquirySockAddr.SetAction( action ); 
-        iInquirySockAddr.SetIAC(KGIAC);
-        iHostResolver.GetByAddress( iInquirySockAddr, iEntry, iScanner->RequestStatus() );
-        iScanner->GoActive();
-        }
-    else
-        {
-        FLOG(_L("[BTNOTIF]\t CBTInqUI::RunL() All name inquiries complete ."));
-        iPageForName = EFalse;
-        iCurrentlyResolvingUnnamedDeviceIndex = 0;
-        InquiryComplete( KErrNone );
-        }
-    FLOG(_L("[BTNOTIF]\t CBTInqUI::IssueRequestL() completed"));
-    }
-
-// ----------------------------------------------------------
-// CBTInqUI::RequestCompletedL
-// BT-device or timeout has been received. Inform caller for
-// received device and issue next EIR/Name request.
-// ----------------------------------------------------------
-//
-void CBTInqUI::RequestCompletedL( CBTNotifActive* aActive, TInt aId, TInt aStatus )
-    {
-    FTRACE(FPrint(_L("[BTNOTIF]\t CBTInqUI::RequestCompletedL() status: %d >>"), aStatus ));
-    ASSERT( aId == KBTNotifInquiryNotifierReq);
-    (void) aActive;
-
-    TInt firstPartialNameDevIndex = -1;
-    const TBool haveDevsWithPartialName = HaveDevsWithPartialName(firstPartialNameDevIndex);
-
-    if( aStatus == KErrNone )
-        {
-        if( iPageForName )
-            {
-            FLOG(_L("[BTNOTIF]\t CBTInqUI::RequestCompletedL() in name request state."));
-
-            if (haveDevsWithPartialName)
-                {
-                // We resolve names in chronological order so it must be the first device
-                // with an incomplete name we can find on the last seen list.
-                HandleUpdatedNameL(firstPartialNameDevIndex);
-                }
-            else
-                {
-                // Must be the current index in iDevsWithoutName.
-                HandleFoundNameL();
-                iCurrentlyResolvingUnnamedDeviceIndex++;
-                }
-            IssueRequestL();
-            }
-        else
-            {
-            HandleInquiryDeviceL();
-            iHostResolver.Next( iEntry, iScanner->RequestStatus() );
-            iScanner->GoActive();
-            }
-        }
-    else if( aStatus == (KHCIErrorBase - EPageTimedOut) && iPageForName )
-        {
-        FLOG(_L("[BTNOTIF]\t CBTInqUI::RequestCompletedL() HCI:EPageTimeOut, page next one."));
-        if (haveDevsWithPartialName)
-            {
-            // A device with incomplete name has probably gone out of range. Just removing
-            // it from the UI may be a bit confusing, so let's just update its RSSI indicator
-            // to minimum.
-            PageTimeoutOnDeviceWithPartialNameL(firstPartialNameDevIndex);
-            }
-        else
-            {
-            iCurrentlyResolvingUnnamedDeviceIndex++;            
-            }
-        IssueRequestL();
-        }
-    else
-        {
-        if( !iPageForName && (iDevsWithoutName.Count() > 0 || haveDevsWithPartialName) )
-            {
-            FTRACE(FPrint(_L("[BTNOTIF]\t CBTInqUI::RequestCompletedL() have devs with incomplete name = %d, nameless devices %d, paging for name."), 
-                    haveDevsWithPartialName, iDevsWithoutName.Count() ));
-            iCurrentlyResolvingUnnamedDeviceIndex = 0;
-            iPageForName = ETrue;
-            IssueRequestL();
-            }
-        else
-            {
-            FLOG(_L("[BTNOTIF]\t CBTInqUI::RequestCompletedL() NameInquiryComplete with error or no device found."));
-            HandleError( aActive, aId, aStatus );
-            }
-        }
-    FLOG(_L("[BTNOTIF]\t CBTInqUI::RequestCompletedL() <<"));
-    }
-
-// ----------------------------------------------------------
-// CBTInqUI::HandleError
-// Inform UI from error occured.
-// ----------------------------------------------------------
-//
-void CBTInqUI::HandleError( CBTNotifActive* aActive, TInt aId, TInt aError )
-    {
-    FLOG(_L("[BTNOTIF]\t CBTInqUI::HandleError()"));
-    (void) aActive;
-    (void) aId;
-    iPageForName = EFalse;
-    InquiryComplete( aError );
-    FLOG(_L("[BTNOTIF]\t CBTInqUI::HandleError() completed"));
-    }
-
-// ----------------------------------------------------------
-// CBTInqUI::DoCancelRequest
-// ----------------------------------------------------------
-//
-void CBTInqUI::DoCancelRequest( CBTNotifActive* aActive, TInt aId )
-    {
-    (void) aActive;
-    (void) aId;
-    iHostResolver.Cancel();
-    }
-	
-// ----------------------------------------------------------
-// CBTInqUI::HandleInquiryDeviceL
-// Inform of properties of the found BTdevice,   
-// which passes the search filter. Its name would be retrived 
-// later if not contained by the first round of inquiry.   
-// ----------------------------------------------------------
-//
-void CBTInqUI::HandleInquiryDeviceL()
-    {
-    TInquirySockAddr& sa = TInquirySockAddr::Cast( iEntry().iAddr );
-    
-    if ( iDesiredDeviceClass.DeviceClass() == 0 || sa.MajorClassOfDevice() == iDesiredDeviceClass.MajorDeviceClass() )
-        {
-        FLOG(_L("[BTNOTIF]\t CBTInqUI::HandleInquiryDeviceL() The found device passes the search filter."));
-#ifdef _DEBUG
-    TBuf<12> devAddrString;
-    sa.BTAddr().GetReadable(devAddrString);
-    FTRACE(FPrint(_L("[BTNOTIF]\t BT Address: %S"), &devAddrString));
-#endif
-        TBTDeviceName devName;
-        TBool isNameComplete(EFalse);
-        TBool nameGotten = CheckEirDeviceName( iEntry, devName, isNameComplete );
-        FTRACE(FPrint(_L("[BTNOTIF]\t CBTInqUI::HandleInquiryDeviceL() EIR device name? %d, %S, complete = %d"), nameGotten, &devName, isNameComplete ));
-        if( nameGotten )
-            {
-            DeviceAvailableL( iEntry(), devName, isNameComplete );
-            }
-        else
-            {
-            iDevsWithoutName.AppendL( iEntry() );
-            }
-        }
-    }
-
-// ----------------------------------------------------------
-// CBTInqUI::HandleFoundNameL
-// Inform of retrieved device name after 2nd inquiry.  
-// ----------------------------------------------------------
-//
-void CBTInqUI::HandleFoundNameL()
-    {
-#ifdef _DEBUG
-    TBuf<12> devAddrString;
-    TInquirySockAddr& sa = TInquirySockAddr::Cast( iEntry().iAddr );
-    sa.BTAddr().GetReadable(devAddrString);
-    FTRACE(FPrint(_L("[BTNOTIF]\t CBTInqUI::HandleFoundNameL() BT Address: %S"), &devAddrString));
-#endif
-    if( iEntry().iName != KNullDesC )
-        {
-        FTRACE(FPrint(_L("[BTNOTIF]\t CBTInqUI::HandleFoundNameL() Name found: %S"), &(iEntry().iName) ));
-        DeviceAvailableL( iDevsWithoutName[iCurrentlyResolvingUnnamedDeviceIndex], iEntry().iName, ETrue );
-        }
-
-    FLOG(_L("[BTNOTIF]\t CBTInqUI::HandleFoundNameL() Complete"));
-    }
-
-void CBTInqUI::HandleUpdatedNameL(TInt aLastSeenIndex)
-    {
-#ifdef _DEBUG
-    TBuf<12> devAddrString;
-    TInquirySockAddr& sa = TInquirySockAddr::Cast( iEntry().iAddr );
-    sa.BTAddr().GetReadable(devAddrString);
-    FTRACE(FPrint(_L("[BTNOTIF]\t CBTInqUI::HandleUpdatedNameL() BT Address: %S"), &devAddrString));
-#endif
-    iLastSeenDevicesNameComplete[aLastSeenIndex] = ETrue;
-    if( iEntry().iName != KNullDesC )
-        {
-        DeviceNameUpdatedL(iEntry(), aLastSeenIndex);
-        }
-
-    FTRACE(FPrint(_L("[BTNOTIF]\t CBTInqUI::HandleUpdatedNameL() Complete")));
-    }
-
-
-// ----------------------------------------------------------
-// CBTInqUI::CheckEirDeviceName
-// Check if the retrieved the device info contains device name.  
-// ----------------------------------------------------------
-//
-TBool CBTInqUI::CheckEirDeviceName( TNameEntry& aEntry, TBTDeviceName& aName, TBool& aIsComplete )
-    {
-    TBluetoothNameRecordWrapper eir( aEntry() );
-    TInt length = eir.GetDeviceNameLength();
-
-    TInt err( KErrNone );
-
-    if( length > 0 )
-        {            
-        err = eir.GetDeviceName( aName, aIsComplete);
-        return (!err);
-        }
-    return EFalse;
-    }
-// End of File