--- a/usbengines/usbwatcher/src/cusbwatcher.cpp Wed Sep 15 13:20:24 2010 +0300
+++ b/usbengines/usbwatcher/src/cusbwatcher.cpp Wed Oct 13 15:41:46 2010 +0300
@@ -254,6 +254,15 @@
}
LOG1( "Starting USB personality in device state: %d", aStateNew );
iPersonalityHandler->StateChangeNotify( aStateOld, aStateNew );
+ // Check AskOnConnection setting every time
+ if( ( iSupportedPersonalities.Count() > 1 ) &&
+ !IsAskOnConnectionSuppression() )
+ {
+ // read setting if there is more than one personality
+ iPersonalityRepository->Get(
+ KUsbWatcherChangeOnConnectionSetting,
+ iAskOnConnectionSetting );
+ }
if( ( iState == EUsbIdle ) && !iPersonalityChangeOngoing )
{
@@ -265,6 +274,10 @@
Start();
}
+ // Let's turn ask on connection off after start cause we will
+ // issue it only when cable is connected
+ iAskOnConnectionSetting = KUsbWatcherChangeOnConnectionOff;
+
//start usbdevcon only in normal global state
TInt globalState =
CUsbGlobalSystemStateObserver::GlobalSystemState();
@@ -517,7 +530,17 @@
if( EUsbDeviceStateAttached == state || EUsbDeviceStatePowered == state)
{
LOG( "Starting USB personality" );
- Start();
+ TInt err = iPersonalityRepository->Get(
+ KUsbWatcherChangeOnConnectionSetting, iAskOnConnectionSetting );
+ if( KErrNone == err )
+ {
+ Start();
+ iAskOnConnectionSetting = KUsbWatcherChangeOnConnectionOff;
+ }
+ else
+ {
+ LOG1( "Error: CRepository::Get = %d", err );
+ }
}
}
@@ -747,7 +770,8 @@
iStarted = ETrue;
// Restore personality to normal in charging mode
iSetPreviousPersonalityOnDisconnect = ETrue;
- iPersonalityHandler->StartPersonality( iPersonalityId, iStatus );
+ iPersonalityHandler->StartPersonality( iPersonalityId,
+ KUsbWatcherChangeOnConnectionOff, iStatus );
}
else
{
@@ -766,7 +790,8 @@
RProperty::Set( KPSUidUsbWatcher,
KUsbWatcherSelectedPersonality, iPersonalityId );
iStarted = ETrue;
- iPersonalityHandler->StartPersonality( iPersonalityId, iStatus );
+ iPersonalityHandler->StartPersonality( iPersonalityId,
+ iAskOnConnectionSetting, iStatus );
}
else
{
@@ -788,10 +813,8 @@
}
else
{
- //Start may have been called because device lock was unlocking. The
- //personality may be already starting, so nothing needs to be done.
- LOG1( "Trying to call CUsbWatcher::Start in non-idle state %d",
- iState );
+ LOG( "Tryign to call CUsbWatcher::Start in non-idle state " );
+ PANIC( KErrGeneral );
}
}
@@ -1011,6 +1034,27 @@
}
// ----------------------------------------------------------------------------
+// Check if there is an observer with ask on connection suppression
+// ----------------------------------------------------------------------------
+//
+TBool CUsbWatcher::IsAskOnConnectionSuppression()
+ {
+ LOG_FUNC
+
+ TBool ret( EFalse );
+ for( TInt i = 0; i < iObservers.Count(); i++ )
+ {
+ if( iObservers[i]->IsAskOnConnectionSuppressed() )
+ {
+ ret = ETrue;
+ break;
+ }
+ }
+ LOG1( "Return = %d", ret );
+ return ret;
+ }
+
+// ----------------------------------------------------------------------------
// Check current A or B device state
// ----------------------------------------------------------------------------
//