cbsref/csyrefplugins/csy27010/inc/ChannelMgrBase.h
changeset 49 f50f4094acd7
equal deleted inserted replaced
48:14460bf2a402 49:f50f4094acd7
       
     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 contains the declaration for class CChannelMgrBase.
       
    15 // *              Class CChannelMgrBase is an abstract class that is inherted by
       
    16 // *              classes that define a single 3GPP 27.010 based logical channel (DLC).
       
    17 // *              Derived classes are either control, command and data channels.
       
    18 //
       
    19 
       
    20 // ChannelMgrBase.h
       
    21 
       
    22 /** @file ChannelMgrBase.h
       
    23  *
       
    24  * This file contains the declaration for class CChannelMgrBase.
       
    25  * Class CChannelMgrBase is an abstract class that is inherted by
       
    26  * classes that define a single 3GPP 27.010 based logical channel (DLC).
       
    27  * Derived classes are either control, command and data channels.
       
    28  */
       
    29 
       
    30 #ifndef _CHANNELMGRBASE_H_
       
    31 #define _CHANNELMGRBASE_H_
       
    32 
       
    33 #include <e32base.h>
       
    34 #include <c32comm.h>
       
    35 #include "CsyGlobals.h"
       
    36 #include "timeouter.h"
       
    37 
       
    38 class CPortFactory;
       
    39 class CMux0710Protocol;
       
    40 class CPortC32InterfaceBase;
       
    41 class CPortC32Interface;
       
    42 class CFrameToBPQueue;
       
    43 class CFrameToClientQueue;
       
    44 class CChannelObserverAo;
       
    45 class CCsyMsgBufBpFrame;
       
    46 
       
    47 /** 
       
    48  *  CChannelMgrBase is an abstract class that is inherted by
       
    49  *  classes that define a single 3GPP 27.010 based logical channel (DLC).
       
    50  *  Derived classes are either control or cmd/data channels.
       
    51  */
       
    52 class CChannelMgrBase : public CBase, public MTimeoutObserver
       
    53 	{
       
    54 public:
       
    55 	enum TCsyChannelState
       
    56 		{
       
    57 		ECsyChannelStateDisconnected,    // Channel is Disconnected
       
    58 		ECsyChannelStateParameterNegotiating, // Channel was disconnected and has sent Parameter Negotiation
       
    59 		ECsyChannelStateConnecting,      // Channel was disconnected and has sent a SABM to be connected
       
    60 		ECsyChannelStateMSCsent,         
       
    61 		ECsyChannelStateWaitingForChannelReady, 
       
    62 		ECsyChannelStateConnected,       // Channel is Connected, Data can be transmitted
       
    63 		ECsyChannelStateDisconnecting,   // Channel was connected and is now waiting to be disconnected
       
    64 		ECsyChannelStateFlowControlOff,  // Channel has been Xoff'd by the baseband
       
    65 		ECsyChannelStateTransmitError    // Not receive after timeout and retransmite, Link error
       
    66 		};
       
    67 
       
    68 public:
       
    69     CChannelMgrBase(const TUint8 aDlcNum,
       
    70 					CPortFactory& aPortFactory, 
       
    71 					CMux0710Protocol& aMux0710Protocol);
       
    72 
       
    73     virtual ~CChannelMgrBase();
       
    74 
       
    75     TInt Connect();
       
    76     TInt Disconnect();
       
    77 	TInt ParameterNegotiate();
       
    78 
       
    79 	void ProcessRecvFrame(CCsyMsgBufBpFrame* aBpFrame);
       
    80 	
       
    81 	TDes8& RefToMsgBuffer();
       
    82 
       
    83 	TUint8 GetDlcNumber() const;
       
    84 	TCsyChannelState GetChannelState() const;
       
    85 
       
    86 	void WaitForChannelReady();
       
    87 	void NotifyChannelReady();
       
    88 
       
    89 	CPortC32InterfaceBase* GetC32Port() const;
       
    90 
       
    91 	void MscReceived(TUint8 aV24Signals);
       
    92 	TInt SendMscCommand(TUint8 aV24Signals);
       
    93 
       
    94 	void ModemAndCsyToClientFlowCtrl(const TFlowControl aFlowControl);
       
    95 	void ReceivedV24Signals(const TUint8 aV24Signals);
       
    96 
       
    97 	inline TFlowControl CsyToModemFlowControl();
       
    98 	TInt SetCsyToModemFlowControl(TFlowControl aFlowControl);
       
    99 
       
   100 	TInt PlaceOnOutboundQueue();
       
   101 	void WriteCancel();
       
   102 
       
   103 	inline TFlowControl GetModemAndCsyToClientFlowControl();
       
   104 
       
   105 public://From MTimeoutObserver
       
   106 	void TimedOut();
       
   107 
       
   108 protected:
       
   109 	void ConstructL();
       
   110 
       
   111 	void IssueNotificationRequest();
       
   112 
       
   113 	virtual void ProcessRecvUihFrame(CCsyMsgBufBpFrame* aBpFrame) = 0;
       
   114 	void ProcessNonUihRecvFrame(CCsyMsgBufBpFrame* aBpFrame);
       
   115 
       
   116 protected:
       
   117 
       
   118 	TUint8					iV24Signals;
       
   119 
       
   120     const TUint8			iDlcNum;
       
   121 
       
   122     TCsyChannelState		iChannelState;
       
   123     CPortFactory&			iPortFactory;
       
   124 	CPortC32InterfaceBase*	iPortC32Interface;
       
   125 	CMux0710Protocol&		iMux0710Protocol;
       
   126 
       
   127     TBuf8<KMaxIpPacketSize>	iDataToSendToModem;
       
   128 
       
   129 	TBool					iChannelReady;
       
   130 	TBool					iInitFinished;
       
   131 
       
   132 	TInt					iTimeoutVal;
       
   133 	TInt					iTxCountLimit;
       
   134 	TInt					iTxCount;
       
   135 
       
   136 	CChannelObserverAo*		iChannelObserverAo;
       
   137 	CActiveTimeouter*		iTimeouter;
       
   138 
       
   139 	TBool					iMscReplyExpected;
       
   140 
       
   141 	// modem -> csy flow control - controls the CSY sending frames to the modem
       
   142 	TFlowControl			iCsyAllowedToSendFrames;
       
   143 
       
   144 	// csy -> modem flow control - controls the modem sending frames to the CSY
       
   145 	TFlowControl			iModemAllowedToSendFrames;
       
   146 	TBool					iDelayedWriteToModem;
       
   147 
       
   148 	};
       
   149 
       
   150 // Inline methods
       
   151 
       
   152 inline TFlowControl CChannelMgrBase::CsyToModemFlowControl()
       
   153 /**
       
   154  * Return the current CSY to modem flow control status for this channel.
       
   155  */
       
   156 	{
       
   157 	return iModemAllowedToSendFrames;
       
   158 	}
       
   159 
       
   160 inline TUint8 CChannelMgrBase::GetDlcNumber() const
       
   161 /**
       
   162  * Return the DLC number of the channel manager object.
       
   163  *
       
   164  * @return DLC number
       
   165  */
       
   166 	{
       
   167 	return iDlcNum;
       
   168 	}
       
   169 
       
   170 inline CChannelMgrBase::TCsyChannelState CChannelMgrBase::GetChannelState() const
       
   171 /**
       
   172  * Return the channel state.
       
   173  *
       
   174  * @return Channel state
       
   175  */
       
   176 	{
       
   177 	return iChannelState;
       
   178 	}
       
   179 
       
   180 inline CPortC32InterfaceBase* CChannelMgrBase::GetC32Port() const
       
   181 /**
       
   182  * Return a pointer to the C32 port associated with this channel manager object.
       
   183  *
       
   184  * @return Pointer to the C32 port associated with this channel manager object
       
   185  */
       
   186 	{
       
   187 	return iPortC32Interface;
       
   188 	}
       
   189 
       
   190 inline TFlowControl CChannelMgrBase::GetModemAndCsyToClientFlowControl()
       
   191 /**
       
   192  * Return the current flow control state of the channel.
       
   193  *
       
   194  * @return Flow control state
       
   195  */
       
   196 	{
       
   197 	return iCsyAllowedToSendFrames;
       
   198 	}
       
   199 
       
   200 /* CChannelObserverAo use to block until channel init is finished
       
   201  */
       
   202 class CChannelObserverAo :public CActive
       
   203 	{
       
   204 public:
       
   205 	static CChannelObserverAo* NewL();
       
   206 	~CChannelObserverAo();
       
   207 
       
   208  	void StartWait();
       
   209 	void ChannelReady();
       
   210 
       
   211 protected:// from CActive
       
   212     void RunL();
       
   213     void DoCancel();
       
   214 
       
   215 private:
       
   216 	CChannelObserverAo();
       
   217 	};
       
   218 
       
   219 #endif  // _CHANNELMGRBASE_H_