--- /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 <e32std.h>
+
+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<KMaxMsgSize> iData;
+ };
+
+
+#endif // BT_SAP_MESSAGE_H
+
+// End of File