43 // |
43 // |
44 CPositionInfo::CPositionInfo( MPositionInfoObserver* aTrail ) |
44 CPositionInfo::CPositionInfo( MPositionInfoObserver* aTrail ) |
45 : CActive( CActive::EPriorityStandard ), |
45 : CActive( CActive::EPriorityStandard ), |
46 iFirstInterval( ETrue ) |
46 iFirstInterval( ETrue ) |
47 { |
47 { |
|
48 LOG( "CPositionInfo::CPositionInfo()"); |
48 CActiveScheduler::Add( this ); |
49 CActiveScheduler::Add( this ); |
49 iTrail = aTrail; |
50 iTrail = aTrail; |
50 iTrailCaptureSetting = RLocationTrail::ECaptureAll; |
51 iTrailCaptureSetting = RLocationTrail::ECaptureAll; |
51 |
52 |
52 // Set update interval. |
53 // Set update interval. |
99 iTrailCaptureSetting = aCaptureSetting; |
100 iTrailCaptureSetting = aCaptureSetting; |
100 iUpdateInterval = aUpdateInterval; |
101 iUpdateInterval = aUpdateInterval; |
101 iFirstInterval = ETrue; |
102 iFirstInterval = ETrue; |
102 iPositionInfo = TPositionSatelliteInfo(); |
103 iPositionInfo = TPositionSatelliteInfo(); |
103 |
104 |
|
105 // Set update interval. |
|
106 iUpdateOptions.SetUpdateInterval( TTimeIntervalMicroSeconds(KFirstInterval) ); |
|
107 // Set time out level. |
|
108 iUpdateOptions.SetUpdateTimeOut( TTimeIntervalMicroSeconds( KFirstTimeOut) ); |
|
109 // Positions which have time stamp below KMaxAge can be reused |
|
110 iUpdateOptions.SetMaxUpdateAge( TTimeIntervalMicroSeconds(KMaxAge) ); |
|
111 // Disables location framework to send partial position data |
|
112 iUpdateOptions.SetAcceptPartialUpdates( EFalse ); |
|
113 |
104 if ( aCaptureSetting == RLocationTrail::ECaptureAll ) |
114 if ( aCaptureSetting == RLocationTrail::ECaptureAll ) |
105 { |
115 { |
106 User::LeaveIfError( iPosServer.Connect() ); |
116 User::LeaveIfError( iPosServer.Connect() ); |
107 User::LeaveIfError( iPositioner.Open( iPosServer ) ); |
117 User::LeaveIfError( iPositioner.Open( iPosServer ) ); |
108 User::LeaveIfError( iPositioner.SetRequestor( CRequestor::ERequestorService, |
118 User::LeaveIfError( iPositioner.SetRequestor( CRequestor::ERequestorService, |
147 // CPositionInfo::Stop |
157 // CPositionInfo::Stop |
148 // -------------------------------------------------------------------------- |
158 // -------------------------------------------------------------------------- |
149 // |
159 // |
150 void CPositionInfo::Stop() |
160 void CPositionInfo::Stop() |
151 { |
161 { |
152 Cancel(); |
162 Cancel(); |
153 |
163 |
154 iFirstInterval = ETrue; |
|
155 iUpdateOptions.SetUpdateInterval( TTimeIntervalMicroSeconds( KFirstInterval ) ); |
|
156 |
|
157 iPositioner.Close(); |
164 iPositioner.Close(); |
158 iPosServer.Close(); |
165 iPosServer.Close(); |
159 } |
166 } |
160 |
167 |
161 // -------------------------------------------------------------------------- |
168 // -------------------------------------------------------------------------- |
163 // -------------------------------------------------------------------------- |
170 // -------------------------------------------------------------------------- |
164 // |
171 // |
165 void CPositionInfo::RunL() |
172 void CPositionInfo::RunL() |
166 { |
173 { |
167 iTrail->Position( iPositionInfo, iStatus.Int() ); |
174 iTrail->Position( iPositionInfo, iStatus.Int() ); |
168 if ( iFirstInterval && iTrailCaptureSetting == RLocationTrail::ECaptureAll ) |
175 |
169 { |
176 if ( iFirstInterval && IsActive() ) |
170 iUpdateOptions.SetUpdateInterval( TTimeIntervalMicroSeconds( iUpdateInterval ) ); |
177 { |
171 iUpdateOptions.SetUpdateTimeOut( TTimeIntervalMicroSeconds( KUpdateTimeOut ) ); |
178 Cancel(); |
172 User::LeaveIfError( iPositioner.SetUpdateOptions( iUpdateOptions ) ); |
179 LOG("CPositionInfo::RunL() - First Time"); |
|
180 iUpdateOptions.SetUpdateInterval( TTimeIntervalMicroSeconds (iUpdateInterval) ); |
|
181 iUpdateOptions.SetUpdateTimeOut( TTimeIntervalMicroSeconds(KUpdateTimeOut ) ); |
|
182 if ( iTrailCaptureSetting == RLocationTrail::ECaptureAll ) |
|
183 { |
|
184 User::LeaveIfError( iPositioner.SetUpdateOptions( iUpdateOptions ) ); |
|
185 iPositioner.NotifyPositionUpdate( iPositionInfo, iStatus ); |
|
186 } |
|
187 SetActive(); |
173 iFirstInterval = EFalse; |
188 iFirstInterval = EFalse; |
174 } |
189 } |
175 } |
190 } |
176 |
191 |
177 // -------------------------------------------------------------------------- |
192 // -------------------------------------------------------------------------- |
178 // CPositionInfo::DoCancel |
193 // CPositionInfo::DoCancel |
179 // -------------------------------------------------------------------------- |
194 // -------------------------------------------------------------------------- |
180 // |
195 // |
181 void CPositionInfo::DoCancel() |
196 void CPositionInfo::DoCancel() |
182 { |
197 { |
183 if ( !IsActive() ) |
198 LOG( "CPositionInfo::DoCancel()" ); |
|
199 if ( IsActive() ) |
184 { |
200 { |
185 iPositioner.CancelRequest( EPositionerNotifyPositionUpdate ); |
201 iPositioner.CancelRequest( EPositionerNotifyPositionUpdate ); |
186 } |
202 } |
187 } |
203 } |
188 |
204 |