--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/usbclasses/pictbridgeengine/src/dpsstate.cpp Thu Dec 17 09:14:30 2009 +0200
@@ -0,0 +1,235 @@
+/*
+* 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: These classes implement dps states.
+*
+*/
+
+#include <e32debug.h>
+#include "dpsstate.h"
+#include "dpsstatemachine.h"
+#include "dpstransaction.h"
+#include "dpsscriptreceiver.h"
+#include <pictbridge.h>
+
+#ifdef _DEBUG
+# define IF_DEBUG(t) {RDebug::t;}
+#else
+# define IF_DEBUG(t)
+#endif
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+TDpsIdleState::TDpsIdleState(CDpsStateMachine* aStateMachine) :
+ iStateMachine(aStateMachine) {}
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void TDpsIdleState::ScriptSentNotifyL(TBool /*aReply*/)
+ {
+ IF_DEBUG(Print(_L("TDpsIdleState::ScriptSentNotify")));
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void TDpsIdleState::ScriptReceivedNotifyL(TBool aReply)
+ {
+ if (!aReply)
+ {
+ IF_DEBUG(Print(_L("TDpsIdleState::ScriptReceived request got")));
+ iStateMachine->Trader()->ParseScriptL(aReply);
+ iStateMachine->SetState(iStateMachine->SendingRepState());
+ }
+ else
+ {
+ IF_DEBUG(Print(_L(
+ "TDpsIdleState::ScriptReceived should not get reply!!!")));
+ }
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void TDpsIdleState::Error(TInt aErr)
+ {
+ IF_DEBUG(Print(_L("TDpsIdleState::Error %d"), aErr));
+ if ((aErr != KErrCancel) && (aErr != KErrNotReady))
+ {
+ iStateMachine->Trader()->HandleHostRequestError(aErr);
+ iStateMachine->SetState(iStateMachine->SendingRepState());
+ }
+
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+TDpsSendingReqState::TDpsSendingReqState(CDpsStateMachine* aStateMachine) :
+ iStateMachine(aStateMachine) {}
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void TDpsSendingReqState::ScriptSentNotifyL(TBool aReply)
+ {
+ if (!aReply)
+ {
+ IF_DEBUG(Print(_L("TDpsSendingReqState::ScriptSent request")));
+ iStateMachine->SetState(iStateMachine->WaitingRepState());
+ }
+ else
+ {
+ IF_DEBUG(Print(_L(
+ "TDpsSendingReqState::ScriptSent should not get reply!!")));
+ }
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void TDpsSendingReqState::ScriptReceivedNotifyL(TBool /*aReply*/)
+ {
+ IF_DEBUG(Print(_L("TDpsSendingReqState::ScriptReceived")));
+ IF_DEBUG(Print(_L("**should not reply to the request/reply from host")));
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void TDpsSendingReqState::Error(TInt aErr)
+ {
+ User::RequestComplete(iStateMachine->DpsEngine()->OperationRequest(),
+ aErr);
+ iStateMachine->Initialize();
+ return;
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+TDpsWaitingRepState::TDpsWaitingRepState(CDpsStateMachine* aStateMachine) :
+ iStateMachine(aStateMachine) {}
+
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void TDpsWaitingRepState::ScriptSentNotifyL(TBool /*aReply*/)
+ {
+ IF_DEBUG(Print(_L("TDpsWaitingRepState::ScriptSent")));
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void TDpsWaitingRepState::ScriptReceivedNotifyL(TBool aReply)
+ {
+ if (aReply)
+ {
+ IF_DEBUG(Print(_L("WaitingRepState reply")))
+
+ iStateMachine->Trader()->ParseScriptL(aReply);
+ User::RequestComplete(
+ iStateMachine->DpsEngine()->OperationRequest(), KErrNone);
+ iStateMachine->Initialize();
+ }
+ else
+ {
+ IF_DEBUG(Print(_L("WaitingRepState should not get request")));
+ // collision happened, we do nothing because the host will
+ // eventually handle this by sending the correct response. but we need
+ // to subscribe for the event again.
+ iStateMachine->ScriptReceiver()->WaitForReceive();
+ }
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void TDpsWaitingRepState::Error(TInt aErr)
+ {
+ // this is not tested
+ User::RequestComplete(iStateMachine->DpsEngine()->OperationRequest(),
+ aErr);
+ iStateMachine->Initialize();
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+TDpsSendingRepState::TDpsSendingRepState(CDpsStateMachine* aStateMachine) :
+ iStateMachine(aStateMachine) {}
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void TDpsSendingRepState::ScriptSentNotifyL(TBool aReply)
+ {
+ if (aReply)
+ {
+ IF_DEBUG(Print(_L("TDpsSendingRepState::ScriptSent reply")));
+ if (KErrNone == iStateMachine->CurError())
+ {
+ // this is the normal situation, inform the client
+ User::RequestComplete(iStateMachine->DpsEngine()->EventRequest(),
+ KErrNone);
+ }
+ else
+ {
+ // this is the error situation, do not inform the client. and
+ // we need to subscribe for the new event.
+ iStateMachine->ScriptReceiver()->WaitForReceive();
+ }
+ iStateMachine->Initialize();
+ }
+ else
+ {
+ IF_DEBUG(Print(_L(
+ "TDpsSendingRepState::ScriptSent shoul not get request!!!")));
+ }
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void TDpsSendingRepState::ScriptReceivedNotifyL(TBool /*aReply*/)
+ {
+ IF_DEBUG(Print(_L("TDpsSendingRepState::ScriptReceived")));
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void TDpsSendingRepState::Error(TInt /*aErr*/)
+ {
+ return;
+ }