wim/SwimReader/src/SwimEtelApdu.cpp
changeset 0 164170e6151a
--- /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    <flogger.h>
+#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