usbengines/usbotgwatcher/src/cusbstatehosthandle.cpp
branchRCL_3
changeset 64 8ecef05bbada
parent 3 47c263f7e521
child 20 a15c582fbf97
--- a/usbengines/usbotgwatcher/src/cusbstatehosthandle.cpp	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbengines/usbotgwatcher/src/cusbstatehosthandle.cpp	Fri Feb 19 23:50:32 2010 +0200
@@ -44,7 +44,7 @@
 //
 CUsbStateHostHandle* CUsbStateHostHandle::NewL(CUsbOtgWatcher* aWatcher)
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostAHost::NewL" ) );
+        FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::NewL" ) );
 
     CUsbStateHostHandle* self = new (ELeave) CUsbStateHostHandle(aWatcher);
     CleanupStack::PushL(self);
@@ -60,10 +60,6 @@
 void CUsbStateHostHandle::ConstructL()
     {
         FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::ConstructL" ) );
-
-    iTooMuchPowerTimer = CUsbTimer::NewL(this, ETooMuchPowerRequiredTimer);
-    iDriversNotFoundTimer = CUsbTimer::NewL(this, EDriversNotFoundTimer);
-
     }
 
 // ---------------------------------------------------------------------------
@@ -74,8 +70,6 @@
     {
         FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::~CUsbStateHostHandle" ) );
 
-    delete iTooMuchPowerTimer;
-    delete iDriversNotFoundTimer;
     }
 
 // ---------------------------------------------------------------------------
@@ -107,9 +101,6 @@
 //
 void CUsbStateHostHandle::JustBeforeLeavingThisStateL()
     {
-    iTooMuchPowerTimer->Cancel();
-    iDriversNotFoundTimer->Cancel();
-    
     iWatcher->NotifManager()->CloseAllNotifiers();
     }
 // ---------------------------------------------------------------------------
@@ -220,41 +211,24 @@
 void CUsbStateHostHandle::DoHandleL()
     {
         FTRACE( FPrint(_L( "[USBOTGWATCHER]\tCUsbStateHostHandle::DoHandleL iWhat = %d" ), iWhat));
-
-    if (iTooMuchPowerTimer)
-        iTooMuchPowerTimer->Cancel();
-
+        
+    // Drop VBus first    
+    // Ignore any errors when calling BusDrop(). Those indicate that VBus already dropped 
+    iWatcher->Usb().BusDrop();
+    
     switch (iWhat)
         {
-        case EUsbWatcherErrDriversNotFound:
-            {
-            FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::DoHandleL DriversNotFound" ) );
                 
-            iDriversNotFoundTimer->After(KTimeDriversNotFound);
-            break;
-                
-            }
         case EUsbWatcherHubsNotSupported:
             {
                 FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::DoHandleL EUsbWatcherHubsNotSupported" ) );
-            // Ignore any errors when calling BusDrop(). Those indicate that VBus already dropped 
-            iWatcher->Usb().BusDrop();
             iWatcher->NotifManager()->ShowNotifierL(KUsbUiNotifOtgError,
                     EUsbOtgHubUnsupported, this);
             break;
             }
-        case EUsbWatcherErrDeviceRequiresTooMuchPowerOnEnumeration:
-            {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::DoHandleL EUsbWatcherErrDeviceRequiresTooMuchPowerOnEnumeration" ) );
-
-            iTooMuchPowerTimer->After(KTimeTooMuchPowerRequired);
-            break;
-            }
         case EUsbWatcherErrDeviceRequiresTooMuchPower:
             {
                 FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::DoHandleL EUsbWatcherErrDeviceRequiresTooMuchPower" ) );
-            // Ignore any errors when calling BusDrop(). Those indicate that VBus already dropped 
-            iWatcher->Usb().BusDrop();
             iWatcher->NotifManager()->ShowNotifierL(KUsbUiNotifOtgError,
                     EUsbOtgTooMuchPower, this);
             break;
@@ -262,8 +236,6 @@
         case EUsbWatcherErrUnsupportedDevice:
             {
                 FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::DoHandleL EUsbWatcherErrUnsupportedDevice" ) );
-            // Ignore any errors when calling BusDrop(). Those indicate that VBus already dropped 
-            iWatcher->Usb().BusDrop();
             iWatcher->NotifManager()->ShowNotifierL(KUsbUiNotifOtgError,
                     EUsbOtgUnsupportedDevice, this);
             break;
@@ -271,18 +243,14 @@
         case EUsbWatcherConnectedToOTG:
             {
                 FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::DoHandleL EUsbWatcherConnectedToOTG" ) );
-                
-            // Ignore any errors when calling BusDrop(). Those indicate that VBus already dropped
-            iWatcher->Usb().BusDrop();
             iWatcher->NotifManager()->ShowNotifierL(KUsbUiNotifOtgError,
                     EUsbOtgUnsupportedDevice, this);
+                   
             break;
             }
         case EUsbWatcherErrDandlingCable:
             {
                 FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::DoHandleL EUsbWatcherErrDandlingCable" ) );
-            // Ignore any errors when calling BusDrop(). Those indicate that VBus already dropped 
-            iWatcher->Usb().BusDrop();
             iWatcher->NotifManager()->ShowNotifierL(KUsbUiNotifOtgError,
                     EUsbOtgErrorAttachTimedOut, this);
             break;
@@ -290,8 +258,6 @@
         case EUsbWatcherNoActivity:
             {
                 FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::DoHandleL EUsbWatcherNoActivity" ) );
-            // Ignore any errors when calling BusDrop(). Those indicate that VBus already dropped 
-            iWatcher->Usb().BusDrop();
             iWatcher->NotifManager()->ShowNotifierL(KUsbUiNotifOtgError,
                     EUsbOtgUnsupportedDevice, this);
 
@@ -300,8 +266,6 @@
         case EUsbWatcherErrorInConnection:
             {
                 FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::DoHandleL EUsbWatcherErrorInConnection" ) );
-            // Ignore any errors when calling BusDrop(). Those indicate that VBus already dropped 
-            iWatcher->Usb().BusDrop();
             iWatcher->NotifManager()->ShowNotifierL(KUsbUiNotifOtgError,
                     EUsbOtgErrorInConnection, this);
             break;
@@ -321,15 +285,13 @@
         case EUsbWatcherMessageNotificationError:
             {
             FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::DoHandleL Error from observer" ) );
-        // Ignore any errors when calling BusDrop(). Those indicate that VBus already dropped 
-        iWatcher->Usb().BusDrop();
         iWatcher->NotifManager()->ShowNotifierL(KUsbUiNotifOtgError,
                 EUsbOtgErrorInConnection, this);
             break;
             }
         default:
             {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::WaitNotifierCompletedL Unexpected situation to be handled" ) );
+                FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::DoHandleL Unexpected situation to be handled" ) );
             Panic(EUnexpectedSituationToHandle);
             break;
             }
@@ -337,16 +299,44 @@
     }
 
 /////////////////////////////////////////////////////////////////////////////////////
-// just ignore all the events		
 // From VBus observer
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CUsbStateHostHandle::VBusUpL()
+    {
+        FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::VBusUpL" ) );
+        // as result of BusRespondSrp() VBus might rise up.
+        // role swap is not supported => drop vbus
+        // when role swap is supported, leave this function empty
+        
+        iWatcher->Usb().BusDrop();
+    }
+
+// ---------------------------------------------------------------------------
+// this is expected in the state, for example after calling BusDrop
+// ---------------------------------------------------------------------------
+//
 void CUsbStateHostHandle::VBusDownL()
     {
         FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::VBusDownL" ) );
     }
 
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CUsbStateHostHandle::VBusErrorL()
+    {
+    FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::VBusErrorL" ) );
+
+    iWatcher->Usb().BusClearError();
+    }
+
 // From OTG state observer
 // ---------------------------------------------------------------------------
-// 
+// this AIdle means that VBus gets down. From usbwatcher POV no need to change state here
 // ---------------------------------------------------------------------------
 //
 void CUsbStateHostHandle::AIdleL()
@@ -356,7 +346,8 @@
     }
 
 // ---------------------------------------------------------------------------
-// 
+// this means VBus gets up (for example as result RespondSrp()). Do not change state to Host, due to for usbwatcher it would mean 
+// that device attached and driverls found.
 // ---------------------------------------------------------------------------
 //
 void CUsbStateHostHandle::AHostL()
@@ -371,47 +362,20 @@
 void CUsbStateHostHandle::APeripheralL()
     {
         FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::APeripheralL" ) );
+        
+        ChangeHostStateL(EUsbStateHostAPeripheral);
 
     }
 
 // ---------------------------------------------------------------------------
+// ignore any problems on VBus, just clear it
 // 
 // ---------------------------------------------------------------------------
 //
 void CUsbStateHostHandle::AVBusErrorL()
     {
         FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::AVBusErrorL" ) );
-
-    }
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-void CUsbStateHostHandle::BIdleL()
-    {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::BIdleL" ) );
-
-    }
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-void CUsbStateHostHandle::BPeripheralL()
-    {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::BPeripheralL" ) );
-
-    }
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-void CUsbStateHostHandle::BHostL()
-    {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::BHostL" ) );
-
+        iWatcher->Usb().BusClearError();
     }
 
 // From bus activity observer
@@ -422,7 +386,6 @@
 void CUsbStateHostHandle::BusIdleL()
     {
         FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::BusIdleL" ) );
-
     }
 
 // ---------------------------------------------------------------------------
@@ -432,7 +395,6 @@
 void CUsbStateHostHandle::BusActiveL()
     {
         FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::BusActiveL" ) );
-
     }
 
 // From Host Event notification observer
@@ -445,14 +407,7 @@
     {
         FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::DeviceAttachedL" ) );
 
-    if (iTooMuchPowerTimer->IsActive() || iDriversNotFoundTimer->IsActive())
-        {
-        ChangeHostStateL(EUsbStateHostAInitiate);
-        iWatcher->DeviceAttachedL(aDevEventInfo);
-        return;
-        }
-     FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::DeviceAttachedL Unexpected situation" ) );
-    }
+    } 
 
 // ---------------------------------------------------------------------------
 // 
@@ -462,7 +417,7 @@
     {
         FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::DeviceDetachedL" ) );
 
-    }
+    } 
 
 // ---------------------------------------------------------------------------
 // 
@@ -473,7 +428,7 @@
         FLOG( _L( "[USBOTGWATCHER]\tCUsbState::DriverLoadSuccessL" ) );
     
     }
-
+    
 // ---------------------------------------------------------------------------
 // 
 // ---------------------------------------------------------------------------
@@ -498,37 +453,6 @@
 // 
 // ---------------------------------------------------------------------------
 //
-void CUsbStateHostHandle::BadHubPositionL()
-    {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::BadHubPositionL" ) );
-
-    if (iTooMuchPowerTimer->IsActive())
-        {
-        ChangeHostStateL(EUsbStateHostAInitiate);
-        iWatcher->BadHubPositionL();
-        }
-    else
-        {
-            FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::DeviceAttachedL Unexpected situation" ) );
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-void CUsbStateHostHandle::VBusErrorL()
-    {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::VBusErrorL" ) );
-
-    iWatcher->Usb().BusClearError();
-    FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::VBusErrorL Unexpected situation" ) );
-    }
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
 void CUsbStateHostHandle::MessageNotificationReceivedL(TInt)
     {
         FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::MessageNotificationReceivedL" ) );
@@ -543,20 +467,16 @@
     {
     FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::SrpReceivedL" ) );
         
-    if (CUsbVBusObserver::EVBusUp != iWatcher->VBusObserver()->VBus())
-        {
-        TInt err = iWatcher->Usb().BusRespondSrp();
-        if (KErrNone != err)
+    TInt err = iWatcher->Usb().BusRespondSrp();
+    FTRACE( FPrint(_L( "[USBOTGWATCHER]\tCUsbStateHostHandle::SrpReceivedL BusRespondSrp()=%d" ), err));
+    
+    if (KErrNone != err)
             {
             FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::SrpReceivedL BusRespondSrp error" ) );
-            iWatcher->HandleHostProblemL(EUsbWatcherErrorInConnection);
+            iWhat = EUsbWatcherErrorInConnection;
+            DoHandleL();
+            return;
             }
-        else
-            {
-            ChangeHostStateL(EUsbStateHostAInitiate);
-            }
-        }
-
     }
 
 // ---------------------------------------------------------------------------
@@ -568,38 +488,3 @@
         FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::SessionRequestedL" ) );
 
     }
-
-// From TimerObserver
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-void CUsbStateHostHandle::TimerElapsedL(TUsbTimerId aTimerId)
-    {
-    switch (aTimerId)
-        {
-        case ETooMuchPowerRequiredTimer:
-            {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::TimerElapsedL - ETooMuchPowerRequiredTimer" ) );
-            iWatcher->Usb().BusDrop();
-            iWatcher->NotifManager()->ShowNotifierL(KUsbUiNotifOtgError,
-                    EUsbOtgTooMuchPowerRequired, this);
-            break;
-            }
-        case EDriversNotFoundTimer:
-            {
-            FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::TimerElapsedL - EDriversNotFoundTimer" ) );
-            // Ignore any errors when calling BusDrop(). Those indicate that VBus already dropped 
-            iWatcher->Usb().BusDrop();
-            iWatcher->NotifManager()->ShowNotifierL(KUsbUiNotifOtgError,
-                    EUsbOtgUnsupportedDevice, this);
-
-            break;
-            }
-        default:
-            {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::TimerElapsedL - Unknown timer" ) );
-            Panic(EWrongTimerId);
-            }
-        }
-    }