diff -r 2d65c2f76d7b -r 947f0dc9f7a8 kerneltest/e32test/device/t_usbapi.cpp --- a/kerneltest/e32test/device/t_usbapi.cpp Tue Feb 02 01:24:03 2010 +0200 +++ b/kerneltest/e32test/device/t_usbapi.cpp Fri Apr 16 16:24:37 2010 +0300 @@ -60,6 +60,7 @@ static RUsbOtgDriver gOTG; static TBool gSupportsOtg; static TBool gSupportsHighSpeed; +static TBool gSupportResouceAllocationV2; static TBool gUsingHighSpeed; static TBool gSoak; static TChar gKeychar = 'a'; @@ -282,7 +283,7 @@ } -static void TestResourceAllocation() +static void TestResourceAllocationV1() { test.Start(_L("Test Endpoint Resource Allocation")); @@ -347,7 +348,8 @@ // Global variable - we'll need this value later gSupportsHighSpeed = d_caps().iHighSpeed; - + gSupportResouceAllocationV2 = (d_caps().iFeatureWord1 & KUsbDevCapsFeatureWord1_EndpointResourceAllocV2); + test.Printf(_L("### USB device capabilities:\n")); test.Printf(_L("Number of endpoints: %d\n"), n); test.Printf(_L("Supports Software-Connect: %s\n"), @@ -364,8 +366,7 @@ (d_caps().iFeatureWord1 & KUsbDevCapsFeatureWord1_CableDetectWithoutPower) ? _S("yes") : _S("no")); test.Printf(_L("Supports endpoint resource alloc scheme V2: %s\n"), - (d_caps().iFeatureWord1 & KUsbDevCapsFeatureWord1_EndpointResourceAllocV2) ? - _S("yes") : _S("no")); + gSupportResouceAllocationV2 ? _S("yes") : _S("no")); test(n >= 2); test.Printf(_L("(Device has sufficient endpoints.)\n")); @@ -446,7 +447,10 @@ // Some UDCs won't allow endpoint resource manipulation once the hardware has been // configured and turned on. So we do it here & now: - TestResourceAllocation(); + if (!gSupportResouceAllocationV2) + { + TestResourceAllocationV1(); + } // On the other hand, since some UDCs won't let us test many features which require // register access until the USB hardware is powered up (and because it might start @@ -504,6 +508,13 @@ r = gPort.ReleaseInterface(0); test(r == KErrNone); + if (gSupportResouceAllocationV2) + { + test.Next(_L("setting resource allocation info on endpoint 1 with resource allocation scheme v2")); + ifc().iEndpointData[0].iFeatureWord1 |= KUsbcEndpointInfoFeatureWord1_DMA; + ifc().iEndpointData[0].iFeatureWord1 |= KUsbcEndpointInfoFeatureWord1_DoubleBuffering; + } + test.Next(_L("Setting interface")); r = gPort.SetInterface(0, ifc); test(r == KErrNone); @@ -536,6 +547,18 @@ // Suspend thread to let things get stable on the bus. User::After(2000000); + if (gSupportResouceAllocationV2) + { + test.Next(_L("endpoint 1 resource allocation results(resource allocation V2)")); + TBool res = gPort.QueryEndpointResourceUse(EEndpoint1, EUsbcEndpointResourceDoubleBuffering); + test.Printf(_L("Double Buffering on endpoint 1 %s\n"), + res ? _S("now allocated") : _S("not allocated")); + + res = gPort.QueryEndpointResourceUse(EEndpoint1, EUsbcEndpointResourceDMA); + test.Printf(_L("DMA on endpoint 1 %s\n"), + res ? _S("still allocated") : _S("not allocated")); + } + test.End(); }