navienginebsp/naviengine_assp/csi/csi_master.h
changeset 0 5de814552237
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/navienginebsp/naviengine_assp/csi/csi_master.h	Tue Sep 28 18:00:05 2010 +0100
@@ -0,0 +1,133 @@
+/*
+* 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 "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 __CSI_MASTER_H_
+#define __CSI_MASTER_H_
+
+#include <assp/naviengine/naviengine.h>
+#include <drivers/gpio.h>
+#include <drivers/iic_channel.h>
+#include "csi_psl.h"
+
+_LIT(KSpiThreadName,"SpiChannelThread_");
+
+const TInt KCsiDfcPriority = 0; // Arbitrary, can be 0-7, 7 highest
+const TInt KSpiThreadPriority = 24;
+
+// DCsiChannelMaster class declaration:
+class DCsiChannelMaster: public DIicBusChannelMaster
+	{
+public:
+#ifdef STANDALONE_CHANNEL
+	IMPORT_C
+#endif
+	static DCsiChannelMaster* New(TInt aChannelNumber, const TBusType aBusType, const TChannelDuplex aChanDuplex);
+
+	// gateway function for PSL implementation
+	virtual TInt DoRequest(TIicBusTransaction* aTransaction);
+
+	// overloaded constructor..
+	DCsiChannelMaster(TInt aChannelNumber, const TBusType aBusType, const TChannelDuplex aChanDuplex);
+#ifdef STANDALONE_CHANNEL
+	~DCsiChannelMaster();
+#endif
+protected:
+	// overriders for base pure-virtual methods..
+	virtual TInt DoCreate(); // 2nd stage construction.
+	virtual TInt CheckHdr(TDes8* aHdr);
+	virtual TInt HandleSlaveTimeout();
+
+private:
+	// other internal methods
+	TInt ConfigureInterface();
+	TBool TransConfigDiffersFromPrev();
+	TInt DoTransfer(TInt8 *aBuff, TUint aNumOfBytes);
+	TInt StartTransfer(TIicBusTransfer* aTransferPtr, TUint8 aType);
+	TInt ProcessNextTransfers();
+	void ExitComplete(TInt aErr, TBool aComplete = ETrue);
+
+	// Dfc/timeout Callback functions
+	static void TransferEndDfc(TAny* aPtr);
+	static void TransferTimeoutDfc(TAny* aPtr);
+	static void TimeoutCallback(TAny* aPtr);
+
+	// ISR handler.
+	static void CsiIsr(TAny* aPtr);
+
+	// DFc for Handling Transfer complete
+	TDfc iTransferEndDfc;
+
+	// flags indicating transmission/operation
+	TCsiOperationType iOperation;
+
+	// granularity..
+	TUint8 iWordSize;
+
+	// to store currently used CS pin number
+	TUint8 iSSPin;
+
+	// current state
+	enum TMyState
+		{
+		EIdle,
+		EBusy
+		};
+	TMyState iState;
+
+	// as implementation is common/generic for both channels
+	// store base register address and interruptID
+	TUint iChannelBase;
+	TInt iInterruptId;
+
+	// pointers used to store current transfers information
+	TIicBusTransfer* iHalfDTransfer;
+	TIicBusTransfer* iFullDTransfer;
+
+	// and current transaction.
+	TIicBusTransaction* iCurrTransaction;
+
+	// pointers to buffers used to transfer data from/to...
+	TInt8 *iTxData;
+	TInt8 *iRxData;
+	TInt8 *iTxDataEnd;
+	TInt8 *iRxDataEnd;
+
+	// Timer to guard 'while' loops..
+	NTimer iHwGuardTimer;
+	// guard-timer timeout value (in ms)
+	TInt32 iHwTimeoutValue;
+
+	// status of the transaction
+	volatile TInt iTransactionStatus;
+
+	// to store current configuration (for current transaction)
+	TConfigSpiV01 iSpiHeader;
+
+	// and its active/inactive state (can be active on high or low)
+	GPIO::TGpioState iSSPinActiveStateOff;
+	GPIO::TGpioState iSSPinActiveStateOn;
+
+	// if the Master is a part of DIicBusChannelMasterSlave object,
+	// we allow the friend class to unbind master's ISR - and register its own
+	// for the time the channel is captured by the Slave.
+	friend class DCsiChannelSlave;
+	};
+
+#endif //__CSI_MASTER_H_