connectionmonitoring/connmon/connectionmonitor/src/ConnMonEGprsNotifier.cpp
changeset 0 5a93021fdf25
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectionmonitoring/connmon/connectionmonitor/src/ConnMonEGprsNotifier.cpp	Thu Dec 17 08:55:21 2009 +0200
@@ -0,0 +1,170 @@
+/*
+* Copyright (c) 2006-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:  Active object to listen for EGPRS notifications.
+*
+*/
+
+#include <e32base.h>
+#include <rmmcustomapi.h>
+
+#include "ConnMonEGprsNotifier.h"
+#include "ConnMonBearerNotifier.h"
+#include "log.h"
+
+// -----------------------------------------------------------------------------
+// CConnMonEGprsNotifier::CConnMonEGprsNotifier
+// Notifies when GPRS<-->EGPRS bearer changes.
+// -----------------------------------------------------------------------------
+//
+CConnMonEGprsNotifier::CConnMonEGprsNotifier(
+        CConnMonBearerNotifier* aObserver,
+        RMobilePhone& aMobilePhone )
+        :
+        CActive( EConnMonPriorityNormal ),
+        iObserver( aObserver ),
+        iMobilePhone( aMobilePhone ),
+        iGprsInfo(),
+        iGprsInfoPckg( iGprsInfo )
+    {
+    iEGprsActive = EFalse;
+    }
+
+// -----------------------------------------------------------------------------
+// CConnMonEGprsNotifier::ConstructL
+// -----------------------------------------------------------------------------
+//
+void CConnMonEGprsNotifier::ConstructL()
+    {
+    //LOGENTRFN("CConnMonEGprsNotifier::ConstructL()")
+
+    CActiveScheduler::Add( this );
+    // Open ETel custom API
+    TInt ret = iCustomApi.Open( iMobilePhone );
+
+    if ( ret != KErrNone )
+        {
+        LOGIT1("GPRS Bearer notifier NOT started. CustomAPI.Open() - err <%d>", ret )
+        User::Leave( ret );
+        }
+    LOGIT("Created CConnMonEGprsNotifier")
+
+    //LOGEXITFN("CConnMonEGprsNotifier::ConstructL()")
+    }
+
+// -----------------------------------------------------------------------------
+// CConnMonEGprsNotifier::NewL
+// -----------------------------------------------------------------------------
+//
+CConnMonEGprsNotifier* CConnMonEGprsNotifier::NewL(
+        CConnMonBearerNotifier* aObserver,
+        RMobilePhone& aMobilePhone )
+    {
+    CConnMonEGprsNotifier* self = new( ELeave ) CConnMonEGprsNotifier( aObserver, aMobilePhone );
+
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+
+    return self;
+    }
+
+// Destructor
+CConnMonEGprsNotifier::~CConnMonEGprsNotifier()
+    {
+    Cancel();
+
+    // Close ETel custom API
+    iCustomApi.Close();
+    iObserver = NULL;
+    }
+
+// -----------------------------------------------------------------------------
+// CConnMonEGprsNotifier::Receive
+// Requests a new event (bearer GPRS) from ETel
+// -----------------------------------------------------------------------------
+//
+void CConnMonEGprsNotifier::Receive()
+    {
+    if ( IsActive() )
+        {
+        return;
+        }
+
+    iCustomApi.NotifyEGprsInfoChange( iStatus, iGprsInfoPckg );
+    SetActive();
+    }
+
+// -----------------------------------------------------------------------------
+// CConnMonEGprsNotifier::EGprsActive
+// Returns the latest state of the EGPRS activity
+// -----------------------------------------------------------------------------
+//
+TBool CConnMonEGprsNotifier::EGprsActive()
+    {
+    return iEGprsActive;
+    }
+
+// -----------------------------------------------------------------------------
+// CConnMonEGprsNotifier::DoCancel
+// Cancels the request from ETel.
+// -----------------------------------------------------------------------------
+//
+void CConnMonEGprsNotifier::DoCancel()
+    {
+    if ( IsActive() )
+        {
+        LOGIT("SERVER: Cancel NotifyEGprsInfoChange()")
+        iCustomApi.CancelAsyncRequest( ECustomNotifyEGprsInfoChange );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CConnMonEGprsNotifier::RunL
+// Handles the event that has arrived from ETel
+// -----------------------------------------------------------------------------
+//
+void CConnMonEGprsNotifier::RunL()
+    {
+    //LOGENTRFN("CConnMonEGprsNotifier::RunL()")
+
+    // All RunL():s outside CServer-derived main class MUST NOT LEAVE.
+    // Use TRAPD when needed.
+
+    LOGIT(".")
+    LOGIT1("RunL: CConnMonEGprsNotifier, status %d", iStatus.Int())
+
+    if ( KErrNone != iStatus.Int() )
+        {
+        LOGIT1("ERROR, NotifyEGprsInfoChange FAILED <%d>", iStatus.Int())
+        }
+    else
+        {
+        if ( iGprsInfoPckg().iGprsInfo == RMmCustomAPI::EEdgeGprs )
+            {
+            LOGIT("SERVER: NotifyEGprsInfoChange()--> EGPRS is active")
+            iEGprsActive = ETrue;
+            }
+        else
+            {
+            LOGIT("SERVER: NotifyEGprsInfoChange()--> GPRS is active")
+            iEGprsActive = EFalse;
+            }
+        iObserver->HandleEvent();
+        // New request
+        Receive();
+        }
+    //LOGEXITFN("CConnMonEGprsNotifier::RunL()")
+    }
+
+// End-of-file