diff -r 000000000000 -r 164170e6151a wim/SwimReader/inc/SwimReader.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wim/SwimReader/inc/SwimReader.h Tue Jan 26 15:20:08 2010 +0200 @@ -0,0 +1,247 @@ +/* +* 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: For reading SWIM +* +*/ + + +#ifndef CSWIMREADER_H +#define CSWIMREADER_H + +// INCLUDES +#include "ScardDefs.h" // KMaxATRHistoricalBytes +#include "SwimEtelApdu.h" // RApdu +#include "SwimReaderConsts.h" +#include "SwimApduRespHeader.h" +#include "SwimApduReqHeader.h" + + +// FORWARD DECLARATIONS +class CSwimReaderIF; + +// CLASS DECLARATION + +/** +* Functional level of SwimReader +* +* +* @lib SwimReader.lib +* @since Series60 2.1 +*/ +class CSwimReader : public CActive + { + public: // Constructors and destructor + + /** + * Two-phased constructor. + * @param aInterface Pointer to SwimReaderIF + */ + static CSwimReader* NewL( CSwimReaderIF* aInterface ); + + /** + * Destructor. + */ + virtual ~CSwimReader(); + + public: // New functions + + /** + * APDU Request + * @param aStatus Status of request + * @param aCommandAPDU Command APDU + * @param aResponseAPDU Response APDU + * @param aServiceType Service type + * @param aCardReader Card reader + * @param aAppType Application type + * @param aPaddingByte Padding byte + * @return + */ + void APDUReqL( TRequestStatus& aStatus, + const TPtrC8& aCommandAPDU, + TPtr8& aResponseAPDU, + TUint8 aServiceType = KSendApdu, + TUint8 aCardReader = KNoPreferredReader, + TUint8 aAppType = KAPDUAppTypeWIM, + TUint8 aPaddingByte = 0 ); + + /** + * Close Etel and CustomAPI connection + * @return void + */ + void Close(); + + /** + * Get preferred reader status from PreferredReaderStatus member + * @param aReaderStatus Reader's status + * @return void + */ + void PreferredReaderStatus( TUint8& aReaderStatus ); + + /** + * From given status bytes, select a card reader, + * which is present, and card is also present in the reader. + * @param aReaderStatuses Reader statys bytes + * @param aPreferredReaderStatus Preferred reader status + * @param aOldPreferredReader Old preferred reader + * @return Reader number which was selected + */ + static TUint8 SelectCardReader( + TDesC8& aReaderStatuses, + TUint8& aPreferredReaderStatus, + TUint8 aOldPreferredReader = KNoPreferredReader ); + + /** + * Sets iCardInserted member variable according the attribute. + * @param aIsInserted is the card inserted (ETrue / EFalse) + * @return void + */ + void SetCardInserted( TBool aIsInserted ); + + /** + * Initializes the reader. Also make APDU_LIST to get all + * statuses of card readers attached to the device. + * @param aStatus Request status + * @param aHistoricals Historical ATR bytes + * @return void + */ + void WakeUpL( TRequestStatus& aStatus, TDes8& aHistoricals ); + + private: + + /** + * C++ default constructor. + * @param aInterface Pointer to SwimReaderIF + */ + CSwimReader( CSwimReaderIF* aInterface ); + + /** + * Symbian 2nd phase constructor. + */ + void ConstructL(); + + /** + * APDU request + * @param aCommandAPDU Command APDU + * @param aResponseAPDU Response APDU + * @param aServiceType Service type + * @param aCardReader Card reader number + * @param aAppType Application type + * @param aPaddingByte Padding byte + * @return void + */ + void APDUReqL( const TPtrC8& aCommandAPDU, + TPtr8& aResponseAPDU, + TUint8 aServiceType = KSendApdu, + TUint8 aCardReader = KNoPreferredReader, + TUint8 aAppType = KAPDUAppTypeWIM, + TUint8 aPaddingByte = 0 ); + + /** + * APDU request + * @param aCommandAPDU Command APDU + * @param aResponseAPDU Response APDU + * @param aReqHeader APDU request header + * @return void + */ + void APDUReqL( const TPtrC8& aCommandAPDU, + TPtr8& aResponseAPDU, + TSwimApduReqHeader& aReqHeader ); + + /** + * Cleanup all allocated stuff + * @return void + */ + void CleanUp(); + + /** + * Handle APDU request + * @return Scard error code + */ + TInt HandleAPDUReq(); + + /** + * Handle open APDU request + * @return Scard error code + */ + TInt HandleOpenAPDUReq(); + + /** + * From CActive RunL + * @return void + */ + void RunL(); + + /** + * From CActive Cancel request + * @return void + */ + void DoCancel(); + + private: // Data + // Enumerator for reader phase + enum TReaderPhase + { + EWakeUpAPDURequest, + EAPDURequest + }; + + // RApdu class + RApdu iApdu; + // Status for Apdu + TUint8 iApduStatus; + // Is the card inserted + TBool iCardInserted; + // Pointer for client status. Not owned. + TRequestStatus* iClientStatus; + // Cmd bytes + TBufC8<1> iCmdBytes; + // Pointer to Etel server. Owned. + RTelServer* iEtelServer; + // Header for APDU + TSwimApduReqHeader iHeader; + // + TBuf8 iHistoricals; + // Pointer for SwimReaderIF object. Not owned. + CSwimReaderIF* iInterface; + // Phase of reader operations + TReaderPhase iPhase; + // Max length of APDU + TInt iMaxLen; + // Pointer to TApdu message. Owned. + RMmCustomAPI::TApdu* iMsg; + // Is reader open + TBool iOpen; + // Prefferred reader + TUint8 iPreferredReader; + // Prefferred reader status + TUint8 iPreferredReaderStatus; + // Is reader attached + TBool iReaderAttached; + // Buffer for reader statusses + HBufC8* iReaderStatuses; + // Pointer to reader statusses. Owned. + TPtr8* iReaderStatusesPtr; + // Request header + TSwimApduReqHeader* iReqHeader; + // Pointer to Response APDU. Not owned. + TPtr8* iResponseAPDU; + // Temporary buffer. Owned. + HBufC8* iTempBuf; + // Pointer to Temporary buffer + TPtr8* iTempPtr; + }; + +#endif // CSWIMREADER_H + +// End of File