示例#1
0
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();
}
示例#3
0
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);
    }
}
示例#4
0
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();
	}
示例#6
0
/** 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);
      	 }
示例#7
0
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);

}