diff -r e8c1ea2c6496 -r 8758140453c0 lbs/lbstestutils/src/ctlbsagpshandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lbs/lbstestutils/src/ctlbsagpshandler.cpp Thu Jan 21 12:53:44 2010 +0000 @@ -0,0 +1,170 @@ +// 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 the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// Implementation of Test Harness request handler component. +// +// + + +#include +#include "ctlbsagpshandler.h" + +const TInt KBufferedMsgMaxCount = 6; + +CT_LbsAGpsHandler::CT_LbsAGpsHandler(MT_ResponseObserver* aObserver) : + CActive(EPriorityStandard), + iObserver(aObserver) + { + } + +CT_LbsAGpsHandler::~CT_LbsAGpsHandler() + { + Cancel(); + iTHChannel.Close(); + iMsgBuffer.ResetAndDestroy(); + } + +EXPORT_C CT_LbsAGpsHandler* CT_LbsAGpsHandler::NewL(MT_ResponseObserver* aObserver) + { + CT_LbsAGpsHandler* self = new (ELeave) CT_LbsAGpsHandler(aObserver); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + +void CT_LbsAGpsHandler::ConstructL() + { + RT_LbsChannel::InitializeL(RT_LbsChannel::EChannelTH2TAGPS); + iMsgBuffer.ReserveL(KBufferedMsgMaxCount); + iTHChannel.OpenL(RT_LbsChannel::EChannelTH2TAGPS, *this); + CActiveScheduler::Add(this); + } + +EXPORT_C void CT_LbsAGpsHandler::SendRequestUpdateInitMsg(const TDesC& aConfigFileName, + const TDesC& aConfigSection) + { + TT_LbsAGpsRequestUpdateInitMsg* aMsg = new TT_LbsAGpsRequestUpdateInitMsg(aConfigFileName, aConfigSection); + + BufferMessage(aMsg); + } + +EXPORT_C void CT_LbsAGpsHandler::SendRequestTimeOutMsg(const TTimeIntervalMicroSeconds& aTimeOut) + { + TT_LbsAGpsRequestTimeOut* aMsg = new TT_LbsAGpsRequestTimeOut(aTimeOut); + + BufferMessage(aMsg); + } + +EXPORT_C void CT_LbsAGpsHandler::SendRequestSetAllModuleOptions() + { + TT_LbsAGpsRequestOptions* aMsg = new TT_LbsAGpsRequestOptions(ELbsHybridModuleOptions_SetAll); + + BufferMessage(aMsg); + } + +EXPORT_C void CT_LbsAGpsHandler::SendRequestClearAllModuleOptions() + { + TT_LbsAGpsRequestOptions* aMsg = new TT_LbsAGpsRequestOptions(EHybridModuleOptions_ClearAll); + + BufferMessage(aMsg); + } + +EXPORT_C void CT_LbsAGpsHandler::SendRequestModuleOption(TLbsHybridModuleOptions aOption, TBool aValue) + { + TT_LbsAGpsRequestOptions* aMsg = new TT_LbsAGpsRequestOptions(aOption, aValue); + + BufferMessage(aMsg); + } + +EXPORT_C void CT_LbsAGpsHandler::SendRequestForcedUpdate() + { + TT_LbsAGpsRequestForcedUpdate* msg = new TT_LbsAGpsRequestForcedUpdate(); + + BufferMessage(msg); + } + +EXPORT_C void CT_LbsAGpsHandler::SendRequestError(TInt aError) + { + TT_LbsAGpsRequestError* aMsg = new TT_LbsAGpsRequestError(aError); + + BufferMessage(aMsg); + } + + +void CT_LbsAGpsHandler::RunL() + { + User::LeaveIfError(iStatus.Int()); + + if (iMsgBuffer.Count() > 0) + { + SendRequestMessage(iMsgBuffer[0]); + iMsgBuffer.Remove(0); + } + } + +void CT_LbsAGpsHandler::DoCancel() + { + iTHChannel.CancelSendMessageNotification(); + } + +TInt CT_LbsAGpsHandler::RunError(TInt aError) + { + return aError; + } + +void CT_LbsAGpsHandler::SendRequestMessage(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_LbsAGpsHandler::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. + SendRequestMessage(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); + } + } + +void CT_LbsAGpsHandler::ProcessChannelMessage(RT_LbsChannel::TT_LbsChannelId /*aChannelId*/, + const TT_LbsMsgBase& aMessage) + { + + switch (aMessage.Type()) + { + case TT_LbsMsgBase::EModuleResponse: + { + const TT_LbsAGpsResponseMsg& msg = static_cast(aMessage); + iObserver->ProcessAGpsResponseMessage(msg.ResponseType()); + break; + } + default: + //LBSLOG_ERR2(ELogP2, "Unexpected message type: %d \n", aMessage.Type()); + break; + } + }