supl/locationomasuplpostester/epos_comasuplpostestermodulecfg/inc/epos_comasuplpositionvelocitymanager.h
author Stefan Karlsson <stefan.karlsson@nokia.com>
Mon, 29 Mar 2010 12:26:38 +0100
branchCompilerCompatibility
changeset 15 3d6498ca7365
parent 0 667063e416a2
permissions -rw-r--r--
Merge.

/*
* Copyright (c) 2005-2006 Nokia Corporation and/or its subsidiary(-ies). 
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
* which accompanies this distribution, and is available
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
*
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
* Contributors:
*
* Description:  Parent class for testing of GetPositionL and message transaction.
*
*/

#ifndef C_COMASUPLPOSITIONVELOCITYMANAGER_H
#define C_COMASUPLPOSITIONVELOCITYMANAGER_H

#include <e32base.h>

class COMASuplPositionVelocityTest;
class COMASuplInfoRequestList;
class COMASuplPosTesterCategory;
class COMASuplPosition;
class COMASuplPosSessionBase;
class COMASuplHorizVelocity;
class COMASuplHorizAndVertVelocity;
class TOMASuplUtcTime;
class TOMASuplPositionEstimate;
class TOMASuplUncertainty;
class TOMASuplAltitudeInfo;
class COMASuplVelocity;
class COMASuplMessageInfo;
class COMASuplPosPayload;
class COMASuplMessageFileReader;

/** Constant used for logging. */
_LIT8(KPosDifferent, "Error: Positions Retrieved in two Requests are different.");

/** Index of POS payload in request list*/
const TInt KPayLoadIndex = 2; //Index 0 is for velocity

class COMASuplPositionVelocityManager : public COMASuplPosTesterCategory
	{
	protected:
		/**  Controls the execution sequence in RunL. */
		enum TExecutionSequence
		{
		EStartTest = 0,
		ECancelBeforeGivingRequest,
		ERequestToInitializeSession,
		ERequestToInitializeSessionComplete,
		EProcessInstructions,
		EStartMsgTransaction,
		ERequestForInfo,
		ERequestForInfoComplete,
		ESendData,
		ESendDataComplete,
		ERequestForPosition,
		ERequestForPositionComplete
		};

	public:
		virtual ~COMASuplPositionVelocityManager();

	protected:
		COMASuplPositionVelocityManager(COMASuplPosTesterCategory* aCallBack
										, TFileName& aMsgFileName);

		void InitializeL(COMASuplTestHandler* aTestHandler
								, COMASuplPosTesterLogger& aLogger
								, TInt aTestNo);
	public:

		/**
	     * Create the request list. Leaves if total number of objects is negative.
	     *
	     * @since S60 v3.1
	     * @param aVelocityCount Number of velocity objects in the list.
	     * Default is 1.
	     * @param aPayLoadCount Number of payload objects in the list.
	     * Default is 1.
	     * @return COMASuplInfoRequestList
	     */
		COMASuplInfoRequestList& CreateRequestListL();

		/**
	     * Resets lists and requests for GetSuplInfoL. 
	     *
	     * @since S60 v3.1
	     * @param aStatus Request status
	     * @return void
	     */
		void RequestForInfoL();

		/**
	     * Processes completion of GetSuplInfoL. 
	     *
	     * @since S60 v3.1
	     * @param aStatus Request status
	     * @return System wide error code.
	     */
		void ProcessRequestCompleteL(TRequestStatus& aStatus);

		/**
	     * Processes completion of GetPositionL. 
	     *
	     * @since S60 v3.1
	     * @param aStatus Request status
	     * @return System wide error code.
	     */
		TInt ProcessGetPositionCompleteL(TRequestStatus& aStatus);

		/**
	     * Deletes previous position object and requests for GetPositionL. 
	     *
	     * @since S60 v3.1
	     * @param aStatus Request status
	     * @return void
	     */
		void RequestForPositionL(TRequestStatus& aStatus);

		/**
	     * Deletes iCreatedTypeSeq and iRequestList. Initializes them to NULL. 
	     *
	     * @since S60 v3.1
	     * @param void
	     * @return void
	     */
		void ResetLists();

		/**
	     * Checks whether all the messages in the message file have been sent. 
	     *
	     * @since S60 v3.1
	     * @param void
	     * @return EFalse if all the message are sent.
	     */
		TBool MoreMsgInMsgFileL();

		/**
	     * Checks whether the object returned in the list is last from 
	     * POS Message plugin.
	     *
	     * @since S60 v3.1
	     * @param void
	     * @return ETrue if the POS payload object is last.
	     */
		TBool LastMessage();

		/**
	     * Does necessary initialization for doing the same test
	     * on an existing session.
	     *
	     * @since S60 v3.1
	     * @param void
	     * @return void
	     */
		void InitializeForExistingSessionTest();

		/**
	     * Starts test on the existing session. This should be called after
	     * InitializeForExistingSessionTest().
	     * on an existing session.
	     *
	     * @since S60 v3.1
	     * @param void
	     * @return void
	     */
		void StartExistingSessionTest();

		/**
	     * Checks that the elements in list received are similar to the list sent
	     *
	     * @since S60 v3.1
	     * @param aDiffIndex Index of the difference. If there is no difference
	     * it is -1.
	     * @return ETrue if there is any difference else EFalse.
	     */
		TBool MatchLists(TInt& aDiffIndex);

		/**
	     * Sends a message to POS Message Plugin.
	     *
	     * @since S60 v3.1
	     * @param void
	     * @return void
	     */
		void SendPosMessageL(COMASuplPosPayload& aPayload);

		/**
	     * Provides next instruction read from message file.
	     *
	     * @since S60 v3.1
	     * @param void
	     * @return COMASuplMessageInfo which holds instruction and data.
	     */
		COMASuplMessageInfo* ReadNextMessageL();

		/**
	     * Identifies the type of instruction and processes it.
	     *
	     * @since S60 v3.1
	     * @param aMsgInfo Message instruction read from message file.
	     * @return void.
	     */
		void ProcessMsgInstructionL(COMASuplMessageInfo& aMsgInfo);

		/**
	     * Sends aPayLoad to POS Message plug-in.
	     *
	     * @since S60 v3.1
	     * @param aPayload Payload to be sent to POS Message plug+in.
	     * @return void.
	     */
		void ProcessSendL(COMASuplPosPayload& aPayload);

		/**
	     * Requests GetSuplInfoL() to POS Message plug-in.
	     *
	     * @since S60 v3.1
	     * @param aNextInSeq Case in RunL to be executed on completion of request.
	     * @return void.
	     */
		void ProcessWaitL(TExecutionSequence aNextInSeq);

		/**
	     * Reads next instruction and processes it. Uses ReadNextMessageL()
	     * and ProcessMsgInstructionL();
	     *
	     * @since S60 v3.1
	     * @param void.
	     * @return void.
	     */
		void ProcessNextInstructionL();
		
		/**
	     * Returns ETrue if the next instruction is wait
	     *
	     * @since S60 v3.1
	     * @param void.
	     * @return void.
	     */
		TBool IsNextInstructionWait();

		/**
	     * Moves to next "send" instruction. If there is no "send" instruction
	     * returns EFalse and sets aIndex to length of array, else reurns 
	     * ETrue and sets aIndex to the index of instruction array.
	     *
	     * @since S60 v3.1
	     * @param void.
	     * @return void.
	     */
		TBool MoveToNextSendInstruction();


	protected:

		/**
    	 * Holds the Type of objects in the sequence they are in the request list
    	 * Own.
    	 */
		CArrayFixFlat<TInt>* iCreatedTypeSeq;

		/**
    	 * Request list for GetSuplInfoL.
    	 * Own.
    	 */
		COMASuplInfoRequestList* iRequestList;

		/**
    	 * Position object to be sent in the GetPositionL
    	 */
		COMASuplPosition* iCurrentPosition;

		/**
    	 * Position object sent from the GetPositionL, which has completed.
    	 * Own.
    	 */
		COMASuplPosition* iPreviousPosition;

		/**
    	 * Pointer to POS Session.
    	 * Own.
    	 */
		COMASuplPosSessionBase* iSessionBase;

		/**
    	 * Maximum number of times GetPositionL is to be made. 
    	 * To be given by user.
    	 */
		TInt iMaxGetPositionReqCount;

		/**
    	 * Number of times GetPositionL has already been requested.
    	 */
		TInt iGetPositionRequested;

		/**
    	 * Number of message instructions executed.
    	 */
		TInt iMsgExecuted;

		/**
    	 * List of payload objects created by reading the message file.
    	 * Own.
    	 */
		RPointerArray< COMASuplMessageInfo >* iMsgInfoList;

		/**
    	 * Identifies the case to be executed when RunL is called.
    	 */
		TExecutionSequence iNextInSeq;

		/**
    	 * ETrue if the test which uses an already existing session has started.
    	 */
		TBool iExistingSessionTestStarted;
		
		/**
	     * Pointer to the Message File Reader.
	     * Own.
	     */
		COMASuplMessageFileReader* iMsgFileReader;
		
		/**
		 * Holds the name of message file.
		 */
		TFileName iMsgFileName;
		
	};
#endif