diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/servers/pcconn/src/sconbtengine.cpp --- a/connectivitymodules/SeCon/servers/pcconn/src/sconbtengine.cpp Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,415 +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: CSconBtEngine implementation -* -*/ - - - -#include -#include - -#include -#include -#include - -#include "sconbtengine.h" -#include "debug.h" - -CSconBtEngine* CSconBtEngine::NewL() - { - TRACE_FUNC; - CSconBtEngine* self = new (ELeave) CSconBtEngine(); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - return self; - } - -CSconBtEngine::~CSconBtEngine() - { - TRACE_FUNC; - if ( iBtEng ) - { - iBtEng->Cancel(); - delete iBtEng; - } - - delete iBtSettings; - } - -CSconBtEngine::CSconBtEngine() - { - } - -void CSconBtEngine::ConstructL() - { - iBtEng = CBTEngDevMan::NewL( this ); - iBtSettings = CBTEngSettings::NewL( this ); - iState = EIdle; - } - -void CSconBtEngine::ReadBTInfoL( RBufWriteStream& aStream ) - { - TRACE_FUNC_ENTRY; - if ( iState != EIdle ) - { - User::Leave( KErrInUse ); - } - iStream = &aStream; - iOperationError = KErrNone; - - // Write local name (8 bit name length + unicode name) - TBuf<100> localName; - TInt err = iBtSettings->GetLocalName( localName ); - User::LeaveIfError( err ); - LOGGER_WRITE_1("localName: %S", &localName); - iStream->WriteUint8L( localName.Length() ); - iStream->WriteL( localName, localName.Length() ); - - if ( iBtAddress.Length() == 0 ) - { - LOGGER_WRITE("Try to read bt address"); - - CRepository* cenRep = NULL; - // Use TRAP to catch a leave if the CenRep key does not exist. - TRAP( err, cenRep = CRepository::NewL( KCRUidBluetoothLocalDeviceAddress ) ); - CleanupStack::PushL( cenRep ); - if( !err ) - { - err = cenRep->Get( KBTLocalDeviceAddress, iBtAddress ); - LOGGER_WRITE_1("cenRep->Get err: %d", err); - } - CleanupStack::PopAndDestroy( cenRep ); - - if ( err ) - { - iBtAddress.Zero(); - } - } - - // Write bt address (8 bit addr length + unicode address) - if ( iBtAddress.Length() > 0 ) - { - LOGGER_WRITE_1("btAddr: %S", &iBtAddress); - iStream->WriteUint8L( iBtAddress.Length() ); - iStream->WriteL( iBtAddress, iBtAddress.Length() ); - } - else - { - iStream->WriteUint8L( 0 ); - } - - // Write BT Power State (8-bit, 0=Off, 1=On) - TBTPowerStateValue state; - err = iBtSettings->GetPowerState( state ); - User::LeaveIfError( err ); - LOGGER_WRITE_1("PowerState: %d", state); - iStream->WriteUint8L( state ); - - // Get device info - TBTRegistrySearch crit; - crit.FindAll(); - if ( !iBtDevArray ) - { - LOGGER_WRITE("create arr"); - iBtDevArray = new (ELeave) CBTDeviceArray(5); - LOGGER_WRITE("create arr -ok"); - } - else - { - iBtDevArray->ResetAndDestroy(); - } - err = iBtEng->GetDevices( crit, iBtDevArray ); - LOGGER_WRITE_1("GetDevices err: %d", err); - User::LeaveIfError( err ); - iState = ERequestBtInfo; - - // Wait until completed - iWait.Start(); - iState = EIdle; - if ( iOperationError ) - { - LOGGER_WRITE_1("Operation failed, leave %d", iOperationError); - User::Leave( iOperationError ); - } - TRACE_FUNC_EXIT; - } - -void CSconBtEngine::SetBtAuthorizedL( const TDesC& aBtDevAddress, TBool aAuthorized ) - { - TRACE_FUNC_ENTRY; - if ( iState != EIdle ) - { - User::Leave( KErrInUse ); - } - - TBTRegistrySearch crit; - TBTDevAddr addr; - addr.SetReadable( aBtDevAddress ); - crit.FindAddress( addr ); - - if ( !iBtDevArray ) - { - LOGGER_WRITE("create arr"); - iBtDevArray = new (ELeave) CBTDeviceArray(5); - LOGGER_WRITE("create arr -ok"); - } - else - { - iBtDevArray->ResetAndDestroy(); - } - TInt err = iBtEng->GetDevices( crit, iBtDevArray ); - LOGGER_WRITE_1("GetDevices err: %d", err); - User::LeaveIfError( err ); - iState = EChangeAuthorized; - iOperationError = KErrNone; - iAuthorizedValue = aAuthorized; - - // Wait until completed - iWait.Start(); - iState = EIdle; - if ( iOperationError ) - { - LOGGER_WRITE_1("Operation failed, leave %d", iOperationError); - User::Leave( iOperationError ); - - } - - TRACE_FUNC_EXIT; - } - -TInt CSconBtEngine::SetBtPowerState( TBool aPower ) - { - TRACE_FUNC_ENTRY; - if ( iState != EIdle ) - { - return KErrInUse; - } - - TBTPowerStateValue state; - iOperationError = iBtSettings->GetPowerState( state ); - if ( iOperationError ) - { - return iOperationError; - } - else if ( ( aPower && state == EBTPowerOn ) - || ( !aPower && state == EBTPowerOff ) ) - { - // No need to change state - return KErrNone; - } - - state = EBTPowerOff; - if ( aPower ) - { - state = EBTPowerOn; - } - iOperationError = iBtSettings->SetPowerState( state ); - if ( iOperationError ) - { - return iOperationError; - } - iState = EChangeBtState; - - // Wait until completed - iWait.Start(); - - iState = EIdle; - TRACE_FUNC_RET( iOperationError ); - return iOperationError; - } - -TInt CSconBtEngine::SetBtName( const TDesC& aBtName ) - { - LOGGER_WRITE_1("SetBtName aBtName: %S", &aBtName); - TInt err = iBtSettings->SetLocalName( static_cast( aBtName ) ); - TRACE_FUNC_RET( err ); - return err; - } - -// From MBTEngDevManObserver -void CSconBtEngine::HandleDevManComplete( TInt aErr ) - { - TRACE_FUNC; - LOGGER_WRITE_1("aErr: %d", aErr ); - if ( iState == EChangeAuthorized ) - { - if ( iWait.IsStarted() ) - { - iOperationError = aErr; - iWait.AsyncStop(); - } - } - - } - -void CSconBtEngine::HandleGetDevicesComplete( TInt aErr, - CBTDeviceArray* aDeviceArray ) - { - TRACE_FUNC_ENTRY; - LOGGER_WRITE_1("aErr: %d", aErr); - //iBtReqOngoing = EFalse; - if ( iState == ERequestBtInfo ) - { - // Continue to write devices info - TRAP( iOperationError, PrintDevicesL() ); - LOGGER_WRITE_1("PrintDevicesL err: %d", iOperationError); - - if ( iWait.IsStarted() ) - { - iWait.AsyncStop(); - } - } - else if ( iState == EChangeAuthorized ) - { - iOperationError = aErr; - if ( !aErr && aDeviceArray->Count() == 1 ) - { - CBTDevice* btRef = aDeviceArray->At(0); - TBTDeviceSecurity devSec = btRef->GlobalSecurity(); - if ( btRef->IsPaired() && !devSec.Banned() ) - { - LOGGER_WRITE8_1("btAdrr: %S", &btRef->BDAddr().Des() ); - CBTDevice* btDevice = CBTDevice::NewLC( btRef->BDAddr() ); - - btDevice->SetPaired( ETrue ); - - btDevice->SetDeviceNameL( btRef->DeviceName() ); - btDevice->SetFriendlyNameL( btRef->FriendlyName() ); - LOGGER_WRITE8_1("name: %S", &btRef->DeviceName()); - LOGGER_WRITE8_1("FriendlyName: %S", &btRef->FriendlyName()); - - LOGGER_WRITE_1("iAuthorizedValue: %d", iAuthorizedValue); - // Set as authorized and store the device - TBTDeviceSecurity security; - security.SetNoAuthenticate( EFalse ); - security.SetNoAuthorise( iAuthorizedValue ); - security.SetBanned( EFalse ); - - btDevice->SetGlobalSecurity (security ); - - //iOperationError = iBtEng->ModifyDevice(*aDeviceArray->At(0)); - iOperationError = iBtEng->ModifyDevice( *btDevice ); - LOGGER_WRITE_1( "ModifyDevice err: %d", iOperationError ); - CleanupStack::PopAndDestroy( btDevice ); - } - else - { - LOGGER_WRITE("Device was not paired or it's banned") - iOperationError = KErrAccessDenied; - } - } - - // If error occured stop waiting, otherwise continue waiting until - // HandleDevManComplete has been called - if ( iOperationError && iWait.IsStarted() ) - { - iWait.AsyncStop(); - } - } - TRACE_FUNC_EXIT; - } - -void CSconBtEngine::PrintDevicesL() - { - TRACE_FUNC_ENTRY; - // calculate devices count - TInt devCount(0); - - for ( TInt i=0 ; iCount(); i++ ) - { - CBTDevice* device = iBtDevArray->At(i); - // show only paired and banned devices - if ( device->IsPaired() || device->GlobalSecurity().Banned() ) - { - devCount++; - } - } - - // Print info - iStream->WriteUint8L( devCount ); - - for ( TInt i=0 ; iCount(); i++ ) - { - CBTDevice* device = iBtDevArray->At(i); - - const TBTDeviceSecurity btSec = device->GlobalSecurity(); - - // show only paired and banned devices - if ( device->IsPaired() || btSec.Banned() ) - { - LOGGER_WRITE_1("IsValidDeviceName: %d", device->IsValidDeviceName()); - const TDesC8& deviceName = device->DeviceName(); - LOGGER_WRITE8_1("DeviceName: %S", &deviceName ); - iStream->WriteUint8L( deviceName.Length() ); - iStream->WriteL( deviceName, deviceName.Length() ); - - LOGGER_WRITE_1("IsValidFriendlyName: %d", device->IsValidFriendlyName()); - LOGGER_WRITE_1("FriendlyName: %S", &device->FriendlyName() ); - - const TBTDevAddr& addr = device->BDAddr(); - - TBuf<100> readable; - addr.GetReadable( readable ); - LOGGER_WRITE_1("readable addr: %S", &readable); - iStream->WriteUint8L( readable.Length() ); - iStream->WriteL( readable, readable.Length() ); - - LOGGER_WRITE_1("paired: %d", device->IsPaired() ); - LOGGER_WRITE_1("IsValidPaired: %d", device->IsValidPaired() ); - TUint8 paired(0); - if ( device->IsPaired() && device->IsValidPaired() ) - { - paired = 1; - } - iStream->WriteUint8L( paired ); - - TUint8 noAuthorise(0); - if ( btSec.NoAuthorise() ) - { - noAuthorise = 1; - } - iStream->WriteUint8L( noAuthorise ); - - TUint8 banned(0); - if ( btSec.Banned() ) - { - banned = 1; - } - iStream->WriteUint8L( banned ); - - LOGGER_WRITE(""); - } - } - iStream->CommitL(); - iStream = NULL; //delete reference only - TRACE_FUNC_EXIT; - } - -// From MBTEngSettingsObserver -void CSconBtEngine::PowerStateChanged( TBTPowerStateValue /*aState*/ ) - { - TRACE_FUNC; - if ( iState == EChangeBtState && iWait.IsStarted() ) - { - iWait.AsyncStop(); - } - - } - -void CSconBtEngine::VisibilityModeChanged( TBTVisibilityMode /*aState*/ ) - { - TRACE_FUNC; - }