diff -r 000000000000 -r 164170e6151a wim/SwimReader/src/SwimApduRespHeader.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wim/SwimReader/src/SwimApduRespHeader.cpp Tue Jan 26 15:20:08 2010 +0200 @@ -0,0 +1,157 @@ +/* +* 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: Class for APDU response header +* +*/ + + + +// INCLUDE FILES +#include "SwimApduRespHeader.h" +#include "WimTrace.h" // for trace logging + +#ifdef _DEBUG +#include +#endif + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// TSwimApduRespHeader::TSwimApduRespHeader +// Constructor +// ----------------------------------------------------------------------------- +// +TSwimApduRespHeader::TSwimApduRespHeader( const TDesC8& aData ) + { + _WIMTRACE(_L("WIM|SwimReader|TSwimApduRespHeader::TSwimApduRespHeader|Begin")); + Copy( aData ); + } + +// ----------------------------------------------------------------------------- +// TSwimApduRespHeader::AnyByte +// Return byte in given index +// ----------------------------------------------------------------------------- +// +TUint8 TSwimApduRespHeader::AnyByte( TUint8 aIndex ) + { + _WIMTRACE(_L("WIM|SwimReader|TSwimApduRespHeader::AnyByte|Begin")); + if ( iData.Length() > aIndex ) + { + return iData[aIndex]; + } + else + { + return 0; + } + } + +// ----------------------------------------------------------------------------- +// TSwimApduRespHeader::Copy +// Copy data +// ----------------------------------------------------------------------------- +// +void TSwimApduRespHeader::Copy( const TDesC8& aData ) + { + _WIMTRACE(_L("WIM|SwimReader|TSwimApduRespHeader::Copy|Begin")); + // If max length is shorter than length of given data, + // copy only max length amount of data. + if ( KMaxApduHeaderLen >= aData.Length() ) + { + iData = aData; + } + else + { + iData = aData.Left( KMaxApduHeaderLen ); + } + } + +// ----------------------------------------------------------------------------- +// TSwimApduRespHeader::DataLength +// Return data length +// ----------------------------------------------------------------------------- +// +TUint16 TSwimApduRespHeader::DataLength() + { + _WIMTRACE(_L("WIM|SwimReader|TSwimApduRespHeader::DataLength|Begin")); + TUint8 serviceType, shortRet; + TUint16 ret = 0; + + serviceType = ServiceType(); + + if ( serviceType == KList ) + { + shortRet = ShortDataLength(); + ret = shortRet; + } + else if ( iData.Length() > 13 ) + { + ret = TUint16( iData[12] << 8 ); + ret = TUint16( ret | iData[13] ); + } + + return ret; + } + +// ----------------------------------------------------------------------------- +// TSwimApduRespHeader::operator= +// Operator = +// ----------------------------------------------------------------------------- +// +void TSwimApduRespHeader::operator=( const TDesC8& aData ) + { + _WIMTRACE(_L("WIM|SwimReader|TSwimApduRespHeader::operator=|Begin")); + Copy( aData ); + } + +// ----------------------------------------------------------------------------- +// TSwimApduRespHeader::ServiceType +// Return Service type byte +// ----------------------------------------------------------------------------- +// +TUint8 TSwimApduRespHeader::ServiceType() + { + _WIMTRACE(_L("WIM|SwimReader|TSwimApduRespHeader::ServiceType|Begin")); + return AnyByte( KIndexRespServiceType ); + } + +// ----------------------------------------------------------------------------- +// TSwimApduRespHeader::ShortDataLength +// Return ShortDataLength byte +// ----------------------------------------------------------------------------- +// +TUint8 TSwimApduRespHeader::ShortDataLength() + { + _WIMTRACE(_L("WIM|SwimReader|TSwimApduRespHeader::ShortDataLength|Begin")); + if ( ServiceType() == KSendApdu ) + { + return 0; + } + else + { + return AnyByte( KIndexRespSDataLength ); + } + } + +// ----------------------------------------------------------------------------- +// TSwimApduRespHeader::Status +// Return status byte +// ----------------------------------------------------------------------------- +// +TUint8 TSwimApduRespHeader::Status() + { + _WIMTRACE2(_L("WIM|SwimReader|TSwimApduRespHeader::Status|status=%d"), AnyByte(KIndexRespStatus)); + return AnyByte( KIndexRespStatus ); + } + +// End of File