--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lbstest/lbstestproduct/agpshybridmodule/src/ctestharnesshandler.cpp Tue Feb 02 01:50:39 2010 +0200
@@ -0,0 +1,171 @@
+// Copyright (c) 2007-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:
+// Implementation of Test A_Gps module request handler component.
+//
+//
+
+#include "ctestharnesshandler.h"
+
+const TInt KBufferedMsgMaxCount = 6;
+
+CT_TestHarnessHandler::CT_TestHarnessHandler(MT_RequestObserver* aObserver) :
+ CActive(EPriorityHigh),
+ iObserver(aObserver)
+ {
+ }
+
+CT_TestHarnessHandler::~CT_TestHarnessHandler()
+ {
+ Cancel();
+ iTHChannel.Close();
+ iMsgBuffer.ResetAndDestroy();
+ }
+
+CT_TestHarnessHandler* CT_TestHarnessHandler::NewL(MT_RequestObserver* aObserver)
+ {
+ CT_TestHarnessHandler* self = new (ELeave) CT_TestHarnessHandler(aObserver);
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+void CT_TestHarnessHandler::ConstructL()
+ {
+ RT_LbsChannel::InitializeL(RT_LbsChannel::EChannelTAGPS2TH);
+ iMsgBuffer.ReserveL(KBufferedMsgMaxCount);
+ iTHChannel.OpenL(RT_LbsChannel::EChannelTAGPS2TH, *this);
+ CActiveScheduler::Add(this);
+ }
+
+void CT_TestHarnessHandler::SendDataOutResponse(TT_LbsAGpsResponseMsg::TModuleResponseType aResponse)
+ {
+ TT_LbsAGpsResponseMsg* aMsg = new TT_LbsAGpsResponseMsg(aResponse);
+
+ BufferMessage(aMsg);
+ }
+
+void CT_TestHarnessHandler::RunL()
+ {
+ User::LeaveIfError(iStatus.Int());
+
+ if (iMsgBuffer.Count() > 0)
+ {
+ SendResponseMessage(iMsgBuffer[0]);
+ iMsgBuffer.Remove(0);
+ }
+ }
+
+void CT_TestHarnessHandler::DoCancel()
+ {
+ iTHChannel.CancelSendMessageNotification();
+ }
+
+TInt CT_TestHarnessHandler::RunError(TInt aError)
+ {
+ return aError;
+ }
+
+void CT_TestHarnessHandler::SendResponseMessage(const TT_LbsMsgBase* aMessage)
+ {
+ iTHChannel.SendMessage(*aMessage, iStatus);
+ // The msg has now been sent to the channel. We can now delete it.
+ delete(aMessage);
+ SetActive();
+ }
+
+void CT_TestHarnessHandler::BufferMessage(const TT_LbsMsgBase* aMessage)
+ {
+ if (!IsActive())
+ {
+ // The AO is not active, so there should be no buffered messages.
+ __ASSERT_DEBUG(iMsgBuffer.Count() == 0, User::Invariant());
+
+ // Immediately send the new message.
+ SendResponseMessage(aMessage);
+ }
+ else
+ {
+ __ASSERT_ALWAYS(iMsgBuffer.Count() < KBufferedMsgMaxCount, User::Invariant());
+
+ // Still waiting for acknowledgement that a previous message
+ // was read, so buffer this new message.
+ iMsgBuffer.Append(aMessage);
+ }
+ }
+
+/** Process requests from the test step. Test data is passed to the test module via the input
+ data bus.
+*/
+void CT_TestHarnessHandler::ProcessChannelMessage(RT_LbsChannel::TT_LbsChannelId /*aChannelId*/,
+ const TT_LbsMsgBase& aMessage)
+ {
+ TInt err = KErrNone;
+
+ switch (aMessage.Type())
+ {
+ case TT_LbsMsgBase::EModuleRequestUpdateInit:
+ {
+ const TT_LbsAGpsRequestUpdateInitMsg& msg = static_cast<const TT_LbsAGpsRequestUpdateInitMsg&>(aMessage);
+ err = iObserver->ProcessRequestUpdateInit(msg.ConfigFileName(), msg.ConfigSection());
+ break;
+ }
+ case TT_LbsMsgBase::EModuleRequestTimeOut:
+ {
+ const TT_LbsAGpsRequestTimeOut& msg = static_cast<const TT_LbsAGpsRequestTimeOut&>(aMessage);
+ iObserver->ProcessRequestTimeOut(msg.TimeOut());
+ break;
+ }
+ case TT_LbsMsgBase::EModuleRequestOptions:
+ {
+ const TT_LbsAGpsRequestOptions& msg = static_cast<const TT_LbsAGpsRequestOptions&>(aMessage);
+ err = iObserver->ProcessRequestModuleOptions(msg.ModuleOption(), msg.ModuleValue());
+ break;
+ }
+ case TT_LbsMsgBase::EModuleRequestError:
+ {
+ const TT_LbsAGpsRequestError& msg = static_cast<const TT_LbsAGpsRequestError&>(aMessage);
+ iObserver->ProcessRequestError(msg.Error());
+ break;
+ }
+ case TT_LbsMsgBase::EModuleRequestForcedUpdate:
+ {
+ iObserver->ProcessRequestForcedUpdate();
+ break;
+ }
+ case TT_LbsMsgBase::EModuleImmediateMeasurements:
+ {
+ const TT_LbsAGpsImmediateMeasurements& msg = static_cast<const TT_LbsAGpsImmediateMeasurements&>(aMessage);
+ iObserver->ProcessImmediateMeasurements(msg.ImmediateMeasurements());
+ break;
+ }
+ default:
+ {
+ err = KErrNotSupported;
+ break;
+ }
+ }
+
+ // Publish a response to the in coming data, now that we have handled it.
+ if (err == KErrNone)
+ {
+ SendDataOutResponse(TT_LbsAGpsResponseMsg::EModuleResponseOk);
+ }
+ else
+ {
+ SendDataOutResponse(TT_LbsAGpsResponseMsg::EModuleErr);
+ }
+
+ }
+