adaptationlayer/systemstatemanageradaptation/ssm_emergencycallrf_adaptation_dll/src/ssm_emergencycallrf_trcommand.cpp
changeset 5 8ccc39f9d787
child 7 fa67e03b87df
equal deleted inserted replaced
4:510c70acdbf6 5:8ccc39f9d787
       
     1 /*
       
     2 * ==============================================================================
       
     3 *  Name:           ssm_emergencycallrf_trcommand.cpp
       
     4 *  Part of:        SSMA EmergencyCallRfAdaptation
       
     5 *  Interface:      N/A
       
     6 *  Description:    Implementation of CEmergencyCallRfTrCommand class
       
     7 *  %version:       1 %
       
     8 *  %date_modified: Tue Dec 29 15:38:38 2009 %
       
     9 *
       
    10 * Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
       
    11 * All rights reserved.
       
    12 * This component and the accompanying materials are made available
       
    13 * under the terms of the License "Symbian Foundation License v1.0"
       
    14 * which accompanies this distribution, and is available
       
    15 * at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
       
    16 *
       
    17 * Initial Contributors:
       
    18 * Nokia Corporation - initial contribution.
       
    19 *
       
    20 * Contributors:
       
    21 *
       
    22 * Description:
       
    23 * Implementation of ssm_emergencycallrf_adaptation
       
    24 */
       
    25 // INCLUDE FILES
       
    26 #include "OstTraceDefinitions.h" 
       
    27 #ifdef OST_TRACE_COMPILER_IN_USE 
       
    28 #include "ssm_emergencycallrf_trcommandtraces.h"
       
    29 #endif
       
    30 #include <ssm/startupadaptationcommands.h>
       
    31 #include <mceisi.h>
       
    32 #include <tisi.h>
       
    33 #include <pn_const.h>
       
    34 #include "ssm_emergencycallrf_trcommand.h"
       
    35 #include "sa_common_isc_service.h"
       
    36 #include "sa_common_trace.h"
       
    37 
       
    38 // EXTERNAL DATA STRUCTURES
       
    39 
       
    40 // EXTERNAL FUNCTION PROTOTYPES
       
    41 
       
    42 // CONSTANTS
       
    43 // MACROS
       
    44 
       
    45 // LOCAL CONSTANTS AND MACROS
       
    46 
       
    47 // MODULE DATA STRUCTURES
       
    48 
       
    49 // LOCAL FUNCTION PROTOTYPES
       
    50 
       
    51 // FORWARD DECLARATIONS
       
    52 class CEmergencyCallRfAdaptation;
       
    53 
       
    54 // ============================= LOCAL FUNCTIONS ===============================
       
    55 // ============================ MEMBER FUNCTIONS ===============================
       
    56 
       
    57 // -----------------------------------------------------------------------------
       
    58 // CEmergencyCallRfTrCommand::TransactionId
       
    59 // -----------------------------------------------------------------------------
       
    60 //
       
    61 TUint8 CEmergencyCallRfTrCommand::TransactionId() const
       
    62     {
       
    63     OstTrace1( TRACE_NORMAL, CEMERGENCYCALLRFTRCOMMAND_TRANSACTIONID_1,
       
    64                "SSMA # CEmergencyCallRfTrCommand::TransactionId - return 0x%x",
       
    65                iTransactionId );
       
    66     INTERNAL_TRACE((_L("SSMA # CEmergencyCallRfTrCommand::TransactionId - return 0x%x"),
       
    67                        iTransactionId));
       
    68 
       
    69     return iTransactionId;
       
    70     }
       
    71 
       
    72 
       
    73 // -----------------------------------------------------------------------------
       
    74 // CEmergencyCallRfTrCommand::TransactionState
       
    75 // -----------------------------------------------------------------------------
       
    76 //
       
    77 TUint8 CEmergencyCallRfTrCommand::TransactionState() const
       
    78     {
       
    79     OstTrace1( TRACE_NORMAL, CEMERGENCYCALLRFTRCOMMAND_TRANSACTIONSTATE_1,
       
    80                "SSMA # CEmergencyCallRfTrCommand::iTransactionState - return 0x%02x",
       
    81                iTransactionState );
       
    82     INTERNAL_TRACE ((_L("SSMA # CEmergencyCallRfTrCommand::iTransactionState - return 0x%02x"),
       
    83                         iTransactionState));
       
    84 
       
    85     return iTransactionState;
       
    86     }
       
    87 
       
    88 
       
    89 // -----------------------------------------------------------------------------
       
    90 // CEmergencyCallRfTrCommand::NewL
       
    91 // -----------------------------------------------------------------------------
       
    92 //
       
    93 CEmergencyCallRfTrCommand* CEmergencyCallRfTrCommand::NewL( CEmergencyCallRfAdaptation &aAdaptation,
       
    94                                                             TUint8 aTransactionId )
       
    95     {
       
    96     OstTraceExt2( TRACE_NORMAL, CEMERGENCYCALLRFTRCOMMAND_NEWL_1,
       
    97                   "CEmergencyCallRfTrCommand::NewL(0x%x, %d)",
       
    98                   (TUint)&aAdaptation, aTransactionId);
       
    99     INTERNAL_TRACE((_L("SSMA # CEmergencyCallRfTrCommand::NewL(0x%x, %d)"),
       
   100                         &aAdaptation, aTransactionId));
       
   101 
       
   102     CEmergencyCallRfTrCommand* self = new(ELeave) CEmergencyCallRfTrCommand( aAdaptation, aTransactionId);
       
   103         
       
   104     OstTrace1( TRACE_NORMAL, CEMERGENCYCALLRFTRCOMMAND_NEWL_2,
       
   105                "SSMA # CEmergencyCallRfTrCommand::NewL() - return 0x%x",
       
   106                self );
       
   107     INTERNAL_TRACE((_L("SSMA # CEmergencyCallRfTrCommand::NewL() - return 0x%x"),
       
   108                        self));
       
   109 
       
   110     return self;
       
   111     }
       
   112 
       
   113 
       
   114 // -----------------------------------------------------------------------------
       
   115 // CEmergencyCallRfTrCommand::CEmergencyCallRfTrCommand
       
   116 // -----------------------------------------------------------------------------
       
   117 //
       
   118 CEmergencyCallRfTrCommand::CEmergencyCallRfTrCommand( CEmergencyCallRfAdaptation &aAdaptation,
       
   119                                                       TUint8 aTransactionId )
       
   120     : iAdaptation(aAdaptation)
       
   121     , iTransactionId( aTransactionId )
       
   122     , iTransactionState( EMERGENCYCALLRF_TR_INIT )
       
   123     {
       
   124     OstTraceExt2( TRACE_NORMAL, CEMERGENCYCALLRFTRCOMMAND_CEMERGENCYCALLRFTRCOMMAND_1,
       
   125                   "SSMA # CEmergencyCallRfTrCommand::CEmergencyCallRfTrCommand(0x%x ,%d)",
       
   126                   (TUint)&aAdaptation, aTransactionId );
       
   127     INTERNAL_TRACE((_L("SSMA # CEmergencyCallRfTrCommand::CEmergencyCallRfTrCommand(0x%x ,%d)"),
       
   128                        &aAdaptation, aTransactionId ));
       
   129 
       
   130     OstTrace0( TRACE_NORMAL, CEMERGENCYCALLRFTRCOMMAND_CEMERGENCYCALLRFTRCOMMAND_2,
       
   131                "SSMA # CEmergencyCallRfTrCommand::CEmergencyCallRfTrCommand - return void" );
       
   132     INTERNAL_TRACE((_L("SSMA # CEmergencyCallRfTrCommand::CEmergencyCallRfTrCommand - return void")));
       
   133     }
       
   134 
       
   135 
       
   136 // -----------------------------------------------------------------------------
       
   137 // CEmergencyCallRfTrCommand::~CEmergencyCallRfTrCommand
       
   138 // -----------------------------------------------------------------------------
       
   139 //
       
   140 CEmergencyCallRfTrCommand::~CEmergencyCallRfTrCommand()
       
   141     {
       
   142     OstTrace0( TRACE_NORMAL, CEMERGENCYCALLRFTRCOMMAND_CEMERGENCYCALLRFTRCOMMAND_D1,
       
   143                "SSMA # CEmergencyCallRfTrCommand::~CEmergencyCallRfTrCommand - return void" );
       
   144     INTERNAL_TRACE((_L("SSMA # CEmergencyCallRfTrCommand::~CEmergencyCallRfTrCommand - return void")));
       
   145     }
       
   146 
       
   147 
       
   148 // -----------------------------------------------------------------------------
       
   149 // CEmergencyCallRfTrCommand::ProcessMessageL  
       
   150 // -----------------------------------------------------------------------------
       
   151 //
       
   152 void CEmergencyCallRfTrCommand::ProcessMessageL( const TInt aCommandId, TDesC8 &aData )
       
   153     {
       
   154     OstTraceExt2( TRACE_NORMAL, CEMERGENCYCALLRFTRCOMMAND_PROCESSMESSAGE_1,
       
   155                "SSMA # CEmergencyCallRfTrCommand::ProcessMessageL(0x%x, 0x%x)",
       
   156                aCommandId, (TUint)&aData );
       
   157     INTERNAL_TRACE((_L("SSMA # CEmergencyCallRfTrCommand::ProcessMessageL(0x%x,0x%x)"),
       
   158                        aCommandId, (TUint)&aData ));
       
   159 
       
   160     switch ( iTransactionState )
       
   161         {
       
   162         case EMERGENCYCALLRF_TR_INIT:
       
   163             {
       
   164             OstTrace0( TRACE_NORMAL, CEMERGENCYCALLRFTRCOMMAND_PROCESSMESSAGE_2,
       
   165                        "SSMA # CEmergencyCallRfTrCommand::ProcessMessageL - EMERGENCYCALLRF_TR_INIT" );
       
   166             INTERNAL_TRACE((_L("SSMA # CEmergencyCallRfTrCommand::ProcessMessageL - EMERGENCYCALLRF_TR_INIT")));
       
   167 
       
   168             // This is the new transaction, so update the state value
       
   169             iTransactionState = EMERGENCYCALLRF_TR_ONGOING;
       
   170 
       
   171             switch (aCommandId)
       
   172                 {
       
   173                 case StartupAdaptation::EActivateRfForEmergencyCall:
       
   174                     {
       
   175                     //Build up the isi message
       
   176                     MCE_RF_STATE_REQL( MCE_RF_ON );
       
   177                     }
       
   178                     break;
       
   179 
       
   180                 case StartupAdaptation::EDeactivateRfAfterEmergencyCall:
       
   181                     {
       
   182                     //Build up the isi message
       
   183                     MCE_RF_STATE_REQL( MCE_RF_OFF );
       
   184                     }
       
   185                     break;
       
   186 
       
   187                 default:
       
   188                     {
       
   189                     OstTrace0( TRACE_NORMAL, CEMERGENCYCALLRFTRCOMMAND_PROCESSMESSAGE_3,
       
   190                                "SSMA - CEmergencyCallRfTrCommand::ProcessMessageL - Wrong command->Transaction failed" );
       
   191                     ASSERT_ALWAYS_TRACE((_L("SSMA - CEmergencyCallRfTrCommand::ProcessMessageL - Wrong command->Transaction failed")));
       
   192                     iTransactionState = EMERGENCYCALLRF_TR_FAILED;
       
   193                     User::Leave( KErrGeneral );
       
   194                     }
       
   195                     break;
       
   196                 }
       
   197             }
       
   198             break;
       
   199 
       
   200         case EMERGENCYCALLRF_TR_ONGOING:
       
   201             {
       
   202             OstTrace0( TRACE_NORMAL, CEMERGENCYCALLRFTRCOMMAND_PROCESSMESSAGE_4,
       
   203                        "SSMA # CEmergencyCallRfTrCommand::ProcessMessageL - EMERGENCYCALLRF_TR_ONGOING" );
       
   204             INTERNAL_TRACE((_L("SSMA - CEmergencyCallRfTrCommand::ProcessMessageL - EMERGENCYCALLRF_TR_ONGOING")));
       
   205 
       
   206             //Parse the received response
       
   207             ParseMCE_RF_STATE_RESPL( aData );
       
   208             }
       
   209             break; 
       
   210 
       
   211         default:
       
   212             {
       
   213             ASSERT_ALWAYS_TRACE((_L("CEmergencyCallRfTrCommand::ProcessMessageL - Wrong state->Transaction failed")));
       
   214             iTransactionState = EMERGENCYCALLRF_TR_FAILED;
       
   215             User::Leave( KErrGeneral );
       
   216             break;
       
   217             }
       
   218         }
       
   219 
       
   220     OstTrace0( TRACE_NORMAL, CEMERGENCYCALLRFTRCOMMAND_PROCESSMESSAGE_5,
       
   221                "SSMA # CEmergencyCallRfTrCommand::ProcessMessageL - return void" );
       
   222     INTERNAL_TRACE((_L("SSMA # CEmergencyCallRfTrCommand::ProcessMessageL - return void")));
       
   223     }
       
   224 
       
   225 
       
   226 // -----------------------------------------------------------------------------
       
   227 // CEmergencyCallRfTrCommand::MCE_RF_STATE_REQL
       
   228 // -----------------------------------------------------------------------------
       
   229 //
       
   230 void CEmergencyCallRfTrCommand::MCE_RF_STATE_REQL( TUint8 aRequestInfo )
       
   231     {
       
   232     OstTrace1( TRACE_NORMAL, CEMERGENCYCALLRFTRCOMMAND_MCE_RF_STATE_REQL_1,
       
   233                "SSMA # CEmergencyCallRfTrCommand::MCE_RF_STATE_REQL(0x%x)", aRequestInfo );
       
   234     INTERNAL_TRACE((_L( "SSMA # CEmergencyCallRfTrCommand::MCE_RF_STATE_REQL(0x%x)"), aRequestInfo));
       
   235 
       
   236     /* Create MCE_RF_STATE_REQ message */
       
   237     TBuf8<SIZE_MCE_RF_STATE_REQ> msgData;
       
   238 
       
   239     msgData.Append( iTransactionId );                   // Transaction Id
       
   240     msgData.Append( MCE_RF_STATE_REQ );                 // Message Id
       
   241     msgData.Append( aRequestInfo );                     // Request info high bits
       
   242     msgData.Append( 0x00 );                             // Filler
       
   243 
       
   244     /* Send ISI message */
       
   245     iAdaptation.SendIsiMessageL( msgData );
       
   246 
       
   247     OstTrace0( TRACE_NORMAL, CEMERGENCYCALLRFTRCOMMAND_MCE_RF_STATE_REQL_3,
       
   248                "SSMA # CEmergencyCallRfTrCommand::MCE_RF_STATE_REQL - return void" );
       
   249     INTERNAL_TRACE((_L( "SSMA # CEmergencyCallRfTrCommand::MCE_RF_STATE_REQL - return void")));
       
   250     }
       
   251 
       
   252 
       
   253 // -----------------------------------------------------------------------------
       
   254 // CEmergencyCallRfTrCommand::ParseMCE_RF_STATE_RESPL
       
   255 // ----------------------------------------------------------------------------- 
       
   256 void  CEmergencyCallRfTrCommand::ParseMCE_RF_STATE_RESPL( TDesC8 &aData )
       
   257     {
       
   258     OstTrace1( TRACE_NORMAL, CEMERGENCYCALLRFTRCOMMAND_MCE_RF_STATE_RESP_1,
       
   259                "SSMA # CEmergencyCallRfTrCommand::ParseMCE_RF_STATE_RESPL() - aData is: (%x)",
       
   260                &aData );
       
   261     INTERNAL_TRACE((_L("SSMA # CEmergencyCallRfTrCommand::ParseMCE_RF_STATE_RESPL() - aData is: (%x)"),
       
   262                         &aData));
       
   263 
       
   264     TInt   errorCode(KErrNone);
       
   265     TUint8 status( 0 );
       
   266 
       
   267     TIsiReceiveC isiMsg( aData );
       
   268 
       
   269     // start parsing the message
       
   270 
       
   271     //Read status
       
   272     status = isiMsg.Get8bit( ISI_HEADER_SIZE + 
       
   273                               MCE_RF_STATE_RESP_OFFSET_STATUS );
       
   274 
       
   275     OstTrace1( TRACE_NORMAL, CEMERGENCYCALLRFTRCOMMAND_MCE_RF_STATE_RESP_2,
       
   276                "SSMA # CEmergencyCallRfTrCommand::ParseMCE_RF_STATE_RESPL() - Status(%d)",
       
   277                status );
       
   278     INTERNAL_TRACE((_L("SSMA # CEmergencyCallRfTrCommand::ParseMCE_RF_STATE_RESPL() - Status(%d)"),
       
   279                         status));
       
   280 
       
   281     switch( status )
       
   282         {
       
   283         case MCE_OK: // 0
       
   284             { 
       
   285             OstTrace0( TRACE_NORMAL, CEMERGENCYCALLRFTRCOMMAND_MCE_RF_STATE_RESP_3,
       
   286                        "SSMA # CEmergencyCallRfTrCommand::ParseMCE_RF_STATE_RESPL() - Status = MCE_OK" );
       
   287             INTERNAL_TRACE((_L("SSMA # CEmergencyCallRfTrCommand::ParseMCE_RF_STATE_RESPL() - Status = MCE_OK")));
       
   288             errorCode = KErrNone;
       
   289             iTransactionState = EMERGENCYCALLRF_TR_COMPLETED;
       
   290             }
       
   291             break;
       
   292 
       
   293         case MCE_FAIL: // 0x01
       
   294             {
       
   295             OstTrace0( TRACE_NORMAL, CEMERGENCYCALLRFTRCOMMAND_MCE_RF_STATE_RESP_4,
       
   296                        "SSMA # CEmergencyCallRfTrCommand::ParseMCE_RF_STATE_RESPL() - Status = MCE_FAIL" );
       
   297             INTERNAL_TRACE((_L("SSMA # CEmergencyCallRfTrCommand::ParseMCE_RF_STATE_RESPL() - Status = MCE_FAIL")));
       
   298             errorCode = KErrNotFound;
       
   299             iTransactionState = EMERGENCYCALLRF_TR_FAILED;
       
   300             }
       
   301             break;
       
   302 
       
   303         case MCE_ALREADY_ACTIVE: // 0x06
       
   304             {
       
   305             OstTrace0( TRACE_NORMAL, CEMERGENCYCALLRFTRCOMMAND_MCE_RF_STATE_RESP_5,
       
   306                        "SSMA # CEmergencyCallRfTrCommand::ParseMCE_RF_STATE_RESPL() - Status = MCE_ALREADY_ACTIVE" );
       
   307             INTERNAL_TRACE((_L("SSMA # CEmergencyCallRfTrCommand::ParseMCE_RF_STATE_RESPL() - Status = MCE_ALREADY_ACTIVE")));
       
   308             errorCode = KErrArgument;
       
   309             iTransactionState = EMERGENCYCALLRF_TR_FAILED;
       
   310             }
       
   311             break;
       
   312 
       
   313         case MCE_TRANSITION_ONGOING: // 0x16
       
   314             {
       
   315             OstTrace0( TRACE_NORMAL, CEMERGENCYCALLRFTRCOMMAND_MCE_RF_STATE_RESP_6,
       
   316                        "SSMA # CEmergencyCallRfTrCommand::ParseMCE_RF_STATE_RESPL() - Status = MCE_TRANSITION_ONGOING" );
       
   317             INTERNAL_TRACE((_L("SSMA # CEmergencyCallRfTrCommand::ParseMCE_RF_STATE_RESPL() - Status = MCE_TRANSITION_ONGOING")));
       
   318             errorCode = KErrServerBusy;
       
   319             iTransactionState = EMERGENCYCALLRF_TR_FAILED;
       
   320             }
       
   321             break;
       
   322 
       
   323         case MCE_RESTART_REQUIRED: // 0x17
       
   324             {
       
   325             OstTrace0( TRACE_NORMAL, CEMERGENCYCALLRFTRCOMMAND_MCE_RF_STATE_RESP_7,
       
   326                        "SSMA # CEmergencyCallRfTrCommand::ParseMCE_RF_STATE_RESPL() - Status = MCE_RESTART_REQUIRED" );
       
   327             INTERNAL_TRACE((_L("SSMA # CEmergencyCallRfTrCommand::ParseMCE_RF_STATE_RESPL() - Status = MCE_RESTART_REQUIRED")));
       
   328             errorCode = KErrCompletion;
       
   329             iTransactionState = EMERGENCYCALLRF_TR_FAILED;
       
   330             }
       
   331             break;
       
   332 
       
   333         default:
       
   334             {
       
   335             ASSERT_ALWAYS_TRACE((_L("SSMA # CEmergencyCallRfTrCommand::ParseMCE_RF_STATE_RESPL() - ")));
       
   336             OstTrace1( TRACE_NORMAL, CEMERGENCYCALLRFTRCOMMAND_MCE_RF_STATE_RESP_8,
       
   337                        "SSMA # CEmergencyCallRfTrCommand::ParseMCE_RF_STATE_RESPL() - Status(%d)", 
       
   338                         status );
       
   339             INTERNAL_TRACE((_L("SSMA # CEmergencyCallRfTrCommand::ParseMCE_RF_STATE_RESPL() - Status(%d)"),
       
   340                                 status));
       
   341             }
       
   342             break;
       
   343         }
       
   344 
       
   345     iAdaptation.ProcessResponseL( errorCode );
       
   346 
       
   347     OstTrace0( TRACE_NORMAL, CEMERGENCYCALLRFTRCOMMAND_MCE_RF_STATE_RESP_9,
       
   348                "SSMA # CEmergencyCallRfTrCommand::ParseMCE_RF_STATE_RESPL - return " );
       
   349     INTERNAL_TRACE((_L("SSMA # CEmergencyCallRfTrCommand::ParseMCE_RF_STATE_RESPL - return ")));
       
   350     }
       
   351     
       
   352 // End of file
       
   353