toolsandutils/wintunnel/src_cedar/winscomm.h
changeset 0 83f4b4db085c
child 1 d4b442d23379
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolsandutils/wintunnel/src_cedar/winscomm.h	Tue Feb 02 01:39:43 2010 +0200
@@ -0,0 +1,231 @@
+// Copyright (c) 2002-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:
+// wins/specific/winscomm.h
+// 
+//
+
+#ifndef __M32COMM_H__
+#define __M32COMM_H__
+#include <platform.h>
+//#include <kpower.h>
+#include <d32comm.h>
+#include <e32ver.h>
+//
+const TInt KCommsMajorVersionNumber=1;
+const TInt KCommsMinorVersionNumber=1;
+const TInt KCommsBuildVersionNumber=KE32BuildVersionNumber;
+
+//
+enum TStopMode {EStopNormal,EStopPwrDown,EStopEmergency};
+//
+//
+class DChannelComm;
+class DComm : public DBase
+	{
+public:
+	virtual TInt Start() =0;
+	virtual void Stop(TStopMode aMode) =0;
+	virtual void Break(TBool aState) =0;
+	virtual void Write(DThread*,TAny*,TInt) = 0;
+	virtual void Read(DThread*,TAny*,TInt) = 0;
+	virtual void NotifySignals(DThread*, TInt) = 0;
+	virtual void NotifyDataAvailable() = 0;
+	virtual TUint Signals() const =0;
+	virtual void SetSignals(TUint aSetMask,TUint aClearMask) =0;
+	virtual TInt ValidateConfig(const TCommConfigV01 &aConfig) const =0;
+	virtual void Configure(TCommConfigV01 &aConfig) =0;
+	virtual void Caps(TDes8 &aCaps) const =0;
+	virtual void CheckConfig(TCommConfigV01& aConfig)=0;
+	virtual TDfcQue* DfcQ(TInt aUnit)=0;
+	inline void SetCurrent(TInt aCurrent);
+	inline TBool Transmitting();
+	virtual TInt RxCount() =0;
+	virtual void ResetBuffers(TBool) = 0;
+	virtual TInt SetRxBufferSize(TInt aSize) = 0;
+	virtual TInt RxBufferSize() =0;
+	virtual TDes8* RxBuffer() =0;
+	virtual TBool AreAnyPending() = 0;
+	virtual void ReadCancel() = 0;
+	virtual void WriteCancel() = 0;
+	virtual void SignalChangeCancel() = 0;
+
+public:
+	DChannelComm *iLdd;
+	TBool iTransmitting;
+	TUint8 * iInBufPtr;
+	TUint8 * iOutBufPtr;
+
+	};
+
+
+class DDeviceComm : public DLogicalDevice
+	{
+public:
+	DDeviceComm();
+	virtual TInt Install();
+	virtual void GetCaps(TDes8 &aDes) const;
+	virtual TInt Create(DLogicalChannelBase*& aChannel);
+	};
+
+//class DCommPowerHandler;
+class DChannelComm : public DLogicalChannel
+	{
+public:
+	enum TState {EOpen,EActive,EClosed};
+	enum TRequest {ERx=1, ETx=2, ESigChg=4, ERxDA=8, EAll=0xff};
+
+	DChannelComm();
+	~DChannelComm();
+	inline void SetStatus(TState aStatus);
+	TInt TurnaroundSet(TUint aNewTurnaroundMilliSeconds);
+	TBool TurnaroundStopTimer();
+	TInt TurnaroundClear();
+	static void TurnaroundStartDfc(TAny* aSelf);
+	void TurnaroundStartDfcImplementation(TBool inIsr);
+	static void TurnaroundTimeout(TAny* aSelf);
+	void TurnaroundTimeoutImplementation(void);
+
+protected:
+	virtual TInt DoCreate(TInt aUnit, const TDesC8* aInfo, const TVersion& aVer);
+	virtual void HandleMsg(TMessageBase* aMsg);
+	void DoCancel(TInt aMask);
+	TInt DoControl(TInt aId, TAny* a1, TAny* a2);
+	TInt DoRequest(TInt aId, TRequestStatus* aStatus, TAny* a1, TAny* a2);
+	void Start();
+	void Shutdown();
+	void BreakOn();
+	void BreakOff();
+	void ResetBuffers(TBool aResetTx);
+	void DoCompleteRx();
+	void DoCompleteTx();
+	void DoSignalNotify();
+	void DoRxDataAvailable();
+	void Complete(TInt aMask, TInt aReason);
+	inline void CompleteRead()	{ iRxCompleteDfc.Add(); }
+	inline void CompleteWrite() { iTxCompleteDfc.Add(); }
+protected:
+	inline void Write(DThread* aT, TAny* aP, TInt aL) {((DComm*)iPdd)->Write(aT, aP,aL);}
+	inline void Read(DThread* aT, TAny* aP, TInt aL) {((DComm*)iPdd)->Read(aT, aP,aL);}
+	inline void NotifySignals(DThread* aThread, TInt aMask) {((DComm*)iPdd)->NotifySignals(aThread, aMask);}
+	inline void NotifyDataAvailable() {((DComm*)iPdd)->NotifyDataAvailable(); }
+	inline TInt PddStart();
+	inline void Stop(TStopMode aMode);
+	inline void PddBreak(TBool aState);
+	inline TUint Signals() const;
+	inline void SetSignals(TUint aSetMask,TUint aClearMask);
+	inline TInt ValidateConfig(const TCommConfigV01 &aConfig) const;
+	inline void PddConfigure(TCommConfigV01 &aConfig);
+	inline void PddCaps(TDes8 &aCaps) const;
+	inline void PddCheckConfig(TCommConfigV01& aConfig);
+	inline TBool Transmitting();
+	inline TInt BufferSize();
+	inline void ReadCancel();
+	inline void WriteCancel();
+	inline void SignalChangeCancel();
+private:
+//	static void PowerUpDfc(TAny* aPtr);
+//	static void PowerDownDfc(TAny* aPtr);
+	static void CompleteRxDfc(TAny* aPtr);
+	static void CompleteTxDfc(TAny* aPtr);
+	static void SignalNotifyDfc(TAny* aPtr);
+	static void RxDataAvailableDfc(TAny* aPtr);
+	inline TInt RxCount();
+	inline TInt RxBufferSize();
+	inline TDes8* RxBuffer();
+	inline TInt SetRxBufferSize(TInt aSize);
+	inline TBool AreAnyPending() const;
+//	void UpdateSignals();
+	void UpdateAndProcessSignals();
+	void InitiateRead(TAny* aRxDes, TInt aLength);
+	void InitiateWrite(TAny* aTxDes, TInt aLength);
+	void InitiateNotifySignals(TAny* aResult, TInt aMask);
+	void NotifyReadDataAvailable();
+//	TUint FailSignals(TUint aHandshake);
+//	TUint HoldSignals(TUint aHandshake);
+//	TUint FlowControlSignals(TUint aHandshake);
+//	TUint AutoSignals(TUint aHandshake);
+	TInt SetConfig(TCommConfigV01& aConfig);
+//	void CheckOutputHeld();
+//	void ReleaseBuffers();
+
+	// Min Turnaround time between Rx and Tx
+	TUint		iTurnaroundMicroSeconds;		// delay after a receive before transmission in us
+	TUint		iTurnaroundMinMilliSeconds;		// delay after a receive before transmission in ms
+	TBool		iTurnaroundTimerRunning;		// a receive has started the timer
+	TBool		iTurnaroundTransmitDelayed;		// a transmission is held until time elapses after a receive
+	NTimer		iTurnaroundTimer;				// used to delay transmission after a receive
+	TDfc		iTurnaroundDfc;					// used in interrupt space, to trigger a call in user space
+
+	TAny*		iTurnaroundTxDesPtr;			// client descriptor awaiting transmission
+	TInt		iTurnaroundTxDesLength;			// initial size of tx descriptor
+
+public:
+	// Port configuration
+	TCommConfigV01 iConfig;
+
+	// General items
+	DThread* iClient;
+	TAny* iClientDestPtr;
+//	DCommPowerHandler* iPowerHandler;
+//	TDfc iPowerUpDfc;
+//	TDfc iPowerDownDfc;
+//	TUint32 iPowerDownMask;
+	TState iStatus;
+	TDfc iRxCompleteDfc;
+	TDfc iTxCompleteDfc;
+	TDfc iRxDataAvailableDfc;
+	TDfc iSigNotifyDfc;
+	TUint iFlags;				//
+	TUint iSignals;				// State of handshake lines
+//	TUint iFailSignals;			// 1 bit means line low causes line fail error
+//	TUint iHoldSignals;			// 1 bit means line low halts TX
+//	TUint iFlowControlSignals;	// 1 bit means signal is used for RX flow control
+//	TUint iAutoSignals;			// 1 bit means signal is high when channel is open
+	TBool iShutdown;			// ETrue means device is being closed
+	TBool iMsgHeld;				// ETrue means a message has been held up waiting power on
+
+	// RX client related items
+	TInt iRxError;
+	TRequestStatus* iRxStatus;
+
+
+	// TX client related items
+	TInt iTxError;
+	TRequestStatus* iTxStatus;
+
+	// DataAvailable client related items
+	TInt iRxDAError;
+	TRequestStatus* iRxDAStatus;
+
+	// Signal change notification
+	TInt iSignalError;
+	TRequestStatus* iSignalStatus;	
+	TUint* iClientSignalResultPtr;	//ptr to uint in client address space
+	TUint iSignalResult;			//holds result of the signal (in Symbian OS values)
+	};
+
+//class DCommPowerHandler : public DPowerHandler
+//	{
+//public:
+//	DCommPowerHandler(DChannelComm* aChannel);
+//	virtual TInt DoPowerUp();
+//	virtual void DoPowerDown(TUint32 aPowerDownMask);
+//	virtual void DoEmergencyPowerDown();
+//public:
+//	DChannelComm* iChannel;
+//	};
+
+#include "winscomm.inl"
+
+#endif