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 { |
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 { |
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 |
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); |
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 |