cbsref/csyrefplugins/csy27010/src/ChannelMgrCtrl.cpp
author hgs
Mon, 09 Aug 2010 17:43:08 +0100
changeset 59 ac20d6a0a19d
parent 44 8b72faa1200f
permissions -rw-r--r--
201029_06
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:  The file contains the implementation for class CChannelMgrCtrl.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    15
// *               Class CChannelMgrCtrl implements a 3GPP 27.010 control channel (DLC).
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    16
// *               A control channel is used to initialize the multiplexer and to
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    17
// *               create/monitor DLC's.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    18
//
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    19
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    20
// ChannelMgrCtrl.cpp
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    21
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    22
/** @file ChannelMgrCtrl.cpp
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    23
 *
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    24
 * The file contains the implementation for class CChannelMgrCtrl.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    25
 * Class CChannelMgrCtrl implements a 3GPP 27.010 control channel (DLC).
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    26
 * A control channel is used to initialize the multiplexer and to
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    27
 * create/monitor DLC's.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    28
 */
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    29
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    30
#include "ChannelMgrCtrl.h"
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    31
#include "Portfactory.h"
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    32
#include "Mux0710Protocol.h"
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    33
#include "CsyMsgBufBPFrame.h"
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    34
#include "CommFrameWriterAo.h"
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    35
#include "CsyDebugLogger.h"
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    36
#include "ChannelMgrBase.h"
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    37
#include "PortC32InterfaceBase.h"
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    38
#include "PortC32Interface.h"
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    39
#include "ChannelMgrCmdData.h"
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    40
#include "CsyGlobals.h"
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    41
#include "d32comm.h"
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    42
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    43
CChannelMgrCtrl* CChannelMgrCtrl::NewL(CPortFactory& aPortFactory,
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    44
									   CMux0710Protocol& aMux0710Protocol)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    45
/**
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    46
 * This methods uses two phase construction and the cleanup stack to create
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    47
 * an instance of class CChannelMgrCtrl.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    48
 *
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    49
 * @param aPortFactory - Refrence to the port factory
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    50
 * @param aMux0710Protocol - Reference to the Mux 27.010 object
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    51
 * @return Pointer to the created instance
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    52
 */
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    53
    {
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    54
	_LOG_L4C1("CChannelMgrCtrl::NewL");
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    55
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    56
    CChannelMgrCtrl* p = new(ELeave) CChannelMgrCtrl(aPortFactory, aMux0710Protocol);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    57
 	CleanupStack::PushL(p);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    58
 	p->ConstructL();
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    59
	CleanupStack::Pop(p);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    60
 	return p;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    61
	}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    62
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    63
CChannelMgrCtrl::~CChannelMgrCtrl()
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    64
/**
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    65
 * Destructor. Delete all resources and memory allocated by this object.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    66
 */
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    67
	{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    68
	_LOG_L4C1("CChannelMgrCtrl::~CChannelMgrCtrl");
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    69
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    70
	// Disconnect the DLC Control Channel 
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    71
	Disconnect();
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    72
	}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    73
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    74
CChannelMgrCtrl::CChannelMgrCtrl(CPortFactory& aPortFactory,
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    75
								 CMux0710Protocol& aMux0710Protocol)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    76
: CChannelMgrBase(KCtrlChannelDlcNum, aPortFactory, aMux0710Protocol)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    77
/**
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    78
 * Constructor.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    79
 *
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    80
 * @param aPortFactory - Reference to the port factory
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    81
 * @param aMux0710Protocol - Reference to the 27.010 mux protocol
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    82
 */
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    83
 	{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    84
	}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    85
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    86
void CChannelMgrCtrl::ConstructL()
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    87
/**
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    88
 * This method initializes the memory and data used by this object.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    89
 */
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    90
	{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    91
	_LOG_L4C1("CChannelMgrCtrl::ConstructL");
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    92
	CChannelMgrBase::ConstructL();
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    93
	}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    94
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    95
void CChannelMgrCtrl::ProcessRecvUihFrame(CCsyMsgBufBpFrame* aBpFrame)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    96
/**
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    97
 * This method is called to process a UIH frame that was received
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    98
 * on the control channel.  Based on the message type and contents
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    99
 * the channel state machine is updated and a response is issued back
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   100
 * to the baseband.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   101
 *
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   102
 * @param aBpFrame - Pointer to the frame buffer
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   103
 */
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   104
	{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   105
	_LOG_L4C2(">>CChannelMgrCtrl::ProcessRecvUihFrame [aBpFrame=0x%x]",
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   106
		aBpFrame);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   107
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   108
	// adv option:   address | control | Type   | LengthData | Value(s)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   109
	// basic option: address | control | length | Type  | LengthData | Value(s)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   110
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   111
	TUint8 ctrlTypeField;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   112
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   113
#ifdef _27010ADVANCEOPTION
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   114
	ctrlTypeField = KAdvOptionCtrlStart;   // 2
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   115
#else
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   116
	ctrlTypeField = KBasicOptionCtrlStart; // 3
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   117
#endif
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   118
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   119
	TUint8 frameLength = (TUint8) aBpFrame->iMsg.Length();
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   120
	if (frameLength <= ctrlTypeField)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   121
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   122
		_LOG_L1C3("** Frame length %d <= minimum ctrl frame length %d **",
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   123
			frameLength,ctrlTypeField);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   124
		_LOG_L4C1("<<CChannelMgrCtrl::ProcessRecvUihFrame - bad frame");
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   125
		return;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   126
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   127
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   128
	TBool confirmBack = ETrue;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   129
	switch (aBpFrame->iMsg[ctrlTypeField])
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   130
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   131
	case KCsy0710CTLUIH_DlcParamNegotiate:
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   132
		_LOG_L4C1( "DlcParamNegotiate");
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   133
		break;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   134
	case KCsy0710CTLUIH_DlcParamNegotiateRsp:
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   135
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   136
		_LOG_L3C1("DlcParamNegotiate response");
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   137
		confirmBack = EFalse; // No response to send back
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   138
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   139
		// The position of the values field in the ctrl data
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   140
		TUint8 firstValueFieldIndex  =
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   141
			(TUint8) (ctrlTypeField + KPositionOfValueFieldInCtrlData);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   142
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   143
		if (frameLength > firstValueFieldIndex)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   144
			{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   145
			const TAny* msgValue =
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   146
				reinterpret_cast<const TAny*> (&(aBpFrame->iMsg.Ptr()[firstValueFieldIndex]));
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   147
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   148
			typedef struct TPnMsgValue
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   149
				{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   150
				TUint8 iDlci:6;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   151
				TUint8 iRes1:2;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   152
				TUint8 iFrameType:4;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   153
				TUint8 iCreditFlow:4;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   154
				TUint8 iPrior:6;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   155
				TUint8 iRes2:2;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   156
				TUint8 iAckTimer;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   157
				TUint16 iFrameSize;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   158
				TUint8 iMaxNbrofRetrans;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   159
				TUint8 iCredits;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   160
				} TPnMsgValue;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   161
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   162
			const TPnMsgValue* pnMsgValue =
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   163
				reinterpret_cast<const TPnMsgValue*> (msgValue);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   164
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   165
			// now we should be able to use pnMsgValue.iDlci, etc
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   166
			if ((pnMsgValue->iDlci            == iMux0710Protocol.PreviousNegotiateDlcNum())  &&
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   167
				(pnMsgValue->iFrameType       == KPNFrameType)          &&
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   168
				(pnMsgValue->iCreditFlow      == KPNClBits)             &&
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   169
				(pnMsgValue->iPrior           == KPNDlcPriority)        &&
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   170
				(pnMsgValue->iAckTimer        == KPNAckTimer)           &&
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   171
				(pnMsgValue->iFrameSize       == KPNMaxFrameSize)       &&
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   172
				(pnMsgValue->iMaxNbrofRetrans == KPNMaxRetransmissions) &&
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   173
				(pnMsgValue->iCredits         == KPNWindowSize))
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   174
				{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   175
				_LOG_L3C1("ParamNegotiate passed");
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   176
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   177
				TUint8 dlcNum = pnMsgValue->iDlci;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   178
				iPortFactory.ConnectIpNifPort(dlcNum);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   179
				}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   180
			else
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   181
				{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   182
				// MAF If this fails try again or forget trying PN.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   183
				_LOG_L3C1("ParamNegotiate Failed");
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   184
				}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   185
			}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   186
		else
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   187
			{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   188
			_LOG_L1C3("** Frame length %d <= first ctrl value %d **",
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   189
				frameLength,firstValueFieldIndex);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   190
			}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   191
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   192
		break;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   193
	case KCsy0710CTLUIH_PowerSaveCtl:
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   194
		_LOG_L3C1("PowerSaveCtrl");
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   195
		break;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   196
	case KCsy0710CTLUIH_MultCloseDown:
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   197
		_LOG_L3C1("MultCloseDown");
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   198
		break;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   199
	case KCsy0710CTLUIH_TestCmd:
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   200
		_LOG_L3C1("TestCmd");
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   201
		break;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   202
	case KCsy0710CTLUIH_FlowControlOn:
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   203
		_LOG_L3C1("FlowControlOn");
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   204
		break;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   205
	case KCsy0710CTLUIH_FlowControlOff:
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   206
		_LOG_L3C1("FlowControlOff");
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   207
		break;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   208
	case KCsy0710CTLUIH_ModemStatusRsp:
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   209
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   210
		_LOG_L3C1("MSC response");
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   211
		confirmBack = EFalse; // No response to send back
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   212
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   213
		// From 27.010
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   214
		// RTC	DTR	108/2	DSR	107
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   215
		// RTR	RFR (note)	133	CTS	106
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   216
		// IC	always 0-	-	RI	125
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   217
		// DV	always 1-	-	DCD	109
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   218
		// NOTE	Circuit 133, RFR (Ready for Receiving) is commonly assigned to the connector pin that is alternatively used for circuit 105, RTS. It is sometimes referred to by that name.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   219
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   220
		// The position of the values field in the ctrl data
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   221
		TUint8 firstValueFieldIndex  =
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   222
			(TUint8) (ctrlTypeField + KPositionOfValueFieldInCtrlData);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   223
		TUint8 secondValueIndex = (TUint8) (firstValueFieldIndex + 1);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   224
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   225
		if (frameLength > secondValueIndex)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   226
			{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   227
			TUint8 dlcNum = (TUint8) (((TUint8) aBpFrame->iMsg[firstValueFieldIndex]) >> 2); // remove EA and CR
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   228
			_LOG_L4C2("dlcNum=%d", dlcNum);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   229
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   230
			TUint8 v24signals = (TUint8) aBpFrame->iMsg[secondValueIndex];
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   231
			_LOG_L4C2("V24 Signals=0x%x", v24signals);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   232
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   233
			if (dlcNum)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   234
				{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   235
				_LOG_L3C1("For a data DLC");
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   236
				CChannelMgrCmdData* channel = iPortFactory.FindChannelMgrByDlcNum(dlcNum);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   237
				channel->MscReceived(v24signals);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   238
				}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   239
			else
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   240
				MscReceived(v24signals);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   241
			}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   242
		else
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   243
			{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   244
			_LOG_L1C3("** Frame length %d <= second ctrl value %d **",
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   245
				frameLength,secondValueIndex);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   246
			}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   247
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   248
		break;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   249
	case KCsy0710CTLUIH_ModemStatusCmd:
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   250
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   251
		// The modem side has informed us of its state
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   252
		_LOG_L3C1("MSC command");
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   253
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   254
		// The position of the values field in the ctrl data
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   255
		TUint8 firstValueFieldIndex  =
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   256
			(TUint8) (ctrlTypeField + KPositionOfValueFieldInCtrlData);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   257
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   258
		TUint8 secondValueIndex = (TUint8) (firstValueFieldIndex + 1);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   259
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   260
		if (frameLength > secondValueIndex)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   261
			{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   262
			TUint8 dlcNum = (TUint8) (((TUint8) aBpFrame->iMsg[firstValueFieldIndex]) >> 2); // remove EA and CR
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   263
			_LOG_L4C2("dlcNum=%d", dlcNum);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   264
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   265
			TUint8 v24signals = (TUint8) aBpFrame->iMsg[secondValueIndex];
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   266
			_LOG_L4C2("V24 Signals=0x%x", v24signals);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   267
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   268
			if (dlcNum)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   269
				{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   270
				_LOG_L3C1( "For a data DLC");
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   271
				CChannelMgrCmdData* channel = iPortFactory.FindChannelMgrByDlcNum(dlcNum);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   272
				channel->ReceivedV24Signals(v24signals);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   273
				}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   274
			else
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   275
				{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   276
				_LOG_L3C1( "FC & v24 signals ignored for Ctrl Channel");
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   277
				}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   278
			}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   279
		else
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   280
			{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   281
			_LOG_L1C3("** Frame length %d <= second ctrl value %d **",
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   282
				frameLength,secondValueIndex);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   283
			confirmBack = EFalse;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   284
			}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   285
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   286
		break;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   287
	case KCsy0710CTLUIH_NonSupportedCmdResp:
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   288
		confirmBack = EFalse;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   289
		_LOG_L3C1("NonSupportedCmdResp");
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   290
		break;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   291
	case KCsy0710CTLUIH_RemotePortNegotiate:
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   292
		_LOG_L3C1("RemotePortNegotiate");
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   293
		break;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   294
	case KCsy0710CTLUIH_RemoteLineStatus:
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   295
		_LOG_L3C1("RemoteLineStatus");
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   296
		break;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   297
	case KCsy0710CTLUIH_ServiceNegotiate:
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   298
		_LOG_L3C1("ServiceNegotiate");
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   299
		break;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   300
	default:
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   301
		_LOG_L1C2("** Unknown ctrltype 0x%02x **", aBpFrame->iMsg[ctrlTypeField]);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   302
		break;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   303
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   304
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   305
	if (confirmBack)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   306
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   307
		_LOG_L3C1( "Send a response ...");
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   308
		ConfirmCtrlFrame(aBpFrame);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   309
		// MAF what if send of response fails
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   310
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   311
	else
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   312
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   313
		iMux0710Protocol.AddFrameFreeQ(aBpFrame);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   314
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   315
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   316
	_LOG_L4C1("<<CChannelMgrCtrl::ProcessRecvUihFrame");
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   317
	}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   318
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   319
void CChannelMgrCtrl::ConfirmCtrlFrame(CCsyMsgBufBpFrame* aBpFrame)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   320
/**
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   321
 * This method initializes the control channel.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   322
 * @param a pointer to the Frame
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   323
 */
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   324
	{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   325
	_LOG_L4C2(">>CChannelMgrCtrl::ConfirmCtrlFrame [aBpFrame=0x%x]",
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   326
		aBpFrame);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   327
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   328
	// echo the UIH frame back to the BP, except clear the C/R bit (bit 1)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   329
    // the checksum is unchanged
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   330
	// we must also insert a start flag and end flag
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   331
	TBuf8<4> flag;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   332
	flag.SetLength(1);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   333
	flag[0] = KCsy0710StartEndFlag;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   334
	aBpFrame->iMsg.Insert(0, flag);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   335
	TInt length = aBpFrame->iMsg.Length();
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   336
	aBpFrame->iMsg.SetLength(length + 1);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   337
	aBpFrame->iMsg[length] = KCsy0710StartEndFlag;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   338
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   339
	// clear the C/R bit in the msg type field, not the frame type field
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   340
#ifdef _27010ADVANCEOPTION
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   341
	aBpFrame->iMsg[3] &= ~KCsy0710CRBit;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   342
#else
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   343
	aBpFrame->iMsg[4] &= ~KCsy0710CRBit;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   344
#endif
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   345
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   346
	// put the frame at the front of the baseband's queue
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   347
	aBpFrame->CompleteWhenSent() = ETrue;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   348
	TInt ret = iPortFactory.GetCommWriterAo()->Write(aBpFrame, ETrue);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   349
	if (ret)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   350
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   351
		// MAF what to do here
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   352
		_LOG_L1C2("** Failed to send response [ret=%d] **",ret);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   353
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   354
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   355
	_LOG_L4C1("<<CChannelMgrCtrl::ConfirmCtrlFrame");
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   356
	}