diff -r 25fce757be94 -r e02eb84a14d2 usbclasses/pictbridgeengine/inc/dpsstatemachine.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/usbclasses/pictbridgeengine/inc/dpsstatemachine.h Wed Sep 01 12:20:49 2010 +0100 @@ -0,0 +1,209 @@ +/* +* Copyright (c) 2006, 2007 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: This class defines the dps state machine. +* +*/ + + +#ifndef DPSSTATEMACHINE_H +#define DPSSTATEMACHINE_H + +#include "dpsconst.h" +#include "dpsdefs.h" + +class CDpsTransaction; +class CDpsEngine; +class CDpsScriptReceiver; +class MDpsState; +class TMDpsOperation; +class CDpsScriptSender; + +/** +* This class defines the dps state machine using the state design pattern +*/ +NONSHARABLE_CLASS(CDpsStateMachine) : public CBase + { + + public: + /** + * Two phase constructor + * @param aEngine a pointer to dps engine object + * @return the CDpsOperator instance + */ + static CDpsStateMachine* NewL(CDpsEngine *aEngine); + + /** + * Destructor + */ + ~CDpsStateMachine(); + + /** + * Creates the dps transaction. It further calls CreateRequest() + * to create dps device request script. + * @param aParam the dps operation object, passed from UI + */ + void StartTransactionL(TMDpsOperation* aOperation); + + /** + * Initializes the state machine + */ + void Initialize(); + + /** + * Handles errors + */ + inline void Error(TInt err); + + /** + * Notifies script sent + */ + inline void ScriptSentNotifyL(TBool aReply); + + /** + * Notifies script received + */ + inline void ScriptReceivedNotifyL(TBool aReply); + + /** + * Sets the current state + * @param aState the state to be set + */ + inline void SetState(MDpsState* aState); + + /** + * Gets the idle state + */ + inline MDpsState* IdleState() const; + + /** + * @return the sending request state object + */ + inline MDpsState* SendingReqState() const; + + /** + * @return the waiting for reply state object + */ + inline MDpsState* WaitingRepState() const; + + /** + * @return the sending reply state object + */ + inline MDpsState* SendingRepState() const; + + /** + * @return the CDpsScriptReceiver object + */ + inline CDpsScriptReceiver* ScriptReceiver() const; + + /** + * @return CDpsScriptSender pointer + */ + inline CDpsScriptSender* ScriptSender() const; + + /** + * @return the CDpsTransaction object + */ + inline CDpsTransaction* Trader() const; + + /** + * @return the current Dps operation enum + */ + inline TDpsOperation Operation() const; + + /** + * Sets the current Dps operation enum + * @param aOp the Dps operation enum to be set + */ + inline void SetOperation(TDpsOperation aOp); + + /** + * @return the Dps operation object + */ + inline TMDpsOperation* MOperation() const; + + /** + * @return the Dps event enum + */ + inline TDpsEvent Event() const; + + /** + * Sets the current Dps event + * @param aEvent the Dps event to be set + */ + inline void SetEvent(TDpsEvent aEvent); + + /** + * @return the current state. + */ + inline MDpsState* CurState() const; + + /** + * @return the dps engine object. + */ + inline CDpsEngine* DpsEngine() const; + + /** + * + */ + inline TInt CurError() const; + + private: + /** + * Default constructor + * @param aEngine a pointer to dps engine object + */ + CDpsStateMachine(CDpsEngine* aEngine); + + /** + * Two phase constructor. The functions which called in constructor + * and might leave should be called here + */ + void ConstructL(); + + + private: + // owned by this class + MDpsState* iIdleState; + // owned by this class + MDpsState* iSendingReqState; + // owned by this class + MDpsState* iWaitingRepState; + // owned by this class + MDpsState* iSendingRepState; + // pointer to the current state object + MDpsState* iCurState; + // not owned by this class + TMDpsOperation* iMOperation; + + // not owned by this class + CDpsEngine *iEngine; + // the current dps operation, can be empty + TDpsOperation iOperation; + // the current dps event, can be empty + TDpsEvent iEvent; + // the pointer to dps operation object, which takes + // care of creating and parsing dps script + // owned by this class + CDpsTransaction *iTrader; + // the pointer to dps script receiving notifier + // owned by this class + CDpsScriptReceiver* iScriptReceiver; + + // the pointer to script sender object, owned by this class + CDpsScriptSender* iScriptSender; + TInt iCurError; + }; + +#include "dpsstatemachine.inl" +#endif