lbstest/lbstestproduct/lbstestutils/inc/ctlbsconfigreader.h
changeset 36 b47902b73a93
child 49 5f20f71a57a3
equal deleted inserted replaced
35:a2efdd544abf 36:b47902b73a93
       
     1 // Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
       
     2 // All rights reserved.
       
     3 // This component and the accompanying materials are made available
       
     4 // under the terms of "Eclipse Public License v1.0"
       
     5 // which accompanies this distribution, and is available
       
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     7 //
       
     8 // Initial Contributors:
       
     9 // Nokia Corporation - initial contribution.
       
    10 //
       
    11 // Contributors:
       
    12 //
       
    13 // Description:
       
    14 // @file ctlbsconfigreader.h
       
    15 // This is the header file which contains the ini file configuration reader classes
       
    16 // 
       
    17 //
       
    18 
       
    19 #ifndef __CT_LBS_CONFIG_READER_H__
       
    20 #define __CT_LBS_CONFIG_READER_H__
       
    21 
       
    22 
       
    23 // Epoc includes
       
    24 #include <e32cmn.h>
       
    25 
       
    26 // LBS includes
       
    27 #include <lbs.h>
       
    28 #include <lbscommon.h>
       
    29 #include <lbspositioninfo.h>
       
    30 #include <lbs/lbslocdatasourcegpsbase.h>
       
    31 
       
    32 // LBS test includes
       
    33 #include <lbs/test/tlbsutils.h>
       
    34 
       
    35 // Forward Declaration
       
    36 
       
    37 
       
    38 
       
    39 const TInt KMaxSentence = 200;
       
    40 const TInt KMaxFields = 20;
       
    41 const TInt KMaxIniFileBuffer = 100;
       
    42 const TInt KMaxConfigReaderIniFileName = 100;
       
    43 
       
    44 class CConfigReaderBase : public CBase
       
    45 	{
       
    46 public:
       
    47     virtual ~CConfigReaderBase();
       
    48 
       
    49 	/** Main entry function which reads the ini file, fills out the data items defined in the
       
    50 		derived classes. Once NewL as been called to construct the object, this should then be
       
    51 		called. */
       
    52 	void ProcessL();
       
    53 
       
    54 protected:
       
    55 	/** Converts a string to a TInt value. */
       
    56 	void ExtractValueL(const TPtrC8& aField, TInt& aValue);
       
    57 	
       
    58 	/** Converts a string to a TReal32 value. */
       
    59 	void ExtractValueL(const TPtrC8& aField, TReal32& aValue);
       
    60 	
       
    61 	/** Converts a string to a TReal64 value. */
       
    62 	void ExtractValueL(const TPtrC8& aField, TReal64& aValue);
       
    63 
       
    64 //	void ExtractDegreesL(const TPtrC8& aField, TReal64& aDegrees); this maybe handy so we can have lat, long in degrees not raw real numbers...
       
    65 //	void ExtractTimeL(const TPtrC8& aTime, TDateTime& aTheTime);
       
    66 //	void ExtractDateL(const TPtrC8& aDate, TDateTime& aTheDate);
       
    67 
       
    68 //	Derived classes provide the implementation.
       
    69 	/** Parses a full sentence read from the ini file. */
       
    70 	virtual void HandleSentenceL()=0;
       
    71 	
       
    72 	/** Fills the data item (detailed in the derived class) with default values. */
       
    73 	virtual void DefaultData()=0;
       
    74 	
       
    75 	/** Fills the data item (detailed in the derived class) with values parsed from the sentence. */
       
    76 	virtual void ExtractDataL()=0;
       
    77 	
       
    78 	CConfigReaderBase(const TDesC &aConfigFileName);
       
    79 	
       
    80 	CConfigReaderBase(const TDesC& aConfigFileName, const TDesC& aConfigSection);
       
    81 	
       
    82 private:
       
    83 	/** Adds valid sentence character to the field. Once the field delimiter is found the field
       
    84 		is appended to the field array. */
       
    85 	void AppendFieldChar(TUint aChar);
       
    86 	
       
    87 	/** Process sentences read from the ini file buffer. A complete valid sentence is passed
       
    88 		to HandeSentenceL() to allow the derived class to process the sentence fields into
       
    89 		it's data items. */
       
    90 	void ProcessStringL(const TDesC8& aData);
       
    91 
       
    92 private:	
       
    93 //	enum TReadState {EWantStart, EWantTerminator};
       
    94 
       
    95 	enum TReadState {/*	EStart, */
       
    96 						EStartSection,
       
    97 						EProcessSection,
       
    98 						EStartSentence,
       
    99 						EProcessSentence,
       
   100 						EHalt};
       
   101 
       
   102 
       
   103 	//const TDesC iConfigFileName;	// can we try this, but we will not be able to add the path
       
   104 	/** Configuration ini filename to open and read. */
       
   105 	TBuf<KMaxConfigReaderIniFileName> iConfigFileName;
       
   106 	TBuf<KMaxSentence> iConfigSection;
       
   107 	
       
   108 	/** State machine variable used while processing a sentence. */
       
   109 	TReadState iReadState;
       
   110 
       
   111 	/** The sentence buffer, to store a valid sentence ready for processing. */
       
   112 	TBuf8<KMaxSentence> iSentence;
       
   113 	
       
   114 
       
   115 	TBuf8<KMaxSentence> iReadSection;
       
   116 
       
   117 protected:
       
   118 	/** Field array. Each field is delimited by a ',' or '*' and will be converted into the
       
   119 		member variable of the data item defined in the derived class. */
       
   120 	TPtrC8 iFields[KMaxFields];
       
   121 	
       
   122 	/** Number of fields in the field array. */
       
   123 	TInt iNumFields;
       
   124 	
       
   125 	/** Where the field starts in the sentence string. */
       
   126 	TInt iFieldStart;
       
   127 	
       
   128 	/** Length of the field. */
       
   129 	TInt iFieldLength;
       
   130 	};
       
   131 
       
   132 
       
   133 
       
   134 // Default values for TPosition,
       
   135 #define DEFAULT_NOTIFY_POS_UPDATE_LATITUDE                 49.2
       
   136 #define DEFAULT_NOTIFY_POS_UPDATE_LONGITUDE                3.5
       
   137 #define DEFAULT_NOTIFY_POS_UPDATE_ALTITUDE                 50.0
       
   138 #define DEFAULT_NOTIFY_POS_UPDATE_HORIZONTAL_ACCURACY      2.0
       
   139 #define DEFAULT_NOTIFY_POS_UPDATE_VERTICAL_ACCURACY        3.0
       
   140 
       
   141 // TCourse 
       
   142 #define DEFAULT_NOTIFY_POS_UPDATE_SPEED                    26.0
       
   143 #define DEFAULT_NOTIFY_POS_UPDATE_HEADING                  25.0
       
   144 #define DEFAULT_NOTIFY_POS_UPDATE_VERTICAL_SPEED           20.0
       
   145 #define DEFAULT_NOTIFY_POS_UPDATE_COURSE                   30.0
       
   146 #define DEFAULT_NOTIFY_POS_UPDATE_SPEED_ACCURACY           2.0
       
   147 #define DEFAULT_NOTIFY_POS_UPDATE_HEADING_ACCURACY         10.0
       
   148 #define DEFAULT_NOTIFY_POS_UPDATE_VERTICAL_SPEED_ACCURACY  3.0
       
   149 #define DEFAULT_NOTIFY_POS_UPDATE_COURSE_ACCURACY          4.0
       
   150 
       
   151 // TSatelliteData - first satellite
       
   152 #define DEFAULT_NOTIFY_POS_UPDATE_SATELLITE_ID1            10
       
   153 #define DEFAULT_NOTIFY_POS_UPDATE_AZIMUTH1                 50.0
       
   154 #define DEFAULT_NOTIFY_POS_UPDATE_ELEVATION1               27.0
       
   155 #define DEFAULT_NOTIFY_POS_UPDATE_IS_USED1                 ETrue
       
   156 #define DEFAULT_NOTIFY_POS_UPDATE_SIGNAL_STRENGTH1         4
       
   157 
       
   158 // TSatelliteData - second stellite
       
   159 #define DEFAULT_NOTIFY_POS_UPDATE_SATELLITE_ID2            11
       
   160 #define DEFAULT_NOTIFY_POS_UPDATE_AZIMUTH2                 47.0
       
   161 #define DEFAULT_NOTIFY_POS_UPDATE_ELEVATION2               30.0
       
   162 #define DEFAULT_NOTIFY_POS_UPDATE_IS_USED2                 EFalse
       
   163 #define DEFAULT_NOTIFY_POS_UPDATE_SIGNAL_STRENGTH2         3
       
   164 
       
   165 //TDetailedErrorReport
       
   166 #define DEFAULT_SD_OF_LONG_ERROR                           5.0
       
   167 #define DEFAULT_SD_OF_LAT_ERROR                            6.0
       
   168 #define DEFAULT_SD_OF_ALT_ERROR                            7.0 
       
   169 #define DEFAULT_SD_OF_SEMI_MAJOR_AXIS_ERROR                8.0
       
   170 #define DEFAULT_SD_OF_SEMI_MINOR_AXIS_ERROR                9.0
       
   171 #define DEFAULT_ORIEN_OF_SEMI_MAJOR_AXIS_ERROR             10.0
       
   172 #define DEFAULT_RMS_VAL_OF_SD_OF_RANGE                     11.0
       
   173 
       
   174 #define DEFAULT_GEOIDAL_SEPARATION                         12.0
       
   175 #define DEFAULT_MAGNETIC_VARIATION                         13.0
       
   176 #define DEFAULT_COURSE_OVER_GROUND_MAGNETIC                14.0
       
   177 //TGpsTimingMeasurementData
       
   178 #define DEFAULT_GPS_TIMING_OF_CELL_MsPart                  16383                          
       
   179 #define DEFAULT_GPS_TIMING_OF_CELL_LsPart                  4294967295UL 
       
   180 #define DEFAULT_REFERENCE_IDENTITY                         511
       
   181 #define DEFAULT_SFN                                        4095
       
   182 
       
   183 
       
   184 class CUpdateConfigReader : public CConfigReaderBase
       
   185 	{
       
   186 public:
       
   187 
       
   188 	enum TUpdateFields
       
   189 		{
       
   190 		EUpdateType = 0,	// Must be present
       
   191 		EUpdateRepeat,
       
   192 		ENumOfMeasurements,
       
   193 
       
   194 		// TCoordinate
       
   195 		EPosLatitude,			/** TCoordinate.iLatitude, TReal64 */
       
   196 		EPosLongitude,			/** TCoordinate.iLongitude, TReal64 */
       
   197 		EPosAltitude,			/** TCoordinate.iAltitude, TReal32 */
       
   198 	
       
   199 		// TLocalitiy
       
   200 		EPosHorzAccuracy,		/** TLocality.iHorizontalAccuracy, TReal32 */
       
   201 		EPosVertAccuracy,		/** TLocality.iVerticalAccuracy, TReal32 */
       
   202 
       
   203 		// Optional
       
   204 		EUpdateErr,
       
   205 		EUpdateDelay			/** Time to delay, can be negative to force early update */
       
   206 	};
       
   207 
       
   208 
       
   209 	static CUpdateConfigReader* NewL(const TDesC &aConfigFileName, const TDesC& aConfigSection, RPointerArray<TLbsModuleUpdateItem>& aUpdateArr);
       
   210 
       
   211 protected:
       
   212 	void HandleSentenceL();
       
   213 
       
   214 	void DefaultData();
       
   215 	void ExtractDataL();
       
   216 		
       
   217 private:
       
   218 	CUpdateConfigReader(const TDesC &aConfigFileName, const TDesC& aConfigSection, RPointerArray<TLbsModuleUpdateItem>& aUpdateArr);
       
   219 	void ConstructL();  
       
   220 
       
   221 	RPointerArray<TLbsModuleUpdateItem>& iUpdateArr;
       
   222 	TLbsModuleUpdateItem* iUpdate;
       
   223 	};
       
   224 
       
   225 
       
   226 
       
   227 
       
   228 class CPosInfoConfigReader : public CConfigReaderBase
       
   229 	{
       
   230 public:
       
   231 
       
   232 	enum TPosInfoFields
       
   233 		{
       
   234 		EPosType = 0,	// Must be present
       
   235 		EposRepeat,
       
   236 
       
   237 		// TCoordinate
       
   238 		EPosLatitude,			/** TCoordinate.iLatitude, TReal64 */
       
   239 		EPosLongitude,			/** TCoordinate.iLongitude, TReal64 */
       
   240 		EPosAltitude,			/** TCoordinate.iAltitude, TReal32 */
       
   241 		EPosDatum,				/** TCoordinate.iDatum, TUid */
       
   242 	
       
   243 		// TLocalitiy
       
   244 		EPosHorzAccuracy,		/** TLocality.iHorizontalAccuracy, TReal32 */
       
   245 		EPosVertAccuracy,		/** TLocality.iVerticalAccuracy, TReal32 */
       
   246 	
       
   247 		// TPosition
       
   248 	//	EPosTime,	/** TPosition.iTime, TTime */	// see comment below
       
   249 	
       
   250 		// TCourse
       
   251 		EPosSpeed,				/** TCourse.iSpeed, TReal32 */
       
   252 		EPosHeading,			/** TCourse.iHeading, TReal32 */
       
   253 		EPosSpeedAccuracy,		/** TCourse.iSpeedAccuracy, TReal32 */
       
   254 		EPosHeadingAccuracy,	/** TCourse.iHeadingAccuracy, TReal32 */
       
   255 	};
       
   256 
       
   257 
       
   258 	static CPosInfoConfigReader* NewL(const TDesC &aConfigFileName, const TDesC& aConfigSection, RPointerArray<TAny>& aPosInfoArr);
       
   259 
       
   260 protected:
       
   261 	void HandleSentenceL();
       
   262 
       
   263 	void DefaultData();
       
   264 	void ExtractDataL();
       
   265 		
       
   266 private:
       
   267 	CPosInfoConfigReader(const TDesC &aConfigFileName, const TDesC& aConfigSection, RPointerArray<TAny>& aPosInfoArr);
       
   268 	void ConstructL();  
       
   269 
       
   270 	RPointerArray<TAny>& iPosInfoArr;
       
   271 	TPositionInfoBase* iPosInfo;
       
   272 	};
       
   273 
       
   274 
       
   275 
       
   276 /** CModuleStatusConfigReader is a reader class to process module status sentences.
       
   277 	Once processed the aModuleStatus item will be filled with field values held in
       
   278 	the sentence.
       
   279 	
       
   280 	The supported sentence is "modstatus", which MUST start with '$' and end with '*',
       
   281 	fields MUST be delimted by ',' and the sentence MUST NOT contain any white space.
       
   282 
       
   283 	$modstatus,device_field,data_quality_field*
       
   284 
       
   285 		where device_field is one of
       
   286 			device_error
       
   287 			device_disable
       
   288 			device_inactive
       
   289 			device_initialising
       
   290 			device_standby
       
   291 			device_ready
       
   292 			device_active
       
   293 
       
   294 		where data_quality_field is one of 
       
   295 			data_quality_loss
       
   296 			data_quality_partial
       
   297 			data_quality_normal
       
   298 			
       
   299 */
       
   300 class CModuleStatusConfigReader : public CConfigReaderBase
       
   301 	{
       
   302 public:
       
   303 
       
   304 	enum TModuleStatusFields
       
   305 		{
       
   306 		EModuleStatusType = 0,	// Must be present, only 1 type 'modstatus'.
       
   307 
       
   308 		// TPositionModuleStatus fields.
       
   309 		EModuleStatusDevice,		/**	TPositionModuleStatus.iDeviceStatus, TDeviceStatus */
       
   310 		EModuleStatusDataQuality,	/** TPositionModuleStatus.iDataQualityStatus, TDataQualityStatus */
       
   311 		EModuleStatusDelayUpdate    /** */
       
   312 	};
       
   313 
       
   314 	static CModuleStatusConfigReader* NewL(const TDesC &aConfigFileName, const TDesC& aConfigSection, TPositionModuleStatus& aModuleStatus, TBool& aDelayReportingModStatus);
       
   315 
       
   316 protected:
       
   317 	/** Converts a string to a TPositionModuleStatus::TDeviceStatus enum value. */
       
   318 	void ExtractValueDevice(const TPtrC8& aField, TPositionModuleStatus::TDeviceStatus& aValue);
       
   319 	
       
   320 	/** Converts a string to a TPositionModuleStatus::TDataQualityStatus enum value. */
       
   321 	void ExtractValueDataQuality(const TPtrC8& aField, TPositionModuleStatus::TDataQualityStatus& aValue);
       
   322 
       
   323 	void ExtractValueDelayUpdate(const TPtrC8& aField, TBool& aValue);	
       
   324 	/** See CConfigReaderBase for comments. */
       
   325 	void HandleSentenceL();
       
   326 	void DefaultData();
       
   327 	void ExtractDataL();
       
   328 	
       
   329 private:
       
   330 	CModuleStatusConfigReader(const TDesC &aConfigFileName, const TDesC& aConfigSection, TPositionModuleStatus& aModuleStatus, TBool& aDelayReportingModStatus);
       
   331 
       
   332 	/** Reference to the module status data item to be setup. */
       
   333 	TPositionModuleStatus& iModuleStatus;
       
   334 	/** */
       
   335 	TBool& iDelayReportingModStatus;
       
   336 	};
       
   337 
       
   338 
       
   339 
       
   340 /* and a class reader for module update options
       
   341 updateoptions,100,100,100,false
       
   342 interval,
       
   343 timeout
       
   344 maxage
       
   345 partialupdates
       
   346 */
       
   347 
       
   348 class CUpdateOptsConfigReader : public CConfigReaderBase
       
   349 	{
       
   350 public:
       
   351 
       
   352 	enum TUpdateOptsFields
       
   353 		{
       
   354 		EUpdateOptsType = 0,	// Must be present, only 1 type 'updateoptions'
       
   355 
       
   356 		// TPositionUpdateOptions
       
   357 		EUpdateOptsInterval,		/**	TPositionUpdateOptions.iUpdateInterval, TTimeIntervalMicroSeconds */
       
   358 		EUpdateOptsTimeOut,			/** TPositionUpdateOptions.iUpdateTimeOut, TTimeIntervalMicroSeconds */
       
   359 		EUpdateOptsMaxAge,			/** TPositionUpdateOptions.iMaxUpdateAge, TTimeIntervalMicroSeconds */
       
   360 		EUpdateOptsPartialUpdates	/** TBool TPositionUpdateOptions.iAcceptPartialUpdates, TBool */
       
   361 	};
       
   362 
       
   363 
       
   364 	static CUpdateOptsConfigReader* NewL(const TDesC &aConfigFileName, const TDesC& aConfigSection, TPositionUpdateOptions& aUpdateOpts);
       
   365 
       
   366 protected:
       
   367 	/** Converts string to a TTimeIntervalMicroSeconds value. */
       
   368 	void ExtractValueL(const TPtrC8& aField, TTimeIntervalMicroSeconds& aValue);
       
   369 	
       
   370 	/** Converts string to a TBool value. */
       
   371 	void ExtractValue(const TPtrC8& aField, TBool& aValue);
       
   372 
       
   373 	void HandleSentenceL();
       
   374 
       
   375 	void DefaultData();
       
   376 	void ExtractDataL();
       
   377 	
       
   378 private:
       
   379 	CUpdateOptsConfigReader(const TDesC &aConfigFileName, const TDesC& aConfigSection, TPositionUpdateOptions& aUpdateOpts);
       
   380 
       
   381 	TPositionUpdateOptions& iUpdateOpts;
       
   382 	};
       
   383 
       
   384 /*
       
   385  * Class reader for the expected modes in which the module is asked to run
       
   386  */
       
   387 class CAgpsModuleModesConfigReader : public CConfigReaderBase
       
   388 	{
       
   389 private:
       
   390 	enum TModuleModesFields
       
   391 		{
       
   392 		EModuleModesType = 0,			// must be present and needs to be 'modulemodes'
       
   393 		EGpsModeField, 					// the GPS mode
       
   394 		EBegginingOfGpsOptionsArray		// where the array of gps options items starts
       
   395 		};
       
   396 public:
       
   397 	static CAgpsModuleModesConfigReader* NewL(const TDesC &aConfigFileName, const TDesC& aConfigSection, 
       
   398 					RPointerArray<TLbsGpsOptions>& aModuleModes);
       
   399 private:
       
   400 	CAgpsModuleModesConfigReader(const TDesC &aConfigFileName, const TDesC& aConfigSection, 
       
   401 					RPointerArray<TLbsGpsOptions>& aModuleModes);
       
   402 	void HandleSentenceL();
       
   403 	
       
   404 	void DefaultData();
       
   405 	void ExtractDataL();
       
   406 
       
   407 private:
       
   408 	RPointerArray<TLbsGpsOptions>& iModuleModes;
       
   409 	};
       
   410 
       
   411 /*
       
   412  * Class reader for details of all clients making requests in a test
       
   413  */
       
   414 class CClientDetailsConfigReader : public CConfigReaderBase
       
   415 	{
       
   416 public:
       
   417 	static CClientDetailsConfigReader* NewL(const TDesC &aConfigFileName, const TDesC& aConfigSection, 
       
   418 					RArray<TCTClientDetails>& aClientDetailsArray);
       
   419 private:
       
   420 	CClientDetailsConfigReader(const TDesC &aConfigFileName, const TDesC& aConfigSection, 
       
   421 					RArray<TCTClientDetails>& aClientDetailsArray);
       
   422 	void HandleSentenceL();
       
   423 	
       
   424 	void DefaultData();
       
   425 	void ExtractDataL();
       
   426 
       
   427 private:
       
   428 	RArray<TCTClientDetails>& iClientDetailsArray;
       
   429 	};
       
   430 #endif //__CT_LBS_CONFIG_READER_H__