00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef __LBSCOMMON_H__
00022 #define __LBSCOMMON_H__
00023
00024 #include <e32std.h>
00025 #include <e32math.h>
00026 #include <LbsRequestor.h>
00027 #include <LbsClassTypes.h>
00028 #include <LbsErrors.h>
00029
00036
00037
00038
00039
00040
00041
00042 #define POSITION_COMPILE_TIME_ASSERT(aExpr) typedef char assert_type[(aExpr) ? 1 : -1]
00043
00047 const TInt KPositionMaxModuleName = 64;
00048
00053 const TUint KPositionMaxSizeQualityItem = sizeof(TInt64);
00054
00059 const TUint KPositionMaxSectionFields = 10;
00060
00065 typedef TUid TPositionModuleId;
00066
00070 const TPositionModuleId KPositionNullModuleId = {KNullUidValue};
00071
00072
00076 class TPositionClassTypeBase
00077 {
00078 public:
00083 IMPORT_C TUint32 PositionClassType() const;
00084
00089 IMPORT_C TUint PositionClassSize() const;
00090
00091 protected:
00092 TPositionClassTypeBase();
00093
00094 protected:
00096 TUint32 iPosClassType;
00098 TUint iPosClassSize;
00099 };
00100
00101
00108 class TPositionQualityItem
00109 {
00110 public:
00112 enum TResult
00113 {
00115 EIsBetter,
00117 EIsEqual,
00119 EIsWorse
00120 };
00121
00122 enum TValuePreference
00123 {
00124 EPreferSmallerValues,
00125 EPreferGreaterValues
00126 };
00127
00129 enum TDataType
00130 {
00131 EUndefined,
00132 ETInt8,
00133 ETInt16,
00134 ETInt32,
00135 ETInt64,
00136 ETUint8,
00137 ETUint16,
00138 ETUint32,
00139 ETReal32,
00140 ETReal64,
00141 ETTime,
00142 ETTimeIntervalMicroSeconds
00143 };
00144
00145 TPositionQualityItem();
00146
00147 TInt Compare(const TPositionQualityItem& aItem, TResult& aComparison) const;
00148
00149 void Set(TDataType aDataType, TValuePreference aValuePreference,
00150 const TAny* aData, TUint aSizeOfData);
00151
00152 TInt Get(TDataType aDataType, TAny* aData, TUint aSizeOfData) const;
00153
00154 TBool IsDefined() const;
00155
00156 private:
00157 TDataType iDataType;
00158 TValuePreference iScaleDirection;
00159 TUint8 iData[KPositionMaxSizeQualityItem];
00160 };
00161
00165 class TPositionQualityBase : public TPositionClassTypeBase
00166 {
00167 public:
00168
00180 IMPORT_C TInt Compare(const TPositionQualityBase& aPositionQuality,
00181 TInt aElementToCompare,
00182 TPositionQualityItem::TResult& aComparison) const;
00183
00188 IMPORT_C TBool IsDefined(TInt aElementId) const;
00189
00193 IMPORT_C TInt HighWaterMark() const;
00194 protected:
00195 IMPORT_C TPositionQualityBase();
00196
00197 IMPORT_C void ResetElement(TInt aElementId);
00198
00199 template <class T>
00200 inline void SetElement(TInt aElementId, TPositionQualityItem::TDataType aDataType,
00201 TPositionQualityItem::TValuePreference aValuePreference, T aData)
00202 {DoSetElement(aElementId, aDataType, aValuePreference, &aData, sizeof(T));}
00203
00204 template <class T>
00205 inline TInt GetElement(TInt aElementId, TPositionQualityItem::TDataType aDataType,
00206 T& aData) const
00207 {return DoGetElement(aElementId, aDataType, &aData, sizeof(T));}
00208
00209 private:
00210 IMPORT_C void DoSetElement(TInt aElementId, TPositionQualityItem::TDataType aDataType,
00211 TPositionQualityItem::TValuePreference aValuePreference,
00212 const TAny* aData, TUint aSizeOfData);
00213
00214 IMPORT_C TInt DoGetElement(TInt aElementId, TPositionQualityItem::TDataType aDataType,
00215 TAny* aData, TUint aSizeOfData) const;
00216 private:
00217 TFixedArray<TPositionQualityItem, KPositionMaxSectionFields> iPositionQualityData;
00218 TInt iHighwaterMark;
00219 };
00220
00224 class TPositionQuality : public TPositionQualityBase
00225 {
00226 public:
00231 enum TCostIndicator
00232 {
00234 ECostUnknown,
00239 ECostZero,
00245 ECostPossible,
00251 ECostCharge
00252 };
00253
00258 enum TPowerConsumption
00259 {
00264 EPowerUnknown,
00269 EPowerZero,
00275 EPowerLow,
00281 EPowerMedium,
00287 EPowerHigh
00288 };
00289
00290 public:
00295 IMPORT_C TPositionQuality();
00296
00303 IMPORT_C TTimeIntervalMicroSeconds TimeToFirstFix() const;
00304
00311 IMPORT_C TTimeIntervalMicroSeconds TimeToNextFix() const;
00312
00323 IMPORT_C TReal32 HorizontalAccuracy() const;
00324
00335 IMPORT_C TReal32 VerticalAccuracy() const;
00336
00342 IMPORT_C TCostIndicator CostIndicator() const;
00343
00349 IMPORT_C TPowerConsumption PowerConsumption() const;
00350
00356 IMPORT_C void SetTimeToFirstFix(TTimeIntervalMicroSeconds aTimeToFirstFix);
00357
00363 IMPORT_C void SetTimeToNextFix(TTimeIntervalMicroSeconds aTimeToNextFix);
00364
00370 IMPORT_C void SetHorizontalAccuracy(TReal32 aHorizontalAccuracy);
00371
00377 IMPORT_C void SetVerticalAccuracy(TReal32 aVerticalAccuracy);
00378
00384 IMPORT_C void SetCostIndicator(TCostIndicator aCost);
00385
00391 IMPORT_C void SetPowerConsumption(TPowerConsumption aPower);
00392
00393 private:
00395 TUint8 iReserved[16];
00396 };
00397
00398
00402 class TPositionModuleInfoBase : public TPositionClassTypeBase
00403 {
00404 protected:
00405 IMPORT_C TPositionModuleInfoBase();
00406 };
00407
00411 class TPositionModuleInfo : public TPositionModuleInfoBase
00412 {
00413 public:
00414
00420 typedef TUint32 TTechnologyType;
00424 enum _TTechnologyType
00425 {
00430 ETechnologyUnknown = 0,
00434 ETechnologyTerminal = 0x01,
00438 ETechnologyNetwork = 0x02,
00443 ETechnologyAssisted = 0x04
00444 };
00445
00451 typedef TUint32 TDeviceLocation;
00455 enum _TDeviceLocation
00456 {
00461 EDeviceUnknown = 0,
00465 EDeviceInternal = 0x01,
00469 EDeviceExternal = 0x02
00470 };
00471
00477 typedef TUint32 TCapabilities;
00481 enum _TCapabilities
00482 {
00484 ECapabilityNone = 0,
00490 ECapabilityHorizontal = 0x0001,
00496 ECapabilityVertical = 0x0002,
00502 ECapabilitySpeed = 0x0004,
00508 ECapabilityDirection = 0x0008,
00514 ECapabilitySatellite = 0x0010,
00519 ECapabilityCompass = 0x0020,
00524 ECapabilityNmea = 0x0040,
00530 ECapabilityAddress = 0x0080,
00535 ECapabilityBuilding = 0x0100,
00541 ECapabilityMedia = 0x0200
00542 };
00543
00544 public:
00548 IMPORT_C TPositionModuleInfo();
00549
00554 IMPORT_C TPositionModuleId ModuleId() const;
00555
00562 IMPORT_C TBool IsAvailable() const;
00563
00568 IMPORT_C void GetModuleName(TDes& aModuleName) const;
00569
00575 IMPORT_C void GetPositionQuality(TPositionQuality& aPosQuality) const;
00576
00583 IMPORT_C TTechnologyType TechnologyType() const;
00584
00590 IMPORT_C TDeviceLocation DeviceLocation() const;
00591
00597 IMPORT_C TCapabilities Capabilities() const ;
00598
00612 IMPORT_C TUint32 ClassesSupported(TPositionClassFamily aClassType) const;
00613
00618 IMPORT_C TVersion Version() const;
00619
00626 IMPORT_C void SetModuleId(TPositionModuleId aModuleId);
00627
00635 IMPORT_C void SetIsAvailable(TBool aIsAvailable);
00636
00643 IMPORT_C void SetModuleName(const TDesC& aModuleName);
00644
00652 IMPORT_C void SetPositionQuality(const TPositionQuality& aPosQuality);
00653
00662 IMPORT_C void SetTechnologyType(TTechnologyType aTechnologyType);
00663
00671 IMPORT_C void SetDeviceLocation(TDeviceLocation aDeviceLocation);
00672
00680 IMPORT_C void SetCapabilities(TCapabilities aDeviceCapabilities);
00681
00692 IMPORT_C void SetClassesSupported(TPositionClassFamily aClassType,
00693 TUint32 aSupportedClasses);
00694
00701 IMPORT_C void SetVersion(TVersion aVersion);
00702
00703 protected:
00705 TPositionModuleId iModuleId;
00707 TBool iIsAvailable;
00709 TBuf<KPositionMaxModuleName> iModuleName;
00711 TPositionQuality iPosQuality;
00713 TTechnologyType iTechnologyType;
00715 TDeviceLocation iDeviceLocation;
00717 TCapabilities iCapabilities;
00719 TFixedArray<TUint32, EPositionLastFamily> iSupportedClassTypes;
00721 TVersion iVersion;
00722
00723 private:
00725 TUint8 iReserved[16];
00726 };
00727
00728
00732 class TPositionModuleStatusBase : public TPositionClassTypeBase
00733 {
00734 protected:
00735 IMPORT_C TPositionModuleStatusBase();
00736 };
00737
00741 class TPositionModuleStatus : public TPositionModuleStatusBase
00742 {
00743 public:
00744
00749 typedef TInt TDeviceStatus;
00750
00754 enum _TDeviceStatus
00755 {
00757 EDeviceUnknown,
00759 EDeviceError,
00765 EDeviceDisabled,
00770 EDeviceInactive,
00778 EDeviceInitialising,
00787 EDeviceStandBy,
00792 EDeviceReady,
00797 EDeviceActive
00798 };
00799
00804 typedef TInt TDataQualityStatus;
00805
00809 enum _TDataQualityStatus
00810 {
00816 EDataQualityUnknown,
00826 EDataQualityLoss,
00832 EDataQualityPartial,
00834 EDataQualityNormal
00835 };
00836
00840 IMPORT_C TPositionModuleStatus();
00841
00846 IMPORT_C TDeviceStatus DeviceStatus() const;
00847
00853 IMPORT_C TDataQualityStatus DataQualityStatus() const;
00854
00861 IMPORT_C void SetDeviceStatus(TDeviceStatus aStatus);
00862
00869 IMPORT_C void SetDataQualityStatus(TDataQualityStatus aStatus);
00870
00871 protected:
00873 TDeviceStatus iDeviceStatus;
00875 TDataQualityStatus iDataQualityStatus;
00876
00877 private:
00879 TUint8 iReserved[8];
00880 };
00881
00882
00886 class TPositionModuleStatusEventBase : public TPositionClassTypeBase
00887 {
00888 public:
00894 typedef TUint32 TSystemModuleEvent;
00895
00899 enum _TSystemModuleEvent
00900 {
00902 ESystemUnknown = 0,
00907 ESystemError,
00912 ESystemModuleInstalled,
00914 ESystemModuleRemoved
00915 };
00916
00923 typedef TUint32 TModuleEvent;
00924
00928 enum _TModuleEvent
00929 {
00931 EEventNone = 0,
00933 EEventDeviceStatus = 0x01,
00935 EEventDataQualityStatus = 0x02,
00937 EEventSystemModuleEvent = 0x04,
00939 EEventAll = EEventDeviceStatus |
00940 EEventDataQualityStatus |
00941 EEventSystemModuleEvent
00942 };
00943
00944 protected:
00948 IMPORT_C TPositionModuleStatusEventBase();
00956 IMPORT_C TPositionModuleStatusEventBase(TModuleEvent aRequestedEventMask);
00957
00958 public:
00965 IMPORT_C void SetRequestedEvents(TModuleEvent aRequestedEventMask);
00966
00971 IMPORT_C TModuleEvent RequestedEvents() const;
00972
00979 IMPORT_C void SetOccurredEvents(TModuleEvent aOccurredEventMask);
00980
00992 IMPORT_C TModuleEvent OccurredEvents() const;
00993
00998 IMPORT_C TPositionModuleId ModuleId() const;
00999
01006 IMPORT_C void SetModuleId(TPositionModuleId aModuleId);
01007
01014 IMPORT_C void SetSystemModuleEvent(TSystemModuleEvent aSystemModuleEvent);
01015
01020 IMPORT_C TSystemModuleEvent SystemModuleEvent() const;
01021
01022 protected:
01023 IMPORT_C virtual void DoReset(TInt aSizeOfClass);
01024
01025 private:
01026 friend class RPositionServer;
01027 void Reset();
01028
01029 protected:
01031 TModuleEvent iRequestedEvents;
01033 TModuleEvent iOccurredEvents;
01035 TSystemModuleEvent iSystemModuleEvent;
01037 TPositionModuleId iModuleId;
01038 };
01039
01043 class TPositionModuleStatusEvent : public TPositionModuleStatusEventBase
01044 {
01045 public:
01049 IMPORT_C TPositionModuleStatusEvent();
01050
01056 IMPORT_C TPositionModuleStatusEvent(TModuleEvent aRequestedEventMask);
01057
01065 IMPORT_C void SetModuleStatus(const TPositionModuleStatus& aModuleStatus);
01066
01071 IMPORT_C void GetModuleStatus(TPositionModuleStatus& aModuleStatus) const;
01072
01073 protected:
01074 IMPORT_C virtual void DoReset(TInt aSizeOfClass);
01075
01076 protected:
01078 TPositionModuleStatus iModuleStatus;
01079 };
01080
01081
01090 class TPositionUpdateOptionsBase : public TPositionClassTypeBase
01091 {
01092 protected:
01093 IMPORT_C TPositionUpdateOptionsBase();
01094 IMPORT_C TPositionUpdateOptionsBase(TTimeIntervalMicroSeconds aInterval,
01095 TTimeIntervalMicroSeconds aTimeOut = TTimeIntervalMicroSeconds(0),
01096 TTimeIntervalMicroSeconds aMaxAge = TTimeIntervalMicroSeconds(0));
01097
01098 public:
01123 IMPORT_C void SetUpdateInterval(TTimeIntervalMicroSeconds aInterval);
01124
01143 IMPORT_C void SetUpdateTimeOut(TTimeIntervalMicroSeconds aTimeOut);
01144
01160 IMPORT_C void SetMaxUpdateAge(TTimeIntervalMicroSeconds aMaxAge);
01161
01171 IMPORT_C TTimeIntervalMicroSeconds UpdateInterval() const;
01172
01182 IMPORT_C TTimeIntervalMicroSeconds UpdateTimeOut() const;
01183
01193 IMPORT_C TTimeIntervalMicroSeconds MaxUpdateAge() const;
01194
01195 protected:
01197 TTimeIntervalMicroSeconds iUpdateInterval;
01199 TTimeIntervalMicroSeconds iUpdateTimeOut;
01201 TTimeIntervalMicroSeconds iMaxUpdateAge;
01202
01203 private:
01205 TUint8 iReserved[8];
01206 };
01207
01211 class TPositionUpdateOptions : public TPositionUpdateOptionsBase
01212 {
01213 public:
01214
01218 IMPORT_C TPositionUpdateOptions();
01219
01246 IMPORT_C TPositionUpdateOptions(TTimeIntervalMicroSeconds aInterval,
01247 TTimeIntervalMicroSeconds aTimeOut = TTimeIntervalMicroSeconds(0),
01248 TTimeIntervalMicroSeconds aMaxAge = TTimeIntervalMicroSeconds(0),
01249 TBool aAcceptPartialUpdates = EFalse);
01250
01265 IMPORT_C void SetAcceptPartialUpdates(TBool aAcceptPartialUpdates);
01266
01277 IMPORT_C TBool AcceptPartialUpdates() const;
01278
01279 protected:
01281 TBool iAcceptPartialUpdates;
01282
01283 private:
01285 TUint8 iReserved[16];
01286 };
01287
01288
01289
01290 #endif