localconnectivityservice/dun/atext/src/DunAtNvramListen.cpp
author hgs
Fri, 25 Jun 2010 16:54:01 +0800
changeset 29 3ae5cb0b4c02
child 52 866b4af7ffbe
permissions -rw-r--r--
201025_07
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
29
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
     1
/*
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
     2
* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
     3
* All rights reserved.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
     8
*
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
     9
* Initial Contributors:
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    11
*
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    12
* Contributors:
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    13
*
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    14
* Description:  AT NVRAM status change listener and notifier
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    15
*
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    16
*/
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    17
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    18
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    19
#include "DunAtNvramListen.h"
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    20
#include "DunDebug.h"
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    21
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    22
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    23
// Two-phased constructor.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    24
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    25
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    26
CDunAtNvramListen* CDunAtNvramListen::NewL( RATExt* aAtCmdExt,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    27
                                            RATExtCommon* aAtCmdExtCommon )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    28
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    29
    CDunAtNvramListen* self = NewLC( aAtCmdExt, aAtCmdExtCommon );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    30
    CleanupStack::Pop( self );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    31
    return self;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    32
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    33
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    34
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    35
// Two-phased constructor.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    36
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    37
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    38
CDunAtNvramListen* CDunAtNvramListen::NewLC( RATExt* aAtCmdExt,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    39
                                             RATExtCommon* aAtCmdExtCommon )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    40
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    41
    CDunAtNvramListen* self = new (ELeave) CDunAtNvramListen(
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    42
        aAtCmdExt,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    43
        aAtCmdExtCommon );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    44
    CleanupStack::PushL( self );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    45
    self->ConstructL();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    46
    return self;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    47
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    48
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    49
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    50
// Destructor.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    51
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    52
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    53
CDunAtNvramListen::~CDunAtNvramListen()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    54
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    55
    FTRACE(FPrint( _L("CDunAtNvramListen::~CDunAtNvramListen()") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    56
    ResetData();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    57
    FTRACE(FPrint( _L("CDunAtNvramListen::~CDunAtNvramListen() complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    58
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    59
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    60
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    61
// Resets data to initial values
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    62
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    63
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    64
void CDunAtNvramListen::ResetData()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    65
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    66
    FTRACE(FPrint( _L("CDunAtNvramListen::ResetData()") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    67
    // APIs affecting this:
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    68
    // IssueRequest()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    69
    Stop();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    70
    // Internal
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    71
    Initialize();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    72
    FTRACE(FPrint( _L("CDunAtNvramListen::ResetData() complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    73
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    74
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    75
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    76
// Starts waiting for NVRAM status changes
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    77
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    78
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    79
TInt CDunAtNvramListen::IssueRequest()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    80
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    81
    FTRACE(FPrint( _L("CDunAtNvramListen::IssueRequest()") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    82
    if ( iNvramHandleState != EDunStateIdle )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    83
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    84
        FTRACE(FPrint( _L("CDunAtNvramListen::IssueRequest() (not ready) complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    85
        return KErrNotReady;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    86
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    87
    if ( !iStarted )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    88
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    89
        iAtCmdExtCommon->GetNvramStatus( iNvramBuffer );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    90
        iAtCmdExt->BroadcastNvramStatusChange( iNvramBuffer );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    91
        iStarted = ETrue;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    92
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    93
    iStatus = KRequestPending;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    94
    iAtCmdExtCommon->ReceiveNvramStatusChange( iStatus, iNvramBuffer );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    95
    SetActive();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    96
    iNvramHandleState = EDunStateNvramListening;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    97
    FTRACE(FPrint( _L("CDunAtNvramListen::IssueRequest() complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    98
    return KErrNone;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    99
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   100
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   101
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   102
// Stops waiting for NVRAM status changes
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   103
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   104
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   105
TInt CDunAtNvramListen::Stop()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   106
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   107
    FTRACE(FPrint( _L("CDunAtNvramListen::Stop()") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   108
    if ( iNvramHandleState != EDunStateNvramListening )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   109
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   110
        FTRACE(FPrint( _L("CDunAtNvramListen::Stop() (not ready) complete" )));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   111
        return KErrNotReady;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   112
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   113
    iAtCmdExtCommon->CancelReceiveNvramStatusChange();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   114
    Cancel();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   115
    iNvramHandleState = EDunStateIdle;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   116
    FTRACE(FPrint( _L("CDunAtNvramListen::Stop() complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   117
    // Note: Don't mark iStarted to EFalse here!
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   118
    return KErrNone;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   119
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   120
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   121
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   122
// CDunAtNvramListen::CDunAtNvramListen
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   123
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   124
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   125
CDunAtNvramListen::CDunAtNvramListen( RATExt* aAtCmdExt,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   126
                                      RATExtCommon* aAtCmdExtCommon ) :
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   127
    CActive( EPriorityHigh ),
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   128
    iAtCmdExt( aAtCmdExt ),
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   129
    iAtCmdExtCommon( aAtCmdExtCommon )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   130
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   131
    Initialize();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   132
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   133
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   134
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   135
// CDunAtNvramListen::ConstructL
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   136
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   137
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   138
void CDunAtNvramListen::ConstructL()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   139
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   140
    FTRACE(FPrint( _L("CDunAtNvramListen::ConstructL()") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   141
    if ( !iAtCmdExt || !iAtCmdExtCommon )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   142
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   143
        User::Leave( KErrGeneral );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   144
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   145
    CActiveScheduler::Add( this );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   146
    FTRACE(FPrint( _L("CDunAtNvramListen::ConstructL() complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   147
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   148
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   149
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   150
// Initializes this class
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   151
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   152
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   153
void CDunAtNvramListen::Initialize()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   154
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   155
    // Don't initialize iAtCmdExt here (it is set through NewL)
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   156
    // Don't initialize iAtCmdExtCommon here (it is set through NewL)
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   157
    iNvramHandleState = EDunStateIdle;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   158
    iStarted = EFalse;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   159
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   160
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   161
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   162
// From class CActive.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   163
// Gets called when NVRAM has changed
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   164
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   165
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   166
void CDunAtNvramListen::RunL()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   167
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   168
    FTRACE(FPrint( _L("CDunAtNvramListen::RunL()") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   169
    iNvramHandleState = EDunStateIdle;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   170
    TInt retTemp = iStatus.Int();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   171
    if ( retTemp != KErrNone )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   172
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   173
        FTRACE(FPrint( _L("CDunAtNvramListen::RunL() (ERROR) complete (%d)"), retTemp ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   174
        return;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   175
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   176
    iAtCmdExt->BroadcastNvramStatusChange( iNvramBuffer );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   177
    IssueRequest();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   178
    FTRACE(FPrint( _L("CDunAtNvramListen::RunL() complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   179
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   180
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   181
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   182
// From class CActive.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   183
// Gets called on cancel
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   184
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   185
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   186
void CDunAtNvramListen::DoCancel()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   187
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   188
    FTRACE(FPrint( _L("CDunAtNvramListen::DoCancel()") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   189
    FTRACE(FPrint( _L("CDunAtNvramListen::DoCancel() complete") ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   190
    }