diff -r 000000000000 -r 164170e6151a wim/SwimReader/src/SwimEtelApdu.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wim/SwimReader/src/SwimEtelApdu.cpp Tue Jan 26 15:20:08 2010 +0200 @@ -0,0 +1,180 @@ +/* +* Copyright (c) 2003 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "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: Implements the functionality of RApdu class +* +*/ + + + +// INCLUDE FILES +#include "SwimEtelApdu.h" +#include "etelext.h" // EEtelPanicNullHandle +#include "WimTrace.h" // for trace logging + +#ifdef _DEBUG +#include +#endif + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// RApdu::RApdu +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +RApdu::RApdu() + { + _WIMTRACE(_L("WIM|SwimReader|RApdu::RApdu|Begin")); + } + +// ----------------------------------------------------------------------------- +// RApdu::ConstructL +// Symbian 2nd phase constructor can leave. +// Virtual function which extensions may overload. Called in Open() +// ----------------------------------------------------------------------------- +// +void RApdu::ConstructL() + { + _WIMTRACE(_L("WIM|SwimReader|RApdu::ConstructL|Begin")); + //Create new CustomAPI instance + iCustomApi = new( ELeave ) RMmCustomAPI; + } + + +// ----------------------------------------------------------------------------- +// RApdu::APDUReq +// Message Transmission +// ----------------------------------------------------------------------------- +// +void RApdu::APDUReq( TRequestStatus& aStatus, RMmCustomAPI::TApdu& aMsg ) + { + _WIMTRACE(_L("WIM|SwimReader|RApdu::APDUReq|Begin")); + aStatus = KRequestPending; + // Send APDU to Etel through CustomAPI + iCustomApi->SendAPDUReq( aStatus, aMsg ); + } + +// ----------------------------------------------------------------------------- +// RApdu::CancelAPDUReq +// Cancel Message Transmission +// ----------------------------------------------------------------------------- +// +void RApdu::CancelAPDUReq() + { + iCustomApi->CancelAsyncRequest( ECustomSendAPDUReqIPC ); + } + +// ----------------------------------------------------------------------------- +// RApdu::Destruct +// Destructor. Called in Close() +// ----------------------------------------------------------------------------- +// +void RApdu::Destruct() + { + _WIMTRACE(_L("WIM|SwimReader|RApdu::Destruct|Begin")); + if ( iCustomApi ) + { + iCustomApi->Close(); + delete iCustomApi; + iCustomApi = NULL; + } + } + +// ----------------------------------------------------------------------------- +// RApdu::Close +// Close a phone and connection to CustomAPI +// ----------------------------------------------------------------------------- +// +void RApdu::Close() + { + _WIMTRACE(_L("WIM|SwimReader|RApdu::Close|Begin")); + CloseSubSession( EEtelClose ); + iPhone.Close(); + if ( iCustomApi ) + { + iCustomApi->Close(); + } + Destruct(); + } + +// ----------------------------------------------------------------------------- +// RApdu::Open +// Open a phone by name and CustomAPI session +// ----------------------------------------------------------------------------- +// +TInt RApdu::Open( RTelServer& aServer, const TDesC &aName ) + { + _WIMTRACE(_L("WIM|SwimReader|RApdu::Open|Begin")); + __ASSERT_ALWAYS( aServer.Handle() != 0, + PanicClient( EEtelPanicNullHandle ) ); + __ASSERT_ALWAYS( aName.Length() != 0, PanicClient( KErrBadName ) ); + + TRAPD( ret, ConstructL() ); + if ( ret ) + { + Destruct(); + return ret; + } + + //RMobilePhone phone; + + // Open phone + ret = iPhone.Open( aServer, aName ); + + if ( ret != KErrNone ) + { +#ifdef _DEBUG + RFileLogger::WriteFormat( KSwimReaderLogDir, KSwimReaderLogFileName, + EFileLoggingModeAppend, + _L( "EtelApdu::Open: phone open failed: %d" ), + ret ); +#endif + Destruct(); + iPhone.Close(); + return ret; + } + + // Open new CustomAPI session for phone + ret = iCustomApi->Open( iPhone ); + + if ( ret != KErrNone ) + { +#ifdef _DEBUG + RFileLogger::WriteFormat( KSwimReaderLogDir, KSwimReaderLogFileName, + EFileLoggingModeAppend, + _L( "EtelApdu::Open: CustomAPI open failed: %d" ), + ret ); +#endif + Destruct(); + iPhone.Close(); + return ret; + } + + return ret; + } + +// ----------------------------------------------------------------------------- +// PanicClient +// Panic the client on client side +// ----------------------------------------------------------------------------- +// +void PanicClient( TInt aFault ) + { + _WIMTRACE(_L("WIM|SwimReader|RApdu::PanicClient|Begin")); + _LIT( KETelClientFault,"Etel Client Fault" ); + User::Panic( KETelClientFault, aFault ); + } + +// End of file