252 aStateOld); |
252 aStateOld); |
253 break; |
253 break; |
254 } |
254 } |
255 LOG1( "Starting USB personality in device state: %d", aStateNew ); |
255 LOG1( "Starting USB personality in device state: %d", aStateNew ); |
256 iPersonalityHandler->StateChangeNotify( aStateOld, aStateNew ); |
256 iPersonalityHandler->StateChangeNotify( aStateOld, aStateNew ); |
|
257 // Check AskOnConnection setting every time |
|
258 if( ( iSupportedPersonalities.Count() > 1 ) && |
|
259 !IsAskOnConnectionSuppression() ) |
|
260 { |
|
261 // read setting if there is more than one personality |
|
262 iPersonalityRepository->Get( |
|
263 KUsbWatcherChangeOnConnectionSetting, |
|
264 iAskOnConnectionSetting ); |
|
265 } |
257 |
266 |
258 if( ( iState == EUsbIdle ) && !iPersonalityChangeOngoing ) |
267 if( ( iState == EUsbIdle ) && !iPersonalityChangeOngoing ) |
259 { |
268 { |
260 Start(); |
269 Start(); |
261 } |
270 } |
262 else if( ( iState != EUsbStarted ) && !iPersonalityChangeOngoing ) |
271 else if( ( iState != EUsbStarted ) && !iPersonalityChangeOngoing ) |
263 { |
272 { |
264 Cancel(); |
273 Cancel(); |
265 Start(); |
274 Start(); |
266 } |
275 } |
|
276 |
|
277 // Let's turn ask on connection off after start cause we will |
|
278 // issue it only when cable is connected |
|
279 iAskOnConnectionSetting = KUsbWatcherChangeOnConnectionOff; |
267 |
280 |
268 //start usbdevcon only in normal global state |
281 //start usbdevcon only in normal global state |
269 TInt globalState = |
282 TInt globalState = |
270 CUsbGlobalSystemStateObserver::GlobalSystemState(); |
283 CUsbGlobalSystemStateObserver::GlobalSystemState(); |
271 if( ( ESwStateNormalRfOn == globalState ) || |
284 if( ( ESwStateNormalRfOn == globalState ) || |
515 |
528 |
516 LOG1( "USB device state after unlock: %d", state ); |
529 LOG1( "USB device state after unlock: %d", state ); |
517 if( EUsbDeviceStateAttached == state || EUsbDeviceStatePowered == state) |
530 if( EUsbDeviceStateAttached == state || EUsbDeviceStatePowered == state) |
518 { |
531 { |
519 LOG( "Starting USB personality" ); |
532 LOG( "Starting USB personality" ); |
520 Start(); |
533 TInt err = iPersonalityRepository->Get( |
|
534 KUsbWatcherChangeOnConnectionSetting, iAskOnConnectionSetting ); |
|
535 if( KErrNone == err ) |
|
536 { |
|
537 Start(); |
|
538 iAskOnConnectionSetting = KUsbWatcherChangeOnConnectionOff; |
|
539 } |
|
540 else |
|
541 { |
|
542 LOG1( "Error: CRepository::Get = %d", err ); |
|
543 } |
521 } |
544 } |
522 } |
545 } |
523 |
546 |
524 // ---------------------------------------------------------------------------- |
547 // ---------------------------------------------------------------------------- |
525 // This method is called when client wants to set new personality. |
548 // This method is called when client wants to set new personality. |
745 RProperty::Set( KPSUidUsbWatcher, |
768 RProperty::Set( KPSUidUsbWatcher, |
746 KUsbWatcherSelectedPersonality, iPersonalityId ); |
769 KUsbWatcherSelectedPersonality, iPersonalityId ); |
747 iStarted = ETrue; |
770 iStarted = ETrue; |
748 // Restore personality to normal in charging mode |
771 // Restore personality to normal in charging mode |
749 iSetPreviousPersonalityOnDisconnect = ETrue; |
772 iSetPreviousPersonalityOnDisconnect = ETrue; |
750 iPersonalityHandler->StartPersonality( iPersonalityId, iStatus ); |
773 iPersonalityHandler->StartPersonality( iPersonalityId, |
|
774 KUsbWatcherChangeOnConnectionOff, iStatus ); |
751 } |
775 } |
752 else |
776 else |
753 { |
777 { |
754 LOG1( "GetChargingPersonalityId = %d. Not started", ret ); |
778 LOG1( "GetChargingPersonalityId = %d. Not started", ret ); |
755 } |
779 } |
764 { |
788 { |
765 iGlobalStateObserver->Cancel(); |
789 iGlobalStateObserver->Cancel(); |
766 RProperty::Set( KPSUidUsbWatcher, |
790 RProperty::Set( KPSUidUsbWatcher, |
767 KUsbWatcherSelectedPersonality, iPersonalityId ); |
791 KUsbWatcherSelectedPersonality, iPersonalityId ); |
768 iStarted = ETrue; |
792 iStarted = ETrue; |
769 iPersonalityHandler->StartPersonality( iPersonalityId, iStatus ); |
793 iPersonalityHandler->StartPersonality( iPersonalityId, |
|
794 iAskOnConnectionSetting, iStatus ); |
770 } |
795 } |
771 else |
796 else |
772 { |
797 { |
773 LOG( "Device LOCKED, USB personality NOT start" ); |
798 LOG( "Device LOCKED, USB personality NOT start" ); |
774 } |
799 } |
786 iState = EUsbStarting; |
811 iState = EUsbStarting; |
787 } |
812 } |
788 } |
813 } |
789 else |
814 else |
790 { |
815 { |
791 //Start may have been called because device lock was unlocking. The |
816 LOG( "Tryign to call CUsbWatcher::Start in non-idle state " ); |
792 //personality may be already starting, so nothing needs to be done. |
817 PANIC( KErrGeneral ); |
793 LOG1( "Trying to call CUsbWatcher::Start in non-idle state %d", |
|
794 iState ); |
|
795 } |
818 } |
796 } |
819 } |
797 |
820 |
798 // ---------------------------------------------------------------------------- |
821 // ---------------------------------------------------------------------------- |
799 // This method starts personality unloading or cancels personality start. |
822 // This method starts personality unloading or cancels personality start. |
1009 LOG2( "ret = %d ( aPersonalityId: %d )", ret, aPersonalityId ); |
1032 LOG2( "ret = %d ( aPersonalityId: %d )", ret, aPersonalityId ); |
1010 return ret; |
1033 return ret; |
1011 } |
1034 } |
1012 |
1035 |
1013 // ---------------------------------------------------------------------------- |
1036 // ---------------------------------------------------------------------------- |
|
1037 // Check if there is an observer with ask on connection suppression |
|
1038 // ---------------------------------------------------------------------------- |
|
1039 // |
|
1040 TBool CUsbWatcher::IsAskOnConnectionSuppression() |
|
1041 { |
|
1042 LOG_FUNC |
|
1043 |
|
1044 TBool ret( EFalse ); |
|
1045 for( TInt i = 0; i < iObservers.Count(); i++ ) |
|
1046 { |
|
1047 if( iObservers[i]->IsAskOnConnectionSuppressed() ) |
|
1048 { |
|
1049 ret = ETrue; |
|
1050 break; |
|
1051 } |
|
1052 } |
|
1053 LOG1( "Return = %d", ret ); |
|
1054 return ret; |
|
1055 } |
|
1056 |
|
1057 // ---------------------------------------------------------------------------- |
1014 // Check current A or B device state |
1058 // Check current A or B device state |
1015 // ---------------------------------------------------------------------------- |
1059 // ---------------------------------------------------------------------------- |
1016 // |
1060 // |
1017 TBool CUsbWatcher::IsDeviceA() |
1061 TBool CUsbWatcher::IsDeviceA() |
1018 { |
1062 { |