253 aStateOld); |
253 aStateOld); |
254 break; |
254 break; |
255 } |
255 } |
256 LOG1( "Starting USB personality in device state: %d", aStateNew ); |
256 LOG1( "Starting USB personality in device state: %d", aStateNew ); |
257 iPersonalityHandler->StateChangeNotify( aStateOld, aStateNew ); |
257 iPersonalityHandler->StateChangeNotify( aStateOld, aStateNew ); |
258 // Check AskOnConnection setting every time |
|
259 if( ( iSupportedPersonalities.Count() > 1 ) && |
|
260 !IsAskOnConnectionSuppression() ) |
|
261 { |
|
262 // read setting if there is more than one personality |
|
263 iPersonalityRepository->Get( |
|
264 KUsbWatcherChangeOnConnectionSetting, |
|
265 iAskOnConnectionSetting ); |
|
266 } |
|
267 |
258 |
268 if( ( iState == EUsbIdle ) && !iPersonalityChangeOngoing ) |
259 if( ( iState == EUsbIdle ) && !iPersonalityChangeOngoing ) |
269 { |
260 { |
270 Start(); |
261 Start(); |
271 } |
262 } |
272 else if( ( iState != EUsbStarted ) && !iPersonalityChangeOngoing ) |
263 else if( ( iState != EUsbStarted ) && !iPersonalityChangeOngoing ) |
273 { |
264 { |
274 Cancel(); |
265 Cancel(); |
275 Start(); |
266 Start(); |
276 } |
267 } |
277 |
|
278 // Let's turn ask on connection off after start cause we will |
|
279 // issue it only when cable is connected |
|
280 iAskOnConnectionSetting = KUsbWatcherChangeOnConnectionOff; |
|
281 |
268 |
282 //start usbdevcon only in normal global state |
269 //start usbdevcon only in normal global state |
283 TInt globalState = |
270 TInt globalState = |
284 CUsbGlobalSystemStateObserver::GlobalSystemState(); |
271 CUsbGlobalSystemStateObserver::GlobalSystemState(); |
285 if( ( ESwStateNormalRfOn == globalState ) || |
272 if( ( ESwStateNormalRfOn == globalState ) || |
529 |
516 |
530 LOG1( "USB device state after unlock: %d", state ); |
517 LOG1( "USB device state after unlock: %d", state ); |
531 if( EUsbDeviceStateAttached == state || EUsbDeviceStatePowered == state) |
518 if( EUsbDeviceStateAttached == state || EUsbDeviceStatePowered == state) |
532 { |
519 { |
533 LOG( "Starting USB personality" ); |
520 LOG( "Starting USB personality" ); |
534 TInt err = iPersonalityRepository->Get( |
521 Start(); |
535 KUsbWatcherChangeOnConnectionSetting, iAskOnConnectionSetting ); |
|
536 if( KErrNone == err ) |
|
537 { |
|
538 Start(); |
|
539 iAskOnConnectionSetting = KUsbWatcherChangeOnConnectionOff; |
|
540 } |
|
541 else |
|
542 { |
|
543 LOG1( "Error: CRepository::Get = %d", err ); |
|
544 } |
|
545 } |
522 } |
546 } |
523 } |
547 |
524 |
548 // ---------------------------------------------------------------------------- |
525 // ---------------------------------------------------------------------------- |
549 // This method is called when client wants to set new personality. |
526 // This method is called when client wants to set new personality. |
769 RProperty::Set( KPSUidUsbWatcher, |
746 RProperty::Set( KPSUidUsbWatcher, |
770 KUsbWatcherSelectedPersonality, iPersonalityId ); |
747 KUsbWatcherSelectedPersonality, iPersonalityId ); |
771 iStarted = ETrue; |
748 iStarted = ETrue; |
772 // Restore personality to normal in charging mode |
749 // Restore personality to normal in charging mode |
773 iSetPreviousPersonalityOnDisconnect = ETrue; |
750 iSetPreviousPersonalityOnDisconnect = ETrue; |
774 iPersonalityHandler->StartPersonality( iPersonalityId, |
751 iPersonalityHandler->StartPersonality( iPersonalityId, iStatus ); |
775 KUsbWatcherChangeOnConnectionOff, iStatus ); |
|
776 } |
752 } |
777 else |
753 else |
778 { |
754 { |
779 LOG1( "GetChargingPersonalityId = %d. Not started", ret ); |
755 LOG1( "GetChargingPersonalityId = %d. Not started", ret ); |
780 } |
756 } |
789 { |
765 { |
790 iGlobalStateObserver->Cancel(); |
766 iGlobalStateObserver->Cancel(); |
791 RProperty::Set( KPSUidUsbWatcher, |
767 RProperty::Set( KPSUidUsbWatcher, |
792 KUsbWatcherSelectedPersonality, iPersonalityId ); |
768 KUsbWatcherSelectedPersonality, iPersonalityId ); |
793 iStarted = ETrue; |
769 iStarted = ETrue; |
794 iPersonalityHandler->StartPersonality( iPersonalityId, |
770 iPersonalityHandler->StartPersonality( iPersonalityId, iStatus ); |
795 iAskOnConnectionSetting, iStatus ); |
|
796 } |
771 } |
797 else |
772 else |
798 { |
773 { |
799 LOG( "Device LOCKED, USB personality NOT start" ); |
774 LOG( "Device LOCKED, USB personality NOT start" ); |
800 } |
775 } |
1013 TInt ret = iPersonalityRepository->Get( |
988 TInt ret = iPersonalityRepository->Get( |
1014 KUsbWatcherChargingDefaultPersonality, aPersonalityId ); |
989 KUsbWatcherChargingDefaultPersonality, aPersonalityId ); |
1015 return ret; |
990 return ret; |
1016 } |
991 } |
1017 |
992 |
1018 // ---------------------------------------------------------------------------- |
993 |
1019 // Check if there is an observer with ask on connection suppression |
|
1020 // ---------------------------------------------------------------------------- |
|
1021 // |
|
1022 TBool CUsbWatcher::IsAskOnConnectionSuppression() |
|
1023 { |
|
1024 LOG_FUNC |
|
1025 |
|
1026 TBool ret( EFalse ); |
|
1027 for( TInt i = 0; i < iObservers.Count(); i++ ) |
|
1028 { |
|
1029 if( iObservers[i]->IsAskOnConnectionSuppressed() ) |
|
1030 { |
|
1031 ret = ETrue; |
|
1032 break; |
|
1033 } |
|
1034 } |
|
1035 LOG1( "Return = %d", ret ); |
|
1036 return ret; |
|
1037 } |
|
1038 |
994 |
1039 // ---------------------------------------------------------------------------- |
995 // ---------------------------------------------------------------------------- |
1040 // Check current A or B device state |
996 // Check current A or B device state |
1041 // ---------------------------------------------------------------------------- |
997 // ---------------------------------------------------------------------------- |
1042 // |
998 // |