--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/adaptationlayer/tsy/simatktsy_dll/internal/test/simatktsy_testtool/simatk/src/simatkblocks.cpp Fri Nov 06 17:28:23 2009 +0000
@@ -0,0 +1,991 @@
+/*
+* Copyright (c) 2002-2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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: Specific class for SIM ATK TSY tests
+*
+*/
+
+
+
+
+// INCLUDE FILES
+#include <stifparser.h>
+#include "simatk.h"
+#include "saticon.h"
+#include "saterrors.h"
+
+#include "commandgetinkey.h"
+#include "commanddisplaytext.h"
+#include "commandgetinput.h"
+#include "commandsendss.h"
+#include "commandsendsm.h"
+#include "commandsetupcall.h"
+#include "commandplaytone.h"
+#include "commandsetupmenu.h"
+#include "commandselectitem.h"
+#include "satcallcontrol.h"
+#include "satmosmscontrol.h"
+#include "commandrefresh.h"
+#include "commandsendussd.h"
+#include "commandlocalinfo.h"
+#include "commandsetupeventlist.h"
+#include "commandsetupidlemodetext.h"
+#include "commandopenchannel.h"
+#include "commandsenddata.h"
+#include "commandlaunchbrowser.h"
+#include "commandsenddtmf.h"
+#include "commandlanguagenotification.h"
+#include "commandclosechannel.h"
+#include "commandreceivedata.h"
+#include "commandgetchannelstatus.h"
+
+
+// CONSTANTS
+_LIT( KCommandType, "CommandType" );
+
+// Commands can omit SessionEnd procedure from script by setting this flag to 0
+_LIT( KSessionEnd, "SessionEnd" );
+
+
+// -----------------------------------------------------------------------------
+// CSimAtk::Delete
+// Delete here all resources allocated and opened from test methods.
+// Called from destructor.
+// -----------------------------------------------------------------------------
+//
+void CSimAtk::Delete()
+ {
+ iCoreLog->Log( _L( "CSimAtk::Delete" ) );
+ // No implementation required
+ }
+
+// -----------------------------------------------------------------------------
+// CSimAtk::RunMethodL
+// Run specified method. Contains also table of test methods and their names.
+// -----------------------------------------------------------------------------
+//
+TInt CSimAtk::RunMethodL
+ (
+ CStifItemParser& aItem
+ )
+ {
+ iCoreLog->Log( _L( "CSimAtk::RunMethodL" ) );
+
+ // Store parser
+ if ( !iParser )
+ {
+ iParser = &aItem;
+ }
+
+ static TStifFunctionInfo const KFunctions[] =
+ {
+ // Copy this line for every implemented function.
+ // First string is the function name used in TestScripter script file.
+ // Second is the actual implementation member function.
+
+ // Generic
+ ENTRY( "Open", CSimAtk::Open ),
+ ENTRY( "Close", CSimAtk::Close ),
+ ENTRY( "WaitForRequest", CSimAtk::WaitForRequest ),
+ ENTRY( "Delay", CSimAtk::Delay ),
+ // ISC Control
+ ENTRY( "LoadIscTests", CSimAtk::LoadIscTests ),
+ ENTRY( "RunIscTestCase", CSimAtk::RunIscTestCase ),
+ ENTRY( "SyncIscTestCase", CSimAtk::SyncIscTestCase ),
+ ENTRY( "CancelTestCase", CSimAtk::CancelTestCase ),
+
+ ENTRY( "CheckData", CSimAtk::CheckData ),
+ ENTRY( "CheckProactiveCommand", CSimAtk::CheckData ),
+ ENTRY( "CheckIcon", CSimAtk::CheckIcon ),
+
+ ENTRY( "SendResponse", CSimAtk::SendResponse ),
+ ENTRY( "SendEnvelope", CSimAtk::SendResponse ),
+ ENTRY( "SendTerminalResponse", CSimAtk::SendResponse )
+ };
+
+ const TInt count = sizeof( KFunctions ) /
+ sizeof( TStifFunctionInfo );
+
+ return RunInternalL( KFunctions, count, aItem );
+ }
+
+// -----------------------------------------------------------------------------
+// CSimAtk::Open
+// Open method function.
+// -----------------------------------------------------------------------------
+//
+TInt CSimAtk::Open
+ (
+ CStifItemParser& aItem
+ )
+ {
+ iCoreLog->Log( _L( "CSimAtk::Open" ) );
+
+ TInt ret( KErrNotFound );
+ TPtrC string;
+ aItem.GetString ( _L( "Open" ), string );
+
+ if ( _L( "SAT" ) == string )
+ {
+ ret = iSat.Open( iRphone );
+ iCoreLog->Log( _L( "CSimAtk::Open: SAT, return %d" ), ret );
+ }
+ else if ( _L( "IscControl" ) == string )
+ {
+ ret = iRIscTestControl.Connect();
+ iCoreLog->Log( _L( "CSimAtk::Open: IscControl, return %d" ), ret );
+ }
+ else if ( _L( "SmsMessaging" ) == string )
+ {
+ ret = iSmsMessaging.Open( iRphone );
+ iCoreLog->Log( _L( "CSimAtk::Open: SmsMessaging, return %d" ), ret );
+ }
+ else
+ {
+ // If any Open item not found in SimAtk,then checks Core.
+ CSimAtkCore::SetString( string );
+ ret = CSimAtkCore::Open( aItem );
+ }
+
+ return ret;
+ }
+
+// -----------------------------------------------------------------------------
+// CSimAtk::Close
+// Close method function.
+// -----------------------------------------------------------------------------
+//
+TInt CSimAtk::Close
+ (
+ CStifItemParser& aItem
+ )
+ {
+ iCoreLog->Log( _L( "CSimAtk::Close" ) );
+ TInt ret( KErrNotFound );
+ TPtrC string;
+ aItem.GetString ( _L( "Close" ), string );
+
+ if ( _L( "SAT" ) == string)
+ {
+ iSat.Close();
+ ret = KErrNone;
+ }
+ else if ( _L( "IscControl" ) == string)
+ {
+ iRIscTestControl.Close();
+ ret = KErrNone;
+ }
+ else if ( _L( "SmsMessaging" ) == string)
+ {
+ iSmsMessaging.Close();
+ ret = KErrNone;
+ }
+ else
+ {
+ // If any Close item not found in SimAtk, then checks Core.
+ CSimAtkCore::SetString( string );
+ ret = CSimAtkCore::Close( aItem );
+ }
+
+ return ret;
+ }
+
+// -----------------------------------------------------------------------------
+// CSimAtk::NotifySimAtkL
+// Activates the notify
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CSimAtk::NotifySimAtkL
+ (
+ TRequestStatus& aReqStatus,
+ const TSatIpc& aNotifyIpc
+ )
+ {
+ iCoreLog->Log( _L( "CSimAtk::NotifySimAtk" ) );
+
+ TInt ret( KErrNone );
+
+ CSatBase* command = NULL;
+
+ TPtrC notifyName( MapIpcToString( aNotifyIpc ) );
+
+ TInt index ( 0 );
+
+ // Create test class only if it does not already exist
+ if ( KErrNotFound == FindIndex ( aNotifyIpc, index ) )
+ {
+ switch ( aNotifyIpc )
+ {
+ case ESatNotifyDisplayTextPCmd:
+ {
+ command = new (ELeave) CCommandDisplayText( aNotifyIpc, iSat,
+ *iParser, *iCoreLog );
+ break;
+ }
+ case ESatNotifyGetInkeyPCmd:
+ {
+ command = new (ELeave) CCommandGetInkey( aNotifyIpc, iSat,
+ *iParser, *iCoreLog );
+ break;
+ }
+ case ESatNotifyGetInputPCmd:
+ {
+ command = new (ELeave) CCommandGetInput( aNotifyIpc, iSat,
+ *iParser, *iCoreLog );
+ break;
+ }
+ case ESatNotifyPlayTonePCmd:
+ {
+ command = new (ELeave) CCommandPlayTone( aNotifyIpc, iSat,
+ *iParser, *iCoreLog );
+ break;
+ }
+ case ESatNotifyRefreshPCmd:
+ {
+ command = new (ELeave) CCommandRefresh( aNotifyIpc, iSat,
+ *iParser, *iCoreLog );
+ break;
+ }
+ case ESatNotifyRefreshRequiredParam:
+ {
+ command = new (ELeave) CCommandRefresh( aNotifyIpc, iSat,
+ *iParser, *iCoreLog );
+ break;
+ }
+ case ESatNotifySendSsPCmd:
+ {
+ command = new (ELeave) CCommandSendSs( aNotifyIpc, iSat,
+ *iParser, *iCoreLog );
+
+ // Set Cc pointer
+ CCommandSendUssd* ss
+ = static_cast<CCommandSendUssd*> ( command );
+ ss->SetCallControl( &iCallControl );
+ break;
+ }
+ case ESatNotifySendSmPCmd:
+ {
+ command = new (ELeave) CCommandSendSm( aNotifyIpc, iSat,
+ *iParser, *iCoreLog );
+ break;
+ }
+ case ESatNotifySetUpCallPCmd:
+ {
+ command = new (ELeave) CCommandSetUpCall( aNotifyIpc, iSat,
+ *iParser, *iCoreLog );
+
+ // Set Cc pointer
+ CCommandSendUssd* call
+ = static_cast<CCommandSendUssd*> ( command );
+ call->SetCallControl( &iCallControl );
+ break;
+ }
+ case ESatNotifySetUpMenuPCmd:
+ {
+ command = new (ELeave) CCommandSetUpMenu( aNotifyIpc, iSat,
+ *iParser, *iCoreLog );
+ break;
+ }
+ case ESatNotifySelectItemPCmd:
+ {
+ command = new (ELeave) CCommandSelectItem( aNotifyIpc, iSat,
+ *iParser, *iCoreLog );
+ break;
+ }
+ case ESatNotifySendUssdPCmd:
+ {
+ command = new (ELeave) CCommandSendUssd( aNotifyIpc, iSat,
+ *iParser, *iCoreLog );
+
+ // Set Cc pointer
+ CCommandSendUssd* ussd
+ = static_cast<CCommandSendUssd*> ( command );
+ ussd->SetCallControl( &iCallControl );
+
+ break;
+ }
+ case ESatNotifyLocalInfoPCmd:
+ {
+ command = new (ELeave) CCommandLocalInfo( aNotifyIpc, iSat,
+ *iParser, *iCoreLog );
+ break;
+ }
+ case ESatNotifySetUpEventListPCmd:
+ {
+ command = new (ELeave) CCommandSetUpEventList( aNotifyIpc,
+ iSat, *iParser, *iCoreLog );
+ break;
+ }
+ case ESatNotifySetUpIdleModeTextPCmd:
+ {
+ command = new (ELeave) CCommandSetUpIdleModeText( aNotifyIpc,
+ iSat, *iParser, *iCoreLog );
+ break;
+ }
+ case ESatNotifyOpenChannelPCmd:
+ {
+ command = new (ELeave) CCommandOpenChannel( aNotifyIpc, iSat,
+ *iParser, *iCoreLog );
+ break;
+ }
+ case ESatNotifySendDataPCmd:
+ {
+ command = new (ELeave) CCommandSendData( aNotifyIpc, iSat,
+ *iParser, *iCoreLog );
+ break;
+ }
+ case ESatNotifyLaunchBrowserPCmd:
+ {
+ command = new (ELeave) CCommandLaunchBrowser( aNotifyIpc, iSat,
+ *iParser, *iCoreLog );
+ break;
+ }
+ case ESatNotifySendDtmfPCmd:
+ {
+ command = new (ELeave) CCommandSendDtmf( aNotifyIpc, iSat,
+ *iParser, *iCoreLog );
+ break;
+ }
+ case ESatNotifyLanguageNotificationPCmd:
+ {
+ command = new (ELeave) CCommandLanguageNotification(
+ aNotifyIpc, iSat, *iParser, *iCoreLog );
+ break;
+ }
+ case ESatNotifyCloseChannelPCmd:
+ {
+ command = new (ELeave) CCommandCloseChannel( aNotifyIpc, iSat,
+ *iParser, *iCoreLog );
+ break;
+ }
+ case ESatNotifyReceiveDataPCmd:
+ {
+ command = new (ELeave) CCommandReceiveData( aNotifyIpc, iSat,
+ *iParser, *iCoreLog );
+ break;
+ }
+ case ESatNotifyGetChannelStatusPCmd:
+ {
+ command = new (ELeave) CCommandGetChannelStatus( aNotifyIpc,
+ iSat, *iParser, *iCoreLog );
+ break;
+ }
+ case ESatNotifyCallControlRequest:
+ {
+ command = new (ELeave) CSatCallControl( aNotifyIpc, iSat,
+ *iParser, *iCoreLog );
+
+ // Store pointer for SendSs/Ussd & Setup Call commands
+ iCallControl = command;
+ break;
+ }
+ case ESatNotifyMoSmControlRequest:
+ {
+ command = new (ELeave) CSatMoSmsControl( aNotifyIpc, iSat,
+ *iParser, *iCoreLog );
+ break;
+ }
+ case ESatNotifyProactiveSimSessionEnd:
+ {
+ // None. SimSessionEnd is notified automatically.
+ break;
+ }
+ default:
+ {
+ iCoreLog->Log( _L( "CSimAtk::NotifySimAtk %S not supported! \
+ Aborting..." ), ¬ifyName );
+ ret = KErrNotSupported;
+ CancelTestCase( ret );
+ break;
+ }
+ }
+
+ if ( KErrNone == ret )
+ {
+ // Put command to array
+ iArray->AppendL( command );
+ }
+
+ }
+ else
+ {
+ // Reusing existing test class
+ command = iArray->At( index );
+ }
+
+
+ // If command was created, notify SAT
+ if ( NULL != command )
+ {
+ // Notify the SAT about command and SimSessionEnd
+ iCoreLog->Log( _L( "CSimAtk::NotifySimAtk \
+ %S async method activated" ), ¬ifyName );
+
+ command->NotifySat( aReqStatus );
+ }
+
+ return ret;
+ }
+
+// -----------------------------------------------------------------------------
+// CSimAtk::NotifySimAtkCancel
+// Cancels notifys
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CSimAtk::NotifySimAtkCancel
+ (
+ const TSatIpc& aNotify
+ )
+ {
+ iCoreLog->Log( _L( "CSimAtk::NotifySimAtkCancel" ) );
+
+ TInt ret( KErrNone );
+ TInt index ( 0 );
+
+ ret = FindIndex( aNotify, index );
+
+ if ( KErrNone == ret )
+ {
+ iArray->At( index )->CancelRequest();
+
+ iArray->Delete( index );
+
+ if ( ESatNotifyCallControlRequest == aNotify )
+ {
+ iCallControl = NULL;
+ }
+
+ iCoreLog->Log( _L( "CSimAtk::NotifySimAtkCancel \
+ Async method cancelled" ) );
+ }
+ else
+ {
+ iCoreLog->Log( _L( "CSimAtk::NotifySimAtkCancel \
+ Cancellation requested but command not found! Aborting..." ) );
+
+ CancelTestCase( ret );
+ }
+
+ return ret;
+ }
+
+// -----------------------------------------------------------------------------
+// CSimAtk::LoadIscTests
+// Connects to ISC test control and loads XML file
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CSimAtk::LoadIscTests
+ (
+ CStifItemParser& aItem
+ )
+ {
+ iCoreLog->Log( _L( "CSimAtk::LoadIscTests" ) );
+
+ TPtrC string;
+ aItem.GetString ( _L( "LoadIscTests" ), string );
+ TInt ret( iRIscTestControl.LoadTestCases( string ) );
+
+ if ( KErrNone == ret )
+ {
+ iCoreLog->Log( _L( "CSimAtk::LoadIscTests:\
+ %S loaded successfully." ), &string );
+ }
+ else
+ {
+ iCoreLog->Log( _L( "CSimAtk::LoadIscTests \
+ Loading failed: %S " ), &string );
+
+ TPtrC errorString = MapErrorCodeToString( ret );
+
+ iCoreLog->Log( _L( "CSimAtk::LoadIscTests \
+ %S" ), &errorString );
+ }
+
+ return ret;
+ }
+
+// -----------------------------------------------------------------------------
+// CSimAtk::RunIscTestCase
+// Starts the test procedure
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CSimAtk::RunIscTestCase
+ (
+ CStifItemParser& aItem
+ )
+ {
+ iCoreLog->Log( _L( "CSimAtk::RunIscTestCase" ) );
+
+ TInt ret( KErrNone );
+
+ // XML file ID
+ TInt xmlId(0);
+ if ( KErrNone == ( ret = aItem.GetInt( _L( "RunIscTestCase" ), xmlId ) ) )
+ {
+ // Test case ID
+ TInt testId(0);
+ if ( KErrNone == ( ret = aItem.GetNextInt( testId ) ) )
+ {
+ iCoreLog->Log( _L( "CSimAtk::RunIscTestCase: Id: %d" ), testId );
+ TInt test = ( xmlId << 20 ) | testId;
+ iRIscTestControl.RunTestCase( test, iIscStatus );
+ }
+ }
+ if ( KErrNone != ret )
+ {
+ iCoreLog->Log( _L( "CSimAtk::RunIscTestCase Running failed!" ) );
+ CancelTestCase( ret );
+ }
+
+ return ret;
+ }
+
+// -----------------------------------------------------------------------------
+// CSimAtk::WaitForStatus
+// Halts the execution until an async req is completed.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CSimAtk::WaitForRequest
+ (
+ CStifItemParser& /*aItem*/
+ )
+ {
+ iCoreLog->Log( _L( "CSimAtk::WaitForRequest" ) );
+
+ User::WaitForRequest( iIscStatus );
+
+ TInt errorStatus( iIscStatus.Int() );
+
+ if ( KErrNone == errorStatus && iNeedSessionEnd && iSessionEnd.TimedOut() )
+ {
+ errorStatus = KErrTimedOut;
+ }
+
+ if ( KErrNone != errorStatus )
+ {
+ CancelTestCase( errorStatus );
+ }
+
+ return errorStatus;
+ }
+
+// -----------------------------------------------------------------------------
+// CSimAtk::SyncIscTestCase
+// Connects to ISC test control and loads XML file
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CSimAtk::SyncIscTestCase
+ (
+ CStifItemParser& /*aItem*/
+ )
+ {
+ TInt ret ( KErrNone );
+
+ iCoreLog->Log( _L( "CSimAtk::SyncIscTestCase" ) );
+
+ ret = iRIscTestControl.SyncTestCase();
+
+ iCoreLog->Log( _L( "CSimAtk::SyncIscTestCase \
+ Synch complete. Status: %d" ), ret );
+
+ if ( KErrNone != ret )
+ {
+ CancelTestCase( ret );
+ }
+
+ return ret;
+ }
+
+// -----------------------------------------------------------------------------
+// CSimAtk::CancelTestCase
+// Test client originated test cancellation
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CSimAtk::CancelTestCase
+ (
+ const TInt aReason
+ )
+ {
+ TPtrC error( MapErrorCodeToString( aReason ) );
+
+ iCoreLog->Log( _L( "CSimAtk::CancelTestCase: %S" ), &error );
+
+ if ( iArray )
+ {
+ // Cancel all notifys and empty the array
+ for ( TInt i = 0 ; i < iArray->Count() ; i ++ )
+ {
+ iArray->At( i )->CancelRequest();
+ }
+ iArray->Reset();
+
+ iCallControl = NULL;
+ }
+
+ iSessionEnd.Cancel();
+
+ iRIscTestControl.CancelTestCase();
+
+
+ return KErrNone;
+ }
+
+// -----------------------------------------------------------------------------
+// CSimAtk::CancelTestCase
+// Script originated test cancellation
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CSimAtk::CancelTestCase
+ (
+ CStifItemParser& /*aItem*/
+ )
+ {
+ iCoreLog->Log( _L( "CSimAtk::CancelTestCase" ) );
+
+ if ( iArray )
+ {
+ // Cancel all notifys and empty the array
+ for ( TInt i = 0 ; i < iArray->Count() ; i ++ )
+ {
+ iArray->At( i )->CancelRequest();
+ }
+ iArray->Reset();
+
+ iCallControl = NULL;
+ }
+
+ iRIscTestControl.CancelTestCase();
+
+ return KErrNone;
+ }
+
+// -----------------------------------------------------------------------------
+// CSimAtk::Delay
+// Halt script execution for given time
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CSimAtk::Delay
+ (
+ CStifItemParser& aItem
+ )
+ {
+ iCoreLog->Log( _L( "CSimAtk::Delay" ) );
+
+ TInt delay(0);
+ aItem.GetNextInt( delay );
+ User::After( delay );
+ return KErrNone;
+ }
+
+// -----------------------------------------------------------------------------
+// CSimAtk::CheckData
+// Verifies the validity of received data
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CSimAtk::CheckData
+ (
+ CStifItemParser& aItem
+ )
+ {
+ iCoreLog->Log( _L( "CSimAtk::CheckData" ) );
+
+ TInt ret( KErrNone );
+ TInt commandIndex;
+
+ if ( KErrNone == FindIndex( aItem, commandIndex ) )
+ {
+ ret = iArray->At( commandIndex )->CheckData();
+ }
+ else
+ {
+ iCoreLog->Log( _L( "CSimAtk::CheckData Unidentified command" ) );
+ ret = KErrGeneral;
+ }
+
+ // Proactive command data was invalid or unexpected command received
+ if (KErrNone != ret)
+ {
+ iCoreLog->Log( _L( "CSimAtk::CheckData \
+ Checking of data failed, aborting." ) );
+ CancelTestCase( ret );
+ }
+
+ return ret;
+ }
+
+// -----------------------------------------------------------------------------
+// CSimAtk::SendResponse
+// Creates data packet from a script and sends it to Sim
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CSimAtk::SendResponse
+ (
+ CStifItemParser& aItem
+ )
+ {
+ iCoreLog->Log( _L( "CSimAtk::SendResponse" ) );
+
+ TInt ret( KErrNone );
+ TInt commandIndex;
+
+ if ( KErrNone == FindIndex( aItem, commandIndex ) )
+ {
+ // Find command from array
+ CSatCommandBase* proactiveCommand =
+ static_cast<CSatCommandBase*>(iArray->At( commandIndex ) );
+
+ // Check if notifying of SessionEnd is omitted from script. Needed
+ // by default
+ iNeedSessionEnd = ETrue;
+ aItem.GetInt( KSessionEnd, iNeedSessionEnd );
+
+ // In case of sending envelopes, SessionEnd has to be notified here
+ if ( iNeedSessionEnd && KRequestPending != iSessionEnd.Status() )
+ {
+ iSessionEnd.NotifySat();
+ }
+
+ ret = proactiveCommand->SendResponse();
+
+ if ( iNeedSessionEnd && KErrNone == ret )
+ {
+ // Sending OK, wait for a while for session end
+ ret = iSessionEnd.WaitSessionEnd();
+ }
+
+ switch ( ret )
+ {
+ case KErrNone:
+ {
+ iCoreLog->Log( _L( "CSimAtk::SendResponse \
+ Response sent successfully" ), ret );
+ break;
+ }
+ case KErrTimedOut:
+ {
+ // When there's data coming from SIM, SessionEnd is not
+ // completed and time out occurs. This is not error however,
+ // final check for SessionEnd status is made in WaitForRequest
+ ret = KErrNone;
+
+ iCoreLog->Log( _L( "CSimAtk::SendResponse \
+ SessionEnd Timed out" ) );
+ break;
+ }
+ default:
+ {
+ iCoreLog->Log( _L( "CSimAtk::SendResponse \
+ Command returned an error code %d!" ), ret );
+ break;
+ }
+ }
+ }
+ else
+ {
+ iCoreLog->Log( _L( "CSimAtk::SendResponse \
+ Unidentified command" ) );
+ ret = KErrGeneral;
+ }
+
+ if ( KErrNone != ret )
+ {
+ CancelTestCase( ret );
+ }
+
+ return ret;
+ }
+
+// -----------------------------------------------------------------------------
+// CSimAtk::CheckIcon
+// Verifies the validity of provided icon info
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CSimAtk::CheckIcon
+ (
+ CStifItemParser& aItem
+ )
+ {
+ TInt ret( KErrNone );
+
+ // Try to load mandatory SimType parameter from script
+ TPtrC simType;
+
+ if ( KErrNone == aItem.GetString( KLoadIcon, simType ) )
+ {
+ TInt instanceNumber( 0 );
+ TInt recordId( 0 );
+
+ // Get instance number identifier
+ if ( KErrNone != aItem.GetNextInt( instanceNumber ) )
+ {
+ ret = KErrArgument;
+ }
+ // Get record id.
+ else if ( KErrNone != aItem.GetNextInt( recordId ) )
+ {
+ ret = KErrArgument;
+ }
+ else
+ {
+ CSatIcon satIcon( iSat, simType, recordId );
+ ret = satIcon.CheckIcon( iCoreLog, instanceNumber );
+ }
+ }
+ else
+ {
+ ret = KErrArgument;
+ }
+
+ if ( KErrNone != ret )
+ {
+ CancelTestCase( ret );
+ }
+
+ return ret;
+ }
+
+// -----------------------------------------------------------------------------
+// CSimAtk::FindIndex
+// Finds the index of command in array based on the script parameter
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CSimAtk::FindIndex
+ (
+ CStifItemParser& aItem, // Reference to parser
+ TInt& aIndex // Index output
+ )
+ {
+ iCoreLog->Log( _L( "CSimAtk::FindIndex (by name)") );
+
+ TInt ret ( KErrNotFound );
+ TPtrC cmdName;
+
+ if ( iArray )
+ {
+ if ( KErrNone != aItem.GetString( KCommandType, cmdName ) )
+ {
+ // Script did not provide command type.
+ // Return index 0 (first element) as a default.
+ if ( 0 < iArray->Count() )
+ {
+ aIndex = 0;
+ ret = KErrNone;
+ }
+ }
+ else
+ {
+ // Script provided a command type. For example:
+ // "CommandType ESatNotifyDisplayTextPCmd"
+ // Loop throught the array and look for matching command type.
+ // If array contains several commands of same type, latest is.
+ // returned
+ TBool requestPending( EFalse ); // Not used
+ TSatIpc requestedCommand =
+ MapStringToIpc( cmdName, requestPending );
+
+ // Find command based on type
+ ret = FindIndex( requestedCommand, aIndex );
+ }
+ } // if (iArray)
+ else
+ {
+ // iArray is NULL
+ ret = KErrCorrupt;
+ }
+
+ return ret;
+ }
+
+// -----------------------------------------------------------------------------
+// CSimAtk::FindIndex
+// Finds the index of command in array based on the ipc of the command
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CSimAtk::FindIndex
+ (
+ const TSatIpc& aRequestedIpc, // Requested type
+ TInt& aIndex // Index output
+ )
+ {
+ iCoreLog->Log( _L( "CSimAtk::FindIndex (by IPC)") );
+ TInt ret ( KErrNotFound );
+
+ if ( iArray )
+ {
+ TInt i = iArray->Count() - 1;
+
+ for ( ; KErrNotFound == ret && i >= 0 ; i-- )
+ {
+ if ( iArray->At( i )->MatchIpc( aRequestedIpc ) )
+ {
+ aIndex = i;
+ ret = KErrNone;
+ }
+ }
+ }
+
+ if ( KErrNone != ret )
+ {
+ TPtrC cmdName( MapIpcToString( aRequestedIpc ) );
+ iCoreLog->Log( _L( "CSimAtk::FindIndex \
+ %S not found!"), &cmdName );
+ }
+
+ return ret;
+ }
+
+// -----------------------------------------------------------------------------
+// CSimAtk::MapErrorCodeToString
+//
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+const TPtrC CSimAtk::MapErrorCodeToString( const TInt& aErrorCode )
+ {
+ TPtrC errorString( KNullDesC );
+
+ for ( TUint8 i( 0 ) ; errorString == KNullDesC
+ && i < KSatErrorListSize ; i++ )
+ {
+ if ( KSatErrorList[i].iErrorCode == aErrorCode )
+ {
+ errorString.Set( KSatErrorList[i].iErrorString );
+ }
+ }
+
+ if ( errorString == KNullDesC )
+ {
+ errorString.Set( _L( "Unidentified error code" ) );
+
+ iCoreLog->Log( _L( "CSimAtk::MapErrorCodeToString \
+ Error code %d" ), aErrorCode );
+ }
+
+ return errorString;
+ }
+
+// End of File