usbengines/usbotgwatcher/src/cusbotgwatcher.cpp
changeset 46 0ffee699d6c7
parent 44 5323ec7dc425
child 21 ff9df6630274
--- a/usbengines/usbotgwatcher/src/cusbotgwatcher.cpp	Fri Apr 23 23:42:54 2010 +0300
+++ b/usbengines/usbotgwatcher/src/cusbotgwatcher.cpp	Fri Apr 23 23:57:55 2010 +0300
@@ -1,48 +1,42 @@
 /*
-* 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:  Implementation
+ * 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:  Implementation
+ *
+ */
 #include <usbpersonalityids.h>
 #include <usbuinotif.h>
 #include <UsbWatcherInternalPSKeys.h>
-
 #include "cusbotgwatcher.h"
 #include "cusbstate.h"
-
 #include "cusbstatehostainitiate.h"
 #include "cusbstatehostahost.h"
 #include "cusbstatehostaperipheral.h"
-#include "cusbstatehostaidle.h"
 #include "cusbstatehosthandle.h"
 #include "cusbstatehostdelayhandle.h"
+#include "cusbstatehostdelayattachedhandle.h"
+#include "cusbstatehostdelaynotattachedhandle.h"
+#include "cusbstatehosthandledropping.h"
 #include "cusbstatehostundefined.h"
-
 #include "cusbwarningnotifier.h"
-
 #ifndef STIF
 #include "cusbnotifmanager.h"
 #else
 #include "mockcusbnotifmanager.h"
 #endif
-
 #include "errors.h"
 #include "debug.h"
 #include "panic.h"
-
 _LIT_SECURITY_POLICY_PASS( KAlwaysPassPolicy );
 _LIT_SECURITY_POLICY_C1( KLocalServicesPolicy, ECapabilityLocalServices );
 
@@ -51,9 +45,10 @@
 // ---------------------------------------------------------------------------
 //
 CUsbOtgWatcher::CUsbOtgWatcher(RUsb& aUsbMan) :
-    iUsb(aUsbMan), iPersonalityId(KUsbPersonalityIdMTP)
+    iUsb(aUsbMan), iPersonalityId(KUsbPersonalityIdMTP), iUsbServiceRequest(
+            CUsbServiceControl::ERequestUndefined)
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::CUsbOtgWatcher" ) );
+    LOG_FUNC
     }
 
 // ---------------------------------------------------------------------------
@@ -62,32 +57,35 @@
 //
 void CUsbOtgWatcher::ConstructL()
     {
-
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::ConstructL" ) );
+    LOG_FUNC
 
 #ifdef _DEBUG
     SelfTestL();
 #endif
 
 #ifndef STIF
-    User::LeaveIfError(RProperty::Define( KPSUidUsbWatcher,
-            KUsbWatcherIsPeripheralConnected, RProperty::EInt, KAlwaysPassPolicy,
-                KLocalServicesPolicy ) );
+    User::LeaveIfError(RProperty::Define(KPSUidUsbWatcher,
+            KUsbWatcherIsPeripheralConnected, RProperty::EInt,
+            KAlwaysPassPolicy, KLocalServicesPolicy));
 
-    User::LeaveIfError( RProperty::Set( KPSUidUsbWatcher,
+    User::LeaveIfError(RProperty::Set(KPSUidUsbWatcher,
             KUsbWatcherIsPeripheralConnected,
-            KUsbWatcherPeripheralIsNotConnected ) );
+            KUsbWatcherPeripheralIsNotConnected));
 #endif
-    
-    iUsbServiceControl = CUsbServiceControl::NewL(this, iUsb);
+
+    iUsbServiceControl = CUsbServiceControl::NewL(*this, iUsb);
 
-    User::LeaveIfError(iStates.Append(CUsbStateHostUndefined::NewL(this)));
-    User::LeaveIfError(iStates.Append(CUsbStateHostAInitiate::NewL(this)));
-    User::LeaveIfError(iStates.Append(CUsbStateHostAHost::NewL(this)));
-    User::LeaveIfError(iStates.Append(CUsbStateHostAPeripheral::NewL(this)));
-    User::LeaveIfError(iStates.Append(CUsbStateHostAIdle::NewL(this)));
-    User::LeaveIfError(iStates.Append(CUsbStateHostHandle::NewL(this)));
-    User::LeaveIfError(iStates.Append(CUsbStateHostDelayHandle::NewL(this)));
+    User::LeaveIfError(iStates.Append(CUsbStateHostUndefined::NewL(*this)));
+    User::LeaveIfError(iStates.Append(CUsbStateHostAInitiate::NewL(*this)));
+    User::LeaveIfError(iStates.Append(CUsbStateHostAHost::NewL(*this)));
+    User::LeaveIfError(iStates.Append(CUsbStateHostAPeripheral::NewL(*this)));
+
+    User::LeaveIfError(iStates.Append(CUsbStateHostDelayAttachedHandle::NewL(
+            *this)));
+    User::LeaveIfError(iStates.Append(
+            CUsbStateHostDelayNotAttachedHandle::NewL(*this)));
+    User::LeaveIfError(iStates.Append(
+            CUsbStateHostHandleDropping::NewL(*this)));
 
     iIdPinObserver = CUsbIdPinObserver::NewL();
     iVBusObserver = CUsbVBusObserver::NewL();
@@ -97,12 +95,12 @@
             &iUsb);
     iMessageNotificationObserver = CUsbMessageNotificationObserver::NewL(
             &iUsb);
-    
+
     iHostState = iStates[EUsbStateHostUndefined];
-    
+
     // Notif manager must be created at least after VBus observer and iHostState initialization
     // to allow USb indicator subscribe to its notifications at construction and check their's current states
-    iNotifManager = CUsbNotifManager::NewL(this);
+    iNotifManager = CUsbNotifManager::NewL(*this);
 
     iVBusObserver->SubscribeL(*this);
     iOtgStateObserver->SubscribeL(*this);
@@ -136,7 +134,7 @@
 //
 EXPORT_C CUsbOtgWatcher* CUsbOtgWatcher::NewL(RUsb& aUsbMan)
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::NewL" ) );
+    LOG_FUNC
 
     CUsbOtgWatcher* self = new (ELeave) CUsbOtgWatcher(aUsbMan);
     CleanupStack::PushL(self);
@@ -151,41 +149,41 @@
 //
 CUsbOtgWatcher::~CUsbOtgWatcher()
     {
-		FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::~CUsbOtgWatcher" ) );
-        
+    LOG_FUNC
+
 #ifndef STIF
-    RProperty::Delete( KPSUidUsbWatcher, KUsbWatcherIsPeripheralConnected );
+    RProperty::Delete(KPSUidUsbWatcher, KUsbWatcherIsPeripheralConnected);
 #endif
-    
+
     // delete Notif manager before VBus observer, due to USB indicator observes VBus
     delete iNotifManager;
-    
-    if(iIdPinObserver)
+
+    if (iIdPinObserver)
         {
         TRAP_IGNORE(iIdPinObserver->UnsubscribeL(*this));
         }
-    
-    if(iVBusObserver)
+
+    if (iVBusObserver)
         {
         TRAP_IGNORE(iVBusObserver->UnsubscribeL(*this));
         }
-    if(iOtgStateObserver)
+    if (iOtgStateObserver)
         {
         TRAP_IGNORE(iOtgStateObserver->UnsubscribeL(*this));
         }
-    if(iBusActivityObserver)
+    if (iBusActivityObserver)
         {
         TRAP_IGNORE(iBusActivityObserver->UnsubscribeL(*this));
         }
-    if(iHostEventNotificationObserver)
+    if (iHostEventNotificationObserver)
         {
         TRAP_IGNORE(iHostEventNotificationObserver->UnsubscribeL(*this));
         }
-    if(iMessageNotificationObserver)
+    if (iMessageNotificationObserver)
         {
         TRAP_IGNORE(iMessageNotificationObserver->UnsubscribeL(*this));
         }
-    
+
     delete iIdPinObserver;
     delete iVBusObserver;
     delete iOtgStateObserver;
@@ -194,11 +192,11 @@
     delete iMessageNotificationObserver;
 
     iOtgStateObservers.Close();
-    
+
     // Destroy states
     iStates.ResetAndDestroy();
     iStates.Close();
-    
+
     delete iUsbServiceControl;
 
     iUsb.Close();
@@ -212,8 +210,9 @@
 void CUsbOtgWatcher::SetPersonalityL(TRequestStatus& /*aStatus*/,
         TInt aPersonality)
     {
+    LOG_FUNC
 
-        FTRACE( FPrint(_L( "[USBOTGWATCHER]\tCUsbOtgWatcher::SetPersonalityL aPersonality = %d" ), aPersonality));
+    LOG1( "aPersonality = %d" , aPersonality);
 
     // watcher keeps this value, no need to pass it to request object
     // state can read it from watcher when needed
@@ -233,7 +232,7 @@
 //
 void CUsbOtgWatcher::CancelSetPersonalityL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::CancelSetPersonalityL" ) );
+    LOG_FUNC
 
     iState->CancelSetPersonalityL();
     }
@@ -244,7 +243,7 @@
 //
 void CUsbOtgWatcher::SetPreviousPersonalityL(TRequestStatus& /*aStatus*/)
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::SetPreviousPersonalityL" ) );
+    LOG_FUNC
 
     // maybe more complex processing needed here
     iState->SetPreviousPersonalityL();
@@ -256,7 +255,7 @@
 //
 void CUsbOtgWatcher::SetPreviousPersonalityL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::SetPreviousPersonalityL" ) );
+    LOG_FUNC
 
     iState->SetPreviousPersonalityL();
     }
@@ -267,7 +266,7 @@
 //
 void CUsbOtgWatcher::CancelSetPreviousPersonalityL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::CancelSetPreviousPersonalityL" ) );
+    LOG_FUNC
 
     iState->CancelSetPreviousPersonalityL();
     }
@@ -278,7 +277,7 @@
 //
 void CUsbOtgWatcher::SetPreviousPreviousPersonalityOnDisconnectL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::SetPreviousPreviousPersonalityOnDisconnectL" ) );
+    LOG_FUNC
 
     }
 
@@ -289,19 +288,22 @@
 //
 void CUsbOtgWatcher::StartSessionL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::StartSessionL" ) );
+    LOG_FUNC
 
     if (!CanStartSessionL())
         {
-        HandleHostProblemL(EUsbWatcherErrorInConnection, EUsbStateHostHandle);
+        HandleHostProblemL(EUsbWatcherCanNotStartSession,
+                EUsbStateHostHandleDropping);
         return;
         }
 
+    iUsbServiceRequest = CUsbServiceControl::EStartUsbService;
     TInt err = iUsbServiceControl->StartL(iPersonalityId);
     if (KErrNone != err)
         {
-            FTRACE( FPrint(_L( "[USBOTGWATCHER]\tCUsbOtgWatcher::StartSessionL Can not start usb services. reason = %d" ), err));
-        HandleHostProblemL(EUsbWatcherCanNotStartUsbServices, EUsbStateHostHandle);
+        LOG1( "Can not start usb services. err = %d" , err);
+        HandleHostProblemL(EUsbWatcherCanNotStartUsbServices,
+                EUsbStateHostHandleDropping);
         return;
         }
 
@@ -314,9 +316,10 @@
 // 
 // ---------------------------------------------------------------------------
 //
-void CUsbOtgWatcher::HandleHostProblemL(TInt aWhatKindOf, TUsbStateIds aInState )
+void CUsbOtgWatcher::HandleHostProblemL(TInt aWhatKindOf,
+        TUsbStateIds aInState)
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::HandleProblemL" ) );
+    LOG_FUNC
     HostHandle(aInState)->SetWhat(aWhatKindOf);
     ChangeHostStateL(aInState);
     }
@@ -327,7 +330,7 @@
 //
 void CUsbOtgWatcher::IdPinOnL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::IdPinOnL" ) );
+    LOG_FUNC
     StartSessionL();
     }
 
@@ -337,26 +340,24 @@
 //
 void CUsbOtgWatcher::IdPinOffL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::IdPinOffL" ) );
+    LOG_FUNC
 
     ChangeHostStateL(EUsbStateHostUndefined);
 
     iNotifManager->CloseAllNotifiers();
 
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::IdPinOffL Before DisableFunctionDriverLoad " ) );
     Usb().DisableFunctionDriverLoading();
 
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::IdPinOffL Before TryStop" ) );
+    iUsbServiceRequest = CUsbServiceControl::EStopUsbService;
+    TInt err = iUsbServiceControl->StopL();
 
-    TInt err = iUsbServiceControl->StopL();
+    LOG1( "iUsbServiceControl->Stop() err = %d", err );
 
     if (KErrNone != err)
         {
-            FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::IdPinOnL ErrorStoppingUsbServices" ) );
+        LOG( "ErrorStoppingUsbServices" );
         Panic(ECanNotStopUsbServices);
         }
-
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::IdPinOffL iUsbServiceControl->Stop() OK" ) );
     }
 
 // ---------------------------------------------------------------------------
@@ -365,9 +366,8 @@
 //
 void CUsbOtgWatcher::IdPinErrorL(TInt aError)
     {
-    FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::IdPinErrorL" ) );
-    __ASSERT_DEBUG(iHostState != NULL, Panic(EBadHostState));  
-    HandleHostProblemL(EUsbWatcherIdPinError, EUsbStateHostHandle);
+    __ASSERT_DEBUG(iHostState != NULL, Panic(EBadHostState));
+    HandleHostProblemL(EUsbWatcherIdPinError, EUsbStateHostHandleDropping);
 
     }
 
@@ -378,7 +378,6 @@
 //
 void CUsbOtgWatcher::VBusDownL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::VBusDownL" ) );
     __ASSERT_DEBUG(iHostState != NULL, Panic(EBadHostState));
     iHostState->VBusDownL();
     }
@@ -389,7 +388,6 @@
 //
 void CUsbOtgWatcher::VBusUpL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::VBusUpL" ) );
     __ASSERT_DEBUG(iHostState != NULL, Panic(EBadHostState));
     iHostState->VBusUpL();
     }
@@ -400,9 +398,9 @@
 //
 void CUsbOtgWatcher::VBusObserverErrorL(TInt aError)
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::VBusObserverErrorL" ) );
     __ASSERT_DEBUG(iHostState != NULL, Panic(EBadHostState));
-    HandleHostProblemL(EUsbWatcherVBusObserverError, EUsbStateHostHandle);
+    HandleHostProblemL(EUsbWatcherVBusObserverError,
+            EUsbStateHostHandleDropping);
     }
 
 // From OTG state observer
@@ -412,7 +410,6 @@
 //
 void CUsbOtgWatcher::AIdleL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::AIdleL" ) );
     __ASSERT_DEBUG(iHostState != NULL, Panic(EBadHostState));
     iHostState->AIdleL();
     }
@@ -423,7 +420,6 @@
 //
 void CUsbOtgWatcher::AHostL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::AHostL" ) );
     __ASSERT_DEBUG(iHostState != NULL, Panic(EBadHostState));
     iHostState->AHostL();
     }
@@ -434,7 +430,6 @@
 //
 void CUsbOtgWatcher::APeripheralL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::APeripheralL" ) );
     __ASSERT_DEBUG(iHostState != NULL, Panic(EBadHostState));
     iHostState->APeripheralL();
     }
@@ -445,7 +440,6 @@
 //
 void CUsbOtgWatcher::AVBusErrorL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::AVBusErrorL" ) );
     __ASSERT_DEBUG(iHostState != NULL, Panic(EBadHostState));
     iHostState->AVBusErrorL();
     }
@@ -456,7 +450,6 @@
 //
 void CUsbOtgWatcher::BIdleL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::BIdleL" ) );
     __ASSERT_DEBUG(iHostState != NULL, Panic(EBadHostState));
     iHostState->BIdleL();
     }
@@ -467,7 +460,6 @@
 //
 void CUsbOtgWatcher::BPeripheralL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::BPeripheralL" ) );
     __ASSERT_DEBUG(iHostState != NULL, Panic(EBadHostState));
     iHostState->BPeripheralL();
     }
@@ -478,7 +470,6 @@
 //
 void CUsbOtgWatcher::BHostL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::BHostL" ) );
     __ASSERT_DEBUG(iHostState != NULL, Panic(EBadHostState));
     iHostState->BHostL();
     }
@@ -489,9 +480,8 @@
 //
 void CUsbOtgWatcher::OtgStateErrorL(TInt aError)
     {
-    FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::OtgStateErrorL" ) );
-__ASSERT_DEBUG(iHostState != NULL, Panic(EBadHostState));  
-HandleHostProblemL(EUsbWatcherOtgStateError, EUsbStateHostHandle);
+    __ASSERT_DEBUG(iHostState != NULL, Panic(EBadHostState));
+    HandleHostProblemL(EUsbWatcherOtgStateError, EUsbStateHostHandleDropping);
     }
 
 // From bus activity observer
@@ -501,7 +491,6 @@
 //
 void CUsbOtgWatcher::BusIdleL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::BusIdleL" ) );
     __ASSERT_DEBUG(iHostState != NULL, Panic(EBadHostState));
     iHostState->BusIdleL();
     }
@@ -512,7 +501,6 @@
 //
 void CUsbOtgWatcher::BusActiveL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::BusActiveL" ) );
     __ASSERT_DEBUG(iHostState != NULL, Panic(EBadHostState));
     iHostState->BusActiveL();
     }
@@ -523,7 +511,6 @@
 //
 void CUsbOtgWatcher::BusActivityErrorL(TInt aError)
     {
-    FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::BusActivityErrorL" ) );
     __ASSERT_DEBUG(iHostState != NULL, Panic(EBadHostState));
     // no action, continue
     }
@@ -535,7 +522,6 @@
 //
 void CUsbOtgWatcher::DeviceAttachedL(TDeviceEventInformation aTdi)
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::DeviceAttachedL" ) );
     __ASSERT_DEBUG(iHostState != NULL, Panic(EBadHostState));
     iHostState->DeviceAttachedL(aTdi);
     }
@@ -546,7 +532,6 @@
 //
 void CUsbOtgWatcher::DeviceDetachedL(TDeviceEventInformation aTdi)
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::DeviceDetachedL" ) );
     __ASSERT_DEBUG(iHostState != NULL, Panic(EBadHostState));
     iHostState->DeviceDetachedL(aTdi);
     }
@@ -557,7 +542,6 @@
 //
 void CUsbOtgWatcher::DriverLoadSuccessL(TDeviceEventInformation aTdi)
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::DriverLoadSuccessL" ) );
     __ASSERT_DEBUG(iHostState != NULL, Panic(EBadHostState));
     iHostState->DriverLoadSuccessL(aTdi);
     }
@@ -568,7 +552,6 @@
 //
 void CUsbOtgWatcher::DriverLoadPartialSuccessL(TDeviceEventInformation aTdi)
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::DriverLoadPartialSuccessL" ) );
     __ASSERT_DEBUG(iHostState != NULL, Panic(EBadHostState));
     iHostState->DriverLoadPartialSuccessL(aTdi);
     }
@@ -579,7 +562,6 @@
 //
 void CUsbOtgWatcher::DriverLoadFailureL(TDeviceEventInformation aTdi)
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::DriverLoadFailureL" ) );
     __ASSERT_DEBUG(iHostState != NULL, Panic(EBadHostState));
     iHostState->DriverLoadFailureL(aTdi);
     }
@@ -590,9 +572,9 @@
 //
 void CUsbOtgWatcher::HostEventNotificationErrorL(TInt aError)
     {
-    FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::HostEventNotificationErrorL" ) );
-__ASSERT_DEBUG(iHostState != NULL, Panic(EBadHostState));  
-HandleHostProblemL(EUsbWatcherHostEventNotificationError, EUsbStateHostHandle);
+    __ASSERT_DEBUG(iHostState != NULL, Panic(EBadHostState));
+    HandleHostProblemL(EUsbWatcherHostEventNotificationError,
+            EUsbStateHostHandleDropping);
     }
 
 // From message notification observer
@@ -602,7 +584,6 @@
 //
 void CUsbOtgWatcher::MessageNotificationReceivedL(TInt aMessage)
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::MessageNotificationReceivedL" ) );
     __ASSERT_DEBUG(iHostState != NULL, Panic(EBadHostState));
     iHostState->MessageNotificationReceivedL(aMessage);
     }
@@ -613,7 +594,6 @@
 //
 void CUsbOtgWatcher::BadHubPositionL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::BadHubPositionL" ) );
     __ASSERT_DEBUG(iHostState != NULL, Panic(EBadHostState));
     iHostState->BadHubPositionL();
     }
@@ -624,7 +604,6 @@
 //
 void CUsbOtgWatcher::VBusErrorL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::VBusErrorL" ) );
     __ASSERT_DEBUG(iHostState != NULL, Panic(EBadHostState));
     iHostState->VBusErrorL();
     }
@@ -635,7 +614,6 @@
 //
 void CUsbOtgWatcher::SrpReceivedL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::SrpReceivedL" ) );
     __ASSERT_DEBUG(iHostState != NULL, Panic(EBadHostState));
     iHostState->SrpReceivedL();
     }
@@ -646,7 +624,6 @@
 //
 void CUsbOtgWatcher::SessionRequestedL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::SessionRequestedL" ) );
     __ASSERT_DEBUG(iHostState != NULL, Panic(EBadHostState));
     iHostState->SessionRequestedL();
     }
@@ -657,9 +634,9 @@
 //
 void CUsbOtgWatcher::MessageNotificationErrorL(TInt aError)
     {
-    FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::MessageNotificationErrorL" ) );
-    __ASSERT_DEBUG(iHostState != NULL, Panic(EBadHostState));    
-    HandleHostProblemL(EUsbWatcherMessageNotificationError, EUsbStateHostHandle);
+    __ASSERT_DEBUG(iHostState != NULL, Panic(EBadHostState));
+    HandleHostProblemL(EUsbWatcherMessageNotificationError,
+            EUsbStateHostHandleDropping);
     }
 
 // ---------------------------------------------------------------------------
@@ -760,9 +737,8 @@
 //
 CUsbStateHostHandle* CUsbOtgWatcher::HostHandle(TUsbStateIds aInState) const
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::HostHandle" ) );
     __ASSERT_DEBUG(iStates[aInState] != NULL, Panic(EBadState));
-    
+
     return (CUsbStateHostHandle*) iStates[aInState];
     }
 
@@ -772,20 +748,13 @@
 //
 void CUsbOtgWatcher::ChangeStateL(TUsbStateIds aNewStateId)
     {
+    LOG_FUNC
 
-        FTRACE( FPrint(_L( "[USBOTGWATCHER]\tCUsbOtgWatcher::ChangeStateL aNewState = %d" ), aNewStateId));
+    LOG1( "aNewState = %d" , aNewStateId);
 
     if (NULL != iState)
         {
-        if (aNewStateId == iState->Id())
-            {
-            return; // we already in the target state
-            }
-        else
-            {
-
-            iState->JustBeforeLeavingThisStateL();
-            }
+        iState->JustBeforeLeavingThisStateL();
         }
 
     // sets new state	
@@ -809,20 +778,13 @@
 //
 void CUsbOtgWatcher::ChangeHostStateL(TUsbStateIds aNewStateId)
     {
+    LOG_FUNC
 
-        FTRACE( FPrint(_L( "[USBOTGWATCHER]\tCUsbOtgWatcher::ChangeHostStateL aNewState = %d" ), aNewStateId));
+    LOG1( "aNewState = %d", aNewStateId);
 
     if (NULL != iHostState)
         {
-        if (aNewStateId == iHostState->Id())
-            {
-            return; // we already in the target state
-            }
-        else
-            {
-
-            iHostState->JustBeforeLeavingThisStateL();
-            }
+        iHostState->JustBeforeLeavingThisStateL();
         }
 
     // set new state	
@@ -837,7 +799,7 @@
     __ASSERT_DEBUG(iHostState != NULL, Panic(EBadState));
 
     iHostState->JustAdvancedToThisStateL(); // checks if there are conditions for advancing to another state(s)
-    
+
     // notify state change to observers
     for (TInt i(0); i < iOtgStateObservers.Count(); ++i)
         {
@@ -861,18 +823,19 @@
 //
 void CUsbOtgWatcher::PrintStateToLog()
     {
-        FTRACE( FPrint(_L( "[USBOTGWATCHER]\tCUsbOtgWatcher::PrintStateToLog IdPin       = %d" ), iIdPinObserver->IdPin()));
-        FTRACE( FPrint(_L( "[USBOTGWATCHER]\tCUsbOtgWatcher::PrintStateToLog VBus        = %d" ), iVBusObserver->VBus()));
-        FTRACE( FPrint(_L( "[USBOTGWATCHER]\tCUsbOtgWatcher::PrintStateToLog OtgState    = %d" ), iOtgStateObserver->OtgState()));
-        FTRACE( FPrint(_L( "[USBOTGWATCHER]\tCUsbOtgWatcher::PrintStateToLog BusActivity = %d" ), iBusActivityObserver->BusActivity()));
-        
-        TInt isPeripheralConnected(KUsbWatcherPeripheralIsNotConnected);
-        
-        RProperty::Get( KPSUidUsbWatcher, KUsbWatcherIsPeripheralConnected,
-                isPeripheralConnected  );
-        
-        FTRACE( FPrint(_L( "[USBOTGWATCHER]\tCUsbOtgWatcher::PrintStateToLog IsPeripheralConnected = %d" ), isPeripheralConnected));
-        
+    LOG1( "Current state id  = %d" , iHostState->Id());
+    LOG1( "IdPin             = %d" , iIdPinObserver->IdPin());
+    LOG1( "VBus              = %d" , iVBusObserver->VBus());
+    LOG1( "OtgState          = %d" , iOtgStateObserver->OtgState());
+    LOG1( "BusActivity       = %d" , iBusActivityObserver->BusActivity());
+
+    TInt isPeripheralConnected(KUsbWatcherPeripheralIsNotConnected);
+
+    RProperty::Get(KPSUidUsbWatcher, KUsbWatcherIsPeripheralConnected,
+            isPeripheralConnected);
+
+    LOG1( "IsPeripheralConnected = %d" , isPeripheralConnected);
+
     }
 
 // ---------------------------------------------------------------------------
@@ -890,38 +853,46 @@
 //
 void CUsbOtgWatcher::UsbServiceControlReqCompletedL(TInt aError)
     {
-    FTRACE( FPrint(_L( "[USBOTGWATCHER]\tCUsbOtgWatcher::UsbServiceControlReqCompleted Error returned by UsbServiceControl = %d" ), aError));    
-    
-    switch(aError)
-    {
-    case KErrInUse: 
-    // usb services already started (this might happen if more than one idpin on event come)
-        {
-        return;
-        }
-        
-    case KErrNone:
+    LOG_FUNC
+
+    LOG1( "aError = %d" , aError);
+
+    switch (aError)
         {
-        break; // do normal routine
+        case KErrInUse:
+            // usb services already started (this might happen if more than one idpin on event come)
+            {
+            return;
+            }
+
+        case KErrNone:
+            {
+            break; // do normal routine
+            }
+
+        default: // handle the issue
+            {
+            if (iUsbServiceRequest == CUsbServiceControl::EStartUsbService) // Handle only start issues
+                {
+                HandleHostProblemL(EUsbWatcherCanNotStartUsbServices,
+                        EUsbStateHostHandleDropping);
+                }
+
+            iUsbServiceRequest = CUsbServiceControl::ERequestUndefined;
+            return;
+            }
         }
-        
-    default: // handle the issue
-        {
-        if(IsDeviceA()) // if there is no cable, give up
-            {
-            HandleHostProblemL(EUsbWatcherCanNotStartUsbServices, EUsbStateHostHandle);
-            }
-        return;
-        }
-    }
+
+    iUsbServiceRequest = CUsbServiceControl::ERequestUndefined;
 
     TUsbServiceState serviceState;
     TInt err = iUsb.GetServiceState(serviceState);
 
     if (KErrNone != err)
         {
-            FTRACE( FPrint(_L( "[USBOTGWATCHER]\tCUsbOtgWatcher::UsbServiceControlReqCompleted Error when requesting GetServiceState = %d" ), err));
-        HandleHostProblemL(EUsbWatcherCanNotStartUsbServices, EUsbStateHostHandle);
+        LOG1( "Error when requesting GetServiceState = %d" , err);
+        HandleHostProblemL(EUsbWatcherCanNotStartUsbServices,
+                EUsbStateHostHandleDropping);
         return;
         }
 
@@ -929,38 +900,36 @@
         {
         case EUsbServiceIdle: // just stopped usb service
             {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::UsbServiceControlReqCompletedL UsbServiceState == EUsbServiceIdle" ) );
+            LOG("UsbServiceState == EUsbServiceIdle" );
             // do nothing
             break;
             }
 
         case EUsbServiceStarted: // just started usb service
             {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::UsbServiceControlReqCompletedL UsbServiceState == EUsbServiceStarted" ) );
+            LOG( "UsbServiceState == EUsbServiceStarted" );
 
-            iHostState = iStates[EUsbStateHostAInitiate];
-
-            iHostState->JustAdvancedToThisStateL(); // do any initial activity, once advanced to the state 
+            ChangeHostStateL(EUsbStateHostAInitiate);
 
             break;
             }
         case EUsbServiceStarting:
             {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::UsbServiceControlReqCompletedL UsbServiceState == EUsbServiceStarting" ) );
+            LOG("UsbServiceState == EUsbServiceStarting" );
             // should not receive that, due to call back is called when service stopped or started
             // therefore scream
             // no break statement here
             }
         case EUsbServiceStopping:
             {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::UsbServiceControlReqCompletedL UsbServiceState == EUsbServiceStopping" ) );
+            LOG("UsbServiceState == EUsbServiceStopping" );
             // should not receive that, due to call back is called when service stopped or started
             // therefore scream
             // no break statement here
             }
         case EUsbServiceFatalError:
             {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::UsbServiceControlReqCompletedL UsbServiceState == EUsbServiceFatalError" ) );
+            LOG( "UsbServiceState == EUsbServiceFatalError" );
             Panic(EUnexpectedUsbServiceState);
             break;
             }
@@ -970,7 +939,6 @@
             Panic(EUnknownUsbServiceState);
             }
         }
-
     }
 
 // ---------------------------------------------------------------------------
@@ -980,21 +948,19 @@
 TInt CUsbOtgWatcher::SelfTestL()
     {
 #ifdef _DEBUG
-
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::SelfTestL Creating observers." ) );
+    LOG_FUNC
 
     // create all the observers
     iIdPinObserver = CUsbIdPinObserver::NewL();
     iVBusObserver = CUsbVBusObserver::NewL();
     iOtgStateObserver = CUsbOtgStateObserver::NewL();
-    iBusActivityObserver =
-            CUsbBusActivityObserver::NewL();
-    iHostEventNotificationObserver =
-            CUsbHostEventNotificationObserver::NewL(&iUsb);
-    iMessageNotificationObserver =
-            CUsbMessageNotificationObserver::NewL(&iUsb);
+    iBusActivityObserver = CUsbBusActivityObserver::NewL();
+    iHostEventNotificationObserver = CUsbHostEventNotificationObserver::NewL(
+            &iUsb);
+    iMessageNotificationObserver = CUsbMessageNotificationObserver::NewL(
+            &iUsb);
 
-         FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::SelfTestL Observers getters." ) );
+    LOG( "Observers getters" );
 
     if (iIdPinObserver != IdPinObserver())
         {
@@ -1021,11 +987,11 @@
         User::Leave(KErrGeneral);
         }
 
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::SelfTestL Observers destructors." ) );
+    LOG( "Observers destructors" );
 
     // idpinobserver is deleted later        
     // Vbus observer is deleted later
-    
+
     delete iOtgStateObserver;
     iOtgStateObserver = 0;
     delete iBusActivityObserver;
@@ -1035,69 +1001,72 @@
     delete iMessageNotificationObserver;
     iMessageNotificationObserver = 0;
 
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::SelfTestL Creating states." ) );
+    LOG("Creating states");
 
-    User::LeaveIfError(iStates.Append(CUsbStateHostUndefined::NewL(this)));    
-    User::LeaveIfError(iStates.Append(CUsbStateHostAInitiate::NewL(this)));
-    User::LeaveIfError(iStates.Append(CUsbStateHostAHost::NewL(this)));
-    User::LeaveIfError(iStates.Append(CUsbStateHostAPeripheral::NewL(this)));
-    User::LeaveIfError(iStates.Append(CUsbStateHostAIdle::NewL(this)));
-    User::LeaveIfError(iStates.Append(CUsbStateHostHandle::NewL(this)));
-    User::LeaveIfError(iStates.Append(CUsbStateHostDelayHandle::NewL(this)));
+    User::LeaveIfError(iStates.Append(CUsbStateHostUndefined::NewL(*this)));
+    User::LeaveIfError(iStates.Append(CUsbStateHostAInitiate::NewL(*this)));
+    User::LeaveIfError(iStates.Append(CUsbStateHostAHost::NewL(*this)));
+    User::LeaveIfError(iStates.Append(CUsbStateHostAPeripheral::NewL(*this)));
+    User::LeaveIfError(iStates.Append(CUsbStateHostDelayAttachedHandle::NewL(
+            *this)));
+    User::LeaveIfError(iStates.Append(
+            CUsbStateHostDelayNotAttachedHandle::NewL(*this)));
+    User::LeaveIfError(iStates.Append(
+            CUsbStateHostHandleDropping::NewL(*this)));
 
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::SelfTestL Check State()" ) );
+    LOG("Check State()" );
 
     if (iStates[EUsbStateHostAInitiate] != State(EUsbStateHostAInitiate))
         {
         User::Leave(KErrGeneral);
         }
-        
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::SelfTestL Check CurrentHostState()" ) );    
-        
+
+    LOG("Check CurrentHostState()" );
+
     iHostState = iStates[EUsbStateHostAInitiate];
-		
-		if (iStates[EUsbStateHostAInitiate] != CurrentHostState())
+
+    if (iStates[EUsbStateHostAInitiate] != CurrentHostState())
         {
         User::Leave(KErrGeneral);
         }
-		
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::SelfTestL NotifManager and WarningNotifier." ) );
 
-    CUsbNotifManager* usbnotifmanager = CUsbNotifManager::NewL(this);
+    LOG("NotifManager and WarningNotifier." );
+
+    CUsbNotifManager* usbnotifmanager = CUsbNotifManager::NewL(*this);
     RNotifier rnotifier;
     User::LeaveIfError(rnotifier.Connect());
     CUsbWarningNotifier* usbnotifier = CUsbWarningNotifier::NewL(rnotifier,
-            usbnotifmanager, EUsbOtgPartiallySupportedDevice);
+            *usbnotifmanager, EUsbOtgPartiallySupportedDevice);
     usbnotifier->IsFeedbackNeeded();
 
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::SelfTestL NotifManager and WarningNotifier destruction." ) );
+    LOG( "NotifManager and WarningNotifier destruction." );
 
     delete usbnotifier;
     rnotifier.Close();
-    delete usbnotifmanager; 
-    
+    delete usbnotifmanager;
+
     // VBus observer is deleted here, due to it is used by usbnotifmanager.usbindicatornotifier
     delete iVBusObserver;
     iVBusObserver = 0;
-    
+
     // id pin observer is deleted here due to it is used by usbnotifmanager.usbindicatornotifier
     delete iIdPinObserver;
     iIdPinObserver = 0;
-        
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::SelfTestL Destructing states." ) );
-        
+
+    LOG("Destructing states");
+
     iStates.ResetAndDestroy();
 
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::SelfTestL Check UsbServiceControl" ) );
+    LOG( "Check UsbServiceControl" );
 
-    CUsbServiceControl* usbServiceControl = CUsbServiceControl::NewL(this,
+    CUsbServiceControl* usbServiceControl = CUsbServiceControl::NewL(*this,
             iUsb);
     usbServiceControl->RunError(KErrNone);
     delete usbServiceControl;
 
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::SelfTestL All completed OK." ) );
+    LOG("All completed OK" );
 #endif
-        return KErrNone;
+    return KErrNone;
 
     }
 
@@ -1107,16 +1076,16 @@
 //   
 void CUsbOtgWatcher::SubscribeL(MUsbOtgWatcherStateObserver& aObserver)
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::SubscribeL" ) );
+    LOG_FUNC
 
-        // check if the same observer already exist in a list
-        if(KErrNotFound != iOtgStateObservers.Find(&aObserver))
-            {
-            FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::SubscribeL Observer already exists." ) );
-            Panic(EObserverAlreadyExists);
-            return;
-            }
-        iOtgStateObservers.AppendL(&aObserver);
+    // check if the same observer already exist in a list
+    if (KErrNotFound != iOtgStateObservers.Find(&aObserver))
+        {
+        LOG( "Observer already exists" );
+        Panic(EObserverAlreadyExists);
+        return;
+        }
+    iOtgStateObservers.AppendL(&aObserver);
 
     }
 
@@ -1126,14 +1095,15 @@
 //
 void CUsbOtgWatcher::UnsubscribeL(MUsbOtgWatcherStateObserver& aObserver)
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::UnsubscribeL" ) );
-        TInt i(iOtgStateObservers.Find(&aObserver));
-        if(KErrNotFound == i)
-            {
-            FLOG( _L( "[USBOTGWATCHER]\tCUsbIdPinObserver::UnsubscribeL Observer not found." ) );
-            Panic(ECanNotFindUsbOtgWatcherStateObserver);
-            return;
-            }
-        
-        iOtgStateObservers.Remove(i);
+    LOG_FUNC
+
+    TInt i(iOtgStateObservers.Find(&aObserver));
+    if (KErrNotFound == i)
+        {
+        LOG( "Observer not found" );
+        Panic(ECanNotFindUsbOtgWatcherStateObserver);
+        return;
+        }
+
+    iOtgStateObservers.Remove(i);
     }