usbmgmt/usbmgr/device/classdrivers/acm/classimplementation/ecacm/src/CdcInterfaceBase.cpp
changeset 0 c9bc50fca66e
child 15 f92a4f87e424
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usbmgmt/usbmgr/device/classdrivers/acm/classimplementation/ecacm/src/CdcInterfaceBase.cpp	Tue Feb 02 02:02:59 2010 +0200
@@ -0,0 +1,139 @@
+/*
+* Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "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:
+*
+*/
+
+#include <e32std.h>
+#include "CdcInterfaceBase.h"
+#include <usb/usblogger.h>
+
+#ifdef __FLOG_ACTIVE
+_LIT8(KLogComponent, "ECACM");
+#endif
+
+CCdcInterfaceBase::CCdcInterfaceBase(const TDesC16& aIfcName)
+/**
+ * Constructor.
+ *
+ * @param aIfcName The name of the interface.
+ */
+	{
+	iIfcName.Set(aIfcName);
+	}
+
+void CCdcInterfaceBase::BaseConstructL()
+/**
+ * Construct the object
+ * This call registers the object with the USB device driver
+ */
+	{
+	LOGTEXT(_L8("\tcalling RDevUsbcClient::Open"));
+	// 0 is assumed to mean ep0
+	TInt ret = iLdd.Open(0); 
+	if ( ret )
+		{
+		LOGTEXT2(_L8("\tRDevUsbcClient::Open = %d"), ret);
+		LEAVEIFERRORL(ret); 
+		}
+
+	ret = SetUpInterface();
+	if ( ret )
+		{
+		LOGTEXT2(_L8("\tSetUpInterface = %d"), ret);
+		LEAVEIFERRORL(ret);
+		}
+	}
+
+CCdcInterfaceBase::~CCdcInterfaceBase()
+/**
+ * Destructor.
+ */
+	{
+	LOG_FUNC
+
+	if ( iLdd.Handle() )
+		{
+		LOGTEXT(_L8("\tLDD handle exists"));
+
+		// Don't bother calling ReleaseInterface- the base driver spec says 
+		// that Close does it for us.
+
+		LOGTEXT(_L8("\tclosing LDD session"));
+		iLdd.Close();
+		}
+	}
+
+TInt CCdcInterfaceBase::GetInterfaceNumber(TUint8& aIntNumber)
+/**
+ * Get my interface number
+ *
+ * @param aIntNumber My interface number
+ * @return Error.
+ */
+	{
+	LOG_FUNC
+
+	TInt interfaceSize = 0;
+
+	// 0 means the main interface in the LDD API
+	TInt res = iLdd.GetInterfaceDescriptorSize(0, interfaceSize);
+
+	if ( res )
+		{
+		LOGTEXT2(_L8("\t***GetInterfaceDescriptorSize()=%d"), res);
+		return res;
+		}
+
+	HBufC8* interfaceBuf = HBufC8::New(interfaceSize);
+	if ( !interfaceBuf )
+		{
+		LOGTEXT(_L8("\t***failed to create interfaceBuf- "
+			"returning KErrNoMemory"));
+		return KErrNoMemory;
+		}
+
+	TPtr8 interfacePtr = interfaceBuf->Des();
+	interfacePtr.SetLength(0);
+	// 0 means the main interface in the LDD API
+	res = iLdd.GetInterfaceDescriptor(0, interfacePtr); 
+
+	if ( res )
+		{
+		delete interfaceBuf;
+		LOGTEXT2(_L8("\t***GetInterfaceDescriptor()=%d"), res);
+		return res;
+		}
+
+#ifdef __FLOG_ACTIVE
+	LOGTEXT2(_L8("\t***interface length = %d"), interfacePtr.Length());
+	for ( TInt i = 0 ; i < interfacePtr.Length() ; i++ )
+		{
+		LOGTEXT2(_L8("\t***** %x"),interfacePtr[i]);
+		}
+#endif
+
+	const TUint8* buffer = reinterpret_cast<const TUint8*>(interfacePtr.Ptr());
+	// 2 is where the interface number is, according to the LDD API
+	aIntNumber = buffer[2]; 
+
+	LOGTEXT2(_L8("\tinterface number = %d"), aIntNumber);
+
+	delete interfaceBuf;
+
+	return KErrNone;
+	}
+
+//
+// End of file