os/boardsupport/haitest/bspsvs/suite/e32/src/T_RBusDevCommData.cpp
author sl@SLION-WIN7.fritz.box
Fri, 15 Jun 2012 03:10:57 +0200
changeset 0 bde4ae8d615e
permissions -rw-r--r--
First public contribution.
sl@0
     1
/*
sl@0
     2
* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies). 
sl@0
     3
* All rights reserved.
sl@0
     4
* This component and the accompanying materials are made available
sl@0
     5
* under the terms of "Eclipse Public License v1.0"
sl@0
     6
* which accompanies this distribution, and is available
sl@0
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
sl@0
     8
*
sl@0
     9
* Initial Contributors:
sl@0
    10
* Nokia Corporation - initial contribution.
sl@0
    11
*
sl@0
    12
* Contributors:
sl@0
    13
*
sl@0
    14
* Description:
sl@0
    15
*
sl@0
    16
*/
sl@0
    17
sl@0
    18
#include "T_RBusDevCommData.h"
sl@0
    19
#include "T_TCommCapsV01Data.h"
sl@0
    20
#include "T_TCommConfigV01Data.h"
sl@0
    21
sl@0
    22
/*@{*/
sl@0
    23
_LIT(KStrNull,								" ");
sl@0
    24
sl@0
    25
_LIT(KCmdConstructor,						"new");
sl@0
    26
_LIT(KCmdDestructor,						"~");
sl@0
    27
_LIT(KCmdBreak,								"Break");
sl@0
    28
_LIT(KCmdBreakCancel,						"BreakCancel");
sl@0
    29
_LIT(KCmdCaps,								"Caps");
sl@0
    30
_LIT(KCmdConfig,							"Config");
sl@0
    31
_LIT(KCmdMinTurnaroundTime,					"MinTurnaroundTime");
sl@0
    32
_LIT(KCmdNotifyReceiveDataAvailable,		"NotifyReceiveDataAvailable");
sl@0
    33
_LIT(KCmdNotifyReceiveDataAvailableCancel,	"NotifyReceiveDataAvailableCancel");
sl@0
    34
_LIT(KCmdNotifySignalChange,				"NotifySignalChange");
sl@0
    35
_LIT(KCmdNotifySignalChangeCancel,			"NotifySignalChangeCancel");
sl@0
    36
_LIT(KCmdOpen,								"Open");
sl@0
    37
_LIT(KCmdQueryReceiveBuffer,				"QueryReceiveBuffer");
sl@0
    38
_LIT(KCmdRead,								"Read");
sl@0
    39
_LIT(KCmdReadCancel,						"ReadCancel");
sl@0
    40
_LIT(KCmdReadOneOrMore,						"ReadOneOrMore");
sl@0
    41
_LIT(KCmdReceiveBufferLength,				"ReceiveBufferLength");
sl@0
    42
_LIT(KCmdResetBuffers,						"ResetBuffers");
sl@0
    43
_LIT(KCmdSetConfig,							"SetConfig");
sl@0
    44
_LIT(KCmdSetMinTurnaroundTime,				"SetMinTurnaroundTime");
sl@0
    45
_LIT(KCmdSetReceiveBufferLength,			"SetReceiveBufferLength");
sl@0
    46
_LIT(KCmdSetSignals,						"SetSignals");
sl@0
    47
_LIT(KCmdSignals,							"Signals");
sl@0
    48
_LIT(KCmdVersionRequired,					"VersionRequired");
sl@0
    49
_LIT(KCmdWrite,								"Write");
sl@0
    50
_LIT(KCmdWriteCancel,						"WriteCancel");
sl@0
    51
sl@0
    52
_LIT(KFldBufferLength,						"bufferlength");
sl@0
    53
_LIT(KFldCaps,								"caps");
sl@0
    54
_LIT(KFldClearMask,							"clearmask");
sl@0
    55
_LIT(KFldConfig,							"config");
sl@0
    56
_LIT(KFldData,								"data");
sl@0
    57
_LIT(KFldExpected,							"expected");
sl@0
    58
_LIT(KFldExpectedFile,						"expected_file");
sl@0
    59
_LIT(KFldFile,								"file");
sl@0
    60
_LIT(KFldIsEmpty,							"is_empty");
sl@0
    61
_LIT(KFldMask,								"mask");
sl@0
    62
_LIT(KFldPortPDD,							"portpdd");
sl@0
    63
_LIT(KFldPortLDD,							"portldd");
sl@0
    64
_LIT(KFldRepeat,							"repeat");
sl@0
    65
_LIT(KFldSave,								"save");
sl@0
    66
_LIT(KFldSetMask,							"setmask");
sl@0
    67
_LIT(KFldTime,								"time");
sl@0
    68
_LIT(KFldTimeOut,							"timeout");
sl@0
    69
_LIT(KFldUnit,								"unit");
sl@0
    70
_LIT(KFldUseLength,							"uselength");
sl@0
    71
_LIT(KFldValue,								"value");
sl@0
    72
_LIT(KFldVersionName,						"version_name");
sl@0
    73
_LIT(KFldVersionBuild,						"version_build");
sl@0
    74
_LIT(KFldVersionMajor,						"version_major");
sl@0
    75
_LIT(KFldVersionMinor,						"version_minor");
sl@0
    76
sl@0
    77
_LIT(KLogError,								"Error=%d");
sl@0
    78
_LIT(KLogErrorBufferLength,					"Buffer Length %d must be greater than 0");
sl@0
    79
_LIT(KLogErrorExpectedValue,				"Expected Value does not match actual");
sl@0
    80
_LIT(KLogErrorExpectedSignal,				"Expected Signal %d does not match actual %d");
sl@0
    81
_LIT(KLogMissingParameter,					"Missing parameter '%S'");
sl@0
    82
_LIT(KLogNullCapsData,						"Caps Data - '%S' is NULL");
sl@0
    83
_LIT(KLogNullConfigData,					"Config Data - '%S' is NULL");
sl@0
    84
_LIT(KLogLoadPhysicalDeviceError,			"Load Physical Device '%S' error=%d");
sl@0
    85
_LIT(KLogLoadLogicalDeviceError,			"Load Logical Device '%S' error=%d");
sl@0
    86
/*@}*/
sl@0
    87
sl@0
    88
_LIT(KStrKSignalCTS,						"KSignalCTS");
sl@0
    89
_LIT(KStrKSignalDSR,						"KSignalDSR");
sl@0
    90
_LIT(KStrKSignalDCD,						"KSignalDCD");
sl@0
    91
_LIT(KStrKSignalRNG,						"KSignalRNG");
sl@0
    92
_LIT(KStrKSignalRTS,						"KSignalRTS");
sl@0
    93
_LIT(KStrKSignalDTR,						"KSignalDTR");
sl@0
    94
_LIT(KStrKSignalBreak,						"KSignalBreak");
sl@0
    95
const CDataWrapperBase::TEnumEntryTable	CT_RBusDevCommData::iEnumTableSignals[] =
sl@0
    96
	{
sl@0
    97
//	Enum as a descriptor					Enum
sl@0
    98
	KStrKSignalCTS,							KSignalCTS,
sl@0
    99
	KStrKSignalDSR,							KSignalDSR,
sl@0
   100
	KStrKSignalDCD,							KSignalDCD,
sl@0
   101
	KStrKSignalRNG,							KSignalRNG,
sl@0
   102
	KStrKSignalRTS,							KSignalRTS,
sl@0
   103
	KStrKSignalDTR,							KSignalDTR,
sl@0
   104
	KStrKSignalBreak,						KSignalBreak,
sl@0
   105
	KStrNull,								-1
sl@0
   106
	};
sl@0
   107
sl@0
   108
//////////////////////////////////////////////////////////////////////
sl@0
   109
// Construction/Destruction
sl@0
   110
//////////////////////////////////////////////////////////////////////
sl@0
   111
sl@0
   112
CT_RBusDevCommData* CT_RBusDevCommData::NewL()
sl@0
   113
	{
sl@0
   114
	CT_RBusDevCommData*	ret=new (ELeave) CT_RBusDevCommData();
sl@0
   115
	CleanupStack::PushL(ret);
sl@0
   116
	ret->ConstructL();
sl@0
   117
	CleanupStack::Pop(ret);
sl@0
   118
	return ret;
sl@0
   119
	}
sl@0
   120
sl@0
   121
CT_RBusDevCommData::CT_RBusDevCommData()
sl@0
   122
:	CT_RBusLogicalChannelData()
sl@0
   123
,	iBusDevComm(NULL)
sl@0
   124
,	iBufferRead(NULL)
sl@0
   125
,	iBufferReadPtr(NULL, 0)
sl@0
   126
,	iBufferReadOneOrMorePtr(NULL, 0)
sl@0
   127
,	iReadOneOrMoreLeft(0)
sl@0
   128
,	iHasReadExpected(EFalse)
sl@0
   129
,	iBufferLength(0)
sl@0
   130
,	iMinTurnaroundTime(0)
sl@0
   131
,	iReceiveBufferLength(0)
sl@0
   132
,	iSignals(0)
sl@0
   133
,	iNotifySignals(0)
sl@0
   134
,	iHasNotifySignalsExpected(EFalse)
sl@0
   135
,	iNotifySignalsExpected(0)
sl@0
   136
,	iCallbackBreak(NULL)
sl@0
   137
,	iCallbackNotifyReceiveDataAvailable(NULL)
sl@0
   138
,	iCallbackNotifySignalChange(NULL)
sl@0
   139
,	iCallbackRead(NULL)
sl@0
   140
,	iCallbackReadOneOrMore(NULL)
sl@0
   141
,	iCallbackWrite(NULL)
sl@0
   142
	{
sl@0
   143
	}
sl@0
   144
sl@0
   145
CT_RBusDevCommData::~CT_RBusDevCommData()
sl@0
   146
/**
sl@0
   147
 * Public destructor
sl@0
   148
 */
sl@0
   149
	{
sl@0
   150
	DestroyData();
sl@0
   151
sl@0
   152
	delete iBufferRead;
sl@0
   153
	iBufferRead=NULL;
sl@0
   154
sl@0
   155
	delete iCallbackWrite;
sl@0
   156
	iCallbackWrite=NULL;
sl@0
   157
sl@0
   158
	delete iCallbackReadOneOrMore;
sl@0
   159
	iCallbackReadOneOrMore=NULL;
sl@0
   160
sl@0
   161
	delete iCallbackRead;
sl@0
   162
	iCallbackRead=NULL;
sl@0
   163
sl@0
   164
	delete iCallbackNotifySignalChange;
sl@0
   165
	iCallbackNotifySignalChange=NULL;
sl@0
   166
sl@0
   167
	delete iCallbackNotifyReceiveDataAvailable;
sl@0
   168
	iCallbackNotifyReceiveDataAvailable=NULL;
sl@0
   169
sl@0
   170
	delete iCallbackBreak;
sl@0
   171
	iCallbackBreak=NULL;
sl@0
   172
	}
sl@0
   173
sl@0
   174
void CT_RBusDevCommData::ConstructL()
sl@0
   175
	{
sl@0
   176
	iCallbackBreak						=CActiveCallbackBase::NewL(*this);
sl@0
   177
	iCallbackNotifyReceiveDataAvailable	=CActiveCallbackBase::NewL(*this);
sl@0
   178
	iCallbackNotifySignalChange			=CActiveCallbackBase::NewL(*this);
sl@0
   179
	iCallbackRead						=CT_ActiveCallbackIO::NewL(*this);
sl@0
   180
	iCallbackReadOneOrMore				=CT_ActiveCallbackIO::NewL(*this);
sl@0
   181
	iCallbackWrite						=CT_ActiveCallbackIO::NewL(*this);
sl@0
   182
	}
sl@0
   183
sl@0
   184
void CT_RBusDevCommData::DestroyData()
sl@0
   185
	{
sl@0
   186
	delete iBusDevComm;
sl@0
   187
	iBusDevComm=NULL;
sl@0
   188
	}
sl@0
   189
sl@0
   190
TAny* CT_RBusDevCommData::GetObject()
sl@0
   191
/**
sl@0
   192
 * Return a pointer to the object that the data wraps
sl@0
   193
 *
sl@0
   194
 * @return	pointer to the object that the data wraps
sl@0
   195
 */
sl@0
   196
	{
sl@0
   197
	return iBusDevComm;
sl@0
   198
	}
sl@0
   199
sl@0
   200
RHandleBase* CT_RBusDevCommData::GetHandleBase()
sl@0
   201
	{
sl@0
   202
	return iBusDevComm;
sl@0
   203
	}
sl@0
   204
sl@0
   205
RBusLogicalChannel* CT_RBusDevCommData::GetBusLogicalChannel()
sl@0
   206
	{
sl@0
   207
	return iBusDevComm;
sl@0
   208
	}
sl@0
   209
sl@0
   210
void CT_RBusDevCommData::PrepareReadExpectedBufferLengthL(CT_ActiveCallbackIO& aCallback, const TDesC& aSection)
sl@0
   211
	{
sl@0
   212
	TInt	repeat=1;
sl@0
   213
	GetIntFromConfig(aSection, KFldRepeat, repeat);
sl@0
   214
sl@0
   215
	TPtrC	readExpected;
sl@0
   216
	iHasReadExpected=GetStringFromConfig(aSection, KFldExpected, readExpected);
sl@0
   217
	if ( iHasReadExpected )
sl@0
   218
		{
sl@0
   219
		aCallback.PrepareFromStringL(repeat, readExpected);
sl@0
   220
		iBufferLength=aCallback.BufferLength();
sl@0
   221
		}
sl@0
   222
	else
sl@0
   223
		{
sl@0
   224
		iHasReadExpected=GetStringFromConfig(aSection, KFldExpectedFile, readExpected);
sl@0
   225
		if ( iHasReadExpected )
sl@0
   226
			{
sl@0
   227
			aCallback.PrepareFromFileL(repeat, readExpected);
sl@0
   228
			}
sl@0
   229
		}
sl@0
   230
sl@0
   231
	if ( iHasReadExpected )
sl@0
   232
		{
sl@0
   233
		iBufferLength=aCallback.BufferLength();
sl@0
   234
		}
sl@0
   235
sl@0
   236
	GetIntFromConfig(aSection, KFldBufferLength, iBufferLength);
sl@0
   237
	if ( iBufferLength <= 0 )
sl@0
   238
		{
sl@0
   239
		ERR_PRINTF2(KLogErrorBufferLength, iBufferLength);
sl@0
   240
		SetBlockResult(EFail);
sl@0
   241
		}
sl@0
   242
	}
sl@0
   243
sl@0
   244
TBool CT_RBusDevCommData::DoCommandL(const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt aAsyncErrorIndex)
sl@0
   245
/**
sl@0
   246
 * Process a command read from the ini file
sl@0
   247
 *
sl@0
   248
 * @param aCommand			The command to process
sl@0
   249
 * @param aSection			The section in the ini containing data for the command
sl@0
   250
 * @param aAsyncErrorIndex	Command index for async calls to return errors to
sl@0
   251
 *
sl@0
   252
 * @return					ETrue if the command is processed
sl@0
   253
 *
sl@0
   254
 * @leave					System wide error
sl@0
   255
 */
sl@0
   256
	{
sl@0
   257
	TBool	ret=ETrue;
sl@0
   258
	TInt	err=KErrNone;
sl@0
   259
sl@0
   260
	if ( aCommand==KCmdConstructor )
sl@0
   261
		{
sl@0
   262
		err=DoCmdConstructor();
sl@0
   263
		}
sl@0
   264
	else if ( aCommand==KCmdDestructor )
sl@0
   265
		{
sl@0
   266
		DoCmdDestructor();
sl@0
   267
		}
sl@0
   268
	else if ( aCommand==KCmdBreak )
sl@0
   269
		{
sl@0
   270
		DoCmdBreak(aSection, aAsyncErrorIndex);
sl@0
   271
		}
sl@0
   272
	else if ( aCommand==KCmdBreakCancel )
sl@0
   273
		{
sl@0
   274
		DoCmdBreakCancel();
sl@0
   275
		}
sl@0
   276
	else if ( aCommand==KCmdCaps )
sl@0
   277
		{
sl@0
   278
		DoCmdCapsL(aSection);
sl@0
   279
		}
sl@0
   280
	else if ( aCommand==KCmdConfig )
sl@0
   281
		{
sl@0
   282
		DoCmdConfigL(aSection);
sl@0
   283
		}
sl@0
   284
	else if ( aCommand==KCmdMinTurnaroundTime )
sl@0
   285
		{
sl@0
   286
		DoCmdMinTurnaroundTime(aSection);
sl@0
   287
		}
sl@0
   288
	else if ( aCommand==KCmdNotifyReceiveDataAvailable )
sl@0
   289
		{
sl@0
   290
		DoCmdNotifyReceiveDataAvailable(aSection, aAsyncErrorIndex);
sl@0
   291
		}
sl@0
   292
	else if ( aCommand==KCmdNotifyReceiveDataAvailableCancel )
sl@0
   293
		{
sl@0
   294
		DoCmdNotifyReceiveDataAvailableCancel();
sl@0
   295
		}
sl@0
   296
	else if ( aCommand==KCmdNotifySignalChange )
sl@0
   297
		{
sl@0
   298
		DoCmdNotifySignalChange(aSection, aAsyncErrorIndex);
sl@0
   299
		}
sl@0
   300
	else if ( aCommand==KCmdNotifySignalChangeCancel )
sl@0
   301
		{
sl@0
   302
		DoCmdNotifySignalChangeCancel();
sl@0
   303
		}
sl@0
   304
	else if ( aCommand==KCmdOpen )
sl@0
   305
		{
sl@0
   306
		err=DoCmdOpen(aSection);
sl@0
   307
		}
sl@0
   308
	else if ( aCommand==KCmdQueryReceiveBuffer )
sl@0
   309
		{
sl@0
   310
		err=DoCmdQueryReceiveBuffer(aSection);
sl@0
   311
		}
sl@0
   312
	else if ( aCommand==KCmdRead )
sl@0
   313
		{
sl@0
   314
		DoCmdReadL(aSection, aAsyncErrorIndex);
sl@0
   315
		}
sl@0
   316
	else if ( aCommand==KCmdReadCancel )
sl@0
   317
		{
sl@0
   318
		DoCmdReadCancel();
sl@0
   319
		}
sl@0
   320
	else if ( aCommand==KCmdReadOneOrMore )
sl@0
   321
		{
sl@0
   322
		DoCmdReadOneOrMoreL(aSection, aAsyncErrorIndex);
sl@0
   323
		}
sl@0
   324
	else if ( aCommand==KCmdReceiveBufferLength )
sl@0
   325
		{
sl@0
   326
		DoCmdReceiveBufferLength(aSection);
sl@0
   327
		}
sl@0
   328
	else if ( aCommand==KCmdResetBuffers )
sl@0
   329
		{
sl@0
   330
		DoCmdResetBuffers();
sl@0
   331
		}
sl@0
   332
	else if ( aCommand==KCmdSetConfig )
sl@0
   333
		{
sl@0
   334
		err=DoCmdSetConfigL(aSection);
sl@0
   335
		}
sl@0
   336
	else if ( aCommand==KCmdSetMinTurnaroundTime )
sl@0
   337
		{
sl@0
   338
		err=DoCmdSetMinTurnaroundTime(aSection);
sl@0
   339
		}
sl@0
   340
	else if ( aCommand==KCmdSetReceiveBufferLength )
sl@0
   341
		{
sl@0
   342
		err=DoCmdSetReceiveBufferLength(aSection);
sl@0
   343
		}
sl@0
   344
	else if ( aCommand==KCmdSetSignals )
sl@0
   345
		{
sl@0
   346
		DoCmdSetSignals(aSection);
sl@0
   347
		}
sl@0
   348
	else if ( aCommand==KCmdSignals )
sl@0
   349
		{
sl@0
   350
		DoCmdSignals(aSection);
sl@0
   351
		}
sl@0
   352
	else if ( aCommand==KCmdVersionRequired )
sl@0
   353
		{
sl@0
   354
		DoCmdVersionRequired(aSection);
sl@0
   355
		}
sl@0
   356
	else if ( aCommand==KCmdWrite )
sl@0
   357
		{
sl@0
   358
		DoCmdWriteL(aSection, aAsyncErrorIndex);
sl@0
   359
		}
sl@0
   360
	else if ( aCommand==KCmdWriteCancel )
sl@0
   361
		{
sl@0
   362
		DoCmdWriteCancel();
sl@0
   363
		}
sl@0
   364
	else
sl@0
   365
		{
sl@0
   366
		ret=CT_RBusLogicalChannelData::DoCommandL(aCommand, aSection, aAsyncErrorIndex);
sl@0
   367
		}
sl@0
   368
sl@0
   369
	if ( err!=KErrNone )
sl@0
   370
		{
sl@0
   371
		ERR_PRINTF2(KLogError, err);
sl@0
   372
		SetError(err);
sl@0
   373
		}
sl@0
   374
sl@0
   375
	return ret;
sl@0
   376
	}
sl@0
   377
sl@0
   378
TInt CT_RBusDevCommData::DoCmdConstructor()
sl@0
   379
	{
sl@0
   380
	DestroyData();
sl@0
   381
	TRAPD(err, iBusDevComm=new (ELeave) RBusDevComm());
sl@0
   382
	return err;
sl@0
   383
	}
sl@0
   384
sl@0
   385
void CT_RBusDevCommData::DoCmdDestructor()
sl@0
   386
	{
sl@0
   387
	DestroyData();
sl@0
   388
	}
sl@0
   389
sl@0
   390
void CT_RBusDevCommData::DoCmdBreak(const TDesC& aSection, const TInt aAsyncErrorIndex)
sl@0
   391
	{
sl@0
   392
	TInt	timeOut=0;
sl@0
   393
	GetIntFromConfig(aSection, KFldTimeOut, timeOut);
sl@0
   394
sl@0
   395
	TInt	time;
sl@0
   396
	if ( !GetIntFromConfig(aSection, KFldTime, time) )
sl@0
   397
		{
sl@0
   398
		ERR_PRINTF2(KLogMissingParameter, &KFldTime());
sl@0
   399
		SetBlockResult(EFail);
sl@0
   400
		}
sl@0
   401
	else
sl@0
   402
		{
sl@0
   403
		INFO_PRINTF1(_L("Break"));
sl@0
   404
		iBusDevComm->Break(iCallbackBreak->iStatus, time);
sl@0
   405
		iCallbackBreak->Activate(aAsyncErrorIndex, timeOut);
sl@0
   406
		IncOutstanding();
sl@0
   407
		}
sl@0
   408
	}
sl@0
   409
sl@0
   410
void CT_RBusDevCommData::DoCmdBreakCancel()
sl@0
   411
	{
sl@0
   412
	INFO_PRINTF1(_L("BreakCancel"));
sl@0
   413
	iBusDevComm->BreakCancel();
sl@0
   414
	}
sl@0
   415
sl@0
   416
void CT_RBusDevCommData::DoCmdCapsL(const TDesC& aSection)
sl@0
   417
	{
sl@0
   418
	TPtrC	dataName;
sl@0
   419
	if ( GetStringFromConfig(aSection, KFldCaps, dataName) )
sl@0
   420
		{
sl@0
   421
		CT_TCommCapsV01Data*	wrapper=static_cast<CT_TCommCapsV01Data*>(GetDataWrapperL(dataName));
sl@0
   422
		TDes8*					data=wrapper->Descriptor();
sl@0
   423
		if ( data!=NULL )
sl@0
   424
			{
sl@0
   425
			INFO_PRINTF1(_L("Caps"));
sl@0
   426
			iBusDevComm->Caps(*data);
sl@0
   427
			}
sl@0
   428
		else
sl@0
   429
			{
sl@0
   430
			ERR_PRINTF2(KLogNullCapsData, &dataName);
sl@0
   431
			SetBlockResult(EFail);
sl@0
   432
			}
sl@0
   433
		}
sl@0
   434
	else
sl@0
   435
		{
sl@0
   436
		ERR_PRINTF2(KLogMissingParameter, &KFldCaps());
sl@0
   437
		SetBlockResult(EFail);
sl@0
   438
		}
sl@0
   439
	}
sl@0
   440
sl@0
   441
void CT_RBusDevCommData::DoCmdConfigL(const TDesC& aSection)
sl@0
   442
	{
sl@0
   443
	TPtrC	dataName;
sl@0
   444
	if ( GetStringFromConfig(aSection, KFldConfig, dataName) )
sl@0
   445
		{
sl@0
   446
		CT_TCommConfigV01Data*	wrapper=static_cast<CT_TCommConfigV01Data*>(GetDataWrapperL(dataName));
sl@0
   447
		TDes8*					data=wrapper->Descriptor();
sl@0
   448
		if ( data!=NULL )
sl@0
   449
			{
sl@0
   450
			INFO_PRINTF1(_L("Config"));
sl@0
   451
			iBusDevComm->Config(*data);
sl@0
   452
			}
sl@0
   453
		else
sl@0
   454
			{
sl@0
   455
			ERR_PRINTF2(KLogNullConfigData, &dataName);
sl@0
   456
			SetBlockResult(EFail);
sl@0
   457
			}
sl@0
   458
		}
sl@0
   459
	else
sl@0
   460
		{
sl@0
   461
		ERR_PRINTF2(KLogMissingParameter, &KFldConfig());
sl@0
   462
		SetBlockResult(EFail);
sl@0
   463
		}
sl@0
   464
	}
sl@0
   465
sl@0
   466
void CT_RBusDevCommData::DoCmdMinTurnaroundTime(const TDesC& aSection)
sl@0
   467
	{
sl@0
   468
	TUint	actual=iBusDevComm->MinTurnaroundTime();
sl@0
   469
	INFO_PRINTF2(_L("MinTurnaroundTime : %d"), actual);
sl@0
   470
sl@0
   471
	TUint	expected;
sl@0
   472
	if ( GetUintFromConfig(aSection, KFldExpected(), expected) )
sl@0
   473
		{
sl@0
   474
		if ( expected!=actual )
sl@0
   475
			{
sl@0
   476
			ERR_PRINTF1(KLogErrorExpectedValue);
sl@0
   477
			SetBlockResult(EFail);
sl@0
   478
			}
sl@0
   479
		}
sl@0
   480
sl@0
   481
	TBool	save=EFalse;
sl@0
   482
	GetBoolFromConfig(aSection, KFldSave(), save);
sl@0
   483
	if ( save )
sl@0
   484
		{
sl@0
   485
		iMinTurnaroundTime=actual;
sl@0
   486
		}
sl@0
   487
	}
sl@0
   488
sl@0
   489
void CT_RBusDevCommData::DoCmdNotifyReceiveDataAvailable(const TDesC& aSection, const TInt aAsyncErrorIndex)
sl@0
   490
	{
sl@0
   491
	TInt	timeOut=0;
sl@0
   492
	GetIntFromConfig(aSection, KFldTimeOut, timeOut);
sl@0
   493
sl@0
   494
	INFO_PRINTF1(_L("NotifyReceiveDataAvailable"));
sl@0
   495
	iBusDevComm->NotifyReceiveDataAvailable(iCallbackNotifyReceiveDataAvailable->iStatus);
sl@0
   496
	iCallbackNotifyReceiveDataAvailable->Activate(aAsyncErrorIndex, timeOut);
sl@0
   497
	IncOutstanding();
sl@0
   498
	}
sl@0
   499
sl@0
   500
void CT_RBusDevCommData::DoCmdNotifyReceiveDataAvailableCancel()
sl@0
   501
	{
sl@0
   502
	INFO_PRINTF1(_L("NotifyReceiveDataAvailableCancel"));
sl@0
   503
	iBusDevComm->NotifyReceiveDataAvailableCancel();
sl@0
   504
	}
sl@0
   505
sl@0
   506
void CT_RBusDevCommData::DoCmdNotifySignalChange(const TDesC& aSection, const TInt aAsyncErrorIndex)
sl@0
   507
	{
sl@0
   508
	TInt	timeOut=0;
sl@0
   509
	GetIntFromConfig(aSection, KFldTimeOut, timeOut);
sl@0
   510
sl@0
   511
	iHasNotifySignalsExpected=GetOrFromConfig(aSection, KFldExpected(), iEnumTableSignals, iNotifySignalsExpected);
sl@0
   512
sl@0
   513
	TUint	mask;
sl@0
   514
	if ( GetOrFromConfig(aSection, KFldMask(), iEnumTableSignals, mask) )
sl@0
   515
		{
sl@0
   516
		INFO_PRINTF1(_L("NotifySignalChange with mask"));
sl@0
   517
		iBusDevComm->NotifySignalChange(iCallbackNotifySignalChange->iStatus, iNotifySignals, mask);
sl@0
   518
		}
sl@0
   519
	else
sl@0
   520
		{
sl@0
   521
		INFO_PRINTF1(_L("NotifySignalChange without mask"));
sl@0
   522
		iBusDevComm->NotifySignalChange(iCallbackNotifySignalChange->iStatus, iNotifySignals);
sl@0
   523
		}
sl@0
   524
	iCallbackNotifySignalChange->Activate(aAsyncErrorIndex, timeOut);
sl@0
   525
	IncOutstanding();
sl@0
   526
	}
sl@0
   527
sl@0
   528
void CT_RBusDevCommData::DoCmdNotifySignalChangeCancel()
sl@0
   529
	{
sl@0
   530
	INFO_PRINTF1(_L("NotifySignalChangeCancel"));
sl@0
   531
	iBusDevComm->NotifySignalChangeCancel();
sl@0
   532
	}
sl@0
   533
sl@0
   534
TInt CT_RBusDevCommData::DoCmdOpen(const TDesC& aSection)
sl@0
   535
	{
sl@0
   536
	TBool	dataOk=ETrue;
sl@0
   537
sl@0
   538
	TPtrC	pdd;
sl@0
   539
	if ( GetStringFromConfig(aSection, KFldPortPDD, pdd) && pdd.Length()!=0 )
sl@0
   540
		{
sl@0
   541
		TInt	errLoad=User::LoadPhysicalDevice(pdd);
sl@0
   542
		if ( (errLoad!=KErrNone) && (errLoad!=KErrAlreadyExists) )
sl@0
   543
			{
sl@0
   544
			dataOk=EFalse;
sl@0
   545
			ERR_PRINTF3(KLogLoadPhysicalDeviceError, &pdd, errLoad);
sl@0
   546
			SetBlockResult(EFail);
sl@0
   547
			}
sl@0
   548
		}
sl@0
   549
sl@0
   550
	TPtrC	ldd;
sl@0
   551
	if ( GetStringFromConfig(aSection, KFldPortLDD, ldd) && ldd.Length()!=0 )
sl@0
   552
		{
sl@0
   553
		TInt	errLoad=User::LoadLogicalDevice(ldd);
sl@0
   554
		if ( (errLoad!=KErrNone) && (errLoad!=KErrAlreadyExists) )
sl@0
   555
			{
sl@0
   556
			dataOk=EFalse;
sl@0
   557
			ERR_PRINTF3(KLogLoadLogicalDeviceError, &ldd, errLoad);
sl@0
   558
			SetBlockResult(EFail);
sl@0
   559
			}
sl@0
   560
		}
sl@0
   561
sl@0
   562
	TInt	unit;
sl@0
   563
	if ( !GetIntFromConfig(aSection, KFldUnit, unit) )
sl@0
   564
		{
sl@0
   565
		dataOk=EFalse;
sl@0
   566
		ERR_PRINTF2(KLogMissingParameter, &KFldUnit());
sl@0
   567
		SetBlockResult(EFail);
sl@0
   568
		}
sl@0
   569
sl@0
   570
	TInt	err=KErrNone;
sl@0
   571
	if ( dataOk )
sl@0
   572
		{
sl@0
   573
		INFO_PRINTF1(_L("Open"));
sl@0
   574
		err=iBusDevComm->Open(unit);
sl@0
   575
		}
sl@0
   576
sl@0
   577
	return err;
sl@0
   578
	}
sl@0
   579
sl@0
   580
TInt CT_RBusDevCommData::DoCmdQueryReceiveBuffer(const TDesC& aSection)
sl@0
   581
	{
sl@0
   582
	INFO_PRINTF1(_L("QueryReceiveBuffer"));
sl@0
   583
	TInt	actual=iBusDevComm->QueryReceiveBuffer();
sl@0
   584
	TInt	ret=KErrNone;
sl@0
   585
	if ( actual<0 )
sl@0
   586
		{
sl@0
   587
		ret=actual;
sl@0
   588
		}
sl@0
   589
	else
sl@0
   590
		{
sl@0
   591
		TInt	expected;
sl@0
   592
		if ( GetIntFromConfig(aSection, KFldExpected(), expected) )
sl@0
   593
			{
sl@0
   594
			if ( expected!=actual )
sl@0
   595
				{
sl@0
   596
				ERR_PRINTF1(KLogErrorExpectedValue);
sl@0
   597
				SetBlockResult(EFail);
sl@0
   598
				}
sl@0
   599
			}
sl@0
   600
sl@0
   601
		TBool	isEmpty;
sl@0
   602
		if ( GetBoolFromConfig(aSection, KFldIsEmpty(), isEmpty) )
sl@0
   603
			{
sl@0
   604
			if ( isEmpty )
sl@0
   605
				{
sl@0
   606
				if ( actual!=0 )
sl@0
   607
					{
sl@0
   608
					ERR_PRINTF1(KLogErrorExpectedValue);
sl@0
   609
					SetBlockResult(EFail);
sl@0
   610
					}
sl@0
   611
				}
sl@0
   612
			else
sl@0
   613
				{
sl@0
   614
				if ( actual==0 )
sl@0
   615
					{
sl@0
   616
					ERR_PRINTF1(KLogErrorExpectedValue);
sl@0
   617
					SetBlockResult(EFail);
sl@0
   618
					}
sl@0
   619
				}
sl@0
   620
			}
sl@0
   621
sl@0
   622
		TBool	save=EFalse;
sl@0
   623
		GetBoolFromConfig(aSection, KFldSave(), save);
sl@0
   624
		if ( save )
sl@0
   625
			{
sl@0
   626
			iBufferLength=actual;
sl@0
   627
			}
sl@0
   628
		}
sl@0
   629
sl@0
   630
	return ret;
sl@0
   631
	}
sl@0
   632
sl@0
   633
void CT_RBusDevCommData::DoCmdReadL(const TDesC& aSection, const TInt aAsyncErrorIndex)
sl@0
   634
	{
sl@0
   635
	TInt	timeOut=0;
sl@0
   636
	GetIntFromConfig(aSection, KFldTimeOut, timeOut);
sl@0
   637
sl@0
   638
	TBool	useLength=EFalse;
sl@0
   639
	GetBoolFromConfig(aSection, KFldUseLength(), useLength);
sl@0
   640
sl@0
   641
	PrepareReadExpectedBufferLengthL(*iCallbackRead, aSection);
sl@0
   642
	if ( iBufferLength>0 )
sl@0
   643
		{
sl@0
   644
		delete iBufferRead;
sl@0
   645
		iBufferRead=HBufC8::New(iBufferLength);
sl@0
   646
sl@0
   647
		iBufferReadPtr.Set(iBufferRead->Des());
sl@0
   648
		if ( useLength )
sl@0
   649
			{
sl@0
   650
			INFO_PRINTF2(_L("Read with length %d"), iBufferLength);
sl@0
   651
			iBusDevComm->Read(iCallbackRead->iStatus, iBufferReadPtr, iBufferLength);
sl@0
   652
			}
sl@0
   653
		else
sl@0
   654
			{
sl@0
   655
			INFO_PRINTF1(_L("Read without length"));
sl@0
   656
			iBusDevComm->Read(iCallbackRead->iStatus, iBufferReadPtr);
sl@0
   657
			}
sl@0
   658
		iCallbackRead->Activate(aAsyncErrorIndex, timeOut);
sl@0
   659
		IncOutstanding();
sl@0
   660
		}
sl@0
   661
	}
sl@0
   662
sl@0
   663
void CT_RBusDevCommData::DoCmdReadCancel()
sl@0
   664
	{
sl@0
   665
	INFO_PRINTF1(_L("ReadCancel"));
sl@0
   666
	iBusDevComm->ReadCancel();
sl@0
   667
	}
sl@0
   668
sl@0
   669
void CT_RBusDevCommData::DoCmdReadOneOrMoreL(const TDesC& aSection, const TInt aAsyncErrorIndex)
sl@0
   670
	{
sl@0
   671
	TInt	timeOut=0;
sl@0
   672
	GetIntFromConfig(aSection, KFldTimeOut, timeOut);
sl@0
   673
sl@0
   674
	PrepareReadExpectedBufferLengthL(*iCallbackReadOneOrMore, aSection);
sl@0
   675
	if ( iBufferLength>0 )
sl@0
   676
		{
sl@0
   677
		delete iBufferRead;
sl@0
   678
		iBufferRead=HBufC8::New(iBufferLength);
sl@0
   679
sl@0
   680
		iBufferReadPtr.Set(iBufferRead->Des());
sl@0
   681
		iBufferReadPtr.SetLength(iBufferLength);
sl@0
   682
		iBufferReadOneOrMorePtr.Set(iBufferRead->Des());
sl@0
   683
		iBufferReadOneOrMorePtr.SetLength(iBufferLength);
sl@0
   684
		iReadOneOrMoreLeft=iBufferLength;
sl@0
   685
		INFO_PRINTF2(_L("iBufferLength=%d"), iBufferLength);
sl@0
   686
		INFO_PRINTF2(_L("iBufferRead->MaxLength=%d"), iBufferRead->Des().MaxLength());
sl@0
   687
		INFO_PRINTF2(_L("iBufferReadPtr.Length=%d"), iBufferReadPtr.Length());
sl@0
   688
		INFO_PRINTF2(_L("iBufferReadPtr.MaxLength=%d"), iBufferReadPtr.MaxLength());
sl@0
   689
		INFO_PRINTF1(_L("ReadOneOrMore"));
sl@0
   690
		iBusDevComm->ReadOneOrMore(iCallbackReadOneOrMore->iStatus, iBufferReadPtr);
sl@0
   691
		iCallbackReadOneOrMore->Activate(aAsyncErrorIndex, timeOut);
sl@0
   692
		IncOutstanding();
sl@0
   693
		}
sl@0
   694
	}
sl@0
   695
sl@0
   696
void CT_RBusDevCommData::DoCmdReceiveBufferLength(const TDesC& aSection)
sl@0
   697
	{
sl@0
   698
	TInt	actual=iBusDevComm->ReceiveBufferLength();
sl@0
   699
	INFO_PRINTF2(_L("ReceiveBufferLength : %d"), actual);
sl@0
   700
sl@0
   701
	TInt	expected;
sl@0
   702
	if ( GetIntFromConfig(aSection, KFldExpected(), expected) )
sl@0
   703
		{
sl@0
   704
		if ( expected!=actual )
sl@0
   705
			{
sl@0
   706
			ERR_PRINTF1(KLogErrorExpectedValue);
sl@0
   707
			SetBlockResult(EFail);
sl@0
   708
			}
sl@0
   709
		}
sl@0
   710
sl@0
   711
	TBool	save=EFalse;
sl@0
   712
	GetBoolFromConfig(aSection, KFldSave(), save);
sl@0
   713
	if ( save )
sl@0
   714
		{
sl@0
   715
		iReceiveBufferLength=actual;
sl@0
   716
		}
sl@0
   717
	}
sl@0
   718
sl@0
   719
void CT_RBusDevCommData::DoCmdResetBuffers()
sl@0
   720
	{
sl@0
   721
	INFO_PRINTF1(_L("ResetBuffers"));
sl@0
   722
	iBusDevComm->ResetBuffers();
sl@0
   723
	}
sl@0
   724
sl@0
   725
TInt CT_RBusDevCommData::DoCmdSetConfigL(const TDesC& aSection)
sl@0
   726
	{
sl@0
   727
	TInt	ret=KErrNone;
sl@0
   728
sl@0
   729
	TPtrC	dataName;
sl@0
   730
	if ( GetStringFromConfig(aSection, KFldConfig, dataName) )
sl@0
   731
		{
sl@0
   732
		CT_TCommConfigV01Data*	wrapper=static_cast<CT_TCommConfigV01Data*>(GetDataWrapperL(dataName));
sl@0
   733
		TDes8*					data=wrapper->Descriptor();
sl@0
   734
		if ( data!=NULL )
sl@0
   735
			{
sl@0
   736
			INFO_PRINTF1(_L("SetConfig"));
sl@0
   737
			ret=iBusDevComm->SetConfig(*data);
sl@0
   738
			}
sl@0
   739
		else
sl@0
   740
			{
sl@0
   741
			ERR_PRINTF2(KLogNullConfigData, &dataName);
sl@0
   742
			SetBlockResult(EFail);
sl@0
   743
			}
sl@0
   744
		}
sl@0
   745
	else
sl@0
   746
		{
sl@0
   747
		ERR_PRINTF2(KLogMissingParameter, &KFldConfig());
sl@0
   748
		SetBlockResult(EFail);
sl@0
   749
		}
sl@0
   750
sl@0
   751
	return ret;
sl@0
   752
	}
sl@0
   753
sl@0
   754
TInt CT_RBusDevCommData::DoCmdSetMinTurnaroundTime(const TDesC& aSection)
sl@0
   755
	{
sl@0
   756
	TUint	value=iMinTurnaroundTime;
sl@0
   757
	GetUintFromConfig(aSection, KFldValue(), value);
sl@0
   758
sl@0
   759
	INFO_PRINTF1(_L("SetMinTurnaroundTime"));
sl@0
   760
	return iBusDevComm->SetMinTurnaroundTime(value);
sl@0
   761
	}
sl@0
   762
sl@0
   763
TInt CT_RBusDevCommData::DoCmdSetReceiveBufferLength(const TDesC& aSection)
sl@0
   764
	{
sl@0
   765
	TInt	value=iReceiveBufferLength;
sl@0
   766
	GetIntFromConfig(aSection, KFldValue(), value);
sl@0
   767
sl@0
   768
	INFO_PRINTF1(_L("SetReceiveBufferLength"));
sl@0
   769
	return iBusDevComm->SetReceiveBufferLength(value);
sl@0
   770
	}
sl@0
   771
sl@0
   772
void CT_RBusDevCommData::DoCmdSetSignals(const TDesC& aSection)
sl@0
   773
	{
sl@0
   774
	TUint	setMask=iSignals;
sl@0
   775
	GetOrFromConfig(aSection, KFldSetMask(), iEnumTableSignals, setMask);
sl@0
   776
sl@0
   777
	TUint	clearMask=~setMask;
sl@0
   778
	GetOrFromConfig(aSection, KFldClearMask(), iEnumTableSignals, clearMask);
sl@0
   779
sl@0
   780
	INFO_PRINTF1(_L("SetSignals"));
sl@0
   781
	iBusDevComm->SetSignals(setMask, clearMask);
sl@0
   782
	}
sl@0
   783
sl@0
   784
void CT_RBusDevCommData::DoCmdSignals(const TDesC& aSection)
sl@0
   785
	{
sl@0
   786
	TUint	actual=iBusDevComm->Signals();
sl@0
   787
	INFO_PRINTF2(_L("Signals:0x%x"), actual);
sl@0
   788
sl@0
   789
	TUint	expected;
sl@0
   790
	if ( GetOrFromConfig(aSection, KFldExpected(), iEnumTableSignals, expected) )
sl@0
   791
		{
sl@0
   792
		if ( expected!=actual )
sl@0
   793
			{
sl@0
   794
			ERR_PRINTF1(KLogErrorExpectedValue);
sl@0
   795
			SetBlockResult(EFail);
sl@0
   796
			}
sl@0
   797
		}
sl@0
   798
sl@0
   799
	TBool	save=EFalse;
sl@0
   800
	GetBoolFromConfig(aSection, KFldSave(), save);
sl@0
   801
	if ( save )
sl@0
   802
		{
sl@0
   803
		iSignals=actual;
sl@0
   804
		}
sl@0
   805
	}
sl@0
   806
sl@0
   807
void CT_RBusDevCommData::DoCmdVersionRequired(const TDesC& aSection)
sl@0
   808
	{
sl@0
   809
	TVersion				version=iBusDevComm->VersionRequired();
sl@0
   810
	TBuf<KMaxVersionName>	versionName(version.Name());
sl@0
   811
sl@0
   812
	INFO_PRINTF2(_L("Version name  : %S"), &versionName);
sl@0
   813
	INFO_PRINTF2(_L("Version build : %d"), (TInt)version.iBuild);
sl@0
   814
	INFO_PRINTF2(_L("Version major : %d"), (TInt)version.iMajor);
sl@0
   815
	INFO_PRINTF2(_L("Version minor : %d"), (TInt)version.iMinor);
sl@0
   816
sl@0
   817
	TPtrC	expectedVersionName;
sl@0
   818
	if( GetStringFromConfig(aSection, KFldVersionName(), expectedVersionName) )
sl@0
   819
		{
sl@0
   820
		if( version.Name() != expectedVersionName )
sl@0
   821
			{
sl@0
   822
			ERR_PRINTF3(_L("Expected Version Name (%S) != Actual Version Name (%S)"), &expectedVersionName, &versionName);
sl@0
   823
			SetBlockResult(EFail);	
sl@0
   824
			}
sl@0
   825
		}
sl@0
   826
sl@0
   827
	TInt	intTemp;
sl@0
   828
	if( GetIntFromConfig(aSection, KFldVersionBuild(), intTemp) )
sl@0
   829
		{
sl@0
   830
		if( version.iBuild != intTemp )
sl@0
   831
			{
sl@0
   832
			ERR_PRINTF3(_L("Expected Version Build (%d) != Actual Version Build (%d)"), intTemp, version.iBuild);
sl@0
   833
			SetBlockResult(EFail);
sl@0
   834
			}
sl@0
   835
		}
sl@0
   836
sl@0
   837
	if( GetIntFromConfig(aSection, KFldVersionMajor(), intTemp) )
sl@0
   838
		{
sl@0
   839
		if( version.iMajor != intTemp )
sl@0
   840
			{
sl@0
   841
			ERR_PRINTF3(_L("Expected Version Major (%d) != Actual Version Major (%d)"), intTemp, version.iMajor);
sl@0
   842
			SetBlockResult(EFail);
sl@0
   843
			}
sl@0
   844
		}
sl@0
   845
sl@0
   846
	if( GetIntFromConfig(aSection, KFldVersionMinor(), intTemp) )
sl@0
   847
		{
sl@0
   848
		if( version.iMinor != intTemp )
sl@0
   849
			{
sl@0
   850
			ERR_PRINTF3(_L("Expected Version Minor (%d) != Actual Version Minor (%d)"), intTemp, version.iMinor);
sl@0
   851
			SetBlockResult(EFail);
sl@0
   852
			}
sl@0
   853
		}
sl@0
   854
sl@0
   855
	if (version.Name() == _L("") && version.iBuild == 0 && version.iMajor == 0 && version.iMinor == 0)
sl@0
   856
		{
sl@0
   857
		ERR_PRINTF1(_L("Some version fields are not set!"));
sl@0
   858
		SetBlockResult(EFail);
sl@0
   859
		}
sl@0
   860
	}
sl@0
   861
sl@0
   862
void CT_RBusDevCommData::DoCmdWriteL(const TDesC& aSection, const TInt aAsyncErrorIndex)
sl@0
   863
	{
sl@0
   864
	TBool	dataOk=ETrue;
sl@0
   865
	TBool	useLength=EFalse;
sl@0
   866
	GetBoolFromConfig(aSection, KFldUseLength(), useLength);
sl@0
   867
sl@0
   868
	TInt	timeOut=0;
sl@0
   869
	GetIntFromConfig(aSection, KFldTimeOut, timeOut);
sl@0
   870
sl@0
   871
	TInt	repeat=1;
sl@0
   872
	GetIntFromConfig(aSection, KFldRepeat, repeat);
sl@0
   873
sl@0
   874
	TPtrC	data;
sl@0
   875
	if ( GetStringFromConfig(aSection, KFldData, data) )
sl@0
   876
		{
sl@0
   877
		iCallbackWrite->PrepareFromStringL(repeat, data);
sl@0
   878
		}
sl@0
   879
	else
sl@0
   880
		{
sl@0
   881
		if ( GetStringFromConfig(aSection, KFldFile, data) )
sl@0
   882
			{
sl@0
   883
			iCallbackWrite->PrepareFromFileL(repeat, data);
sl@0
   884
			}
sl@0
   885
		else
sl@0
   886
			{
sl@0
   887
			dataOk=EFalse;
sl@0
   888
			ERR_PRINTF2(KLogMissingParameter, &KFldData);
sl@0
   889
			ERR_PRINTF2(KLogMissingParameter, &KFldFile);
sl@0
   890
			SetBlockResult(EFail);
sl@0
   891
			}
sl@0
   892
		}
sl@0
   893
sl@0
   894
	if ( dataOk )
sl@0
   895
		{
sl@0
   896
		iBufferLength=iCallbackWrite->BufferLength();
sl@0
   897
sl@0
   898
		if ( useLength )
sl@0
   899
			{
sl@0
   900
			INFO_PRINTF2(_L("Write with length %d"), iBufferLength);
sl@0
   901
			iBusDevComm->Write(iCallbackWrite->iStatus, iCallbackWrite->Buffer(), iBufferLength);
sl@0
   902
			}
sl@0
   903
		else
sl@0
   904
			{
sl@0
   905
			INFO_PRINTF1(_L("Write without length"));
sl@0
   906
			iBusDevComm->Write(iCallbackWrite->iStatus, iCallbackWrite->Buffer());
sl@0
   907
			}
sl@0
   908
		iCallbackWrite->Activate(aAsyncErrorIndex, timeOut);
sl@0
   909
		IncOutstanding();
sl@0
   910
		}
sl@0
   911
	}
sl@0
   912
sl@0
   913
void CT_RBusDevCommData::DoCmdWriteCancel()
sl@0
   914
	{
sl@0
   915
	INFO_PRINTF1(_L("WriteCancel"));
sl@0
   916
	iBusDevComm->WriteCancel();
sl@0
   917
	}
sl@0
   918
sl@0
   919
void CT_RBusDevCommData::RunL(CActive* aActive, TInt aIndex)
sl@0
   920
/**
sl@0
   921
 Virtual RunL - Called on completion of an asynchronous command
sl@0
   922
 @internalComponent
sl@0
   923
 @see MTPActiveCallback
sl@0
   924
 @param aActive Active Object that RunL has been called on
sl@0
   925
 @pre N/A
sl@0
   926
 @post N/A
sl@0
   927
 @leave system wide error code
sl@0
   928
*/
sl@0
   929
	{
sl@0
   930
	TBool	activeOk=ETrue;
sl@0
   931
	TInt	err=KErrNone;
sl@0
   932
sl@0
   933
	if ( aActive!=NULL )
sl@0
   934
		{
sl@0
   935
		err=aActive->iStatus.Int();
sl@0
   936
		}
sl@0
   937
sl@0
   938
	if ( aActive==iCallbackRead )
sl@0
   939
		{
sl@0
   940
		iCallbackRead->KillTimer();
sl@0
   941
		INFO_PRINTF1(_L("RunL: Read()"));
sl@0
   942
sl@0
   943
		if ( err==KErrNone )
sl@0
   944
			{
sl@0
   945
			TInt	length=iBufferReadPtr.Length();
sl@0
   946
			HBufC*	bufferRead=HBufC::NewLC(length);
sl@0
   947
			bufferRead->Des().Copy(iBufferReadPtr);
sl@0
   948
			INFO_PRINTF2(_L("Received Data Length:%d"), length);
sl@0
   949
			if ( iHasReadExpected )
sl@0
   950
				{
sl@0
   951
				const TDesC8&	expectedBuffer=iCallbackRead->Buffer();
sl@0
   952
				if ( expectedBuffer.Match(iBufferReadPtr)!=0 )
sl@0
   953
					{
sl@0
   954
					for ( TInt index=0; index<length; ++index )
sl@0
   955
						{
sl@0
   956
						const TUint8&	actual=(*iBufferRead)[index];
sl@0
   957
						const TUint8&	expected=expectedBuffer[index];
sl@0
   958
						if ( actual!=expected )
sl@0
   959
							{
sl@0
   960
							ERR_PRINTF4(_L("Index:%d Read:%d Expected:%d"), index, (TInt)actual, (TInt)expected);
sl@0
   961
							SetBlockResult(EFail);
sl@0
   962
							}
sl@0
   963
						}
sl@0
   964
					}
sl@0
   965
				}
sl@0
   966
			CleanupStack::PopAndDestroy(bufferRead);
sl@0
   967
			}
sl@0
   968
		}
sl@0
   969
	else if ( aActive==iCallbackReadOneOrMore )
sl@0
   970
		{
sl@0
   971
		INFO_PRINTF1(_L("RunL: ReadOneOrMore()"));
sl@0
   972
sl@0
   973
		if ( err==KErrNone )
sl@0
   974
			{
sl@0
   975
			TInt	length=iBufferReadPtr.Length();
sl@0
   976
			if ( iReadOneOrMoreLeft!=length )
sl@0
   977
				{
sl@0
   978
				iBufferReadPtr.SetLength(iReadOneOrMoreLeft);
sl@0
   979
				iReadOneOrMoreLeft-=length;
sl@0
   980
				INFO_PRINTF2(_L("iReadOneOrMoreLeft:%d"), iReadOneOrMoreLeft);
sl@0
   981
				iBufferReadPtr.Set(iBufferReadPtr.RightTPtr(iReadOneOrMoreLeft));
sl@0
   982
				iBufferReadPtr.SetLength(iReadOneOrMoreLeft);
sl@0
   983
				INFO_PRINTF1(_L("ReadOneOrMore"));
sl@0
   984
				iBusDevComm->ReadOneOrMore(iCallbackReadOneOrMore->iStatus, iBufferReadPtr);
sl@0
   985
				iCallbackReadOneOrMore->Activate(aIndex);
sl@0
   986
				IncOutstanding();
sl@0
   987
				}
sl@0
   988
			else
sl@0
   989
				{
sl@0
   990
				iCallbackReadOneOrMore->KillTimer();
sl@0
   991
				HBufC*	bufferRead=HBufC::NewLC(iBufferLength);
sl@0
   992
				bufferRead->Des().Copy(iBufferReadOneOrMorePtr);
sl@0
   993
				if ( iHasReadExpected )
sl@0
   994
					{
sl@0
   995
					const TDesC8&	expectedBuffer=iCallbackReadOneOrMore->Buffer();
sl@0
   996
					if ( expectedBuffer.Match(iBufferReadOneOrMorePtr)!=0 )
sl@0
   997
						{
sl@0
   998
						for ( TInt index=0; index<iBufferLength; ++index )
sl@0
   999
							{
sl@0
  1000
							const TUint8&	actual=(*iBufferRead)[index];
sl@0
  1001
							const TUint8&	expected=expectedBuffer[index];
sl@0
  1002
							if ( actual!=expected )
sl@0
  1003
								{
sl@0
  1004
								ERR_PRINTF4(_L("Index:%d Read:%d Expected:%d"), index, (TInt)actual, (TInt)expected);
sl@0
  1005
								}
sl@0
  1006
							}
sl@0
  1007
sl@0
  1008
						ERR_PRINTF1(KLogErrorExpectedValue);
sl@0
  1009
						SetBlockResult(EFail);
sl@0
  1010
						}
sl@0
  1011
					}
sl@0
  1012
				CleanupStack::PopAndDestroy(bufferRead);
sl@0
  1013
				}
sl@0
  1014
			}
sl@0
  1015
		}
sl@0
  1016
	else if ( aActive==iCallbackBreak )
sl@0
  1017
		{
sl@0
  1018
		iCallbackBreak->KillTimer();
sl@0
  1019
		INFO_PRINTF1(_L("RunL: Break()"));
sl@0
  1020
		}
sl@0
  1021
	else if ( aActive==iCallbackNotifySignalChange )
sl@0
  1022
		{
sl@0
  1023
		iCallbackNotifySignalChange->KillTimer();
sl@0
  1024
		INFO_PRINTF1(_L("RunL: NotifySignalChange()"));
sl@0
  1025
sl@0
  1026
		if ( err==KErrNone )
sl@0
  1027
			{
sl@0
  1028
			INFO_PRINTF2(_L("Signals Changed=0x%x"), iNotifySignals);
sl@0
  1029
			if ( iHasNotifySignalsExpected )
sl@0
  1030
				{
sl@0
  1031
				if ( iNotifySignals!=iNotifySignalsExpected )
sl@0
  1032
					{
sl@0
  1033
					ERR_PRINTF3(KLogErrorExpectedSignal, iNotifySignals, iNotifySignalsExpected);
sl@0
  1034
					SetBlockResult(EFail);
sl@0
  1035
					}
sl@0
  1036
				}
sl@0
  1037
			}
sl@0
  1038
		}
sl@0
  1039
	else if ( aActive==iCallbackWrite )
sl@0
  1040
		{
sl@0
  1041
		iCallbackWrite->KillTimer();
sl@0
  1042
		INFO_PRINTF1(_L("RunL: Write()"));
sl@0
  1043
		}
sl@0
  1044
	else if ( aActive==iCallbackNotifyReceiveDataAvailable )
sl@0
  1045
		{
sl@0
  1046
		iCallbackNotifyReceiveDataAvailable->KillTimer();
sl@0
  1047
		INFO_PRINTF1(_L("RunL: NotifyReceiveDataAvailable()"));
sl@0
  1048
		}
sl@0
  1049
	else
sl@0
  1050
		{
sl@0
  1051
		CT_RBusLogicalChannelData::RunL(aActive, aIndex);
sl@0
  1052
		activeOk=EFalse;
sl@0
  1053
		}
sl@0
  1054
sl@0
  1055
	if ( activeOk )
sl@0
  1056
		{
sl@0
  1057
		DecOutstanding();
sl@0
  1058
		}
sl@0
  1059
sl@0
  1060
	if ( err!=KErrNone )
sl@0
  1061
		{
sl@0
  1062
		ERR_PRINTF2(_L("RunL Error %d"), err);
sl@0
  1063
		SetAsyncError(aIndex, err);
sl@0
  1064
		}
sl@0
  1065
	}
sl@0
  1066
sl@0
  1067
void CT_RBusDevCommData::DoCancel(CActive* aActive, TInt aIndex)
sl@0
  1068
/**
sl@0
  1069
 Virtual DoCancel - Request to cancel the asynchronous command
sl@0
  1070
 @internalComponent
sl@0
  1071
 @see - MTPActiveCallback
sl@0
  1072
 @param aActive Active Object that DoCancel has been called on
sl@0
  1073
 @pre - N/A
sl@0
  1074
 @post - N/A
sl@0
  1075
 @leave system wide error code
sl@0
  1076
*/
sl@0
  1077
	{
sl@0
  1078
	TBool	activeOk=ETrue;
sl@0
  1079
	SetBlockResult(EFail);
sl@0
  1080
sl@0
  1081
	if ( aActive==iCallbackRead )
sl@0
  1082
		{
sl@0
  1083
		ERR_PRINTF1(_L("ReadCancel Called"));
sl@0
  1084
		iBusDevComm->ReadCancel();
sl@0
  1085
		}
sl@0
  1086
	else if ( aActive==iCallbackReadOneOrMore )
sl@0
  1087
		{
sl@0
  1088
		ERR_PRINTF1(_L("ReadCancel Called"));
sl@0
  1089
		iBusDevComm->ReadCancel();
sl@0
  1090
		}
sl@0
  1091
	else if ( aActive==iCallbackBreak )
sl@0
  1092
		{
sl@0
  1093
		ERR_PRINTF1(_L("BreakCancel Called"));
sl@0
  1094
		iBusDevComm->BreakCancel();
sl@0
  1095
		}
sl@0
  1096
	else if ( aActive==iCallbackNotifySignalChange )
sl@0
  1097
		{
sl@0
  1098
		ERR_PRINTF1(_L("NotifySignalChangeCancel Called"));
sl@0
  1099
		iBusDevComm->NotifySignalChangeCancel();
sl@0
  1100
		}
sl@0
  1101
	else if ( aActive==iCallbackWrite )
sl@0
  1102
		{
sl@0
  1103
		ERR_PRINTF1(_L("WriteCancel Called"));
sl@0
  1104
		iBusDevComm->WriteCancel();
sl@0
  1105
		}
sl@0
  1106
	else if ( aActive==iCallbackNotifyReceiveDataAvailable )
sl@0
  1107
		{
sl@0
  1108
		ERR_PRINTF1(_L("NotifyReceiveDataAvailableCancel Called"));
sl@0
  1109
		iBusDevComm->NotifyReceiveDataAvailableCancel();
sl@0
  1110
		}
sl@0
  1111
	else
sl@0
  1112
		{
sl@0
  1113
		activeOk=EFalse;
sl@0
  1114
		CT_RBusLogicalChannelData::DoCancel(aActive, aIndex);
sl@0
  1115
		}
sl@0
  1116
sl@0
  1117
	if ( activeOk )
sl@0
  1118
		{
sl@0
  1119
		DecOutstanding();
sl@0
  1120
		}
sl@0
  1121
	}