datasourcemodules/simulationpositioningmodule/inc/EPos_CPosDataSimulationController.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 02 Feb 2010 01:50:39 +0200
changeset 0 9cfd9a3ee49c
permissions -rw-r--r--
Revision: 201002 Kit: 201005

/*
* Copyright (c) 2005-2009 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:
*
*/



#ifndef CPOSDATASIMULATIONCONTROLLER_H
#define CPOSDATASIMULATIONCONTROLLER_H

//  INCLUDES
#include <lbspositioninfo.h>
#include "EPos_TPosDataSimulator.h"
#include "EPos_SimPsyConstants.h"
#include "EPos_CPosControllerBase.h"
#include "EPos_CPosSimulationPositioner.h"

// CLASS DECLARATION

/**
 * A controller class that handles requests.
 *
 */
class CPosDataSimController : public CPosControllerBase
    {
    public:  // Constructors and destructors

        enum TPosSimulationState
        {
        EPosCheckIfFailRequest,
        EPosTransferAndComplete
        };

        /**
        * Two-phased constructor.
        *
        * @param aSimulationFile The name of the simulation file to read from.
        * @param aTimeRelativePlayback turns object to work in time relative playback mode
        */
        static CPosDataSimController* NewL(
        /* IN  */       const TDesC& aSimulationFile,
        /* IN  */       TBool aTimeRelativePlayback
        );

        /**
        * Destructor.
        */
        virtual ~CPosDataSimController();

    public: // From base classes

        /**
        * From CPosControllerBase. Requests position info asynchronously.
        *
        * @param aPosInfo A reference to a position info object. This object
        *                 must be in scope until the request has completed.
        * @param aStatus The request status
        * @param aSimPos Reference to parent to call for request complete.
        */
        void NotifyPositionUpdate(
        /* IN/OUT */    TPositionInfoBase& aPosInfo,
        /* OUT    */    TRequestStatus& aStatus,
        /* IN     */	CPosSimulationPositioner& aSimPos
        );

        /**
        * From CPosControllerBase. Cancels position info request.
        * @param aSimPos Reference to parent who called this function
        */
        void CancelNotifyPositionUpdate(const CPosSimulationPositioner& aSimPos);

    private: // Constructors and destructor

        /**
        * C++ default constructor.
        * @param aTimeRelativePlayback turns object to work in time relative playback mode
        */
        CPosDataSimController(TBool aTimeRelativePlayback);

        /**
        * EPOC constructor.
        *
        * @param aSimulationFile The name of the simulation file to read from.
        */
        void ConstructL(
        /* IN  */       const TDesC& aSimulationFile
        );

        // Prohibit copy constructor
        CPosDataSimController( const CPosDataSimController& );
        // Prohibit assigment operator
        CPosDataSimController& operator= ( const CPosDataSimController& );

    private:  // New functions

        /**
        * Completes all requests with the specified error code
        * @param aErrorCode The error code - KErrNone if everything went OK.
        * If error code is something else, the position is invalid.
        */
        void CompleteRequest(TInt aErrorCode);

        /**
        * Sets completion code and waits for "Time to fix".
        */
        void SetCompletionCodeAndWait();

    private: // Functions from base classes

        /**
        * From CActive. Handles an active object’s request completion
        * event.
        */
        void RunL();

        /**
        * From CActive. Implements cancellation of an outstanding
        * request
        */
        void DoCancel();

        /**
        * From CActive. Handles a leave occurring in the request
        * completion event handler RunL()
        * @param aError The leave code
        */
        TInt RunError(TInt aError);

    private:    // Data
        TRequestStatus*           iRequestStatus;
        TPosition				  iSimulatedPosition;
        TPosition				  iBasePosition;
        TPosDataSimulator         iDataSimulator;
        TBuf8<KMaxSentenceLength> iInputBuffer;
        CDesC8Array*              iSimDataArray;

        TPosSimulationState       iSimulationState;
        TBool                     iSimulationInProcess;
        TInt                      iCompleteCode;
        TInt                      iNumRequests;
        TTime                     iRequestStartTime;
        TTime                     iLastRequestTime;

        RTimer                    iTimer;
    };

#endif      // CPOSDATASIMCONTROLLER_H

// End of File