--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/wlanutilities/cpwlansettingsplugin/src/wlansettings_s60.cpp Tue Aug 31 16:18:40 2010 +0300
@@ -0,0 +1,406 @@
+/*
+* Copyright (c) 2010 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:
+*
+*/
+
+// System includes
+
+#include <internetconnectivitycrkeys.h>
+#include <cmmanager.h>
+
+// User includes
+
+#include "wlansettings.h"
+#include "wlansettings_s60_p.h"
+
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "wlansettings_s60Traces.h"
+#endif
+
+/*!
+ \class CWlanSettingsPrivate
+ \brief CWlanSettingsPrivate is the actual implementation for
+ reading/writing WLAN Settings from/to database.
+*/
+
+// External function prototypes
+
+// Local constants
+/** Seconds per minute. */
+static const TInt KWlanSettingsSecondsInMinute = 60;
+/** Default "Scan Networks" setting. */
+static const TUint KWlanSettingsDefaultScanNetwork =
+ WlanSettings::ScanNetworkAuto;
+/** Default "Power saving" setting. */
+static const TBool KWlanSettingsDefaultPowerSaving = ETrue;
+
+// ======== MEMBER FUNCTIONS ========
+
+/*!
+ Static NewL function for creating CWlanSettingsPrivate object.
+ \return Pointer to CWlanSettingsPrivate object.
+*/
+
+CWlanSettingsPrivate* CWlanSettingsPrivate::NewL(WlanSettings *q_ptr)
+{
+ OstTraceFunctionEntry0(CWLANSETINGPRIVATE_NEWL_ENTRY);
+
+ CWlanSettingsPrivate* impl = new ( ELeave ) CWlanSettingsPrivate(q_ptr);
+ CleanupStack::PushL( impl );
+ impl->ConstructL();
+ CleanupStack::Pop( impl );
+
+ OstTraceFunctionExit0(CWLANSETINGPRIVATE_NEWL_EXIT);
+ return impl;
+}
+
+/*!
+ Second phase Constructor.
+*/
+
+void CWlanSettingsPrivate::ConstructL()
+{
+ OstTraceFunctionEntry0(CWLANSETINGPRIVATE_CONSTRUCTL_ENTRY);
+
+ mSession = CMDBSession::NewL( KCDLatestVersion );
+
+#ifndef __WINS__
+ mWlanMgmtClient = CWlanMgmtClient::NewL();
+#endif
+
+ OstTraceFunctionExit0(CWLANSETINGPRIVATE_CONSTRUCTL_EXIT);
+}
+
+/*!
+ Constructor.
+*/
+
+CWlanSettingsPrivate::CWlanSettingsPrivate(WlanSettings *q_ptr) :
+ q_ptr(q_ptr),
+ mPowerSaving(KWlanSettingsDefaultPowerSaving),
+ mScanInterval(KWlanSettingsDefaultScanNetwork)
+{
+ OstTraceFunctionEntry0(CWLANSETINGPRIVATE_CWLANSETINGPRIVATE_ENTRY);
+ OstTraceFunctionExit0(CWLANSETINGPRIVATE_CWLANSETINGPRIVATE_EXIT);
+}
+
+/*!
+ Destructor.
+*/
+
+CWlanSettingsPrivate::~CWlanSettingsPrivate()
+{
+ OstTraceFunctionEntry0(DUP1_CWLANSETINGPRIVATE_CWLANSETINGPRIVATE_ENTRY);
+
+ delete mSession;
+#ifndef __WINS__
+ delete mWlanMgmtClient;
+#endif
+
+ OstTraceFunctionExit0(DUP1_CWLANSETINGPRIVATE_CWLANSETINGPRIVATE_EXIT);
+}
+
+/*!
+ Function to load the WLAN Settings from CommsDB.
+*/
+
+void CWlanSettingsPrivate::LoadDBSettingsL()
+{
+ OstTraceFunctionEntry0(CWLANSETINGPRIVATE_LOADDBSETTINGSL_ENTRY);
+
+ TBool ownTransaction( EFalse );
+ if ( !mSession->IsInTransaction() ) {
+ ownTransaction = ETrue;
+ mSession->OpenTransactionL();
+ }
+ TMDBElementId tableId = 0;
+
+ tableId = CCDWlanDeviceSettingsRecord::TableIdL( *mSession );
+
+ CCDWlanDeviceSettingsRecord* record = new( ELeave )
+ CCDWlanDeviceSettingsRecord( tableId );
+ CleanupStack::PushL( record );
+
+ record->iWlanDeviceSettingsType = KWlanUserSettings;
+
+ if ( record->FindL( *mSession ) ) {
+ record->LoadL( *mSession );
+ }
+
+ // Read scan interval
+ OstTrace1(
+ TRACE_NORMAL,
+ CWLANSETTINGSPRIVATE_LOADDBSETTINGSL_SCANINTERVAL,
+ "CWlanSettingsPrivate::LoadDBSettingsL ScanInterval;iBgScanInterval=%u",
+ record->iBgScanInterval );
+ OstTrace1(
+ TRACE_NORMAL,
+ CWLANSETTINGSPRIVATE_LOADDBSETTINGSL_SAVEDSCANINTERVAL,
+ "CWlanSettingsPrivate::LoadDBSettingsL SavedScanInterval;iSavedBgScanInterval=%u",
+ record->iSavedBgScanInterval );
+ mScanInterval = record->iSavedBgScanInterval;
+ //Safe check for scan interval, control should not come here.
+ if (mScanInterval > (WlanSettings::ScanNetworkMax
+ * KWlanSettingsSecondsInMinute)) {
+ mScanInterval = WlanSettings::ScanNetworkAuto;
+ }
+
+ // Read power saving mode
+ mPowerSaving = record->iWlanPowerMode;
+ OstTraceExt1(
+ TRACE_NORMAL,
+ CWLANSETTINGSPRIVATE_LOADDBSETTINGSL_POWERSAVE,
+ "CWlanSettingsPrivate::LoadDBSettingsL PowerSave;mPowerSaving=%hhu",
+ mPowerSaving );
+
+ CleanupStack::PopAndDestroy( record );
+
+ if ( ownTransaction ) {
+ mSession->CommitTransactionL();
+ // Rollback operation.
+ }
+
+ //To Load CM Settings.
+ LoadJoinWlanSettingL();
+
+ OstTraceFunctionExit0(CWLANSETINGPRIVATE_LOADDBSETTINGSL_EXIT);
+}
+
+/*!
+ Function to load the Join WLAN networks Setting from CMManager.
+*/
+
+void CWlanSettingsPrivate::LoadJoinWlanSettingL()
+{
+ OstTraceFunctionEntry0(CWLANSETINGPRIVATE_LOADJOINWLANSETTINGL_ENTRY);
+
+ RCmManager CmManager;
+ CmManager.CreateTablesAndOpenL();
+ CleanupClosePushL(CmManager);
+ CmManager.ReadGenConnSettingsL( mCmSettings );
+ CleanupStack::PopAndDestroy( 1 ); //CmManager
+
+ OstTraceFunctionExit0(CWLANSETINGPRIVATE_LOADJOINWLANSETTINGL_EXIT);
+}
+
+/*!
+ Function to write the Join WLAN networks Setting using CMManager.
+*/
+
+void CWlanSettingsPrivate::SaveJoinWlanSettingL(TInt mode)
+{
+ OstTraceFunctionEntry0(CWLANSETINGPRIVATE_SAVEJOINWLANSETTINGL_ENTRY);
+
+ switch ( mode ) {
+ case EJoinWlanKnown:
+ mCmSettings.iUsageOfWlan = ECmUsageOfWlanKnown;
+ break;
+
+ case EJoinWlanManual:
+ mCmSettings.iUsageOfWlan = ECmUsageOfWlanManual;
+ break;
+
+ default:
+ break;
+ }
+
+ RCmManager CmManager;
+ CmManager.CreateTablesAndOpenL();
+ CleanupClosePushL(CmManager);
+ CmManager.WriteGenConnSettingsL( mCmSettings );
+ CleanupStack::PopAndDestroy( 1 );
+
+ OstTraceFunctionExit0(CWLANSETINGPRIVATE_SAVEJOINWLANSETTINGL_EXIT);
+}
+
+/*!
+ Function to get the Join WLAN network setting.
+ \return 0 for Known, 1 for Manual.
+*/
+
+TInt CWlanSettingsPrivate::JoinWlanMode()
+{
+ OstTraceFunctionEntry0(CWLANSETINGPRIVATE_JOINWLANMODE_ENTRY);
+
+ TInt mode = 0;
+
+ switch ( mCmSettings.iUsageOfWlan ) {
+ case ECmUsageOfWlanKnown:
+ mode = EJoinWlanKnown;
+ break;
+
+ case ECmUsageOfWlanManual:
+ mode = EJoinWlanManual;
+ break;
+
+ default:
+ break;
+ }
+
+ OstTraceFunctionExit0(CWLANSETINGPRIVATE_JOINWLANMODE_EXIT);
+ return mode;
+}
+
+/*!
+ Function to write the WLAN Settings to CommsDb.
+*/
+
+void CWlanSettingsPrivate::SaveDBSettingsL(TInt option)
+{
+ OstTraceFunctionEntry0(CWLANSETINGPRIVATE_SAVEDBSETTINGSL_ENTRY);
+
+ TBool ownTransaction( EFalse );
+ if ( !mSession->IsInTransaction() ) {
+ ownTransaction = ETrue;
+ mSession->OpenTransactionL();
+ }
+ TMDBElementId tableId = 0;
+ tableId = CCDWlanDeviceSettingsRecord::TableIdL( *mSession );
+
+ CCDWlanDeviceSettingsRecord* record = new( ELeave )
+ CCDWlanDeviceSettingsRecord( tableId );
+
+ CleanupStack::PushL( record );
+
+ record->iWlanDeviceSettingsType = KWlanUserSettings;
+
+ if ( record->FindL( *mSession ) ) {
+ record->LoadL( *mSession );
+ }
+
+ switch (option) {
+ case EWlanScanInterval:
+ record->iBgScanInterval = mScanInterval;
+ if (!q_ptr->isDevicePowerSavingEnabled()) {
+ record->iSavedBgScanInterval = mScanInterval;
+ }
+ OstTrace1(
+ TRACE_NORMAL,
+ CWLANSETTINGSPRIVATE_SAVEDBSETTINGSL_SCANINTERVAL,
+ "CWlanSettingsPrivate::SaveDBSettingsL ScanInterval;iBgScanInterval=%u",
+ record->iBgScanInterval );
+ OstTrace1(
+ TRACE_NORMAL,
+ CWLANSETTINGSPRIVATE_SAVEDBSETTINGSL_SAVEDSCANINTERVAL,
+ "CWlanSettingsPrivate::SaveDBSettingsL SavedScanInterval;iSavedBgScanInterval=%u",
+ record->iSavedBgScanInterval );
+ break;
+
+ case EWlanPowerSaving:
+ OstTraceExt1(
+ TRACE_NORMAL,
+ CWLANSETTINGSPRIVATE_SAVEDBSETTINGSL_POWERSAVING,
+ "CWlanSettingsPrivate::SaveDBSettingsL PowerSaving;mPowerSaving=%hhu",
+ mPowerSaving );
+
+ record->iWlanPowerMode = mPowerSaving;
+ break;
+
+ default:
+ break;
+ }
+
+ // Whenever settings are modified, iUseDefaultSettings must be set to false.
+ record->iUseDefaultSettings = EFalse;
+
+ record->ModifyL( *mSession );
+
+ CleanupStack::PopAndDestroy( record );
+ if ( ownTransaction ) {
+ mSession->CommitTransactionL();
+ }
+
+#ifndef __WINS__
+ // Notifying WLAN Engine about changes in settings
+ mWlanMgmtClient->NotifyChangedSettings();
+#endif
+
+ OstTraceFunctionExit0(CWLANSETINGPRIVATE_SAVEDBSETTINGSL_EXIT);
+}
+
+/*!
+ Function to get the scan interval.
+ \return Scan interval in minutes.
+*/
+
+TUint CWlanSettingsPrivate::ScanInterval()
+{
+ TUint retVal;
+ if ( mScanInterval == WlanSettings::ScanNetworkAuto ) {
+ retVal = mScanInterval;
+ } else {
+ // Return scan time in minutes
+ retVal = mScanInterval / KWlanSettingsSecondsInMinute;
+ }
+
+ OstTrace1(
+ TRACE_NORMAL,
+ CWLANSETTINGSPRIVATE_SCANINTERVAL,
+ "CWlanSettingsPrivate::ScanInterval;retVal=%u",
+ retVal );
+
+ return retVal;
+}
+
+/*!
+ Function to get Power Saving Option.
+ \return True if Power Saving option is enabled, otherwise False.
+*/
+
+TBool CWlanSettingsPrivate::PowerSaving()
+{
+ OstTraceExt1(
+ TRACE_NORMAL,
+ CWLANSETTINGSPRIVATE_POWERSAVING,
+ "CWlanSettingsPrivate::PowerSaving;mPowerSaving=%hhx",
+ mPowerSaving );
+
+ return mPowerSaving;
+}
+
+/*!
+ Function to set Scan interval.
+ \param interval Scan interval in minutes.
+*/
+
+void CWlanSettingsPrivate::SetScanInterval(TUint interval)
+{
+ OstTraceFunctionEntry0(CWLANSETINGPRIVATE_SETSCANINTERVAL_ENTRY);
+
+ if ( interval == WlanSettings::ScanNetworkAuto ) {
+ mScanInterval = interval;
+ }
+ else {
+ // Scan time stored in seconds
+ mScanInterval = interval * KWlanSettingsSecondsInMinute;
+ }
+
+ OstTraceFunctionExit0(CWLANSETINGPRIVATE_SETSCANINTERVAL_EXIT);
+}
+
+/*!
+ Function to set Power Saving Option.
+ \param powerSavingOption True to enable or false to disable power saving option.
+*/
+
+void CWlanSettingsPrivate::SetPowerSaving(TBool powerSavingOption)
+{
+ OstTraceFunctionEntry0(CWLANSETINGPRIVATE_SETPOWERSAVING_ENTRY);
+
+ mPowerSaving = powerSavingOption;
+
+ OstTraceFunctionExit0(CWLANSETINGPRIVATE_SETPOWERSAVING_EXIT);
+}