diff -r b9b00b134b0d -r d316aecb87fd omadcmoadapters/extmemctrl/src/extmemctrldcmoadapter.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/omadcmoadapters/extmemctrl/src/extmemctrldcmoadapter.cpp Tue Jul 13 04:01:20 2010 +0530 @@ -0,0 +1,257 @@ +/* +* 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: ExtMemCtrl plug-in adapter for DCMO +* +*/ + + +#include +#include +#include +#include +#include +#include +#include +#include +#include "extmemctrldcmoadapter.h" +#include "hbtextresolversymbian.h" + +_LIT( KdcmoResourceFileName, "deviceupdates_" ); +_LIT( KdcmoResourceFilePath, "z:/resource/qt/translations/" ); +_LIT( KExtMemCtrlProperty, "ExternalMemory"); +_LIT( KExtMemCtrlDescription, "Used to enable/disable the ExtMem"); + + +// Construction and destruction functions + +// ---------------------------------------------------------------------------------------- +// CExtMemCtrlDCMOAdapter::NewL +// ---------------------------------------------------------------------------------------- +CExtMemCtrlDCMOAdapter* CExtMemCtrlDCMOAdapter::NewL(TAny* aParams) + { + CExtMemCtrlDCMOAdapter* self=new(ELeave) CExtMemCtrlDCMOAdapter(aParams); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(); + return self; + } + +// ---------------------------------------------------------------------------------------- +// CExtMemCtrlDCMOAdapter::~CExtMemCtrlDCMOAdapter +// ---------------------------------------------------------------------------------------- +CExtMemCtrlDCMOAdapter::~CExtMemCtrlDCMOAdapter() + { + delete iProperty; + iProperty = NULL; + delete iDescription; + iDescription = NULL; + } + +// ---------------------------------------------------------------------------------------- +// CExtMemCtrlDCMOAdapter::CExtMemCtrlDCMOAdapter +// ---------------------------------------------------------------------------------------- +CExtMemCtrlDCMOAdapter::CExtMemCtrlDCMOAdapter(TAny* aInitParams) +: iInitParams((CDCMOInterface::TDCMOInterfaceInitParams*)aInitParams) + { + // See ConstructL() for initialisation completion. + } + +// ---------------------------------------------------------------------------------------- +// CExtMemCtrlDCMOAdapter::ConstructL +// ---------------------------------------------------------------------------------------- +void CExtMemCtrlDCMOAdapter::ConstructL() +{ + // Safely complete the initialization of the constructed object + if(iInitParams->descriptor) + iProperty = (iInitParams->descriptor)->AllocL(); + else + iProperty = KExtMemCtrlProperty().AllocL(); + iDescription = KExtMemCtrlDescription().AllocL(); +} + +// Implementation of CDCMOInterface + +// ---------------------------------------------------------------------------------------- +// CExtMemCtrlDCMOAdapter::GetDCMOPluginIntAttributeValueL +// Gets the integer attribute value. +// ---------------------------------------------------------------------------------------- +TDCMOStatus CExtMemCtrlDCMOAdapter::GetDCMOPluginIntAttributeValueL(TDCMONode aId, TInt& aValue) +{ + TDCMOStatus status(EDcmoSuccess); + TInt err(KErrNone); + + switch(aId) + { + case EGroup: { + aValue = EHardware; + } + break; + case EAttached: { + aValue = 0; + RFs fsMemoryCard; + err = fsMemoryCard.Connect(); + if ( err != KErrNone ) + { + status = EDcmoFail; + } + TDriveInfo dInfo; + TVolumeInfo vInfo; + TInt error = fsMemoryCard.Drive( dInfo, EDriveF ); + if( error == KErrNone ) + { + error = fsMemoryCard.Volume( vInfo, EDriveF ); + if( error == KErrNone ) + { + aValue = 1; + } + } + fsMemoryCard.Close(); + } + break; + case EEnabled:{ + RFs fsMemoryCard; + err = fsMemoryCard.Connect(); + if ( err != KErrNone ) + { + status = EDcmoFail; + } + + TDriveInfo info; + err=fsMemoryCard.Drive(info, EDriveF); + // DBG_ARGS8( _S8("ExtMem err = %d info.iType = %d"), err, info.iType ); + + if (info.iType == EMediaNotPresent || err != KErrNone ||info.iType == EMediaUnknown ) + { + aValue = 0; + } + else + { + aValue = 1; + } + fsMemoryCard.Close(); + } + break; + case EDenyUserEnable: { + aValue = 1; + } + break; + case ENotifyUser: { + aValue = 1; + } + break; + default : + status = EDcmoNotFound; + } + return status; +} + +// ---------------------------------------------------------------------------------------- +// CExtMemCtrlDCMOAdapter::GetDCMOPluginStrAttributeValueL +// Gets the string attribute value. +// ---------------------------------------------------------------------------------------- +TDCMOStatus CExtMemCtrlDCMOAdapter::GetDCMOPluginStrAttributeValueL(TDCMONode aId, TDes& aStrValue) +{ + TDCMOStatus status(EDcmoSuccess); + switch(aId) + { + case EProperty: aStrValue = *iProperty; + break; + case EDescription: aStrValue = *iDescription; + break; + default : + status = EDcmoNotFound; + } + return status; +} + +// ---------------------------------------------------------------------------------------- +// CExtMemCtrlDCMOAdapter::SetDCMOPluginIntAttributeValueL +// Sets the integer attribute value. +// ---------------------------------------------------------------------------------------- +TDCMOStatus CExtMemCtrlDCMOAdapter::SetDCMOPluginIntAttributeValueL(TDCMONode aId, TInt aValue) +{ + TDCMOStatus status(EDcmoFail); + TInt err(KErrNone); + + switch(aId) + { + case EDenyUserEnable: + break; + case ENotifyUser: + break; + case EEnable: { + RFs fsMemoryCard; + err = fsMemoryCard.Connect(); + if ( err != KErrNone ) + { + return status ; + } + TBuf<255> fsysname; + fsysname.Zero(); + if (!aValue) + { + fsMemoryCard.FileSystemName(fsysname,EDriveF); + TRequestStatus stat; + fsMemoryCard.NotifyDismount(EDriveF, stat, EFsDismountForceDismount); + User::WaitForRequest(stat); + //err= fsMemoryCard.DismountFileSystem(fsysname, EDriveF); + //if (err == KErrNone) + status =EDcmoSuccess; + } + else + { + TInt err(fsMemoryCard.FileSystemName(fsysname,EDriveF)); + if (err != KErrNone && !fsysname.Length()) + { + _LIT( KFmgrFatFSName, "Fat" ); + err = fsMemoryCard.MountFileSystem( KFmgrFatFSName, EDriveF ); + } + status = EDcmoSuccess; + } + fsMemoryCard.Close(); + CRepository *rep = NULL; + TRAPD( err1, rep = CRepository::NewL( KCRUidDeviceManagementInternalKeys )) ; + if(!err1) + rep->Set( KDevManMemCardCtrl, aValue ); + delete rep; + rep = NULL; + } + break; + default : + status = EDcmoNotFound; + } + return status; +} + +// ---------------------------------------------------------------------------------------- +// CExtMemCtrlDCMOAdapter::SetDCMOPluginStrAttributeValueL +// Sets the string attribute value. +// ---------------------------------------------------------------------------------------- +TDCMOStatus CExtMemCtrlDCMOAdapter::SetDCMOPluginStrAttributeValueL(TDCMONode /* aId */, const TDes& /* aStrValue */) +{ + // Nothing to do + TDCMOStatus status(EDcmoNotSupported); + return status; +} + +// ---------------------------------------------------------------------------------------- +// CExtMemCtrlDCMOAdapter::GetLocalizedNameL +// returns the localized plug-in name. +// ---------------------------------------------------------------------------------------- +void CExtMemCtrlDCMOAdapter::GetLocalizedNameL (HBufC*& aLocName) +{ + TBool result = HbTextResolverSymbian::Init(KdcmoResourceFileName, KdcmoResourceFilePath ); + _LIT(KTextExtMemory, "txt_device_update_info_external_memory_card"); + aLocName = HbTextResolverSymbian::LoadL(KTextExtMemory); +}