satengine/satserver/SystemState/src/csatnetworkregstatusmonitor.cpp
author hgs
Fri, 15 Oct 2010 13:21:28 +0300
changeset 53 25b8d29b7c59
parent 33 8d5d7fcf9b59
permissions -rw-r--r--
201041
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
33
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies). 
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description:  Network registration status monitor.
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
hgs
parents:
diff changeset
    19
#include "csatnetworkregstatusmonitor.h"
hgs
parents:
diff changeset
    20
#include "SatLog.h"
hgs
parents:
diff changeset
    21
hgs
parents:
diff changeset
    22
// ======== MEMBER FUNCTIONS ========
hgs
parents:
diff changeset
    23
hgs
parents:
diff changeset
    24
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    25
// C++ default constructor can NOT contain any code, that might leave.
hgs
parents:
diff changeset
    26
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    27
//
hgs
parents:
diff changeset
    28
CSatNetworkRegStatusMonitor::CSatNetworkRegStatusMonitor(
hgs
parents:
diff changeset
    29
    MSatMultiModeApi& aPhone ) :
hgs
parents:
diff changeset
    30
    CActive( CActive::EPriorityStandard ),
hgs
parents:
diff changeset
    31
    iRegistrationStatus( RMobilePhone::ERegistrationUnknown ),
hgs
parents:
diff changeset
    32
    iWaitingRegistrationStatus( EFalse ),
hgs
parents:
diff changeset
    33
    iPhone( aPhone )
hgs
parents:
diff changeset
    34
    {
hgs
parents:
diff changeset
    35
    LOG( SIMPLE, "SATSYSTEMSTATE: \
hgs
parents:
diff changeset
    36
        CSatNetworkRegStatusMonitor::CSatNetworkRegStatusMonitor calling" )
hgs
parents:
diff changeset
    37
hgs
parents:
diff changeset
    38
    // Add to active scheduler.
hgs
parents:
diff changeset
    39
    CActiveScheduler::Add( this );
hgs
parents:
diff changeset
    40
hgs
parents:
diff changeset
    41
    LOG( SIMPLE, "SATSYSTEMSTATE: \
hgs
parents:
diff changeset
    42
        CSatNetworkRegStatusMonitor::CSatNetworkRegStatusMonitor exiting" )
hgs
parents:
diff changeset
    43
    }
hgs
parents:
diff changeset
    44
hgs
parents:
diff changeset
    45
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    46
// Two-phased constructor.
hgs
parents:
diff changeset
    47
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    48
//
hgs
parents:
diff changeset
    49
CSatNetworkRegStatusMonitor* CSatNetworkRegStatusMonitor::NewL(
hgs
parents:
diff changeset
    50
    MSatMultiModeApi& aPhone )
hgs
parents:
diff changeset
    51
    {
hgs
parents:
diff changeset
    52
    LOG( SIMPLE, "SATSYSTEMSTATE: CSatNetworkRegStatusMonitor::NewL calling" )
hgs
parents:
diff changeset
    53
hgs
parents:
diff changeset
    54
    CSatNetworkRegStatusMonitor* self =
hgs
parents:
diff changeset
    55
        new( ELeave ) CSatNetworkRegStatusMonitor( aPhone );
hgs
parents:
diff changeset
    56
hgs
parents:
diff changeset
    57
    LOG( SIMPLE, "SATSYSTEMSTATE: CSatNetworkRegStatusMonitor::NewL exiting" )
hgs
parents:
diff changeset
    58
    return self;
hgs
parents:
diff changeset
    59
    }
hgs
parents:
diff changeset
    60
hgs
parents:
diff changeset
    61
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    62
// Destructor
hgs
parents:
diff changeset
    63
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    64
//
hgs
parents:
diff changeset
    65
CSatNetworkRegStatusMonitor::~CSatNetworkRegStatusMonitor()
hgs
parents:
diff changeset
    66
    {
hgs
parents:
diff changeset
    67
    LOG( SIMPLE, "SATSYSTEMSTATE: \
hgs
parents:
diff changeset
    68
        CSatNetworkRegStatusMonitor::~CSatNetworkRegStatusMonitor calling" )
hgs
parents:
diff changeset
    69
hgs
parents:
diff changeset
    70
    Cancel();
hgs
parents:
diff changeset
    71
hgs
parents:
diff changeset
    72
    LOG( SIMPLE, "SATSYSTEMSTATE: \
hgs
parents:
diff changeset
    73
        CSatNetworkRegStatusMonitor::~CSatNetworkRegStatusMonitor exiting" )
hgs
parents:
diff changeset
    74
    }
hgs
parents:
diff changeset
    75
hgs
parents:
diff changeset
    76
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    77
// Activate monitor.
hgs
parents:
diff changeset
    78
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    79
//
hgs
parents:
diff changeset
    80
void CSatNetworkRegStatusMonitor::Start()
hgs
parents:
diff changeset
    81
    {
hgs
parents:
diff changeset
    82
    LOG( SIMPLE,
hgs
parents:
diff changeset
    83
        "SATSYSTEMSTATE: CSatNetworkRegStatusMonitor::Start calling" )
hgs
parents:
diff changeset
    84
hgs
parents:
diff changeset
    85
#ifndef SAT_USE_DUMMY_TSY
hgs
parents:
diff changeset
    86
    if ( !IsActive() )
hgs
parents:
diff changeset
    87
        {
hgs
parents:
diff changeset
    88
        iRegistrationStatus = RMobilePhone::ERegistrationUnknown;
hgs
parents:
diff changeset
    89
hgs
parents:
diff changeset
    90
        iPhone.GetNetworkRegistrationStatus( iStatus, iRegistrationStatus );
hgs
parents:
diff changeset
    91
        SetActive();
hgs
parents:
diff changeset
    92
        iWaitingRegistrationStatus = ETrue;
hgs
parents:
diff changeset
    93
        LOG( SIMPLE, "SATSYSTEMSTATE:   Started" )
hgs
parents:
diff changeset
    94
        }
hgs
parents:
diff changeset
    95
#else
hgs
parents:
diff changeset
    96
    iRegistrationStatus = RMobilePhone::ERegisteredOnHomeNetwork;
hgs
parents:
diff changeset
    97
    iWaitingRegistrationStatus = EFalse;
hgs
parents:
diff changeset
    98
    LOG( SIMPLE, "SATSYSTEMSTATE:   Set for WINS Emulator" )
hgs
parents:
diff changeset
    99
#endif
hgs
parents:
diff changeset
   100
hgs
parents:
diff changeset
   101
    LOG( SIMPLE,
hgs
parents:
diff changeset
   102
        "SATSYSTEMSTATE: CSatNetworkRegStatusMonitor::Start exiting" )
hgs
parents:
diff changeset
   103
    }
hgs
parents:
diff changeset
   104
hgs
parents:
diff changeset
   105
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   106
// Get current value of network registration status.
hgs
parents:
diff changeset
   107
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   108
//
hgs
parents:
diff changeset
   109
RMobilePhone::TMobilePhoneRegistrationStatus
hgs
parents:
diff changeset
   110
    CSatNetworkRegStatusMonitor::CurrentValue()
hgs
parents:
diff changeset
   111
    {
hgs
parents:
diff changeset
   112
    LOG( SIMPLE,
hgs
parents:
diff changeset
   113
        "SATSYSTEMSTATE: CSatNetworkRegStatusMonitor::CurrentValue calling" )
hgs
parents:
diff changeset
   114
hgs
parents:
diff changeset
   115
    // In case network registration notification failed on startup, we need to 
hgs
parents:
diff changeset
   116
    // check it again, if not registered on home network and we are observing
hgs
parents:
diff changeset
   117
    // changes in registration status ( iWaitingRegistrationStatus == EFalse )
hgs
parents:
diff changeset
   118
    if ( !iWaitingRegistrationStatus &&
hgs
parents:
diff changeset
   119
         ( RMobilePhone::ERegisteredOnHomeNetwork != iRegistrationStatus &&
hgs
parents:
diff changeset
   120
           RMobilePhone::ERegisteredRoaming != iRegistrationStatus ) )
hgs
parents:
diff changeset
   121
        {
hgs
parents:
diff changeset
   122
        LOG( NORMAL, "Not registered -> Going to check value again" )
hgs
parents:
diff changeset
   123
        Cancel(); // Cancel pending request...
hgs
parents:
diff changeset
   124
        Start();  // ... and start again
hgs
parents:
diff changeset
   125
        }
hgs
parents:
diff changeset
   126
hgs
parents:
diff changeset
   127
    // Wait, initial value has not yet been got.
hgs
parents:
diff changeset
   128
    if ( iWaitingRegistrationStatus )
hgs
parents:
diff changeset
   129
        {
hgs
parents:
diff changeset
   130
        LOG( SIMPLE,
hgs
parents:
diff changeset
   131
        "SATSYSTEMSTATE: CSatNetworkRegStatusMonitor::CurrentValue \
hgs
parents:
diff changeset
   132
        iWaitingRegistrationStatus true" )
hgs
parents:
diff changeset
   133
        if ( !iWait.IsStarted() )
hgs
parents:
diff changeset
   134
            {
hgs
parents:
diff changeset
   135
            LOG( SIMPLE,
hgs
parents:
diff changeset
   136
            "SATSYSTEMSTATE: CSatNetworkRegStatusMonitor::CurrentValue \
hgs
parents:
diff changeset
   137
            start iWait" )
hgs
parents:
diff changeset
   138
            iWait.Start();
hgs
parents:
diff changeset
   139
            }
hgs
parents:
diff changeset
   140
        }
hgs
parents:
diff changeset
   141
hgs
parents:
diff changeset
   142
    LOG2( SIMPLE,
hgs
parents:
diff changeset
   143
        "SATSYSTEMSTATE: CSatNetworkRegStatusMonitor::CurrentValue exiting \
hgs
parents:
diff changeset
   144
        (%d)", iRegistrationStatus )
hgs
parents:
diff changeset
   145
    return iRegistrationStatus;
hgs
parents:
diff changeset
   146
    }
hgs
parents:
diff changeset
   147
hgs
parents:
diff changeset
   148
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   149
// CRegistrationMonitor::DoCancel
hgs
parents:
diff changeset
   150
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   151
//
hgs
parents:
diff changeset
   152
void CSatNetworkRegStatusMonitor::DoCancel()
hgs
parents:
diff changeset
   153
    {
hgs
parents:
diff changeset
   154
    LOG( SIMPLE,
hgs
parents:
diff changeset
   155
        "SATSYSTEMSTATE: CSatNetworkRegStatusMonitor::DoCancel calling" )
hgs
parents:
diff changeset
   156
hgs
parents:
diff changeset
   157
    iPhone.CancelAsyncRequest(
hgs
parents:
diff changeset
   158
        EMobilePhoneNotifyNetworkRegistrationStatusChange );
hgs
parents:
diff changeset
   159
    if ( iWait.IsStarted() )
hgs
parents:
diff changeset
   160
        {
hgs
parents:
diff changeset
   161
        LOG( SIMPLE,
hgs
parents:
diff changeset
   162
        "SATSYSTEMSTATE: CSatNetworkRegStatusMonitor::DoCancel stop iWait" )
hgs
parents:
diff changeset
   163
        iWait.AsyncStop();
hgs
parents:
diff changeset
   164
        }
hgs
parents:
diff changeset
   165
hgs
parents:
diff changeset
   166
    LOG( SIMPLE,
hgs
parents:
diff changeset
   167
        "SATSYSTEMSTATE: CSatNetworkRegStatusMonitor::DoCancel exiting" )
hgs
parents:
diff changeset
   168
    }
hgs
parents:
diff changeset
   169
hgs
parents:
diff changeset
   170
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   171
// From class CActive.
hgs
parents:
diff changeset
   172
// Marks status value valid and activates change notifier.
hgs
parents:
diff changeset
   173
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   174
//
hgs
parents:
diff changeset
   175
void CSatNetworkRegStatusMonitor::RunL()
hgs
parents:
diff changeset
   176
    {
hgs
parents:
diff changeset
   177
    const TInt status( iStatus.Int() ); // Asynchronous status
hgs
parents:
diff changeset
   178
    LOG2( SIMPLE,
hgs
parents:
diff changeset
   179
        "SATSYSTEMSTATE: CSatNetworkRegStatusMonitor::RunL calling (%d)",
hgs
parents:
diff changeset
   180
        status )
hgs
parents:
diff changeset
   181
hgs
parents:
diff changeset
   182
    // Restart request
hgs
parents:
diff changeset
   183
    if ( KErrServerBusy == status )
hgs
parents:
diff changeset
   184
        {
hgs
parents:
diff changeset
   185
        iPhone.GetNetworkRegistrationStatus(
hgs
parents:
diff changeset
   186
            iStatus,
hgs
parents:
diff changeset
   187
            iRegistrationStatus );
hgs
parents:
diff changeset
   188
        SetActive();
hgs
parents:
diff changeset
   189
        }
hgs
parents:
diff changeset
   190
    else if ( KErrCancel != status )
hgs
parents:
diff changeset
   191
        {
hgs
parents:
diff changeset
   192
        // (Re)start observing
hgs
parents:
diff changeset
   193
        iPhone.NotifyNetworkRegistrationStatusChange(
hgs
parents:
diff changeset
   194
            iStatus,
hgs
parents:
diff changeset
   195
            iRegistrationStatus );
hgs
parents:
diff changeset
   196
        SetActive();
hgs
parents:
diff changeset
   197
        }
hgs
parents:
diff changeset
   198
    else
hgs
parents:
diff changeset
   199
        {
hgs
parents:
diff changeset
   200
        LOG( SIMPLE, " Request cancelled" )
hgs
parents:
diff changeset
   201
        }
hgs
parents:
diff changeset
   202
hgs
parents:
diff changeset
   203
    // Still waiting first value after start.
hgs
parents:
diff changeset
   204
    if ( iWaitingRegistrationStatus )
hgs
parents:
diff changeset
   205
        {
hgs
parents:
diff changeset
   206
        LOG( SIMPLE, 
hgs
parents:
diff changeset
   207
        "SATSYSTEMSTATE: CSatNetworkRegStatusMonitor::RunL \
hgs
parents:
diff changeset
   208
        iWaitingRegistrationStatus true" )
hgs
parents:
diff changeset
   209
        iWaitingRegistrationStatus = EFalse;
hgs
parents:
diff changeset
   210
        if ( iWait.IsStarted() )
hgs
parents:
diff changeset
   211
            {
hgs
parents:
diff changeset
   212
            LOG( SIMPLE, 
hgs
parents:
diff changeset
   213
            "SATSYSTEMSTATE: CSatNetworkRegStatusMonitor::RunL \
hgs
parents:
diff changeset
   214
            stop iWait" )
hgs
parents:
diff changeset
   215
            iWait.AsyncStop();
hgs
parents:
diff changeset
   216
            }
hgs
parents:
diff changeset
   217
        }
hgs
parents:
diff changeset
   218
hgs
parents:
diff changeset
   219
    LOG2( SIMPLE,
hgs
parents:
diff changeset
   220
        "SATSYSTEMSTATE:   NetworkRegistrationStatus updated: %d",
hgs
parents:
diff changeset
   221
        iRegistrationStatus )
hgs
parents:
diff changeset
   222
hgs
parents:
diff changeset
   223
    LOG( SIMPLE, "SATSYSTEMSTATE: CSatNetworkRegStatusMonitor::RunL exiting" )
hgs
parents:
diff changeset
   224
    }
hgs
parents:
diff changeset
   225
hgs
parents:
diff changeset
   226
// End of file