void CLbsTrackingTimerBase::InitializePSYs(RArray<TPositionModuleInfo*> aModInfoArray, const TInt64 aDefaultMinInterval) { qDebug() << "CLbsTrackingTimerBase::InitializePSYs START " << iTrackType ; TInt insertCount = 0; iMinUpdateInterval = aDefaultMinInterval; for (int i = 0; i < aModInfoArray.Count(); i++) { //The PSYs are self managing, no need for this check //if(aModInfoArray[i]->IsAvailable()) // { TPositionQuality quality; aModInfoArray[i]->GetPositionQuality(quality); if (0 == i) iMinUpdateInterval = quality.TimeToNextFix(); else if (iMinUpdateInterval > quality.TimeToNextFix()) iMinUpdateInterval = quality.TimeToNextFix(); CTrackingPsy *trackingPsy = CTrackingPsy::NewL(aModInfoArray[i], iContainer, this); if (trackingPsy) { iTrackingPsys.Insert(trackingPsy, insertCount++); qDebug() << "CLbsTrackingTimerBase::InitializePSYs inserted " << trackingPsy->iPsyName ; } // } } qDebug() << "CLbsTrackingTimerBase::InitializePSYs END - insertcount = " << insertCount << " type" << iTrackType; }
void CSelfManagingPsy::IssueRequest(TTimeIntervalMicroSeconds aUpdInterval, TTimeIntervalMicroSeconds aTimeOut) { qDebug() << "CSelfManagingPsy::IssueRequest " << iPsyName ; if (IsActive()) Cancel(); TPositionQuality quality; iPsyModInfo->GetPositionQuality(quality); if (aUpdInterval < quality.TimeToNextFix()) aUpdInterval = quality.TimeToNextFix(); if (aTimeOut < quality.TimeToFirstFix()) aTimeOut = quality.TimeToFirstFix(); iUpdInterval = aUpdInterval; iTimeout = aTimeOut; if (!iPositioner) { qDebug() << "CSelfManagingPsy::IssueRequest " << iPsyName << " POSITIONER NOT AVBL"; return; } if (!iPsyAvailabilityStatus) { //PSY is not avbl so no point calling NotifyPositionUpdate //If the PSY becomes available, then NotifyPositionUpdate //will be called from NotifyPsyStatusChange qDebug() << "CSelfManagingPsy::IssueRequest " << iPsyName << " NOT AVBL"; return; } TPositionUpdateOptions updateOptions(iUpdInterval, iTimeout); iPositioner->SetUpdateOptions(updateOptions); iPositioner->NotifyPositionUpdate(iPosInfo, iStatus); SetActive(); }
void CLbsTrackTimerBase::PsyInstalled(TPositionModuleInfo* aModInfo) { TPositionQuality quality; aModInfo->GetPositionQuality(quality); if (0 == iTrackingPsys.Count()) iMinUpdateInterval = quality.TimeToNextFix(); else if (iMinUpdateInterval > quality.TimeToNextFix()) iMinUpdateInterval = quality.TimeToNextFix(); CTrackingPsy *trackingPsy = CTrackingPsy::NewL(aModInfo, iContainer, this); if (trackingPsy) { iTrackingPsys.Insert(trackingPsy, iTrackingPsys.Count()); iCurrentState->PsyInstalled(trackingPsy); } }
void CLbsTrackingTimerBase::PsyInstalled(TPositionModuleInfo* aModInfo) { TPositionQuality quality; aModInfo->GetPositionQuality(quality); if (0 == iTrackingPsys.Count()) iMinUpdateInterval = quality.TimeToNextFix(); else if (iMinUpdateInterval > quality.TimeToNextFix()) iMinUpdateInterval = quality.TimeToNextFix(); CTrackingPsy *trackingPsy = CTrackingPsy::NewL(aModInfo, iContainer, this); if (trackingPsy) { iTrackingPsys.Insert(trackingPsy, iTrackingPsys.Count()); if (iStartUpdatesActive) { qDebug() << "CLbsTrackingTimerBase::PsyInstalled inserted & request issued " << trackingPsy->iPsyName ; trackingPsy->IssueRequest(iUpdateInterval); } else { qDebug() << "CLbsTrackingTimerBase::PsyInstalled inserted " << trackingPsy->iPsyName ; } } }
/** * 2nd phase constructor * * @param aConstructionParameters Construction parameters for CPositioner. */ void CGpsPositioner::ConstructL(TAny* aConstructionParameters) { TRACESTRING("CGpsPositioner::ConstructL") // Must call BaseConstructL first thing during construction. BaseConstructL(aConstructionParameters); iEnvironment = CAgpsEnvironment::NewL(); iEnvironment->RegisterPSYL(this); iEnvironment->GetEnvCriteriaL(iCriteria, TUid::Uid(KPosGPSPSYImplUid)); iInactivityTimeout = iEnvironment->GetInactivityTimeoutL(TUid::Uid(KPosGPSPSYImplUid)); iRequestHandler = iEnvironment->GetRequestHandler(); // Get the request timeout from the LS: if(iEnvironment->ProfileInUse()) // default timeout was taken from profile, so let LS know { TPositionQuality quality; iCriteria.GetRequiredQuality(quality); iTimeOutInterval = quality.TimeToFirstFix(); SetPsyDefaultUpdateTimeOut(iTimeOutInterval); } iNetRegStatus.OpenL(); }
/** Create the module information depending on module id(i'e either agps_manager or network location manager) Fills a module info class/structure with values depending on the module id. @param aModuleId module id within the ini file @param aModInfo The modified module info structure. */ EXPORT_C void T_LbsUtils::Create_ModuleInfoL(TPositionModuleId aModuleId, TPositionModuleInfo& aModInfo) { TPositionQuality posQuality; // Use these values if the module is a-gps manager if (aModuleId == (TUid::Uid(APGS_MODINFO_MODULE_ID))) { aModInfo.SetModuleId(TUid::Uid(APGS_MODINFO_MODULE_ID)); aModInfo.SetIsAvailable(AGPS_MODINFO_IS_AVAILABLE); aModInfo.SetModuleName(AGPS_MODINFO_MOD_NAME); aModInfo.SetTechnologyType(AGPS_MODINFO_TECHNOLOGY_TYPE); aModInfo.SetDeviceLocation(AGPS_MODINFO_DEVICE_LOCATION); aModInfo.SetCapabilities(AGPS_MODINFO_CAPABILITIES); // Classes Supported - this is a binary bitmap, but support for each class // has to be set individually. TInt supportedClasses = AGPS_MODINFO_CLASSES_SUPPORTED_POSITION_FAMILY; TPositionClassFamily currentClass = EPositionInfoFamily; while(currentClass <= EPositionUpdateOptionsFamily) { aModInfo.SetClassesSupported(currentClass, supportedClasses & 1); supportedClasses >>= 1; currentClass = static_cast<TPositionClassFamily>(static_cast<TInt>(currentClass) + 1); } aModInfo.SetVersion(AGPS_MODINFO_VERSION); posQuality.SetTimeToFirstFix(AGPS_MODINFO_TIME_TO_FIRST_FIX); posQuality.SetTimeToNextFix(AGPS_MODINFO_TIME_TO_NEXT_FIX); posQuality.SetHorizontalAccuracy(AGPS_MODINFO_HORIZONTAL_ACCURACY); posQuality.SetVerticalAccuracy(AGPS_MODINFO_VERTICAL_ACCURACY); posQuality.SetCostIndicator(AGPS_MODINFO_COST_INDICATOR); posQuality.SetPowerConsumption(AGPS_MODINFO_POWER_CONSUMPTION); aModInfo.SetPositionQuality(posQuality); }
EXPORT_C TBool T_LbsUtils::Compare_PositionQuality(TPositionQuality& aQualitySideA, TPositionQuality& aQualitySideB) /** Compare two position quality structures. @param aQualitySideA @param aQualitySideB */ { // Check if each quality contains the same number of assigned quality items. if (aQualitySideA.HighWaterMark() != aQualitySideB.HighWaterMark()) { return EFalse; } // Compare each quality item. TInt endId = aQualitySideA.HighWaterMark(); for (TInt i = 0; i <= endId; i++) { // Element for each side must be defined. if (!aQualitySideA.IsDefined(i) || !aQualitySideB.IsDefined(i)) { return EFalse; } // Now compare the actual element. TPositionQualityItem::TResult res; if (KErrNone != aQualitySideA.Compare(aQualitySideB, i, res)) { return EFalse; } if (TPositionQualityItem::EIsEqual != res) { return EFalse; } } return ETrue; }
// --------------------------------------------------------- // CT_LbsClientPosTp76::CheckModuleInfoL // // (other items were commented in a header). // --------------------------------------------------------- // void CT_LbsClientPosTp76::CheckModuleInfoL(const TPositionModuleInfo& dbInfo, const TPositionModuleInfo& clientInfo) { _LIT(KNotSame, "Module Info from settings is not the same as when read by GetModuleInfoById"); if (dbInfo.IsAvailable() != clientInfo.IsAvailable() || dbInfo.ModuleId() != clientInfo.ModuleId() || dbInfo.DeviceLocation() != clientInfo.DeviceLocation() || dbInfo.Capabilities() != clientInfo.Capabilities() || dbInfo.TechnologyType() != clientInfo.TechnologyType() || dbInfo.Version().iBuild != clientInfo.Version().iBuild || dbInfo.Version().iMajor != clientInfo.Version().iMajor || dbInfo.Version().iMinor != clientInfo.Version().iMinor || dbInfo.Version().Name() != clientInfo.Version().Name() || dbInfo.ClassesSupported(EPositionInfoFamily) != clientInfo.ClassesSupported(EPositionInfoFamily)) { LogErrorAndLeaveL(KNotSame); } TPositionQuality dbQuality; TPositionQuality clientQuality; dbInfo.GetPositionQuality(dbQuality); clientInfo.GetPositionQuality(clientQuality); if (dbQuality.TimeToFirstFix() != clientQuality.TimeToFirstFix() || dbQuality.TimeToNextFix() != clientQuality.TimeToNextFix() || dbQuality.HorizontalAccuracy() != clientQuality.HorizontalAccuracy() || dbQuality.VerticalAccuracy() != clientQuality.VerticalAccuracy() || dbQuality.CostIndicator() != clientQuality.CostIndicator() || dbQuality.PowerConsumption() != clientQuality.PowerConsumption() ) { LogErrorAndLeaveL(KNotSame); } TBuf<30> name1; TBuf<30> name2; dbInfo.GetModuleName(name1); clientInfo.GetModuleName(name2); if (name1 != name2) { LogErrorAndLeaveL(KNotSame); } }
void CTe_LbsIniFileReader::ReadPosQualityCriteria(TPositionQuality& aPosQuality) { TInt intValue; TInt64 int64Value; TReal32 real32Value; // Get the Time To First Fix FindVar(KTimeToFirstFixStr,int64Value); __ASSERT_ALWAYS( int64Value <= KMaxTInt, User::Panic(KLbsNetPsyTestPanic, ELbsPanicBadFirstFixValue)); if(int64Value>=0) { int64Value *= KMilliSecToMicroSecConverter; aPosQuality.SetTimeToFirstFix(int64Value); } else { aPosQuality.SetTimeToFirstFix(0); } // Get the Time To Next Fix FindVar(KTimeToNextFixStr,int64Value); __ASSERT_ALWAYS( int64Value <= KMaxTInt, User::Panic(KLbsNetPsyTestPanic, ELbsPanicBadNextFixValue)); if(int64Value>=0) { int64Value *= KMilliSecToMicroSecConverter; aPosQuality.SetTimeToNextFix(int64Value); } else { aPosQuality.SetTimeToNextFix(0); } // Get the Horizontal Accuracy FindVar(KHorizontalAccuracyStr,real32Value); if(real32Value>=0) { aPosQuality.SetHorizontalAccuracy(real32Value); } else { aPosQuality.SetHorizontalAccuracy(0); } // Get the Vertical Accuracy FindVar(KVerticalAccuracyStr,real32Value); if(real32Value>=0) { aPosQuality.SetVerticalAccuracy(real32Value); } else { aPosQuality.SetVerticalAccuracy(0); } // Get the cost indicator FindVar(KCostIndicatorStr,intValue); TPositionQuality::TCostIndicator costIndicator; switch(intValue) { case 1: costIndicator = TPositionQuality::ECostZero; break; case 2: costIndicator = TPositionQuality::ECostPossible; break; case 3: costIndicator = TPositionQuality::ECostCharge; break; default: costIndicator = TPositionQuality::ECostUnknown; break; } aPosQuality.SetCostIndicator(costIndicator); // Get the power consumption FindVar(KPowerConsumptionStr,intValue); TPositionQuality::TPowerConsumption powerConsumption; switch(intValue) { case 1: powerConsumption = TPositionQuality::EPowerZero; break; case 2: powerConsumption = TPositionQuality::EPowerLow; break; case 3: powerConsumption = TPositionQuality::EPowerMedium; break; case 4: powerConsumption = TPositionQuality::EPowerHigh; break; default: powerConsumption = TPositionQuality::EPowerUnknown; break; } aPosQuality.SetPowerConsumption(powerConsumption); }