sl@0: // Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: // All rights reserved. sl@0: // This component and the accompanying materials are made available sl@0: // under the terms of the License "Eclipse Public License v1.0" sl@0: // which accompanies this distribution, and is available sl@0: // at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: // sl@0: // Initial Contributors: sl@0: // Nokia Corporation - initial contribution. sl@0: // sl@0: // Contributors: sl@0: // sl@0: // Description: sl@0: // e32/include/iic_channel.inl sl@0: // Channel sl@0: // sl@0: // WARNING: This file contains some APIs which are internal and are subject sl@0: // to change without noticed. Such APIs should therefore not be used sl@0: // outside the Kernel and Hardware Services package. sl@0: // sl@0: sl@0: inline DIicBusChannel::DIicBusChannel(TChannelType aChanType, TBusType aBusType, TChannelDuplex aChanDuplex) sl@0: { sl@0: __KTRACE_OPT(KIIC, Kern::Printf("DIicBusChannel::DIicBusChannel, aChanType=%d, aBusType=%d, aChanDuplex=%d\n",aChanType,aBusType,aChanDuplex)); sl@0: sl@0: // Arbitary ... sl@0: iFlags=(TUint8)((aChanType&KChannelTypeMask) | ((aBusType<> KBusTypeShift));}; sl@0: sl@0: inline void DIicBusChannel::SetBusType(TBusType aBusType) sl@0: { sl@0: iFlags &= ~KBusTypeMask; sl@0: iFlags |= ((aBusType << KBusTypeShift) & KBusTypeMask); sl@0: }; sl@0: sl@0: inline DIicBusChannel::TChannelDuplex DIicBusChannel::ChannelDuplex() sl@0: {return((TChannelDuplex)((iFlags & KChannelDuplexMask) >> KChannelDuplexShift));}; sl@0: sl@0: inline void DIicBusChannel::SetChannelType(TChannelDuplex aChanDuplex) sl@0: { sl@0: iFlags &= ~KChannelDuplexMask; sl@0: iFlags |= ((aChanDuplex << KChannelDuplexShift) & KChannelDuplexMask); sl@0: }; sl@0: sl@0: inline TInt8 DIicBusChannel::ChannelNumber() const sl@0: {return iChannelNumber;}; sl@0: sl@0: // sl@0: // Master Channel sl@0: // sl@0: sl@0: sl@0: // Methods to make private data of TIicBusTransfer object accessible to derivatives of this class sl@0: inline TIicBusTransfer* DIicBusChannelMaster::GetTferNextTfer(const TIicBusTransfer* aTransfer) sl@0: {return aTransfer->iNext;}; sl@0: sl@0: inline TInt8 DIicBusChannelMaster::GetTferType(const TIicBusTransfer* aTransfer) sl@0: {return aTransfer->iType;}; sl@0: sl@0: inline TInt8 DIicBusChannelMaster::GetTferBufGranularity(const TIicBusTransfer* aTransfer) sl@0: {return aTransfer->iBufGranularity;}; sl@0: sl@0: inline const TDes8* DIicBusChannelMaster::GetTferBuffer(const TIicBusTransfer* aTransfer) sl@0: {return aTransfer->iBuffer;}; sl@0: sl@0: // Methods to make private data of TIicBusTransaction object accessible to derivatives of this class sl@0: inline TDes8* DIicBusChannelMaster::GetTransactionHeader(const TIicBusTransaction* aTransaction) sl@0: {return aTransaction->iHeader;}; sl@0: sl@0: inline TIicBusTransfer* DIicBusChannelMaster::GetTransHalfDuplexTferPtr(const TIicBusTransaction* aTransaction) sl@0: {return aTransaction->iHalfDuplexTrans;}; sl@0: sl@0: inline TIicBusTransfer* DIicBusChannelMaster::GetTransFullDuplexTferPtr(const TIicBusTransaction* aTransaction) sl@0: {return aTransaction->iFullDuplexTrans;}; sl@0: sl@0: inline TIicBusCallback* DIicBusChannelMaster::GetTransCallback(const TIicBusTransaction* aTransaction) sl@0: {return aTransaction->iCallback;}; sl@0: sl@0: inline TUint8 DIicBusChannelMaster::GetTransFlags(const TIicBusTransaction* aTransaction) sl@0: {return aTransaction->iFlags;}; sl@0: sl@0: sl@0: // Methods to make private data of TIicBusTransactionPreamble object accessible to derivatives of this class sl@0: inline TIicBusPreamble DIicBusChannelMaster::GetPreambleFuncPtr(const TIicBusTransactionPreamble* aTransfer) sl@0: {return aTransfer->iPreamble;}; sl@0: sl@0: inline TAny* DIicBusChannelMaster::GetPreambleFuncArg(const TIicBusTransactionPreamble* aTransfer) sl@0: {return aTransfer->iPreambleArg;}; sl@0: sl@0: inline TIicBusMultiTranscCbFn DIicBusChannelMaster::GetMultiTranscFuncPtr(const TIicBusTransactionMultiTransc* aTransfer) sl@0: {return aTransfer->iMultiTransc;}; sl@0: sl@0: inline TAny* DIicBusChannelMaster::GetMultiTranscFuncArg(const TIicBusTransactionMultiTransc* aTransfer) sl@0: {return aTransfer->iMultiTranscArg;}; sl@0: sl@0: inline TIicBusMultiTranscCbFn DIicBusChannelMaster::GetExtTranscFuncPtr(const TIicBusTransactionPreambleExt* aTransfer) sl@0: {return aTransfer->iMultiTransc;}; sl@0: sl@0: inline TAny* DIicBusChannelMaster::GetExtTranscFuncArg(const TIicBusTransactionPreambleExt* aTransfer) sl@0: {return aTransfer->iMultiTranscArg;}; sl@0: sl@0: inline TInt8 DIicBusChannelSlave::GetMasterWaitTime() sl@0: {return iMasterWaitTime;} sl@0: sl@0: inline TInt8 DIicBusChannelSlave::GetClientWaitTime() sl@0: {return iClientWaitTime;}; sl@0: sl@0: #ifndef STANDALONE_CHANNEL sl@0: inline DIicBusChannelMasterSlave::DIicBusChannelMasterSlave(TBusType aBusType, TChannelDuplex aChanDuplex, DIicBusChannelMaster* aMasterChan, DIicBusChannelSlave* aSlaveChan) sl@0: : DIicBusChannel(DIicBusChannel::EMasterSlave, aBusType, aChanDuplex), sl@0: iMasterChannel(aMasterChan), sl@0: iSlaveChannel(aSlaveChan) sl@0: { sl@0: //If in stand-alone channel mode, the client assigns a channel number to the MasterSlave channel it creates. sl@0: __ASSERT_ALWAYS(iMasterChannel->iChannelNumber == iSlaveChannel->iChannelNumber,Kern::Fault("MasterSlave channel number ambiguity",0)); sl@0: iChannelNumber = iMasterChannel->iChannelNumber; sl@0: } sl@0: #endif sl@0: sl@0: inline TInt DIicBusChannelMasterSlave::DoCreate() sl@0: { sl@0: __ASSERT_ALWAYS(iMasterChannel && iSlaveChannel,Kern::Fault("MasterSlave channel not properly initialised",0)); sl@0: TInt r=iMasterChannel->DoCreate(); sl@0: if(r == KErrNone) sl@0: r=iSlaveChannel->DoCreate(); sl@0: return r; sl@0: } sl@0: sl@0: inline TInt DIicBusChannelMasterSlave::CancelTransaction(TIicBusTransaction* aTransaction) sl@0: {return(iMasterChannel->CancelTransaction(aTransaction));} sl@0: sl@0: inline TInt DIicBusChannelMasterSlave::RegisterRxBuffer(TPtr8 aRxBuffer, TInt8 aBufGranularity, TInt8 aNumWords, TInt8 aOffset) sl@0: {return(iSlaveChannel->RegisterRxBuffer(aRxBuffer, aBufGranularity, aNumWords, aOffset));} sl@0: sl@0: inline TInt DIicBusChannelMasterSlave::RegisterTxBuffer(TPtr8 aTxBuffer, TInt8 aBufGranularity, TInt8 aNumWords, TInt8 aOffset) sl@0: {return(iSlaveChannel->RegisterTxBuffer(aTxBuffer, aBufGranularity, aNumWords, aOffset));} sl@0: sl@0: inline TInt DIicBusChannelMasterSlave::SetNotificationTrigger(TInt aTrigger) sl@0: {return(iSlaveChannel->SetNotificationTrigger(aTrigger));} sl@0: sl@0: #ifdef _DEBUG sl@0: inline void DIicBusChannel::DumpChannel() sl@0: { sl@0: __KTRACE_OPT(KIIC, Kern::Printf("\n")); // start sl@0: switch((TInt)ChannelType()) sl@0: { sl@0: case(EMaster): sl@0: { sl@0: __KTRACE_OPT(KIIC, Kern::Printf("ChannelType = EMaster\n")); sl@0: break; sl@0: } sl@0: case(ESlave): sl@0: { sl@0: __KTRACE_OPT(KIIC, Kern::Printf("ChannelType = ESlave\n")); sl@0: break; sl@0: } sl@0: case(EMasterSlave): sl@0: { sl@0: __KTRACE_OPT(KIIC, Kern::Printf("ChannelType = EMasterSlave\n")); sl@0: break; sl@0: } sl@0: default: sl@0: __KTRACE_OPT(KIIC, Kern::Printf("ChannelType %d is not recognised \n",((TInt)ChannelType()))); sl@0: } sl@0: switch((TInt)BusType()) sl@0: { sl@0: case(EI2c): sl@0: { sl@0: __KTRACE_OPT(KIIC, Kern::Printf("BusType = EI2c\n")); sl@0: break; sl@0: } sl@0: case(ESpi): sl@0: { sl@0: __KTRACE_OPT(KIIC, Kern::Printf("BusType = ESpi\n")); sl@0: break; sl@0: } sl@0: case(EMicrowire): sl@0: { sl@0: __KTRACE_OPT(KIIC, Kern::Printf("BusType = EMicrowire\n")); sl@0: break; sl@0: } sl@0: case(ECci): sl@0: { sl@0: __KTRACE_OPT(KIIC, Kern::Printf("BusType = ECci\n")); sl@0: break; sl@0: } sl@0: case(ESccb): sl@0: { sl@0: __KTRACE_OPT(KIIC, Kern::Printf("BusType = ESccb\n")); sl@0: break; sl@0: } sl@0: default: sl@0: __KTRACE_OPT(KIIC, Kern::Printf("BusType %d is not recognised \n",((TInt)BusType()))); sl@0: } sl@0: switch((TInt)ChannelDuplex()) sl@0: { sl@0: case(EHalfDuplex): sl@0: { sl@0: __KTRACE_OPT(KIIC, Kern::Printf("ChannelDuplex = EHalfDuplex\n")); sl@0: break; sl@0: } sl@0: case(EFullDuplex): sl@0: { sl@0: __KTRACE_OPT(KIIC, Kern::Printf("ChannelDuplex = EFullDuplex\n")); sl@0: break; sl@0: } sl@0: default: sl@0: __KTRACE_OPT(KIIC, Kern::Printf("ChannelDuplex %d is not recognised \n",((TInt)ChannelDuplex()))); sl@0: } sl@0: } sl@0: #endif