homesync/contentmanager/cmserver/cmscheduler/src/cmcommsdbnotifier.cpp
changeset 0 7f85d04be362
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homesync/contentmanager/cmserver/cmscheduler/src/cmcommsdbnotifier.cpp	Thu Dec 17 08:52:00 2009 +0200
@@ -0,0 +1,203 @@
+/*
+* Copyright (c) 2008 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:  Checks if wlan scan state changes and informs observer of it
+*
+*/
+
+
+//  Include Files
+#include <commdb.h>
+#include <d32dbms.h>
+#include <WlanCdbCols.h>
+#include <wlanmgmtclient.h>
+#include "cmcommsdbnotifier.h"
+#include "cmscheduler.h"
+#include "msdebug.h"
+
+// Two-phased constructor.
+CCmCommsDbNotifier* CCmCommsDbNotifier::NewL( CCmScheduler& aScheduler )
+    {
+    CCmCommsDbNotifier* self = new (ELeave) CCmCommsDbNotifier( aScheduler );
+
+    CleanupStack::PushL( self );
+    CActiveScheduler::Add( self );
+    self->ConstructL();
+    CleanupStack::Pop();
+    return self;
+}
+
+void CCmCommsDbNotifier::ConstructL()
+    {
+    // open comms database
+    iDb = CCommsDatabase::NewL();
+    // assign notification request
+    RequestNotification();
+    }
+
+// --------------------------------------------------------------------------
+// CCmCommsDbNotifier::CCmCommsDbNotifier
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// --------------------------------------------------------------------------
+//
+CCmCommsDbNotifier::CCmCommsDbNotifier( CCmScheduler& aScheduler ) :
+    CActive( CActive::EPriorityStandard )
+    {
+    LOG(_L("[Cm Scheduler]\t CCmCommsDbNotifier::CCmCommsDbNotifier()"));
+
+    // Scheduler reads scan interval on construction, so we can
+    // assume it's off
+    // now
+    iScanState = 0;
+    iScheduler = &aScheduler;
+    }
+
+// Destructor
+CCmCommsDbNotifier::~CCmCommsDbNotifier()
+    {
+    LOG(_L("[Cm Scheduler]\t CCmCommsDbNotifier::~CCmCommsDbNotifier()"));
+
+    Cancel();
+
+    delete iDb;
+    }
+
+// --------------------------------------------------------------------------
+// CCmCommsDbNotifier::RequestNotification
+// Requests database notification
+// --------------------------------------------------------------------------
+//
+void CCmCommsDbNotifier::RequestNotification()
+    {
+    LOG(_L("[Cm Scheduler]\t CCmCommsDbNotifier::RequestNotification()"));
+    if ( !IsActive() )
+        {
+        iDb->RequestNotification( iStatus );
+        SetActive();
+        }
+    }
+
+
+// --------------------------------------------------------------------------
+// CCmCommsDbNotifier::DoCancel
+// --------------------------------------------------------------------------
+//
+void CCmCommsDbNotifier::DoCancel()
+    {
+    // cancel possible requests
+    iDb->CancelRequestNotification();
+    }
+
+// ---------------------------------------------------------------------------
+// CCmCommsDbNotifier::RunL
+// Called when change in database occurs
+// ---------------------------------------------------------------------------
+//
+void CCmCommsDbNotifier::RunL()
+    {
+    LOG(_L("[Cm Scheduler]\t CCmCommsDbNotifier::RunL()"));
+
+    if ( iScheduler &&
+         iStatus.Int() == RDbNotifier::ECommit &&
+         HasScanStateChangedL() )
+        {
+        iScheduler->WlanScanStateChanged( iScanState );
+        }
+
+    // Assign new request
+    RequestNotification();
+    }
+
+// --------------------------------------------------------------------------
+// CCmCommsDbNotifier::RunError
+// Called if RunL leaves
+// --------------------------------------------------------------------------
+//
+#ifdef _DEBUG
+TInt CCmCommsDbNotifier::RunError( TInt aError )
+#else // _DEBUG
+TInt CCmCommsDbNotifier::RunError( TInt /*aError*/ )
+#endif // _DEBUG
+
+    {
+    TRACE(Print(_L("[Cm Scheduler]\t \
+    CCmCommsDbNotifier::RunError errorcode = %d"), aError));
+
+    return KErrNone;
+    }
+
+// --------------------------------------------------------------------------
+// CCmCommsDbNotifier::HasScanStateChangedL
+// Checks if wlan scanning interval has been changed
+// --------------------------------------------------------------------------
+//
+TBool CCmCommsDbNotifier::HasScanStateChangedL()
+    {
+    LOG(_L("[Cm Scheduler]\t CCmCommsDbNotifier::HasScanStateChangedL"));
+
+    TBool status( EFalse );
+
+    TUint32 scanState = WlanScanStateL();
+
+    if ( iScanState != scanState )
+        {
+        // value changed
+        iScanState = scanState;
+        status = ETrue;
+        }
+    else
+        {
+        // value not changed
+        status = EFalse;
+        }
+
+    return status;
+    }
+
+// --------------------------------------------------------------------------
+// CCmCommsDbNotifier::WlanScanStateL
+// Returns state of wlan scan interval setting
+// --------------------------------------------------------------------------
+//
+TUint32 CCmCommsDbNotifier::WlanScanStateL()
+    {
+    TUint32 scanState( 0 );
+
+#ifndef __WINS__
+
+    // open wlan table
+    CCommsDbTableView* view = iDb->OpenViewMatchingUintLC
+        (
+        TPtrC( WLAN_DEVICE_SETTINGS ),
+        TPtrC( WLAN_DEVICE_SETTINGS_TYPE ), KWlanUserSettings
+        );
+
+    User::LeaveIfError( view->GotoFirstRecord() );
+
+    // read scanning interval
+    view->ReadUintL( TPtrC( WLAN_BG_SCAN_INTERVAL ),
+                     scanState );
+
+    TRACE(Print(_L("[Cm Scheduler]\t CCmCommsDbNotifier::prev: %d, \
+                scan :%d"), iScanState, scanState ));
+
+
+    CleanupStack::PopAndDestroy( view );
+
+#endif
+
+    return scanState;
+    }
+
+// End of file