--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bsptemplate/asspandvariant/template_assp/iic/iic_master.h Mon Oct 19 15:55:17 2009 +0100
@@ -0,0 +1,117 @@
+/*
+* Copyright (c) 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:
+*
+*/
+
+
+
+#ifndef __IIC_MASTER_H_
+#define __IIC_MASTER_H_
+
+#include <drivers/iic_channel.h>
+// #include platform specific header files here ...
+
+_LIT(KIicPslThreadName,"IicPslChannelThread_");
+
+const TInt KIicPslDfcPriority = 0; // Arbitrary, can be 0-7, 7 highest
+const TInt KIicPslThreadPriority = 24;
+
+// DIicBusChannelMasterPsl class declaration:
+class DIicBusChannelMasterPsl: public DIicBusChannelMaster
+ {
+public:
+ // Method to create a channel
+ static DIicBusChannelMasterPsl* New(TInt aChannelNumber, const TBusType aBusType, const TChannelDuplex aChanDuplex);
+
+ // Gateway function for PSL implementation
+ virtual TInt DoRequest(TIicBusTransaction* aTransaction);
+
+ // Overloaded constructor
+ DIicBusChannelMasterPsl(TInt aChannelNumber, const TBusType aBusType, const TChannelDuplex aChanDuplex);
+
+private:
+ // Override base-class pure virtual methods
+ virtual TInt DoCreate(); // 2nd stage construction.
+ virtual TInt CheckHdr(TDes8* aHdr);
+ virtual TInt HandleSlaveTimeout();
+
+ // Internal methods
+ TInt ConfigureInterface();
+ TBool TransConfigDiffersFromPrev(); // Optional method - potentially saving hardware re-configuration
+ TInt DoTransfer(TInt8 *aBuff, TUint aNumOfBytes, TUint8 aType);
+ TInt StartTransfer(TIicBusTransfer* aTransferPtr, TUint8 aType);
+ TInt ProcessNextTransfers();
+ void ExitComplete(TInt aErr, TBool aComplete = ETrue);
+
+ // Dfc and timeout Callback functions
+ static void TransferEndDfc(TAny* aPtr);
+ static void TransferTimeoutDfc(TAny* aPtr);
+ static void TimeoutCallback(TAny* aPtr);
+
+ // ISR handler.
+ static void IicIsr(TAny* aPtr);
+
+ // DFC for handling transfer completion
+ TDfc iTransferEndDfc;
+
+ // Flags indicating the current Rx/Tx activity
+ TIicOperationType iOperation;
+
+ // Granularity of data transmitted
+ TUint8 iWordSize;
+
+ // Current state of the channel. The channel shuould not accept requests for new
+ // transactions until the current one is complete. The following enumeration and
+ // state variable are used to control this.
+ enum TMyState
+ {
+ EIdle,
+ EBusy
+ };
+ TUint8 iState;
+
+ // Register base for the Master channel
+ TUint iMasterChanBase;
+
+ // Interrupt ID for the Master channel
+ TInt iMasterIntId;
+
+ // Pointers used to store current transfers information
+ TIicBusTransfer* iHalfDTransfer;
+ TIicBusTransfer* iFullDTransfer;
+
+ // Pointer to the current transaction.
+ TIicBusTransaction* iCurrTransaction;
+
+ // Pointers to buffers used for Rx and Tx transfers
+ TInt8 *iTxData;
+ TInt8 *iRxData;
+ TInt8 *iTxDataEnd;
+ TInt8 *iRxDataEnd;
+
+ // Timer to guard against hardware timeout
+ NTimer iHwGuardTimer;
+
+ // Status of the transaction
+ volatile TInt iTransactionStatus;
+
+ // Optional - pointers to the previous, and newly-requested transaction's headers
+ // These would be of a type that is speific to the bus type supported by the channel.
+ // Here, they are of a fictional bus type, 'Abc', and so are commented-out
+ // TConfigAbcBufV01* iPrevHeader;
+ // TConfigAbcBufV01* iCurrHeader
+ };
+
+#endif //__IIC_MASTER_H_