diff -r 468cfcb53fd1 -r 47c263f7e521 usbengines/usbotgwatcher/src/cusbindicatornotifier.cpp --- a/usbengines/usbotgwatcher/src/cusbindicatornotifier.cpp Mon Jan 18 21:13:23 2010 +0200 +++ b/usbengines/usbotgwatcher/src/cusbindicatornotifier.cpp Tue Jan 26 12:55:41 2010 +0200 @@ -56,10 +56,18 @@ delete iIconBlinkingTimer; // Unsubscribe from VBus change notifications - iOtgWatcher->VBusObserver()->UnsubscribeL(this); - - // Unsubscribe from otg watcher states change notifications - iOtgWatcher->UnsubscribeL(this); + if(iOtgWatcher) + { + if(iOtgWatcher->VBusObserver()) + { + TRAPD(err, iOtgWatcher->VBusObserver()->UnsubscribeL(this)); + err=err; // to avoid warning; + } + + // Unsubscribe from otg watcher states change notifications + TRAPD(err, iOtgWatcher->UnsubscribeL(this)); + err=err; // to avoid warning; + } } // --------------------------------------------------------------------------- @@ -235,6 +243,14 @@ void CUsbIndicatorNotifier::SetIndicatorL() { FLOG( _L( "[USBOTGWATCHER]\tCUsbIndicatorNotifier::SetIndicatorL" ) ); + + if (!(iOtgWatcher->IsDeviceA())) + { + // if B, than other party (usbwatcher) takes care of usb indicator + // in combined usbwatcher (if role swap allowed) one class has to manage usb indicator + return; + } + // if VBus Up and we are host -> show indicator if ((iOtgWatcher->VBusObserver()->VBus() == CUsbVBusObserver::EVBusUp) && (iOtgWatcher->CurrentHostState()->Id() == EUsbStateHostAHost))