diff -r 000000000000 -r 164170e6151a wim/Scard/inc/ScardChannelManager.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wim/Scard/inc/ScardChannelManager.h Tue Jan 26 15:20:08 2010 +0200 @@ -0,0 +1,225 @@ +/* +* 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: Handles individual channels on a singular SC +* (which equals one SC reader handler) Can be queried +* for information about channels, controls traffic etc. +* +*/ + + + +#ifndef CSCARDCHANNELMANAGER_H +#define CSCARDCHANNELMANAGER_H + +// INCLUDES +#include "ScardServerBase.h" +#include "ScardDefs.h" + +// FORWARD DECLARATIONS +class CScardAccessControl; +class CScardMessageStack; +class CScardCommandTimer; + +// CLASS DECLARATION + +/** +* Scard channel manager. +* Handles individual channels on a singular Smart card +* @lib Scard.lib +* @since Series60 2.1 +*/ +class CScardChannelManager : public CBase + { + public: // Constructors and destructor + + /** + * Two-phased constructor. + */ + static CScardChannelManager* NewL(); + + /** + * Destructor. + */ + virtual ~CScardChannelManager(); + + public: // New functions + + /** + * Give the session the right to use the channel + * @param aChannel Channel to be added + * @param aSessionID Session ID + * @return Always returns ETrue + */ + TBool AddSessionToChannelL( const TInt8 aChannel, + const TInt aSessionID ); + + /** + * Remove session from the given channel + * @param aChannel Channel + * @param aSessionID Session ID to be removed + * @return Always returns EFalse + */ + TBool RemoveSessionL( const TInt8 aChannel, + const TInt aSessionID ); + + /** + * Does the session have permission to the channel + * @param aChannel Channel + * @param aSessionID SessionID + * @return ETrue if session is on channel, otherwise EFalse + */ + TBool SessionIsOnChannel( const TInt8 aChannel, + const TInt aSessionID ) const; + + /** + * This function returns an int16 that spesifies which channels have + * been opened and which of them are reserved + * @return Two-byte parameter telling: + * b0 - Channel 0 open (should always be set) + * b1 - Channel 0 reserved + * b2 - Channel 1 open + * b3 - Channel 1 reserved + * ... + * b7 - Channel 3 open + * b8 - Channel 3 reserved + * + * b9-b15 Maximum number of channels available (at the moment always 4) + */ + TUint16 ChannelStatus(); + + /** + * Is the channel reserved? Return ID of session reserving the channel + * @param aChannel Channel + * @return Reserver session ID of the channel + */ + TInt ChannelReservedL( const TInt8 aChannel ) const; + + /** + * Remove the exclusive access from one channel. + * @param aChannel Channel + * @param aSessionID Session ID + * @return void + */ + void FreeChannelL( const TInt8 aChannel, + const TInt aSessionID ); + + /** + * Remove any exclusive accesses. + * @param aChannel Channel + * @return void + */ + void FreeChannels( const TInt aSessionID ); + + /** + * Is the session on the channel, and is the channel number legal. + * @param aChannel Channel + * @param aSessionID SessionID + * @return void + */ + void ValidateChannelL( const TInt8 aChannel, + const TInt aSessionID ); + + /** + * Get the number of the next unreserved logical channel. + * @param aChannel Channel + * @return Number of next unreserved channel + */ + TInt8 UnreservedLogicalChannel() const; + + /** + * Has the channel been opened yet. + * @param aChannel Channel + * @return ETrue if channel already reserved, otherwise EFalse + */ + TBool ChannelOpenedYet( const TInt8 aChannel ); + + /** + * Cancels the message. + * @param aTimer Pointer to command timer + * @return void + */ + void CancelByTimeOut( CScardCommandTimer* aTimer ); + + /** + * Cancels all the messages for given session. + * @param aSessionID SessionID + * @return void + */ + void CancelAll( const TInt aSessionID ); + + /** + * Puts message on bottom of message stack. + * @param aMessage Message to be pushed to bottow of stack + * @return void + */ + void PushMessageToBottomL( const TMessageHandle& aMessage ); + + /** + * Puts message on top of message stack. + * @param aMessage Message to be pushed + * @return void + */ + void PushMessageToTopL( const TMessageHandle& aMessage ); + + /** + * Get message from top of the message stack. + * @return TMessageHandle + */ + const TMessageHandle MessageFromTop(); + + /** + * Get next message + * @return TMessageHandle + */ + const TMessageHandle NextMessageL(); + + /** + * NextMessageFromFree + * @param aChannel Channel + * @return TMessageHandle + */ + const TMessageHandle NextMessageFromFree( const TInt8 aChannel ); + + /** + * Handle channels when card is removed. + * @return void + */ + void CardRemoved(); + + private: + + /** + * C++ default constructor. + */ + CScardChannelManager(); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL(); + + private: + // The messages + CScardMessageStack* iMessageStack; + + // The sessions that are joined/channel + CArrayPtrFlat< CArrayFixFlat >* iChannels; + + // IDs of sessions that are currently reserving the channels + TInt iReserverID[KMaxChannels]; + }; + +#endif // CSCARDCHANNELMANAGER_H + +// End of File