00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #include "FindMeActive.h"
00018 #include "FindMeAppView.h"
00019
00020
00021
00022 _LIT(KRequestor,"FindMe App");
00023
00024 const TInt KUpdateInterval = 1000000;
00025
00026 const TInt KUpdateTimeOut = 15000000;
00027
00028 const TInt KCacheAge = 500000;
00029
00030
00031 CFindMeActive* CFindMeActive::NewL(CFindMeAppView* aView)
00032 {
00033 CFindMeActive* self = new (ELeave) CFindMeActive();
00034 CleanupStack::PushL(self);
00035 self->ConstructL(aView);
00036 CleanupStack::Pop();
00037 return self;
00038 }
00039
00040
00041 CFindMeActive::CFindMeActive() : CActive(EPriorityStandard)
00042 {
00043 CActiveScheduler::Add( this );
00044 }
00045
00046
00047 void CFindMeActive::ConstructL(CFindMeAppView* aView)
00048 {
00049
00050 iView = aView;
00051
00052
00053 User::LeaveIfError(iPosServer.Connect());
00054
00055
00056 User::LeaveIfError(iPositioner.Open(iPosServer));
00057
00058
00059 User::LeaveIfError(iPositioner.SetRequestor(CRequestor::ERequestorService ,
00060 CRequestor::EFormatApplication ,
00061 KRequestor) );
00062
00063
00064 TPositionUpdateOptions udOpt;
00065 udOpt.SetUpdateInterval(TTimeIntervalMicroSeconds(KUpdateInterval));
00066
00067
00068
00069 udOpt.SetUpdateTimeOut(TTimeIntervalMicroSeconds(KUpdateTimeOut));
00070
00071
00072 udOpt.SetMaxUpdateAge(TTimeIntervalMicroSeconds(KCacheAge));
00073
00074
00075 udOpt.SetAcceptPartialUpdates(EFalse);
00076
00077
00078 User::LeaveIfError(iPositioner.SetUpdateOptions(udOpt) );
00079
00080
00081 iPositioner.NotifyPositionUpdate(iPositionInfo,iStatus);
00082 SetActive();
00083 }
00084
00085
00086 CFindMeActive::~CFindMeActive()
00087 {
00088 Cancel();
00089 iPositioner.Close();
00090 iPosServer.Close();
00091 }
00092
00093
00094 void CFindMeActive::DoCancel()
00095 {
00096 iPositioner.CancelRequest(EPositionerNotifyPositionUpdate );
00097 }
00098
00099
00100 void CFindMeActive::RunL()
00101 {
00102
00103 if( iStatus.Int() == KErrNone ||
00104 iStatus.Int() == KPositionPartialUpdate )
00105 {
00106
00107 iView->PrintPos();
00108 }
00109
00110
00111 iPositioner.NotifyPositionUpdate( iPositionInfo, iStatus );
00112 SetActive();
00113 }
00114