diff -r 08cc4cc059d4 -r 59ea2209bb67 ImagePrint/ImagePrintEngine/DeviceProtocols/btprotocol/src/cbtdevicecontainer.cpp --- a/ImagePrint/ImagePrintEngine/DeviceProtocols/btprotocol/src/cbtdevicecontainer.cpp Fri Jun 11 16:24:10 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,404 +0,0 @@ -/* -* Copyright (c) 2004-2007 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: -* -*/ - - -// EXTERNAL INCLUDES -#include - -#include "cbtdevicecontainer.h" -#include "crsbtdevice.h" -#include "rsutils.h" -#include "mprotprintingdevice.h" -#include "clog.h" - -// CONSTANTS -namespace - { - /// File name where the BT devices will be stored, for future sessions. - _LIT(KUsedDevicesFile,"btdevices.dat"); - /// Maximum number of Bluetooth devices to be stored. - const TInt KUsedDevicesMax = 150; - /// Version of the file where the BT devices will be stored. - const TInt KUsedDevicesVersion = 5; - } - - - - -////////////////////////////////////////////////////////////////////// -// Construction/Destruction -////////////////////////////////////////////////////////////////////// -CBtDeviceContainer* CBtDeviceContainer::NewL() - { - CBtDeviceContainer* self = new (ELeave) CBtDeviceContainer(); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - return self; - } - -void CBtDeviceContainer::ConstructL() - { - User::LeaveIfError( iFs.Connect()); - TInt err = RsUtils::CreateDataFolder( iFs, iDataFolder ); - LOG1("[CBtDeviceContainer::ConstructL]\t err: %d", err ); - iDataFolder = RsUtils::PathNotRom( iDataFolder ); - iFs.SetSessionPath( iDataFolder ); - LOG1("CBtDeviceContainer::ConstructL iDataFolder: %S", &iDataFolder ); - } - -CBtDeviceContainer::CBtDeviceContainer() : iVersion(KUsedDevicesVersion) - { - } - -CBtDeviceContainer::~CBtDeviceContainer() - { - LOG("CBtDeviceContainer::~CBtDeviceContainer begin"); - iDeviceArray.ResetAndDestroy(); - iDeviceArray.Close(); - iFs.Close(); - LOG("CBtDeviceContainer::~CBtDeviceContainer end"); - } - -//-------------------------------------------------------------------------------------------- -// -// CBtDeviceContainer::StoreL -// -//-------------------------------------------------------------------------------------------- -void CBtDeviceContainer::StoreL() -{ - LOG("[CBtDeviceContainer::StoreL]\t begin"); - - TFileName fileName( iDataFolder ); - fileName.Append( KUsedDevicesFile ); - LOG1("CBtDeviceContainer::StoreL fileName 1: %S", &fileName); - - RFileWriteStream outstream; - TFileName tempFileName; - - User::LeaveIfError( outstream.Temp( iFs, iDataFolder, tempFileName, EFileWrite ) ); - LOG1("[CBtDeviceContainer::StoreL]\t tempFileName: %S", &tempFileName); - - CleanupClosePushL( outstream ); - ExternalizeL( outstream ); - // makes sure all data is written from the buffer to file, before calling close. - outstream.CommitL(); - CleanupStack::PopAndDestroy(); // outstream - - if( RsUtils::FileExists( fileName, iFs ) ) - User::LeaveIfError( iFs.Delete( fileName ) ); - User::LeaveIfError( iFs.Rename( tempFileName, fileName ) ); - - LOG("[CBtDeviceContainer::StoreL]\t end"); -} - - -//-------------------------------------------------------------------------------------------- -// -// CBtDeviceContainer::RestoreL -// -//-------------------------------------------------------------------------------------------- -void CBtDeviceContainer::RestoreL() -{ - TFileName fileName( iDataFolder ); - fileName.Append( KUsedDevicesFile ); - - RFileReadStream instream; - CleanupClosePushL( instream ); - - User::LeaveIfError( instream.Open( iFs, fileName, EFileRead ) ); - InternalizeL(instream); - - CleanupStack::PopAndDestroy(); // instream -} - -//-------------------------------------------------------------------------------------------- -// -// CBtDeviceContainer::ExternalizeL -// -//-------------------------------------------------------------------------------------------- -void CBtDeviceContainer::ExternalizeL(RWriteStream& aStream) const - { - TInt count = 0; - for( TInt i = 0; i < iDeviceArray.Count(); i++ ) - { - if(iDeviceArray[i]->IsUsed()) - { - ++count; - } - } - LOG1("[CBtDeviceContainer::ExternalizeL]\t count: %d", count); - if(0 == count) - { - return; - } - - aStream.WriteInt32L(iVersion); - aStream.WriteInt32L(iCurrentId); - aStream.WriteInt32L(count); - for( TInt i = 0; i < iDeviceArray.Count(); i++ ) - { - if(iDeviceArray[i]->IsUsed()) - { - aStream << *(iDeviceArray[i]); - } - } - LOG("CBtDeviceContainer::ExternalizeL end"); - } - -//-------------------------------------------------------------------------------------------- -// -// CBtDeviceContainer::InternalizeL -// -//-------------------------------------------------------------------------------------------- -void CBtDeviceContainer::InternalizeL(RReadStream& aStream) -{ - TInt version = aStream.ReadInt32L(); - if (version != KUsedDevicesVersion) - { - return; - } - iVersion = version; - - iCurrentId = aStream.ReadInt32L(); - TInt count = aStream.ReadInt32L(); - for (TInt i = 0; i < count; i++) - { - CRsBtDevice* tmpDevice = CRsBtDevice::NewLC(); - - tmpDevice->InternalizeL(aStream); - - tmpDevice->SetUsed(ETrue); - tmpDevice->SetJustFound(EFalse); - User::LeaveIfError( iDeviceArray.Append( tmpDevice ) ); - CleanupStack::Pop(); // tmpDevice - } -} - -CRsBtDevice* CBtDeviceContainer::At(TInt aPosition) const - { - if( aPosition >= 0 && aPosition < iDeviceArray.Count() ) - { - return iDeviceArray[aPosition]; - } - else - { - return NULL; - } - } - -TInt CBtDeviceContainer::Count() const - { - return iDeviceArray.Count(); - } - -//-------------------------------------------------------------------------------------------- -// -// CBtDeviceContainer::Find -// -//-------------------------------------------------------------------------------------------- -TInt CBtDeviceContainer::Find( const CRsBtDevice &aDevice, TInt aInitIndex) const -{ - TInt nCnt; - CRsBtDevice *cmpDev; - - for (nCnt = aInitIndex+1; nCnt < iDeviceArray.Count(); nCnt++) - { - cmpDev = iDeviceArray[nCnt]; - if (cmpDev->Equals(aDevice)) - { - return nCnt; - } - } - - return KErrNotFound; -} - -//-------------------------------------------------------------------------------------------- -// -// CBtDeviceContainer::Find -// -//-------------------------------------------------------------------------------------------- -TInt CBtDeviceContainer::Find( const TInt aDeviceId, TInt aInitIndex) const -{ - for (TInt i = aInitIndex+1; i < iDeviceArray.Count(); i++) - { - if (iDeviceArray[i]->DeviceId() == aDeviceId) - { - return i; - } - } - return KErrNotFound; -} - -//-------------------------------------------------------------------------------------------- -// -// CBtDeviceContainer::Delete -// -//-------------------------------------------------------------------------------------------- -TInt CBtDeviceContainer::Delete( const TInt aDeviceId ) -{ - TInt pos = Find(aDeviceId); - if(KErrNotFound != pos) - { - iDeviceArray[pos]->SetUsed(EFalse); - } - return pos; -} - -//-------------------------------------------------------------------------------------------- -// -// CBtDeviceContainer::Delete -// -//-------------------------------------------------------------------------------------------- -TInt CBtDeviceContainer::Delete( const CRsBtDevice &aDevice ) -{ - TInt pos = Find(aDevice); - if(KErrNotFound != pos) - { - iDeviceArray[pos]->SetUsed(EFalse); - } - return pos; -} - -//-------------------------------------------------------------------------------------------- -// -// CBtDeviceContainer::AppendL -// -//-------------------------------------------------------------------------------------------- -void CBtDeviceContainer::AppendL( CRsBtDevice* aDevice ) -{ - LOG1("[CBtDeviceContainer::AppendL]\t %S", &(aDevice->FriendlyName())); - - if( iDeviceArray.Count() == KUsedDevicesMax ) - { - TInt nOldest = FindOldest(ENotUsed | ETimeLastUsed); - CRsBtDevice* device = iDeviceArray[nOldest]; - iDeviceArray.Remove(nOldest); - delete device; - } - - if( aDevice->DeviceId() <= 0 ) - { - aDevice->SetDeviceId( GetAvailableId( *aDevice ) ); - } - iDeviceArray.AppendL( aDevice ); -} - -TInt CBtDeviceContainer::FindOldest(TUint aFlags) const - { - TInt oldest=-1; - TTime timeOldest, timeCmp; - CRsBtDevice *cmpDev; - TBool bSavedCheck; - - timeOldest.UniversalTime(); - for (TInt i=0; i < iDeviceArray.Count(); ++i) - { - cmpDev = iDeviceArray[i]; - if ((aFlags & EUsed) && (aFlags & ENotUsed)) - { - bSavedCheck = ETrue; - } - else if (aFlags & ESaved) - { - bSavedCheck = cmpDev->IsUsed(); - } - else if (aFlags & ENotUsed) - { - bSavedCheck = !(cmpDev->IsUsed()); - } - else - { - bSavedCheck = ETrue; - } - - if (bSavedCheck) - { - if (aFlags & ETimeLastUsed) - { - timeCmp = cmpDev->TimeLastUsed(); - } - else if (aFlags & ETimeDiscovered) - { - timeCmp = cmpDev->TimeDiscovered(); - } - else - { - // Error, but shouldn't get here if program does the right thing - return -1; - } - - if (timeCmp < timeOldest) - { - oldest = i; - timeOldest = timeCmp; - } - } - } - - return oldest; - } - -TInt CBtDeviceContainer::GetAvailableId( const CRsBtDevice& aDevice ) -{ - LOG("CBtDeviceContainer::GetAvailableId begin"); - const TBTDevAddr& btAddr = aDevice.BDAddr(); - TInt id( 0 ); - TInt intSize = sizeof(TInt); - LOG1("CBtDeviceContainer::GetAvailableId intSize: %d", intSize); - for( TInt i = ( KBTDevAddrSize - 1 ), s = 0; i >= 0 && s < intSize; i--, s++ ) - { - const TUint8& element = btAddr[i]; - TInt temp( element ); - temp <<= ( s * 8 ); - id |= temp; - } - - id &= DEVICE_ID_FIELD_MASK; - LOG1("[CBtDeviceContainer::GetAvailableId]\t id after masking: %d", id); - - while( !IsIdAvailable( id ) ) - { - id++; - } - - iCurrentId = id; - LOG1("[CBtDeviceContainer::GetAvailableId]\t return: %d", iCurrentId); - return iCurrentId; -} - - -TBool CBtDeviceContainer::IsIdAvailable( TInt aId ) const -{ - TBool result( ETrue ); - for( TInt x = 0; x < iDeviceArray.Count() && result; ++x ) - { - if ( aId == iDeviceArray[x]->DeviceId() ) - { - result = EFalse; - } - } - return result; -} - -void CBtDeviceContainer::Reset() - { - iDeviceArray.ResetAndDestroy(); - } - -// End of File