usbmgmt/usbmgr/usbman/server/SRC/cusbhost.cpp
changeset 0 c9bc50fca66e
child 29 59aa7d6e3e0f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usbmgmt/usbmgr/usbman/server/SRC/cusbhost.cpp	Tue Feb 02 02:02:59 2010 +0200
@@ -0,0 +1,248 @@
+/*
+* Copyright (c) 2008-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 "cusbhost.h"
+#include <usb/usblogger.h>
+
+
+#ifdef __FLOG_ACTIVE
+_LIT8(KLogComponent, "usbhost");
+#endif
+
+CUsbHost* CUsbHost::iInstance = 0;
+
+CUsbHost* CUsbHost::NewL()
+	{
+	if(iInstance == 0)
+		{
+		iInstance = new (ELeave) CUsbHost();		
+		CleanupStack::PushL(iInstance);		
+		iInstance->ConstructL();		
+		CleanupStack::Pop(iInstance);
+		}	
+	return iInstance;
+	}
+
+CUsbHost::~CUsbHost()
+	{
+	LOG_FUNC
+
+	Stop();
+
+	TInt i =0;
+	for(i=0;i<ENumMonitor;i++)
+		{
+		delete iUsbHostWatcher[i];
+		iUsbHostWatcher[i] = NULL;
+		}
+	iObservers.Close();
+	iInstance = 0;
+	}
+
+CUsbHost::CUsbHost()
+	{
+	LOG_FUNC
+	}
+
+void CUsbHost::ConstructL()
+	{
+	LOG_FUNC
+
+	iUsbHostWatcher[EHostEventMonitor] = 
+			CActiveUsbHostEventWatcher::NewL(iUsbHostStack,*this,iHostEventInfo);
+	iUsbHostWatcher[EHostMessageMonitor] = 
+			CActiveUsbHostMessageWatcher::NewL(iUsbHostStack,*this,iHostMessage);
+	}
+void CUsbHost::StartL()
+	{
+	LOG_FUNC
+
+	if(!iHasBeenStarted)
+		{
+
+		LEAVEIFERRORL(iUsbHostStack.Connect());
+
+		for(TInt i=0;i<ENumMonitor;i++)
+			{
+			iUsbHostWatcher[i]->Post();
+			}
+		iHasBeenStarted = ETrue;
+		}
+	}
+
+void CUsbHost::Stop()
+	{
+	LOG_FUNC
+
+	TInt i=0;
+	for(i=0;i<ENumMonitor;i++)
+		{
+		if (iUsbHostWatcher[i])
+			{
+			iUsbHostWatcher[i]->Cancel();
+			}
+		}
+
+	iUsbHostStack.Close();
+
+	iHasBeenStarted = EFalse;
+	}
+
+void CUsbHost::RegisterObserverL(MUsbOtgHostNotifyObserver& aObserver)
+	{
+	LOG_FUNC
+
+	iObservers.AppendL(&aObserver);
+	UpdateNumOfObservers();
+	}
+
+void CUsbHost::DeregisterObserver(MUsbOtgHostNotifyObserver& aObserver)
+	{
+	LOG_FUNC
+	TInt index = iObservers.Find(&aObserver);
+	if(index == KErrNotFound)
+		{
+		LOGTEXT(_L8("\t Cannot remove observer, not found"));
+		}
+	else
+		{
+		iObservers.Remove(index);
+		}
+
+	UpdateNumOfObservers();
+	}
+
+TInt CUsbHost::GetSupportedLanguages(TUint aDeviceId,RArray<TUint>& aLangIds)
+	{
+	LOG_FUNC
+	TInt err = KErrNone;
+	if ( iUsbHostStack.Handle() )
+		{
+		err = iUsbHostStack.GetSupportedLanguages(aDeviceId,aLangIds);
+		}
+	else
+		{
+		err = KErrBadHandle;
+		}
+	return err;
+	}
+
+TInt CUsbHost::GetManufacturerStringDescriptor(TUint aDeviceId,TUint aLangId,TName& aString)
+	{
+	LOG_FUNC
+	TInt err = KErrNone;
+	if ( iUsbHostStack.Handle() )
+		{
+		err = iUsbHostStack.GetManufacturerStringDescriptor(aDeviceId,aLangId,aString);
+		}
+	else
+		{
+		err = KErrBadHandle;
+		}
+	return err;
+	}
+
+TInt CUsbHost::GetProductStringDescriptor(TUint aDeviceId,TUint aLangId,TName& aString)
+	{
+	LOG_FUNC
+	TInt err = KErrNone;
+	if ( iUsbHostStack.Handle() )
+		{
+		err = iUsbHostStack.GetProductStringDescriptor(aDeviceId,aLangId,aString);
+		}
+	else
+		{
+		err = KErrBadHandle;
+		}
+	return err;
+	}
+
+TInt CUsbHost::GetOtgDescriptor(TUint aDeviceId, TOtgDescriptor& otgDescriptor)
+	{
+	LOG_FUNC
+	
+	TInt err(KErrNone);
+	
+	if (iUsbHostStack.Handle())
+		{
+		err = iUsbHostStack.GetOtgDescriptor(aDeviceId, otgDescriptor);
+		}
+	else
+		{
+		err = KErrBadHandle;
+		}
+	
+	return err;
+	}
+
+void CUsbHost::NotifyHostEvent(TUint aWatcherId)
+	{
+	LOG_FUNC
+	if(aWatcherId == EHostEventMonitor)
+		{
+
+		LOGTEXT2(_L8("\t Device id %d"),iHostEventInfo.iDeviceId);
+		LOGTEXT2(_L8("\t iEventType  %d"),iHostEventInfo.iEventType);
+		LOGTEXT2(_L8("\t TDriverLoadStatus %d"),iHostEventInfo.iDriverLoadStatus);
+		LOGTEXT2(_L8("\t VID %d"),iHostEventInfo.iVid);
+		LOGTEXT2(_L8("\t PID %d"),iHostEventInfo.iPid);
+
+		for(TUint i=0;i<iNumOfObservers;i++)
+			{
+			iObservers[i]->UsbHostEvent(iHostEventInfo);
+			}
+		}
+	else
+		{
+		LOGTEXT2(_L8("\t Host Message %d"),iHostMessage);
+
+		for(TUint i=0;i<iNumOfObservers;i++)
+			{
+			iObservers[i]->UsbOtgHostMessage(iHostMessage);
+			}
+		}
+	}
+
+void CUsbHost::UpdateNumOfObservers()
+	{
+	LOG_FUNC
+	iNumOfObservers = iObservers.Count();
+	}
+
+TInt CUsbHost::EnableDriverLoading()
+	{
+	LOG_FUNC
+	TInt err = KErrNone;
+	if ( iUsbHostStack.Handle() )
+		{
+		err = iUsbHostStack.EnableDriverLoading();
+		}
+	else
+		{
+		err = KErrBadHandle;
+		}
+	return err;
+	}
+
+void CUsbHost::DisableDriverLoading()
+	{
+	LOG_FUNC
+	if ( iUsbHostStack.Handle() )
+		{
+		iUsbHostStack.DisableDriverLoading();
+		}
+	}