kernel/eka/include/drivers/iic_transaction.h
changeset 0 a41df078684a
child 43 c1f20ce4abcf
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/kernel/eka/include/drivers/iic_transaction.h	Mon Oct 19 15:55:17 2009 +0100
@@ -0,0 +1,681 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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:
+* e32/include/drivers/iic_transaction.h
+*
+*/
+
+// WARNING: This file contains some APIs which are internal and are subject
+//          to change without notice. Such APIs should therefore not be used
+//          outside the Kernel and Hardware Services package.
+
+/**
+@file
+@internalTechnology
+*/
+
+#ifndef __IIC_TRANSACTION_H__
+#define __IIC_TRANSACTION_H__
+
+#include <kernel/kern_priv.h> // for DThread;
+#include <e32ver.h>
+
+static const char KIicPanic[]="Iic PIL";
+
+const TInt KNumTrancPriorities=8;
+const TUint8 KTransactionWithPreamble = 0x80;
+const TUint8 KTransactionWithMultiTransc = 0x40;
+
+#ifdef _DEBUG
+static const TUint KCtrlIoDumpChan = 1;	// StaticExtension value reserved for printing a channel
+#endif
+
+/**
+@publishedPartner
+@prototype 9.6
+
+The set of endianness values for use with IIC buses
+
+*/
+enum TEndianness
+	{
+	EBigEndian,
+	ELittleEndian
+	};
+
+/**
+@publishedPartner
+@prototype 9.6
+
+The set of bit-order values for use with IIC buses
+
+*/
+enum TBitOrder
+	{
+	ELsbFirst,
+	EMsbFirst
+	};
+
+//
+// Bus-specific configuration for SPI bus
+//
+
+/**
+@publishedPartner
+@prototype 9.6
+
+The set of word-width values for use with TConfigSpiV01
+
+@see TConfigSpiV01
+
+*/
+enum TSpiWordWidth
+	{
+	ESpiWordWidth_8,
+	ESpiWordWidth_10,
+	ESpiWordWidth_12,
+	ESpiWordWidth_16
+	};
+
+/**
+@publishedPartner
+@prototype 9.6
+
+The set of clock mode values for use with TConfigSpiV01
+
+@see TConfigSpiV01
+
+*/
+enum TSpiClkMode
+	{
+	ESpiPolarityLowRisingEdge,		// Active high, odd edges
+	ESpiPolarityLowFallingEdge,		// Active high, even edges
+	ESpiPolarityHighFallingEdge,	// Active low,  odd edges
+	ESpiPolarityHighRisingEdge		// Active low,  even edges
+	};
+
+/**
+@publishedPartner
+@prototype 9.6
+
+The set of values to represent the pin sense when selecting a Slave
+
+@see TConfigSpiV01
+
+*/
+enum TSpiSsPinMode
+    {
+    ESpiCSPinActiveLow,      // Active low
+    ESpiCSPinActiveHigh     // Active high
+    };
+
+/**
+@publishedPartner
+@prototype 9.6
+
+Class to represent the configuration data for a SPI bus channel registered with IIC
+
+*/
+class TConfigSpiV01
+	{
+public:
+	TSpiWordWidth iWordWidth;
+	TInt32        iClkSpeedHz;
+	TSpiClkMode   iClkMode;
+	TInt32        iTimeoutPeriod;
+	TEndianness   iEndianness;
+	TBitOrder     iBitOrder;
+	TUint         iTransactionWaitCycles;
+	TSpiSsPinMode iSSPinActiveMode;
+	};
+
+typedef TPckgBuf <TConfigSpiV01> TConfigSpiBufV01;
+
+
+//
+// Bus-specific configuration for I2C bus
+//
+
+/**
+@publishedPartner
+@prototype 9.6
+
+The set of address types for use with TConfigI2cV01
+
+@see TConfigI2cV01
+
+*/
+enum TI2cAddrType
+	{
+	EI2cAddr7Bit,
+	EI2cAddr10Bit
+	};
+
+
+/**
+@publishedPartner
+@prototype 9.6
+
+Class to represent the configuration data for a I2C bus channel registered with IIC
+
+*/
+class TConfigI2cV01
+	{
+	public:
+	TI2cAddrType	iAddrType;		// 7 or 10-bit addressing
+	TInt32			iClkSpeedHz;
+	TEndianness		iEndianness;
+	TInt32			iTimeoutPeriod;
+	};
+
+typedef TPckgBuf <TConfigI2cV01> TConfigI2cBufV01;
+
+
+
+// Bus realisation configuration
+//
+// 31 30 29 28 | 27 26 25 24 | 23 22 21 20 | 19 18 17 16 | 15 14 13 12 | 11 10  9  8 |  7  6  5  4 |  3  2  1  0
+//
+// 31:29 - HS Master address (I2C only)
+// 28    - HS address valid bit
+// 27:23 - Reserved
+// 22:20 - Bus type
+// 19:15 - Channel number
+// 14:10 - Transaction speed
+//  9:0  - Slave address
+#define HS_MASTER_ADDR_SHIFT 29
+#define HS_MASTER_ADDR_MASK 0x7
+#define HS_ADDR_VALID_SHIFT 28
+#define HS_ADDR_VALID_MASK 0x1
+#define BUS_TYPE_SHIFT 20
+#define BUS_TYPE_MASK 0x7
+#define CHANNEL_NO_SHIFT 15
+#define CHANNEL_NO_MASK 0x1F
+#define TRANS_SPEED_SHIFT 10
+#define TRANS_SPEED_MASK 0x1F
+#define SLAVE_ADDR_SHIFT 0
+#define SLAVE_ADDR_MASK 0x3FF
+
+// The SET_CONF_FIELD and GET_CONF_FIELD are for internal use, only.
+// They are to support the set of macros below which access particular fields of the Bus realisation configuration
+#define SET_CONF_FIELD(aBusId,aField,aMask,aShift) aBusId=(aBusId&~(aMask<<aShift))|((aField&aMask)<<aShift);
+#define GET_CONF_FIELD(aBusId,aMask,aShift) (((aBusId)>>(aShift))&(aMask))
+
+/**
+@publishedPartner
+@prototype 9.6
+Macro to get the HS Master address of a Bus realisation configuration
+*/
+#define GET_HS_MASTER_ADDR(aBusId) GET_CONF_FIELD(aBusId,HS_MASTER_ADDR_MASK,HS_MASTER_ADDR_SHIFT)
+/**
+@publishedPartner
+@prototype 9.6
+Macro to set the HS Master address of a Bus realisation configuration
+*/
+#define SET_HS_MASTER_ADDR(aBusId,aHsMasterAddr) SET_CONF_FIELD(aBusId,aHsMasterAddr,HS_MASTER_ADDR_MASK,HS_MASTER_ADDR_SHIFT)
+/**
+@publishedPartner
+@prototype 9.6
+Macro to get the HS address valid bit of a Bus realisation configuration
+*/
+#define GET_HS_VALID(aBusId,aHsValid) GET_CONF_FIELD(aBusId,aHsValid,HS_ADDR_VALID_MASK,HS_ADDR_VALID_SHIFT)
+/**
+@publishedPartner
+@prototype 9.6
+Macro to set the HS address valid bit of a Bus realisation configuration
+*/
+#define SET_HS_VALID(aBusId,aHsValid) SET_CONF_FIELD(aBusId,aHsValid,HS_ADDR_VALID_MASK,HS_ADDR_VALID_SHIFT)
+/**
+@publishedPartner
+@prototype 9.6
+Macro to get the Bus type of a Bus realisation configuration
+*/
+#define GET_BUS_TYPE(aBusId) GET_CONF_FIELD(aBusId,BUS_TYPE_MASK,BUS_TYPE_SHIFT)
+/**
+@publishedPartner
+@prototype 9.6
+Macro to set the Bus type of a Bus realisation configuration
+*/
+#define SET_BUS_TYPE(aBusId,aBusType) SET_CONF_FIELD(aBusId,aBusType,BUS_TYPE_MASK,BUS_TYPE_SHIFT)
+/**
+@publishedPartner
+@prototype 9.6
+Macro to get the Channel number of a Bus realisation configuration
+*/
+#define GET_CHAN_NUM(aBusId) GET_CONF_FIELD(aBusId,CHANNEL_NO_MASK,CHANNEL_NO_SHIFT)
+/**
+@publishedPartner
+@prototype 9.6
+Macro to set the Channel number of a Bus realisation configuration
+*/
+#define SET_CHAN_NUM(aBusId,aChanNum) SET_CONF_FIELD(aBusId,aChanNum,CHANNEL_NO_MASK,CHANNEL_NO_SHIFT)
+/**
+@publishedPartner
+@prototype 9.6
+Macro to set the Transaction speed of a Bus realisation configuration
+*/
+#define SET_TRANS_SPEED(aBusId,aTransSpeed) SET_CONF_FIELD(aBusId,aTransSpeed,TRANS_SPEED_MASK,TRANS_SPEED_SHIFT)
+/**
+@publishedPartner
+@prototype 9.6
+Macro to get the Transaction speed of a Bus realisation configuration
+*/
+#define GET_TRANS_SPEED(aBusId) GET_CONF_FIELD(aBusId,TRANS_SPEED_MASK,TRANS_SPEED_SHIFT)
+/**
+@publishedPartner
+@prototype 9.6
+Macro to set the Slave address of a Bus realisation configuration
+*/
+#define SET_SLAVE_ADDR(aBusId,aSlaveAddr) SET_CONF_FIELD(aBusId,aSlaveAddr,SLAVE_ADDR_MASK,SLAVE_ADDR_SHIFT)
+/**
+@publishedPartner
+@prototype 9.6
+Macro to get the Slave address of a Bus realisation configuration
+*/
+#define GET_SLAVE_ADDR(aBusId) GET_CONF_FIELD(aBusId,SLAVE_ADDR_MASK,SLAVE_ADDR_SHIFT)
+
+
+// The SET_CONFIG_FIELD and GET_CONFIG_FIELD are for internal use, only.
+// They are to support the TIicBusRealisation class
+// These macros should be considered deprecated - they will be removed when the TIicBusRealisation class is removed
+#define SET_CONFIG_FIELD(aField,aMask,aShift) iConfig=(iConfig&~(aMask<<aShift))|((aField&aMask)<<aShift)
+#define GET_CONFIG_FIELD(aField,aMask,aShift) aField=((iConfig>>aShift)&aMask)
+
+/**
+@publishedPartner
+@deprecated
+
+Class to represent and provide access to configuration data used on a per-transaction basis with IIC
+
+*/
+class TIicBusRealisationConfig
+	{
+public:
+	// default constructor - just resets the value..
+	inline TIicBusRealisationConfig() : iConfig(0) {}
+
+	inline TIicBusRealisationConfig& operator=(const TIicBusRealisationConfig &aObj){iConfig = aObj.GetConfig(); return *this;}
+
+	inline void Clear() {iConfig = 0;}
+	inline TUint32 GetConfig() const {return iConfig;}
+	inline void SetConfig(TUint32 aConfig) {iConfig = aConfig;}
+
+	inline void SetHsMasterAddr(TUint8 aHsMasterAddr) {SET_CONFIG_FIELD(aHsMasterAddr,HS_MASTER_ADDR_MASK,HS_MASTER_ADDR_SHIFT);};
+	inline void GetHsMasterAddr(TUint8& aHsMasterAddr) const {{TUint32 tempVar;GET_CONFIG_FIELD(tempVar,HS_MASTER_ADDR_MASK,HS_MASTER_ADDR_SHIFT);aHsMasterAddr=(TUint8)tempVar;};};
+
+	inline void SetHsValid(TUint8 aHsValid) {SET_CONFIG_FIELD(aHsValid,HS_ADDR_VALID_MASK,HS_ADDR_VALID_SHIFT);};
+	inline void GetHsValid(TUint8& aHsValid) const{{TUint32 tempVar;GET_CONFIG_FIELD(tempVar,HS_ADDR_VALID_MASK,HS_ADDR_VALID_SHIFT);aHsValid=(TUint8)tempVar;};};
+
+	inline void SetBusType(TUint8 aBusType) {SET_CONFIG_FIELD(aBusType,BUS_TYPE_MASK,BUS_TYPE_SHIFT);};
+	inline void GetBusType(TUint8& aBusType) const {{TUint32 tempVar;GET_CONFIG_FIELD(tempVar,BUS_TYPE_MASK,BUS_TYPE_SHIFT);aBusType=(TUint8)tempVar;};};
+
+	inline void SetChanNum(TUint8 aChanNum) {SET_CONFIG_FIELD(aChanNum,CHANNEL_NO_MASK,CHANNEL_NO_SHIFT);};
+	inline void GetChanNum(TUint8& aChanNum) const {{TUint32 tempVar;GET_CONFIG_FIELD(tempVar,CHANNEL_NO_MASK,CHANNEL_NO_SHIFT);aChanNum=(TUint8)tempVar;};};
+
+	inline void SetTransSpeed(TUint8 aTransSpeed) {SET_CONFIG_FIELD(aTransSpeed,TRANS_SPEED_MASK,TRANS_SPEED_SHIFT);};
+	inline void GetTransSpeed(TUint8& aTransSpeed) const {{TUint32 tempVar;GET_CONFIG_FIELD(tempVar,TRANS_SPEED_MASK,TRANS_SPEED_SHIFT);aTransSpeed=(TUint8)tempVar;};};
+
+	inline void SetSlaveAddr(TUint16 aSlaveAddr) {SET_CONFIG_FIELD(aSlaveAddr,SLAVE_ADDR_MASK,SLAVE_ADDR_SHIFT);};
+	inline void GetSlaveAddr(TUint16& aSlaveAddr) const {{TUint32 tempVar;GET_CONFIG_FIELD(tempVar,SLAVE_ADDR_MASK,SLAVE_ADDR_SHIFT);aSlaveAddr=(TUint16)tempVar;};};
+
+private:
+	TUint32 iConfig;
+	};
+
+
+// Forward declarations
+class TIicBusTransaction;
+class DIicBusChannelMaster;
+
+//
+// Master-side items
+//
+
+/**
+@publishedPartner
+@prototype 9.6
+
+Class to represent and provide access to configuration data used on a per-transaction basis with IIC
+
+@see TIicBusTransaction
+
+*/
+class TIicBusTransfer
+	{
+public:
+	enum TReqType
+		{
+		EMasterRead,
+		EMasterWrite,
+		};
+	// the client interface for creating and linking simple requests
+	// default constructor..
+	inline TIicBusTransfer();
+	inline TIicBusTransfer(TReqType aType, TInt8 aGranularity, TDes8* aBuffer);
+	inline void LinkAfter(TIicBusTransfer* aPrev);
+	inline TInt8 WordWidth();
+	inline TReqType Direction();
+	inline TInt Length();
+	inline const TIicBusTransfer* Next();
+
+	inline TInt SetTransferData(TReqType aType, TInt8 aGranularity, TDes8* aBuffer);
+    const TDes8* GetBuffer() {return (const TDes8*)iBuffer;}
+
+private:
+	TInt8 iType;			// as one of TReqType
+	TInt8 iBufGranularity;	// width of a transfer word in bits
+	TInt8 iSpare1;
+	TDes8* iBuffer;	// the data for this transfer (packed into 8-bit words with padding). Access must be guarded for safety.
+	TIicBusTransfer* iNext;
+	TIicBusTransaction* iTransaction;	// pointer to the TIicBusTransaction owning the list that this transfer has been added to
+
+	friend class TIicBusTransaction;
+	friend class DIicBusChannelMaster;
+	};
+
+const TInt8 KTransferQueued = 0x01;
+/**
+@publishedPartner
+@prototype 9.6
+
+Definition of function prototype for a callback function provided by a client
+for invocation on the after the client transaction has been processed by a Master
+channel. The function will be executed in the context of the client thread.
+
+@see TIicBusTransaction
+
+*/
+typedef void (*TIicBusCbFn)(TIicBusTransaction* /*aTransction*/,
+	                  TInt  /*aBusId*/,
+	                  TInt  /*aResult*/,
+	                  TAny* /*aParam*/);
+
+class TIicBusCallback; // Forward declaration
+
+/**
+@publishedPartner
+@prototype 9.6
+
+Class to represent a transaction for processing by an IIC Master Channel
+
+@see IicBus
+
+*/
+class TIicBusTransaction : public SOrdQueLink
+	{
+    public:
+        enum TState {EFree,EDelivered,EAccepted};
+    
+        //default constuctor.
+        inline TIicBusTransaction();
+    
+        // the client interface for creating half duplex transactions
+        inline TIicBusTransaction(TDes8* aHeader, TIicBusTransfer* aHdTrans, TInt aPriority=0);
+        inline ~TIicBusTransaction();
+        inline TInt SetHalfDuplexTrans(TDes8* aHeader, TIicBusTransfer* aHdTrans);
+    
+        // The client interface for setting full duplex transaction: the API checks that it is possible to have the 2 transactions done in parallel.
+        // It does not check if the channel supports full duplex, so the transaction may still fail at queuing time.
+        inline TInt SetFullDuplexTrans(TIicBusTransfer* aFdTrans);
+		inline TInt RemoveTrans(TIicBusTransfer* aTrans);
+		// Client interface to explicitly disassociate transfer lists from the transaction, when the 
+		// transaction is in state EFree.
+		// These methods are for optional use. If the transfer list will not be further accessed,
+		// then there is no need to explicitly disassociate it from a transaction. However, if
+		// it will be accessed again its iTransaction pointer will refer to this object, so should
+		// be cleared to prevent corruption - and this is the purpose of these methods.
+		inline TInt RemoveHalfDuplexTrans();
+		inline TInt RemoveFullDuplexTrans();
+
+		// Accessor method to allow PSL access to iFlags to determine transaction type
+		inline TUint Flags();
+	protected:
+		inline TIicBusTransaction(TDes8* aHeader, TIicBusTransfer* aHdTrans, TUint8 aFlags, TInt aPriority=0);
+	public:
+		inline TUint8 State();
+		inline TInt GetBusId();
+	private:
+		TDes8* iHeader;
+		TUint8 iFlags;	// used to indicate if it supports a preamble
+		TUint8 iState;
+		TInt8 iSpare1;
+		TInt8 iSpare2;
+#ifdef STANDALONE_CHANNEL
+	//iBusId is needed by client when calling QueueTransaction
+	public:
+		TInt iBusId; 
+#else
+	private:
+		TInt iBusId;
+#endif
+		TIicBusTransfer* iHalfDuplexTrans;
+		TIicBusTransfer* iFullDuplexTrans;
+		TIicBusCallback* iCallback;
+
+		NFastSemaphore iSyncNotification;
+		TInt iResult;
+		friend class DIicBusChannelMaster;
+#ifndef STANDALONE_CHANNEL
+		friend class DIicBusController;
+#endif
+		};
+
+
+/**
+@publishedPartner
+@prototype 9.6
+
+Class to represent a callback object for use with asynchronous transactions processed by IIC Master channels
+
+@see IicBus
+
+*/
+class TIicBusCallback : public TDfc
+	{
+public:
+	inline TIicBusCallback(TIicBusCbFn aFn, TAny* aPtr, TDfcQue* aQue, TInt aPriority);
+	inline ~TIicBusCallback();
+private:
+    inline static void DfcFunc(TAny* aPtr);
+private:
+	TIicBusTransaction* iTransaction;
+	TInt iBusId;
+	TInt iResult;	// the result of this transaction as a system wide error
+	TAny* iParam;
+	TIicBusCbFn iCallback;
+
+	friend class DIicBusChannelMaster;
+	};
+
+// Forward declarations
+class DIicBusChannelSlave;
+class TIicBusSlaveCallback;
+
+/**
+@publishedPartner
+@prototype 9.6
+
+Definition of function prototype for a callback function provided by a client
+for invocation when an asynchronous event (such as a notification, or completion
+of the asynchronous capture of a channel) occurs for a Slave channel.
+
+@see IicBus
+
+*/
+typedef void (*TIicBusSlaveCbFn)(TInt	/*aChannelId*/,
+								 TInt	/*aReturn*/,
+								 TInt   /*aTrigger*/,
+								 TInt16 /*aRxWords*/,
+								 TInt16 /*aTxWords*/,
+								 TAny*	/*aParam*/);
+
+/**
+@publishedPartner
+@prototype 9.6
+
+A Slave callback notification object.
+It wraps a DFC in client's thread which is queued by the channel generic implementation
+when the transfer are completed asynchronously (e.g. in ISR).
+Alternatively, if the entire transaction is processed synchronously in the client's thread,
+the callback function will be called directly.
+
+@see IicBus
+
+*/
+NONSHARABLE_CLASS(TIicBusSlaveCallback) : public TDfc
+	{
+public:
+	inline TIicBusSlaveCallback(TIicBusSlaveCbFn aFn, TAny* aPtr, TDfcQue* aQue, TInt aPriority);
+	inline void SetReturn(TInt aRet);	// to be used by PSL
+	inline void SetTxWords(TInt16 aTxWords);	// to be used by PSL
+	inline void SetRxWords(TInt16 aRxWords);	// to be used by PSL
+
+	inline TInt GetTrigger();	// to be used by PSL
+	inline void SetTrigger(TInt aTrigger);	// to be used by PSL
+
+private:
+	IMPORT_C static void DfcFunc(TAny* aPtr);
+
+private:
+	TInt iChannelId;
+	TInt iReturn;		// a system wide error code
+	TInt iTrigger;		// a bitmask containing the reason(s) why this callback was queued (see TIicBusSlaveTrigger)
+	TInt16 iRxWords;	// number of words received
+	TInt16 iTxWords;	// number of words transmitted
+	TAny* iParam;
+	DIicBusChannelSlave* iChannel;
+	TIicBusSlaveCbFn iCallback;
+
+	friend class DIicBusChannelSlave;
+	};
+
+/**
+@publishedPartner
+@prototype 9.6
+
+ Prototype function pointer for a client supplied preamble:
+The supplied function shall not:
+	- spin
+	- block or wait on a fast mutex
+	- use any Kernel or base port services that do any of the above (e.g. alloc/free memory,
+	  signal a DMutex, complete a request, access user side memory)
+
+@see IicBus
+
+*/
+typedef void (*TIicBusPreamble)(TIicBusTransaction* /*aTransaction*/,
+                                TAny*				/*aArg*/);
+
+/**
+@publishedPartner
+@prototype 9.6
+
+Transaction which support preamble
+
+@see TIicBusTransaction
+
+*/
+class TIicBusTransactionPreamble : public TIicBusTransaction
+	{
+public:
+	// the client interface for creating transactions that support a preamble
+	inline TIicBusTransactionPreamble(TDes8* aHeader, TIicBusTransfer* aHdTrans, TIicBusPreamble aPreamble, TAny* aArg, TInt aPriority=0);
+private:
+	TIicBusPreamble iPreamble;	// preamble function pointer
+	TAny* iPreambleArg;			// argument to be passed to preamble
+protected:
+	inline TIicBusTransactionPreamble(TDes8* aHeader, TIicBusTransfer* aHdTrans, TIicBusPreamble aPreamble, TAny* aArg, TUint8 aFlags, TInt aPriority=0);
+	friend class DIicBusChannelMaster;
+	};
+
+/**
+@publishedPartner
+@prototype 9.6
+
+Prototype function pointer for a client supplied multi transaction callback.
+The function should return a pointer to a new transaction which will be send
+within the same request. The function is called in the channel thread after
+calling channel PSL DoRequest
+
+@see TIicBusTransaction
+
+*/
+typedef TIicBusTransaction* (*TIicBusMultiTranscCbFn) (
+								TIicBusTransaction* /*aTransaction*/,
+								TAny*	/*aArg*/);
+
+/**
+@publishedPartner
+@prototype 9.6
+
+Transaction which support multi-transaction
+
+@see TIicBusTransaction
+
+*/
+class TIicBusTransactionMultiTransc : public TIicBusTransaction
+	{
+public:
+	inline TIicBusTransactionMultiTransc(TDes8* aHeader, TIicBusTransfer* aHdTrans, TIicBusMultiTranscCbFn aMultiTransc, TAny* aArg, TInt aPriority=0);
+private:
+	TIicBusMultiTranscCbFn iMultiTransc;
+	TAny* iMultiTranscArg;
+	friend class DIicBusChannelMaster;
+	};
+
+/**
+@publishedPartner
+@prototype 9.6
+
+Transaction which support both preamble and multi-transaction
+
+@see TIicBusTransactionPreamble
+
+*/
+class TIicBusTransactionPreambleExt : public TIicBusTransactionPreamble
+	{
+public:
+	inline TIicBusTransactionPreambleExt(TDes8* aHeader, TIicBusTransfer* aHdTrans,
+			TIicBusPreamble aPreamble, TAny* aPreambleArg,
+			TIicBusMultiTranscCbFn aMultiTransc, TAny* aMultiTranscArg, TInt aPriority=0);
+private:
+	TIicBusMultiTranscCbFn iMultiTransc;
+	TAny* iMultiTranscArg;
+	friend class DIicBusChannelMaster;
+	};
+
+
+/**
+@publishedPartner
+@prototype 9.6
+
+Enumeration of IIC Slave channel trigger values
+
+@see IicBus
+*/
+enum TIicBusSlaveTrigger
+	{
+	ERxAllBytes			= 0x01,    // Master has written the required number of bytes
+	ERxUnderrun			= 0x02,    // Master has written less than the required number of bytes, and ceased transmitting
+	ERxOverrun			= 0x04,    // Master has written the required number of bytes and is continuing to transmit
+	ETxAllBytes			= 0x08,    // Master has read the required number of bytes
+	ETxUnderrun			= 0x10,    // Master has read the required number of bytes and is continuing to read
+	ETxOverrun			= 0x20,    // Master has read less than the required number of bytes, and ceased reading
+	EGeneralBusError	= 0x40,    // An error has occurred during a transaction
+	EAsyncCaptChan		= 0x80     // Completion of asynchronous CaptureChannel
+	};
+
+#include <drivers/iic_transaction.inl>
+
+#endif // __IIC_TRANSACTION_H__