1.1 --- a/epoc32/include/wins/winscomm.h Wed Mar 31 12:27:01 2010 +0100
1.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
1.3 @@ -1,249 +0,0 @@
1.4 -// Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
1.5 -// All rights reserved.
1.6 -// This component and the accompanying materials are made available
1.7 -// under the terms of the License "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members
1.8 -// which accompanies this distribution, and is available
1.9 -// at the URL "http://www.symbianfoundation.org/legal/licencesv10.html".
1.10 -//
1.11 -// Initial Contributors:
1.12 -// Nokia Corporation - initial contribution.
1.13 -//
1.14 -// Contributors:
1.15 -//
1.16 -// Description:
1.17 -// wins/specific/winscomm.h
1.18 -//
1.19 -//
1.20 -
1.21 -#ifndef __M32COMM_H__
1.22 -#define __M32COMM_H__
1.23 -#include <platform.h>
1.24 -//#include <kpower.h>
1.25 -#include <d32comm.h>
1.26 -#include <e32ver.h>
1.27 -//
1.28 -const TInt KCommsMajorVersionNumber=1;
1.29 -const TInt KCommsMinorVersionNumber=1;
1.30 -const TInt KCommsBuildVersionNumber=KE32BuildVersionNumber;
1.31 -
1.32 -//
1.33 -enum TStopMode {EStopNormal,EStopPwrDown,EStopEmergency};
1.34 -//
1.35 -//
1.36 -class DChannelComm;
1.37 -class DComm : public DBase
1.38 - {
1.39 -public:
1.40 - virtual TInt Start() =0;
1.41 - virtual void Stop(TStopMode aMode) =0;
1.42 - virtual void Break(TBool aState) =0;
1.43 - virtual void Write(DThread*,TAny*,TInt) = 0;
1.44 - virtual void Read(DThread*,TAny*,TInt) = 0;
1.45 - virtual void NotifySignals(DThread*, TInt) = 0;
1.46 - virtual void NotifyDataAvailable() = 0;
1.47 - virtual TUint Signals() const =0;
1.48 - virtual void SetSignals(TUint aSetMask,TUint aClearMask) =0;
1.49 - virtual TInt ValidateConfig(const TCommConfigV01 &aConfig) const =0;
1.50 - virtual void Configure(TCommConfigV01 &aConfig) =0;
1.51 - virtual void Caps(TDes8 &aCaps) const =0;
1.52 - virtual void CheckConfig(TCommConfigV01& aConfig)=0;
1.53 - virtual TDfcQue* DfcQ(TInt aUnit)=0;
1.54 - inline void SetCurrent(TInt aCurrent);
1.55 - inline TBool Transmitting();
1.56 - virtual TInt RxCount() =0;
1.57 - virtual void ResetBuffers(TBool) = 0;
1.58 - virtual TInt SetRxBufferSize(TInt aSize) = 0;
1.59 - virtual TInt RxBufferSize() =0;
1.60 - virtual TDes8* RxBuffer() =0;
1.61 - virtual TBool AreAnyPending() = 0;
1.62 - virtual void ReadCancel() = 0;
1.63 - virtual void WriteCancel() = 0;
1.64 - virtual void SignalChangeCancel() = 0;
1.65 - virtual inline TBool LineFail() =0;
1.66 -
1.67 -public:
1.68 - DChannelComm *iLdd;
1.69 - TBool iTransmitting;
1.70 - TUint8 * iInBufPtr;
1.71 - TUint8 * iOutBufPtr;
1.72 - };
1.73 -
1.74 -
1.75 -class DDeviceComm : public DLogicalDevice
1.76 - {
1.77 -public:
1.78 - DDeviceComm();
1.79 - virtual TInt Install();
1.80 - virtual void GetCaps(TDes8 &aDes) const;
1.81 - virtual TInt Create(DLogicalChannelBase*& aChannel);
1.82 - };
1.83 -
1.84 -//class DCommPowerHandler;
1.85 -class DChannelComm : public DLogicalChannel
1.86 - {
1.87 -public:
1.88 - enum TState {EOpen,EActive,EClosed};
1.89 - enum TRequest {ERx=1, ETx=2, ESigChg=4, ERxDA=8, EBreak=16, EAll=0xff};
1.90 -
1.91 - DChannelComm();
1.92 - ~DChannelComm();
1.93 - inline void SetStatus(TState aStatus);
1.94 - TInt TurnaroundSet(TUint aNewTurnaroundMilliSeconds);
1.95 - TBool TurnaroundStopTimer();
1.96 - TInt TurnaroundClear();
1.97 - static void TurnaroundStartDfc(TAny* aSelf);
1.98 - void TurnaroundStartDfcImplementation(TBool inIsr);
1.99 - static void TurnaroundTimeout(TAny* aSelf);
1.100 - void TurnaroundTimeoutImplementation(void);
1.101 -
1.102 -protected:
1.103 - virtual TInt DoCreate(TInt aUnit, const TDesC8* aInfo, const TVersion& aVer);
1.104 - virtual void HandleMsg(TMessageBase* aMsg);
1.105 - void DoCancel(TInt aMask);
1.106 - TInt DoControl(TInt aId, TAny* a1, TAny* a2);
1.107 - TInt DoRequest(TInt aId, TRequestStatus* aStatus, TAny* a1, TAny* a2);
1.108 - void Start();
1.109 - void Shutdown();
1.110 - void BreakOn();
1.111 - void BreakOff();
1.112 - void ResetBuffers(TBool aResetTx);
1.113 - void DoCompleteRx();
1.114 - void DoCompleteTx();
1.115 - void DoSignalNotify();
1.116 - void DoRxDataAvailable();
1.117 - void Complete(TInt aMask, TInt aReason);
1.118 - inline void CompleteRead() { iRxCompleteDfc.Add(); }
1.119 - inline void CompleteWrite() { iTxCompleteDfc.Add(); }
1.120 -protected:
1.121 - inline void Write(DThread* aT, TAny* aP, TInt aL) {((DComm*)iPdd)->Write(aT, aP,aL);}
1.122 - inline void Read(DThread* aT, TAny* aP, TInt aL) {((DComm*)iPdd)->Read(aT, aP,aL);}
1.123 - inline void NotifySignals(DThread* aThread, TInt aMask) {((DComm*)iPdd)->NotifySignals(aThread, aMask);}
1.124 - inline void NotifyDataAvailable() {((DComm*)iPdd)->NotifyDataAvailable(); }
1.125 - inline TInt PddStart();
1.126 - inline void Stop(TStopMode aMode);
1.127 - inline void PddBreak(TBool aState);
1.128 - inline TUint Signals() const;
1.129 - inline void SetSignals(TUint aSetMask,TUint aClearMask);
1.130 - inline TInt ValidateConfig(const TCommConfigV01 &aConfig) const;
1.131 - inline void PddConfigure(TCommConfigV01 &aConfig);
1.132 - inline void PddCaps(TDes8 &aCaps) const;
1.133 - inline void PddCheckConfig(TCommConfigV01& aConfig);
1.134 - inline TBool Transmitting();
1.135 - inline TInt BufferSize();
1.136 - inline void ReadCancel();
1.137 - inline void WriteCancel();
1.138 - inline void SignalChangeCancel();
1.139 -
1.140 - static void FinishBreakDfc(TAny* aSelf);
1.141 - void QueueFinishBreakDfc();
1.142 - static void FinishBreak(TAny* aSelf);
1.143 - void FinishBreakImplementation(TInt aBreakError);
1.144 -private:
1.145 -// static void PowerUpDfc(TAny* aPtr);
1.146 -// static void PowerDownDfc(TAny* aPtr);
1.147 - static void CompleteRxDfc(TAny* aPtr);
1.148 - static void CompleteTxDfc(TAny* aPtr);
1.149 - static void SignalNotifyDfc(TAny* aPtr);
1.150 - static void RxDataAvailableDfc(TAny* aPtr);
1.151 - inline TInt RxCount();
1.152 - inline TInt RxBufferSize();
1.153 - inline TDes8* RxBuffer();
1.154 - inline TInt SetRxBufferSize(TInt aSize);
1.155 - inline TBool AreAnyPending() const;
1.156 -// void UpdateSignals();
1.157 - void UpdateAndProcessSignals();
1.158 - void InitiateRead(TAny* aRxDes, TInt aLength);
1.159 - void InitiateWrite(TAny* aTxDes, TInt aLength);
1.160 - void InitiateNotifySignals(TAny* aResult, TInt aMask);
1.161 - void NotifyReadDataAvailable();
1.162 -// TUint FailSignals(TUint aHandshake);
1.163 -// TUint HoldSignals(TUint aHandshake);
1.164 -// TUint FlowControlSignals(TUint aHandshake);
1.165 -// TUint AutoSignals(TUint aHandshake);
1.166 - TInt SetConfig(TCommConfigV01& aConfig);
1.167 -// void CheckOutputHeld();
1.168 -// void ReleaseBuffers();
1.169 - inline TBool LineFail();
1.170 -
1.171 - // Min Turnaround time between Rx and Tx
1.172 - TUint iTurnaroundMicroSeconds; // delay after a receive before transmission in us
1.173 - TUint iTurnaroundMinMilliSeconds; // delay after a receive before transmission in ms
1.174 - TUint iTurnaroundTimerStartTime; // stores the start time of the turnaround timer.
1.175 - TUint8 iTurnaroundTimerStartTimeValid; // stores turnaround timer status 0 after boot, 1 if the timestamp is valid, and 2 if invalid
1.176 - TUint8 iTurnaroundTimerRunning; // a receive has started the timer
1.177 - TUint8 iTurnaroundTransmitDelayed; // a transmission is held until time elapses after a receive
1.178 - TUint8 iSpare;
1.179 - NTimer iTurnaroundTimer; // used to delay transmission after a receive
1.180 - TDfc iTurnaroundDfc; // used in interrupt space, to trigger a call in user space
1.181 -
1.182 - TAny* iTurnaroundTxDesPtr; // client descriptor awaiting transmission
1.183 - TInt iTurnaroundTxDesLength; // initial size of tx descriptor
1.184 -
1.185 - // Breaks
1.186 - TTickLink iBreakTimer;
1.187 - TDfc iBreakDfc;
1.188 - TRequestStatus* iBreakStatus;
1.189 - TInt iBreakTimeMicroSeconds;
1.190 - TBool iTurnaroundBreakDelayed;
1.191 - TAny* iBreakDelayedTxDesPtr; // client descriptor awaiting transmission
1.192 - TInt iBreakDelayedTxDesLength; // initial size of tx descriptor
1.193 - TBool iBreakDelayedTx;
1.194 -public:
1.195 - // Port configuration
1.196 - TCommConfigV01 iConfig;
1.197 -
1.198 - // General items
1.199 - DThread* iClient;
1.200 - TAny* iClientDestPtr;
1.201 -// DCommPowerHandler* iPowerHandler;
1.202 -// TDfc iPowerUpDfc;
1.203 -// TDfc iPowerDownDfc;
1.204 -// TUint32 iPowerDownMask;
1.205 - TState iStatus;
1.206 - TDfc iRxCompleteDfc;
1.207 - TDfc iTxCompleteDfc;
1.208 - TDfc iRxDataAvailableDfc;
1.209 - TDfc iSigNotifyDfc;
1.210 - TUint iFlags; //
1.211 - TUint iSignals; // State of handshake lines
1.212 -// TUint iFailSignals; // 1 bit means line low causes line fail error
1.213 -// TUint iHoldSignals; // 1 bit means line low halts TX
1.214 -// TUint iFlowControlSignals; // 1 bit means signal is used for RX flow control
1.215 -// TUint iAutoSignals; // 1 bit means signal is high when channel is open
1.216 - TBool iShutdown; // ETrue means device is being closed
1.217 - TBool iMsgHeld; // ETrue means a message has been held up waiting power on
1.218 -
1.219 - // RX client related items
1.220 - TInt iRxError;
1.221 - TRequestStatus* iRxStatus;
1.222 -
1.223 -
1.224 - // TX client related items
1.225 - TInt iTxError;
1.226 - TRequestStatus* iTxStatus;
1.227 -
1.228 - // DataAvailable client related items
1.229 - TInt iRxDAError;
1.230 - TRequestStatus* iRxDAStatus;
1.231 -
1.232 - // Signal change notification
1.233 - TInt iSignalError;
1.234 - TRequestStatus* iSignalStatus;
1.235 - TUint* iClientSignalResultPtr; //ptr to uint in client address space
1.236 - TUint iSignalResult; //holds result of the signal (in Symbian OS values)
1.237 - };
1.238 -
1.239 -//class DCommPowerHandler : public DPowerHandler
1.240 -// {
1.241 -//public:
1.242 -// DCommPowerHandler(DChannelComm* aChannel);
1.243 -// virtual TInt DoPowerUp();
1.244 -// virtual void DoPowerDown(TUint32 aPowerDownMask);
1.245 -// virtual void DoEmergencyPowerDown();
1.246 -//public:
1.247 -// DChannelComm* iChannel;
1.248 -// };
1.249 -
1.250 -#include "winscomm.inl"
1.251 -
1.252 -#endif