diff -r d45b74d3fb20 -r d57b86b1867a kerneltest/e32test/device/t_usbcsc.cpp --- a/kerneltest/e32test/device/t_usbcsc.cpp Tue Aug 31 11:40:45 2010 +0100 +++ b/kerneltest/e32test/device/t_usbcsc.cpp Mon Sep 13 15:16:07 2010 +0100 @@ -24,6 +24,7 @@ #include "t_usblib.h" #include #include "u32std.h" +#include "d32otgdi.h" #include "OstTraceDefinitions.h" #ifdef OST_TRACE_COMPILER_IN_USE #include "t_usbcscTraces.h" @@ -37,8 +38,15 @@ #define DEBUGPRINT(a) {} #endif +void OpenStackIfOtg(); +void CloseStackIfOtg(); + LOCAL_D RTest test(_L("T_USBCSC")); +_LIT(KOtgdiLddFilename, "otgdi"); +static TBool gSupportsOtg; +static RUsbOtgDriver gOtgPort; + _LIT(KLddName, "eusbcsc"); _LIT(KUsbDeviceName, "Usbcsc"); @@ -309,7 +317,9 @@ test.Next(_L("Buffer Construction")); r = gPort.RealizeInterface(gChunk); test_KErrNone(r); - + + OpenStackIfOtg(); + TUsbcScChunkHeader chunkHeader(gChunk); DEBUGPRINT(test.Printf(_L("iBuffers at 0x%x, iAltSettings at 0x%x\n"),chunkHeader.iBuffers, chunkHeader.iAltSettings)); @@ -872,6 +882,8 @@ TInt r = gPort.RealizeInterface(gChunk); test_KErrNone(r); + OpenStackIfOtg(); + if (gRealHardware) { TUsbcScChunkHeader chunkHeader(gChunk); @@ -1024,6 +1036,7 @@ } delete altSetConfig; + CloseStackIfOtg(); CloseChannel(); UnloadDriver(); } @@ -1477,6 +1490,8 @@ r = gPort.RealizeInterface(gChunk); test_KErrNone(r); + OpenStackIfOtg(); + const TInt timeOut = 5000; //5 millisec TUsbcScChunkHeader chunkHeader(gChunk); @@ -1549,6 +1564,7 @@ }//grealhardware + CloseStackIfOtg(); CloseChannel(); UnloadDriver(); @@ -1566,6 +1582,8 @@ r = gPort.RealizeInterface(gChunk); test_KErrNone(r); + + OpenStackIfOtg(); TInt out_buf = 0; TInt in_buf = 0; @@ -1644,6 +1662,7 @@ User::WaitForRequest(status); test_Compare(status.Int(), ==, KErrArgument); + CloseStackIfOtg(); CloseChannel(); UnloadDriver(); @@ -1694,6 +1713,7 @@ OstTrace1(TRACE_NORMAL, TESTSETINTERFACE_TESTSETINTERFACE_DUP02, "Release Interface %d \n", altSetNo); r = gPort.ReleaseInterface(altSetNo); test_Compare(r, ==, KErrUsbAlreadyRealized); + CloseStackIfOtg(); CloseChannel(); UnloadDriver(); @@ -1721,6 +1741,7 @@ r = gPort.RealizeInterface(tmpChunk); //TO do Uncomment to test Realize interface call twice test_Equal(KErrUsbAlreadyRealized, r); + CloseStackIfOtg(); CloseChannel(); TestMultipleChannels(); UnloadDriver(); @@ -1743,6 +1764,7 @@ TestBufferConstruction(altSetConfig); + CloseStackIfOtg(); CloseChannel(); UnloadDriver(); @@ -1766,6 +1788,7 @@ OstTrace0(TRACE_NORMAL, TESTSETINTERFACE_TESTSETINTERFACE_DUP03, "Check chunk still populated with one interface\n"); TestBufferConstruction(altSetConfig); + CloseStackIfOtg(); CloseChannel(); UnloadDriver(); @@ -1785,6 +1808,7 @@ OstTrace0(TRACE_NORMAL, TESTSETINTERFACE_TESTSETINTERFACE_DUP04, "Check chunk still populated with one interface \n"); TestBufferConstruction(altSetConfig); + CloseStackIfOtg(); CloseChannel(); UnloadDriver(); @@ -1803,6 +1827,7 @@ OstTrace0(TRACE_NORMAL, TESTSETINTERFACE_TESTSETINTERFACE_DUP05, "Check chunk not populated with any valid data as all interfaces would be destroyed \n"); TestBufferConstruction(altSetConfig); + CloseStackIfOtg(); CloseChannel(); UnloadDriver(); test.Next(_L("Test Release Interface, No interface set but call Release interface and test Chunk construction \n")); @@ -1815,6 +1840,7 @@ TestBufferConstruction(altSetConfig); + CloseStackIfOtg(); CloseChannel(); UnloadDriver(); UserSvr::HalFunction(EHalGroupKernel, EKernelHalSupervisorBarrier, (TAny*)5000, 0); @@ -1837,6 +1863,7 @@ TestBufferConstruction(altSetConfig); + CloseStackIfOtg(); CloseChannel(); UnloadDriver(); UserSvr::HalFunction(EHalGroupKernel, EKernelHalSupervisorBarrier, (TAny*)5000, 0); @@ -3298,7 +3325,29 @@ test.Next(_L("Open Channel")); TInt r = gPort.Open(0); - test_KErrNone(r); + test_KErrNone(r); + } + +void OpenStackIfOtg() + { + // On an OTG device we have to start the OTG driver, otherwise the Client + // stack will remain disabled forever. + if (gSupportsOtg) + { + test.Start(_L("Running on OTG device: loading OTG driver\n")); + test.Next(_L("Load OTG LDD")); + TInt r = User::LoadLogicalDevice(KOtgdiLddFilename); + test((r == KErrNone) || (r == KErrAlreadyExists)); + + test.Next(_L("Open OTG channel")); + r = gOtgPort.Open(); + test(r == KErrNone); + + test.Next(_L("Start OTG stack")); + r = gOtgPort.StartStacks(); + test(r == KErrNone); + test.End(); + } } void TestMultipleChannels() @@ -3328,8 +3377,24 @@ lPort3.Close(); } +void CloseStackIfOtg() + { + if (gSupportsOtg) + { + test.Start(_L("Close OTG stack\n")); + test.Next(_L("Stop OTG stack")); + gOtgPort.StopStacks(); + test.Next(_L("Close OTG Channel")); + gOtgPort.Close(); + test.Next(_L("Free OTG LDD")); + TInt r = User::FreeLogicalDevice(RUsbOtgDriver::Name()); + test(r == KErrNone); + test.End(); + } + } + void CloseChannel() - { + { test.Next(_L("Close Chunk Handle")); gChunk.Close(); @@ -3684,6 +3749,7 @@ test.Printf(_L("Finalize Interface\n")); OstTrace0(TRACE_NORMAL, TESTBILREADWRITE_TESTBILREADWRITE_DUP02, "Finalize Interface\n"); gPort.FinalizeInterface(tChunk); + OpenStackIfOtg(); if(gRealHardware) { @@ -3716,6 +3782,7 @@ OstTrace0(TRACE_NORMAL, TESTBILREADWRITE_TESTBILREADWRITE_DUP09, "!!warning- compare buffers found discrepancies!\n"); } } + CloseStackIfOtg(); gChunk.Close(); test.Printf(_L("Close global USB channel\n")); OstTrace0(TRACE_NORMAL, TESTBILREADWRITE_TESTBILREADWRITE_DUP10, "Close global USB channel\n"); @@ -3743,6 +3810,7 @@ test.Printf(_L("Finalize Interface\n")); OstTrace0(TRACE_NORMAL, TESTBILALTERNATESETTINGCHANGE_TESTBILALTERNATESETTINGCHANGE_DUP03, "Finalize Interface\n"); gPort.FinalizeInterface(tChunk); + OpenStackIfOtg(); if(gRealHardware) { @@ -3751,6 +3819,7 @@ test.Printf(_L("Enumerated. status = %d\n"), status.Int()); OstTrace1(TRACE_NORMAL, TESTBILALTERNATESETTINGCHANGE_TESTBILALTERNATESETTINGCHANGE_DUP04, "Enumerated. status = %d\n", status.Int()); } + CloseStackIfOtg(); gChunk.Close(); test.Printf(_L("Close global USB channel\n")); OstTrace0(TRACE_NORMAL, TESTBILALTERNATESETTINGCHANGE_TESTBILALTERNATESETTINGCHANGE_DUP05, "Close global USB channel\n"); @@ -3776,6 +3845,7 @@ SetupBulkInterfaces(0,1,1); RChunk *tChunk = &gChunk; test_KErrNone(gPort.FinalizeInterface(tChunk)); + OpenStackIfOtg(); if(gRealHardware) { @@ -3967,6 +4037,7 @@ // data/setup data. test.Getch(); } // end if-real-hardware + CloseStackIfOtg(); gChunk.Close(); test.Printf(_L("Close global USB channel\n")); OstTrace0(TRACE_NORMAL, TESTBILEP0_TESTBILEP0_DUP16, "Close global USB channel\n"); @@ -4256,13 +4327,15 @@ TBuf8 otg_desc; r = gPort.GetOtgDescriptor(otg_desc); test(r == KErrNotSupported || r == KErrNone); - TInt supportsOtg = (r != KErrNotSupported) ? ETrue : EFalse; - + gSupportsOtg = (r != KErrNotSupported) ? ETrue : EFalse; + + OpenStackIfOtg(); + // We turn on UDC here explicitly. This is done only once and just to test the API as such test.Next(_L("Powering up UDC")); r = gPort.PowerUpUdc(); - if (!supportsOtg) + if (!gSupportsOtg) { test_KErrNone(r); } @@ -4271,8 +4344,10 @@ test((r == KErrNone) || (r == KErrNotReady)); } + CloseStackIfOtg(); CloseChannel(); UnloadDriver(); + if (gSpecTest == EAll) { for (TInt i = 1; i <= 7; i++)