wim/Scard/src/ScardListener.cpp
changeset 0 164170e6151a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wim/Scard/src/ScardListener.cpp	Tue Jan 26 15:20:08 2010 +0200
@@ -0,0 +1,148 @@
+/*
+* 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:  Listens for smard card events
+*
+*/
+
+
+// INCLUDE FILES
+#include    "Scard.h"
+#include    "ScardBase.h"
+#include    "ScardListener.h"
+#include    "ScardClsv.h"
+#include    "WimTrace.h"
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CScardListener::CScardListener( RScard* aScard ) 
+    : CActive( CActive::EPriorityStandard )
+    {
+    _WIMTRACE(_L("WIM|Scard|CScardListener::CScardListener|Begin"));
+    __ASSERT_ALWAYS( aScard, User::Panic( _L( "NULL pointer" ), 
+        KErrArgument ) );
+    iScard = aScard;
+    CActiveScheduler::Add( this );
+    }
+
+// Destructor
+EXPORT_C CScardListener::~CScardListener()
+    {
+    _WIMTRACE(_L("WIM|Scard|CScardListener::~CScardListener|Begin"));
+    Cancel(); // Make sure we're cancelled
+    _WIMTRACE(_L("WIM|Scard|CScardListener::~CScardListener|End"));
+    }
+
+
+// -----------------------------------------------------------------------------
+// CScardListener::ListenCardEvents
+// Start listening card events
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CScardListener::ListenCardEvents(
+    const TScardReaderName& aReaderName )
+    {
+    _WIMTRACE(_L("WIM|Scard|CScardListener::ListenCardEvents|Begin"));
+    iReaderName.Copy( aReaderName );
+    TInt err = NotifyChange( iStatus, aReaderName );
+    SetActive();
+    return err;
+    }
+
+// -----------------------------------------------------------------------------
+// CScardListener::DoCancel
+// Listening cancelled
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CScardListener::DoCancel()
+    {   
+    _WIMTRACE(_L("WIM|Scard|CScardListener::DoCancel|Begin"));
+    CancelNotifyChange(iReaderName );
+    }
+
+// -----------------------------------------------------------------------------
+// CScardListener::RunL
+// Handle event we have got
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CScardListener::RunL()
+    {
+    _WIMTRACE(_L("WIM|Scard|CScardListener::RunL|Begin"));
+    TScardServiceStatus event = (TScardServiceStatus) iStatus.Int();
+    //iStatus = KRequestPending;
+    //SetActive();
+    ProcessEvent( event );
+    _WIMTRACE(_L("WIM|Scard|CScardListener::RunL|END"));
+    }
+
+// -----------------------------------------------------------------------------
+// CScardListener::NotifyChange
+// Send NotifyChange opcode to server
+// -----------------------------------------------------------------------------
+//
+TInt CScardListener::NotifyChange(
+    TRequestStatus& aStatus,
+    const TScardReaderName& aFriendlyName )
+    {
+    _WIMTRACE(_L("WIM|Scard|CScardListener::NotifyChange|Begin"));
+    aStatus = KRequestPending;
+    iPckg = &aStatus;
+    //TPckgBuf<TRequestStatus*> pckg( &aStatus );
+
+    TIpcArgs args( &iPckg, &aFriendlyName );
+    iScard->SendReceive( EScardServerNotifyChange, args, aStatus );
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CScardListener::CancelNotifyChange
+// Send CancelNotifyChange opcode to server
+// -----------------------------------------------------------------------------
+//
+/*void CScardListener::CancelNotifyChange(
+    TRequestStatus& aStatus,
+    const TScardReaderName& aFriendlyName )
+    {
+    _WIMTRACE(_L("WIM|Scard|CScardListener::CancelNotifyChange|Begin"));
+    
+    //TPckgBuf<TRequestStatus*> pckg( &aStatus );
+    iPckg = &aStatus;
+    
+    TIpcArgs args( &iPckg, &aFriendlyName );
+    
+    iScard->SendReceive( EScardServerCancelNotifyChange, args );
+    _WIMTRACE(_L("WIM|Scard|CScardListener::CancelNotifyChange|End"));
+    }*/
+    
+
+TInt CScardListener::CancelNotifyChange( const TScardReaderName& aFriendlyName )
+    {
+    _WIMTRACE(_L("WIM|Scard|CScardListener::CancelNotifyChange|Begin"));
+    
+    //this parameter is not used in server side
+    //It will be useful if there is a multiple scard listener
+    //currently only wimserver is the scard listener, so by calling
+    //this function, the array of listener will be cleaned.
+    TIpcArgs args( &iPckg, &aFriendlyName );
+    
+    return iScard->SendReceive( EScardServerCancelNotifyChange, args );
+    _WIMTRACE(_L("WIM|Scard|CScardListener::CancelNotifyChange|End"));
+    }
+
+//  End of File