diff -r 000000000000 -r c9bc50fca66e usbmgmt/usbmgr/device/classdrivers/acm/classimplementation/ecacm/src/CdcInterfaceBase.cpp --- /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 +#include "CdcInterfaceBase.h" +#include + +#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(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