cbsref/csyrefplugins/csy27010/inc/PortC32InterfaceBase.h
branchRCL_3
changeset 20 07a122eea281
parent 19 630d2f34d719
child 21 4814c5a49428
equal deleted inserted replaced
19:630d2f34d719 20:07a122eea281
     1 //
       
     2 // * Copyright 2004 Neusoft America Inc.
       
     3 // * All rights reserved.
       
     4 // * This component and the accompanying materials are made available
       
     5 // * under the terms of the Eclipse Public License v1.0
       
     6 // * which accompanies this distribution, and is available
       
     7 // * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 // *
       
     9 // * Contributors:
       
    10 // * Keith Collins (Neusoft America Inc.)  original software development and additional code and modifications.
       
    11 // * Thomas Gahagen (Neusoft America Inc.)  additional code and modifications.
       
    12 // * Zhen Yuan (Neusoft America Inc.)  additional code and modifications.
       
    13 // *
       
    14 // * Description:  This file defines the CPortC32Interface class.  This class
       
    15 // *               is equivalent to client RComm subsessions. This is derived 
       
    16 // *               from the C32 base class for ports CPort.
       
    17 //
       
    18 
       
    19 // CPortC32InterfaceBase.h
       
    20 /** @file
       
    21  *
       
    22  * PortC32InterfaceBase:
       
    23  * - Equivalent to client RComm subsessions. This is base class 
       
    24  *   derived from the C32 base class for ports CPort.
       
    25  */
       
    26 
       
    27 #ifndef _PORTC32INTERFACEBASE_H__
       
    28 #define _PORTC32INTERFACEBASE_H__
       
    29 
       
    30 #include <cs_port.h>
       
    31 #include "CsyGlobals.h"
       
    32 #include "Portfactory.h"
       
    33 
       
    34 class CChannelMgrCmdData;
       
    35 class CCsyMsgBufBpFrame;
       
    36 
       
    37 class CPortC32InterfaceBase : public CPort
       
    38 	{
       
    39 public:
       
    40 	virtual ~CPortC32InterfaceBase();
       
    41 
       
    42 	// from CPort
       
    43 	virtual void Destruct();
       
    44 	virtual void StartRead(const TAny* aClientBuffer, TInt aLength);
       
    45 	virtual void ReadCancel();
       
    46 	virtual void NotifySignalChange(TUint aSignalMask);
       
    47 	virtual void NotifySignalChangeCancel();
       
    48 	virtual void StartWrite(const TAny* aClientBuffer, TInt aLength);
       
    49 	virtual TInt SetConfig(const TDesC8& aPackage);
       
    50 
       
    51 	// message passing
       
    52 	void CompleteWriteRequest(TInt aStatus);
       
    53 	virtual void SendFrameToClient(CCsyMsgBufBpFrame* aFrame) = 0;
       
    54 
       
    55 
       
    56 	// utility methods
       
    57 	void SetMuxChannel(CChannelMgrCmdData* aMuxChannel);
       
    58 	CChannelMgrCmdData* GetMuxChannel() const;
       
    59 	TInt GetPortNumber() const;
       
    60 	CPortFactory::TC32ClientType GetClientType() const;
       
    61 
       
    62 	void ModemAndCsyToClientFlowCtrl(const TFlowControl aFlowControl);
       
    63 	void ReceivedV24Signals(const TUint8 aV24Signals);
       
    64 	TInt SetV24Signals(const TUint aRs232Signals);
       
    65 
       
    66 	void IncRefCount();
       
    67 	void CompleteOutstandingRequest();
       
    68 
       
    69 	// link for parent CPortFactory
       
    70 	TSglQueLink iLink;
       
    71 
       
    72 protected:
       
    73 	CPortC32InterfaceBase(CPortFactory& aPortFactory,
       
    74 		CPortFactory::TC32PortInfo& aPortInfo);
       
    75 	void ConstructL();
       
    76 	void SetDataAvailable();
       
    77 
       
    78 	void CompleteReadRequest(TInt aStatus);
       
    79 	virtual TBool ReadFromBufOrQueue() = 0;
       
    80 
       
    81 	// utility
       
    82 	void RemoveWaitingAllFrames(TBool aAddToFreeList = ETrue);
       
    83 	void Shutdown();
       
    84 	
       
    85 
       
    86 	// from CPort, but not all are supported by the CSY
       
    87 	virtual TInt QueryReceiveBuffer(TInt& aLength) const = 0;
       
    88 	virtual void ResetBuffers(TUint aFlags) = 0;
       
    89 	virtual void Break(TInt aTime);
       
    90 	virtual void BreakCancel();
       
    91 	virtual void WriteCancel();
       
    92 	virtual TInt GetConfig(TDes8& aPackage) const;
       
    93 	virtual TInt SetServerConfig(const TDesC8& aPackage);
       
    94 	virtual TInt GetServerConfig(TDes8& aPackage);
       
    95 	virtual TInt GetCaps(TDes8& aPackage);
       
    96 	virtual TInt GetSignals(TUint& aSignals);
       
    97 	virtual TInt SetSignalsToMark(TUint aSignals);
       
    98 	virtual TInt SetSignalsToSpace(TUint aSignals);
       
    99 	virtual TInt GetReceiveBufferLength(TInt& aLength) const;
       
   100 	virtual TInt SetReceiveBufferLength(TInt aLength);
       
   101 	virtual void FreeMemory(); 
       
   102 	virtual void NotifyDataAvailable();
       
   103 	virtual void NotifyDataAvailableCancel();
       
   104 	virtual void NotifyConfigChange();
       
   105 	virtual void NotifyConfigChangeCancel();
       
   106 	virtual void NotifyFlowControlChange();
       
   107 	virtual void NotifyFlowControlChangeCancel();
       
   108 	virtual void NotifyBreak();
       
   109 	virtual void NotifyBreakCancel();
       
   110 	virtual void NotifyOutputEmpty();
       
   111 	virtual void NotifyOutputEmptyCancel();
       
   112 	virtual TInt GetFlowControlStatus(TFlowControl& aFlowControl);
       
   113 	virtual TInt GetRole(TCommRole& aRole);
       
   114 	virtual TInt SetRole(TCommRole aRole);
       
   115 
       
   116 protected:
       
   117 
       
   118 	// List of frames waiting to be read by the client
       
   119 	TSglQue<CCsyMsgBufBpFrame>		iFramesWaitingToBeReadList;
       
   120 	TSglQueIter<CCsyMsgBufBpFrame>	iFramesWaitingToBeReadIter;
       
   121 
       
   122 	// attributes
       
   123 	TCommRole						iRole;
       
   124 	TCommConfigV01					iConfig;
       
   125 	CPortFactory&					iPortFactory;
       
   126 
       
   127 	CPortFactory::TC32PortInfo		iPortInfo;
       
   128 	CChannelMgrCmdData*				iMuxChannel;
       
   129 
       
   130 	// Pointer to client's read buffer when there is a read outstanding.
       
   131 	// (This is the way C32 transfers messages from clients to CSYs.)
       
   132 	TAny*							iClientBuffer;
       
   133 	TInt							iClientLength;
       
   134 	TInt							iPos;
       
   135 	TBool							iOneOrMore;
       
   136 
       
   137 	TFlowControl					iCsyAllowedToSendFrames;
       
   138 	TBool							iFlowControlNotifyPending;
       
   139 
       
   140 	TUint							iSignals;
       
   141 	TUint							iSentSignals;
       
   142 	TUint							iSignalMask;
       
   143 	TBool							iSignalChangeNotifyPending;
       
   144 
       
   145 	TBool							iDataAvailableNotifyPending;
       
   146 
       
   147 	TBool							iIsWriteInProgress;
       
   148 	TBool							iIsReadInProgress;
       
   149 	};
       
   150 
       
   151 
       
   152 // Inline methods
       
   153 inline CChannelMgrCmdData* CPortC32InterfaceBase::GetMuxChannel() const
       
   154 /**
       
   155  * Return a pointer to the mux channel associated with this C32 port.
       
   156  *
       
   157  * @return Pointer to the mux channel associated with this C32 port
       
   158  */
       
   159 	{
       
   160 	return iMuxChannel;
       
   161 	}
       
   162 
       
   163 inline CPortFactory::TC32ClientType CPortC32InterfaceBase::GetClientType() const
       
   164 /**
       
   165  * Return the client type (command or data) for this C32 port.
       
   166  *
       
   167  * @return Client type command or data
       
   168  */
       
   169 	{
       
   170 	return iPortInfo.iClientType;
       
   171 	}
       
   172 
       
   173 inline TInt CPortC32InterfaceBase::GetPortNumber() const
       
   174 /**
       
   175  * Return the port number for this C32 port.
       
   176  *
       
   177  * @return Port number
       
   178  */
       
   179 	{
       
   180 	return iPortInfo.iPortNumber;
       
   181 	}
       
   182 
       
   183 inline void CPortC32InterfaceBase::IncRefCount()
       
   184 /**
       
   185  * Increment the reference count for this object.
       
   186  */
       
   187 	{
       
   188 	Inc();
       
   189 	};
       
   190 
       
   191 #endif  // _PORTC32INTERFACEBASE_H__