--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/toolsandutils/wintunnel/src_beech/d_comm.h Tue Feb 02 01:39:43 2010 +0200
@@ -0,0 +1,302 @@
+// Copyright (c) 1995-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:
+//
+
+
+#if !defined(__D_COMM_H__)
+#define __D_COMM_H__
+#if !defined(__K32STD_H__)
+#include <k32std.h>
+#endif
+#if !defined(__D32COMM_H__)
+#include <d32comm.h>
+#endif
+#if !defined(__E32VER_H__)
+#include <e32ver.h>
+#endif
+//
+const TInt KCommsMajorVersionNumber=1;
+const TInt KCommsMinorVersionNumber=0;
+const TInt KCommsBuildVersionNumber=KE32BuildVersionNumber;
+//
+const TInt KDefaultRxBufferSize=0x400;
+const TInt KTxBufferSize=0x400;
+const TInt KMaxHighWaterMark=0x080;
+//
+const TUint KReceiveIsrParityError=0x10000000;
+const TUint KReceiveIsrFrameError=0x20000000;
+const TUint KReceiveIsrOverrunError=0x40000000;
+const TUint KReceiveIsrMaskError=0x70000000;
+//
+const TInt KTransmitIrqEmpty=KErrGeneral;
+//
+const TUint KReceiveIsrTermChar=0x80000000;
+const TUint KReceiveIsrMaskComplete=0xf0000000;
+const TUint KReceiveIsrShift=24;
+const TUint KReceiveIsrShiftedMask=0x0f;
+//
+//
+enum TStopMode {EStopNormal,EStopPwrDown,EStopEmergency};
+//
+//
+class DChannelComm;
+class DComm : public CBase
+ {
+public:
+ virtual TInt Start() =0;
+ virtual void Stop(TStopMode aMode) =0;
+ virtual void Break(TBool aState) =0;
+ virtual void EnableTransmit() =0;
+ virtual TUint Signals() const =0;
+ virtual void SetSignals(TUint aSetMask,TUint aClearMask) =0;
+ virtual TInt Validate(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 void EnableInterrupts() =0;
+ virtual void DisableInterrupts() =0;
+ virtual TInt CompleteSlowOpen(DThread *aThread,TRequestStatus *aReqStat) =0;
+ inline DChannelComm &Comm() {return(*iComm);}
+ inline void SetComm(DChannelComm *aComm) {iComm=aComm;}
+ virtual void SetTimer(const TUint aTimeOut) =0;
+ virtual void CancelTimer() =0;
+private:
+ DChannelComm *iComm;
+#ifdef _DEBUG_DEVCOMM
+public:
+ TInt iRxIntCount;
+ TInt iTxIntCount;
+ TInt iRxErrCount;
+ TInt iTxErrCount;
+#endif
+ };
+//
+// 32 bit sequence number space
+//
+class TCommSeqNum
+ {
+public:
+ inline TCommSeqNum& operator++();
+ inline TCommSeqNum& operator++(TInt);
+ inline TCommSeqNum& operator--();
+ inline TCommSeqNum& operator--(TInt);
+ inline TCommSeqNum& operator=(TUint aVal);
+ inline TCommSeqNum& operator=(const TCommSeqNum& aVal);
+ inline TCommSeqNum& operator+=(TInt aVal);
+ inline TCommSeqNum& operator-=(TInt aVal);
+ inline TBool operator==(const TCommSeqNum& aVal) const;
+ inline TBool operator!=(const TCommSeqNum& aVal) const;
+ inline TBool operator<(const TCommSeqNum& aVal) const;
+ inline TBool operator<=(const TCommSeqNum& aVal) const;
+ inline TBool operator>(const TCommSeqNum& aVal) const;
+ inline TBool operator>=(const TCommSeqNum& aVal) const;
+ inline TCommSeqNum operator+(TInt aVal);
+ inline TCommSeqNum operator-(TInt aVal);
+ inline TInt operator-(const TCommSeqNum& aVal);
+ inline TUint Int() const;
+private:
+ TUint iNum;
+ };
+//
+class CCommRxBuf : public CBase
+ {
+public:
+ CCommRxBuf();
+ ~CCommRxBuf();
+ void SetLengthL(TInt aLength);
+ void Reset();
+ inline TInt Count() { return iCount; }
+ inline TInt Length() { return iLength; }
+ TInt PutChar(TUint aChar);
+ TInt ClientWrite(TUint& aStatus, DComm* aDriver, DThread* aThread, const TAny* aPtr, TInt& aRxLength, TInt& aRxOffset, TInt aMode);
+ TInt TestTerm(TInt aCount, TInt aTermCount, TUint8* aTermList);
+ TBool RescanTerminators(DComm* aDriver, TInt aTermCount, TText8* aTermChars);
+public:
+ TInt iLength;
+ TInt iCount;
+ TInt iInsP;
+ TInt iRemP;
+ TUint8* iCharPtr;
+ TUint8* iInfoPtr;
+ TCommSeqNum iInsSeqNum;
+ TCommSeqNum iRemSeqNum;
+ TCommSeqNum iLastSeqNum;
+ };
+
+class CCommTxBuf : public CCirBuffer
+ {
+public:
+ CCommTxBuf();
+ TInt ClientRead(DComm* aDriver, DThread* aThread, const TAny* aPtr, TInt& aTxLength, TInt& aTxOffset, TInt aMode);
+ };
+
+//
+class DDeviceComm : public DLogicalDevice
+ {
+public:
+ DDeviceComm();
+ virtual TInt Install();
+ virtual void GetCaps(TDes8 &aDes) const;
+ virtual DLogicalChannel *CreateL();
+ };
+//
+
+class DCommPowerHandler : public DPowerHandler
+ {
+public:
+ DCommPowerHandler(DChannelComm *aLdd);
+ void RequestComplete();
+ void RequestPending();
+ static void Timeout(TAny *, TInt);
+
+ virtual TInt DoPowerOn();
+ virtual void DoPowerStandby();
+ virtual void DoPowerEmergencyStandby();
+public:
+ DChannelComm *iLdd;
+ TTickLink iTimer;
+ };
+
+class DChannelComm : public DLogicalChannel
+ {
+public:
+ enum TState {ENotActive,EActive,EClosed};
+private:
+ enum TDfcRequestFlags
+ {
+ EFillTxBufferRequired=0x00000001,
+ EDrainRxBufferRequired=0x00000002,
+ ECompleteRead=0x00000008,
+ ECompleteWrite=0x00000010,
+ ECompleteBreak=0x00000020,
+ EEarlyCompleteWrite=0x00000040,
+ ECompleteEmergency=0x00000080,
+ ECompleteSignalChange=0x00000100,
+ ECompleteDataAvailable=0x00000200,
+ ETurnaroundTimerDfc=0x00000400
+ };
+public:
+ DChannelComm(DLogicalDevice *aDevice);
+ ~DChannelComm();
+ virtual void ReceiveIsr(TUint aChar);
+ virtual TInt TransmitIsr();
+ virtual void StateIsr(TUint aStatus);
+ inline TBool IsPowerGood();
+ inline void SetStatus(TState aStatus);
+ inline void CompleteAllReqs(TInt aReason);
+ inline TBool IsReading() const;
+ inline TBool IsWriting() const;
+protected:
+ virtual void DoCreateL(TInt aUnit,CBase *aDriver,const TDesC *anInfo,const TVersion &aVer);
+ virtual void DoCancel(TInt aReqNo);
+ virtual void DoRequest(TInt aReqNo,TAny *a1,TAny *a2);
+ virtual TInt DoControl(TInt aFunction,TAny *a1,TAny *a2);
+ inline TBool AreAnyPending() const;
+ void Start();
+ void Stop(TStopMode aMode);
+ void BreakOn();
+ void BreakOff();
+ void EnableTransmit();
+ TInt SetRxBufferSize(TInt aSize);
+ void ResetBuffers();
+ TBool IsLineFail(TUint aHandshake);
+ void DoDrainRxBuffer();
+ void DoFillTxBuffer();
+ inline void DrainRxBuffer() {QueueDfc(EDrainRxBufferRequired);};
+ inline void FillTxBuffer() {QueueDfc(EFillTxBufferRequired);};
+ inline void CompleteWrite() {QueueDfc(ECompleteWrite);};
+ inline void EarlyCompleteWrite() {QueueDfc(EEarlyCompleteWrite);};
+ inline void CompleteSignalChange() {QueueDfc(ECompleteSignalChange);};
+ inline void CompleteDataAvailable() {QueueDfc(ECompleteDataAvailable);};
+// void CompleteWrite(TInt anError=KErrNone);
+// void CompleteRead(TInt anError=KErrNone);
+// void DoCompleteWrite();
+// void DoCompleteRead();
+public:
+ virtual void DoPowerDown();
+ virtual void DoEmergencyPowerDown();
+
+ TInt TurnaroundSet(TUint aNewTurnaroundMicroSeconds);
+ TInt TurnaroundClear();
+ void RestartTurnaroundTimer();
+ virtual void TurnaroundStartDfcImplementation();
+ void TurnaroundTimeoutImplementation();
+
+private:
+ static TInt CallDfc(TAny* aDChannelComm);
+ void DfcHandler();
+ void QueueDfc(TUint aRequestMask);
+ void ResetDevice();
+ void RestoreDtrRrs();
+public:
+ TCommConfigV02 iConfig;
+private:
+ DComm *iDriver;
+ DCommPowerHandler *iPowerHandler;
+ TState iStatus;
+ TUint iDfcRequest;
+ TDfc iDfc;
+ TInt iInputHeld; // Receive suspended by signalling peer
+ TInt iOutputHeld; // Transmit suspended by peer
+ TInt iReceiveError;
+ TInt iWriteError;
+ TInt iReceiveOneOrMore;
+ TInt iWriteZero; // Awaiting ability to write
+ TInt iReceiveErrorLength;
+ TInt iReceiveLength;
+ TInt iReceiveOffset;
+ TInt iTransmitLength;
+ TInt iTransmitOffset;
+ TUint iFlags;
+ TUint iSignals;
+ TInt iLowWaterMark;
+ TInt iHighWaterMark;
+ TInt iHalfFullMark;
+ TUint8 *iReceivePtr; // Client space pointer
+ TUint8 *iTransmitPtr; // Client space pointer
+ CCommRxBuf *iRxBuf;
+ CCommTxBuf *iTxBuf;
+ TBool iIsReading;
+ TBool iIsWriting;
+ TBool iDrainingRxBuf;
+ TBool iFillingTxBuf;
+ TBool iRunningDfc;
+ TBool iIsClientWriting;
+ TBool iSignalChangeNotification;
+ TUint* iSignalChangePtr;
+ TUint iSignalMask;
+ TUint iSignalChangeInfo;
+ TBool iDataAvailableNotification;
+
+ // Min Turnaround time between Rx and Tx
+ TUint iTurnaroundMinMicroSeconds; // delay after a receive before transmission
+ TBool iTurnaroundTimerRunning; // a receive has started the timer
+ TBool iTurnaroundTransmitDelayed; // a transmission is held until time elapses after a receive
+ TAny* iTurnaroundTxDesPtr; // client descriptor awaiting transmission
+ TInt iTurnaroundTxDesLength; // initial size of tx descriptor
+
+#ifdef _DEBUG_DEVCOMM
+ TInt iDfcCount;
+ TInt iDfcReqSeq;
+ TInt iDfcHandlerSeq;
+ TInt iDoDrainSeq;
+ TInt iTxChars, iRxChars;
+ TInt iTxXon, iTxXoff, iRxXon, iRxXoff;
+#endif
+ friend class DCommPowerHandler;
+ };
+
+#include "d_comm.inl"
+
+#endif