networkprotocolmodules/common/suplrrlpasn1/src/suplposinit.cpp
changeset 0 9cfd9a3ee49c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/networkprotocolmodules/common/suplrrlpasn1/src/suplposinit.cpp	Tue Feb 02 01:50:39 2010 +0200
@@ -0,0 +1,265 @@
+// Copyright (c) 2008-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:
+//
+
+/**
+ @file
+ @internalTechnology
+ 
+*/
+
+#include "ULP.h"
+#include "suplposinit.h"
+#include "supldevloggermacros.h" 
+
+/**
+Static factory constructor
+*/
+EXPORT_C CSuplPosInit* CSuplPosInit::NewL()
+	{
+	SUPLLOG(ELogP1, "CSuplPosInit::NewL() Begin\n");
+	CSuplPosInit* self = new (ELeave) CSuplPosInit();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	SUPLLOG(ELogP1, "CSuplPosInit::NewL() End\n");
+	CleanupStack::Pop(self);
+	return self;
+	}
+	
+	
+/** 
+Constructor 
+*/
+CSuplPosInit::CSuplPosInit()
+ : CSuplMessageBase::CSuplMessageBase(ESuplPosInit, ETrue)
+	{
+	}
+
+
+/** 
+Second stage constructor 
+*/
+void CSuplPosInit::ConstructL()
+	{
+	// call the base class ConstructL() to create data structures
+	CSuplMessageBase::ConstructL();
+
+	// local reference to context object
+	OSCTXT* pctxt = iControl->getCtxtPtr();
+
+	iData->message.t =  T_UlpMessage_msSUPLPOSINIT;
+	iData->message.u.msSUPLPOSINIT = (ASN1T_SUPLPOSINIT*)rtxMemAllocZ(pctxt, sizeof(ASN1T_SUPLPOSINIT));
+   	LeaveIfAllocErrorL();
+	}
+	
+
+/** 
+Destructor
+*/
+CSuplPosInit::~CSuplPosInit()
+	{
+	SUPLLOG(ELogP1, "CSuplPosInit::~CSuplPosInit() Begin\n");
+	SUPLLOG(ELogP1, "CSuplPosInit::~CSuplPosInit() End\n");
+	}
+	
+
+/** 
+SetCapabilities()
+
+Sets the capabilities parameter of the outgoing message
+
+@param  aCapabilities, LBS capabilities
+@return error indication, KErrNone otherwise
+*/
+EXPORT_C TInt CSuplPosInit::SetCapabilities(const TLbsNetPosCapabilities& aCapabilities)
+	{
+	__ASSERT_DEBUG(iData->message.u.msSUPLPOSINIT != NULL, User::Invariant());
+	SUPLLOG(ELogP1, "CSuplPosInit::SetCapabilities() Begin\n");
+	
+	TInt err = PopulateSetCapabilities(aCapabilities, iData->message.u.msSUPLPOSINIT->sETCapabilities);
+
+	SUPLLOG(ELogP1, "CSuplPosInit::SetCapabilities() End\n");
+	return err;
+	}
+
+
+/** 
+SetRequestedAssistanceData()
+
+Sets the requested assistance data parameter 
+
+@param  aDataReqMask, bitmask indicating requested assistance data components.
+@return error indication, KErrNone otherwise
+*/
+EXPORT_C TInt CSuplPosInit::SetRequestedAssistanceData(const TLbsAsistanceDataGroup& aDataReqMask)
+	{
+	__ASSERT_DEBUG(iData->message.u.msSUPLPOSINIT != NULL, User::Invariant());
+	SUPLLOG(ELogP1, "CSuplPosInit::SetRequestedAssistanceData() Begin\n");
+	SUPLLOG2(ELogP1, "    - TLbsAsistanceDataGroup aDataReqMask  = 0x%08X\n", aDataReqMask);	\
+	
+	// pointer to message body
+	ASN1T_SUPLPOSINIT* msgBody = iData->message.u.msSUPLPOSINIT;
+	
+	if (aDataReqMask == EAssistanceDataNone)
+		{
+		// no assistance data requested
+		return KErrNone;
+		}
+	
+	// indicate parameter is set
+	msgBody->m.requestedAssistDataPresent = 1;
+	
+	if (aDataReqMask & EAssistanceDataAquisitionAssistance)
+		{
+		msgBody->requestedAssistData.acquisitionAssistanceRequested = ETrue;
+		}
+
+	if (aDataReqMask & EAssistanceDataBadSatList)
+		{
+		msgBody->requestedAssistData.realTimeIntegrityRequested = ETrue;
+		}
+
+	if (aDataReqMask & EAssistanceDataNavigationModel)
+		{
+		msgBody->requestedAssistData.navigationModelRequested = ETrue;
+
+		// Navigation Model Data
+		// Note that setting nSAT (number of satellites for which the SET has
+		// ephemeris data available) to zero means that the SLP should ignore
+		// values for gpsWeek and gpsToe. The TOE-Limit also becomes redundant.
+		// Also means there is no need to include any additional satellite 
+		// information. See OMA-TS-V1_0-20070615A p22-23 for further detail.
+		msgBody->requestedAssistData.m.navigationModelDataPresent = 1;
+		msgBody->requestedAssistData.navigationModelData.gpsWeek = 0;
+		msgBody->requestedAssistData.navigationModelData.gpsToe = 0;
+		msgBody->requestedAssistData.navigationModelData.nSAT = 0;
+		msgBody->requestedAssistData.navigationModelData.toeLimit = 0;
+		msgBody->requestedAssistData.navigationModelData.m.satInfoPresent = 0;
+		}
+
+	if (aDataReqMask & EAssistanceDataReferenceTime)
+		{
+		msgBody->requestedAssistData.referenceTimeRequested = ETrue;
+   		}
+   		
+	if (aDataReqMask & EAssistanceDataIonosphericModel)
+		{
+		msgBody->requestedAssistData.ionosphericModelRequested = ETrue;
+		}
+   
+	if (aDataReqMask & EAssistanceDataDgpsCorrections)
+		{
+		msgBody->requestedAssistData.dgpsCorrectionsRequested = ETrue;
+		}
+   
+	if (aDataReqMask & EAssistanceDataReferenceLocation)
+		{
+		msgBody->requestedAssistData.referenceLocationRequested = ETrue;
+		}
+   
+	if (aDataReqMask & EAssistanceDataAlmanac)
+		{
+	   msgBody->requestedAssistData.almanacRequested = ETrue;
+		}
+
+	if (aDataReqMask & EAssistanceDataPositioningGpsUtcModel)
+		{
+		msgBody->requestedAssistData.utcModelRequested = ETrue;
+		}
+	
+	SUPLLOG(ELogP1, "CSuplPosInit::SetRequestedAssistanceData() End\n");
+	return KErrNone;
+	}
+
+
+/**	
+SetLocationId()
+
+Set the location ID parameter 
+
+Location ID - Describes the globally unique cell identification of the most current serving cell.
+	Cell Info (m) The following cell IDs are supported:
+		- GSM Cell Info
+		- WCDMA Cell Info
+		- CDMA Cell Info
+	Status (m) Describes whether or not the cell info is:
+		- Not Current, last known cell info
+		- Current, the present cell info
+		- Unknown (ie not known whether the cell id is current or not current)
+
+Note: The Status parameter does NOT apply to WCDMA optional parameters 
+(Frequency Info, Primary Scrambling Code and Measured Results List). Frequency
+Info, Primary Scrambling Code and Measured Results List, if present, are always
+considered to be correct for the current cell.
+
+@param  aLocationId, describes the current location
+@return error indication, KErrNone otherwise
+*/
+EXPORT_C TInt CSuplPosInit::SetLocationId(const CSuplLocationId& aLocationId)
+	{
+	SUPLLOG(ELogP1, "CSuplPosInit::SetLocationId() Begin\n");
+	__ASSERT_DEBUG(iData->message.u.msSUPLPOSINIT != NULL, User::Invariant());
+	
+	TInt retval = PopulateLocationId(aLocationId, iData->message.u.msSUPLPOSINIT->locationId);
+	SUPLLOG2(ELogP1, "CSuplPosInit::SetLocationId() End, retval = %d\n", retval);
+	return retval;
+	}
+
+
+/**	
+SetPosition()
+
+Sets the Position parameter of the outgoing message (optional)
+
+@param  aPosInfo, position as supplied by LBS subsystem
+@return error indication, KErrNone otherwise
+*/
+EXPORT_C TInt CSuplPosInit::SetPosition(const TPositionInfoBase& aPosInfo)
+	{
+	SUPLLOG(ELogP1, "CSuplPosInit::SetPosition() Begin\n");
+	__ASSERT_DEBUG(iData->message.u.msSUPLPOSINIT != NULL, User::Invariant());
+	
+	// flag that the optional position parameter is present
+	iData->message.u.msSUPLPOSINIT->m.positionPresent = 1;
+
+	TInt retval = PopulatePosition(aPosInfo, iData->message.u.msSUPLPOSINIT->position);
+	SUPLLOG2(ELogP1, "CSuplPosInit::SetPosition() End, retval = %d\n", retval);
+	return retval;
+	}
+
+
+/** 
+SetVer()
+
+Sets the Ver parameter, a hash of the received SUPL INIT message of the
+outgoing message
+
+@param aVer, pointer to buffer containing the hash of the SUPL INIT message
+@return error indication, KErrNone otherwise
+*/
+EXPORT_C TInt CSuplPosInit::SetVer(const TDesC8& aVer)
+	{
+	SUPLLOG(ELogP1, "CSuplPosInit::SetVer() Begin\n");
+	__ASSERT_DEBUG(iData->message.u.msSUPLPOSINIT != NULL, User::Invariant());
+	
+	ASN1T_SUPLPOSINIT& posInit = *iData->message.u.msSUPLPOSINIT;
+	posInit.m.verPresent = 1;
+	posInit.ver.numbits = 64;
+	TPtr8 target(posInit.ver.data, 8);
+	target.Copy(aVer);
+
+	SUPLLOG(ELogP1, "CSuplPosInit::SetVer() End\n");
+	return KErrNone;
+	}
+