messagingapp/msgsettings/msginit/src/cmobilesignalstrengthhandler.cpp
changeset 52 12db4185673b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgsettings/msginit/src/cmobilesignalstrengthhandler.cpp	Wed Aug 18 09:45:25 2010 +0300
@@ -0,0 +1,297 @@
+/*
+* 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:   Mobile signal strength handler implementation
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <mmtsy_names.h>
+#include "cmobilesignalstrengthhandler.h"
+#include "msignalstrengthobserver.h"
+#include "debugtraces.h"
+
+// -----------------------------------------------------------------
+// CMobileSignalStrengthHandler::NewL
+// -----------------------------------------------------------------
+CMobileSignalStrengthHandler* CMobileSignalStrengthHandler::NewL( )
+    {
+    CMobileSignalStrengthHandler* self = new (ELeave) CMobileSignalStrengthHandler();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// -----------------------------------------------------------------
+// CMobileSignalStrengthHandler::~CMobileSignalStrengthHandler
+// -----------------------------------------------------------------
+CMobileSignalStrengthHandler::~CMobileSignalStrengthHandler()
+    {
+    Cancel();
+    iMobilePhone.Close();
+    iTelServer.Close();    
+    }
+
+// -----------------------------------------------------------------
+// CMobileSignalStrengthHandler::CMobileSignalStrengthHandler
+// -----------------------------------------------------------------
+CMobileSignalStrengthHandler::CMobileSignalStrengthHandler() :
+    CActive( EPriorityNormal )
+    {
+ 
+    }
+
+// -----------------------------------------------------------------
+// CMobileSignalStrengthHandler::ConstructL
+// -----------------------------------------------------------------
+void CMobileSignalStrengthHandler::ConstructL()
+    {
+    QDEBUG_WRITE("CMobileSignalStrengthHandler::ConstructL - Enter ");    
+    CActiveScheduler::Add( this );
+    InitializeSessionsL();
+    QDEBUG_WRITE("CMobileSignalStrengthHandler::ConstructL - Exit");
+    }
+
+// -----------------------------------------------------------------
+// CMobileSignalStrengthHandler::RunL
+// -----------------------------------------------------------------
+void CMobileSignalStrengthHandler::RunL()
+    {
+    // if operation completed successfully
+    if( iStatus.Int() == KErrNone )
+        {
+        QDEBUG_WRITE_FORMAT("CMobileSignalStrengthHandler::RunL - Signal strength updated ",iSignalStrength );
+        NotifyObserver();
+        }
+        
+    // if observing is still active reissue the notification request    
+    if( iObserving )
+        {
+        QDEBUG_WRITE( "CMobileSignalStrengthHandler::RunL - NotifySignalStrengthChange" );
+        // reissue the request 
+        iMobilePhone.NotifySignalStrengthChange( iStatus, iSignalStrength, iBars );
+        SetActive();
+        }
+    }
+
+// -----------------------------------------------------------------
+// CMobileSignalStrengthHandler::RunError
+// -----------------------------------------------------------------
+TInt CMobileSignalStrengthHandler::RunError( TInt /*aError*/)
+    {
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------
+// CMobileSignalStrengthHandler::DoCancel
+// -----------------------------------------------------------------
+void CMobileSignalStrengthHandler::DoCancel()
+    {
+    if( iObserving )
+        {
+        iMobilePhone.CancelAsyncRequest( EMobilePhoneNotifySignalStrengthChange );
+        }    
+    }
+
+// -----------------------------------------------------------------
+// CMobileSignalStrengthHandler::ObservingSupported
+// -----------------------------------------------------------------
+TBool CMobileSignalStrengthHandler::ObservingSupported()
+    {
+    TUint32 caps;
+    iMobilePhone.GetSignalCaps( caps );
+    return ( caps & RMobilePhone::KCapsNotifySignalStrengthChange );
+    }
+
+// -----------------------------------------------------------------
+// CMobileSignalStrengthHandler::RequestsSupported
+// -----------------------------------------------------------------    
+TBool CMobileSignalStrengthHandler::RequestsSupported()
+    {
+    TUint32 caps;
+    iMobilePhone.GetSignalCaps( caps );
+    return ( caps & RMobilePhone::KCapsGetSignalStrength );
+    }
+
+// -----------------------------------------------------------------
+// CMobileSignalStrengthHandler::SetSignalStrengthObserverL
+// -----------------------------------------------------------------
+void CMobileSignalStrengthHandler::SetSignalStrengthObserverL(
+    MSignalStrengthObserver* aObserver )
+    {
+    // leave if observing is not supported
+    if( !ObservingSupported() )
+        {
+        User::Leave( KErrNotSupported );
+        }
+    iObserver = aObserver;
+    }
+
+// -----------------------------------------------------------------
+// CMobileSignalStrengthHandler::StartObservingL
+// -----------------------------------------------------------------
+void CMobileSignalStrengthHandler::StartObservingL()
+    {
+    // leave if observing is not supported
+    if( !ObservingSupported() )
+        {
+        User::Leave( KErrNotSupported );
+        }        
+    
+    // update signal str
+    TRAPD( err, UpdateSignalStrengthL() );
+    
+    // check operation
+    if( err != KErrNone )
+        {        
+        QDEBUG_WRITE_FORMAT("CMobileSignalStrengthHandler::StartObservingL - Failed to initialize signal strength (err = )",err );
+        iSignalStrength = 0;
+        }
+    else
+        {
+        QDEBUG_WRITE_FORMAT("CMobileSignalStrengthHandler::StartObservingL - Signal strength initialized to ",iSignalStrength );
+        }
+    
+    // update state
+    iObserving = ETrue;
+    
+    // Notify current observer about signal strength
+    NotifyObserver();
+    
+    // request for notification    
+    iMobilePhone.NotifySignalStrengthChange( iStatus, iSignalStrength, iBars );
+    SetActive();                            
+    }
+
+// -----------------------------------------------------------------
+// CMobileSignalStrengthHandler::StopObservingL
+// -----------------------------------------------------------------
+void CMobileSignalStrengthHandler::StopObservingL()
+    {
+    if( !iObserving )
+        {
+        User::Leave( KErrGeneral );
+        }
+        
+    // cancel the request    
+    Cancel();
+        
+    // update state
+    iObserving = EFalse;
+    }
+
+// -----------------------------------------------------------------
+// CMobileSignalStrengthHandler::SignalStrengthL
+// -----------------------------------------------------------------
+TInt CMobileSignalStrengthHandler::SignalStrengthL()
+    {
+    // leave if requests are not supported
+    if( !RequestsSupported() )
+        {
+        User::Leave( KErrNotSupported );
+        }
+    // if we're not observing we have to update the value manually,
+    // otherwise value is up-to-date    
+    if( !iObserving )
+        {
+        UpdateSignalStrengthL();
+        }
+ 
+    // return the current value
+    return iSignalStrength;        
+    }
+    
+// -----------------------------------------------------------------
+// CMobileSignalStrengthHandler::BarValueL
+// -----------------------------------------------------------------
+TInt CMobileSignalStrengthHandler::BarValueL()
+    {
+    // leave if requests are not supported
+    if( !RequestsSupported() )
+        {
+        User::Leave( KErrNotSupported );
+        }
+    if( !iObserving )
+        {
+        UpdateSignalStrengthL();
+        }
+    
+    // return the current value
+    return iBars;      
+    }
+    
+// -----------------------------------------------------------------
+// CMobileSignalStrengthHandler::InitializeSessionsL
+// -----------------------------------------------------------------    
+void CMobileSignalStrengthHandler::InitializeSessionsL()
+    {
+    QDEBUG_WRITE("CMobileSignalStrengthHandler::InitializeSessionsL - Enter");
+  
+    User::LeaveIfError( iTelServer.Connect() );
+     
+    RTelServer::TPhoneInfo phoneInfo;
+    TInt numPhone;
+    
+    // load tsy module and get number of phones
+    User::LeaveIfError( iTelServer.LoadPhoneModule( KMmTsyModuleName ) );
+    User::LeaveIfError( iTelServer.EnumeratePhones( numPhone) );
+  
+    // find the correct phone
+    for (TInt i(0); i < numPhone; i++)
+        {
+        TName tsyName;
+        User::LeaveIfError( iTelServer.GetPhoneInfo( i, phoneInfo ) );
+        User::LeaveIfError( iTelServer.GetTsyName( i,tsyName ) );
+  
+        if ( tsyName.CompareF( KMmTsyModuleName ) == 0)
+            {
+            break;
+            }
+        }
+    // open mobile phone session    
+    User::LeaveIfError( iMobilePhone.Open( iTelServer, phoneInfo.iName ) ); 
+    QDEBUG_WRITE("CMobileSignalStrengthHandler::InitializeSessionsL - Exit");
+    }
+
+// -----------------------------------------------------------------
+// CMobileSignalStrengthHandler::UpdateSignalStrengthL
+// -----------------------------------------------------------------
+void CMobileSignalStrengthHandler::UpdateSignalStrengthL()
+    {
+    // only update the value if requests are supported
+    if( RequestsSupported() )
+        {
+        TRequestStatus status;                
+        iMobilePhone.GetSignalStrength( status, iSignalStrength, iBars );
+        User::WaitForRequest( status );
+        QDEBUG_WRITE_FORMAT("CMobileSignalStrengthHandler::UpdateSignalStrengthL - GetSignalStrength returned with", status.Int() );
+        User::LeaveIfError( status.Int() );
+        }
+    }
+
+// -----------------------------------------------------------------
+// CMobileSignalStrengthHandler::NotifyObserver
+// -----------------------------------------------------------------    
+void CMobileSignalStrengthHandler::NotifyObserver()
+    {
+    // notify observer, if set
+    if( iObserver )
+        {
+        TRAP_IGNORE( iObserver->SignalStrengthAndBarUpdatedL( iSignalStrength, iBars ) );
+        }
+    }
+
+//  End of File