--- a/usbengines/usbwatcher/src/cusbwatcher.cpp Tue Feb 02 00:52:37 2010 +0200
+++ b/usbengines/usbwatcher/src/cusbwatcher.cpp Fri Mar 19 09:48:52 2010 +0200
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2006-2010 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"
@@ -251,7 +251,7 @@
aStateOld);
break;
}
- LOG1( "Starting USB personality in device state: %d", aStateNew );
+ LOG1( "Starting USB personality in device state: %d", aStateNew );
iPersonalityHandler->StateChangeNotify( aStateOld, aStateNew );
// Check AskOnConnection setting every time
if( ( iSupportedPersonalities.Count() > 1 ) &&
@@ -387,11 +387,13 @@
case EUsbStarting:
LOG( "Personality started" );
Notify( ret );
- iState = EUsbStarted;
if( iStopStartScenario )
{
iStopStartScenario = EFalse;
}
+ //check if StartPersonality() fails
+ LEAVEIFERROR( ret );
+ iState = EUsbStarted;
break;
case EUsbStopping:
@@ -453,10 +455,21 @@
// This method is not called cause RunL() never leaves.
// ----------------------------------------------------------------------------
//
-TInt CUsbWatcher::RunError(TInt /*aError*/)
+TInt CUsbWatcher::RunError(TInt aError)
{
LOG_FUNC
- // Left empty cause this can't happend
+
+ LOG2("Returned error: %d, iState: %d", aError, iState);
+ if ( iState == EUsbStarting )
+ {
+ RProperty::Set( KPSUidUsbWatcher,
+ KUsbWatcherSelectedPersonality,
+ KUsbWatcherSelectedPersonalityNone );
+ LOG( "personality set to none" );
+
+ iState = EUsbIdle;
+ }
+
return KErrNone;
}
@@ -1032,4 +1045,38 @@
return iOtgWatcher ? iOtgWatcher->IsDeviceA() : EFalse;
}
+// ----------------------------------------------------------------------------
+// Write new personality to central repository.
+// ----------------------------------------------------------------------------
+//
+TInt CUsbWatcher::WritePersonalityId( TInt aPersonalityId )
+ {
+ LOG_FUNC
+
+ // Save as the default personality only if it is not hidden
+ TUint32 property(0);
+ TInt ret = iUsbMan.GetPersonalityProperty( aPersonalityId, property );
+ if ( ret == KErrNone )
+ {
+ LOG2( "Personality %d property: 0x%x", aPersonalityId, property );
+ }
+ else
+ {
+ //Not fatal, treat as non-hidden
+ LOG1( "ERROR: GetPersonalityProperty = %d", ret );
+ property = 0;
+ }
+ if ( property & KUsbPersonalityPropertyHidden ) //Bitwise AND
+ {
+ LOG( "Hidden personality not saved to central repository" );
+ ret = KErrNone;
+ }
+ else
+ {
+ ret = iPersonalityRepository->Set( KUsbWatcherPersonality,
+ aPersonalityId );
+ }
+ return ret;
+ }
+
// End of file