diff -r 000000000000 -r f63038272f30 bluetoothengine/btsap/inc/BTSapMessage.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bluetoothengine/btsap/inc/BTSapMessage.h Mon Jan 18 20:28:57 2010 +0200 @@ -0,0 +1,229 @@ +/* +* Copyright (c) 2004-2005 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: +* This class handles SAP message encoding and decoding +* +*/ + +#ifndef BT_SAP_MESSAGE_H +#define BT_SAP_MESSAGE_H + +// INCLUDES +#include + +const TInt KMaxMsgSize = 4096; +const TInt KMinMsgSize = 275; // biggest size of apdu_req +const TInt KParaLenModulo = 4; + +const TInt KMsgIDRange = 18; +const TInt KParaIDRange = 8; +const TInt KMsgIDOffset = 0; +const TInt KParaNumOffset = 1; +const TInt KHeaderResvLen = 2; +const TInt KPayloadOffset = 4; +const TInt KParaIDLen = 1; +const TInt KParaResvLen = 1; +const TInt KParaLenLen = 2; +const TInt KParaResvValue = 0x00; +const TInt KHeaderResvValue = 0x0000; + +enum TMsgID + { + EConnectRequest, + EConnectResponse, + EDisconnectRequest, + EDisconnectResponse, + EDisconnectIndication, + ETransferAPDURequest, + ETransferAPDUResponse, + ETransferATRRequest, + ETransferATRResponse, + EPowerSimOffRequest, + EPowerSimOffResponse, + EPowerSimOnRequest, + EPowerSimOnResponse, + EResetSimRequest, + EResetSimResponse, + ETransferCardReaderStatusRequest, + ETransferCardReaderStatusResponse, + EStatusIndication, + EErrorResponse + }; + +enum TParaID + { + EParaMaxMsgSize, + EParaConnectionStatus, + EParaResultCode, + EParaDisconnectionType, + EParaCommandAPDU, + EParaResponseAPDU, + EParaATR, + EParaCardReaderStatus, + EParaStatusChange, + EParaCommandAPDU7816 = 0x10 // This parameter's ID is not sequential + }; + +enum TResultCode + { + EResultCodeOK, + EResultCodeUnknown, + EResultCodeNotAccessible, + EResultCodePowerOff, + EResultCodeCardRemoved, + EResultCodeAlreadyPowerOn, + EResultCodeDataNotAvailable, + EResultCodeReserved = 100 + }; + +enum TCardStatus + { + ECardStatusError, + ECardStatusReset, + ECardStatusNotAccessible, + ECardStatusRemoved, + ECardStatusInserted, + ECardStatusRecovered, + ECardStatusReserved = 100 + }; + +enum TConnectionStatus + { + EConnectionOK, + EConnectionErrReject, + EConnectionErrNotSupported, + EConnectionErrTooSmall + }; + +enum TValidationResult + { + EValidFormat, + EInvalidSegmented, + EInvalidMsgID, + EInvalidReservedBytes, + EInvalidParameterID, + EInvalidPaddingBytes, + EInvalidParaNumTooSmall, + EInvalidUnknown + }; + +const TInt KMapErrCode[] = + { + KErrNone, + KErrAlreadyExists, + KErrDisconnected, + KErrArgument, + KErrNotReady, + KErrInUse, + KErrCompletion, + KErrGeneral + }; + +const TResultCode KMapResultCode[] = + { + EResultCodeOK, + EResultCodeAlreadyPowerOn, + EResultCodePowerOff, + EResultCodeUnknown, + EResultCodeCardRemoved, + EResultCodeNotAccessible, + EResultCodeCardRemoved, + EResultCodeDataNotAvailable + }; + +const TMsgID KMapRequestID[] = + { + EConnectRequest, + EDisconnectRequest, + ETransferAPDURequest, + ETransferATRRequest, + EPowerSimOffRequest, + EPowerSimOnRequest, + EResetSimRequest, + ETransferCardReaderStatusRequest, + }; + +const TMsgID KMapMsgID[] = + { + EConnectRequest, + ETransferAPDURequest, + ETransferAPDURequest + }; + +const TParaID KMapParaID[] = + { + EParaMaxMsgSize, + EParaCommandAPDU, + EParaCommandAPDU7816 + }; + + +// CLASS DECLARATION + +/** +* SAP message format handler class. +*/ +class TBTSapMessage + { +public: + TBTSapMessage(); + + void SetMsgID(TMsgID aMsgID); + + TMsgID MsgID(); + + void AddParameter(TParaID aParaID, TInt aValue, TInt aLen = 1); + + void AddParameter(TParaID aParaID, const TDesC8& aValue); + + TInt GetParameter(TParaID aParaID, TDes8& aValue); + + TInt GetParameter(TParaID aParaID, TInt& aValue); + + // Copy data + void SetData(const TDes8& aData); + + TInt AppendData(const TDes8& aData); + + void Reset(); + + TDes8& Data(); + + TBool IsEmpty(); + + TValidationResult Validate(); + + TResultCode ToResultCode(TInt errorCode); + + TUint8 GetParaNum(); + + TInt GetParaID(const TUint8 index, TParaID &aParaID); + +private: + TInt FindParameter(TParaID aParaID, TInt& aValuePos, TInt& aValueLen); + + void AddParameter(TParaID aParaID, const TUint8* aValue, TInt aLen); + + TBool IsValidParaID(const TParaID aParaID, const TMsgID aMsgID) const; + + TBool IsValidRequestID(const TMsgID aRequestID) const; + +private: + TBuf8 iData; + }; + + +#endif // BT_SAP_MESSAGE_H + +// End of File