diff -r 7e15987c4500 -r 8c311f9acc5e usbengines/usbwatcher/src/cusbwatcher.cpp --- 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