bluetoothengine/btsap/inc/BTSapMessage.h
changeset 0 f63038272f30
child 65 001a94c71129
--- /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