diff -r 2473f5e227f9 -r 8b72faa1200f cbsref/csyrefplugins/csy27010/inc/PortC32InterfaceBase.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cbsref/csyrefplugins/csy27010/inc/PortC32InterfaceBase.h Tue Jun 22 11:02:32 2010 +0100 @@ -0,0 +1,191 @@ +// +// * Copyright 2004 Neusoft America Inc. +// * All rights reserved. +// * This component and the accompanying materials are made available +// * under the terms of the Eclipse Public License v1.0 +// * which accompanies this distribution, and is available +// * at the URL "http://www.eclipse.org/legal/epl-v10.html". +// * +// * Contributors: +// * Keith Collins (Neusoft America Inc.) original software development and additional code and modifications. +// * Thomas Gahagen (Neusoft America Inc.) additional code and modifications. +// * Zhen Yuan (Neusoft America Inc.) additional code and modifications. +// * +// * Description: This file defines the CPortC32Interface class. This class +// * is equivalent to client RComm subsessions. This is derived +// * from the C32 base class for ports CPort. +// + +// CPortC32InterfaceBase.h +/** @file + * + * PortC32InterfaceBase: + * - Equivalent to client RComm subsessions. This is base class + * derived from the C32 base class for ports CPort. + */ + +#ifndef _PORTC32INTERFACEBASE_H__ +#define _PORTC32INTERFACEBASE_H__ + +#include +#include "CsyGlobals.h" +#include "Portfactory.h" + +class CChannelMgrCmdData; +class CCsyMsgBufBpFrame; + +class CPortC32InterfaceBase : public CPort + { +public: + virtual ~CPortC32InterfaceBase(); + + // from CPort + virtual void Destruct(); + virtual void StartRead(const TAny* aClientBuffer, TInt aLength); + virtual void ReadCancel(); + virtual void NotifySignalChange(TUint aSignalMask); + virtual void NotifySignalChangeCancel(); + virtual void StartWrite(const TAny* aClientBuffer, TInt aLength); + virtual TInt SetConfig(const TDesC8& aPackage); + + // message passing + void CompleteWriteRequest(TInt aStatus); + virtual void SendFrameToClient(CCsyMsgBufBpFrame* aFrame) = 0; + + + // utility methods + void SetMuxChannel(CChannelMgrCmdData* aMuxChannel); + CChannelMgrCmdData* GetMuxChannel() const; + TInt GetPortNumber() const; + CPortFactory::TC32ClientType GetClientType() const; + + void ModemAndCsyToClientFlowCtrl(const TFlowControl aFlowControl); + void ReceivedV24Signals(const TUint8 aV24Signals); + TInt SetV24Signals(const TUint aRs232Signals); + + void IncRefCount(); + void CompleteOutstandingRequest(); + + // link for parent CPortFactory + TSglQueLink iLink; + +protected: + CPortC32InterfaceBase(CPortFactory& aPortFactory, + CPortFactory::TC32PortInfo& aPortInfo); + void ConstructL(); + void SetDataAvailable(); + + void CompleteReadRequest(TInt aStatus); + virtual TBool ReadFromBufOrQueue() = 0; + + // utility + void RemoveWaitingAllFrames(TBool aAddToFreeList = ETrue); + void Shutdown(); + + + // from CPort, but not all are supported by the CSY + virtual TInt QueryReceiveBuffer(TInt& aLength) const = 0; + virtual void ResetBuffers(TUint aFlags) = 0; + virtual void Break(TInt aTime); + virtual void BreakCancel(); + virtual void WriteCancel(); + virtual TInt GetConfig(TDes8& aPackage) const; + virtual TInt SetServerConfig(const TDesC8& aPackage); + virtual TInt GetServerConfig(TDes8& aPackage); + virtual TInt GetCaps(TDes8& aPackage); + virtual TInt GetSignals(TUint& aSignals); + virtual TInt SetSignalsToMark(TUint aSignals); + virtual TInt SetSignalsToSpace(TUint aSignals); + virtual TInt GetReceiveBufferLength(TInt& aLength) const; + virtual TInt SetReceiveBufferLength(TInt aLength); + virtual void FreeMemory(); + virtual void NotifyDataAvailable(); + virtual void NotifyDataAvailableCancel(); + virtual void NotifyConfigChange(); + virtual void NotifyConfigChangeCancel(); + virtual void NotifyFlowControlChange(); + virtual void NotifyFlowControlChangeCancel(); + virtual void NotifyBreak(); + virtual void NotifyBreakCancel(); + virtual void NotifyOutputEmpty(); + virtual void NotifyOutputEmptyCancel(); + virtual TInt GetFlowControlStatus(TFlowControl& aFlowControl); + virtual TInt GetRole(TCommRole& aRole); + virtual TInt SetRole(TCommRole aRole); + +protected: + + // List of frames waiting to be read by the client + TSglQue iFramesWaitingToBeReadList; + TSglQueIter iFramesWaitingToBeReadIter; + + // attributes + TCommRole iRole; + TCommConfigV01 iConfig; + CPortFactory& iPortFactory; + + CPortFactory::TC32PortInfo iPortInfo; + CChannelMgrCmdData* iMuxChannel; + + // Pointer to client's read buffer when there is a read outstanding. + // (This is the way C32 transfers messages from clients to CSYs.) + TAny* iClientBuffer; + TInt iClientLength; + TInt iPos; + TBool iOneOrMore; + + TFlowControl iCsyAllowedToSendFrames; + TBool iFlowControlNotifyPending; + + TUint iSignals; + TUint iSentSignals; + TUint iSignalMask; + TBool iSignalChangeNotifyPending; + + TBool iDataAvailableNotifyPending; + + TBool iIsWriteInProgress; + TBool iIsReadInProgress; + }; + + +// Inline methods +inline CChannelMgrCmdData* CPortC32InterfaceBase::GetMuxChannel() const +/** + * Return a pointer to the mux channel associated with this C32 port. + * + * @return Pointer to the mux channel associated with this C32 port + */ + { + return iMuxChannel; + } + +inline CPortFactory::TC32ClientType CPortC32InterfaceBase::GetClientType() const +/** + * Return the client type (command or data) for this C32 port. + * + * @return Client type command or data + */ + { + return iPortInfo.iClientType; + } + +inline TInt CPortC32InterfaceBase::GetPortNumber() const +/** + * Return the port number for this C32 port. + * + * @return Port number + */ + { + return iPortInfo.iPortNumber; + } + +inline void CPortC32InterfaceBase::IncRefCount() +/** + * Increment the reference count for this object. + */ + { + Inc(); + }; + +#endif // _PORTC32INTERFACEBASE_H__