diff -r 000000000000 -r 5de814552237 navienginebsp/naviengine_assp/csi/csi_master.h --- /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 +#include +#include +#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_