usbengines/usbwatcher/src/cusbwatcher.cpp
branchRCL_3
changeset 92 dde4619868dc
parent 86 703a2b94c06c
equal deleted inserted replaced
86:703a2b94c06c 92:dde4619868dc
   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     {