locationmanager/server/src/clocationmanagerserver.cpp
changeset 20 6dfc5f825351
parent 1 acef663c1218
child 21 50bf9db68373
equal deleted inserted replaced
3:b73a2e62868f 20:6dfc5f825351
    96                      ESharableSessions ),
    96                      ESharableSessions ),
    97                      iTimer( NULL ),
    97                      iTimer( NULL ),
    98 			         iSessionReady( EFalse ),
    98 			         iSessionReady( EFalse ),
    99                      iTagId( 0 ),
    99                      iTagId( 0 ),
   100                      iLocManStopDelay( 0 ),
   100                      iLocManStopDelay( 0 ),
       
   101                      iLocManStopRemapDelay( 0 ),
   101                      iCaptureSetting( RLocationTrail::EOff ),
   102                      iCaptureSetting( RLocationTrail::EOff ),
   102                      iRemoveLocation( EFalse )
   103                      iRemoveLocation( EFalse )
   103     {
   104     {
   104     }
   105     }
   105 
   106 
   131     
   132     
   132     iTrackLog->AddGpxObserver( this );
   133     iTrackLog->AddGpxObserver( this );
   133     
   134     
   134     CRepository* repository = CRepository::NewLC( KRepositoryUid );
   135     CRepository* repository = CRepository::NewLC( KRepositoryUid );
   135 	TInt err = repository->Get( KLocationTrailShutdownTimer, iLocManStopDelay );
   136 	TInt err = repository->Get( KLocationTrailShutdownTimer, iLocManStopDelay );
   136 	CleanupStack::PopAndDestroy( repository );
       
   137 	
   137 	
   138     LOG1("CLocationManagerServer::ConstructL, iLocManStopDelay:%d", iLocManStopDelay);
   138     LOG1("CLocationManagerServer::ConstructL, iLocManStopDelay:%d", iLocManStopDelay);
   139     
   139     
   140     if ( err != KErrNone )
   140     if ( err != KErrNone )
   141     	{
   141     	{
   142         LOG1("CLocationManagerServer::ConstructL, iLocManStopDelay err:%d", err);
   142         LOG1("CLocationManagerServer::ConstructL, iLocManStopDelay err:%d", err);
   143         iLocManStopDelay = KLocationTrailShutdownDelay;
   143         iLocManStopDelay = KLocationTrailShutdownDelay;
   144     	}
   144     	}
       
   145 
       
   146     err = repository->Get( KLocationTrailRemapShutdownTimer, iLocManStopRemapDelay );
       
   147     CleanupStack::PopAndDestroy( repository );
       
   148     
       
   149     LOG1("CLocationManagerServer::ConstructL, iLocManStopRemapDelay:%d", iLocManStopRemapDelay);
       
   150     
       
   151     if ( err != KErrNone )
       
   152         {
       
   153         LOG1("CLocationManagerServer::ConstructL, iLocManStopRemapDelay err:%d", err);
       
   154         iLocManStopRemapDelay = KLocationTrailRemapShutdownDelay;
       
   155         }
   145     
   156     
   146     LOG ("CLocationManagerServer::ConstructL() end");
   157     LOG ("CLocationManagerServer::ConstructL() end");
   147     }
   158     }
   148 
   159 
   149 // --------------------------------------------------------------------------
   160 // --------------------------------------------------------------------------
   293 // CLocationManagerServer::StartGPSPositioningL
   304 // CLocationManagerServer::StartGPSPositioningL
   294 // --------------------------------------------------------------------------
   305 // --------------------------------------------------------------------------
   295 //
   306 //
   296 void CLocationManagerServer::StartGPSPositioningL( RLocationTrail::TTrailCaptureSetting aCaptureSetting )
   307 void CLocationManagerServer::StartGPSPositioningL( RLocationTrail::TTrailCaptureSetting aCaptureSetting )
   297     {
   308     {
       
   309     LOG( "CLocationManagerServer::StartGPSPositioningL" );
   298     if ( aCaptureSetting == RLocationTrail::EOff )
   310     if ( aCaptureSetting == RLocationTrail::EOff )
   299     	{
   311     	{
   300     	return;
   312     	return;
   301     	}
   313     	}
   302     
   314     
   306     GetLocationTrailState( state );
   318     GetLocationTrailState( state );
   307     if ( state != RLocationTrail::ETrailStopped && state != RLocationTrail::ETrailStopping )
   319     if ( state != RLocationTrail::ETrailStopped && state != RLocationTrail::ETrailStopping )
   308         {
   320         {
   309         User::Leave( KErrAlreadyExists );
   321         User::Leave( KErrAlreadyExists );
   310         }
   322         }
       
   323     
   311     if ( iTimer )
   324     if ( iTimer )
   312     	{
   325     	{
   313     	delete iTimer;
   326     	delete iTimer;
   314     	iTimer = NULL;
   327     	iTimer = NULL;
   315     	}
   328     	}
   321 // CLocationManagerServer::StopGPSPositioning
   334 // CLocationManagerServer::StopGPSPositioning
   322 // --------------------------------------------------------------------------
   335 // --------------------------------------------------------------------------
   323 //    
   336 //    
   324 void CLocationManagerServer::StopGPSPositioningL()
   337 void CLocationManagerServer::StopGPSPositioningL()
   325     {
   338     {
       
   339     LOG( "CLocationManagerServer::StopGPSPositioningL()" );
   326     iCaptureSetting = RLocationTrail::EOff;
   340     iCaptureSetting = RLocationTrail::EOff;
   327     
   341     
   328     RLocationTrail::TTrailState state;
   342     RLocationTrail::TTrailState state;
   329     GetLocationTrailState( state );
   343     GetLocationTrailState( state );
   330     if( state == RLocationTrail::ETrailStarted || state == RLocationTrail::ETrailStarting )
   344     
   331     	{
   345     
   332     	iLocationRecord->Stop();
   346     if( state != RLocationTrail::ETrailStopped && state != RLocationTrail::ETrailStopping )
       
   347         {
       
   348         TRAPD( error, iTimer = CPeriodic::NewL( CActive::EPriorityHigh ) );
       
   349         
       
   350         if ( error != KErrNone )
       
   351             {
       
   352             // If timer can't be created we stop the location trail immediately.
       
   353             iLocationRecord->Stop();
       
   354             StopTrackLogL();
       
   355             return;
       
   356             }   
       
   357         
       
   358         iLocationRecord->SetStateToStopping();
       
   359         iTimer->Start( iLocManStopDelay * 1000000, 0, TCallBack( CheckForRemappingCallback, this ) );
   333     	}
   360     	}
   334     else if ( state != RLocationTrail::ETrailStopped && state != RLocationTrail::ETrailStopping )
       
   335         {
       
   336         if ( iLocationRecord->RemappingNeeded() )
       
   337         	{
       
   338         	TRAPD( error, iTimer = CPeriodic::NewL( CActive::EPriorityStandard ) );
       
   339         	if ( error != KErrNone )
       
   340         		{
       
   341         		// If timer can't be created we stop the location trail immediately.
       
   342         		iLocationRecord->Stop();
       
   343         		StopTrackLogL();
       
   344         		return;
       
   345         		}
       
   346         	iLocationRecord->SetStateToStopping();
       
   347         	iTimer->Start( iLocManStopDelay * 1000000, 0, TCallBack( PositioningStopTimeout, this ) );
       
   348         	}
       
   349         else 
       
   350         	{
       
   351         	iLocationRecord->Stop();
       
   352         	}
       
   353         }
       
   354     
   361     
   355     // Always stop tracklog.
   362     // Always stop tracklog.
   356     StopTrackLogL();
   363     StopTrackLogL();
   357     }
   364     }
   358 
   365 
   360 // CLocationUtilityServer::StopRecording
   367 // CLocationUtilityServer::StopRecording
   361 // --------------------------------------------------------------------------
   368 // --------------------------------------------------------------------------
   362 //
   369 //
   363 void CLocationManagerServer::StopRecording()
   370 void CLocationManagerServer::StopRecording()
   364 	{
   371 	{
       
   372     LOG( "CLocationManagerServer::StopRecording()" );
   365 	iLocationRecord->Stop();
   373 	iLocationRecord->Stop();
   366 	delete iTimer;
   374 	delete iTimer;
   367 	iTimer = NULL;
   375 	iTimer = NULL;
   368 	}
   376 	}
   369 
   377 
   371 // CLocationUtilityServer::PositioningStopTimeout
   379 // CLocationUtilityServer::PositioningStopTimeout
   372 // --------------------------------------------------------------------------
   380 // --------------------------------------------------------------------------
   373 //
   381 //
   374 TInt CLocationManagerServer::PositioningStopTimeout( TAny* aAny )
   382 TInt CLocationManagerServer::PositioningStopTimeout( TAny* aAny )
   375 	{
   383 	{
       
   384     LOG( "CLocationManagerServer::PositioningStopTimeout" );
   376 	CLocationManagerServer* self = STATIC_CAST( CLocationManagerServer*, aAny );
   385 	CLocationManagerServer* self = STATIC_CAST( CLocationManagerServer*, aAny );
   377 	self->StopRecording();
   386 	self->StopRecording();
   378 	
   387 	
   379 	return KErrNone;
   388 	return KErrNone;
   380 	}
   389 	}
       
   390 
       
   391 // --------------------------------------------------------------------------
       
   392 // CLocationUtilityServer::PositioningStopTimeout
       
   393 // --------------------------------------------------------------------------
       
   394 //
       
   395 TInt CLocationManagerServer::CheckForRemappingCallback( TAny* aAny )
       
   396     {
       
   397     LOG( "CLocationManagerServer::CheckForRemappingCallback" );
       
   398     CLocationManagerServer* self = STATIC_CAST( CLocationManagerServer*, aAny );
       
   399 
       
   400     self->iTimer->Cancel();    
       
   401     
       
   402     if ( self->iLocationRecord->RemappingNeeded() )
       
   403         {     
       
   404         self->iTimer->Start( self->iLocManStopRemapDelay * 1000000, 0, TCallBack( PositioningStopTimeout, self ) );
       
   405         }
       
   406     else
       
   407         {        
       
   408         self->StopRecording();
       
   409         }
       
   410     
       
   411     return KErrNone;
       
   412     }
   381 
   413 
   382 // --------------------------------------------------------------------------
   414 // --------------------------------------------------------------------------
   383 // CLocationManagerServer::GetLocationTrailState
   415 // CLocationManagerServer::GetLocationTrailState
   384 // --------------------------------------------------------------------------
   416 // --------------------------------------------------------------------------
   385 //
   417 //
   441 // CLocationManagerServer::GetLocationByTimeL
   473 // CLocationManagerServer::GetLocationByTimeL
   442 // --------------------------------------------------------------------------
   474 // --------------------------------------------------------------------------
   443 //   
   475 //   
   444 void CLocationManagerServer::GetLocationByTimeL( const TTime& aTimeStamp, 
   476 void CLocationManagerServer::GetLocationByTimeL( const TTime& aTimeStamp, 
   445 												 TLocationData& aLocationData,
   477 												 TLocationData& aLocationData,
   446                                                  TLocTrailState& aState )
   478                                                  TLocTrailState& aState ) __SOFTFP
   447     {
   479     {
   448     iLocationRecord->GetLocationByTimeL( aTimeStamp,
   480     iLocationRecord->GetLocationByTimeL( aTimeStamp,
   449     									 aLocationData,
   481     									 aLocationData,
   450                                          aState );
   482                                          aState );
   451     }
   483     }
   495 
   527 
   496 // --------------------------------------------------------------------------
   528 // --------------------------------------------------------------------------
   497 // CLocationManagerServer::GetCurrentCellId
   529 // CLocationManagerServer::GetCurrentCellId
   498 // --------------------------------------------------------------------------
   530 // --------------------------------------------------------------------------
   499 //    
   531 //    
   500 void CLocationManagerServer::GetCurrentNetworkInfo( CTelephony::TNetworkInfoV1& aNetworkInfo )
   532 void CLocationManagerServer::GetCurrentNetworkInfo( CTelephony::TNetworkInfoV1& aNetworkInfo ) __SOFTFP
   501     {
   533     {
   502     iLocationRecord->GetNetworkInfo( aNetworkInfo );
   534     iLocationRecord->GetNetworkInfo( aNetworkInfo );
   503     }    
   535     }    
   504 
   536 
   505 // --------------------------------------------------------------------------
   537 // --------------------------------------------------------------------------
   506 // CLocationManagerServer::LocationTrailStateChange
   538 // CLocationManagerServer::LocationTrailStateChange
   507 // --------------------------------------------------------------------------
   539 // --------------------------------------------------------------------------
   508 //    
   540 //    
   509 void CLocationManagerServer::LocationTrailStateChange()
   541 void CLocationManagerServer::LocationTrailStateChange() __SOFTFP
   510     {
   542     {
   511     LOG( "CLocationManagerServer::LocationTrailStateChange(), begin" );
   543     LOG( "CLocationManagerServer::LocationTrailStateChange(), begin" );
   512 
   544 
   513     for ( TInt i = iNotifReqs.Count(); --i >= 0; )
   545     for ( TInt i = iNotifReqs.Count(); --i >= 0; )
   514         {
   546         {
   527 // CLocationManagerServer::CurrentLocation
   559 // CLocationManagerServer::CurrentLocation
   528 // --------------------------------------------------------------------------
   560 // --------------------------------------------------------------------------
   529 //
   561 //
   530 void CLocationManagerServer::CurrentLocation( const TPositionSatelliteInfo& aSatelliteInfo, 
   562 void CLocationManagerServer::CurrentLocation( const TPositionSatelliteInfo& aSatelliteInfo, 
   531 											  const CTelephony::TNetworkInfoV1& aNetworkInfo,
   563 											  const CTelephony::TNetworkInfoV1& aNetworkInfo,
   532                                               const TInt aError )
   564                                               const TInt aError ) __SOFTFP
   533     {
   565     {
   534     LOG( "CLocationManagerServer::CurrentLocation(), begin" );
   566     LOG( "CLocationManagerServer::CurrentLocation(), begin" );
   535     const TInt KParamLocationData = 0;
   567     const TInt KParamLocationData = 0;
   536     
   568     
   537     TLocationData locationData;
   569     TLocationData locationData;
   574 	iLocationReqs.Reset();
   606 	iLocationReqs.Reset();
   575 
   607 
   576     LOG( "CLocationManagerServer::CurrentLocation(), end" );    
   608     LOG( "CLocationManagerServer::CurrentLocation(), end" );    
   577     }
   609     }
   578 
   610 
   579 void CLocationManagerServer::GPSSignalQualityChanged( const TPositionSatelliteInfo& aSatelliteInfo )
   611 void CLocationManagerServer::GPSSignalQualityChanged( const TPositionSatelliteInfo& aSatelliteInfo ) __SOFTFP
   580 	{
   612 	{
   581 	LOG( "CLocationManagerServer::GPSSignalQualityChanged" );
   613 	LOG( "CLocationManagerServer::GPSSignalQualityChanged" );
   582 	const TInt KFixParam = 0;
   614 	const TInt KFixParam = 0;
   583 	const TInt KPositionInfoParam = 1;
   615 	const TInt KPositionInfoParam = 1;
   584 	const TInt KEventTypeParam = 2;
   616 	const TInt KEventTypeParam = 2;
   649 
   681 
   650     LOG( "CLocationManagerServer::CancelTrackLogNotificationRequest(), end" );
   682     LOG( "CLocationManagerServer::CancelTrackLogNotificationRequest(), end" );
   651 	}
   683 	}
   652 
   684 
   653 void CLocationManagerServer::CreateLocationObjectL( const TLocationData& aLocationData,
   685 void CLocationManagerServer::CreateLocationObjectL( const TLocationData& aLocationData,
   654 													const TUint& aObjectId )
   686 													const TUint& aObjectId ) __SOFTFP
   655 	{
   687 	{
   656 	if ( !IsSessionReady() )
   688 	if ( !IsSessionReady() )
   657 		{
   689 		{
   658 		User::Leave( KErrNotReady );
   690 		User::Leave( KErrNotReady );
   659 		}
   691 		}
  1010 	{
  1042 	{
  1011 	aRec = iTrackLog->IsRecording();
  1043 	aRec = iTrackLog->IsRecording();
  1012 	}
  1044 	}
  1013 
  1045 
  1014 void CLocationManagerServer::GpxFileCreated( const TDesC& aFileName, TItemId aTagId,
  1046 void CLocationManagerServer::GpxFileCreated( const TDesC& aFileName, TItemId aTagId,
  1015 		TReal32 aLength, TTime aStart, TTime aEnd )
  1047 		TReal32 aLength, TTime aStart, TTime aEnd ) __SOFTFP
  1016 	{
  1048 	{
  1017 	TRAP_IGNORE( CreateTrackLogL( aTagId, aFileName, aLength, aStart, aEnd ) );
  1049 	TRAP_IGNORE( CreateTrackLogL( aTagId, aFileName, aLength, aStart, aEnd ) );
  1018 	}
  1050 	}
  1019 
  1051 
  1020 TItemId CLocationManagerServer::CreateTrackLogTagL()
  1052 TItemId CLocationManagerServer::CreateTrackLogTagL()
  1098     
  1130     
  1099     CleanupStack::PopAndDestroy( relationObject );
  1131     CleanupStack::PopAndDestroy( relationObject );
  1100     CleanupStack::PopAndDestroy( trackLog );
  1132     CleanupStack::PopAndDestroy( trackLog );
  1101 	}
  1133 	}
  1102 
  1134 
  1103 TInt CLocationManagerServer::GetTrackLogStatus( TBool& aRecording, TPositionSatelliteInfo& aFixQuality)
  1135 TInt CLocationManagerServer::GetTrackLogStatus( TBool& aRecording, TPositionSatelliteInfo& aFixQuality) __SOFTFP
  1104 	{
  1136 	{
  1105 	if ( !iTrackLog )
  1137 	if ( !iTrackLog )
  1106 		{
  1138 		{
  1107 		return KErrNotFound;
  1139 		return KErrNotFound;
  1108 		}
  1140 		}