diff -r 000000000000 -r a41df078684a kerneltest/e32utils/testusbcldd/src/dtestusblogdev.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kerneltest/e32utils/testusbcldd/src/dtestusblogdev.cpp Mon Oct 19 15:55:17 2009 +0100 @@ -0,0 +1,97 @@ +// Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Eclipse Public License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.eclipse.org/legal/epl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// f32test\testusbcldd\src\dtestusblogdev.cpp +// +// + +#include "dtestusblogdev.h" +#include + +// global Dfc Que +TDynamicDfcQue* gDfcQ; + +// +// DLL export number 1: Create a new LDD factory +// +DECLARE_STANDARD_LDD() + { + return(new DTestUsbcLogDevice); + } + +DTestUsbcLogDevice::DTestUsbcLogDevice() : + iEndpoints(KMaxEndpointsPerClient+1) + { + iParseMask = KDeviceAllowUnit; + iUnitsMask = 0xffffffff; + iVersion = TVersion(KTestUsbcMajorVersion, KTestUsbcMinorVersion, KTestUsbcBuildVersion); + } + +DTestUsbcLogDevice::~DTestUsbcLogDevice() + { + for (TInt i = 0; i < iEndpoints.Count(); i++) + { + delete iEndpoints[i]; + } + iEndpoints.Reset(); + iEndpoints.Close(); + + if (gDfcQ) + gDfcQ->Destroy(); + } + +const TInt KDSTestUsbThreadPriority = 27; +_LIT(KDTestUsbThread,"DTestUsbThread"); + +TInt DTestUsbcLogDevice::Install() + { + // Allocate a kernel thread to run the DFC + TInt r = Kern::DynamicDfcQCreate(gDfcQ, KDSTestUsbThreadPriority, KDTestUsbThread); + + if (r != KErrNone) + return r; + + _LIT(KName, "usbc"); + return SetName(&KName); + } + +void DTestUsbcLogDevice::GetCaps(TDes8& aDes) const + { + TPckgBuf b; + b().version=iVersion; + Kern::InfoCopy(aDes, b); + } + +TInt DTestUsbcLogDevice::Create(DLogicalChannelBase*& aChannel) + { + if (iEndpoints.Count() == 0) + { + for (TInt i = 0; i < KMaxEndpointsPerClient+1; i++) + { + DTestUsbcEndpoint* ep = new DTestUsbcEndpoint(); + if (!ep) + { + return KErrNoMemory; + } + TInt err = ep->Create(DLddTestUsbcChannel::iEndpointData[i].iCaps); + if (err != KErrNone) + { + return err; + } + iEndpoints.Append(ep); + } + } + aChannel = new DLddTestUsbcChannel(iEndpoints); + return aChannel ? KErrNone : KErrNoMemory; + } +