locationmgmt/networkgateway/inc/agpschannel.h
changeset 0 9cfd9a3ee49c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/locationmgmt/networkgateway/inc/agpschannel.h	Tue Feb 02 01:50:39 2010 +0200
@@ -0,0 +1,118 @@
+// Copyright (c) 2006-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:
+// Definition of assistance data channel component.
+// 
+//
+
+/**
+ @file
+ @internalTechnology
+ @released
+*/
+
+#ifndef AGPSCHANNEL_H_
+#define AGPSCHANNEL_H_
+
+#include <e32hashtab.h>
+#include "lbscommoninternaldatatypes.h"
+#include "lbsnetinternalapi.h"
+#include "lbsassistancedatacacheapi.h"
+
+#include "lbsagpsngmsgs.h"
+
+//
+// Asssitance Data Channel
+//
+
+/** Observer for the A-GPS interface
+*/
+class MAgpsObserver
+	{
+public:
+	virtual void OnAssistanceDataRequest(TLbsAsistanceDataGroupInt aDataItemMask) = 0;
+	virtual void OnSelfLocationRequest(const TLbsNetSessionIdInt& aSessionId, const TLbsNetPosRequestOptionsAssistanceInt& aOptions) = 0;
+	virtual void OnSelfLocationCancel(const TLbsNetSessionIdInt& aSessionId, TInt aReason) = 0;
+	virtual void OnSystemStatusAdvice(TBool aTracking) = 0;
+	};
+
+/** 
+Buffers incoming assistance data msgs.
+Used when a channel is busy.
+*/
+class RAssistanceDataMsgBuffer
+	{
+public:
+	RAssistanceDataMsgBuffer();
+	void OpenL();
+	void Close();
+	
+	void Write(const TLbsNetAssistanceDataResponseMsg& aMsg);
+	void Read(TLbsNetAssistanceDataResponseMsg& aMsg);
+	TBool IsEmpty() const;
+	
+private:
+
+private:
+	class TBufferItem
+		{
+	public:
+		TBufferItem();
+		
+		TBool iValid;
+		TInt  iReason;
+		};
+	RArray<TBufferItem> iBuffer;
+	TBool				iEmpty;
+	TBufferItem iErrGeneric;
+	};
+	
+/** Communicates with the AGPS manager over an internal API 
+*/
+class CAgpsChannel : public CActive, private MLbsNetChannelObserver
+	{
+public:
+	static CAgpsChannel* NewL(MAgpsObserver& aObserver);
+	~CAgpsChannel();
+	
+    void SendAssistanceDataResponse(TInt aError, 
+    								TLbsAsistanceDataGroupInt aMask, 
+    								const RLbsAssistanceDataBuilderSet& aData);
+    void SendSessionComplete(TInt aReason, const TLbsNetSessionIdInt& aSessionId);
+
+private:
+	CAgpsChannel(MAgpsObserver& aObserver);
+	void ConstructL();
+	
+	// from MLbsNetChannelObserver
+	void ProcessNetChannelMessage(RLbsNetChannel::TLbsNetChannelId aChannelId, const TLbsNetInternalMsgBase& aMessage);
+	
+	// from CActive
+	void RunL();
+	void DoCancel();
+	TInt RunError(TInt aError);
+
+	// Helpers	
+	void SetAssistanceDataCacheL(const RLbsAssistanceDataBuilderSet& aData);
+	
+private:
+	TLbsNetSessionCompleteAgpsMsg iSessionCompleteMsgBuffer;
+	TBool					      iSessionCompleteMsgValid;
+	RAssistanceDataMsgBuffer      iAssistanceDataMsgBuffer;
+	
+	MAgpsObserver& 		 iObserver;
+	RAssistanceDataCache iAssistanceDataCache;
+	RLbsNetChannel 		 iAGPSChannel;
+	};
+
+#endif // AGPSCHANNEL_H_