networkhandling/networkhandlingengine/NetworkHandlingSrc/CNWNetworkModeMonitor.cpp
changeset 0 ff3b6d0fd310
child 19 7d48bed6ce0c
equal deleted inserted replaced
-1:000000000000 0:ff3b6d0fd310
       
     1 /*
       
     2 * Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies). 
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  This module contains the implementation of CNWNetworkModeMonitor class 
       
    15 *                member functions.
       
    16 *
       
    17 */
       
    18 
       
    19 
       
    20 //  INCLUDE FILES
       
    21 #include    "CNWMessageHandler.h"
       
    22 #include    "CNWNetworkModeMonitor.h"
       
    23 #include    "NWHandlingEngine.h"
       
    24 #include    "NWPanic.pan"
       
    25 #include    "NWLogger.h"
       
    26 
       
    27 
       
    28 
       
    29 // ================= MEMBER FUNCTIONS =========================================
       
    30 
       
    31 // ----------------------------------------------------------------------------
       
    32 // CNWNetworkModeMonitor::CNWNetworkModeMonitor
       
    33 // C++ default constructor can NOT contain any code, that
       
    34 // might leave.
       
    35 // ----------------------------------------------------------------------------
       
    36 //
       
    37 CNWNetworkModeMonitor::CNWNetworkModeMonitor
       
    38         ( 
       
    39         CNWMessageHandler& aOwner, // ref. to class owner
       
    40         RMobilePhone& aPhone,   // ref. to mobile phone
       
    41         TNWInfo& aNetworkInfo, // ref. to network info struct 
       
    42         RMmCustomAPI& aCustomAPI )    //ref. to customAPI
       
    43         : CNWNetworkMonitorBase( aOwner,
       
    44                                  aPhone,
       
    45                                  aNetworkInfo,
       
    46                                  aCustomAPI )
       
    47     {
       
    48     NWLOGSTRING( KNWOBJECT, 
       
    49         "NW: CNWNetworkModeMonitor::CNWNetworkModeMonitor() Begin." );
       
    50     
       
    51     CActiveScheduler::Add( this );
       
    52     
       
    53     NWLOGSTRING( KNWOBJECT,
       
    54         "NW: CNWNetworkModeMonitor::CNWNetworkModeMonitor() End" );
       
    55     }
       
    56 
       
    57 // ----------------------------------------------------------------------------
       
    58 // CNWNetworkModeMonitor::ConstructL
       
    59 // Symbian 2nd phase constructor can leave.
       
    60 // ----------------------------------------------------------------------------
       
    61 //
       
    62 void CNWNetworkModeMonitor::ConstructL()
       
    63     {
       
    64     NWLOGSTRING( KNWOBJECT, 
       
    65         "NW: CNWNetworkModeMonitor::ConstructL() Begin." );
       
    66     
       
    67     RProperty::TType type( RProperty::EInt );
       
    68     TSecurityPolicy readPolicy( ECapability_None );
       
    69     TSecurityPolicy writePolicy( ECapabilityWriteDeviceData );
       
    70     TInt error = RProperty::Define( KPSUidNetworkInfo, 
       
    71                                     KNWTelephonyNetworkMode, 
       
    72                                     type, 
       
    73                                     readPolicy, 
       
    74                                     writePolicy );
       
    75                                     
       
    76     //An error of KErrAlready exists should be ignored, as this only
       
    77     //indicates that some other code int system is also interested in the 
       
    78     //value and has created the property.
       
    79     if ( (error != KErrNone) && (error != KErrAlreadyExists) )
       
    80         {
       
    81         NWLOGSTRING2( KNWOBJECT, 
       
    82             "NW: CNWNetworkModeMonitor::CNWNetworkModeMonitor(), error\
       
    83             code = %d.", error );
       
    84         User::Leave(error);
       
    85         }
       
    86     
       
    87     NWLOGSTRING( KNWOBJECT, 
       
    88         "NW: CNWNetworkModeMonitor::ConstructL() End." );
       
    89     }
       
    90 
       
    91 // ----------------------------------------------------------------------------
       
    92 // CNWNetworkModeMonitor::NewL
       
    93 // Two-phased constructor.
       
    94 // ----------------------------------------------------------------------------
       
    95 //
       
    96 EXPORT_C CNWNetworkModeMonitor* CNWNetworkModeMonitor::NewL( 
       
    97         CNWMessageHandler& aOwner, 
       
    98         RMobilePhone& aPhone, 
       
    99         TNWInfo& aNetworkInfo, 
       
   100         RMmCustomAPI& aCustomAPI )
       
   101     {
       
   102     NWLOGSTRING( KNWOBJECT, "NW: CNWNetworkModeMonitor::NewL() Begin." );
       
   103     CNWNetworkModeMonitor* self = 
       
   104         new( ELeave ) CNWNetworkModeMonitor( aOwner,
       
   105                                              aPhone, 
       
   106                                              aNetworkInfo,
       
   107                                              aCustomAPI );
       
   108     
       
   109     CleanupStack::PushL( self );
       
   110     self->ConstructL();
       
   111     CleanupStack::Pop( self );
       
   112     
       
   113     NWLOGSTRING( KNWOBJECT, "NW: CNWNetworkModeMonitor::NewL() End." );
       
   114     return self;
       
   115     }
       
   116 
       
   117 // Destructor
       
   118 CNWNetworkModeMonitor::~CNWNetworkModeMonitor()
       
   119     {
       
   120     NWLOGSTRING( KNWOBJECT, 
       
   121         "NW: CNWNetworkModeMonitor::~CNWNetworkModeMonitor start." );
       
   122     
       
   123     Cancel();
       
   124     
       
   125     NWLOGSTRING( KNWOBJECT, 
       
   126         "NW: CNWNetworkModeMonitor::~CNWNetworkModeMonitor complete." );
       
   127     }
       
   128 
       
   129 // ----------------------------------------------------------------------------
       
   130 // CNWNetworkModeMonitor::DoCancel
       
   131 // Cancels the pending async. command. 
       
   132 // (other items were commented in a header).
       
   133 // ----------------------------------------------------------------------------
       
   134 //
       
   135 void CNWNetworkModeMonitor::DoCancel()
       
   136     {
       
   137     NWLOGSTRING( KNWREQEND, 
       
   138         "NW: CNWNetworkModeMonitor::DoCancel: \
       
   139         Request RMobilePhone::CancelAsyncRequest(\
       
   140         EMobilePhoneNotifyModeChange)" );
       
   141     
       
   142     iPhone.CancelAsyncRequest( EMobilePhoneNotifyModeChange );
       
   143     
       
   144     NWLOGSTRING( KNWOBJECT, 
       
   145         "NW: CNWNetworkModeMonitor::DoCancel() End." );
       
   146     }
       
   147 
       
   148 // ----------------------------------------------------------------------------
       
   149 // CNWNetworkModeMonitor::RunL
       
   150 // Receives the completion of the pending async. command, saves possible 
       
   151 // values from async. function call and sends notification to CNWSession object.
       
   152 // (other items were commented in a header).
       
   153 // ----------------------------------------------------------------------------
       
   154 //
       
   155 void CNWNetworkModeMonitor::RunL()
       
   156     {
       
   157     NWLOGSTRING2( KNWREQEND, 
       
   158         "CNWNetworkModeMonitor::RunL() Begin, iStatus = %d", iStatus.Int());
       
   159 
       
   160     if ( iStatus != KErrNone )
       
   161         {
       
   162         NWLOGSTRING2( KNWERROR,
       
   163             "NW: CNWNetworkModeMonitor::RunL, Unknown error situation, \
       
   164             iStatus = %d", iStatus.Int() );
       
   165         iIsInitialised = EFalse;  // Ensure we get current net info.
       
   166         }
       
   167     else
       
   168         {
       
   169         UpdateNetworkInfo();
       
   170         UpdateNetworkMode();
       
   171         iOwner.SendMessage ( MNWMessageObserver::ENWMessageNetworkModeChange );
       
   172         iOwner.SendMessage( MNWMessageObserver::ENWMessageNetworkInfoChange );
       
   173         iIsInitialised = ETrue;
       
   174         }
       
   175     // Check if monitor can be restarted.
       
   176     if ( iStatus != KErrCancel && iStatus != KErrServerTerminated )
       
   177         {
       
   178         IssueRequest();
       
   179         }
       
   180     
       
   181     NWLOGSTRING( KNWOBJECT, 
       
   182         "NW: CNWNetworkModeMonitor::RunL() End." );
       
   183     }
       
   184 
       
   185 // ----------------------------------------------------------------------------
       
   186 // CNWNetworkModeMonitor::UpdateNetworkInfo
       
   187 // Updates MMEtel network mode value to NW value and assigns the value to
       
   188 // the TNWInfo structure.
       
   189 // (other items were commented in a header).
       
   190 // ----------------------------------------------------------------------------
       
   191 //
       
   192 void CNWNetworkModeMonitor::UpdateNetworkInfo()
       
   193     {
       
   194     NWLOGSTRING2( KNWREQEND, 
       
   195         "CNWNetworkModeMonitor::UpdateNetworkInfo() Begin, iNetworkMode = %d",
       
   196         iNetworkMode );
       
   197     
       
   198     switch ( iNetworkMode ) 
       
   199         {
       
   200         case RMobilePhone::ENetworkModeUnknown: 
       
   201             { 
       
   202             iNWNetworkInfo.iNetworkMode = ENWModeUnknown; 
       
   203             break;
       
   204             }
       
   205         case RMobilePhone::ENetworkModeUnregistered: 
       
   206             { 
       
   207             iNWNetworkInfo.iNetworkMode = ENWModeUnregistered; 
       
   208             break;
       
   209             }
       
   210         case RMobilePhone::ENetworkModeGsm: 
       
   211             { 
       
   212             iNWNetworkInfo.iNetworkMode = ENWModeGsm; 
       
   213             break; 
       
   214             }
       
   215         case RMobilePhone::ENetworkModeAmps:
       
   216             { 
       
   217             iNWNetworkInfo.iNetworkMode = ENWModeAmps;
       
   218             break; 
       
   219             }
       
   220         case RMobilePhone::ENetworkModeCdma95:
       
   221             { 
       
   222             iNWNetworkInfo.iNetworkMode = ENWModeCdma95;
       
   223             break; 
       
   224             }
       
   225         case RMobilePhone::ENetworkModeCdma2000: 
       
   226             { 
       
   227             iNWNetworkInfo.iNetworkMode = ENWModeCdma2000;
       
   228             break; 
       
   229             }
       
   230         case RMobilePhone::ENetworkModeWcdma:
       
   231             { 
       
   232             iNWNetworkInfo.iNetworkMode = ENWModeWcdma;
       
   233             break; 
       
   234             }
       
   235         case RMobilePhone::ENetworkModeTdcdma:
       
   236             { 
       
   237             iNWNetworkInfo.iNetworkMode = ENWModeTdcdma;
       
   238             break; 
       
   239             }
       
   240         default: 
       
   241             { 
       
   242             iNWNetworkInfo.iNetworkMode = ENWModeUnknown;
       
   243             __ASSERT_DEBUG( !iNetworkMode, Panic( ENWPanicInvalidMode ) );
       
   244             }
       
   245         }
       
   246     
       
   247     NWLOGSTRING( KNWOBJECT, 
       
   248         "NW: CNWNetworkModeMonitor::UpdateNetworkInfo() End." );
       
   249     }
       
   250 
       
   251 // ----------------------------------------------------------------------------
       
   252 // CNWNetworkModeMonitor::IssueRequest
       
   253 // Executes the async. NotifyModeChange function.
       
   254 // If the network mode monitor is not yet initialised, gets the initial
       
   255 // mode with sync. GetCurrentModen function. Then starts monitoring
       
   256 // the mode changes.
       
   257 // (other items were commented in a header).
       
   258 // ----------------------------------------------------------------------------
       
   259 void CNWNetworkModeMonitor::IssueRequest()
       
   260     {
       
   261     NWLOGSTRING( KNWOBJECT, 
       
   262         "NW: CNWNetworkModeMonitor::IssueRequest() Begin." );
       
   263     
       
   264     if ( !IsActive() )
       
   265         {
       
   266          // Start monitoring mode changes.
       
   267         NWLOGSTRING( KNWREQOUT, 
       
   268             "NW: CNWNetworkModeMonitor::IssueRequest: Request RMobilePhone::\
       
   269             NotifyModeChange" );
       
   270         iPhone.NotifyModeChange( iStatus, iNetworkMode );
       
   271         SetActive();
       
   272         
       
   273         // Get initial value for the mode, if not initialised yet.
       
   274         if ( !iIsInitialised )
       
   275             {
       
   276             iIsInitialised = ETrue;
       
   277             TInt error = iPhone.GetCurrentMode( iNetworkMode );
       
   278             if ( error ) 
       
   279                 {
       
   280                 NWLOGSTRING2( KNWERROR, 
       
   281                     "NW: CNWNetworkModeMonitor::IssueRequest > RMobilePhone::\
       
   282                     GetCurrentMode, ErrorCode = %d", error );
       
   283                 return;
       
   284                 }
       
   285             else
       
   286                 {
       
   287                 UpdateNetworkMode();
       
   288                 NWLOGSTRING2( KNWREQEND, "CNWNetworkModeMonitor::IssueRequest(), iNetworkMode = %d", iNetworkMode );
       
   289                 }
       
   290             }
       
   291         }
       
   292     else 
       
   293         {
       
   294         NWLOGSTRING( KNWERROR, 
       
   295             "NW: CNWNetworkModeMonitor::IssueRequest: Already active" );
       
   296         }
       
   297     
       
   298     NWLOGSTRING( KNWOBJECT, 
       
   299         "NW: CNWNetworkModeMonitor::IssueRequest() End." );
       
   300     }
       
   301 
       
   302 // ----------------------------------------------------------------------------
       
   303 // CNWNetworkModeMonitor::UpdateNetworkModeL
       
   304 // Update networkMode PS key
       
   305 // ----------------------------------------------------------------------------
       
   306 void CNWNetworkModeMonitor::UpdateNetworkMode()
       
   307     {
       
   308     NWLOGSTRING( KNWOBJECT, 
       
   309         "NW: CNWNetworkModeMonitor::UpdateNetworkMode() Begin." );
       
   310     
       
   311     TInt networkMode( ENWNetworkModeUnknown );
       
   312 
       
   313     switch ( iNetworkMode ) 
       
   314         {
       
   315         case RMobilePhone::ENetworkModeUnknown:
       
   316         case RMobilePhone::ENetworkModeUnregistered:
       
   317             {
       
   318             networkMode = ENWNetworkModeUnknown;
       
   319             break;
       
   320             }
       
   321         case RMobilePhone::ENetworkModeGsm:
       
   322             { 
       
   323             networkMode = ENWNetworkModeGsm;
       
   324             break; 
       
   325             }
       
   326         case RMobilePhone::ENetworkModeAmps:
       
   327         case RMobilePhone::ENetworkModeCdma95:
       
   328         case RMobilePhone::ENetworkModeCdma2000:
       
   329             { 
       
   330             networkMode = ENWNetworkModeCdma;
       
   331             break;
       
   332             }
       
   333         case RMobilePhone::ENetworkModeWcdma:
       
   334         case RMobilePhone::ENetworkModeTdcdma:
       
   335             { 
       
   336             networkMode = ENWNetworkModeWcdma;
       
   337             break;
       
   338             }
       
   339         default:
       
   340             {
       
   341             networkMode = ENWNetworkModeUnknown;
       
   342             __ASSERT_DEBUG( !iNetworkMode, Panic( ENWPanicInvalidMode ) );
       
   343             }
       
   344         }
       
   345 
       
   346     TInt err = RProperty::Set( 
       
   347             KPSUidNetworkInfo, KNWTelephonyNetworkMode, networkMode );
       
   348 
       
   349     if ( err != KErrNone )
       
   350         {
       
   351         NWLOGSTRING2( KNWOBJECT, 
       
   352             "NW: CNWNetworkModeMonitor::UpdateNetworkMode(), error code = \
       
   353             %d.", err );
       
   354         
       
   355         RProperty::Delete( KPSUidNetworkInfo, KNWTelephonyNetworkMode );
       
   356         } 
       
   357     else
       
   358         {
       
   359         NWLOGSTRING( KNWREQIN, 
       
   360             "NW: CNWNetworkModeMonitor::RunL: RProperty::Set() called" );
       
   361         }
       
   362     
       
   363     NWLOGSTRING( KNWOBJECT, 
       
   364         "NW: CNWNetworkModeMonitor::UpdateNetworkMode() End." );
       
   365     }
       
   366 
       
   367 // ----------------------------------------------------------------------------
       
   368 // CNWNetworkModeMonitor::RunError
       
   369 // ----------------------------------------------------------------------------
       
   370 //
       
   371 TInt CNWNetworkModeMonitor::RunError( TInt /*aError*/ )
       
   372     {
       
   373     NWLOGSTRING( KNWERROR, "NW:CNWNetworkModeMonitor::RunL() Called\
       
   374         : rproperty::set error" );
       
   375    
       
   376     return KErrNone;
       
   377     }
       
   378 
       
   379 //  End of File