williamr@2: // Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies). williamr@2: // All rights reserved. williamr@2: // This component and the accompanying materials are made available williamr@4: // under the terms of "Eclipse Public License v1.0" williamr@2: // which accompanies this distribution, and is available williamr@4: // at the URL "http://www.eclipse.org/legal/epl-v10.html". williamr@2: // williamr@2: // Initial Contributors: williamr@2: // Nokia Corporation - initial contribution. williamr@2: // williamr@2: // Contributors: williamr@2: // williamr@2: // Description: williamr@2: // williamr@2: williamr@2: #ifndef __LBSCRITERIA_H__ williamr@2: #define __LBSCRITERIA_H__ williamr@2: williamr@2: #include williamr@2: williamr@2: williamr@2: class TPositionSelectionOrder williamr@2: /** williamr@2: This class is used as part of the TPositionCriteria class to chose a williamr@2: positioning module that will provide the desired quality of information. williamr@2: It allows position-quality-metrics to be given priorities, enabling them williamr@2: to be given preference in the decision. williamr@2: williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: /** williamr@2: Specifies the priority of selection parameters. williamr@2: */ williamr@2: enum TOrder williamr@2: { williamr@2: /** Don't care */ williamr@2: EOrderDontCare = 0, williamr@2: /** Default */ williamr@2: EOrderDefault = 1, williamr@2: /** Very low */ williamr@2: EOrderVeryLow = 25, williamr@2: /** Low */ williamr@2: EOrderLow = 50, williamr@2: /** Fairly low */ williamr@2: EOrderFairlyLow = 75, williamr@2: /** Medium */ williamr@2: EOrderMedium = 100, williamr@2: /** Fairly high */ williamr@2: EOrderFairlyHigh = 125, williamr@2: /** High */ williamr@2: EOrderHigh = 150, williamr@2: /** Very high */ williamr@2: EOrderVeryHigh = 175 williamr@2: }; williamr@2: williamr@2: /** williamr@2: Specifies the quality of position metrics that can be prioritized. williamr@2: */ williamr@2: enum TField williamr@2: { williamr@2: /** Time to first fix */ williamr@2: EFieldTimeToFirstFix, williamr@2: /** Time to next fix */ williamr@2: EFieldTimeToNextFix, williamr@2: /** Field Horizontal Accuracy */ williamr@2: EFieldHorizontalAccuracy, williamr@2: /** Field Vertical Accuracy */ williamr@2: EFieldVerticalAccuracy, williamr@2: /** Field cost */ williamr@2: EFieldCost, williamr@2: /** Field power */ williamr@2: EFieldPower, williamr@2: /** Number of fields */ williamr@2: EFieldNumFields, // Do not use this value. Must appear after all other field values. williamr@2: /** Last field */ williamr@2: EFieldLast = KMaxTInt8 // Do not use this value. Must appear at end. williamr@2: }; williamr@2: williamr@2: IMPORT_C TPositionSelectionOrder(); williamr@2: williamr@2: IMPORT_C TInt SetOrderTimeToFirstFix(TOrder aOrder); williamr@2: IMPORT_C TInt SetOrderTimeToNextFix(TOrder aOrder); williamr@2: williamr@2: IMPORT_C TInt SetOrderHorizontalAccuracy(TOrder aOrder); williamr@2: IMPORT_C TInt SetOrderVerticalAccuracy(TOrder aOrder); williamr@2: williamr@2: IMPORT_C TInt SetOrderCostIndicator(TOrder aOrder); williamr@2: IMPORT_C TInt SetOrderPowerConsumption(TOrder aOrder); williamr@2: williamr@2: IMPORT_C void ResetSelectionOrder(); williamr@2: IMPORT_C void ClearSelectionOrder(); williamr@2: williamr@2: IMPORT_C TUint NumSelectionItems() const; williamr@2: IMPORT_C TInt GetSelectionItem(TUint aIndex, williamr@2: TField& aField, williamr@2: TOrder& aOrder) const; williamr@2: williamr@2: protected: williamr@2: struct SItem williamr@2: /** williamr@2: Stores a field / priority pair. williamr@2: */ williamr@2: { williamr@2: /** A position quality metric identifier. */ williamr@2: TField iField; williamr@2: /** The priority given to the iField position quality metric. */ williamr@2: TOrder iOrder; williamr@2: }; williamr@2: williamr@2: protected: williamr@4: /** williamr@4: An internal method to add a selection criteria choice to the current set of williamr@4: criteria. williamr@4: */ williamr@2: TInt AddItem(TField aField, TOrder aOrder); williamr@2: williamr@2: protected: williamr@2: /** The number of selection items in the iItems array. */ williamr@2: TUint iNumItems; williamr@2: /** Array of users position quality priorities. */ williamr@2: SItem iItems[KPositionMaxSectionFields]; williamr@2: }; williamr@2: williamr@2: /** williamr@2: TPositionCriteriaBase derived classes class types williamr@2: // If the following line generates an error, too many fields have been added williamr@2: // to the TPositionSelectionOrder::TOrder enumeration, some must be removed williamr@2: // to maintain BC. williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: POSITION_COMPILE_TIME_ASSERT(TPositionSelectionOrder::EFieldNumFields <= KPositionMaxSectionFields); williamr@2: williamr@2: williamr@2: class TPositionCriteriaBase : public TPositionClassTypeBase williamr@2: /** williamr@2: The base class for classes used to store position module selection williamr@2: criteria information. williamr@2: williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: protected: williamr@2: IMPORT_C TPositionCriteriaBase(); williamr@2: IMPORT_C TPositionCriteriaBase(TPositionModuleInfo::TCapabilities aCapabilityMask); williamr@2: williamr@2: public: williamr@2: IMPORT_C void AddRequiredCapabilities(TPositionModuleInfo::TCapabilities aCapabilityMask); williamr@2: IMPORT_C void ClearRequiredCapabilities(); williamr@2: IMPORT_C TPositionModuleInfo::TCapabilities RequiredCapabilities() const; williamr@2: williamr@2: IMPORT_C void SetRequiredQuality(const TPositionQuality& aPosQuality); williamr@2: IMPORT_C void GetRequiredQuality(TPositionQuality& aPosQuality) const; williamr@2: williamr@2: IMPORT_C void SetSelectionOrder(const TPositionSelectionOrder& aSelectionOrder); williamr@2: IMPORT_C void GetSelectionOrder(TPositionSelectionOrder& aSelectionOrder) const; williamr@2: williamr@2: IMPORT_C void ResetCriteria(); williamr@2: IMPORT_C void ClearCriteria(); williamr@2: williamr@2: protected: williamr@2: /** The capabilities a positioning module must have. */ williamr@2: TPositionModuleInfo::TCapabilities iRequiredCaps; williamr@2: /** The quality required of a positioning module. */ williamr@2: TPositionQuality iRequiredQuality; williamr@2: /** The priorities assigned to the various quality metrics. */ williamr@2: TPositionSelectionOrder iSelectionOrder; williamr@2: }; williamr@2: williamr@2: williamr@2: class TPositionCriteria : public TPositionCriteriaBase williamr@2: /** williamr@2: The standard class criteria class for selecting a positioning module. williamr@2: williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C TPositionCriteria(); williamr@2: IMPORT_C TPositionCriteria(TPositionModuleInfo::TCapabilities aCapabilityMask); williamr@2: williamr@2: private: williamr@2: /** Unused variable for future expansion. */ williamr@2: TUint8 iReserved[4]; williamr@2: }; williamr@2: williamr@2: #endif // __LBSCRITERIA_H__