cbsref/csyrefplugins/csy27010/inc/Mux0710Protocol.h
author hgs
Tue, 22 Jun 2010 11:02:32 +0100
changeset 44 8b72faa1200f
permissions -rw-r--r--
201024_02
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
44
8b72faa1200f 201024_02
hgs
parents:
diff changeset
     1
//
8b72faa1200f 201024_02
hgs
parents:
diff changeset
     2
// * Copyright 2004 Neusoft America Inc.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
     3
// * All rights reserved.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
     4
// * This component and the accompanying materials are made available
8b72faa1200f 201024_02
hgs
parents:
diff changeset
     5
// * under the terms of the Eclipse Public License v1.0
8b72faa1200f 201024_02
hgs
parents:
diff changeset
     6
// * which accompanies this distribution, and is available
8b72faa1200f 201024_02
hgs
parents:
diff changeset
     7
// * at the URL "http://www.eclipse.org/legal/epl-v10.html".
8b72faa1200f 201024_02
hgs
parents:
diff changeset
     8
// *
8b72faa1200f 201024_02
hgs
parents:
diff changeset
     9
// * Contributors:
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    10
// * Keith Collins (Neusoft America Inc.)  original software development and additional code and modifications.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    11
// * Thomas Gahagen (Neusoft America Inc.)  additional code and modifications.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    12
// * Zhen Yuan (Neusoft America Inc.)  additional code and modifications.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    13
// *
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    14
// * Description:  This file defines the CMux0710Protocol class.  This class
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    15
//                 performs the 3GPP2 protocol specific behavior for 27.010.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    16
//                 This file also includes CRC table.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    17
//
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    18
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    19
// CMux0710Protocol.h
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    20
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    21
/** @file CMux0710Protocol.h
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    22
 *
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    23
 */
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    24
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    25
#ifndef _MUX0710PROTOCOL_H_
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    26
#define _MUX0710PROTOCOL_H_
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    27
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    28
#include <e32base.h>
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    29
#include "CsyGlobals.h"
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    30
#include "timeouter.h"
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    31
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    32
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    33
class CCsyMsgBufBase;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    34
class CCsyMsgBufFrame;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    35
class CPortFactory;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    36
class CCsyMsgBufBpFrame;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    37
class CCommFrameWriterAo;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    38
class CCommFrameReaderAo;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    39
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    40
class CMux0710Protocol : public CBase, public MTimeoutObserver
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    41
	{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    42
public:
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    43
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    44
	// Frame Types used in 27.010 Protocol
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    45
	enum TCsyFrameType
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    46
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    47
		ESABM, // Set asynchronous balanced mode
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    48
		EUA,   // Unnumbered Acknowledgement
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    49
		EDM,   // Disconnected Mode
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    50
		EDISC, // Disconnect
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    51
		EUIH,  // Unnumbered information with header check
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    52
		EUI,   // Unnumberd information
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    53
		EUNKNOWN 
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    54
		};
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    55
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    56
	enum TCsyCtrlCommand
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    57
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    58
		EParamNeg, // Parameter Negotiation
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    59
		EMSC	   // Modem status command
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    60
		};
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    61
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    62
public:
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    63
	static CMux0710Protocol* NewL(CPortFactory& aPortFactory);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    64
	virtual ~CMux0710Protocol();
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    65
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    66
	void SetCommWriter(CCommFrameWriterAo* aCommWriter);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    67
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    68
	TBool IsMuxModeEnabled() const;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    69
	TInt SwitchToMuxMode();
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    70
	TInt ParseATResponse(TDes8& aResp);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    71
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    72
	CCsyMsgBufBpFrame* GetFreeFrameBuf(TBool aCheckFlowControlThresholds = ETrue);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    73
	void AddFrameFreeQ(CCsyMsgBufBpFrame* aBpFrame);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    74
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    75
    TInt Create0710DataFrames(TDesC8& aMsgBuf, const TUint8 aDlcNum);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    76
	TInt Create0710ControlFrame(TCsyFrameType aFrameType, TUint8 aDlcNum,
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    77
		TCsyCtrlCommand aType = EParamNeg, TUint8 aV24Signals = 0);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    78
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    79
	inline TUint8 PreviousNegotiateDlcNum() const;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    80
    inline TBool MaxRetriesReached() const;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    81
    
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    82
public:// from MTimeoutObserver
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    83
	void TimedOut();
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    84
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    85
private:
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    86
	enum TCsyMuxMgrState
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    87
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    88
		ECsyWaitingForAttentionResp,
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    89
		ECsyWaitingForEchoDisableResp,
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    90
		ECsyWaitingForCmuxResp,
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    91
		ECsyMuxEnabled,
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    92
		ECsyWaitingForFlushResp,
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    93
#ifdef USE_TI_CONDAT_STACK
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    94
		ECsyWaitingForResetResp,
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    95
		ECsyWaitingForSleepResp
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    96
#endif
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    97
		};
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    98
	
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    99
private:
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   100
	CMux0710Protocol(CPortFactory& aPortFactory);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   101
	void ConstructL();
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   102
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   103
	void Create0710UIHFrameFromMsg(TDesC8& aMsgBuf, TInt aOffset,
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   104
								   CCsyMsgBufBpFrame* aFrameBuf,
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   105
								   TInt aLength, TUint8 aDlcNum);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   106
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   107
	void Create0710UIHLayer4FrameFromMsg(TDesC8& aMsgBuf, 
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   108
										 TInt aOffset, 
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   109
										 CCsyMsgBufBpFrame* aFrameBuf, 
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   110
										 TInt aLength, TUint8 aDlcNum, 
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   111
										 TBool aLayer4Begin, 
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   112
										 TBool aLayer4End);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   113
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   114
	void ProcessControlChannelRecvUihFrame(CCsyMsgBufBpFrame* aBpFrame);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   115
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   116
	TUint8 CalcFCS(TUint8* aBuffer, TInt aLen);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   117
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   118
	void DumpFrame(CCsyMsgBufBpFrame* aFrameBuf);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   119
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   120
private:
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   121
	CActiveTimeouter*               iTimeouter;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   122
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   123
	CPortFactory&                   iPortFactory;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   124
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   125
	TCsyMuxMgrState                 iMuxMgrState;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   126
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   127
	CCommFrameWriterAo*             iCommWriter;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   128
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   129
	// Free Frame Buf List
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   130
	TSglQue<CCsyMsgBufBpFrame>      iFreeFrameBufList;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   131
	TSglQueIter<CCsyMsgBufBpFrame>  iFreeFrameBufIter;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   132
	TUint                           iFreeFrameCount;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   133
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   134
	TBool iEnforcingFlowControl;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   135
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   136
	TBool iModemRequestedToStop;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   137
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   138
	TUint8 iParamNegotiateDlcNum;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   139
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   140
	TUint8 iAtResponseTimeout;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   141
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   142
	TBool iMaxRetriesReached;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   143
	TBuf8<100> iResponseStr; 
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   144
	TInt iRetryCount;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   145
	};
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   146
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   147
// inline methods
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   148
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   149
/**
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   150
Set the comm writer to the specified object pointer.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   151
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   152
@param aCommWriter Pointer to the comm writer
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   153
*/
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   154
inline void CMux0710Protocol::SetCommWriter(CCommFrameWriterAo* aCommWriter)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   155
	{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   156
	iCommWriter = aCommWriter;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   157
	}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   158
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   159
/**
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   160
Return True if multiplexing mode is enabled, else return False.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   161
*/
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   162
inline TBool CMux0710Protocol::IsMuxModeEnabled() const
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   163
	{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   164
	if (iMuxMgrState == ECsyMuxEnabled)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   165
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   166
		return (ETrue);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   167
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   168
	else
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   169
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   170
		return (EFalse);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   171
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   172
	}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   173
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   174
/**
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   175
Return dlc that parameter negotiate command was sent for.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   176
*/
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   177
inline TUint8 CMux0710Protocol::PreviousNegotiateDlcNum() const
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   178
	{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   179
	return iParamNegotiateDlcNum;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   180
	}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   181
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   182
/**
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   183
Return whether the max connection retries has been reached.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   184
*/
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   185
inline TBool CMux0710Protocol::MaxRetriesReached() const
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   186
	{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   187
	return iMaxRetriesReached;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   188
	}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   189
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   190
#endif // _MUX0710PROTOCOL_H_