diff -r 000000000000 -r 3ce708148e4d omadm/omadmappui/src/NSmlDMFotaModel.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/omadm/omadmappui/src/NSmlDMFotaModel.cpp Thu Dec 17 08:40:12 2009 +0200 @@ -0,0 +1,535 @@ +/* +* Copyright (c) 2005-2006 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: Class containing the FOTA functionality and communication to +* other related components +* +*/ + + + +// INCLUDE FILES +#include +#include +#include +#include +#include "NSmlDMSyncPrivateCRKeys.h" + +#include "NSmlDMSyncDocument.h" +#include "NSmlDMFotaModel.h" +#include "NSmlDMSyncUi.hrh" +#include "NSmlDMSyncDebug.h" + + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CNSmlDMFotaModel::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CNSmlDMFotaModel* CNSmlDMFotaModel::NewL( CNSmlDMSyncDocument* aDocument ) + { + CNSmlDMFotaModel* self = new( ELeave ) CNSmlDMFotaModel( aDocument ); + + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); + + return self; + } + + +// Destructor +CNSmlDMFotaModel::~CNSmlDMFotaModel() + { + FLOG( "[OMADM] CNSmlDMFotaModel::~CNSmlDMFotaModel()" ); + //iFwUpdIdStateList.Close(); + iFotaEngine.Close(); + } + + +// ----------------------------------------------------------------------------- +// CNSmlDMFotaModel::GetProfileName +// Changes aProfileName to KNullDesC if the profile identifier is +// not found. +// ----------------------------------------------------------------------------- +// +void CNSmlDMFotaModel::GetProfileNameL( const TInt aProfileId, + HBufC* aProfileName ) const + { + FLOG( "[OMADM] CNSmlDMFotaModel::GetProfileNameL()" ); + + TInt index( 0 ); + aProfileName->Des().Copy( KNullDesC ); + + iDocument->RefreshProfileListL( ETrue ); // Include hidden profile + CArrayFixFlat* profileList = iDocument->ProfileList( index ); + + for ( index = 0; index < profileList->Count(); index++ ) + { + if ( ( *profileList )[index].iProfileId == aProfileId ) + { + aProfileName->Des().Copy( ( *profileList )[index].iProfileName ); + } + } + + FTRACE( FPrint( _L( + "[OMADM] CNSmlDMFotaModel::GetProfileNameL(): aProfileId = %d, ProfileName = \"%S\"" ), + aProfileId, aProfileName ) ); + } + +// ----------------------------------------------------------------------------- +// CNSmlDMFotaModel::DefaultFotaProfileIdL +// ----------------------------------------------------------------------------- +// +TInt CNSmlDMFotaModel::DefaultFotaProfileIdL() const + { + FLOG( "[OMADM] CNSmlDMFotaModel::DefaultFotaProfileIdL()" ); + + TInt profileId( KErrNotFound ); + CRepository* centrep = NULL; + TRAPD( err, centrep = CRepository::NewL( KCRUidNSmlDMSyncApp ) ); + FTRACE( FPrint( _L( + "[OMADM] CNSmlDMFotaModel::DefaultFotaProfileIdL(), opening cenrep returned %d" ), + err ) ); + + User::LeaveIfError( err ); + centrep->Get( KNSmlDMDefaultFotaProfileKey, profileId ); + delete centrep; + + FTRACE( FPrint( _L( + "[OMADM] CNSmlDMFotaModel::DefaultFotaProfileIdL() completed, profileId = %d" ), + profileId ) ); + return profileId; + } + +// ----------------------------------------------------------------------------- +// CNSmlDMFotaModel::SetDefaultFotaProfileIdL +// ----------------------------------------------------------------------------- +// +void CNSmlDMFotaModel::SetDefaultFotaProfileIdL( const TInt aProfileId ) + { + FLOG( "[OMADM] CNSmlDMFotaModel::SetDefaultFotaProfileIdL()" ); + + CRepository* centrep = NULL; + TRAPD( err, centrep = CRepository::NewL( KCRUidNSmlDMSyncApp ) ); + FTRACE( FPrint( _L( + "[OMADM] CNSmlDMFotaModel::SetDefaultFotaProfileIdL(), opening cenrep returned %d" ), + err ) ); + + User::LeaveIfError( err ); + centrep->Set( KNSmlDMDefaultFotaProfileKey, aProfileId ); + delete centrep; + + FLOG( "[OMADM] CNSmlDMFotaModel::SetDefaultFotaProfileIdL() completed" ); + } + +// ----------------------------------------------------------------------------- +// CNSmlDMFotaModel::EnableFwUpdRequestL +// ----------------------------------------------------------------------------- +// +void CNSmlDMFotaModel::EnableFwUpdRequestL( const TInt aProfileId ) + { + FLOG( "[OMADM] CNSmlDMFotaModel::SetDefaultFotaProfileIdL()" ); + + CRepository* centrep = NULL; + TRAPD( err, centrep = CRepository::NewL( KCRUidDeviceManagementInternalKeys ) ); + FTRACE( FPrint( _L( + "[OMADM] CNSmlDMFotaModel::EnableFwUpdRequestL(), opening cenrep returned %d" ), + err ) ); + User::LeaveIfError( err ); + centrep->Set( KDevManClientInitiatedFwUpdateId, aProfileId ); + delete centrep; + + FLOG( "[OMADM] CNSmlDMFotaModel::SetDefaultFotaProfileIdL() completed" ); + } + +// ----------------------------------------------------------------------------- +// CNSmlDMFotaModel::ReadProfileListL +// ----------------------------------------------------------------------------- +// +void CNSmlDMFotaModel::ReadProfileListL( CDesCArray* aItems, + CArrayFixFlat* aProfileIdList ) + { + FLOG( "[OMADM] CNSmlDMFotaModel::ReadProfileListL()" ); + + TInt index( 0 ); + + iDocument->RefreshProfileListL( ETrue ); // Include hidden profile + CArrayFixFlat* profileList = iDocument->ProfileList( index ); + + for ( index = 0; index < profileList->Count(); index++ ) + { + aItems->AppendL( ( *profileList )[index].iProfileName ); + aProfileIdList->AppendL( ( *profileList )[index].iProfileId ); + } + + FTRACE( FPrint( _L( + "[OMADM] CNSmlDMFotaModel::ReadProfileListL() completed, items = %d" ), + index ) ); + } + +// ----------------------------------------------------------------------------- +// CNSmlDMFotaModel::SelectDefaultProfileFromList +// ----------------------------------------------------------------------------- +// +TInt CNSmlDMFotaModel::SelectDefaultProfileFromList( + const CArrayFixFlat* aProfileIdList ) const + { + FLOG( "[OMADM] CNSmlDMFotaModel::SelectDefaultProfileFromList()" ); + + TInt retval( KErrNotFound ); + TInt defaultId( KErrNotFound ); + + TRAPD( err, defaultId = iDocument->FotaModel()->DefaultFotaProfileIdL() ); + + if ( err != KErrNone ) + { + // We do not care about the possible errors here. It only means + // that the identifier is not found on the list. + FTRACE( FPrint( _L( + "[OMADM] CNSmlDMFotaModel::SelectDefaultProfileFromList() received error %d" ), + err ) ); + } + + for ( TInt index( 0 ); index < aProfileIdList->Count(); index++ ) + { + if ( ( *aProfileIdList )[index] == defaultId ) + { + retval = index; + break; // Jump out of the loop + } + } + + FTRACE( FPrint( _L( + "[OMADM] CNSmlDMFotaModel::SelectDefaultProfileFromList() completed, retval = %d" ), + retval ) ); + return retval; + } + +// ----------------------------------------------------------------------------- +// CNSmlDMFotaModel::VerifyProfileL +// ----------------------------------------------------------------------------- +// +TBool CNSmlDMFotaModel::VerifyProfileL( const TInt aProfileId ) const + { + FTRACE( FPrint( _L( + "[OMADM] CNSmlDMFotaModel::VerifyProfileL(), aProfileId = %d" ), + aProfileId ) ); + + TInt index( 0 ); + TBool retval( EFalse ); + + iDocument->RefreshProfileListL( ETrue ); // Include hidden profile + CArrayFixFlat* profileList = iDocument->ProfileList( index ); + + for ( index = 0; index < profileList->Count(); index++ ) + { + if ( ( *profileList )[index].iProfileId == aProfileId ) + { + retval = ETrue; + break; // Jump out of the loop + } + } + + FTRACE( FPrint( _L( + "[OMADM] CNSmlDMFotaModel::VerifyProfileL() completed, return = %d" ), + retval ) ); + return retval; + } + +// ----------------------------------------------------------------------------- +// CNSmlDMFotaModel::RetrieveFwUpdPkgIdListL +// ----------------------------------------------------------------------------- +// +TInt CNSmlDMFotaModel::RetrieveFwUpdPkgIdListL(TFotaState aState) + { + const TInt maxNumOfProfiles = 32; + + TBuf16< maxNumOfProfiles > idListDescriptor; + User::LeaveIfError( iFotaEngine.GetUpdatePackageIds( idListDescriptor ) ); + TInt retval = KErrNotFound; + RArray< TInt > idList; + + TInt count = idListDescriptor.Length(); + for ( TInt i = 0; i < count; i++ ) + { + idList.Append( idListDescriptor[ i ] ); + } + TInt count1 = idList.Count(); + for ( TInt i = 0; (i < count1) && (retval == KErrNotFound); i++ ) + { + RFotaEngineSession::TState pkgState; + pkgState = iFotaEngine.GetState( idList[ i ] ); + FTRACE( FPrint( _L( + "[OMADM] CNSmlDMFotaModel::RetrieveFwUpdPkgIdListL(): profileid = %d, pkgstate = %d" ), + idList[i], (TInt) pkgState ) ); + if ( pkgState == aState ) + { + retval = idList[ i ]; + } + } + FTRACE( FPrint( _L( + "[OMADM] CNSmlDMFotaModel::RetrieveFwUpdPkgIdListL(): completed, retval = %d" ), + retval ) ); + idList.Close(); + return retval; + } + +// ----------------------------------------------------------------------------- +// CNSmlDMFotaModel::FindFwUpdPkgWithStateL +// ----------------------------------------------------------------------------- +// +TInt CNSmlDMFotaModel::FindFwUpdPkgWithStateL( + TFotaState aState ) + { + FTRACE( FPrint( _L( + "[OMADM] CNSmlDMFotaModel::FindFwUpdPkgWithStateL(): aState = %d" ), + (TInt) aState ) ); + RFotaEngineSession fotasession; + fotasession.OpenL(); + CleanupClosePushL(fotasession); + const TInt x = -1; + TFotaState res = EIdle; + res = (TFotaState)fotasession.GetState(x); + CleanupStack::PopAndDestroy(&fotasession); + if( res == aState ) + return KErrNone; + else + return KErrNotFound; + } + +// ----------------------------------------------------------------------------- +// CNSmlDMFotaModel::InitiateFwUpdInstall +// ----------------------------------------------------------------------------- +// +TInt CNSmlDMFotaModel::InitiateFwUpdInstall( TInt aPkgId, TInt aProfileId ) + { + FTRACE( FPrint( _L( + "[OMADM] CNSmlDMFotaModel::InitiateFwUpdInstall(): aPkgId = %d, aProfileId = %d" ), + aPkgId, aProfileId ) ); + + TInt retval = KErrGeneral; + retval = iFotaEngine.Update( aPkgId, aProfileId, KNullDesC8, KNullDesC8 ); + + FTRACE( FPrint( _L( + "[OMADM] CNSmlDMFotaModel::InitiateFwUpdInstall() completed, retval = %d" ), + retval ) ); + return retval; + } + +// ----------------------------------------------------------------------------- +// CNSmlDMFotaModel::ContinueFwUpdInstall +// ----------------------------------------------------------------------------- +// +void CNSmlDMFotaModel::ContinueFwUpdInstall( ) + { + FLOG( "[OMADM] CNSmlDMFotaModel::ContinueFwUpdInstall(): begin" ); + + TInt retval = iFotaEngine.TryResumeDownload( ); + + FTRACE( FPrint( _L( + "[OMADM] CNSmlDMFotaModel::ContinueFwUpdInstall() completed, retval = %d") ,retval )); + } + +// ----------------------------------------------------------------------------- +// CNSmlDMFotaModel::CurrentFwVersionString +// If the software version retrieval fails, the aVersionstring is not modified. +// ----------------------------------------------------------------------------- +// +TInt CNSmlDMFotaModel::CurrentFwVersionString( TDes& aVersionString ) + { + FLOG( "[OMADM] CNSmlDMFotaModel::CurrentFwVersionString()" ); + TBuf< KSysUtilVersionTextLength > buf; + + TInt err = SysUtil::GetSWVersion( buf ); + if ( err == KErrNone ) + { + _LIT( separator, "\n" ); + TInt location = buf.Find( separator ); + if ( location != KErrNotFound) + { + // Delete the separator and the text after it. We are + // only interested in the first section. + buf.Delete( location, (buf.Length() - location) ); + } + + aVersionString.Copy( buf.Left( aVersionString.MaxLength() ) ); + } + FTRACE( FPrint( _L( + "[OMADM] CNSmlDMFotaModel::CurrentFwVersionString() completed, err = %d, string = \"%S\"" ), + err, &aVersionString ) ); + + return err; + } + +// ----------------------------------------------------------------------------- +// CNSmlDMFotaModel::LastUpdateTime +// ----------------------------------------------------------------------------- +// +TInt CNSmlDMFotaModel::LastUpdateTime( TTime& aTime ) + { + FLOG( "[OMADM] CNSmlDMFotaModel::LastUpdateTime()" ); + TInt retval = iFotaEngine.LastUpdate( aTime ); + FTRACE( FPrint( _L( + "[OMADM] CNSmlDMFotaModel::LastUpdateTime() completed, err = %d" ), + retval ) ); + return retval; + } + +// ----------------------------------------------------------------------------- +// CNSmlDMFotaModel::MarkFwUpdChangesStartL +// ----------------------------------------------------------------------------- +// +void CNSmlDMFotaModel::MarkFwUpdChangesStartL() + { + FLOG( "[OMADM] CNSmlDMFotaModel::MarkFwUpdChangesStartL()" ); + + /*iFwUpdIdStateList.Reset(); + RArray< TInt > pkgIdList = RetrieveFwUpdPkgIdListL(); + + TInt count = pkgIdList.Count(); + for ( TInt i = 0; i < count; i++ ) + { + TFwUpdIdState item; + item.iPkgId = pkgIdList[ i ]; + item.iState = iFotaEngine.GetState( pkgIdList[ i ] ); + iFwUpdIdStateList.Append( item ); + } + FTRACE( FPrint( _L( + "[OMADM] CNSmlDMFotaModel::MarkFwUpdChangesStartL() completed, list count = %d" ), + iFwUpdIdStateList.Count() ) ); + pkgIdList.Close(); */ + } + +// ----------------------------------------------------------------------------- +// CNSmlDMFotaModel::FwUpdStatesChangedL +// The array is reseted at the end of the execution to save memory, since at +// the moment the information is not needed multiple times. +// ----------------------------------------------------------------------------- +// +TBool CNSmlDMFotaModel::FwUpdStatesChangedL() + { + FLOG( "[OMADM] CNSmlDMFotaModel::FwUpdStatesChangedL()" ); + + TBool retval = EFalse; + /*RArray< TInt > pkgIdList = RetrieveFwUpdPkgIdListL(); + + TInt count = pkgIdList.Count(); + for ( TInt i = 0; i < count; i++ ) + { + FTRACE( FPrint( _L( + "[OMADM] CNSmlDMFotaModel::FwUpdStatesChangedL() searching pkgid = %d" ), + pkgIdList[ i ] ) ); + + TInt originalCount = iFwUpdIdStateList.Count(); + TBool found = EFalse; + + for ( TInt index = 0; (index < originalCount) && (!found); + index++ ) + { + if ( iFwUpdIdStateList[ index ].iPkgId == pkgIdList[ i ] ) + { + FTRACE( FPrint( _L( + "[OMADM] CNSmlDMFotaModel::FwUpdStatesChangedL() found pkgid = %d" ), + iFwUpdIdStateList[ index ].iPkgId ) ); + FTRACE( FPrint( _L( + "[OMADM] CNSmlDMFotaModel::FwUpdStatesChangedL() states are: %d and %d" ), + iFotaEngine.GetState( pkgIdList[ i ] ), + iFwUpdIdStateList[ index ].iState ) ); + + found = ETrue; + if ( iFwUpdIdStateList[ index ].iState + != iFotaEngine.GetState( pkgIdList[ i ] ) ) + { + retval = ETrue; + } + } + } + + if ( !found ) + { + retval = ETrue; + } + } + iFwUpdIdStateList.Reset(); + + FTRACE( FPrint( _L( + "[OMADM] CNSmlDMFotaModel::FwUpdStatesChangedL() completed, return = %d" ), + retval ) ); + pkgIdList.Close();*/ + TInt configFlags = EGenericSession; + //TInt SetGenValue(EGenericSession ); + CRepository* centrep = NULL; + TRAPD( err, centrep = CRepository::NewL( KCRUidDeviceManagementInternalKeys ) ); + if ( centrep ) + { + centrep->Get( KDevManSessionType, configFlags ); + + } + if ( err != KErrNone ) + { + User::Leave( err ); + } + else + { + centrep->Set( KDevManSessionType, EGenericSession ); + } + if(centrep) + { + delete centrep; + } + if ( configFlags == EFotaPkgFound ) + { + retval = ETrue; + } + // configFlags=2 for FOTA Package not downloaded case ,1- successful download + return retval; + } + +// ----------------------------------------------------------------------------- +// CNSmlDMFotaModel::CNSmlDMFotaModel +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CNSmlDMFotaModel::CNSmlDMFotaModel( CNSmlDMSyncDocument* aDocument ) : + iDocument( aDocument ) + { + } + +// ----------------------------------------------------------------------------- +// CNSmlDMFotaModel::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CNSmlDMFotaModel::ConstructL() + { + iFotaEngine.OpenL(); + } + +// ----------------------------------------------------------------------------- +// CNSmlDMFotaModel::GetCurrentFwUpdState +// Fetches the state of last or current Fota operation +// ----------------------------------------------------------------------------- +// +TFotaState CNSmlDMFotaModel::GetCurrentFwUpdState() + { + const TInt x = -1; + TFotaState res = EIdle; + res = (TFotaState)iFotaEngine.GetState(x); + return res; + } + +// End of File