networkprotocolmodules/common/suplrrlpasn1/src/rrlpmeasureposresponse.cpp
changeset 57 3267d9ea3e98
parent 48 81c9bee26a45
child 61 a2244af7b395
--- a/networkprotocolmodules/common/suplrrlpasn1/src/rrlpmeasureposresponse.cpp	Tue Jul 13 12:25:28 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,724 +0,0 @@
-// 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 "RRLP-Messages.h"
-#include "rrlpmeasureposresponse.h"
-#include "supldevloggermacros.h" 
-#include "suplrrlpasn1common.h"
-
-#include <lbssatellite.h>
-#include <lbs/lbsgpsmeasurement.h>
-#include <lbs/lbsextendedsatellite.h>
-
-/*
-Modulus used in conversion of GPS TOW in GPS Measurement Information Element.
-*/
-const TInt KLbsTowMod = 14400000;
-
-
-/**
-CRrlpMeasurePositionResponse
-
-Class for building an outgoing RRLP Measure Position Response Message
-Translates content of passed LBS defined data structures to data encoded as per
-the RRLP specification 3GPP 44.031 v5.12 and related documents. 
-Provides a mechanism to encode the data to a target buffer as an ASN1 PER encoded 
-data stream
-
-
-The RRLP Measure Position Repsonse message consists of the following components:
-
-Multiple Sets (optional):
-  allows the mobile terminal to specify the number of sets of location or
-  measurement datum included in this message. This is not used by Symbian LBS
-  and is left absent, indicating a single measurement set is included.
-
-Reference BTS Identity Element (optional):
-  Identifies the Base Transceiver Stations used in the calculation of position.
-  This element is conditional to the number of reference BTSs. It is mandatory, 
-  if there is more than one reference BTS, and optional otherwise. If this 
-  element is not included, the Reference BTS, used in other elements, is the 
-  current serving BTS of MS. If this element is included, the BTSs defined here
-  are used as Reference BTSs in all other elements.
-  Currently not included in this implementation.
-  
-E-OTD Measurement Information (optional):
-  Provides OTD measurements of signals sent from the reference and neighbor base
-  stations. Mandatory if E-OTD is the agreed positioning method, omitted otherwise.
-  Symbian LBS currently does not support E-OTD positioning, so this component is
-  omitted.
-
-Location Information (optional):
-  The purpose of Location Information element is to provide the location 
-  estimate from the MS to the network, if the MS is capable of determining its 
-  own position. Optionally, the element may contain the velocity parameters 
-  computed by the MS.
-  
-  This element is populated via calls to the SetLocationInformation() API
-
-GPS Measurement Information (optional):
-  The purpose of the GPS Measurement Information element is to provide GPS 
-  measurement information from the MS to the SMLC. This information includes 
-  the measurements of code phase and Doppler, which enables the network-based
-  GPS method where position is computed in the SMLC.
-  
-  This element is populated via a call to the SetMeasurementInformation() API
-
-Location Information Error (optional):
-  The purpose of Location Information Error element is to provide the indication
-  of error and the reason for it, when the MS can not perform the required 
-  location or the network can not determine the position estimate. The element 
-  may also indicate what further assistance data may be needed by the target MS 
-  to produce a successful location estimate or location measurements.
-  
-  This element is populated via a call to the SetLocationError() APIs
-
-GPS Time Assistance Measurements (optional):
-  This IE contains measurements that are used to define an accurate relation 
-  between GSM and GPS time or to provide additional GPS TOW information for MS
-  Assisted A-GPS.
-
-Extended Reference (optional):
-  This IE shall be included in any Measure Position Response if and only if an 
-  Extended Reference IE was received in the corresponding previous Measure 
-  Position Request message.
-  
-  This element is populated via a call to the SetReference() API.
-  
-
-Uplink RRLP Pseudo Segmentation Indication (optional):
-  This element is included by the MS when up-link RRLP pseudo-segmentation is used. 
-  In the first segment, 'first of many' is indicated and in the second 'second of 
-  many' is indicated. 
-  This implementation does not use up-link pseudo-segmentation hence this component
-  is not included.
-
-*/
-
-/**
-Static factory constructor
-*/
-EXPORT_C CRrlpMeasurePositionResponse* CRrlpMeasurePositionResponse::NewL()
-	{
-	SUPLLOG(ELogP1, "CRrlpMeasurePositionResponse::NewL() Begin\n");
-	CRrlpMeasurePositionResponse* self = CRrlpMeasurePositionResponse::NewLC();
-	SUPLLOG(ELogP1, "CRrlpMeasurePositionResponse::NewL() End\n");
-	CleanupStack::Pop(self);
-	return self;
-	}
-
-/**
-Static factory constructor
-*/
-EXPORT_C CRrlpMeasurePositionResponse* CRrlpMeasurePositionResponse::NewLC()
-	{
-	SUPLLOG(ELogP1, "CRrlpMeasurePositionResponse::NewLC() Begin\n");
-	CRrlpMeasurePositionResponse* self = new (ELeave) CRrlpMeasurePositionResponse();
-	CleanupStack::PushL(self);
-	self->ConstructL();
-	SUPLLOG(ELogP1, "CRrlpMeasurePositionResponse::NewLC() End\n");
-	return self;
-	}
-
-/** 
-Default constructor 
-*/
-CRrlpMeasurePositionResponse::CRrlpMeasurePositionResponse()
- : CRrlpMessageBase(ERrlpMeasurePositionResp, ETrue)
-	{
-	}
-
-/** 
-Second stage constructor 
-*/
-void CRrlpMeasurePositionResponse::ConstructL()
-	{
-	// outgoing message - call base class ConstructL to create data structures.
-	CRrlpMessageBase::ConstructL();
-		
-	// local reference to context object
-	OSCTXT* pctxt = iControl->getCtxtPtr();
-
-	iData->component.t = T_RRLP_Component_msrPositionRsp;
-	iData->component.u.msrPositionRsp = (ASN1T_MsrPosition_Rsp*)rtxMemAllocZ(pctxt, sizeof(ASN1T_MsrPosition_Rsp));
-   	LeaveIfAllocErrorL();
-	}
-
-/** 
-Destructor 
-*/
-CRrlpMeasurePositionResponse::~CRrlpMeasurePositionResponse()
-	{
-	SUPLLOG(ELogP1, "CRrlpMeasurePositionResponse::~CRrlpMeasurePositionResponse() Begin\n");
-	SUPLLOG(ELogP1, "CRrlpMeasurePositionResponse::~CRrlpMeasurePositionResponse() End\n");
-	}
-	
-
-/**	
-SetLocationInformation()
-
-Sets the content of the location information component of the RRLP Measure 
-Position Response Message.
-
-RRLP Location Information component consists of the following:
-
-Reference Frame (mandatory):
-  This field specifies the reference BTS Reference Frame number during which
-  the location estimate was measured. This information is not available at the
-  Protocol Module, hence this is set to a value which is ignored by the SMLC.
-
-GPS TOW (optional):
-  This field specifies the GPS TOW for which the location estimate is valid, 
-  rounded down to the nearest millisecond unit. This field is optional but 
-  shall be included if GPS Time Assistance Measurements are included. 
-  Currently omitted in this implementation.
- 
-Fix Type (mandatory)
-  This field contains an indication as to the type of measurements performed 
-  by the MS: 2D or 3D. 
-  Set to 3D if altitude information is available, 2D otherwise.
-
-Position Estimate (mandatory)
-  This field contains the calculated position estimate in the format defined 
-  in 3GPP TS 23.032. The allowed shapes are ellipsoid Point, ellipsoid point 
-  with uncertainty circle, ellipsoid point with uncertainty ellipse, ellipsoid 
-  point with altitude and uncertainty ellipsoid.
-
-
-@param  aPosInfo reference to the reported position data from LBS
-@return error indication, KErrNone otherwise
-*/
-EXPORT_C TInt CRrlpMeasurePositionResponse::SetLocationInformation(TPositionInfoBase& aPosInfo)
-	{
-	SUPLLOG(ELogP1, "CRrlpMeasurePositionResponse::SetLocationInformation() Begin\n");
-	__ASSERT_DEBUG(iData->component.u.msrPositionRsp != NULL, User::Invariant());
-	
-	ASN1T_MsrPosition_Rsp* msgBody = iData->component.u.msrPositionRsp;
-	
-	// handle Position Info class type
-	if (aPosInfo.PositionClassType() & EPositionInfoClass)
-		{
-		TPositionInfo& posInfo = reinterpret_cast <TPositionInfo&>(aPosInfo);
-
-		// the position
-		TPosition position;
-		posInfo.GetPosition(position);
-		
-		// indicate that location information is present
-		msgBody->m.locationInfoPresent = 1;
-
-		// BTS Reference Frame (mandatory) 0-65535 - however is ignored if 
-		// is in the range 42432..65535
-		// In this case GPS TOW should be provided if available. Which it is not.
-		msgBody->locationInfo.refFrame = 65535;
-		
-		// GPS Time Of Week (optional) should be included if GPS Time Assistance 
-		// Measurements  are included in the Measure Position Response, or if the
-		// BTS Reference Frame is in the "ignore" range. Not available.
-		msgBody->locationInfo.m.gpsTOWPresent = 0;
-		
-		// Position Estimate 
-		// ASN1T_Ext_GeographicalInformation is a 20 byte array, populated as 
-		// described in 3GPP 23.032. 
-
-		// Latitude/Longitude description is common to all supported position types
-		// Latitude is 23 bits of value and 1 bit describing direction (0 = north, 1 = south)
-		TReal64 latitudeDegrees = position.Latitude();
-		TInt latitudeEncoded;
-		TBool isSouth = EFalse;
-		if (latitudeDegrees < 0)
-			{
-			latitudeDegrees *= -1;
-			isSouth = ETrue;
-			}
-		 
-		latitudeEncoded = latitudeDegrees * KLbsLatitudeConst;	// * 2^23 / 90
-		if (isSouth)
-			{
-			// set the 24th bit
-			latitudeEncoded |= KBit23;
-			}
-
-		// Longitude is 24 bit 2's complimentary binary
-		TReal64 longitudeDegrees = position.Longitude();
-		TInt longitudeEncoded;
-		TBool isNegative = EFalse;
-		if (longitudeDegrees < 0)
-			{
-			longitudeDegrees *= -1;
-			isNegative = ETrue;
-			}
-		
-		longitudeEncoded = longitudeDegrees *  16777216 / 360; // * 2^24 / 360
-		if (isNegative)
-			{
-			// invert and add 1 for 2's complimentary binary
-			longitudeEncoded = ~longitudeEncoded;
-			longitudeEncoded += 1;
-			}
-
-		// insert into the octet array
-		const TInt bottom8bits = 255;
-		msgBody->locationInfo.posEstimate.data[1] = (latitudeEncoded >> 16) & bottom8bits;
-		msgBody->locationInfo.posEstimate.data[2] = (latitudeEncoded >> 8) & bottom8bits;
-		msgBody->locationInfo.posEstimate.data[3] = (latitudeEncoded) & bottom8bits;
-
-		msgBody->locationInfo.posEstimate.data[4] = (longitudeEncoded >> 16) & bottom8bits;
-		msgBody->locationInfo.posEstimate.data[5] = (longitudeEncoded >> 8) & bottom8bits;
-		msgBody->locationInfo.posEstimate.data[6] = (longitudeEncoded) & bottom8bits;
-		
-		// encode the horizontal uncertainty, if present;
-		TInt horizontalUncertaintyEncoded = 0;
-		if (position.HorizontalAccuracy() > 0)
-			{
-			horizontalUncertaintyEncoded = MetersToHorizontalUncertainty(position.HorizontalAccuracy());
-			}
-				
-		// encode altitude if present in the position estimate:
-		TInt altitudeEncoded = 0;
-		TInt altitudeUncertaintyEncoded = 0;
-		if(!Math::IsNaN(position.Altitude()))
-			{
-			TBool isUp = ETrue;
-			TReal32 altitude = position.Altitude();
-			if (altitude < 0)
-				{
-				isUp = EFalse;
-				altitude *= -1;
-				}
-			if (altitude > 32767) // = (2^15)-1  maximum size is 15 bits.
-				{
-				altitude = 32767;
-				}
-			
-			altitudeEncoded = altitude;
-			// 16th bit indicates direction of altitude, 1 indicates below surface
-			if (!isUp)
-				{
-				altitudeEncoded |= KBit15;
-				}
-			
-			// is vertical accuracy defined?
-			if (position.VerticalAccuracy() != 0)
-				{
-				altitudeUncertaintyEncoded = MetersToVerticalUncertainty(position.VerticalAccuracy());
-				}
-			} // end of altitude conversion
-		
-		
-		// clear the first byte and set remaining content according to data available
-		if (altitudeEncoded)
-			{
-			// EEllipsoidPointWithAltitudeAndUncertaintyEllipsoid
-			msgBody->locationInfo.posEstimate.data[0]  = EGeoInfoEllipsoidPointWithAltitudeAndUncertaintyEllipsoid<<4;
-			msgBody->locationInfo.posEstimate.data[7]  = altitudeEncoded>>8;
-			msgBody->locationInfo.posEstimate.data[8]  = altitudeEncoded;
-			msgBody->locationInfo.posEstimate.data[9]  = horizontalUncertaintyEncoded; // semi-major axis
-			msgBody->locationInfo.posEstimate.data[10] = horizontalUncertaintyEncoded; // semi-major axis
-			msgBody->locationInfo.posEstimate.data[11] = 0; // orientation
-			msgBody->locationInfo.posEstimate.data[12] = altitudeUncertaintyEncoded;
-			msgBody->locationInfo.posEstimate.data[13] = 0; // confidence, 0 == "no information"
-			msgBody->locationInfo.posEstimate.numocts = 14;
-			
-			msgBody->locationInfo.fixType = FixType::threeDFix;
-			}
-		else if (horizontalUncertaintyEncoded)
-			{
-			// EEllipsoidPointWithUncertaintyCircle
-			msgBody->locationInfo.posEstimate.data[0] = EGeoInfoEllipsoidPointWithUncertaintyCircle<<4;
-			msgBody->locationInfo.posEstimate.data[7] = horizontalUncertaintyEncoded;
-			msgBody->locationInfo.posEstimate.numocts = 8;
-
-			msgBody->locationInfo.fixType = FixType::twoDFix;
-			}
-		else
-			{
-			// EEllipsoidPoint
-			msgBody->locationInfo.posEstimate.data[0] = EGeoInfoEllipsoidPoint<<4;
-			msgBody->locationInfo.posEstimate.numocts = 7;
-
-			msgBody->locationInfo.fixType = FixType::twoDFix;
-			}
-		}
-	else
-		{
-		SUPLLOG(ELogP1, "CRrlpMeasurePositionResponse::SetLocationInformation() End (not a EPositionInfoClass)\n");
-		return KErrNotSupported;
-		}
-	
-	// additional handling for extended satellite info 
-	if (aPosInfo.PositionClassType() & EPositionExtendedSatelliteInfoClass)
-	    {
-	    TPositionExtendedSatelliteInfo& extSatInfo = reinterpret_cast <TPositionExtendedSatelliteInfo&>(aPosInfo);
-
-	    // GPS Timing Measurements
-        TGpsTimingMeasurementData timingData;
-        if  (KErrNone == extSatInfo.GetGpsTimingData(timingData))
-            {
-            SetGpsTimingData(timingData);
-            }
-	    }
-
-
-	SUPLLOG(ELogP1, "CRrlpMeasurePositionResponse::SetLocationInformation() End\n");
-	return KErrNone;
-	}
-
-/**	
-MetersToHorizontalUncertainty()
-
-Converts from meters to uncertainty code, as defined in 3GPP TS 23.032:
-uncertainty r = C( (1+x)^k - 1 )
-
-r = uncertainty in meters
-C = 10;
-x = 0.1
-k = uncertainty code
-
-hence k = ln(h/C + 1) / ln(1+x), limited to 7 bits
-*/
-TInt CRrlpMeasurePositionResponse::MetersToHorizontalUncertainty(const TReal32& aDistance)
-	{
-	SUPLLOG(ELogP1, "CRrlpMeasurePositionResponse::MetersToHorizontalUncertainty() Begin\n");
-	TReal uncert;
-	Math::Ln(uncert,  (aDistance/10) + 1 );
-	uncert /= KLbsLogOnePointOne;
-	if (uncert>KLbsMaxUncert)
-		{
-		uncert = KLbsMaxUncert;
-		}
-
-	SUPLLOG(ELogP1, "CRrlpMeasurePositionResponse::MetersToHorizontalUncertainty() End\n");
-	return (TInt)uncert;	
-	}
-
-/**	
-MetersToVerticalUncertainty()
-
-Converts from meters to uncertainty code, as defined in 3GPP TS 23.032:
-uncertainty h = C( (1+x)^k - 1 )
-
-h = uncertainty in meters
-C = 45;
-x = 0.025
-k = uncertainty code
-
-hence k = ln(h/C + 1) / ln(1+x), limited to 7 bits
-*/
-TInt CRrlpMeasurePositionResponse::MetersToVerticalUncertainty(const TReal32& aDistance)
-	{
-	SUPLLOG(ELogP1, "CRrlpMeasurePositionResponse::MetersToVerticalUncertainty() Begin\n");
-	TReal uncert;
-	Math::Ln(uncert,  (aDistance/45) + 1 );
-	uncert /= KLbsLogOnePointZeroTwoFive;
-	if (uncert>KLbsMaxUncert)
-		{
-		uncert = KLbsMaxUncert;
-		}
-
-	SUPLLOG(ELogP1, "CRrlpMeasurePositionResponse::MetersToVerticalUncertainty() End\n");
-	return (TInt)uncert;
-	}
-
-/** 
-Sets measurement information
-
-@param  aPosInfo reference to the reported position data from LBS
-@return error indication, KErrNone otherwise
-*/
-EXPORT_C TInt CRrlpMeasurePositionResponse::SetMeasurementInformation(const TPositionInfoBase& aPosInfo)
-	{
-	SUPLLOG(ELogP1, "CRrlpMeasurePositionResponse::SetMeasurementInformation() Begin\n");
-	__ASSERT_DEBUG(iData->component.u.msrPositionRsp != NULL, User::Invariant());
-	
-	ASN1T_MsrPosition_Rsp* msgBody = iData->component.u.msrPositionRsp;
-	
-	// handle Position Info class type
-	if ((aPosInfo.PositionClassType() & EPositionGpsMeasurementInfoClass) != 0)
-		{
-		const TPositionGpsMeasurementInfo& measurementInfo = reinterpret_cast <const TPositionGpsMeasurementInfo&>(aPosInfo);
-		msgBody->m.gps_MeasureInfoPresent = 1;
-		
-		// only support the sending of a single set of GPS measurements.
-		ASN1C_SeqOfGPS_MsrSetElement msrSetArray(*iControl, msgBody->gps_MeasureInfo.gpsMsrSetList);
-		msrSetArray.init();
-		ASN1T_GPS_MsrSetElement* gpsMsrSetElement = msrSetArray.NewElement();
-		if (gpsMsrSetElement == NULL)
-			{
-			return KErrNoMemory;
-			}
-		
-		// LBS API does not provide optional Reference Frame information.
-		gpsMsrSetElement->m.refFramePresent = 0;
-		
-		// GPS Time Of Week - RRLP parameter is described as the least significant 
-		// 24 bits of the GPS TOW. Further study indicates it is in fact the result
-		// of the TOW within a 4 hour window period (144000000ms). Therefore the
-		// value is calculated as GPS_TOW_MS mod 144000000.
-		TReal tow = 0;
-		Math::Mod(tow, measurementInfo.GpsTimeOfWeek(), KLbsTowMod);
-		gpsMsrSetElement->gpsTOW = tow;
-		
-		// build the array of measurements
-		ASN1C_SeqOfGPS_MsrElement msrElementArray(*iControl, gpsMsrSetElement->gps_msrList);
-		msrElementArray.init();
-
-		for (TInt i = 0; i < measurementInfo.NumMeasurements(); ++i)
-			{
-			TPositionGpsMeasurementData data;
-			if (measurementInfo.GetMeasurementData(i, data) == KErrNone)
-				{
-				ASN1T_GPS_MsrElement* gpsMsrElement = msrElementArray.NewElement();
-				if (gpsMsrElement == NULL)
-					{
-					return KErrNoMemory;
-					}
-
-				gpsMsrElement->satelliteID     = data.SatelliteId();
-				gpsMsrElement->cNo             = data.CarrierNoiseRatio();
-				gpsMsrElement->doppler         = data.Doppler();
-				gpsMsrElement->wholeChips      = data.WholeGpsChips();
-				gpsMsrElement->fracChips       = data.FractionalGpsChips();
-				gpsMsrElement->mpathIndic      = data.MultiPathIndicator();
-				gpsMsrElement->pseuRangeRMSErr = data.PseudoRangeRmsError();
-				
-				msrElementArray.Append(gpsMsrElement);
-				}
-			}
-		msrSetArray.Append(gpsMsrSetElement);
-		
-		// append any GPS Timing Measurement Data
-		TGpsTimingMeasurementData timingData;
-		if  (KErrNone == measurementInfo.GetGpsTimingData(timingData))
-		    {
-		    SetGpsTimingData(timingData);
-		    }
-		}
-	
-	SUPLLOG(ELogP1, "CRrlpMeasurePositionResponse::SetMeasurementInformation() End\n");
-	return KErrNone;
-	}
-
-
-/** 
-SetLocationError()
-
-Sets Location Error element
-
-@param  aLocError - location error
-@return error indication, KErrNone otherwise
-*/
-EXPORT_C TInt CRrlpMeasurePositionResponse::SetLocationError(TRrlpLocError aLocError)
-	{
-	SUPLLOG(ELogP1, "CRrlpMeasurePositionResponse::SetLocationError() Begin\n");
-	SUPLLOG2(ELogP1, "    - TRrlpLocError aLocError = %d", aLocError);
-	
-	__ASSERT_DEBUG(iData->component.u.msrPositionRsp != NULL, User::Invariant());
-	ASN1T_MsrPosition_Rsp* msgBody = iData->component.u.msrPositionRsp;
-	msgBody->m.locationErrorPresent = 1;
-	msgBody->locationError.locErrorReason = aLocError;
-	
-	SUPLLOG(ELogP1, "CRrlpMeasurePositionResponse::SetLocationError() End\n");
-	return KErrNone;
-	}
-
-	
-/** 
-SetLocationError()
-
-Sets Location Error element with request for additional assistance data 
-
-@see TRrlpLocError
-@param  aLocError - location error
-@return error indication, KErrNone otherwise
-*/
-EXPORT_C TInt CRrlpMeasurePositionResponse::SetLocationError(TRrlpLocError aLocError, const TLbsAsistanceDataGroup& aDataReqMask)
-	{
-	SUPLLOG(ELogP1, "CRrlpMeasurePositionResponse::SetLocationError() Begin\n");
-	SUPLLOG2(ELogP1, "    - TRrlpLocError aLocError = %d", aLocError);
-	SUPLLOG2(ELogP1, "    - TLbsAsistanceDataGroup aDataReqMask  = 0x%08X\n", aDataReqMask);
-	
-	__ASSERT_DEBUG(iData->component.u.msrPositionRsp != NULL, User::Invariant());
-	ASN1T_MsrPosition_Rsp* msgBody = iData->component.u.msrPositionRsp;
-	msgBody->m.locationErrorPresent = 1;
-	msgBody->locationError.locErrorReason = aLocError;
-
-	// Additional Assistance Data is encoded according to 3GPP TS 49.031, excluding
-	// the IEI and length octets.
-	if (aDataReqMask != EAssistanceDataNone)
-		{
-		msgBody->locationError.m.additionalAssistanceDataPresent = 1;
-		//ASN1T_AdditionalAssistanceData
-		msgBody->locationError.additionalAssistanceData.m.extensionContainerPresent = 0;
-		msgBody->locationError.additionalAssistanceData.m.gpsAssistanceDataPresent = 1;
-
-		// short name reference
-		ASN1T_GPSAssistanceData& requestedData = msgBody->locationError.additionalAssistanceData.gpsAssistanceData;
-
-		// ensure the data masks are clear and set number of octets to be sent
-		requestedData.data[0] = 0;
-		requestedData.data[1] = 0;
-		requestedData.numocts = 2;
-				
-		// set requested assistance types
-		// we do not request Ephemeris Extension or Ephemeris Extension Check or inform
-		// the SMLC of satellite specific information we already have.
-		// data is described by bit location, as per the following:
-
-		//         | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
-		// octet 1 | H | G | F | E | D | C | B | A | 
-		// octet 2 | P | O | N | M | L | K | J | I |
-		if (EAssistanceDataAquisitionAssistance & aDataReqMask)
-			{
-			// bit H
-			requestedData.data[0] |= 1<<7;
-			}
-		if (EAssistanceDataBadSatList & aDataReqMask)
-			{
-			// bit I
-			requestedData.data[1] |= 1;
-			}
-		if (EAssistanceDataNavigationModel & aDataReqMask)
-			{
-			// bit D
-			requestedData.data[0] |= 1<<3;
-			}
-		if (EAssistanceDataReferenceTime & aDataReqMask)
-			{
-			// bit G
-			requestedData.data[0] |= 1<<6;
-			}
-		if (EAssistanceDataIonosphericModel & aDataReqMask)
-			{
-			// bit C
-			requestedData.data[0] |= 1<<2;
-			}
-		if (EAssistanceDataDgpsCorrections & aDataReqMask)
-			{
-			// bit E
-			requestedData.data[0] |= 1<<4;
-			}
-		if (EAssistanceDataReferenceLocation & aDataReqMask)
-			{
-		 	// bit F
-		 	requestedData.data[0] |= 1<<5;
-			}
-		if (EAssistanceDataAlmanac & aDataReqMask)
-			{
-			// bit A
-			requestedData.data[0] |= 1;
-			}
-		if (EAssistanceDataPositioningGpsUtcModel & aDataReqMask)
-			{
-			// bit B
-			requestedData.data[0] |= 1<<1;
-			}
-		}
-	
-	SUPLLOG(ELogP1, "CRrlpMeasurePositionResponse::SetLocationError() End\n");
-	return KErrNone;
-	}
-
-/** 
-SetGpsTimingData()
-
-Sets GPS Fine Timing Data
-
-@see TGpsTimingMeasurementData
-@param  aTimingData - timing data
-@return error indication, KErrNone otherwise
-*/
-void CRrlpMeasurePositionResponse::SetGpsTimingData(const TGpsTimingMeasurementData& aTimingData)
-    {
-    SUPLLOG(ELogP1, "CRrlpMeasurePositionResponse::SetGpsTimingData() Begin\n");
-    
-    // check that the timing structure contains GPS data
-    if (TGpsTimingMeasurementData::EGpsTimingDataTypeGsm != aTimingData.DataType())
-        {
-        SUPLLOG(ELogP1, "CRrlpMeasurePositionResponse::SetGpsTimingData() End Unsupported Data Type\n");
-        return;
-        }
-        
-    __ASSERT_DEBUG(iData->component.u.msrPositionRsp != NULL, User::Invariant());
-    ASN1T_MsrPosition_Rsp* msgBody = iData->component.u.msrPositionRsp;
-
-    // mark r98 extension and timing measurements parameter present
-    msgBody->m.rel_98_MsrPosition_Rsp_ExtensionPresent = 1;
-    msgBody->rel_98_MsrPosition_Rsp_Extension.m.timeAssistanceMeasurementsPresent = 1;
-    
-    // reference to the data member to be populated
-    ASN1T_GPSTimeAssistanceMeasurements& measurements = msgBody->rel_98_MsrPosition_Rsp_Extension.timeAssistanceMeasurements;
-
-    // populate the data structure. 
-    measurements.referenceFrameMSB = aTimingData.ReferenceFrameMsb();
-    if (aTimingData.GpsTowSubms() >= 0)
-        {
-        measurements.m.gpsTowSubmsPresent = 1;
-        measurements.gpsTowSubms = aTimingData.GpsTowSubms();
-        }
-    if (aTimingData.DeltaTow() >= 0)
-        {
-        measurements.m.deltaTowPresent = 1;
-        measurements.deltaTow = aTimingData.DeltaTow();
-        }
-    if (aTimingData.GpsReferenceTimeUncertainty() >= 0)
-        {
-        measurements.m.gpsReferenceTimeUncertaintyPresent = 1;
-        measurements.gpsReferenceTimeUncertainty = aTimingData.GpsReferenceTimeUncertainty();
-        }
-
-    SUPLLOG(ELogP1, "CRrlpMeasurePositionResponse::SetGpsTimingData() End\n");
-    return;
-    }
-
-
-/**
-SetExtendedReference()
-
-Sets the extended reference parameters in the outgoing message, if they are set
-in the passed container.
-
-@param aRrlpRef on return, populated with the session reference details
-@return KErrNotFound if no extended reference data is present, 
-		KErrNone otherwise
-*/	
-TInt CRrlpMeasurePositionResponse::SetExtendedReference(const TRrlpReference& aRrlpRef)
-	{
-	__ASSERT_DEBUG(iData->component.u.msrPositionRsp != NULL, User::Invariant());
-	
-	// if present, populate the optional Rel-5 extended reference
-	if (aRrlpRef.aRel5EntendedRefPresent)
-		{
-		// mark the optional component present
-		iData->component.u.msrPositionRsp->m.rel_5_MsrPosition_Rsp_ExtensionPresent = 1;
-		iData->component.u.msrPositionRsp->rel_5_MsrPosition_Rsp_Extension.m.extended_referencePresent = 1;
-		ASN1T_Extended_reference* extendedRef = &iData->component.u.msrPositionRsp->rel_5_MsrPosition_Rsp_Extension.extended_reference;
-		extendedRef->smlc_code = aRrlpRef.aRel5SmlcCode;
-		extendedRef->transaction_ID = aRrlpRef.aRel5TransactionId;
-		}
-	else
-		{
-		return KErrNotFound;
-		}
-	
-	return KErrNone;
-	}
-