navienginebsp/naviengine_assp/navi_i2s.h
changeset 0 5de814552237
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/navienginebsp/naviengine_assp/navi_i2s.h	Tue Sep 28 18:00:05 2010 +0100
@@ -0,0 +1,85 @@
+/*
+* 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 "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:  
+* bsp\hwip_nec_navienegine\navienegine_assp\i2s.h
+*
+*/
+
+
+
+#include <e32cmn.h>
+#include <e32def.h>
+#include <naviengine_priv.h>
+#include <i2s.h>
+
+
+//
+// each channel should implemment the platform specific interface 
+
+class DI2sChannelBase
+	{
+public:
+	static TInt CreateChannels(DI2sChannelBase*& aChannel, TInt aInterfaceId);   
+	
+	virtual TInt ConfigureInterface(TDes8* aConfig) = 0;
+	virtual TInt GetInterfaceConfiguration(TDes8& aConfig) = 0;
+	virtual TInt SetSamplingRate(TInt aSamplingRate) = 0;
+	virtual TInt GetSamplingRate(TInt& aSamplingRate) = 0;
+	virtual TInt SetFrameLengthAndFormat(TInt aFrameLength, TInt aLeftFramePhaseLength) = 0;
+	virtual TInt GetFrameFormat(TInt& aLeftFramePhaseLength, TInt& aRightFramePhaseLength) = 0;
+	virtual TInt SetSampleLength(TInt aFramePhase, TInt aSampleLength) = 0;
+	virtual TInt GetSampleLength(TInt aFramePhase, TInt& aSampleLength) = 0;
+	virtual TInt SetDelayCycles(TInt aFramePhase, TInt aDelayCycles) = 0;
+	virtual TInt GetDelayCycles(TInt aFramePhase, TInt& aDelayCycles) = 0;
+	virtual TInt ReadReceiveRegister(TInt aFramePhase, TInt& aData) = 0;
+	virtual TInt WriteTransmitRegister(TInt aFramePhase, TInt aData) = 0;
+	virtual TInt ReadTransmitRegister(TInt aFramePhase, TInt& aData) = 0;
+	virtual TInt ReadRegisterModeStatus(TInt aFramePhase, TInt& aFlags) = 0;
+	virtual TInt EnableRegisterInterrupts(TInt aFramePhase, TInt aInterrupt) = 0;
+	virtual TInt DisableRegisterInterrupts(TInt aFramePhase, TInt aInterrupt) = 0;
+	virtual TInt IsRegisterInterruptEnabled(TInt aFramePhase, TInt& aEnabled) = 0;
+	virtual TInt EnableFIFO(TInt aFramePhase, TInt aFifoMask) = 0;
+	virtual TInt DisableFIFO(TInt aFramePhase, TInt aFifoMask) = 0;
+	virtual TInt IsFIFOEnabled(TInt aFramePhase, TInt& aEnabled) = 0;
+	virtual TInt SetFIFOThreshold(TInt aFramePhase, TInt aDirection, TInt aThreshold) = 0;
+	virtual TInt ReadFIFOModeStatus(TInt aFramePhase, TInt& aFlags) = 0;
+	virtual TInt EnableFIFOInterrupts(TInt aFramePhase, TInt aInterrupt) = 0;
+	virtual TInt DisableFIFOInterrupts(TInt aFramePhase, TInt aInterrupt) = 0;
+	virtual TInt IsFIFOInterruptEnabled(TInt aFramePhase, TInt& aEnabled) = 0;
+	virtual TInt ReadFIFOLevel(TInt aFramePhase, TInt aDirection, TInt& aLevel) = 0;
+	virtual TInt EnableDMA(TInt aFifoMask) = 0;
+	virtual TInt DisableDMA(TInt aFifoMask) = 0;
+	virtual TInt IsDMAEnabled(TInt& aEnabled) = 0;
+	virtual TInt Start(TInt aDirection) = 0;
+	virtual TInt Stop(TInt aDirection) = 0;
+	virtual TInt IsStarted(TInt aDirection, TBool& aStarted) = 0;	
+	
+protected:
+	TInt iInterfaceId;
+	TI2sConfigV01 iConfig;
+	};
+
+/**
+The management class for all I2S channels
+*/
+class TI2sManager
+	{
+public:
+	// initialisation
+	TInt DoCreate();
+public:
+	static DI2sChannelBase **iChannels;	// array of pointers to channels (populated in DoCreate); indexed by the channel number portion of interface ID (bottom 16 bits)
+	static TInt iChannelsNum; 			// to store number of channels present on the system (obtained from ConfRep and set in DoCreate)
+	};
+