diff -r 000000000000 -r 164170e6151a wim/WimServer/inc/WimApduImpl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wim/WimServer/inc/WimApduImpl.h Tue Jan 26 15:20:08 2010 +0200 @@ -0,0 +1,189 @@ +/* +* 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: APDU Interface between C and Symbian code. Implementations +* for WimApdu callbacks. +* +*/ + + +#ifndef CWIMAPDU_H +#define CWIMAPDU_H + +// INCLUDES +#include "Scard.h" +#include "WimScardListener.h" + + +// CONSTANTS +const TInt KMaxApduLen = 262; +const TInt KMaxReaderCount = 8; + +const TInt KDefaulCloseChannelTimeout = 0; //Timeout in microseconds +const TUint8 KManageChannelIns = 0x70; +const TUint8 KManageChannelParamOpen = 0x00; +const TUint8 KManageChannelParamClose = 0x80; + + +// FORWARD DECLARATIONS +class CScardComm; +class RScard; + + +// CLASS DECLARATION + +/** +* WIM APDU interface. +* Interface between C and Symbian code. +* Methods for sending and retrieve APDUs. +* +* @since Series60 2.1 +*/ +class CWimApdu : public CActive + { + public: // Constructors and destructor + + /** + * Destructor. + */ + virtual ~CWimApdu(); + + /** + * Two-phased constructor. + */ + static CWimApdu* NewL(); + + + public: // New functions + + /** + * Opens a connection to a reader. + * @param aUiReaderId Reader ID + * @return status of the operation. + */ + TUint8 Open( TUint8 aUiReaderId ); + + /** + * Closes a connection to a reader. + * @param aUiReaderId Reader ID + * @return status of the operation. + */ + TUint8 Close( TUint8 aUiReaderId ); + + /** + * Sends an ISO 7816 APDU to reader. + * @param aUiReaderId Reader ID + * @param aApdu APDU to be sent + * @param aUiApduLength legth of the APDU + * @return status of the operation + */ + TUint8 SendAPDU( TUint8 aUiReaderId, + TUint8* aApdu, + TUint16 aUiApduLength ); + /** + * Cancel apdu sending + */ + void CancelApduSending(); + + /** + * Gets a list of reader statusses. + * @return status of the operation + */ + TUint8 RequestListL(); + + /** + * Returns response APDU from latest SendAPDU call, + * does not return SW-bytes. + * @return response APDU + */ + TPtrC8 ResponseApdu() const; + + /** + * Returns SW-bytes from latest SendApdu call. + * @return SW bytes + */ + TUint16 ResponseSW() const; + + /** + * Returns a list of reader statusses from + * latest RequestList call. + * @return reader status list + */ + const TBuf8& StatusList() const; + + /** + * Returns the length of reader status list. + * @return lenght of reader status list. + */ + TUint8 StatusListLength() const; + + private: + + /** + * C++ default constructor. + */ + CWimApdu(); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL(); + + /** + * From CActive. Stops ActiveSchedulerWait when got APDU response. + * @return void + */ + void RunL(); + + /** + * From CActive. Cancellation function + * @return void + */ + void DoCancel(); + + /** + * Wait until asynchronous call is completed + * @return void + */ + void SetActiveAndWait(); + + private: // Data + + // APDU responses are stored here. Owned. + HBufC8* iResponseBuffer; + // SW-bytes of the response. + TUint16 iResponseSW; + // Statusses of the readers found + TBuf8 iReaderStatusses; + // How many readers found. + TUint8 iReaderStatusLength; + // Status of the response. Possible values in WimDefs.h. + TUint8 iResponseStatus; + // Array containing CSardComm* object for each reader found. Owned. + CArrayFixFlat* iReaderComm; + // Array of supported reader names + CArrayFixFlat* iReaderNames; + //Pointer to CScard + RScard* iServer; + // Array of Scard listeners + CArrayPtrFlat* iWimScardListenerArray; + // Synchronous wait for async request + CActiveSchedulerWait iWait; + + TUint8 iUiReaderId; + + }; + +#endif // CWIMAPDU_H + +// End of File