diff -r 000000000000 -r 164170e6151a wim/Scard/src/ScardListener.cpp --- /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 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 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