kerneltest/e32test/usb/t_usb_device/src/transferserver.cpp
changeset 253 d37db4dcc88d
parent 189 a5496987b1da
equal deleted inserted replaced
252:0a40b8675b23 253:d37db4dcc88d
     1 /*
     1 /*
     2 * Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
     2 * Copyright (c) 1997-2010 Nokia Corporation and/or its subsidiary(-ies).
     3 * All rights reserved.
     3 * All rights reserved.
     4 * This component and the accompanying materials are made available
     4 * This component and the accompanying materials are made available
     5 * under the terms of "Eclipse Public License v1.0"
     5 * under the terms of "Eclipse Public License v1.0"
     6 * which accompanies this distribution, and is available
     6 * which accompanies this distribution, and is available
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
    23 #include "transfersession.h"
    23 #include "transfersession.h"
    24 #include "transfersrv.h"
    24 #include "transfersrv.h"
    25 #include "transferserversecuritypolicy.h"
    25 #include "transferserversecuritypolicy.h"
    26 #include "transferhandle.h"
    26 #include "transferhandle.h"
    27 #include "tranhandlesrv.h"
    27 #include "tranhandlesrv.h"
       
    28 #include "OstTraceDefinitions.h"
       
    29 #ifdef OST_TRACE_COMPILER_IN_USE
       
    30 #include "transferserverTraces.h"
       
    31 #endif
    28 
    32 
    29 
    33 
    30 
    34 
    31 TBool gVerbose = ETrue;
    35 TBool gVerbose = ETrue;
    32 extern RTest test;
    36 extern RTest test;
    33 
    37 
    34 
    38 
    35 CTransferServer* CTransferServer::NewLC()
    39 CTransferServer* CTransferServer::NewLC()
    36 	{
    40 	{
    37 	RDebug::Printf("CTransferServer::NewLC");
    41 	OstTrace0(TRACE_NORMAL, CTRANSFERSERVER_NEWLC, "CTransferServer::NewLC");
    38 	CTransferServer* self = new(ELeave) CTransferServer;
    42 	CTransferServer* self = new(ELeave) CTransferServer;
    39 	CleanupStack::PushL(self);
    43 	CleanupStack::PushL(self);
    40 	self->StartL(KTransferServerName);
    44 	self->StartL(KTransferServerName);
    41 	self->ConstructL();
    45 	self->ConstructL();
    42 	return self;
    46 	return self;
    43 	}
    47 	}
    44 
    48 
    45 CTransferServer::~CTransferServer()
    49 CTransferServer::~CTransferServer()
    46 	{
    50 	{
    47 	RDebug::Printf("CTransferServer::~CTransferServer");
    51 	OstTrace0(TRACE_NORMAL, CTRANSFERSERVER_DCTRANSFERSERVER, "CTransferServer::~CTransferServer");
    48 	while (iLddPtr->iIFPtr)
    52 	while (iLddPtr->iIFPtr)
    49 	{
    53 	{
    50 	IFConfigPtr* ifPtrPtr = & iLddPtr->iIFPtr;
    54 	IFConfigPtr* ifPtrPtr = & iLddPtr->iIFPtr;
    51 	while ((*ifPtrPtr)->iPtrNext)
    55 	while ((*ifPtrPtr)->iPtrNext)
    52 		{
    56 		{
    72 		* lddPtrPtr = NULL;
    76 		* lddPtrPtr = NULL;
    73 		}
    77 		}
    74 
    78 
    75 	delete iShutdownTimer;	
    79 	delete iShutdownTimer;	
    76 	delete iTransferHandle;	
    80 	delete iTransferHandle;	
    77 	RDebug::Printf("<<<CTransferServer::~CTransferServer");
    81 	OstTrace0(TRACE_NORMAL, CTRANSFERSERVER_DCTRANSFERSERVER_DUP01, "<<<CTransferServer::~CTransferServer");
    78 	}
    82 	}
    79 
    83 
    80 
    84 
    81 CTransferServer::CTransferServer()
    85 CTransferServer::CTransferServer()
    82      : CPolicyServer(EPriorityHigh,KTransferServerPolicy)
    86      : CPolicyServer(EPriorityHigh,KTransferServerPolicy)
    87 	{
    91 	{
    88 	iShutdownTimer = new(ELeave) CShutdownTimer;
    92 	iShutdownTimer = new(ELeave) CShutdownTimer;
    89 	iShutdownTimer->ConstructL(); 
    93 	iShutdownTimer->ConstructL(); 
    90 	
    94 	
    91 	iTransferHandle = CTransferHandle::NewL(*this);
    95 	iTransferHandle = CTransferHandle::NewL(*this);
    92 	RDebug::Printf("CTransferServer::ConstructL");
    96 	OstTrace0(TRACE_NORMAL, CTRANSFERSERVER_CONSTRUCTL, "CTransferServer::ConstructL");
    93 	}
    97 	}
    94 
    98 
    95 
    99 
    96 CSession2* CTransferServer::NewSessionL(const TVersion &aVersion, const RMessage2& aMessage) const
   100 CSession2* CTransferServer::NewSessionL(const TVersion &aVersion, const RMessage2& aMessage) const
    97 	{
   101 	{
   106 	}
   110 	}
   107 
   111 
   108 
   112 
   109 void CTransferServer::Error(TInt aError)
   113 void CTransferServer::Error(TInt aError)
   110 	{
   114 	{
   111 	RDebug::Printf("CTransferServer::Error");
   115 	OstTrace0(TRACE_NORMAL, CTRANSFERSERVER_ERROR, "CTransferServer::Error");
   112 	Message().Complete(aError);
   116 	Message().Complete(aError);
   113 	ReStart();
   117 	ReStart();
   114 	}
   118 	}
   115 
   119 
   116 void CTransferServer::IncrementSessionCount()
   120 void CTransferServer::IncrementSessionCount()
   117 	{
   121 	{
   118 	RDebug::Printf("CTransferServer::IncrementSessionCount");
   122 	OstTrace0(TRACE_NORMAL, CTRANSFERSERVER_INCREMENTSESSIONCOUNT, "CTransferServer::IncrementSessionCount");
   119 	
   123 	
   120 	++iSessionCount;
   124 	++iSessionCount;
   121 	iShutdownTimer->Cancel();
   125 	iShutdownTimer->Cancel();
   122 
   126 
   123 	}
   127 	}
   124 
   128 
   125 void CTransferServer::DecrementSessionCount()
   129 void CTransferServer::DecrementSessionCount()
   126 	{
   130 	{
   127 	--iSessionCount;	
   131 	--iSessionCount;	
   128 	RDebug::Printf("CTransferServer::DecrementSessionCount");	
   132 	OstTrace0(TRACE_NORMAL, CTRANSFERSERVER_DECREMENTSESSIONCOUNT, "CTransferServer::DecrementSessionCount");
   129 	if (iSessionCount == 0)
   133 	if (iSessionCount == 0)
   130 		{
   134 		{
   131 		iShutdownTimer->After(KShutdownDelay);
   135 		iShutdownTimer->After(KShutdownDelay);
   132 		RDebug::Printf("CTransferServer::DecrementSessionCount1");
   136 		OstTrace0(TRACE_NORMAL, CTRANSFERSERVER_DECREMENTSESSIONCOUNT_DUP01, "CTransferServer::DecrementSessionCount1");
   133 		}
   137 		}
   134 	}
   138 	}
   135 
   139 
   136 void CTransferServer::LaunchShutdownTimerIfNoSessions()
   140 void CTransferServer::LaunchShutdownTimerIfNoSessions()
   137 	{
   141 	{
   146 	}
   150 	}
   147 
   151 
   148 
   152 
   149 void CTransferServer::CShutdownTimer::ConstructL()
   153 void CTransferServer::CShutdownTimer::ConstructL()
   150 	{
   154 	{
   151 	RDebug::Printf("CTransferServer::CShutdownTimer::ConstructL");
   155 	OstTrace0(TRACE_NORMAL, CTRANSFERSERVER_LAUNCHSHUTDOWNTIMERIFNOSESSIONS, "CTransferServer::CShutdownTimer::ConstructL");
   152 	CTimer::ConstructL();
   156 	CTimer::ConstructL();
   153 	}
   157 	}
   154 
   158 
   155 
   159 
   156 void CTransferServer::CShutdownTimer::RunL()
   160 void CTransferServer::CShutdownTimer::RunL()
   157 	{
   161 	{
   158 	RDebug::Printf("CShutdownTimer::RunL");
   162 	OstTrace0(TRACE_NORMAL, CTRANSFERSERVER_LAUNCHSHUTDOWNTIMERIFNOSESSIONS_DUP01, "CShutdownTimer::RunL");
   159 	CActiveScheduler::Stop();
   163 	CActiveScheduler::Stop();
   160 	}
   164 	}
   161 
   165 
   162 
   166 
   163 void CTransferServer::TransferHandleL()
   167 void CTransferServer::TransferHandleL()
   229 	{
   233 	{
   230 	test.Start (_L("Setup Interface"));
   234 	test.Start (_L("Setup Interface"));
   231 	
   235 	
   232 	// first of all set the default interface	
   236 	// first of all set the default interface	
   233 	TUSB_PRINT2 ("Set Default Interface with %d endpoints bandwidth 0x%x",(*aIfPtr)->iInfoPtr->iTotalEndpointsUsed,(*aIfPtr)->iBandwidthIn | (*aIfPtr)->iBandwidthOut);
   237 	TUSB_PRINT2 ("Set Default Interface with %d endpoints bandwidth 0x%x",(*aIfPtr)->iInfoPtr->iTotalEndpointsUsed,(*aIfPtr)->iBandwidthIn | (*aIfPtr)->iBandwidthOut);
       
   238 	OstTraceExt2 (TRACE_NORMAL, CTRANSFERSERVER_SETUPINTERFACE, "Set Default Interface with %d endpoints bandwidth 0x%x",(*aIfPtr)->iInfoPtr->iTotalEndpointsUsed,(*aIfPtr)->iBandwidthIn | (*aIfPtr)->iBandwidthOut);
   234 #ifdef USB_SC
   239 #ifdef USB_SC
   235 	TUsbcScInterfaceInfoBuf ifc = *((*aIfPtr)->iInfoPtr);
   240 	TUsbcScInterfaceInfoBuf ifc = *((*aIfPtr)->iInfoPtr);
   236 	TInt r = iPort[aPortNumber].SetInterface(0, ifc);
   241 	TInt r = iPort[aPortNumber].SetInterface(0, ifc);
   237 #else
   242 #else
   238 	TUsbcInterfaceInfoBuf ifc = *((*aIfPtr)->iInfoPtr);
   243 	TUsbcInterfaceInfoBuf ifc = *((*aIfPtr)->iInfoPtr);
   260 		{
   265 		{
   261 		(*aIfPtr)->iNumber = ifDescriptor[KIfcDesc_NumberOffset];	
   266 		(*aIfPtr)->iNumber = ifDescriptor[KIfcDesc_NumberOffset];	
   262 		}
   267 		}
   263 	TUint8 interfaceNumber = (*aIfPtr)->iNumber;
   268 	TUint8 interfaceNumber = (*aIfPtr)->iNumber;
   264 	TUSB_PRINT1 ("Interface Number %d",interfaceNumber);
   269 	TUSB_PRINT1 ("Interface Number %d",interfaceNumber);
       
   270 	OstTrace1 (TRACE_NORMAL, CTRANSFERSERVER_SETUPINTERFACE_DUP01, "Interface Number %d",interfaceNumber);
   265 	test.End();
   271 	test.End();
   266 	}
   272 	}
   267 
   273 
   268 
   274 
   269 TInt CTransferServer::SetupLdds(TDes& aFileName)
   275 TInt CTransferServer::SetupLdds(TDes& aFileName)
   270 	{
   276 	{
   271 	TInt r;
   277 	TInt r;
   272 	User::LeaveIfError(iFs.Connect());
   278 	User::LeaveIfError(iFs.Connect());
   273 
   279 
   274 	RDebug::Printf ("Configuration");
   280 	OstTrace0(TRACE_NORMAL, CTRANSFERSERVER_SETUPLDDS, "Configuration");
   275 	
   281 	
   276 	RDebug::Printf ("Open configuration file");
   282 	OstTrace0(TRACE_NORMAL, CTRANSFERSERVER_SETUPLDDS_DUP01, "Open configuration file");
   277 	// set the session path to use the ROM if no drive specified
   283 	// set the session path to use the ROM if no drive specified
   278 	r=iFs.SetSessionPath(_L("Z:\\test\\"));
   284 	r=iFs.SetSessionPath(_L("Z:\\test\\"));
   279 	test_KErrNone(r);
   285 	test_KErrNone(r);
   280 
   286 
   281 	r = iConfigFile.Open(iFs, aFileName, EFileShareReadersOnly | EFileStreamText | EFileRead);
   287 	r = iConfigFile.Open(iFs, aFileName, EFileShareReadersOnly | EFileStreamText | EFileRead);
   282 	test_KErrNone(r);
   288 	test_KErrNone(r);
   283 	RDebug::Printf("Configuration file %s Opened successfully", aFileName.PtrZ());
   289 	OstTraceExt1(TRACE_NORMAL, CTRANSFERSERVER_SETUPLDDS_DUP02, "Configuration file %S Opened successfully", aFileName);
   284 
   290 
   285 	RDebug::Printf ("Process configuration file");
   291 	OstTrace0(TRACE_NORMAL, CTRANSFERSERVER_SETUPLDDS_DUP03, "Process configuration file");
   286 	test(ProcessConfigFile (iConfigFile,NULL,&iLddPtr));
   292 	test(ProcessConfigFile (iConfigFile,NULL,&iLddPtr));
   287 	
   293 	
   288 	iConfigFile.Close();
   294 	iConfigFile.Close();
   289 	iFs.Close();
   295 	iFs.Close();
   290 
   296 
   291 	RDebug::Printf ("LDD in configuration file");
   297 	OstTrace0(TRACE_NORMAL, CTRANSFERSERVER_SETUPLDDS_DUP04, "LDD in configuration file");
   292 	test_NotNull(iLddPtr);
   298 	test_NotNull(iLddPtr);
   293 		
   299 		
   294 	LDDConfigPtr lddPtr = iLddPtr;
   300 	LDDConfigPtr lddPtr = iLddPtr;
   295 	TInt nextPort = 0;
   301 	TInt nextPort = 0;
   296 	while (lddPtr != NULL)
   302 	while (lddPtr != NULL)
   297 		{
   303 		{
   298 		// Load logical driver (LDD)
   304 		// Load logical driver (LDD)
   299 		// (There's no physical driver (PDD) with USB: it's a kernel extension DLL which
   305 		// (There's no physical driver (PDD) with USB: it's a kernel extension DLL which
   300 		//	was already loaded at boot time.)
   306 		//	was already loaded at boot time.)
   301 		RDebug::Printf ("Loading USB LDD");
   307 		OstTrace0(TRACE_NORMAL, CTRANSFERSERVER_SETUPLDDS_DUP05, "Loading USB LDD");
   302 		TUSB_PRINT1("Loading USB LDD ",lddPtr->iName.PtrZ());
   308 		TUSB_PRINT1("Loading USB LDD ",lddPtr->iName.PtrZ());
       
   309 		OstTraceExt1(TRACE_NORMAL, CTRANSFERSERVER_SETUPLDDS_DUP06, "Loading USB LDD %s",lddPtr->iName);
   303 		r = User::LoadLogicalDevice(lddPtr->iName);
   310 		r = User::LoadLogicalDevice(lddPtr->iName);
   304 		test(r == KErrNone || r == KErrAlreadyExists);
   311 		test(r == KErrNone || r == KErrAlreadyExists);
   305 	
   312 	
   306 		IFConfigPtr ifPtr = lddPtr->iIFPtr;
   313 		IFConfigPtr ifPtr = lddPtr->iIFPtr;
   307 		
   314 		
   308 		RDebug::Printf ("Opening Channels");
   315 		OstTrace0(TRACE_NORMAL, CTRANSFERSERVER_SETUPLDDS_DUP07, "Opening Channels");
   309 		for (TInt portNumber = nextPort; portNumber < nextPort+lddPtr->iNumChannels; portNumber++)
   316 		for (TInt portNumber = nextPort; portNumber < nextPort+lddPtr->iNumChannels; portNumber++)
   310 			{
   317 			{
   311 			test_Compare(lddPtr->iNumChannels,>,0);
   318 			test_Compare(lddPtr->iNumChannels,>,0);
   312 			test_Compare(lddPtr->iNumChannels,==,1);
   319 			test_Compare(lddPtr->iNumChannels,==,1);
   313 
   320 
   314 			// Open USB channel
   321 			// Open USB channel
   315 			r = iPort[portNumber].Open(0);
   322 			r = iPort[portNumber].Open(0);
   316 			test_KErrNone(r);
   323 			test_KErrNone(r);
   317 			TUSB_PRINT("Successfully opened USB port");
   324 			TUSB_PRINT("Successfully opened USB port");
       
   325 			OstTrace0(TRACE_NORMAL, CTRANSFERSERVER_SETUPLDDS_DUP08, "Successfully opened USB port");
   318 
   326 
   319 			// Query the USB device/Setup the USB interface
   327 			// Query the USB device/Setup the USB interface
   320 			if (portNumber == nextPort)
   328 			if (portNumber == nextPort)
   321 				{
   329 				{
   322 				// Change some descriptors to contain suitable values
   330 				// Change some descriptors to contain suitable values
   344 		nextPort += lddPtr->iNumChannels;	
   352 		nextPort += lddPtr->iNumChannels;	
   345 		lddPtr = lddPtr->iPtrNext;	
   353 		lddPtr = lddPtr->iPtrNext;	
   346 		}
   354 		}
   347 		
   355 		
   348 	TUSB_PRINT("All Interfaces and Alternate Settings successfully set up");
   356 	TUSB_PRINT("All Interfaces and Alternate Settings successfully set up");
       
   357 	OstTrace0(TRACE_NORMAL, CTRANSFERSERVER_SETUPLDDS_DUP09, "All Interfaces and Alternate Settings successfully set up");
   349 	
   358 	
   350 	iTransferHandle->StartTimer();
   359 	iTransferHandle->StartTimer();
   351 
   360 
   352 	return KErrNone;
   361 	return KErrNone;
   353 	}
   362 	}
   362 	test_KErrNone(r);
   371 	test_KErrNone(r);
   363 
   372 
   364 	const TInt n = d_caps().iTotalEndpoints;
   373 	const TInt n = d_caps().iTotalEndpoints;
   365 
   374 
   366 	TUSB_PRINT("###  USB device capabilities:");
   375 	TUSB_PRINT("###  USB device capabilities:");
       
   376 	OstTrace0(TRACE_NORMAL, CTRANSFERSERVER_QUERYUSBCLIENTL, "###  USB device capabilities:");
   367 	TUSB_PRINT1("Number of endpoints:				 %d", n);
   377 	TUSB_PRINT1("Number of endpoints:				 %d", n);
       
   378 	OstTrace1(TRACE_NORMAL, CTRANSFERSERVER_QUERYUSBCLIENTL_DUP01, "Number of endpoints:     %d", n);
   368 	TUSB_PRINT1("Supports Software-Connect: 		 %s",
   379 	TUSB_PRINT1("Supports Software-Connect: 		 %s",
   369 				d_caps().iConnect ? _S("yes") : _S("no"));
   380 				d_caps().iConnect ? _S("yes") : _S("no"));
       
   381 	OstTraceExt1(TRACE_NORMAL, CTRANSFERSERVER_QUERYUSBCLIENTL_DUP02, "Supports Software-Connect:     %s",
       
   382 				d_caps().iConnect ? _L("yes") : _L("no"));
   370 	TUSB_PRINT1("Device is Self-Powered:			 %s",
   383 	TUSB_PRINT1("Device is Self-Powered:			 %s",
   371 				d_caps().iSelfPowered ? _S("yes") : _S("no"));
   384 				d_caps().iConnect ? _S("yes") : _S("no"));
       
   385 	OstTraceExt1(TRACE_NORMAL, CTRANSFERSERVER_QUERYUSBCLIENTL_DUP03, "Device is Self-Powered:    %s",
       
   386 				d_caps().iSelfPowered ? _L("yes") : _L("no"));
   372 	TUSB_PRINT1("Supports Remote-Wakeup:			 %s",
   387 	TUSB_PRINT1("Supports Remote-Wakeup:			 %s",
   373 				d_caps().iRemoteWakeup ? _S("yes") : _S("no"));
   388 				d_caps().iConnect ? _S("yes") : _S("no"));
       
   389 	OstTraceExt1(TRACE_NORMAL, CTRANSFERSERVER_QUERYUSBCLIENTL_DUP04, "Supports Remote-Wakeup:    %s",
       
   390 				d_caps().iRemoteWakeup ? _L("yes") : _L("no"));
   374 	TUSB_PRINT1("Supports High-speed:				 %s",
   391 	TUSB_PRINT1("Supports High-speed:				 %s",
   375 				d_caps().iHighSpeed ? _S("yes") : _S("no"));
   392 				d_caps().iConnect ? _S("yes") : _S("no"));
       
   393 	OstTraceExt1(TRACE_NORMAL, CTRANSFERSERVER_QUERYUSBCLIENTL_DUP05, "Supports High-speed:       %s",
       
   394 				d_caps().iHighSpeed ? _L("yes") : _L("no"));
   376 	TUSB_PRINT1("Supports unpowered cable detection: %s\n",
   395 	TUSB_PRINT1("Supports unpowered cable detection: %s\n",
       
   396 				d_caps().iConnect ? _S("yes") : _S("no"));
       
   397 	OstTraceExt1(TRACE_NORMAL, CTRANSFERSERVER_QUERYUSBCLIENTL_DUP06, "Supports unpowered cable detection: %s\n",
   377 				(d_caps().iFeatureWord1 & KUsbDevCapsFeatureWord1_CableDetectWithoutPower) ?
   398 				(d_caps().iFeatureWord1 & KUsbDevCapsFeatureWord1_CableDetectWithoutPower) ?
   378 				_S("yes") : _S("no"));
   399 				_L("yes") : _L("no"));
   379 	TUSB_PRINT1("Supports endpoint resource allocation v2 scheme: %s\n",
   400 	TUSB_PRINT1("Supports endpoint resource allocation v2 scheme: %s\n",
       
   401 				d_caps().iConnect ? _S("yes") : _S("no"));
       
   402 	OstTraceExt1(TRACE_NORMAL, CTRANSFERSERVER_QUERYUSBCLIENTL_DUP07, "Supports endpoint resource allocation v2 scheme: %s\n",
   380 				(d_caps().iFeatureWord1 & KUsbDevCapsFeatureWord1_EndpointResourceAllocV2) ?
   403 				(d_caps().iFeatureWord1 & KUsbDevCapsFeatureWord1_EndpointResourceAllocV2) ?
   381 				_S("yes") : _S("no"));					
   404 				_L("yes") : _L("no"));					
   382 	TUSB_PRINT("");
   405 	TUSB_PRINT("");
       
   406 	OstTrace0(TRACE_NORMAL, CTRANSFERSERVER_QUERYUSBCLIENTL_DUP08, "");
   383 
   407 
   384 	iSoftwareConnect = d_caps().iConnect;					// we need to remember this
   408 	iSoftwareConnect = d_caps().iConnect;					// we need to remember this
   385 	test_Equal(aLddPtr->iSoftConnect,iSoftwareConnect);
   409 	test_Equal(aLddPtr->iSoftConnect,iSoftwareConnect);
   386 
   410 
   387 	iSupportResourceAllocationV2 = ((d_caps().iFeatureWord1 & KUsbDevCapsFeatureWord1_EndpointResourceAllocV2) != 0);
   411 	iSupportResourceAllocationV2 = ((d_caps().iFeatureWord1 & KUsbDevCapsFeatureWord1_EndpointResourceAllocV2) != 0);
   413 	TPtr8 dataptr(reinterpret_cast<TUint8*>(data), sizeof(data), sizeof(data));
   437 	TPtr8 dataptr(reinterpret_cast<TUint8*>(data), sizeof(data), sizeof(data));
   414 	r = aPort->EndpointCaps(dataptr);
   438 	r = aPort->EndpointCaps(dataptr);
   415 	test_KErrNone(r);
   439 	test_KErrNone(r);
   416 
   440 
   417 	TUSB_PRINT("### USB device endpoint capabilities:");
   441 	TUSB_PRINT("### USB device endpoint capabilities:");
       
   442 	OstTrace0(TRACE_NORMAL, CTRANSFERSERVER_QUERYUSBCLIENTL_DUP09, "### USB device endpoint capabilities:");
   418 	for (TInt i = 0; i < n; i++)
   443 	for (TInt i = 0; i < n; i++)
   419 		{
   444 		{
   420 		const TUsbcEndpointCaps* caps = &data[i].iCaps;
   445 		const TUsbcEndpointCaps* caps = &data[i].iCaps;
   421 		
   446 		
   422 		
   447 		
   474 			directionStr = _S("Out");
   499 			directionStr = _S("Out");
   475 		if (caps->iTypesAndDir & KUsbEpDirBidirect)
   500 		if (caps->iTypesAndDir & KUsbEpDirBidirect)
   476 			directionStr = _S("Both");
   501 			directionStr = _S("Both");
   477 				
   502 				
   478 		TUSB_PRINT4("Endpoint:%d Sizes =%s Type = %s - %s",
   503 		TUSB_PRINT4("Endpoint:%d Sizes =%s Type = %s - %s",
   479 					i+1,sizeStr.PtrZ(), typeStr.PtrZ(), directionStr.PtrZ());
   504 			i+1,sizeStr.PtrZ(), typeStr.PtrZ(), directionStr.PtrZ());
       
   505 		OstTraceExt4(TRACE_NORMAL, CTRANSFERSERVER_QUERYUSBCLIENTL_DUP10, "Endpoint:%d Sizes =%S Type = %S - %S",
       
   506 					i+1,sizeStr, typeStr, directionStr);
   480 		}
   507 		}
   481 	TUSB_PRINT("");
   508 	TUSB_PRINT("");
       
   509 	OstTrace0(TRACE_NORMAL, CTRANSFERSERVER_QUERYUSBCLIENTL_DUP11, "");
   482 
   510 
   483 	test.End();
   511 	test.End();
   484 			
   512 			
   485 	}
   513 	}
   486 
   514