--- a/networkprotocolmodules/common/suplrrlpasn1/src/rrlpmessagebase.cpp Fri Jun 11 15:06:31 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1000 +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 "rrlpmessagebase.h"
-#include "supldevloggermacros.h"
-
-
-/**
-Const definition for the 3D location with uncertainty identifier.
-This is the form of location description allowed in RRLP for the
-GPS Reference Location element.
-*/
-const TUint K3DLocationWithUncertainty = 9;
-
-
-/**
-Maximun number of assistance data "elements" (be it almanac,
-acquisition, etc) that can be passed on to LBS. If an RRLP
-message contains more elements than the maximum, only the
-first 32 are considered.
-*/
-const TUint8 KAsn1RrlpMaxSatNumber = 32;
-
-/**
-Const definition for multiplier to convert 0.08 second resolution to ms..
-The Reference Time field of the GPS Assistance Data element contains
-a GPS Time Of Week (TOW) element, with resolution 0.08seconds.
-The LBS Assistance Data object stores the TOW in ms.
-*/
-const TUint KGpsTowMultiplier = 80;
-
-/**
-Constructor
-*/
-CRrlpMessageBase::CRrlpMessageBase(TSuplPosPayloadType aType, TBool aIsOutgoingMsg)
- : CSuplPosPayload(aType, aIsOutgoingMsg)
- {
- }
-
-
-/**
-Second stage constructor
-
-Outgoing messages: constructs the data encapsulation and control objects.
-Incoming message: no action
-*/
-void CRrlpMessageBase::ConstructL()
- {
- if (iIsOutgoingMessage)
- {
- iData = new (ELeave) ASN1T_PDU();
- ASN1Context* context = new (ELeave) ASN1Context;
- CleanupDeletePushL(context);
- iControl = new (ELeave) ASN1C_PDU(*context, *iData);
- // construction of iControl successful, pop context off the cleanup stack
- CleanupStack::Pop(context);
- }
- }
-
-
-/**
-Destructor
-*/
-CRrlpMessageBase::~CRrlpMessageBase()
- {
- SUPLLOG(ELogP1, "CRrlpMessageBase::~CRrlpMessageBase() Begin\n");
- delete iEncodeBuffer;
- delete iData;
- delete iControl;
- // release the STDLIB resources associated with this thread
- CloseSTDLIB();
- SUPLLOG(ELogP1, "CRrlpMessageBase::~CRrlpMessageBase() End\n");
- }
-
-
-/**
-SetDecodedData()
-
-Assign decoded ASN1 data, for received messages.
-Takes ownership of passed objects.
-
-@param aData data structure containing decoded message parameters
-@param aControl control structure associated with decoded data structure.
-*/
-void CRrlpMessageBase::SetDecodedData(ASN1T_PDU* aData, ASN1C_PDU* aControl)
- {
- SUPLLOG(ELogP1, "CRrlpMessageBase::SetDecodedData() Begin\n");
- __ASSERT_DEBUG(!iIsOutgoingMessage, User::Invariant());
- __ASSERT_DEBUG(iData == NULL, User::Invariant());
- __ASSERT_DEBUG(iControl == NULL, User::Invariant());
- iData = aData;
- iControl = aControl;
- SUPLLOG(ELogP1, "CRrlpMessageBase::SetDecodedData() End\n");
- }
-
-
-/**
-SetReference()
-
-Sets the RRLP session reference
-Messages that contain the Rel-5 Extended Reference override the method
-SetExtendedReference() to populate this content.
-
-The RRLP Reference, including the Rel-5 extended reference include the
-following parameters
- TInt aRefNum; // 0..7
- TBool aRel5EntendedRefPresent;
- TInt aRel5SmlcCode; // 0..63
- TInt aRel5TransactionId; // 0..262143
-
-@param aRrlpRef local copy of the session reference details
-@return error indication, KErrNone otherwise
-*/
-EXPORT_C TInt CRrlpMessageBase::SetReference(const TRrlpReference& aRrlpRef)
- {
- SUPLLOG(ELogP1, "CRrlpMessageBase::SetReference() Begin\n");
- __ASSERT_DEBUG(iIsOutgoingMessage, User::Invariant());
- __ASSERT_DEBUG(iData != NULL, User::Invariant());
-
- iData->referenceNumber = aRrlpRef.aRefNum;
-
- TInt err = KErrNone;
- err = SetExtendedReference(aRrlpRef);
- if (err == KErrNotFound)
- {
- SUPLLOG(ELogP1, "CRrlpMessageBase::SetReference() no extended reference present\n");
- }
-
-
- SUPLLOG(ELogP1, "CRrlpMessageBase::SetReference() End\n");
- return KErrNone;
- }
-
-
-/**
-SetExtendedReference()
-
-Overridden by derived classes representing messages that include rel-5
-extended reference.
-
-@param aRrlpRef local copy of the session reference details
-@return error indication, KErrNone otherwise
-*/
-TInt CRrlpMessageBase::SetExtendedReference(const TRrlpReference& /*aRrlpRef*/)
- {
- return KErrNone;
- }
-
-
-/**
-Reference()
-
-Populates aRrlpRef with the session reference
-
-@param aRrlpRef on return, populated with the session reference details
-@return error indication, KErrNone otherwise
-*/
-EXPORT_C TInt CRrlpMessageBase::GetReference(TRrlpReference& aRrlpRef)
- {
- SUPLLOG(ELogP1, "CRrlpMessageBase::Reference() Begin\n");
- __ASSERT_DEBUG(iData != NULL, User::Invariant());
- aRrlpRef.aRefNum = iData->referenceNumber;
-
- TInt err = KErrNone;
- err = GetExtendedReference(aRrlpRef);
- if (err == KErrNotFound)
- {
- SUPLLOG(ELogP1, "CRrlpMessageBase::Reference() no extended reference present\n");
- }
-
- SUPLLOG(ELogP1, "CRrlpMessageBase::Reference() End\n");
- return KErrNone;
- }
-
-
-/**
-GetExtendedReference()
-
-Overridden by derived classes representing messages that include rel-5
-extended reference.
-
-@param aRrlpRef local copy of the session reference details
-@return KErrNotFound if the extended reference parameters are not present,
- KErrNone otherwise
-*/
-TInt CRrlpMessageBase::GetExtendedReference(TRrlpReference& /*aRrlpRef*/)
- {
- return KErrNotFound;
- }
-
-
-/**
-EncodeToL()
-
-Encode a populated outgoing message to the specified buffer.
-
-@param aBuf buffer pointer
-@return error indication, KErrNone otherwise
-*/
-EXPORT_C TInt CRrlpMessageBase::EncodeToL(TPtr8& aBuf)
- {
- SUPLLOG(ELogP1, "CRrlpMessageBase::EncodeToL() Begin\n");
- __ASSERT_DEBUG(iIsOutgoingMessage, User::Invariant());
-
- // buffer pointer, fixed max length
- TUint8* msgBuf = (TUint8*)aBuf.Ptr();
- TInt maxLength = aBuf.MaxLength();
-
- // construct the encode buffer control object
- iEncodeBuffer = new (ELeave) ASN1PEREncodeBuffer (msgBuf, (unsigned int)maxLength, FALSE, (OSRTContext*)iControl->getContext());
-
- // Encode the message to the buffer
- TInt stat = KErrNone;
- stat = iControl->EncodeTo(*iEncodeBuffer);
-
- TInt retval = KErrNone;
- if (stat == 0)
- {
- // Set the length according to reported buffer length
- TInt len = iEncodeBuffer->getMsgLen();
- aBuf.SetLength(len);
- }
- else
- {
- retval = ProcessAsn1Error(stat);
- }
-
- delete iEncodeBuffer;
- iEncodeBuffer = NULL;
-
- SUPLLOG(ELogP1, "CRrlpMessageBase::EncodeToL() End\n");
- return retval;
- }
-
-
-/**
-BuildAssistanceData()
-
-@param aDataMask populated to indicate what assistance data has been received
-@param aData reference to assistance data builder object to populate with
- received assistance data
-@param aGpsData the received/decoded gps assistance data RRLP element
-@return error indication, KErrNone otherwise
-*/
-TInt CRrlpMessageBase::BuildAssistanceData(TLbsAsistanceDataGroup& aDataMask, RLbsAssistanceDataBuilderSet& aAssistanceDataBuilderSet, ASN1T_ControlHeader& aGpsData)
- {
- SUPLLOG(ELogP1, "CRrlpMessageBase::BuildAssistanceData() Begin\n");
- // clear the data mask
- aDataMask = EAssistanceDataNone;
-
- // Reference Time
- if (aGpsData.m.referenceTimePresent)
- {
- SUPLLOG(ELogP1, " Reference Time received...\n");
- aDataMask |= EAssistanceDataReferenceTime;
-
- // Fetch a GpsReferenceTime data item.
- RUEPositioningGpsReferenceTimeBuilder* gpsReferenceTimeBuilder;
- aAssistanceDataBuilderSet.GetDataBuilder(gpsReferenceTimeBuilder);
-
- WriteReferenceTimeData(gpsReferenceTimeBuilder, aGpsData);
-
- TTime timeNow;
- timeNow.UniversalTime();
- gpsReferenceTimeBuilder->SetTimeStamp(timeNow);
- }
-
- // Reference Location
- if (aGpsData.m.refLocationPresent)
- {
- SUPLLOG(ELogP1, " Reference Location received...\n");
- aDataMask |= EAssistanceDataReferenceLocation;
-
- // Fetch a ReferenceLocation data item.
- RReferenceLocationBuilder* gpsReferenceLocationBuilder;
- aAssistanceDataBuilderSet.GetDataBuilder(gpsReferenceLocationBuilder);
-
- WriteReferenceLocationData(gpsReferenceLocationBuilder, aGpsData);
-
- TTime timeNow;
- timeNow.UniversalTime();
- gpsReferenceLocationBuilder->SetTimeStamp(timeNow);
- }
-
- // DGPS Corrections
- if (aGpsData.m.dgpsCorrectionsPresent)
- {
- SUPLLOG(ELogP1, " DGPS Corrections received, ignoring...\n");
- // never requested by LBS, no data builder available. Ignore.
- }
-
- // Navigation Model
- if (aGpsData.m.navigationModelPresent)
- {
- SUPLLOG(ELogP1, " Navigation Model received...\n");
- aDataMask |= EAssistanceDataNavigationModel;
-
- // Fetch a GpsNavigationModel data item.
- RUEPositioningGpsNavigationModelBuilder* gpsNavigationModelBuilder;
- aAssistanceDataBuilderSet.GetDataBuilder(gpsNavigationModelBuilder);
-
- WriteNavigationModelData(gpsNavigationModelBuilder, aGpsData);
-
- TTime timeNow;
- timeNow.UniversalTime();
- gpsNavigationModelBuilder->SetTimeStamp(timeNow);
- }
-
- // Ionospheric Model
- if (aGpsData.m.ionosphericModelPresent)
- {
- SUPLLOG(ELogP1, " Ionospheric Model received...\n");
- aDataMask |= EAssistanceDataIonosphericModel;
-
- //Fetch a GpsIonosphericModel data item.
- RUEPositioningGpsIonosphericModelBuilder* gpsIonosphericModelBuilder;
- aAssistanceDataBuilderSet.GetDataBuilder(gpsIonosphericModelBuilder);
-
- WriteIonosphericModelData(gpsIonosphericModelBuilder, aGpsData);
-
- TTime timeNow;
- timeNow.UniversalTime();
- gpsIonosphericModelBuilder->SetTimeStamp(timeNow);
- }
-
- // UTC Model
- if (aGpsData.m.utcModelPresent)
- {
- SUPLLOG(ELogP1, " UTC Model received...\n");
- aDataMask |= EAssistanceDataPositioningGpsUtcModel;
-
- //Fetch a GpsUTCModel data item.
- RUEPositioningGpsUtcModelBuilder* gpsUtcModelBuilder;
- aAssistanceDataBuilderSet.GetDataBuilder(gpsUtcModelBuilder);
-
- WriteUtcModelData(gpsUtcModelBuilder, aGpsData);
-
- TTime timeNow;
- timeNow.UniversalTime();
- gpsUtcModelBuilder->SetTimeStamp(timeNow);
- }
-
- // Almanac
- if (aGpsData.m.almanacPresent)
- {
- SUPLLOG(ELogP1, " Almanac received...\n");
- aDataMask |= EAssistanceDataAlmanac;
-
- //Fetch a GpsAlmanacBuilder data builder.
- RUEPositioningGpsAlmanacBuilder* gpsAlmanacBuilder;
- aAssistanceDataBuilderSet.GetDataBuilder(gpsAlmanacBuilder);
-
- WriteAlmanacData(gpsAlmanacBuilder, aGpsData);
-
- TTime timeNow;
- timeNow.UniversalTime();
- gpsAlmanacBuilder->SetTimeStamp(timeNow);
- }
-
- // Acquisition Assistance
- if (aGpsData.m.acquisAssistPresent)
- {
- SUPLLOG(ELogP1, " Aquisition Assistance received...\n");
- aDataMask |= EAssistanceDataAquisitionAssistance;
-
- //Fetch a GpsAcquisitionAssistance data builder.
- RUEPositioningGpsAcquisitionAssistanceBuilder* gpsAcquisitionAssistanceBuilder;
- aAssistanceDataBuilderSet.GetDataBuilder(gpsAcquisitionAssistanceBuilder);
-
- WriteAcquisitionAssistanceData(gpsAcquisitionAssistanceBuilder, aGpsData);
-
- TTime timeNow;
- timeNow.UniversalTime();
- gpsAcquisitionAssistanceBuilder->SetTimeStamp(timeNow);
- }
-
- // Real Time Integrity
- if (aGpsData.m.realTimeIntegrityPresent)
- {
- SUPLLOG(ELogP1, " Real Time Integrity received...\n");
- aDataMask |= EAssistanceDataBadSatList;
-
- //Fetch a GpsBadSatList data item.
- RBadSatListBuilder* badSatListBuilder;
- aAssistanceDataBuilderSet.GetDataBuilder(badSatListBuilder);
-
- WriteRealTimeIntegrityData(badSatListBuilder, aGpsData);
-
- TTime timeNow;
- timeNow.UniversalTime();
- badSatListBuilder->SetTimeStamp(timeNow);
- }
-
- SUPLLOG(ELogP1, "CRrlpMessageBase::BuildAssistanceData() End\n");
- return KErrNone;
- }
-
-
-/**
-WriteReferenceTimeData()
-
-Writes the recevieved GPS Assistance Data (Reference Time) to the Assistance
-Data Builder.
-
-@param aReferenceTimeBuilder, the LBS assistance data builder
-@param aGpsData, the received/decoded gps assistance data RRLP element
-*/
-void CRrlpMessageBase::WriteReferenceTimeData(RUEPositioningGpsReferenceTimeBuilder* aReferenceTimeBuilder, ASN1T_ControlHeader& aGpsData)
- {
- SUPLLOG(ELogP1, "CRrlpMessageBase::WriteReferenceTimeData() Begin\n");
- // GPS TIME elements
- TUint gpsWeek = aGpsData.referenceTime.gpsTime.gpsWeek;
- TUint gpsTow = aGpsData.referenceTime.gpsTime.gpsTOW23b * KGpsTowMultiplier;
- aReferenceTimeBuilder->SetField(TUEPositioningGpsReferenceTime::EGpsWeek, gpsWeek);
- aReferenceTimeBuilder->SetField(TUEPositioningGpsReferenceTime::EGpsTow1Msec, gpsTow);
-
- // GSM TIME elements (optional)
- // Not currently supported by this implementation
- // LBS assistance data builder support required.
-
- // GPS TOW ASSIST elements (optional)
- if (aGpsData.referenceTime.m.gpsTowAssistPresent != 0)
- {
- RGpsTowAssistArrayBuilder towAssistArrayBuilder;
- aReferenceTimeBuilder->GetArrayBuilder(TUEPositioningGpsReferenceTime::EGpsTowAssistArray, towAssistArrayBuilder);
-
- // array accessor
- ASN1C_GPSTOWAssist towAssistArray(aGpsData.referenceTime.gpsTowAssist);
-
- TInt count = aGpsData.referenceTime.gpsTowAssist.count;
- for (TInt i=0; i<count && i<KAsn1RrlpMaxSatNumber; i++)
- {
- RGpsTowAssistBuilder towAssistBuilder;
- towAssistArrayBuilder.GetFieldBuilder(i, towAssistBuilder);
-
- ASN1T_GPSTOWAssistElement* towElement = (ASN1T_GPSTOWAssistElement*)towAssistArray.get(i);
- TUint satId = towElement->satelliteID;
- TUint tlmMessage = towElement->tlmWord;
- TBool alert = (towElement->alert !=0 ? ETrue : EFalse);
- TBool antiSpoof = (towElement->antiSpoof !=0 ? ETrue : EFalse);
-
- towAssistBuilder.SetField(TGpsTowAssist::ESatID, satId);
- towAssistBuilder.SetField(TGpsTowAssist::ETlmMessage, tlmMessage);
- towAssistBuilder.SetField(TGpsTowAssist::EAlert, alert);
- towAssistBuilder.SetField(TGpsTowAssist::EAntiSpoof, antiSpoof);
- }
- }
- SUPLLOG(ELogP1, "CRrlpMessageBase::WriteReferenceTimeData() End\n");
- }
-
-
-
-/**
-WriteReferenceLocationData()
-
-Writes the recevieved GPS Assistance Data (Reference Location) to the Assistance
-Data Builder.
-
-@param aReferenceLocationBuilder, the LBS assistance data builder
-@param aGpsData, the received/decoded gps assistance data RRLP element
-*/
-void CRrlpMessageBase::WriteReferenceLocationData(RReferenceLocationBuilder* aReferenceLocationBuilder, ASN1T_ControlHeader& aGpsData)
- {
- SUPLLOG(ELogP1, "CRrlpMessageBase::WriteReferenceLocationData() Begin\n");
- // Allowed shape type is ellipsoid point with altitude and uncertainty ellipsoid
- TUint shapeType = 0;
- shapeType |= aGpsData.refLocation.threeDLocation.data[0]>>4;
-
- // handle latitude and longitude whatever the shape type
- TUint latitude = 0;
- latitude |= aGpsData.refLocation.threeDLocation.data[1];
- latitude = latitude<<8;
- latitude |= aGpsData.refLocation.threeDLocation.data[2];
- latitude = latitude<<8;
- latitude |= aGpsData.refLocation.threeDLocation.data[3];
- latitude &= 0x7FFFFF; // clear the sign of latitude bit.
-
- // latitude sign, 0 == north, 1 == south
- TEllipsoidPointAltitudeEllipsoide::TLatitudeSign latitudeSign = TEllipsoidPointAltitudeEllipsoide::ENorth;
- if ((aGpsData.refLocation.threeDLocation.data[1] & 128) != 0)
- {
- latitudeSign = TEllipsoidPointAltitudeEllipsoide::ESouth;
- }
-
- TInt longitude = 0;
- longitude |= aGpsData.refLocation.threeDLocation.data[4];
- longitude = longitude<<8;
- longitude |= aGpsData.refLocation.threeDLocation.data[5];
- longitude = longitude<<8;
- longitude |= aGpsData.refLocation.threeDLocation.data[6];
-
- TUint altitude = 0;
- altitude |= aGpsData.refLocation.threeDLocation.data[7];
- altitude = altitude<<8;
- altitude |= aGpsData.refLocation.threeDLocation.data[8];
-
- // handling of altitude and uncertainty dependant on shape type.
- // note that RRLP specifies usage of 3D location with uncertainty, so
- // no need to handle other types.
- if (shapeType == K3DLocationWithUncertainty)
- {
- // altitude direction, 0 == above, 1 == below WGS84 ellipsoid
- TEllipsoidPointAltitudeEllipsoide::TAltitudeDirection altitudeDirection = TEllipsoidPointAltitudeEllipsoide::EHeight;
- if ((aGpsData.refLocation.threeDLocation.data[7] & 128) != 0)
- {
- altitudeDirection = TEllipsoidPointAltitudeEllipsoide::EDepth;
- }
-
- // uncertainty etc...
- TUint uncertSemiMaj = aGpsData.refLocation.threeDLocation.data[9];
- TUint uncertSemiMin = aGpsData.refLocation.threeDLocation.data[10];
- TUint orientation = aGpsData.refLocation.threeDLocation.data[11];
- TUint uncertAltitude = aGpsData.refLocation.threeDLocation.data[12];
- TUint confidence = aGpsData.refLocation.threeDLocation.data[13];
-
- REllipsoidPointAltitudeEllipsoideBuilder ellipsoidPointAltBuilder;
- aReferenceLocationBuilder->GetFieldBuilder(TReferenceLocation::EEllipsoidPointAltitudeEllipsoide, ellipsoidPointAltBuilder);
-
- ellipsoidPointAltBuilder.SetField(TEllipsoidPointAltitudeEllipsoide::ELatitudeSign, latitudeSign);
- ellipsoidPointAltBuilder.SetField(TEllipsoidPointAltitudeEllipsoide::ELatitude, latitude);
- ellipsoidPointAltBuilder.SetField(TEllipsoidPointAltitudeEllipsoide::ELongitude, longitude);
- ellipsoidPointAltBuilder.SetField(TEllipsoidPointAltitudeEllipsoide::EAltitudeDirection, altitudeDirection);
- ellipsoidPointAltBuilder.SetField(TEllipsoidPointAltitudeEllipsoide::EAltitude, altitude);
- ellipsoidPointAltBuilder.SetField(TEllipsoidPointAltitudeEllipsoide::EUncertaintySemiMajor, uncertSemiMaj);
- ellipsoidPointAltBuilder.SetField(TEllipsoidPointAltitudeEllipsoide::EUncertaintySemiMinor, uncertSemiMin);
- ellipsoidPointAltBuilder.SetField(TEllipsoidPointAltitudeEllipsoide::EOrientationMajorAxis, orientation);
- ellipsoidPointAltBuilder.SetField(TEllipsoidPointAltitudeEllipsoide::EUncertaintyAltitude, uncertAltitude);
- ellipsoidPointAltBuilder.SetField(TEllipsoidPointAltitudeEllipsoide::EConfidence, confidence);
- }
- SUPLLOG(ELogP1, "CRrlpMessageBase::WriteReferenceLocationData() End\n");
- }
-
-
-/**
-WriteNavigationModelData()
-
-Writes the recevieved GPS Assistance Data (Navigation Model) to the Assistance
-Data Builder.
-
-@param aGpsNavigationModelBuilder, the LBS assistance data builder
-@param aGpsData, the received/decoded gps assistance data RRLP element
-*/
-void CRrlpMessageBase::WriteNavigationModelData(RUEPositioningGpsNavigationModelBuilder* aGpsNavigationModelBuilder, ASN1T_ControlHeader& aGpsData)
- {
- SUPLLOG(ELogP1, "CRrlpMessageBase::WriteNavigationModelData() Begin\n");
- // Fetch a GpsNavigationModelSatInfoArray data item.
- RNavigationModelSatInfoArrayBuilder navigationModelSatInfoArrayBuilder;
- aGpsNavigationModelBuilder->GetArrayBuilder(TUEPositioningGpsNavigationModel::ENavigationModelSatelliteInfoArray, navigationModelSatInfoArrayBuilder);
-
- // array accessor
- ASN1C_SeqOfNavModelElement satInfoArray(aGpsData.navigationModel.navModelList);
-
- TInt count = aGpsData.navigationModel.navModelList.count;
- for (TInt i=0 ; i<count && i<KAsn1RrlpMaxSatNumber; ++i)
- {
- // Fetch a GpsNavigationModelSatInfo data item.
- RNavigationModelSatInfoBuilder navigationModelSatInfoBuilder;
- navigationModelSatInfoArrayBuilder.GetFieldBuilder(i, navigationModelSatInfoBuilder);
-
- // ASN1T_ControlHeader
- // Fetch the received satellite info
- ASN1T_NavModelElement* satInfo = (ASN1T_NavModelElement*)satInfoArray.get(i);
-
- WriteNavigationModelSatInfo(&navigationModelSatInfoBuilder, *satInfo);
- }
- SUPLLOG(ELogP1, "CRrlpMessageBase::WriteNavigationModelData() End\n");
- }
-
-
-/**
-WriteNavigationModelSatInfo()
-
-Writes the recevieved GPS Assistance Data (Navigation Model Satellite Info Array)
-to the Assistance Data Builder.
-
-@param aGpsNavigationModelBuilder, the LBS assistance data builder
-@param aGpsData, the received/decoded gps assistance data RRLP element
-*/
-void CRrlpMessageBase::WriteNavigationModelSatInfo(RNavigationModelSatInfoBuilder* aNavigationModelSatInfoBuilder, ASN1T_NavModelElement& aSatInfo)
- {
- SUPLLOG(ELogP1, "CRrlpMessageBase::WriteNavigationModelSatInfo() Begin\n");
- // satellite ID, status
- aNavigationModelSatInfoBuilder->SetField(TNavigationModelSatInfo::ESatId, (TUint)aSatInfo.satelliteID);
- aNavigationModelSatInfoBuilder->SetField(TNavigationModelSatInfo::ESatelliteStatus, (TSatelliteStatus)(aSatInfo.satStatus.t-EZeroOffsetAdjust));
-
- // ephemeris data if either "new sat, new nav model" OR "existing sat, new nav model"
- if (aSatInfo.satStatus.t == T_SatStatus_newSatelliteAndModelUC)
- {
- WriteSatInfoEphemeris(aNavigationModelSatInfoBuilder, *aSatInfo.satStatus.u.newSatelliteAndModelUC);
- }
- else if (aSatInfo.satStatus.t == T_SatStatus_newNaviModelUC)
- {
- WriteSatInfoEphemeris(aNavigationModelSatInfoBuilder, *aSatInfo.satStatus.u.newNaviModelUC);
- }
- SUPLLOG(ELogP1, "CRrlpMessageBase::WriteNavigationModelSatInfo() End\n");
- }
-
-
-/**
-WriteSatInfoEphemeris()
-
-Writes the recevieved GPS Assistance Data (Navigation Model Satellite Info Element)
-to the Assistance Data Builder.
-
-@param aNavigationModelSatInfoBuilder, the LBS assistance data builder
-@param aGpsData, the received/decoded gps assistance data RRLP element
-*/
-void CRrlpMessageBase::WriteSatInfoEphemeris(RNavigationModelSatInfoBuilder* aNavigationModelSatInfoBuilder, ASN1T_UncompressedEphemeris& aSatEphemeris)
- {
- SUPLLOG(ELogP1, "CRrlpMessageBase::WriteSatInfoEphemeris() Begin\n");
- REphemerisParameterBuilder ephemerisBuilder;
- aNavigationModelSatInfoBuilder->GetFieldBuilder(TNavigationModelSatInfo::EEphemerisParameter, ephemerisBuilder);
-
- TUint value = aSatEphemeris.ephemCodeOnL2;
- ephemerisBuilder.SetField(TEphemerisParameter::ECodeOnL2, value);
-
- value = aSatEphemeris.ephemURA;
- ephemerisBuilder.SetField(TEphemerisParameter::EUraIndex, value);
-
- value = aSatEphemeris.ephemSVhealth;
- ephemerisBuilder.SetField(TEphemerisParameter::ESatHealth, value);
-
- value = aSatEphemeris.ephemIODC;
- ephemerisBuilder.SetField(TEphemerisParameter::EIodc, value);
-
- value = aSatEphemeris.ephemL2Pflag;
- ephemerisBuilder.SetField(TEphemerisParameter::EL2Pflag, value);
-
- value = aSatEphemeris.ephemTgd;
- ephemerisBuilder.SetField(TEphemerisParameter::ETGD, value);
-
- value = aSatEphemeris.ephemToc;
- ephemerisBuilder.SetField(TEphemerisParameter::EToc, value);
-
- value = aSatEphemeris.ephemAF2;
- ephemerisBuilder.SetField(TEphemerisParameter::EAf2, value);
-
- value = aSatEphemeris.ephemAF1;
- ephemerisBuilder.SetField(TEphemerisParameter::EAf1, value);
-
- value = aSatEphemeris.ephemAF0;
- ephemerisBuilder.SetField(TEphemerisParameter::EAf0, value);
-
- value = aSatEphemeris.ephemCrs;
- ephemerisBuilder.SetField(TEphemerisParameter::ECrs, value);
-
- value = aSatEphemeris.ephemDeltaN;
- ephemerisBuilder.SetField(TEphemerisParameter::EDeltaN, value);
-
- value = aSatEphemeris.ephemM0;
- ephemerisBuilder.SetField(TEphemerisParameter::EM0, value);
-
- value = aSatEphemeris.ephemCuc;
- ephemerisBuilder.SetField(TEphemerisParameter::ECuc, value);
-
- value = aSatEphemeris.ephemE;
- ephemerisBuilder.SetField(TEphemerisParameter::EE, value);
-
- value = aSatEphemeris.ephemCus;
- ephemerisBuilder.SetField(TEphemerisParameter::ECus, value);
-
- value = aSatEphemeris.ephemAPowerHalf;
- ephemerisBuilder.SetField(TEphemerisParameter::EASqrt, value);
-
- value = aSatEphemeris.ephemToe;
- ephemerisBuilder.SetField(TEphemerisParameter::EToe, value);
-
- value = aSatEphemeris.ephemFitFlag;
- ephemerisBuilder.SetField(TEphemerisParameter::EFitInterval, value);
-
- value = aSatEphemeris.ephemAODA;
- ephemerisBuilder.SetField(TEphemerisParameter::EAodo, value);
-
- value = aSatEphemeris.ephemCic;
- ephemerisBuilder.SetField(TEphemerisParameter::ECic, value);
-
- value = aSatEphemeris.ephemOmegaA0;
- ephemerisBuilder.SetField(TEphemerisParameter::EOmega0, value);
-
- value = aSatEphemeris.ephemCis;
- ephemerisBuilder.SetField(TEphemerisParameter::ECis, value);
-
- value = aSatEphemeris.ephemI0;
- ephemerisBuilder.SetField(TEphemerisParameter::EI0, value);
-
- value = aSatEphemeris.ephemCrc;
- ephemerisBuilder.SetField(TEphemerisParameter::ECrc, value);
-
- value = aSatEphemeris.ephemW;
- ephemerisBuilder.SetField(TEphemerisParameter::EOmega, value);
-
- value = aSatEphemeris.ephemOmegaADot;
- ephemerisBuilder.SetField(TEphemerisParameter::EOmegaDot, value);
-
- value = aSatEphemeris.ephemIDot;
- ephemerisBuilder.SetField(TEphemerisParameter::EIDot, value);
- SUPLLOG(ELogP1, "CRrlpMessageBase::WriteSatInfoEphemeris() End\n");
- }
-
-
-/**
-WriteIonosphericModelData()
-
-Writes the recevieved GPS Assistance Data (Ionospheric Model) to the Assistance
-Data Builder.
-
-@param aGpsIonosphericModelBuilder, the LBS assistance data builder
-@param aGpsData, the received/decoded gps assistance data RRLP element
-*/
-void CRrlpMessageBase::WriteIonosphericModelData(RUEPositioningGpsIonosphericModelBuilder* aGpsIonosphericModelBuilder, ASN1T_ControlHeader& aGpsData)
- {
- SUPLLOG(ELogP1, "CRrlpMessageBase::WriteIonosphericModelData() Begin\n");
- // Ionospheric Model Data
- aGpsIonosphericModelBuilder->SetField(TUEPositioningGpsIonosphericModel::EAlfa0, (TUint)aGpsData.ionosphericModel.alfa0);
- aGpsIonosphericModelBuilder->SetField(TUEPositioningGpsIonosphericModel::EAlfa1, (TUint)aGpsData.ionosphericModel.alfa1);
- aGpsIonosphericModelBuilder->SetField(TUEPositioningGpsIonosphericModel::EAlfa2, (TUint)aGpsData.ionosphericModel.alfa2);
- aGpsIonosphericModelBuilder->SetField(TUEPositioningGpsIonosphericModel::EAlfa3, (TUint)aGpsData.ionosphericModel.alfa3);
- aGpsIonosphericModelBuilder->SetField(TUEPositioningGpsIonosphericModel::EBeta0, (TUint)aGpsData.ionosphericModel.beta0);
- aGpsIonosphericModelBuilder->SetField(TUEPositioningGpsIonosphericModel::EBeta1, (TUint)aGpsData.ionosphericModel.beta1);
- aGpsIonosphericModelBuilder->SetField(TUEPositioningGpsIonosphericModel::EBeta2, (TUint)aGpsData.ionosphericModel.beta2);
- aGpsIonosphericModelBuilder->SetField(TUEPositioningGpsIonosphericModel::EBeta3, (TUint)aGpsData.ionosphericModel.beta3);
- SUPLLOG(ELogP1, "CRrlpMessageBase::WriteIonosphericModelData() End\n");
- }
-
-
-/**
-WriteUtcModelData()
-
-Writes the recevieved GPS Assistance Data (UTC Model) to the Assistance
-Data Builder.
-
-@param aGpsUtcModelBuilder, the LBS assistance data builder
-@param aGpsData, the received/decoded gps assistance data RRLP element
-*/
-void CRrlpMessageBase::WriteUtcModelData(RUEPositioningGpsUtcModelBuilder* aGpsUtcModelBuilder, ASN1T_ControlHeader& aGpsData)
- {
- SUPLLOG(ELogP1, "CRrlpMessageBase::WriteUtcModelData() Begin\n");
- // Universal Time Coordinate Model
- aGpsUtcModelBuilder->SetField(TUEPositioningGpsUtcModel::EA1, (TUint)aGpsData.utcModel.utcA1);
- aGpsUtcModelBuilder->SetField(TUEPositioningGpsUtcModel::EA0, (TUint)aGpsData.utcModel.utcA0);
- aGpsUtcModelBuilder->SetField(TUEPositioningGpsUtcModel::ETot, (TUint)aGpsData.utcModel.utcTot);
- aGpsUtcModelBuilder->SetField(TUEPositioningGpsUtcModel::EWnt, (TUint)aGpsData.utcModel.utcWNt);
- aGpsUtcModelBuilder->SetField(TUEPositioningGpsUtcModel::EDeltatLS, (TUint)aGpsData.utcModel.utcDeltaTls);
- aGpsUtcModelBuilder->SetField(TUEPositioningGpsUtcModel::EWnlsf, (TUint)aGpsData.utcModel.utcWNlsf);
- aGpsUtcModelBuilder->SetField(TUEPositioningGpsUtcModel::EDn, (TUint)aGpsData.utcModel.utcDN);
- aGpsUtcModelBuilder->SetField(TUEPositioningGpsUtcModel::EDeltatLSF, (TUint)aGpsData.utcModel.utcDeltaTlsf);
- SUPLLOG(ELogP1, "CRrlpMessageBase::WriteUtcModelData() End\n");
- }
-
-
-/**
-WriteUtcModelData()
-
-Writes the recevieved GPS Assistance Data (UTC Model) to the Assistance
-Data Builder.
-
-@param aGpsUtcModelBuilder, the LBS assistance data builder
-@param aGpsData, the received/decoded gps assistance data RRLP element
-*/
-void CRrlpMessageBase::WriteAlmanacData(RUEPositioningGpsAlmanacBuilder* aGpsAlmanacBuilder, ASN1T_ControlHeader& aGpsData)
- {
- SUPLLOG(ELogP1, "CRrlpMessageBase::WriteAlmanacData() Begin\n");
-
- // Almanac
- aGpsAlmanacBuilder->SetField(TUEPositioningGpsAlmanac::EWnA, (TUint)aGpsData.almanac.alamanacWNa);
-
- // source array accessor
- ASN1C_SeqOfAlmanacElement almanacArray(aGpsData.almanac.almanacList);
-
- // Populate almanac satellite info array
- RAlmanacSatInfoArrayBuilder almanacSatInfoArrayBuilder;
- aGpsAlmanacBuilder->GetArrayBuilder(TUEPositioningGpsAlmanac::EAlmanacInfoSatArray, almanacSatInfoArrayBuilder);
-
- TInt count = aGpsData.almanac.almanacList.count;
- // Copy assistance data for a maximun of KAsn1RrlpMaxSatNumber
- // satellites (LBS data structures cannot accomodate more)
- for (TInt i=0 ; i<count && i<KAsn1RrlpMaxSatNumber; ++i)
- {
- RAlmanacSatInfoBuilder almanacSatInfoBuilder;
- almanacSatInfoArrayBuilder.GetFieldBuilder(i, almanacSatInfoBuilder);
-
- ASN1T_AlmanacElement* almanacElement = (ASN1T_AlmanacElement*)almanacArray.get(i);
-
- WriteAlmanacSatInfo(&almanacSatInfoBuilder, *almanacElement);
- }
- SUPLLOG(ELogP1, "CRrlpMessageBase::WriteAlmanacData() End\n");
- }
-
-
-/**
-WriteAlmanacSatInfo()
-
-Writes the recevieved GPS Assistance Data (UTC Model) to the Assistance
-Data Builder.
-
-@param aGpsUtcModelBuilder, the LBS assistance data builder
-@param aGpsData, the received/decoded gps assistance data RRLP element
-*/
-void CRrlpMessageBase::WriteAlmanacSatInfo(RAlmanacSatInfoBuilder* aAlmanacSatInfoBuilder, ASN1T_AlmanacElement& aAlmanacElement)
- {
- SUPLLOG(ELogP1, "CRrlpMessageBase::WriteAlmanacSatInfo() Begin\n");
- // Almanac
-
- // Note: no RRLP data to populate TAlmanacSatInfo::EDataID field
- aAlmanacSatInfoBuilder->SetField(TAlmanacSatInfo::ESatID, (TUint)aAlmanacElement.satelliteID);
- aAlmanacSatInfoBuilder->SetField(TAlmanacSatInfo::EE, (TUint)aAlmanacElement.almanacE);
- aAlmanacSatInfoBuilder->SetField(TAlmanacSatInfo::EToa, (TUint)aAlmanacElement.alamanacToa);
- aAlmanacSatInfoBuilder->SetField(TAlmanacSatInfo::EDeltaI, (TUint)aAlmanacElement.almanacKsii);
- aAlmanacSatInfoBuilder->SetField(TAlmanacSatInfo::EOmegaDot, (TUint)aAlmanacElement.almanacOmegaDot);
- aAlmanacSatInfoBuilder->SetField(TAlmanacSatInfo::ESatHealth, (TUint)aAlmanacElement.almanacSVhealth);
- aAlmanacSatInfoBuilder->SetField(TAlmanacSatInfo::EASqrt, (TUint)aAlmanacElement.almanacAPowerHalf);
- aAlmanacSatInfoBuilder->SetField(TAlmanacSatInfo::EOmega0, (TUint)aAlmanacElement.almanacOmega0);
- aAlmanacSatInfoBuilder->SetField(TAlmanacSatInfo::EM0, (TUint)aAlmanacElement.almanacM0);
- aAlmanacSatInfoBuilder->SetField(TAlmanacSatInfo::EOmega, (TUint)aAlmanacElement.almanacW);
- aAlmanacSatInfoBuilder->SetField(TAlmanacSatInfo::EAf0, (TUint)aAlmanacElement.almanacAF0);
- aAlmanacSatInfoBuilder->SetField(TAlmanacSatInfo::EAf1, (TUint)aAlmanacElement.almanacAF1);
- SUPLLOG(ELogP1, "CRrlpMessageBase::WriteAlmanacSatInfo() End\n");
- }
-
-
-/**
-WriteAcquisitionAssistanceData()
-
-Writes the recevieved GPS Assistance Data (Acquisition Assistance Data) to
-the Assistance Data Builder.
-
-@param aGpsAcquisitionAssistanceBuilder, the LBS assistance data builder
-@param aGpsData, the received/decoded gps assistance data RRLP element
-*/
-void CRrlpMessageBase::WriteAcquisitionAssistanceData(RUEPositioningGpsAcquisitionAssistanceBuilder* aGpsAcquisitionAssistanceBuilder, ASN1T_ControlHeader& aGpsData)
- {
- SUPLLOG(ELogP1, "CRrlpMessageBase::WriteAcquisitionAssistanceData() Begin\n");
- // Aquisition Assistance
-
- // GSM TIME elements (optional)
- // Not currently supported by this implementation
- // LBS assistance data builder support required.
-
- // source array accessor
- ASN1C_SeqOfAcquisElement acquisAssistArray(aGpsData.acquisAssist.acquisList);
-
- // Populate almanac satellite info array
- RAcquisitionSatInfoArrayBuilder acquisitionSatInfoArrayBuilder;
- aGpsAcquisitionAssistanceBuilder->GetArrayBuilder(TUEPositioningGpsAcquisitionAssistance::ESatelliteInformationArray, acquisitionSatInfoArrayBuilder);
-
- TInt count = aGpsData.acquisAssist.acquisList.count;
- for (TInt i=0 ; i<count && i<KAsn1RrlpMaxSatNumber; ++i)
- {
- RAcquisitionSatInfoBuilder acquisitionSatInfoBuilder;
- acquisitionSatInfoArrayBuilder.GetFieldBuilder(i, acquisitionSatInfoBuilder);
-
- ASN1T_AcquisElement* acquisAssistElement = (ASN1T_AcquisElement*)acquisAssistArray.get(i);
-
- WriteAcquisAssistSatInfo(&acquisitionSatInfoBuilder, *acquisAssistElement);
- }
-
- SUPLLOG(ELogP1, "CRrlpMessageBase::WriteAcquisitionAssistanceData() End\n");
- }
-
-
-/**
-WriteAcquisAssistSatInfo()
-
-Writes the recevieved GPS Assistance Data (Acquisition Assistance Satellite Info)
-to the Assistance Data Builder.
-
-@param aAcquisitionSatInfoBuilder, the LBS assistance data builder
-@param aGpsData, the received/decoded gps assistance data RRLP element
-*/
-void CRrlpMessageBase::WriteAcquisAssistSatInfo(RAcquisitionSatInfoBuilder* aAcquisitionSatInfoBuilder, ASN1T_AcquisElement& aAcquisAssistElement)
- {
- SUPLLOG(ELogP1, "CRrlpMessageBase::WriteAcquisAssistSatInfo() Begin\n");
- aAcquisitionSatInfoBuilder->SetField(TAcquisitionSatInfo::ESatID, (TUint)aAcquisAssistElement.svid);
- aAcquisitionSatInfoBuilder->SetField(TAcquisitionSatInfo::EDoppler0thOrder, (TInt)aAcquisAssistElement.doppler0);
- aAcquisitionSatInfoBuilder->SetField(TAcquisitionSatInfo::ECodePhase, (TUint)aAcquisAssistElement.codePhase);
- aAcquisitionSatInfoBuilder->SetField(TAcquisitionSatInfo::EIntegerCodePhase, (TUint)aAcquisAssistElement.intCodePhase);
- aAcquisitionSatInfoBuilder->SetField(TAcquisitionSatInfo::EGpsBitNumber, (TUint)aAcquisAssistElement.gpsBitNumber);
- aAcquisitionSatInfoBuilder->SetField(TAcquisitionSatInfo::ECodePhaseSearchWindow, (TCodePhaseSearchWindow)aAcquisAssistElement.codePhaseSearchWindow);
-
- if (aAcquisAssistElement.m.addionalDopplerPresent != 0)
- {
- RExtraDopplerInfoBuilder extraDopplerInfoBuilder;
- aAcquisitionSatInfoBuilder->GetFieldBuilder(TAcquisitionSatInfo::EExtraDopplerInfo, extraDopplerInfoBuilder);
- extraDopplerInfoBuilder.SetField(TExtraDopplerInfo::EDoppler1stOrder, (TInt)aAcquisAssistElement.addionalDoppler.doppler1);
- extraDopplerInfoBuilder.SetField(TExtraDopplerInfo::EDopplerUncertainty, (TDopplerUncertainty)aAcquisAssistElement.addionalDoppler.dopplerUncertainty);
- }
-
- if (aAcquisAssistElement.m.addionalAnglePresent)
- {
- RTAzimuthAndElevationBuilder azimuthAndElevationBuilder;
- aAcquisitionSatInfoBuilder->GetFieldBuilder(TAcquisitionSatInfo::EAzimuthAndElevation, azimuthAndElevationBuilder);
- azimuthAndElevationBuilder.SetField(TAzimuthAndElevation::EAzimuth, (TUint)aAcquisAssistElement.addionalAngle.azimuth);
- azimuthAndElevationBuilder.SetField(TAzimuthAndElevation::EElevation, (TUint)aAcquisAssistElement.addionalAngle.elevation);
- }
- SUPLLOG(ELogP1, "CRrlpMessageBase::WriteAcquisAssistSatInfo() End\n");
- }
-
-
-/**
-WriteRealTimeIntegrityData()
-
-Writes the recevieved GPS Assistance Data (Real Time Integrity) to the
-Assistance Data Builder.
-
-@param aBadSatListBuilder, the LBS assistance data builder
-@param aGpsData, the received/decoded gps assistance data RRLP element
-*/
-void CRrlpMessageBase::WriteRealTimeIntegrityData(RBadSatListBuilder* aBadSatListBuilder, ASN1T_ControlHeader& aGpsData)
- {
- SUPLLOG(ELogP1, "CRrlpMessageBase::WriteRealTimeIntegrityData() Begin\n");
- // Real Time Integrity
- RBadSatArrayBuilder badSatArrayBuilder;
- aBadSatListBuilder->GetArrayBuilder(TBadSatList::EBadSatIdArray, badSatArrayBuilder);
-
- TInt count = aGpsData.realTimeIntegrity.n;
-
- for (TInt i=0 ; i<count && i<KAsn1RrlpMaxSatNumber; ++i)
- {
- badSatArrayBuilder.SetElement(i, aGpsData.realTimeIntegrity.elem[i]);
- }
- SUPLLOG(ELogP1, "CRrlpMessageBase::WriteRealTimeIntegrityData() End\n");
- }
-
-
-/**
-LeaveIfAllocErrorL()
-
-Calls User::Leave(<error code>) if a memory allocation has failed.
-*/
-void CRrlpMessageBase::LeaveIfAllocErrorL()
- {
- SUPLLOG(ELogP1, "CRrlpMessageBase::LeaveIfAllocErrorL() Begin\n");
- if (iControl->getStatus() == RTERR_NOMEM)
- {
- User::Leave(KErrNoMemory);
- }
- else if (iControl->getStatus() != RT_OK)
- {
- User::Leave(KErrGeneral);
- }
- SUPLLOG(ELogP1, "CRrlpMessageBase::LeaveIfAllocErrorL() End\n");
- }
-
-
-/**
-Translates error codes returned by the ASN1 runtime library to distinguish
-from Symbian global error codes.
-
-Errors are simply translated to positive error codes. They maintain their
-meaning as described in rtxErrCodes.h and asn1ErrCodes.h.
-
-Exceptions:
- RTERR_NOMEM is translated to global error code KErrNoMemory
-
-@see rtxErrCodes.h
-@see asn1ErrCodes.h
-*/
-TInt CRrlpMessageBase::ProcessAsn1Error(TInt aError)
- {
- SUPLLOG(ELogP1, "CRrlpMessageBase::ProcessAsn1Error() Begin\n");
- if (aError == RTERR_NOMEM)
- {
- SUPLLOG(ELogP1, "CRrlpMessageBase::ProcessAsn1Error() End (Out Of Memory)\n");
- return KErrNoMemory;
- }
- else
- {
- SUPLLOG2(ELogP1, "CRrlpMessageBase::ProcessAsn1Error() End (ASN1Error runtime error %d)\n", aError);
- return aError * -1;
- }
- }
-
-/**
-Prints the content payload data structure to the logger
-*/
-void CRrlpMessageBase::LogMessageContent()
- {
- SUPLLOG(ELogP9, "RRLP PAYLOAD CONTENT\n");
- //SUPLLOG_PDU(iControl);
- }
-