--- /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