[Feature][Modem]Update MTK MODEM V1.6 baseline version: MOLY.NR15.R3.MD700.IVT.MP1MR3.MP.V1.6

MTK modem version: MT2735_IVT_MOLY.NR15.R3.MD700.IVT.MP1MR3.MP.V1.6.tar.gz
RF  modem version: NA

Change-Id: I45a4c2752fa9d1a618beacd5d40737fb39ab64fb
diff --git a/mcu/protocol/interface/agps/gnss2lcsp_struct.h b/mcu/protocol/interface/agps/gnss2lcsp_struct.h
new file mode 100644
index 0000000..c6342bf
--- /dev/null
+++ b/mcu/protocol/interface/agps/gnss2lcsp_struct.h
@@ -0,0 +1,3254 @@
+/******************************************************************************
+*  Copyright Statement:
+*  --------------------
+*  This software is protected by Copyright and the information contained
+*  herein is confidential. The software may not be copied and the information
+*  contained herein may not be used or disclosed except with the written
+*  permission of MediaTek Inc. (C) 2013
+*
+*  BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+*  THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+*  RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+*  AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+*  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+*  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+*  NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+*  SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+*  SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+*  THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+*  NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+*  SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+*  BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+*  LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+*  AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+*  OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+*  MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+*  THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+*  WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+*  LAWS PRINCIPLES.  ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+*  RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+*  THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*******************************************************************************/
+
+/******************************************************************************
+ * Filename:
+ * --------------------------------------------------------
+ *   gnss2lcsp_struct.h
+ *
+ * Project:
+ * --------------------------------------------------------
+ *   A-GNSS project
+ *
+ * Description:
+ * --------------------------------------------------------
+ *
+ *
+ * Author:
+ * --------------------------------------------------------
+ * -------
+ *
+ * --------------------------------------------------------
+ * $Log$
+ *
+ * 11 29 2019 jie-yu.wang
+ * [MOLY00461947] [LPP] Patch back from 1001.DEV to VMOLY
+ * [MPD][VMOLY] LPP patch back.
+ *
+ * 07 01 2019 tzu-ying.chen
+ * [MOLY00416602] [LPP][GPS] Dual-frequency development
+ * 	
+ * 	.
+ *
+ * 07 30 2018 jie-yu.wang
+ * [MOLY00342988] [LPP] A-Galileo development
+ * [LPP] A-Galileo
+ *
+ * 12 14 2017 jl.hsiao
+ * [MOLY00296306] [Bianco][O1][6630][GPS] 4G FDD B1 AGNSS CP MA7.5 Sensitivity -130dB is Fail (Time out waiting for the 1st measurment)
+ * 	
+ * 	.
+ *
+ * 12 14 2017 jl.hsiao
+ * [MOLY00296306] [Bianco][O1][6630][GPS] 4G FDD B1 AGNSS CP MA7.5 Sensitivity -130dB is Fail (Time out waiting for the 1st measurment)
+ * .
+ *
+ * 10 16 2017 jl.hsiao
+ * [MOLY00282702] [LBS] Early fix and MDT battery level support
+ * .
+ *
+ * 10 16 2017 jl.hsiao
+ * [MOLY00282702] [LBS] Early fix and MDT battery level support
+ * .
+ *
+ * 07 07 2017 wynne.chu
+ * [MOLY00261827] [UMOYLA] LPPe development
+ * 	
+ * 	.
+ *
+ * 04 07 2017 jie-yu.wang
+ * [MOLY00240104] MDT feature change for Vodafone requirement
+ * [UMOLYA][LBS]MDT feature change for VDF.
+ *
+ * 04 07 2017 jie-yu.wang
+ * [MOLY00233110] [SBP] MDT feature change for CMCC requirement
+ * [LBS][Sync from 91/92][Header] MDT feature.
+ *
+ * 10 28 2016 wynne.chu
+ * [MOLY00206577] [Gen92] A-BeiDou feature development
+ * 	
+ * 	.
+ *
+ * 10 20 2016 wynne.chu
+ * [MOLY00208519] [MT6293][VzW]LTE SIB8/16 for AGPS fine time aiding (code sync from UMOLY)
+ * 	
+ * 	.
+ *
+ * 04 29 2015 roland.li
+ * [MOLY00109917] [6291][LBS]MDT check in to UMOLY TRUNK
+ * [MDT]LBS part.
+ *
+ * 04 28 2015 george.chang
+ * [MOLY00109714] [6291] MOB MDT check in to UMOLY TRUNK
+ * 	.
+ *
+ * 04 16 2015 roland.li
+ * [MOLY00087866] [Uni-Bin]AGNSS ubin change
+ * .
+ *
+ * 01 07 2015 roland.li
+ * [MOLY00089901] [UMOLY][LBS][LPP] new feaure check in
+ * backout gnss2lcsp change.
+ *
+ * 08 04 2014 doug.shih
+ * [MOLY00073990] [LPP CP] LPP code check-in for OTDOA feature
+ * .
+ *
+ * 04 13 2014 roland.li
+ * [MOLY00061982] [6595][6630][AGPS][Certification] 2G GSM1900 AGLO MSB70.16.5.1 & 70.16.6 ?????EE????????????????????
+ * TOD issue.
+ *
+ * 03 12 2014 roland.li
+ * [MOLY00058246] [ASOP] AGNSS LBS task, AGNSS TOD to TOW transfer.
+ *
+ *
+ *****************************************************************************/
+
+#ifndef _GNSS2LCSP_STRUCT_H
+#define _GNSS2LCSP_STRUCT_H
+
+#include "gnss2lcsp_enum.h"
+#include "gps2lcsp_enum.h"
+
+#include "mcd_l3_inc_struct.h" /* for PLMN id */
+#include "kal_public_api.h"
+#include "kal_general_types.h"
+
+#include "dlist.h"
+        
+//#if defined(__AGNSS_SUPPORT__) || defined(__AGPS_SUPPORT__)  /* should add a new compile option __AGNSS_SUPPORT__*/
+
+
+/*=== GNSS Common Assistance Data ===*/
+
+/* start for gnss reference time */
+typedef struct
+{
+    kal_uint8   svID;         /* satellite PRN [1..64] */
+    kal_uint16  tlmWord;      /* telemetry message [0..16383] */
+    kal_uint8   antiSpoof;    /* anti spoof flag [0..1] */
+    kal_uint8   alert;        /* alert flag [0..1] */
+    kal_uint8   tlmRsvdBits;  /* 2 bit reserved bits [0..3] */
+} gnss_gps_tow_assist_struct;
+
+
+typedef struct
+{
+    gnss_id_enum                gnssTimeID;
+    /**
+     * This field specifies the sequential number of days from the origin of the GNSS System Time as follows: 
+     * GPS, QZSS, SBAS �V Days from January 6th 1980 00:00:00 UTC(USNO)
+     * Galileo �V TBD; 
+     * GLONASS �V Days from January 1st 1996
+     */
+    kal_uint16                  gnssDayNumber;           /* [0..32767] */
+    kal_uint32                  gnssTimeOfDay;           /* [0..86399] in seconds */
+    kal_bool                    gnssTimeOfDayFracMsecValid;
+    kal_uint16                  gnssTimeOfDayFracMsec;   /* [0..999] in milli-seconds */
+    kal_bool                    notificationLeapSecondValid;
+    kal_uint8                   notificationLeapSecond;  /* only present when gnss=GLONASS */
+    kal_uint8                   numGpsTowAssist;         /* only present when gnss=GPS */
+    gnss_gps_tow_assist_struct  gpsTowAssist[GNSS_MAX_REF_TIME_SAT_ELEMENT];
+} gnss_system_time_struct;
+
+
+typedef struct
+{
+    kal_uint16      physCellId;  /* [0..503] */
+    kal_uint32      earfcn;      /* [0..262143], 65535 is invalid to indicate ARFCN-ValueEUTRA-v9a0 present */    
+    /* optional field */
+    kal_bool        plmnIdValid;
+    plmn_id_struct  plmnId;
+    kal_bool        cellIdValid;
+    kal_uint32      cellId;      /* eutra 28 bits */
+} gnss_eutra_cell_id_struct;
+
+
+typedef struct
+{
+    kal_uint16      physCellId;  /* [0..511] */
+    kal_uint16      uarfcn;      /* [0..16383] */
+    /* optional field */
+    kal_bool        plmnIdValid;
+    plmn_id_struct  plmnId;
+    kal_bool        cellIdValid;
+    kal_uint32      cellId;      /* utra 32 bits */ 
+} gnss_utra_cell_id_struct;
+
+
+typedef struct
+{
+    kal_uint16      bcchCarrier;  /* [0..1023] */
+    kal_uint8       bsic;         /* [0..63] */
+    /* optional field */
+    kal_bool        plmnIdValid;
+    plmn_id_struct  plmnId;
+    kal_bool        cellIdValid;  /* this validity flag indicate if lac and cellId are present or not */
+    kal_uint16      lac;          /* lac 16 bits */
+    kal_uint16      cellId;       /* gsm 16 bits */
+} gnss_gsm_cell_id_struct;
+
+
+typedef struct
+{
+   gnss_network_cell_type_enum     type;
+
+   union
+   {
+      gnss_eutra_cell_id_struct    eutra;
+      gnss_utra_cell_id_struct     utra;
+      gnss_gsm_cell_id_struct      gsm;
+   }
+   data;
+} gnss_network_cell_id_struct;
+
+
+typedef struct
+{
+   /* The total time since the particular frame structure start is secondsFromFrameStructureStart + fractionalSecondsFromFrameStructureStart  */
+   kal_uint16                   secondsFromFrameStructureStart;            /* [0-12533] in seconds, this field specifies the number of seconds from the beginning of the longest frame structure in the corresponding air interface */
+   kal_uint32                   fractionalSecondsFromFrameStructureStart;  /* [0-3999999] in 250 nano-seconds, This field specifies the fractional part of the secondsFromFrameStructureStart  in 250 ns resolution */
+   kal_bool                     framDriftValid;
+   kal_int8                     frameDrift;                                /* [-64~63] in 2^(-30) seconds/second */
+   gnss_network_cell_id_struct  cellID;
+} gnss_network_time_struct;
+
+
+typedef struct
+{
+   gnss_network_time_struct  networkTime;
+   kal_bool                  referenceTimeUncValid;
+   kal_uint8                 referenceTimeUnc;  /* K = [0..127], uncertainty r (microseconds) = C*(((1+x)^K)-1), C=0.5, x=0.14 */
+   kal_bool                  bsAlignValid;
+   kal_bool                  bsAlign;           /* indicate all cell with the same carrier freq. and TA/LA/RA are frame aligned */
+} gnss_ref_time_one_cell_struct;
+
+
+typedef struct
+{
+    gnss_system_time_struct        systemTime;
+    kal_bool                       referenceTimeUncValid;
+    kal_uint8                      referenceTimeUnc;  /* K = [0..127], uncertainty r (microseconds) = C*(((1+x)^K)-1), C=0.5, x=0.14 */
+    kal_uint8                      numGnssReferenceTimeForCells;
+    gnss_ref_time_one_cell_struct  gnssReferenceTimeForCells[GNSS_MAX_REF_CELL_FTA_ELEMENT];
+} gnss_reference_time_struct;
+/* end for gnss reference time */
+
+
+/* start for gnss reference location */
+typedef struct
+{
+    kal_bool    signOfLatitude;        /* TRUE: SOUTH, FALSE: NORTH */
+    kal_uint32  degreesLatitude;       /* [0..8388607] */
+    kal_int32   degreesLongitude;      /* [-8388608..8388607] */
+    kal_bool    signOfAltitude;        /* TRUE: DEPTH, FALSE: HEIGHT */
+    kal_uint16  altitude;              /* [0..32767] */
+    kal_uint8   uncertaintySemiMajor;  /* K: [0..127], uncertainty r (meter) = C*((1+x)^K-1), C=10, x=0.1 */
+    kal_uint8   uncertaintySemiMinor;  /* K: [0..127], uncertaintyr (meter) = C*((1+x)^K-1), C=10, x=0.1 */
+    kal_uint8   orientationMajorAxis;  /* bearing angle degree: [0-179] */
+    kal_uint8   uncertaintyAltitude;   /* K: [0..127], uncertainty h (meter) = C*((1+x)^K-1), C=45, x=0.025 */
+    kal_uint8   confidence;            /* [0..100] */
+} gnss_reference_location_struct;
+/* end for gnss reference location */
+
+
+/* start for gnss ionospheric model */
+typedef struct
+{
+    kal_uint8  dataId; /* dataID, to indicate the klobuchar model parameter is apply for which GNSS, map to GNSS_ION_KLOBUCHAR_DATA_ID_VALUE_* */
+    kal_int8   alfa0;  /* alpha0 [-128..127] (* 2^-30 seconds) */
+    kal_int8   alfa1;  /* alpha1 [-128..127] (* 2^-27 seconds/semicircle) */
+    kal_int8   alfa2;  /* alpha2 [-128..127] (* 2^-24 seconds/semicircle^2) */
+    kal_int8   alfa3;  /* alpha3 [-128..127] (* 2^-24 seconds/semicircle^3) */
+    kal_int8   beta0;  /* beta0  [-128..127] (* 2^11 seconds) */
+    kal_int8   beta1;  /* beta1  [-128..127] (* 2^14 seconds/semicircle) */
+    kal_int8   beta2;  /* beta2  [-128..127] (* 2^16 seconds/semicircle^2) */
+    kal_int8   beta3;  /* beta3  [-128..127] (* 2^16 seconds/semicircle^3) */
+} gnss_klobuchar_model_paras_struct;
+
+
+typedef struct
+{
+    kal_uint16  ai0;  /* [0..4095], to be changed to [0..2047] when A-Galileo is planed to support (because LPP ASN.1 is upgraded to Rel-12, but RRC and RRLP not) */
+    kal_int16  ai1;  /* [0..4095], to be changed to kal_int16 [-1024..1023] when A-Galileo is planed to support (because LPP ASN.1 is upgraded to Rel-12, but RRC and RRLP not) */
+    kal_int16  ai2;  /* [0..4095], to be changed to kal_int16 [-8192..8191] when A-Galileo is planed to support (because LPP ASN.1 is upgraded to Rel-12, but RRC and RRLP not) */
+
+    /* optional field */
+    /**
+     * iono storm flag represent five region: [value 0: no disturbance, value 1: disturbance]
+     *  region 1: for the northern region (60�X<MODIP<90�X)
+     *  region 2: for the northern middle region (30�X<MODIP<60�X)
+     *  region 3: for the equatorial region (-30�X<MODIP<30�X)
+     *  region 4: for the southern middle region (-60�X<MODIP<-30�X)
+     *  region 5: for the southern region (-90�X<MODIP<-60�X)
+     */
+    kal_bool    ionoStormFlag1Valid;
+    kal_bool    ionoStormFlag1;
+    kal_bool    ionoStormFlag2Valid;
+    kal_bool    ionoStormFlag2;
+    kal_bool    ionoStormFlag3Valid;
+    kal_bool    ionoStormFlag3;
+    kal_bool    ionoStormFlag4Valid;
+    kal_bool    ionoStormFlag4;
+    kal_bool    ionoStormFlag5Valid;
+    kal_bool    ionoStormFlag5;
+} gnss_nequick_model_paras_struct;
+
+
+typedef struct
+{
+    kal_bool                           klobucharModelValid;  /* for GPS, GLONASS, etc... */
+    gnss_klobuchar_model_paras_struct  klobucharModel;
+    kal_bool                           neQuickModelValid;    /* for Galileo */
+    gnss_nequick_model_paras_struct    neQuickModel;
+} gnss_ionospheric_model_struct;
+/* end for gnss ionospheric model */
+
+
+/* start for gnss earth orientation parameters */
+typedef struct
+{
+    kal_uint16  teop;         /* [0..65535], EOP data reference time in seconds, scale factor 2^4 seconds */
+    kal_int32   pmX;          /* [-1048576..1048575], X-axis polar motion value at reference time in arc-seconds, scale factor 2^(-20) arc-seconds */
+    kal_int16   pmXdot;       /* [-16384..16383], X-axis polar motion drift at reference time in arc-seconds/day, scale factor 2^(-21) arc-seconds/day */
+    kal_int32   pmY;          /* [-1048576..1048575], Y-axis polar motion value at reference time in arc-seconds, scale factor 2^(-20) arc-seconds */
+    kal_int16   pmYdot;       /* [-16384..16383] Y-axis polar motion drift at reference time in arc-seconds/day, scale factor 2^(-21) arc-seconds/day */
+    kal_int32   deltaUT1;     /* [-1073741824..1073741823], UT1-UTC diff at reference time in seconds, scale factor 2^(-24) seconds */
+    kal_int32   deltaUT1dot;  /* [-262144..262143], the rate of UT1-UTC diff at reference time in seconds/day, scale factor 2^(-25) seconds/day */
+} gnss_earth_orient_params_struct;
+/* end for gnss earth orientation parameters */
+
+
+/*=== GNSS Generic Assistance Data ===*/
+
+/* start for gnss time model */
+/**
+ * in LPP, location server could provide up to 15 GNSS-GNSS system time offset
+ * in RRC/RRLP, location server could provide up to 7 GNSS-GNSS system time offset
+ * i.e. generic assist data is for GPS, time model could provide GPS-GLONASS time offset
+ */
+typedef struct
+{
+    /* note that RRC/RRLP tA0, tA1 range is larger than LPP, although scale factor is the same */
+    kal_uint16        gnssTimeModelRefTime;  /* [0..65535], the reference time of week, scale factor 2^4 seconds */
+    kal_int32         tA0;                   /* [-67108864..67108863] for LPP, [-2147483648 .. 2147483647] for RRC/RRLP, the bias coefficient, scale factor 2^(-35) seconds */
+    kal_bool          tA1Valid;
+    kal_int32         tA1;                   /* [-4096..4095] for LPP, [-8388608 .. 8388607] for RRC/RRLP, the drift coefficient, scale factor 2^(-51) seconds/second */
+    kal_bool          tA2Valid;
+    kal_int8          tA2;                   /* [-64..63], the drift rate correction coefficient, scale factor 2^(-68) seconds/second^2 */
+    gnss_to_id_enum   gnssToId;              /* GPS, Galileo, QZSS, GLOANSS, BDS */
+    /* optional field */
+    kal_bool          weekNumberValid;
+    kal_uint16        weekNumber;            /* [0..8191], the reference week */
+    kal_bool          deltaTValid;
+    kal_int8          deltaT;                /* [-128..127], the integer number of seconds of GNSS-GNSS time offset */
+} gnss_time_model_element_struct;
+
+
+typedef struct
+{
+    kal_uint8                       numTimeModels;
+    gnss_time_model_element_struct  gnssTimeModels[GNSS_MAX_TIME_MODEL_ELEMENT];  /* 6-15 is reserved */
+} gnss_time_model_list_struct;
+
+/* end for gnss time model */
+
+
+/* start for gnss dgnss correction */
+typedef struct
+{
+   kal_uint8   svID;                   /* [0..63] */
+   kal_uint16  iod;                    /* [11 bits], for issue of data field */
+   kal_uint8   udre;                   /* [0-3] */
+   kal_int16   pseudoRangeCor;         /* [-2047..2047], the correction to the pseudorange for the particular satellite at dgnssRefTime, scale factor 0.32 meters */
+   kal_int8    rangeRateCor;           /* [-127..127], the rate-of-change of the pseudorange correction for the particular satellite, scale factor 0.032 meters/sec */
+   /* optional field */
+   kal_bool    udreGrowthRateValid;
+   kal_uint8   udreGrowthRate;         /* [0-7], an estimate of the growth rate of uncertainty (1-�m) in the corrections for the particular satellite */
+   kal_bool    udreValidityTimeValid;
+   kal_uint8   udreValidityTime;       /* [0-7], the time when the udreGrowthRate field applies and is included if udreGrowthRate is included */
+} gnss_dgnss_corrections_element_struct;
+
+
+typedef struct
+{
+    kal_uint8                              gnssSignalId;  /* map to GNSS_SGN_ID_VALUE_* */
+    kal_uint8                              gnssStatusHealth;  /* [0-7], for UDRE scale factor */
+    kal_uint8                              numCorrectionElements;
+    gnss_dgnss_corrections_element_struct  correctionElements[GNSS_MAX_DGNSS_CORRECTION_INFO_ELEMENT];
+} gnss_dgnss_signal_type_element_struct;
+
+
+typedef struct
+{
+    kal_uint16                             dgnssRefTime;  /* [0..3599], the time for which the DGNSS corrections are valid, modulo 1 hour, scale factor 1 seconds */
+    kal_uint8                              numSgnTypes;
+    gnss_dgnss_signal_type_element_struct  sgnTypes[GNSS_MAX_DGNSS_SGN_TYPE_ELEMENT];
+} gnss_diff_correction_struct;
+/* end for gnss dgnss correction */
+
+
+/* start for gnss navigation model */
+typedef struct
+{
+    kal_uint16  stanClockToc;      /* [0..16383] */
+    kal_int16   stanClockAF2;      /* [-32..31] */
+    kal_int32   stanClockAF1;      /* [-1048576..1048575] */
+    kal_int32   stanClockAF0;      /* [-1073741824..1073741823] */
+    kal_uint8   sisa; /* [0..255] */
+    /* optional field */
+    kal_bool    stanClockTgdValid;
+    kal_int16   stanClockTgd;      /* [-512..511], scale factor 2^(-32) seconds */
+    kal_bool    stanModelIdValid;
+    kal_uint8   stanModelID;       /* [0..1], 0 for I/Nav, 1 for F/Nav Galileo clock clock */
+} gnss_std_clock_model_element_struct;
+
+
+typedef struct
+{
+    kal_uint8                            numStdClkElement;
+    gnss_std_clock_model_element_struct  stdClkElement[GNSS_MAX_NAV_STD_CLK_MODEL_ELEMENT];
+} gnss_standard_clock_model_struct;
+
+
+typedef struct
+{
+    kal_uint16  navToc;  /* [0..37799], time of clock, scale factor 2^4 seconds */
+    kal_int8    navaf2;  /* [-128..127], clock correction polynomial coefficient, scale factor 2^(-55) seconds/second^2 */
+    kal_int16   navaf1;  /* [-32768..32767], clock correction polynomial coefficient, scale factor 2^(-43) seconds/second */
+    kal_int32   navaf0;  /* [-2097152..2097151], clock correction polynomial coefficient, scale factor 2^(-31) seconds */
+    kal_int8    navTgd;  /* [-128..127], group delay, scale factor 2^(-31) seconds */
+} gnss_nav_clock_model_struct;
+
+
+typedef struct
+{
+    kal_uint16  cnavToc;           /* [0..2015], clock data reference time of week, scale factor 300 seconds */
+    kal_uint16  cnavTop;           /* [0..2015], clock data predict time of week, scale factor 300 seconds */
+    kal_int8    cnavURA0;          /* [-16..15], SV clock accuracy index */
+    kal_uint8   cnavURA1;          /* [0..7], SV clock accuracy change index */
+    kal_uint8   cnavURA2;          /* [0..7], SV clock accuracy change rate index */
+    kal_int16   cnavAf2;           /* [-512..511], SV clock drift rate correction coefficient, scale factor 2^(-60) seconds/second^2 */
+    kal_int32   cnavAf1;           /* [-524288..524287], SV clock drift correction coefficient, scale factor 2^(-48) seconds/second */
+    kal_int32   cnavAf0;           /* [-33554432..33554431], SV clock bias correction coefficient, scale 2^(-35) seconds */
+    kal_int16   cnavTgd;           /* [-4096..4095], group delay, scale factor 2^(-35) seconds */
+    kal_bool    cnavISCl1cpValid;
+    kal_int16   cnavISCl1cp;       /* [-4096..4095], inter signal group delay correction, scale factor 2^(-35) seconds */
+    kal_bool    cnavISCl1cdValid;
+    kal_int16   cnavISCl1cd;       /* [-4096..4095], inter signal group delay correction, scale factor 2^(-35) seconds */
+    kal_bool    cnavISCl1caValid;
+    kal_int16   cnavISCl1ca;       /* [-4096..4095], inter signal group delay correction, scale factor 2^(-35) seconds */
+    kal_bool    cnavISCl2cValid;
+    kal_int16   cnavISCl2c;        /* [-4096..4095], inter signal group delay correction, scale factor 2^(-35) seconds */
+    kal_bool    cnavISCl5i5Valid;
+    kal_int16   cnavISCl5i5;       /* [-4096..4095], inter signal group delay correction, scale factor 2^(-35) seconds */
+    kal_bool    cnavISCl5q5Valid;
+    kal_int16   cnavISCl5q5;       /* [-4096..4095], inter signal group delay correction, scale factor 2^(-35) seconds */
+} gnss_cnav_clock_model_struct;
+
+
+typedef struct
+{
+    kal_int32  gloTau;            /* [-2097152..2097151], satellite clock offset, scale factor 2^(-30) seconds */
+    kal_int16  gloGamma;          /* [-1024..1023], relative frequency offset from nominal value, scale factor 2^(-40) */
+    kal_bool   gloDeltaTauValid;
+    kal_int8   gloDeltaTau;       /* [-16..15], time difference between transmission in G2 and G1, scale factor 2^(-30) seconds */
+} gnss_glonass_clock_model_struct;
+
+
+typedef struct
+{
+    kal_uint16  sbasTo;    /* [0..5399], scale factor 16 seconds */
+    kal_int16   sbasAgfo;  /* [-2048..2047], scale factor 2^(-31) seconds */
+    kal_int8    sbasAgf1;  /* [-128..127], scale factor 2^(-40) seconds/second */
+} gnss_sbas_clock_model_struct;
+
+
+typedef struct
+{
+    kal_uint8   bdsAODC;  /* [0..31], age of data, clock (AODC) */
+    kal_uint32  bdsToc;   /* [0..131071], time of clock, scale factor 2^3 seconds */
+    kal_int32   bdsA0;    /* [-8388608..8388607], clock correction polynomial coefficient, scale factor 2^(-33) seconds */
+    kal_int32   bdsA1;    /* [-2097152..2097151], clock correction polynomial coefficient, scale factor 2^(-50) sec/sec */
+    kal_int32   bdsA2;    /* [-1024..1023], clock correction polynomial coefficient, scale factor 2^(-66) sec/sec2 */
+    kal_int32   bdsTgd1;  /* [-512..511], equipment group delay differential, scale factor 0.1 nanosecond */
+} gnss_bds_clock_model_struct;
+
+
+typedef struct
+{
+    gnss_clock_model_type_enum            type;
+
+    union
+    {
+        gnss_standard_clock_model_struct  standardClockModelList;  /* Model-1: usually used for Galileo */
+        gnss_nav_clock_model_struct       navClockModel;           /* Model-2: for GPS */
+        gnss_cnav_clock_model_struct      cnavClockModel;          /* Model-3: for modernized GPS */
+        gnss_glonass_clock_model_struct   glonassClockModel;       /* Model-4: for GLONASS */
+        gnss_sbas_clock_model_struct      sbasClockModel;          /* Model-5: for SBAS */
+        gnss_bds_clock_model_struct       bdsClockModel;           /* Model-6: for BDS */
+   } data;
+} gnss_clock_model_struct;
+
+typedef struct
+{
+    kal_uint16  keplerToe;         /* [0 .. 16383], time-of-ephemeris, scale factor 60 seconds */
+    kal_int32   keplerW;           /* [-2147483648..2147483647], argument of perigee, scale factor 2^(-31) semi-circles */
+    kal_int16   keplerDeltaN;      /* [-32768..32767], mean motion difference from computed value, scale factor 2^(-43) semi-circles/second */
+    kal_int32   keplerM0;          /* [-2147483648..2147483647], mean anomaly at reference time, scale factor 2^(-31) semi-circles */
+    kal_int32   keplerOmegaDot;    /* [-8388608.. 8388607], longitude of ascending node of orbit plane at weekly epoch, scale factor 2^(-43) semi-circles/second */
+    kal_uint32  keplerE;           /* [0..4294967295], eccentricity, scale factor 2^(-33) */
+    kal_int16   keplerIDot;        /* [-8192..8191], rate of inclination angle, scale factor 2^(-43) semi-circles/second */
+    kal_uint32  keplerAPowerHalf;  /* [0.. 4294967295], semi-major Axis, scale factor 2^(-19) meters^(0.5)*/
+    kal_int32   keplerI0;          /* [-2147483648..2147483647], inclination angle at reference time, scale factor 2^(-31) semi-circles */
+    kal_int32   keplerOmega0;      /* [-2147483648..2147483647], longitude of ascending node of orbit plane at weekly epoch, scale factor 2^(-31) semi-circles */
+    kal_int16   keplerCrs;         /* [-32768..32767], amplitude of the sine harmonic correction term to the orbit radius, scale factor 2^(-5) meters */
+    kal_int16   keplerCis;         /* [-32768..32767], amplitude of the sine harmonic correction term to the angle of inclination, scale factor 2^(-29) radians */
+    kal_int16   keplerCus;         /* [-32768..32767], amplitude of the sine harmonic correction term to the argument of latitude, scale factor 2^(-29) radians */
+    kal_int16   keplerCrc;         /* [-32768..32767], amplitude of the cosine harmonic correction term to the orbit radius, scale factor 2^(-5) meters */
+    kal_int16   keplerCic;         /* [-32768..32767], amplitude of the cosine harmonic correction term to the angle of inclination, scale factor 2^(-29) radians */
+    kal_int16   keplerCuc;         /* [-32768..32767], amplitude of the cosine harmonic correction term to the argument of latitude, scale factor 2^(-29) radians */
+} gnss_nav_model_keplerian_set_struct;
+
+typedef struct
+{
+    kal_uint32  reserved1;  /* [0..8388607], 23 bit field */
+    kal_uint32  reserved2;  /* [0..16777215], 24 bit field */
+    kal_uint32  reserved3;  /* [0..16777215], 24 bit field */
+    kal_uint16  reserved4;  /* [0..65535], 16 bit field */
+} gnss_nav_model_nav_keplerian_set_struct_add_nav_param_ephemSF1Rsvd_struct;
+
+
+typedef struct
+{
+    kal_uint8  ephemCodeOnL2; /* [0..3] */
+    kal_uint8  ephemL2Pflag;  /* [0..1] */
+    gnss_nav_model_nav_keplerian_set_struct_add_nav_param_ephemSF1Rsvd_struct ephemSF1Rsvd;
+    kal_uint8  ephemAODA;     /* [0..31] */
+} gnss_nav_model_nav_keplerian_set_struct_add_nav_param_struct;
+
+
+typedef struct
+{
+    kal_uint8   navURA;         /* [0..15], SV accuracy */
+    kal_uint8   navFitFlag;     /* [0..1], fit interval indication */
+    kal_uint16  navToe;         /* [0..37799], time of ephemeris, scale factor 2^4 seconds */
+    kal_int32   navOmega;       /* [-2147483648..2147483647], argument of perigee, scale factor 2^(-31) semi-circles */
+    kal_int16   navDeltaN;      /* [-32768..32767], mean motion difference from computed value, scale factor 2^(-43) semi-circles/second */
+    kal_int32   navM0;          /* [-2147483648..2147483647], mean anonmaly at reference time, scale factor 2^(-31) semi-circles */
+    kal_int32   navOmegaADot;   /* [-8388608..8388607], rate of right ascension, scale factor 2^(-43) semi-circles/second */
+    kal_uint32  navE;           /* [0..4294967295], eccentricity, scale factor 2^(-33) */
+    kal_int16   navIDot;        /* [-8192..8191], rate of inclination angle, scale factor 2^(-43) semi-circles/second */
+    kal_uint32  navAPowerHalf;  /* [0..4294967295], square root of semi-major axis, scale factor 2^(-19) meters^(0.5) */
+    kal_int32   navI0;          /* [-2147483648..2147483647], inclination angle at reference time, scale factor 2^(-31) semi-circles */
+    kal_int32   navOmegaA0;     /* [-2147483648..2147483647], longitude of ascending node of orbit plane at weekly epoch, scale factor 2^(-31) semi-circles*/
+    kal_int16   navCrs;         /* [-32768..32767], amplitude of sine harmonic correction term to the orbit radius, scale factor 2^(-5) meters */
+    kal_int16   navCis;         /* [-32768..32767], amplitude of the sine harmonic correction term to the angle of inclination, scale factor 2^(-29) radians */
+    kal_int16   navCus;         /* [-32768..32767], amplitude of the sine harmonic correction term to the argument of latitude, scale factor 2^(-29) radians */
+    kal_int16   navCrc;         /* [-32768..32767], amplitude of the cosine harmonic correction term to the orbit radius, scale factor 2^(-5) meters */
+    kal_int16   navCic;         /* [-32768..32767], amplitude of the cosine harmonic correction term to the angle of inclination, scale factor 2^(-29) radians */
+    kal_int16   navCuc;         /* [-32768..32767], amplitude of the cosine harmonic correction term to the argument of latitude, scale factor 2^(-29) radians */
+    /* optional field */
+    kal_bool    addNavParamValid;
+    gnss_nav_model_nav_keplerian_set_struct_add_nav_param_struct addNAVparam; /* data and reserved bits in GPS NAV message */
+} gnss_nav_model_nav_keplerian_set_struct;
+
+
+typedef struct
+{
+    kal_uint16  cnavTop;            /* [0..2015], data predict time of week, scale factor 300 seconds */
+    kal_int8    cnavURAindex;       /* [-16..15], SV accuracy */
+    kal_int32   cnavDeltaA;         /* [-33554432..33554431], semi-major axis difference at reference time, scale factor 2^(-9) meters */
+    kal_int32   cnavAdot;           /* [-16777216..16777215], change rate in semi-major axis, scale factor 2^(-21) meters/sec */
+    kal_int32   cnavDeltaNo;        /* [-65536..65535], mean motion difference from computed value at reference time, scale factor 2^(-44) semi-circles/second */
+    kal_int32   cnavDeltaNoDot;     /* [-4194304..419430], rate of mean motion difference from computed value, scale factor 2^(-57) semi-circles/seconds */
+    kal_int64   cnavMo;             /* [-4294967296..4294967295], mean anomaly at reference time, scale factor 2^(-32) semi-circles */
+    kal_uint64  cnavE;              /* [0..8589934591], eccentricity, scale factor 2^(-34) */
+    kal_int64   cnavOmega;          /* [-4294967296..4294967295], argument of perigee, scale factor 2^(-32) semi-circles */
+    kal_int64   cnavOMEGA0;         /* [-4294967296..4294967295], reference right ascension angle, scale factor 2^(-32) semi-circles */
+    kal_int32   cnavDeltaOmegaDot;  /* [-65536..65535], rate of right ascension difference, scale factor 2^(-44) semi-circles/second */
+    kal_int64   cnavIo;             /* [-4294967296..4294967295], inclination angle at reference time, scale factor 2^(-32) semi-circles */
+    kal_int16   cnavIoDot;          /* [-16384..16383], rate of inclination angle, scale factor 2^(-44) semi-circles/second */
+    kal_int16   cnavCis;            /* [-32768..32767], amplitude of the sine harmonic correction term to the angle of inclination, scale factor 2^(-30) radians */
+    kal_int16   cnavCic;            /* [-32768..32767], amplitude of the cosine harmonic correction term to the angle of inclination, scale factor 2^(-30) radians  */
+    kal_int32   cnavCrs;            /* [-8388608..8388607], amplitude of sine harmonic correction term to the orbit radius, scale factor 2^(-8) meters */
+    kal_int32   cnavCrc;            /* [-8388608..8388607], amplitude of the cosine harmonic correction term to the orbit radius, scale factor 2^(-8) meters */
+    kal_int32   cnavCus;            /* [-1048576..1048575], amplitude of the sine harmonic correction term to the argument of latitude, scale factor 2^(-30) radians */
+    kal_int32   cnavCuc;            /* [-1048576..1048575], amplitude of the cosine harmonic correction term to the argument of latitude, scale factor 2^(-30) radians */
+} gnss_nav_model_cnav_keplerian_set_struct;
+
+
+typedef struct
+{
+    kal_uint8  gloEn;       /* [0..31] */
+    kal_uint8  gloP1;       /* 2 bit field, time interval between two adjacent values of tb */
+    kal_bool   gloP2;       /* change of tb flag */
+    kal_uint8  gloM;        /* [0..3], type of satellite */
+    kal_int32  gloX;        /* [-67108864..67108863], x-coordinate of satellite at time tb, scale factor 2^(-11) kilometers */
+    kal_int32  gloXdot;     /* [-8388608..8388607], x-coordinate of satellite velocity at time tb, scale factor 2^(-20) kilometers/second */
+    kal_int8   gloXdotdot;  /* [-16..15], x-coordinate of satellite acceleration at time tb, scale factor 2^(-30) kilometers/second^2 */
+    kal_int32  gloY;        /* [-67108864..67108863], y-coordinate of satellite at time tb, scale factor 2^(-11) kilometers */
+    kal_int32  gloYdot;     /* [-8388608..8388607], y-coordinate of satellite velocity at time tb, scale factor 2^(-20) kilometers/second */
+    kal_int8   gloYdotdot;  /* [-16..15], y-coordinate of satellite acceleration at time tb, scale factor 2^(-30) kilometers/second^2 */
+    kal_int32  gloZ;        /* [-67108864..67108863], z-coordinate of satellite at time tb, scale factor 2^(-11) kilometers */
+    kal_int32  gloZdot;     /* [-8388608..8388607)], z-coordinate of satellite velocity at time tb, scale factor 2^(-20) kilometers/second */
+    kal_int8   gloZdotdot;  /* [-16..15], z-coordinate of satellite acceleration at time tb, scale factor 2^(-30) kilometers/second^2 */
+} gnss_nav_model_glonass_ecef_struct;
+
+
+typedef struct
+{
+    kal_bool    sbasToValid;
+    kal_uint16  sbasTo;        /* [0..5399], time applicability, scale factor 16 seconds */
+    kal_uint8   sbasAccuracy;  /* 4 bits field, accuracy */
+    kal_int32   sbasXg;        /* [-536870912..536870911], scale factor 0.08 meters */
+    kal_int32   sbasYg;        /* [-536870912..536870911], scale factor 0.08 meters */
+    kal_int32   sbasZg;        /* [-16777216..16777215], 0.4 meters */
+    kal_int32   sbasXgDot;     /* [-65536..65535], rate of change, scale factor 0.000625 meters/second */
+    kal_int32   sbasYgDot;     /* [-65536..65535], rate of change, scale factor 0.000625 meters/second */
+    kal_int32   sbasZgDot;     /* [-131072..131071], rate of change, scale factor 0.004 meters/second */
+    kal_int16   sbasXgDotDot;  /* [-512..511], acceleration, scale factor 0.0000125 meters/second^2 */
+    kal_int16   sbagYgDotDot;  /* [-512..511], acceleration, scale factor 0.0000125 meters/second^2 */
+    kal_int16   sbasZgDotDot;  /* [-512..511], acceleration, scale factor 0.0000625 meters/second^2 */
+} gnss_nav_model_sbas_ecef_struct;
+
+typedef struct
+{
+    kal_uint8   bdsAODE;        /* [0..31], age of data, ephemeris (AODE) */
+    kal_uint8   bdsURAI;        /* [0..15], URA Index, URA is used to describe the signal-in-space accuracy in meters */
+    kal_uint32  bdsToe;         /* [0..131071], ephemeris reference time, scale factor 2^3 seconds */
+    kal_uint32  bdsAPowerHalf;  /* [0..4294967295], square root of semi-major axis, Scale factor 2^(-19) meters^(1/2) */
+    kal_uint32  bdsE;           /* [0..4294967295], eccentricity, dimensionless, scale factor 2^(-33) */
+    kal_int32   bdsW;           /* [-2147483648..2147483647], argument of perigee, scale factor 2^(-31) semi-circles */
+    kal_int16   bdsDeltaN;      /* [-32768..32767], mean motion difference from computed value, scale factor 2-43 semi-circles/sec */
+    kal_int32   bdsM0;          /* [-2147483648..2147483647], mean anomaly at reference time, scale factor 2^(-31) semi-circles */
+    kal_int32   bdsOmega0;      /* [-2147483648..2147483647], longitude of ascending node of orbital of plane computed according to reference time, scale factor 2^(-31) semi-circles */
+    kal_int32   bdsOmegaDot;    /* [-8388608..8388607], rate of right ascension, scale factor 2^(-43) semi-circles/sec */
+    kal_int32   bdsI0;          /* [-2147483648..2147483647], inclination angle at reference time, scale factor 2^(-31) semi-circles */
+    kal_int16   bdsIDot;        /* [-8192..8191], rate of inclination angle, scale factor 2^(-43) semi-circles/sec */
+    kal_int32   bdsCuc;         /* [-131072..131071], amplitude of cosine harmonic correction term to the argument of latitude, scale factor 2^(-31) radians */
+    kal_int32   bdsCus;         /* [-131072..131071], amplitude of sine harmonic correction term to the argument of latitude, scale factor 2^(-31) radians */
+    kal_int32   bdsCrc;         /* [-131072..131071], amplitude of cosine harmonic correction term to the orbit radius, scale factor 2^(-6) meters */
+    kal_int32   bdsCrs;         /* [-131072..131071], amplitude of sine harmonic correction term to the orbit radius, scale factor 2^(-6) meters */
+    kal_int32   bdsCic;         /* [-131072..131071], amplitude of cosine harmonic correction term to the angle of inclination, scale factor 2^(-31) radians */
+    kal_int32   bdsCis;         /* [-131072..131071], amplitude of sine harmonic correction term to the angle of inclination, scale factor 2^(-31) radians */
+} gnss_nav_model_bds_keplerian_set_struct;
+
+
+typedef struct
+{
+    gnss_orbit_model_type_enum                  type;
+
+    union
+    {
+      gnss_nav_model_keplerian_set_struct       keplerianSet;      /* Model-1: usually used for Galileo */
+      gnss_nav_model_nav_keplerian_set_struct   navKeplerianSet;   /* Model-2: for GPS series */
+      gnss_nav_model_cnav_keplerian_set_struct  cnavKeplerianSet;  /* Model-3: for modernized GPS series */
+      gnss_nav_model_glonass_ecef_struct        glonassECEF;       /* Model-4: for GLONASS */
+      gnss_nav_model_sbas_ecef_struct           sbasECEF;          /* Model-5: for SBAS */
+      gnss_nav_model_bds_keplerian_set_struct   bdsKeplerianSet;   /* Model-6: for BDS */
+    } data;
+} gnss_orbit_model_struct;
+
+
+typedef struct
+{
+   kal_uint8                svID;      /* [0..63] */
+   kal_uint8                svHealth;  /* 8 bits */
+   kal_uint16               iod;       /* 11 bits */
+   gnss_clock_model_struct  clockModel;
+   gnss_orbit_model_struct  orbitModel;
+   /* Optional field */
+   kal_bool                 svHealthExt_v1240Valid;
+   kal_uint8                svHealthExt_v1240; /* 4 bits */  
+} gnss_nav_model_satellite_element;
+
+
+typedef struct
+{
+   kal_bool                          nonBroadcastIndFlag; /* [0..1] value 0: navigation model data correspond to satellite broadcasted data;
+                                                                    value 1: navigation model data is not derived from satellite broadcasted data */
+   kal_uint8                         numSatElement;
+   gnss_nav_model_satellite_element  satElement[GNSS_MAX_NAV_SAT_ELEMENT];
+} gnss_navigation_model_struct;
+
+
+typedef struct
+{
+   kal_bool                          nonBroadcastIndFlag; /* [0..1] value 0: navigation model data correspond to satellite broadcasted data;
+                                                                    value 1: navigation model data is not derived from satellite broadcasted data */
+   kal_uint8                         numSatElement;
+   DLIST_HANDLE navDynamicHandle;
+   DLIST_HEAD navDynamicList;
+} gnss_navigation_model_dynamic_struct;
+/* end for gnss navigation model */
+
+
+/* start for gnss real time integrity */
+typedef struct
+{
+   kal_uint8  badSVID;  /* [0..63] */
+   kal_bool   badSignalIDValid;
+   kal_uint8  badSignalID;  /* identidy the bad signal or signals of a satellite, bit string representation, map to GNSS_SGN_ID_BITMAP_* */
+} gnss_bad_signal_element_struct;
+
+
+typedef struct
+{
+    kal_uint8                       numBadSignalElement;
+    gnss_bad_signal_element_struct  badSignalElement[GNSS_MAX_RTI_BAD_SAT_ELEMENT];
+} gnss_real_time_integrity_struct;
+/* end for gnss real time integrity */
+
+
+/* start for gnss data bit assistance */
+typedef struct
+{
+   kal_uint8   gnssSignalType;                           /* identify GNSS signal type, map to GNSS_SGN_ID_VALUE_* */
+   kal_uint8   numGnssDataBits;
+   kal_uint8   gnssDataBits[GNSS_MAX_DBA_BIT_LENGTH/8];  /* data bit original max is 1024 bits */
+} gnss_data_bit_signal_element_struct;
+
+
+typedef struct
+{
+    kal_uint8                            svID;  /* [0..63] */
+    kal_uint8                            numGnssDataBitsSgnElement;
+    gnss_data_bit_signal_element_struct  gnssDataBitsSgnElement[GNSS_MAX_DBA_SGN_TYPE_ELEMENT];
+} gnss_data_bit_satellite_element_struct;
+
+
+typedef struct
+{
+    kal_uint16                              gnssTOD;     /* [0..3599], reference time of the first bit of the data modulo 1 hour, scale factor 1 second */
+    kal_bool                                gnssTODfracValid;
+    kal_uint16                              gnssTODfrac; /* [0..999], fractional part of gnssTD, scale factor 1 milli-second */
+    kal_uint8                               numGnssDataBitsSatElement;
+    gnss_data_bit_satellite_element_struct  gnssDataBitsSatElement[GNSS_MAX_DBA_SAT_ELEMENT];
+} gnss_data_bit_assistance_struct;
+/* end for gnss data bit assistance */
+
+
+/* start for gnss acquisition assistance */
+typedef struct
+{
+    kal_uint8   svID;                   /* [0..63] */
+    kal_int16   doppler0;               /* [-2048..2047], Doppler (0th order term) value for velocity, scale factor 0.5 m/s in th range from -1024 m/s to +1023.5 m/s */
+    kal_uint8   doppler1;               /* [0..63], Doppler (1th order term) value for acceleration, scale factor 1/210 m/s^2 in the range from -0.2 m/s^2 to +0.1 m/s^2 */
+    kal_uint8   dopplerUncertainty;     /* [0..4], defined values: 2.5 m/s, 5 m/s, 10 m/s, 20 m/s, 40 m/s encoded as integer range 0-4 by 2^(-n)*40 m/s, n=0-4 */
+    kal_uint16  codePhase;              /* [0..1022], scale factor 2^(-10) ms in the range from 0 to (1-2^(-10)) ms */
+    kal_uint8   intCodePhase;           /* [0..127], integer codephase, scale factor 1ms */
+    kal_uint8   codePhaseSearchWindow;  /* [0..31], map to value-to-searchwindow table (ms) */
+    kal_uint16  azimuth;                /* [0..511], azimuth angle a, x-degrees of satellite x<=a<x+0.703125, scale factor 0.703125 degrees */
+    kal_uint8   elevation;              /* [0..127], elevation angle e, y-degrees of satellite y>=e<y+0.703125, scale factr 0.703125 degrees */
+    /* optional field */
+    kal_bool    codePhase1023Valid;
+    kal_bool    codePhase1023;          /* only use if codePhase is 1022, codePhase value is 1023*2^(-10) = (1-2^(-10)) ms */
+    /* if support dopplerUncertaintyExtR10, should ignore dopplerUncertainty field */
+    kal_bool                                     dopplerUncertaintyExtR10Valid;
+    gnss_acq_assist_doppler_uncertainty_ext_enum dopplerUncertaintyExtR10; /* enumerated value map to 60 m/s, 80 m/s, 100 m/s, 120 ms, and No Information */
+} gnss_acquisition_assist_element_struct;
+
+
+/**
+ * please note that RRC/RRLP use alternative word to represent GNSS Acquisition Assistance:
+ * RRC: GANSS-ReferenceMeasurementInfo
+ * RRLP: ganssRefMeasurementAssist
+ */
+typedef struct
+{
+    kal_uint8                               gnssSignalID;  /* GNSS type, map to GNSS_SGN_ID_VALUE_* */
+    kal_uint8                               numGnssAcqAssistElement;
+    gnss_acquisition_assist_element_struct  gnssAcqAssistElement[GNSS_MAX_ACQ_ASSIST_SAT_ELEMENT];
+    kal_bool                                confidenceR10Valid;
+    kal_uint8                               confidenceR10;  /* only for LPP */
+} gnss_acquisition_assistance_struct;
+/* end for gnss acquisition assistance */
+
+
+/* start for gnss almanac */
+typedef struct
+{
+    kal_uint8   svID;                  /* [0..63] */
+    kal_uint16  kepAlmanacE;           /* [0..2047], eccentricity, scale factor 2^(-16) */
+    kal_int16   kepAlmanacDeltaI;      /* [-1024..1023], scale factor 2^(-14) semi-circles */
+    kal_int16   kepAlmanacOmegaDot;    /* [-1024..1023], longitude of ascending node of orbit plane at weekly epoch, scale factor 2^(-33) semi-circles/seconds */
+    kal_uint8   kepSVStatusINAV;          /* bit string (size(4)) */
+    kal_uint8   kepSVStatusFNAV;         /* bit string (size(2))  */
+    kal_int32   kepAlmanacAPowerHalf;  /* [-4096..4095], semi-major axis delta, scale factor 2^(-9) meters^0.5 */
+    kal_int16   kepAlmanacOmega0;      /* [-32768..32767], longitude of ascending node of orbit plane at weekly epoch, scale factor 2^(-15) semi-circles */
+    kal_int16   kepAlmanacW;           /* [-32768..32767], argument of perigee, scale factor 2^(-15) semi-circles */
+    kal_int16   kepAlmanacM0;          /* [-32768..32767], mean anomaly at reference time, scale factor 2^(-15) semi-circles */
+    kal_int16   kepAlmanacAF0;         /* [-32768..32767], scale factor 2^(-19) seconds */
+    kal_int16   kepAlmanacAF1;         /* [-4096..4095], scale factor 2^(-38) seconds */
+} gnss_almanac_keplerian_set_struct;
+
+
+typedef struct
+{
+    kal_uint8   svID;            /* [0..63] */
+    kal_uint16  navAlmE;         /* [0..65535], eccentricity, scale factor 2^(-21) */
+    kal_int16   navAlmDeltaI;    /* [-32768..32767], correction to inclination, scale factor 2^(-19) semi-circles */
+    kal_int16   navAlmOMEGADOT;  /* [-32768..32767], rate of right ascension, scale factor 2^(-38) semi-circles/second */
+    kal_uint8   navAlmSVHealth;  /* [0..255] */
+    kal_uint32  navAlmSqrtA;     /* [0..16777215], square root of the semi-major axis, scale factor 2^(-11) meters^0.5 */
+    kal_int32   navAlmOMEGAo;    /* [-8388608..8388607], longitude of ascending node of orbit plane at weekly epoch, scale factor 2^(-23) semi-circles */
+    kal_int32   navAlmOmega;     /* [-8388608..8388607], argument of perigee, , scale factor 2^(-23) semi-circles */
+    kal_int32   navAlmMo;        /* [-8388608..8388607], mean anomaly at reference time, scale factor 2^(-23) semi-circles */
+    kal_int16   navAlmaf0;       /* [-1024..1023], apparent satellite clock correction, scale factor 2^(-20) seconds */
+    kal_int16   navAlmaf1;       /* [-1024..1023], apparent satellite clock correction, scale factor 2^(-38) semi-circles seconds/second */
+} gnss_almanac_nav_keplerian_set_struct;
+
+
+typedef struct
+{
+    kal_uint8  svID;            /* [0..63] */
+    kal_int8   redAlmDeltaA;    /* [-128..127], scale factor 2^9 meters */
+    kal_int8   redAlmOmega0;    /* [-64..63], scale factor 2^(-6) semi-circles */
+    kal_int8   redAlmPhi0;      /* [-64..63], scale factor 2^(-6) semi-circles */
+    kal_bool   redAlmL1Health;  /* L1 health */
+    kal_bool   redAlmL2Health;  /* L2 health */
+    kal_bool   redAlmL5Health;  /* L5 health */
+} gnss_almanac_reduced_keplerian_set_struct;
+
+
+typedef struct
+{
+    kal_uint8   svID;             /* [0..63] */
+    kal_uint16  midiAlmE;         /* [0..2047], eccentricity, scale factor 2^(-16) */
+    kal_int16   midiAlmDeltaI;    /* [-1024..1023], scale factor 2^(-14) semi-circles */
+    kal_int16   midiAlmOmegaDot;  /* [-1024..1023], scale factor 2^(-33) semi-circles/second */
+    kal_uint32  midiAlmSqrtA;     /* [0..131071], scale factor 2^(-4) meters^0.5 */
+    kal_int16   midiAlmOmega0;    /* [-32768..32767], scale factor 2^(-15) semi-circles */
+    kal_int16   midiAlmOmega;     /* [-32768..32767], scale factor 2^(-15) semi-circles */
+    kal_int16   midiAlmMo;        /* [-32768..32767], scale factor 2^(-15) semi-circles */
+    kal_int16   midiAlmaf0;       /* [-1024..1023], scale factor 2^(-20) seconds */
+    kal_int16   midiAlmaf1;       /* [-512..511], scale factor 2^(-37) seconds/second */
+    kal_bool    midiAlmL1Health;  /* L1 health */
+    kal_bool    midiAlmL2Health;  /* L2 health */
+    kal_bool    midiAlmL5Health;  /* L5 health */
+} gnss_almanac_midi_keplerian_set_struct;
+
+
+typedef struct
+{
+    kal_uint16  gloAlmNA;         /* [1..1461], N^A, scale factor 1 days */
+    kal_uint8   gloAlmnA;         /* [1..24] */
+    kal_uint8   gloAlmHA;         /* [0..31] */
+    kal_int32   gloAlmLambdaA;    /* [-1048576..1048575], scale factor 2^(-20) semi-circles */
+    kal_uint32  gloAlmtlambdaA;   /* [0..2097151], scale factor 2(^-5) seconds */
+    kal_int32   gloAlmDeltaIa;    /* [-131072..131071], scale factor 2^(-20) semi-circles */
+    kal_int32   gloAlmDeltaTA;    /* [-2097152..2097151], scale factor 2^(-9) seconds/orbit period */
+    kal_int8    gloAlmDeltaTdotA; /* [-64..63], scale factor 2^(-14) seconds/orbit period */
+    kal_uint16  gloAlmEpsilonA;   /* [0..32767], scale factor 2^(-20) */
+    kal_int16   gloAlmOmegaA;     /* [-32768..32767], scale factor 2^(-15) semi-circles */
+    kal_int16   gloAlmTauA;       /* [-512..511], scale factor 2^(-18) seconds */
+    kal_uint8   gloAlmCA;         /* [0..1] */
+    kal_bool    gloAlmMAValid;
+    kal_uint8   gloAlmMA;         /* 2 bit field */
+} gnss_almanac_glonass_set_struct;
+
+
+typedef struct
+{
+    kal_uint8   sbasAlmDataID;  /* [0..3] */
+    kal_uint8   svID;           /* [0..63] */
+    kal_uint8   sbasAlmHealth;  /* 8 bit field */
+    kal_int16   sbasAlmXg;      /* [-16384..16383], scale factor 2600 meters */
+    kal_int16   sbasAlmYg;      /* [-16384..16383], scale factor 2600 meters */
+    kal_int16   sbasAlmZg;      /* [-256..255], scale factor 26000 meters */
+    kal_int8    sbasAlmXgdot;   /* [-4..3], rate of change, scale factor 10 meters/second */
+    kal_int8    sbasAlmYgDot;   /* [-4..3], rate of change, scale factor 10 meters/second */
+    kal_int8    sbasAlmZgDot;   /* [-8..7], rate of change, scale factor 40.96 meters/second */
+    kal_uint16  sbasAlmTo;      /* [0..2047], scale factor 64 meters/seconds */
+} gnss_almanac_ecef_sbas_set_struct;
+
+typedef struct
+{
+    kal_uint8   svID;              /* [0..63] */
+    kal_bool    bdsAlmToaValid;
+    kal_uint8   bdsAlmToa;         /* [0..255], almanac reference time, scale factor 2^12 seconds */
+    kal_uint32  bdsAlmSqrtA;       /* [0..16777215], square root of semi-major axis, scale factor 2^(-11) meters^(1/2) */
+    kal_uint32  bdsAlmE;           /* [0..131071], eccentricity, dimensionless, scale factor 2^(-21) */
+    kal_int32   bdsAlmW;           /* [-8388608..8388607], argument of perigee, scale factor 2^(-23) semi-circles */
+    kal_int32   bdsAlmM0;          /* [-8388608..8388607], mean anomaly at reference time, scale factor 2^(-23) semi-circles */
+    kal_int32   bdsAlmOmega0;      /* [-8388608..8388607], longitude of ascending node of orbital plane computed according to reference time, scale factor 2^(-23) semi-circles */
+    kal_int32   bdsAlmOmegaDot;    /* [-65536..65535], rate of right ascension, scale factor 2^(-38) semi-circles/sec */
+    kal_int16   bdsAlmDeltaI;      /* [-32768..32767], correction of orbit reference inclination at reference time, scale factor 2^(-19) semi-circles */
+    kal_int16   bdsAlmA0;          /* [-1024..1023], satellite clock bias, scale factor 2^(-20) seconds */
+    kal_int16   bdsAlmA1;          /* [-1024..1023], satellite clock rate, scale factor 2^(-38) sec/sec */
+    kal_bool    bdsSvHealthValid;
+    kal_uint16  bdsSvHealth;       /* 9 bit field, indicate satellites health information as defined in BDS ICD v2.0 Table 5-15. The left most bit is the MSB */
+} gnss_almanac_bds_almanac_set_struct;
+
+typedef struct
+{
+    gnss_almanac_type_enum  type;
+
+    union
+    {
+        gnss_almanac_keplerian_set_struct          keplerianSet;        /* for Galileo */
+        gnss_almanac_nav_keplerian_set_struct      navKeplerianSet;     /* for GPS, QZSS */
+        gnss_almanac_reduced_keplerian_set_struct  reducedKeplerianSet; /* for GPS, Modernized GPS, QZSS */
+        gnss_almanac_midi_keplerian_set_struct     midiKeplerianSet;    /* for GPS, Modernized GPS, QZSS */
+        gnss_almanac_glonass_set_struct            glonassSet;          /* for GLONASS */
+        gnss_almanac_ecef_sbas_set_struct          ecefSbasSet;         /* for SBAS */
+        gnss_almanac_bds_almanac_set_struct        bdsAlmanacSet;       /* for BDS */
+    } data;
+} gnss_almanac_element_struct;
+
+
+typedef struct
+{
+    kal_bool                     weekNumberValid;
+    kal_uint8                    weekNumber;  /* [0..255], almanac reference week number for non-GLONASS system, modulo 256 weeks */
+    kal_bool                     toaValid;
+    kal_uint16                    toa;         /* [0.255], almanac reference time for non-GLONASS system, scale factor 2^12 seconds. For A-Galileo, the toa-ext-v1240 can be [256..1023]. */
+    kal_bool                     iodaValid;
+    kal_uint8                    ioda;        /* [0..3], issue of data, for Galileo system. For A-Galileo, the ioda-ext-v1240 can be [4..15] */
+    kal_bool                     completeAlmanacProvided;  /* if almanac list contains complete GNSS constellation */
+    kal_uint8                    numGnssAlmanacElement;
+    gnss_almanac_element_struct  gnssAlmanacElement[GNSS_MAX_ALMANAC_SAT_ELEMENT];
+} gnss_almanac_struct;
+/* end for gnss almanac */
+
+
+/* start for gnss utc model */
+typedef struct
+{
+    kal_int32  gnssUtcA1;         /* [-8388608..8388607], scale factor 2^(-50) seconds/second */
+    kal_int32  gnssUtcA0;         /* [-2147483648..2147483647], scale factor 2^(-30) seconds */
+    kal_uint8  gnssUtcTot;        /* [0..255], scale factor 2^12 seconds */
+    kal_uint8  gnssUtcWNt;        /* [0..255], scale factor 1 week */
+    kal_int8   gnssUtcDeltaTls;   /* [-128..127], scale factor 1 second */
+    kal_uint8  gnssUtcWNlsf;      /* [0..255], scale factor 1 week */
+    kal_int8   gnssUtcDN;         /* [-128..127], scale factor 1 day */
+    kal_int8   gnssUtcDeltaTlsf;  /* [-128..127], scale factor 1 second */
+} gnss_utc_model_set1_struct;
+
+
+typedef struct
+{
+    kal_int16   utcA0;         /* [-32768..32767], bias coefficient of GNSS time scale relative to UTC time scale, scale factor 2^(-35) seconds */
+    kal_int16   utcA1;         /* [-4096..4095], drift coefficient of GNSS time scale relative to UTC time scale, scale factor 2^(-51) seconds/second */
+    kal_int8    utcA2;         /* [-64..63], drift rate correction coefficient of GNSS time sacel relative to UTC time scale, scale factor 2^(-68) seconds/second^2 */
+    kal_int8    utcDeltaTls;   /* [-128..127], current or past leap second count, scale factor 1 second */
+    kal_uint16  utcTot;        /* [0..65535], time data reference time of week, scale factor 2^4 seconds */
+    kal_uint16  utcWNot;       /* [0..8191], time data reference week number, scale factor 1 week */
+    kal_uint8   utcWNlsf;      /* [0..255], leap second reference week number, scale factor 1 week */
+    kal_uint8   utcDN;         /* 4 bits field, leap second reference day number, scale factor 1 day */
+    kal_int8    utcDeltaTlsf;  /* [-128..127], current or future leap second count, scale factor 1 second */
+} gnss_utc_model_set2_struct;
+
+
+typedef struct
+{
+    kal_uint16  nA;    /* [1..1461], callendar day number within four-year period beginning since the leap year, scale factor 1 day */
+    kal_int32   tauC;  /* [-2147483648..2147483647], GLONASS time scale correction to UTC(SU), scale factor 2^(-31) seconds */
+    /* optional field, mandatory present if GLONASS-M satellites are presnet in the current GLONASS constellation */
+    kal_bool    b1Valid;
+    kal_int16   b1;    /* [-1024..1023], coefficient to determine delta UT1, scale factor 2^(-10) seconds */
+    kal_bool    b2Valid;
+    kal_int16   b2;    /* [-512..511], coefficient to determind delta UT1, scale factor 2^(-16) seconds/msd */
+    kal_bool    kpValid;
+    kal_uint8   kp;    /* 2 bits field, notification of expected leap second correction */
+} gnss_utc_model_set3_struct;
+
+
+typedef struct
+{
+    kal_int32  utcA1wnt;       /* [-8388608..8388607], scale factor 2^(-50) seconds/second */
+    kal_int32  utcA0wnt;       /* [-2147483648..2147483647], scale factor 2^(-30) seconds */
+    kal_uint8  utcTot;         /* [0..255], scale factor 2^12 seconds */
+    kal_uint8  utcWNt;         /* [0..255], scale factor 1 week */
+    kal_int8   utcDeltaTls;    /* [-128..127], scale factor 1 second */
+    kal_uint8  utcWNlsf;       /* [0..255], scale factor 1 week */
+    kal_int8   utcDN;          /* [-128..127], scale factor 1 day */
+    kal_int8   utcDeltaTlsf;   /* [-128..127], scale factor 1 second */
+    kal_uint8  utcStandardID;  /* [0..7], if GNSS-ID indicates SBAS, this field indicated the UTC stadard used for the SBAS network time indicated by SBAS-ID to UTC relation */
+} gnss_utc_model_set4_struct;
+
+
+typedef struct
+{
+    kal_int32  utcA0;         /* [-2147483648..2147483647], BDS clock bias relative to UTC, scale factor 2^(-30) seconds */
+    kal_int32  utcA1;         /* [-8388608..8388607], BDS clock rate relative to UTC, scale factor 2^(-50) sec/sec */
+    kal_int8   utcDeltaTls;   /* [-128..127], delta time due to leap seconds before the new leap second effective, scale factor 1 second */
+    kal_uint8  utcWNlsf;      /* [0..255], week number of the new leap second, scale factor 1 week */
+    kal_uint8  utcDN;         /* [0..255], day number of week of the new leap second, scale factor 1 day */
+    kal_int8   utcDeltaTlsf;  /* [-128..127], delta time due to leap seconds after the new leap second effective, scale factor 1 second */
+} gnss_utc_model_set5_struct;
+
+
+typedef struct
+{
+    gnss_utc_model_type_enum  type;
+ 
+    union
+    {
+       gnss_utc_model_set1_struct  utcModel1;  /* for GPS, Galileo, QZSS */
+       gnss_utc_model_set2_struct  utcModel2;  /* for GPS, Galileo, QZSS */
+       gnss_utc_model_set3_struct  utcModel3;  /* for GLONASS */
+       gnss_utc_model_set4_struct  utcModel4;  /* for SBAS */
+       gnss_utc_model_set5_struct  utcModel5;  /* for BDS */
+    } data;
+} gnss_utc_model_struct;
+/* end for gnss utc model */
+
+
+/* start for gnss aux info */
+typedef struct
+{
+    kal_uint8  svID;              /* [0..63] */
+    kal_uint8  signalsAvailable;  /* 8 bits field, indicate the ranging signals supported by the satellite indicated by svID, map to GNSS_SGN_ID_BITMAP_* */
+} gnss_aux_gps_sat_element_struct;
+
+
+typedef struct
+{
+    kal_uint8                        numGpsElement;
+    gnss_aux_gps_sat_element_struct  gpsElement[GNSS_MAX_AUX_SAT_ELEMENT];
+} gnss_aux_info_gps_struct;
+
+
+typedef struct
+{
+    kal_uint8  svID;              /* [0..63] */
+    kal_uint8  signalsAvailable;  /* 8 bits field, indicate the ranging signals supported by the satellite indicated by svID */
+    /* optional field */
+    kal_bool   channelNumberValid;
+    kal_int8   channelNumber;     /* [-7..13] indicate the GLONASS carrier frequency number of the satellite identified by svID */
+} gnss_aux_glonass_sat_element_struct;
+
+
+typedef struct
+{
+    kal_uint8                            numGlonassElement;
+    gnss_aux_glonass_sat_element_struct  glonassElement[GNSS_MAX_AUX_SAT_ELEMENT];
+} gnss_aux_info_glonass_struct;
+
+
+typedef struct
+{
+    gnss_aux_info_gnss_type_enum type;
+ 
+    union
+    {
+       gnss_aux_info_gps_struct      gps;
+       gnss_aux_info_glonass_struct  glonass;
+    } data;
+} gnss_aux_info_struct;
+/* end for gnss aux info */
+
+
+/* start for gnss dbds correction */
+typedef struct
+{
+    kal_uint8   svID;          /* [0..63] */
+    kal_uint8   bdsUDREI;      /* [0..15], indicate user differential range error information by user differential range error index (UDREI) as defined in BDS ICD v2.0, sec 5.3.3.7.2 */
+    kal_uint8   bdsRURAI;      /* [0..15], indicate Regional User Range Accuracy (RURA) information by Regional User Range Accuracy Index (UDREI) as defined in BDS ICD v2.0, sec 5.3.3.6 */
+    kal_int16   bdsECCDeltaT;  /* [-4096..4095], indicate the BDS differential correction information which is expressed in equivalent clock correction (deltat).
+                                                 add the value of deltat to the observed pseudo-range to correct the effect caused by the satellite clock offset and ephemeris error.
+                                                 value -4096 means the deltat is not available, scale factor 0.1 meter  */
+} gnss_dbds_correction_element_struct;
+
+
+typedef struct
+{
+    kal_uint8                            numCorrectionElements;
+    gnss_dbds_correction_element_struct  correctionElements[GNSS_MAX_DBDS_CORRECTION_ELEMENT];
+} gnss_dbds_correction_list_struct;
+
+
+typedef struct
+{
+    kal_bool                          gnssSignalIdValid;
+    kal_uint8                         gnssSignalId;         /* map to GNSS_SGN_ID_VALUE_* */
+    gnss_dbds_correction_list_struct  correctionList;
+} gnss_dbds_correction_sgn_type_element_struct;
+
+
+typedef struct
+{
+   kal_uint8                                     numSgnTypeElements;
+   gnss_dbds_correction_sgn_type_element_struct  sgnTypeElements[GNSS_MAX_DBDS_SGN_TYPE_ELEMENT];
+} gnss_dbds_correction_sgn_type_list_struct;
+
+
+typedef struct
+{
+   kal_uint16                                 dbdsRefTime;      /* [0..3599], the time for which the differential corrections are valid, modulo 1 hour. dbds-RefTime is given in BDS system time, scale factor 1 second */
+   gnss_dbds_correction_sgn_type_list_struct  dbdsSgnTypeList;
+} gnss_dbds_diff_corrections_struct;
+/* end for gnss dbds correction */
+
+
+/* start for gnss bds grid model */
+typedef struct
+{
+    kal_uint16  igpID;  /* indicate the ionospheric grid point (IGP) number as defined in BDS ICD v2.0, sec 5.3.3.8 */
+    kal_uint16  dt;     /* indicate dT as defined in BDS ICD v2.0, sec 5.3.3.8.1, i.e. the vertical delay at the corresponding IGP indicated by igp-ID, scale factor 0.125 meter */
+    kal_uint8   givei;  /* indicate the Grid Ionospheric Vertical Error Index (GIVEI) which is used to describe the delay correction accuracy at ionospheric grid point indicated by igp-ID, the mapping between GIVEI and GIVE is defined in BDS ICD v2.0, sec 5.3.3.8.2 */
+} gnss_bds_grid_ion_element_struct;
+
+
+typedef struct
+{
+    kal_uint16                        numGridIonElement;
+    gnss_bds_grid_ion_element_struct  gridIonElement[GNSS_MAX_BDS_GRID_ION_ELEMENT];  /* a list that provides ionospheric grid point information for each grid point. Up to 16 instances are used in this version of the specification. The values 17 to 320 are reserved for future use */
+} gnss_bds_grid_ion_list_struct;
+
+
+typedef struct
+{
+    kal_uint16                     bdsRefTime;   /* [0..3599], the time for which the grid model parameters are valid, modulo 1 hour. bdsRefTime is given in BDS system time, scale factor 1 second */
+    gnss_bds_grid_ion_list_struct  gridIonList;  /* a list that provides ionospheric grid point information for each grid point. Up to 16 instances are used in this version of the specification. The values 17 to 320 are reserved for future use */
+} gnss_bds_grid_model_params_struct;
+/* end for gnss bds grid model */
+
+
+/* LCSP -> GNSS Task */
+/* This structure for MSG_ID_LCSP_GNSS_OPEN_REQ */
+typedef struct
+{
+    LOCAL_PARA_HDR
+    //kal_uint8  gnssIdBitmap;  /* GNSS_ID_BITMAP_* */
+    //kal_uint8  preferGnssMode; /* TBD: should not used this kind of design in GNSS */
+} lcsp_gnss_open_req_struct;
+
+
+/* This structure for MSG_ID_LCSP_GNSS_CLOSE_REQ */
+typedef struct
+{
+    LOCAL_PARA_HDR
+    //kal_uint8  gnssIdBitmap; /* GNSS_ID_BITMAP_* */    
+} lcsp_gnss_close_req_struct;
+
+
+/* This structure for MSG_ID_LCSP_GNSS_COMMON_ASSIST_DATA_REQ */
+typedef struct
+{
+    LOCAL_PARA_HDR
+    kal_uint16                           transactionID;
+
+    gnss_common_assist_data_type_enum    type;
+    union
+    {
+        gnss_reference_time_struct       refTime;
+        gnss_reference_location_struct   refLoc;
+        gnss_ionospheric_model_struct    ionModel;
+        gnss_earth_orient_params_struct  eop;
+    } data;
+} lcsp_gnss_common_assist_data_req_struct;
+
+
+/**
+ * in LPP, location server could provide up to 16 GNSSs generic assist data
+ * in RRC/RRLP, location server could provide up to 8 GANSSs generic assist data
+ */
+/* This structure for MSG_ID_LCSP_GNSS_GENERIC_ASSIST_DATA_REQ */
+typedef struct
+{
+    LOCAL_PARA_HDR
+    kal_uint16                               transactionID;
+
+    gnss_id_enum                             gnssId;
+    kal_bool                                 sbasIdValid;  /* only present when gnss is sbas */
+    sbas_id_enum                             sbasId;
+
+    gnss_generic_assist_data_type_enum       type;
+    union
+    {
+        gnss_time_model_list_struct          timeModel;
+        gnss_diff_correction_struct          dgnss;
+        gnss_navigation_model_struct         navModel;
+        gnss_real_time_integrity_struct      rti;
+        gnss_data_bit_assistance_struct      dataBitAssist;
+        gnss_acquisition_assistance_struct   acqAssist;
+        gnss_almanac_struct                  almanac;
+        gnss_utc_model_struct                utcModel;
+        gnss_aux_info_struct                 auxInfo;
+        gnss_dbds_diff_corrections_struct    dbds;
+        gnss_bds_grid_model_params_struct    bdsGridModel;
+    } data;
+} lcsp_gnss_generic_assist_data_req_struct;
+
+
+typedef struct
+{
+   /* note: for MA, use horizontalAccuracy to represent pseudorange error */
+   kal_bool   horizontalAccuracyValid;
+   kal_uint8  horizontalAccuracy;            /* range: 0-127, refer TS 23.032, K1 decoding formula */
+   kal_uint8  horizontalAccuracyConfidence;  /* range: 0-100, refer TS 23.032, direct map to percentage, zero indicate "no inforamation" */
+   kal_bool   verticalAccuracyValid;
+   kal_uint8  verticalAccuracy;              /* range: 0-127, refer TS 23.032, K3 decoding formula */
+   kal_uint8  verticalAccuracyConfidence;    /* range: 0-100, refer TS 23.032, direct map to percentage, zero indicate "no inforamation" */
+   kal_uint8  responseTime;                  /* range: 1-128 seconds */
+//#ifdef __EARLY_FIX_SUPPORT__
+   kal_uint8  responseTimeEarlyFix;          /* range: 1-128 seconds, 0 means not enabled */
+//#endif
+   kal_bool   isPeriodic;
+} gnss_loc_req_qos_struct;
+
+
+/* This structure for MSG_ID_LCSP_GNSS_POS_REQ */
+typedef struct
+{
+    LOCAL_PARA_HDR
+    kal_uint16               transactionID;
+
+    lcs_sim_source_enum      simSource;
+    kal_uint16               gnssMethod;                 /* network allowed GNSS type, may be multiple GNSS, map to GNSS_ID_BITMAP_* */
+    kal_bool                 fineTimeAssistanceMeasReq;  /* network requested fine time measurement */
+                                                         /**
+                                                          * note: we assume that when network requests UE to do fine time measurement,
+                                                          *       network will always give UE corresponding refercence cell information in Reference Time Assistance Data,
+                                                          *       then GNSS task should use this reference cell information within Reference Time Assistance Data to ask current RAT's L1 module to do fine time measurement,
+                                                          *       otherwise the measurement would fail.
+                                                          */
+    kal_bool                 assistanceAvailability;     /* network allow UE request additional GNSS assistance data */
+    gnss_loc_req_qos_struct  qos;
+    kal_bool                 autoResetTrigger;
+} lcsp_gnss_pos_req_struct;
+
+
+/* This structure for MSG_ID_LCSP_GNSS_MEAS_REQ */
+typedef struct
+{
+    LOCAL_PARA_HDR
+    kal_uint16               transactionID;
+
+    lcs_sim_source_enum      simSource;
+    kal_uint16               gnssMethod;                 /* network allowed GNSS type, may be multiple GNSS, map to GNSS_ID_BITMAP_* */
+    kal_bool                 fineTimeAssistanceMeasReq;  /* network requested fine time measurement */
+                                                         /**
+                                                          * note: we assume that when network requests UE to do fine time measurement,
+                                                          *       network will always give UE corresponding refercence cell information in Reference Time Assistance Data,
+                                                          *       then GNSS task should use this reference cell information within Reference Time Assistance Data to ask current RAT's L1 module to do fine time measurement,
+                                                          *       otherwise the measurement would fail.
+                                                          */
+    kal_bool                 adrMeasReq;                 /* network requested ADR(accumulated Doppler range) measurement */
+    kal_bool                 multiFreqMeasReq;           /* network requested to report multiple supported GNSS type */
+    kal_bool                 assistanceAvailability;     /* network allow UE request additional GNSS assistance data */
+    gnss_loc_req_qos_struct  qos;
+    kal_bool                 autoResetTrigger;
+} lcsp_gnss_meas_req_struct;
+
+
+/* This structure for MSG_ID_LCSP_GNSS_ABORT_REQ */
+typedef struct
+{
+    LOCAL_PARA_HDR
+    kal_uint16  transactionID;
+} lcsp_gnss_abort_req_struct;
+
+
+/* This structure for MSG_ID_LCSP_GNSS_RESET_UE_STORED_POS_INFO */
+typedef struct
+{
+    LOCAL_PARA_HDR
+    /* empty */
+} lcsp_gnss_reset_ue_stored_pos_info_struct;
+
+
+/* GNSS Task -> LCSP */
+/* This structure for MSG_ID_LCSP_GNSS_COMMON_ASSIST_DATA_CNF */
+typedef struct
+{
+    LOCAL_PARA_HDR
+    kal_uint16                               transactionID;
+    gnss_common_assist_data_type_enum        type;
+    kal_bool                                 resultOk;
+} lcsp_gnss_common_assist_data_cnf_struct;
+
+
+/* This structure for MSG_ID_LCSP_GNSS_GENERIC_ASSIST_DATA_CNF */
+typedef struct
+{
+    LOCAL_PARA_HDR
+    kal_uint16                               transactionID;
+
+    gnss_id_enum                             gnssId;
+    kal_bool                                 sbasIdValid;  /* only present when gnss is sbas */
+    sbas_id_enum                             sbasId;
+    gnss_generic_assist_data_type_enum       type;
+    kal_bool                                 resultOk;
+} lcsp_gnss_generic_assist_data_cnf_struct;
+
+
+/* No more additional assistance data req primitive, embeded assistance data request in GNSS_POS/MEAS_CNF */
+/**
+ * For common assistance data,
+ * to simplify complexity, LPP would align RRC/RRLP ASN.1 design, request all supported data fields of the assistance data type request
+ *  e.g. If network request GPS+GLONASS positioning estimate, LPP will request all supported fields in the GNSS-ReferenceTimeReq if GNSS task response reference time missing
+ *       (1) gnssTimeReqPrefList = GPS-ID + GLONASS-ID
+ *       (2) gpsTOWAssistReq = true
+ *       (3) notOfLeapSecReq = true
+ *
+ *       If network request GPS only positioning estimate, LPP will request all supported fields in the GNSS-ReferenceTimeReq if GNSS task response reference time missing
+ *       (1) gnssTimeReqPrefList = GPS-ID
+ *       (2) gpsTOWAssistReq = true
+ *       (3) notOfLeapSecReq = false
+ *
+ *  the same design policy also applies on RRC/RRLP original(extend) GANSS-AdditionalAssistanceDataRequest/GANSSAssistanceData
+ */
+
+typedef struct
+{
+    kal_bool  gnssReferenceTimeReq;     /* fill the request as above example */
+    kal_bool  gnssReferenceLocationReq;
+    kal_bool  gnssIonosphericModelReq;  /* klobucharModel for GPS, neQuickModel for Galileo, therefore we fill the request according to GNSS method */
+    kal_bool  gnssEarthOrientationParametersReq;
+} gnss_request_common_assist_data_struct;
+
+
+/**
+ * For generic assistance data, we need to specify GNSS id, and its requested assistance data type.
+ * In some assistance data, we also need to include more data in addition to true/false
+ *  (1) Time Model => GNSS-ID + deltaTreq
+ *  (2) D-Correction => GNSS-Signal-ID + udreValidityTime
+ *  (3) Nav Model => stored nav list or request nav list
+ *  (4) RTI => only true/false!
+ *  (5) Data Bit Assist => GNSS-TOD + interval + speficy which GNSS-Signal-ID, satellite data bit
+ *  (6) ACQ => GNSS-Signal-ID
+ *  (7) Almanac => Model ID (GNSS-ID map to currect Almanac Model ID)
+ *  (8) UTC => Model ID (GNSS-ID map to currect UTC Model ID)
+ *  (9) AUX => only true/false!
+ *  (10) DBDS Correction => GNSS-Signal-ID
+ *  (11) BDS Grid Model => only true/false!
+ */
+
+typedef struct
+{
+    kal_bool         isRequested;     /* indicate if this type of data is requested */
+    kal_uint8        numGnssToIDReq;
+    gnss_to_id_enum  GnssToIDReq[GNSS_MAX_TIME_MODEL_ELEMENT];  /* 5-15 is reserved */
+} gnss_request_time_model_struct;
+
+
+typedef struct
+{
+    kal_bool   isRequested;      /* indicate if this type of data is requested */
+    kal_uint8  gnssSignalsReq;   /* requested GNSS Signal(s), map to GNSS_SGN_ID_BITMAP_* */
+    kal_bool   validityTimeReq;  /* udreGrowthRate and udreValidityTime are requested or not */
+} gnss_request_diff_correction_struct;
+
+
+typedef struct
+{
+    kal_uint8   svID;          /* [0..63] */
+    kal_uint16  iod;           /* 11 bits field */
+    /* GNSS-ID to clock/orbit model ID (map to GNSS_NAV_CLOCK_MODEL_*_VALUE_* and GNSS_NAV_ORBIT_MODEL_*_VALUE_*)
+     *  gps    : Model-2
+     *  sbas   : Model-5
+     *  qzss   : Model-2
+     *  galileo: Model-1
+     *  glonass: Model-4
+     *  bds    : Model-6
+     */
+    kal_bool    clockModelIDValid;
+    kal_uint8   clockModelID;  /* [1..8], optional, specify which clock model used */
+    kal_bool    orbitModelIDValid;
+    kal_uint8   orbitModelID;  /* [1..8]. optional, specify which orbit model used */
+} gnss_sat_data_element_struct;
+
+
+typedef struct
+{
+    kal_uint16                    gnssWeekOrDay; /* [0..4095], indicate GNSS week number for non-GLONASS, otherwise indicate calendar number of data within four-year interval starting from 1st of January in a leap year */
+    kal_uint8                     gnssToe;       /* [0.255], indicate GNSS time of ephemeris in hours of latest ephemeris for non-GLONASS, otherwise indicate the time of ephemeris in units of 15 minutes of the latest ephemeris */
+    kal_uint8                     tToeLimit;     /* [0..15], indicate ephemeris age tolerance in units of hours for non-GLONASS, otherwise indicate ephemeris age tolerance in units of 30 minutes */
+    kal_uint8                     numSatDataElement;
+    gnss_sat_data_element_struct  satDataElement[GNSS_MAX_NAV_SAT_ELEMENT];  /* optional */
+} gnss_stored_nav_list_struct;
+
+
+typedef struct
+{
+    kal_uint8  svReqList[GNSS_MAX_NAV_SAT_ELEMENT_BIT_POS/8];  /* bit position represent SV-ID, total 64 bits */
+    /* GNSS-ID to clock/orbit model ID (map to GNSS_NAV_CLOCK_MODEL_*_VALUE_* and GNSS_NAV_ORBIT_MODEL_*_VALUE_*)
+     *  gps    : Model-2
+     *  sbas   : Model-5
+     *  qzss   : Model-2
+     *  galileo: Model-1
+     *  glonass: Model-4
+     *  bds    : Model-6
+     */
+    kal_uint8  numClockModelIDPrefList;
+    kal_uint8  clockModelIDPrefList[GNSS_MAX_NAV_CLOCK_MODEL_ELEMENT];  /* optional, list requested clock model in the order of preference */
+    kal_uint8  numOrbitModelIDPrefList;
+    kal_uint8  orbitModelIDPrefList[GNSS_MAX_NAV_ORBIT_MODEL_ELEMENT];  /* optional, list requested orbit model in the order of preference */
+    kal_bool   addNaparamReqValid;
+    kal_bool   addNavparamReq;                                          /* dedicated for orbit model - nav-keplerian-set (gps) if need to include addNAVpara IE */
+} gnss_requested_nav_list_struct;
+
+
+typedef struct
+{
+    kal_bool                            isRequested;          /* indicate if this type of data is requested */
+    gnss_nav_model_req_type_enum        type;                 /* storedNavList or reqNavList */
+    /* 
+     * TBD: NAV request would be too complex for GNSS task/MNL to have this kind of detailed nav data.
+     *      evaluate if we could simplify it (always use requestd nav list according to GNSS method?)
+     */
+    union
+    {
+        gnss_stored_nav_list_struct     storedNavList;  /* this needs GNSS chip response current searched SAT info (in detailed) */
+        gnss_requested_nav_list_struct  reqNavList;     /* this could simply fill corresponding IE according network specified GNSS method, but needs svID list */
+    } data;
+} gnss_request_nav_model_struct;
+
+
+typedef struct
+{
+    kal_bool    isRequested;                           /* indicate if this type of data is requested */
+    kal_uint16  gnssTODReq;                            /* [0..3599], specify the reference time for the first data bit requestd in GNSS specific system time, modulo 1 hour, scale factor 1 second */
+    kal_bool    gnssTODFracReqValid;
+    kal_uint16  gnssTODFracReq;                        /* [0..999], speficty the franctional part of GNSS-TOD-Req, scale factor 1 millisecond */
+    kal_uint8   dataBitInterval;                       /* [0..15], value K, the time length for Data Bit Assist requested, r (second) = 0.1*2^K, K=0 means it is not specified */
+    kal_uint8   gnssSignalTypes;                       /* requested GNSS Signal(s), map to GNSS_SGN_ID_BITMAP_* */
+    kal_uint8   numReqSatList;
+    kal_uint8   ReqSatList[GNSS_MAX_DBA_SAT_ELEMENT];  /* optional, list contains SV-IDs for Data Bit Assist requested */
+} gnss_request_data_bit_assist_struct;
+
+
+typedef struct
+{
+    kal_bool   isRequested;        /* indicate if this type of data is requested */
+    kal_uint8  gnssSignalTypeReq;  /* requested signal type, only specify one single signal, map to GNSS_SGN_ID_VALUE_* */
+} gnss_request_acq_assist_struct;
+
+
+typedef struct
+{
+    kal_bool   isRequested;     /* indicate if this type of data is requested */
+    /* this could simply fill corresponding IE according network specified GNSS method */
+    /*
+     * GNSS-ID to almanac model ID (map to GNSS_ALMANAC_MODEL_*_VALUE_*)
+     *  gps    : Model-2 (keplerian NAV almanac set)
+     *  sbas   : Model-6 (ecef-SBAS almanac set)
+     *  qzss   : Model-2 (keplerian NAV almanac set)
+     *  galileo: Model-1 (keplerian almanac set)
+     *  glonass: Model-5 (Glonass almanac set)
+     *  bds    : Model-7 (BDS almanac set)
+     */
+    kal_bool   modelIDValid;
+    kal_uint8  modelID;  /* [1..8], currently 1..7, map to GNSS_ALMANAC_MODEL_7_VALUE_* */
+} gnss_request_almanac_struct;
+
+
+typedef struct
+{
+    kal_bool   isRequested;     /* indicate if this type of data is requested */
+    /* this could simply fill corresponding IE according network specified GNSS method */
+    /*
+     * GNSS-ID to UTC model ID (map to GNSS_UTC_MODEL_*_VALUE)
+     *  gps    : Model-1
+     *  sbas   : Model-4
+     *  qzss   : Model-1
+     *  galileo: Model-1
+     *  glonass: Model-3
+     *  bds    : Model-5
+     */
+    kal_bool   modelIDValid;
+    kal_uint8  modelID;  /* [1..8], currently 1..5 map to GNSS_UTC_MODEL_*_VALUE */
+} gnss_request_utc_model_struct;
+
+
+typedef struct
+{
+    kal_bool   isRequested;      /* indicate if this type of data is requested */
+    kal_uint8  gnssSignalsReq;   /* requested GNSS Signal(s), map to GNSS_SGN_ID_BITMAP_* */
+} gnss_request_dbds_correction_struct;
+
+
+typedef struct
+{
+    gnss_id_enum  gnssID;
+    kal_bool      sbasIDValid;
+    sbas_id_enum  sbasID;
+ 
+    gnss_request_time_model_struct       gnssTimeModelsReq;
+    gnss_request_diff_correction_struct  gnssDCorrectionsReq;
+    gnss_request_nav_model_struct        gnssNavModelReq;
+    kal_bool                             gnssRTIReq;
+    gnss_request_data_bit_assist_struct  gnssDataBitAssistReq;
+    gnss_request_acq_assist_struct       gnssAcqAssistReq;
+    gnss_request_almanac_struct          gnssAlmanacReq;
+    gnss_request_utc_model_struct        gnssUTCModelReq;
+    kal_bool                             gnssAuxInfoReq;
+    gnss_request_dbds_correction_struct  gnssDBDSCorrectionsReq;
+    kal_bool                             gnssBDSGridModelReq;
+} gnss_request_generic_assist_data_struct;
+
+
+typedef struct
+{
+    gnss_request_common_assist_data_struct   gnssCommonAssistData;
+    kal_uint8                                numGnssGenericAssistData;
+    gnss_request_generic_assist_data_struct  gnssGenericAssistData[GNSS_MAX_REQ_ADD_GENERIC_ASSIST_DATA_ELEMENT];
+} gnss_request_assist_data_struct;
+
+
+typedef struct
+{
+    gnss_eutra_cell_id_struct  cellID;
+    kal_uint16                 systemFrameNumber;  /* 10 bits field, refer TS 36.331 */
+} gnss_measured_ref_network_time_eutra_struct;
+
+
+typedef struct
+{
+    gnss_utra_cell_id_struct  cellID;
+    kal_uint16                refSystemFrameNumber;  /* [0..4095], refer TS 25.331 */
+} gnss_measured_ref_network_time_utra_struct;
+
+
+typedef struct
+{
+    gnss_gsm_cell_id_struct  cellID;
+    kal_uint16               referenceFN;       /* [0..65535] */
+    kal_bool                 referenceFNMSBValid;
+    kal_uint8                referenceFNMSB;    /* [0..63], FN (frame number) = referenceFNMSB*42432 + referenceFN */
+    kal_bool                 deltaGNSSTODValid;
+    kal_uint8                deltaGNSSTOD;      /* [0..127], the difference in millisecond between gnssTODmsec and millisecond part of the SV time of first SV in the list reported from target device */
+} gnss_measured_ref_network_time_gsm_struct;
+
+
+typedef struct
+{
+    gnss_network_cell_type_enum                      type;
+    union
+    {
+        gnss_measured_ref_network_time_eutra_struct  eutra;
+        gnss_measured_ref_network_time_utra_struct   utra;
+        gnss_measured_ref_network_time_gsm_struct    gsm;
+    } data;
+} gnss_measured_ref_network_time_struct;
+
+
+typedef struct
+{
+    kal_uint32                             gpsTOW;            /* [0..604799999], scale factor millisecond, only used for legacy GPS! (gnssTimeID == GPS) */
+    kal_uint16                             gnssDayNumber;     /* [0..32767] */
+    kal_uint32                             gnssTODmsec;       /* [0..3599999], scale factor 1 millisecond in a hour*/
+    kal_bool                               gnssTODfracValid;
+    kal_uint16                             gnssTODfrac;       /* [0..3999], scale factor 250 nanoseconds */
+    kal_bool                               gnssTODuncValid;
+    kal_uint8                              gnssTODunc;        /* [0..127], K = [0..127], uncertainty r (microseconds) = C*(((1+x)^K)-1), C=0.5, x=0.14 */
+    gnss_id_enum                           gnssTimeID;        /* specify GNSS type of GNSS system time (TOD+frac) provided */
+
+    /* contain networkTime only if fineTimeAssistanceMeasReq is TRUE */
+    kal_bool                               networkTimeValid;
+    gnss_measured_ref_network_time_struct  networkTime;
+} gnss_measured_ref_time;
+
+
+/* we only support horizontal velocity */
+typedef struct
+{
+    kal_uint16  bearing;          /* [0..359], direction clockwise from North, scale factor 1 degrees */
+    kal_uint16  horizontalSpeed;  /* [0..2047], scale factor 1 kilometers/hour */
+} gnss_h_velocity_struct;
+
+
+typedef struct
+{
+    kal_bool                signOfLatitude;        /* TRUE: SOUTH, FALSE: NORTH */
+    kal_uint32              degreesLatitude;       /* [0..8388607], 23 bits field */
+    kal_int32               degreesLongitude;      /* [-8388608..8388607], 24 bits field */
+    kal_bool                signOfAltitude;        /* TRUE: DEPTH, FALSE: HEIGHT */
+    kal_uint16              altitude;              /* [0..32767], 15 bits field */
+    kal_uint8               uncertaintySemiMajor;  /* K: [0..127], uncertainty r (meter) = C*((1+x)^K-1), C=10, x=0.1 */
+    kal_uint8               uncertaintySemiMinor;  /* K: [0..127], uncertaintyr (meter) = C*((1+x)^K-1), C=10, x=0.1 */
+    kal_uint8               orientationMajorAxis;  /* bearing angle degree: [0-179] */
+    kal_uint8               uncertaintyAltitude;   /* K: [0..127], uncertainty h (meter) = C*((1+x)^K-1), C=45, x=0.025 */
+    kal_uint8               confidence;            /* [0..100] */
+    kal_bool                velocityValid;
+    gnss_h_velocity_struct  velocityEstimate;
+} gnss_gad_pos_estimate_struct;
+
+typedef struct
+{
+    kal_uint8   svID;                   /* [0..63] */
+    kal_uint8   cNo;                    /* [0..63], carrier-to-noise ratio, scale factor 1dB-Hz */
+    kal_uint8   multipath;              /* multipath indicator, real data is two bits field represent multipath enum
+                                           '0' = Not measured
+                                           '1' = Low, MP error < 5m
+                                           '2' = Medium, 5m < MP error < 43m
+                                           '3' = High, MP error > 43m
+                                         */
+
+    /* use validity flag and rearrange fields to reduce structure size */
+    /** 
+     *  GNSS_MEAS_INFO_CARRIER_QUALITY_VALIDITY   0x01
+     *  GNSS_MEAS_INFO_INT_CODE_PHASE_VALIDITY    0x02
+     *  GNSS_MEAS_INFO_DOPPLER_VALIDITY           0x04
+     *  GNSS_MEAS_INFO_ADR_VALIDITY               0x08
+     */
+    kal_uint8   validity;
+
+    kal_uint8   carrierQualityInd;      /* [0..3], two bits field represent carrier phase data inverted/direct, and (not) continuous */
+    kal_uint8   intCodePhase;           /* [0..127], integer millisecond part of code phase modulo codePhaseAmbiguity, scale factor 1 milli-seconds in the range from 0 to 127 milliseconds */
+
+    /* to represent codephase RMS error value index, refer floating-point representation mapping table, LPP/RRC/RRLP should combine M & E to index value according to the table */
+    kal_uint8   codePhaseRMSErrorM;     /* codePhase(pseudorange) RMS Error Mantissa */
+    kal_uint8   codePhaseRMSErrorE;     /* codePhase(Pseudorange) RMS Error Exponent */
+
+    kal_int16   doppler;                /* [-32768..32767], scale factor 0.04 meter/seconds */
+
+    kal_uint32  codePhase;              /* [0..2097151], contain the whole and fractional value of the code phase, scale factor 2^(-21) milliseconds in the range from 0 to (1-2^(-21)) milliseconds */
+
+    kal_uint32  adr;                    /* [0 .. 33554431], accumulated delta range, scale factor 2^(-10) meters in the range for 0 to 32767.5 meters */
+
+    // For LPPE HA
+    kal_uint8   haAdrRMSerror;         /* [0..127], contain the RMS error of the continuous carrier phase, scale factor 2^-10 meters, in the range [0, 0.12403) meters */
+    kal_bool    haLockIndicator;       /* TRUE if the carrier phase tracking has been continuous between the previous and the current measurement delivery; */
+} gnss_measure_info_one_sat;
+
+
+typedef struct
+{
+    kal_uint8                  signalID;                 /* map to GNSS_SGN_ID_VALUE_* */
+    kal_bool                   codePhaseAmbiguityValid;
+    kal_uint8                  codePhaseAmbiguity;       /* [0..127], scale factor 1 milli-seconds */
+    kal_uint8                  numSatMeasElement;
+    gnss_measure_info_one_sat  satMeasElement[GNSS_MAX_MEASURED_SAT_PER_SGN_ELEMENT];
+} gnss_measure_info_one_sgn;
+
+
+typedef struct
+{
+    gnss_id_enum               gnssID;
+    kal_uint8                  numSgnMeasElement;
+    gnss_measure_info_one_sgn  sgnMeasElement[GNSS_MAX_MEASURED_SGN_PER_GNSS_ELEMENT];
+} gnss_measure_info_one_gnss;
+
+
+typedef struct
+{
+    /**
+     * Measurement information up to 16 GNSSs can be included.
+     * Per GNSS, up to 8 GNSS signal measurements
+     * Per GNSS signal measurement (band), up to 64 GNSS satellites
+     */
+    kal_uint8                   numGnssMeasElements;
+    gnss_measure_info_one_gnss  gnssMeasElement[GNSS_MAX_MEASURED_GNSS_ELEMENT];
+    gnss_measured_ref_time      measuredRefTime;  /* should always present */
+    //gnss_ha_measured_result_struct haMeasResult;    
+} gnss_measured_result_struct;
+
+/* This structure for MSG_ID_LCSP_GNSS_ADDITIONAL_ASSIST_DATA_REQ */
+/* This primitive is dedicated for LPP:
+ * For LPP, if we request additional assistance data, the network will not resent
+ * a new RequestLocationInformation followed by ProvideAssistanceData (two procedures are independent).
+ *
+ * Therefore, the response time will not reset and LPP will not send a new LCSP_GNSS_POS(MEAS)_REQ,
+ * that's why we separate request additional assistance data by another message
+ * rather than embeded in LCSP_GNSS_POS(MEAS)_CNF (as RRLP/ULCS design)
+ */
+typedef struct
+{
+    LOCAL_PARA_HDR
+    kal_uint16                       transactionID;  /* transaction ID should align LCSP_GNSS_POS(MEAS)_REQ if present, for checking assistanceAvailability */
+
+    kal_uint16                       gnssMethod;     /* network allowed GNSS type in LCSP_GNSS_POS(MEAS)_REQ if present (or current GNSS chip operation mode), may be multiple GNSS, map to GNSS_ID_BITMAP_* */
+    gnss_request_assist_data_struct  assistDataReq;
+    kal_bool                         lppeAssistDataValid;
+} lcsp_gnss_additional_assist_data_req_struct;
+
+
+/* start for gnss chip support */
+typedef struct
+{
+    gnss_id_enum               gnssID;
+    kal_uint8                  sgnIdBitmap;
+} gnss_gnss_info_one_gnss;
+
+
+typedef struct
+{
+    kal_bool                    adrFlag;
+    kal_bool                    ftaFlag;           
+    kal_bool                    dgnssFlag;
+    kal_uint8                   gnssNumber;
+    kal_uint16                  gnssMethod;        /* specify the estimated location is supported by GNSS chip, map to GNSS_ID_BITMAP_* */
+    gnss_gnss_info_one_gnss     gnssInfo[GNSS_MAX_SUPPORT_NUM];
+    kal_bool                    lppeFlag;
+} gnss_capability_report_struct;
+
+
+/* This structure for MSG_ID_ERRC_LBS_GNSS_POS_REQ */
+typedef struct
+{
+    LOCAL_PARA_HDR
+    kal_bool positioning_status; /*KAL_TRUE:activate, KAL_FALSE:deactivate} for START/STOP MDT positioning */
+    errc_lbs_gnss_pos_mdt_type_enum positioning_mdt_type; /* start/stop MDT positioning with logged MDT or immediate MDT */
+}errc_lbs_gnss_pos_req_struct;
+
+/* This structure for MSG_ID_ERRC_LBS_GNSS_POS_IND */
+typedef struct
+{
+    LOCAL_PARA_HDR
+    kal_uint16 gnssMethod; /*GNSS Satellite system calculated for this positioning information, gnssMethod  = 0x00 if the position info not available*/
+    gnss_gad_pos_estimate_struct locationEstimate; /*Position information ellipsoidPointWithAltitudeAndUncertaintyEllipsoid*/
+    gnss_measured_ref_time measuredRefTime; /* Timing information for gnss- TOD-msec-r10, The TOD is also available*/
+    kal_uint32 measuredTimeDiff; /* Time difference between LBS getting the positioning result and reporting to ERRC*/
+} errc_lbs_gnss_pos_ind_struct;
+
+
+typedef struct {
+    kal_bool                            is_cdma_eutra_sync;     /*FDD mode TRUE : sync sys time recommended, FALSE : assync time recommended.*/
+    time_sib_cdma_sys_time_type_enum    cdma_sys_time_type;     /*Used for sync/async_sys_time choice*/
+    union
+    {
+        kal_uint8 sync_sys_time[5];                             /*bit string : 39 bits*/
+        kal_uint8 async_sys_time[7];                            /*bit string : 49 bits*/
+    } 
+    choice;
+} time_sib_cdma_sys_time_info_struct;
+
+
+typedef struct
+{
+    LOCAL_PARA_HDR
+    kal_uint8  CtrlFlag;                                        /*0: Disable (stop pulse), 1: Enable (Start in periodic mode), 2: Test Mode Enable (Start in one shot mode)*/
+    kal_uint32 PulsePeriod;                                     /* unit : msec, Range: 100 ~ 300000, The period of pulse. (100 ms ~ 5 min), effective when CtrlFlag = 1 */
+    kal_uint16 PulseNumber;                                     /*number : 0~7200, 0: Periodic Mode, 1~7200: Non-Periodic Number of Pulse, effective when CtrlFlag = 1*/
+} lbs_errc_read_time_sib_req_struct;
+
+
+typedef struct
+{
+    LOCAL_PARA_HDR
+    time_sib_result_enum                  result;
+    /*SIB8*/
+    kal_bool                              is_sib8_valid;
+    time_sib_cdma_sys_time_info_struct    sys_time_info;
+    kal_uint64                            sib8_time_diff;
+    /*SIB16*/
+    kal_bool                              is_sib16_valid;
+    kal_uint64                            timeinfo_utc; 
+    kal_uint8                             dayLightSavingTime[2];
+    kal_bool                              is_leap_seconds_valid;  
+    kal_int16                             leap_seconds;
+    kal_int16                             localTimeOffset;
+    kal_uint64                            sib16_time_diff;   
+} lbs_errc_read_time_sib_ind_struct;
+
+
+/* ---LPPe HA GNSS Interface---begin--- */
+typedef struct
+{
+    kal_uint8               cep;                   /* [0..255] */
+    kal_uint8               confidenceHorizontal;    /* [0..99] */
+    kal_uint8               confidenceVertical;      /* [0..99] */    
+} gnss_ha_3Dposition_struct;
+
+
+typedef struct
+{
+    kal_uint16              eastComponent;          /* [0..511] */
+    kal_uint16              northComponent;          /* [0..511] */
+    kal_uint16              upComponent;            /* [0..511] */    
+    kal_uint8               cepV;                  /* [0..255] */
+    kal_uint8               uncertaintySemiMajor;    /* [0..255] */
+    kal_uint8               uncertaintySemiMinor;    /* [0..255] */    
+    kal_uint8               offsetAngle;            /* [0..179] */ 
+    kal_uint8               confidenceHorizontal;    /* [0..99] */
+    kal_uint8               uncertaintyUpComponent;  /* [0..255] */
+    kal_uint8               confidenceUp;           /* [0..99] */
+} gnss_ha_3Dvelocity_struct;
+
+
+typedef struct
+{
+    gnss_ha_3Dposition_struct   ThreeDposition;
+    gnss_ha_3Dvelocity_struct   ThreeDvelocity;
+} gnss_ha_pos_estimate_struct;
+
+
+typedef struct
+{
+    gnss_system_time_struct  beginTime;          /* specify the start time of the validity period */
+    kal_bool                 beginTimeAltValid;
+    kal_uint16               beginTimeAlt;       /* [0..2881], specify the alternative start time, and the start time is relative the time the message was received, scale factor 15 min (range from 0 minutes to 43215 min = 30 days) */
+    kal_uint16               duration;           /* [0..2881], specify the duration of the validity period after the beginTime, scale factor 15 min (range from 0 minutes to 43215 min = 30 days) */
+} gnss_ha_validity_period_struct;
+
+#if 0 
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif
+
+typedef struct
+{
+    kal_uint8                 regionSizeInv;       /* [1..255], specify the inverse of the size of each side of the region in degrees, for value N the size is 10/N degrees */
+    kal_bool                  areaWidthValid;
+    kal_uint16                areaWidth;           /* [2..9180], specify the number of regions in the area in East-West direction, if the field is not present, the value is 1 */
+    kal_uint16                codedLatOfNWCorner;  /* [0..4589], specify the latitude of the North-West corner of the area, encoded as explained in OMA-TS-LPPe Appendix C.1 */
+    kal_uint16                codedLonOfNWCorner;  /* [0..9179], specify the longitude of the North-West corner of the area, encoded as explained in OMA-TS-LPPe Appendix C.1 */
+
+    kal_bool                  rleListValid;
+    //gnss_ha_rlelist_struct     rleList;             /* TBD: redefine internal structure? */  /* This field lists the regions in which the data is valid. If the field is not present, the data is valid in all the regions in the area */
+} gnss_ha_validity_area_struct;
+
+
+typedef struct
+{
+    kal_uint8   regionSizeInv;       /* specify the inverse of the size of each side of the region in degrees, for value N the size is 10/N degrees */
+    kal_bool    areaWidthValid;
+    kal_uint16  areaWidth;           /* specify the number of regions in the area in East-West direction, if the field is not present, the value is 1 */
+    kal_uint16  codedLatOfNWCorner;  /* specify the latitude of the North-West corner of the area, encoded as explained in OMA-TS-LPPe Appendix C.1 */
+    kal_uint16  codedLonOfNWCorner;  /* specify the longitude of the North-West corner of the area, encoded as explained in OMA-TS-LPPe Appendix C.1 */
+} gnss_ha_storm_validity_area_struct;  /* only used in gnss_ha_iono_storm_ind_struct */
+
+
+typedef struct
+{
+    kal_uint8  duration;          /* [1..63], scale factor 15 min, range [15, 945 min], i.e. upto 16 hours */
+    kal_bool   durationLSBValid;
+    kal_uint8  durationLSB;       /* [1..89], finer granularity duration, scale factor is 10 seconds, range [10, 890] seconds */
+} gnss_ha_duration;
+
+
+typedef struct
+{
+    kal_uint8   validityBitmap;  /* bhValid, chValid, awValid, bwValid, cwValid, use GNSS_HA_MAPPING_FUNC_PARAMS_BIT_*_VALID */
+    kal_uint16  ah;  /* [0..16383], the a-coefficient of the hydrostatic mapping function, scale factor 2^-14 */
+    /* optional */
+    kal_uint16  bh;  /* [0..16383], the b-coefficient of the hydrostatic mapping function, scale factor 2^-14 */
+    /* optional */
+    kal_uint16  ch;  /* [0..16383], the c-coefficient of the hydrostatic mapping function, scale factor 2^-14 */
+    /* optional */
+    kal_uint16  aw;  /* [0..16383], the a-coefficient of the wet mapping function, scale factor 2^-14 */
+    /* optional */
+    kal_uint16  bw;  /* [0..16383], the b-coefficient of the wet mapping function, scale factor 2^-14 */
+    /* optional */
+    kal_uint16  cw;  /* [0..16383], the c-coefficient of the wet mapping function, scale factor 2^-14 */
+} gnss_ha_mapping_func_params_struct;
+
+
+typedef struct
+{
+    kal_int32  latitude;            /* [-2147483648..2147483647], latitude based on WGS84 [GPS-ICD-200D] datum, the relation between the latitude X in range [-90', 90'],
+                                       and the coded number N is N = floor((X/90')*2^31), where value N=2^31 is coded as N=2^31-1, resolution 4.7 mm */
+    kal_int32  longitude;           /* [-2147483648..2147483647], longitude based on WGS84 [GPS-ICD-200D] datum, the relation between the longitude X in range [-180', 180'),
+                                       and the coded number N is floor((X/180')*2^31), worst-case resolution (at the Equator) 9.3 mm */
+    kal_bool   cepValid;
+    kal_uint8  cep;                 /* [0..255], horizontal uncertainty expressed as Circular Error Probable expressed as the coded number N,
+                                       the relation between the CEP and the coded number is given by CEP = 0.3*((1+0.02)^N - 1) meters, range [0, 45.6) meters */
+    kal_bool   uncSemiMajorValid; 
+    kal_uint8  uncSemiMajor;        /* [0..255], the semi-major axis of the horizontal uncertainty ellipse expressed as the coded number N,
+                                       the relation between the semi-major axis and the coded number is given by semi-major axis = 0.3*( (1+0.02)^N -1) meters, range [0, 45.6) meters */
+    kal_bool   uncSemiMinorValid;
+    kal_uint8  uncSemiMinor;        /* [0..255], the semi-minor axis of the horizontal uncertainty ellipse expressed as the coded number N,
+                                       the relation between the semi-minor axis and the coded number is given by semi-minor axis = 0.3*((1+0.02)^N -1) meters, range [0, 45.6) meters */
+    kal_bool   offsetAngleValid;
+    kal_uint8  offsetAngle;         /* [0..179], the angle of semi-major axis measured clockwise with respect to True North in steps of 1 degree */
+
+    kal_bool   confHorizontalValid;
+    kal_uint8  confHorizontal;      /* [0..99], specify the horizontal confidence percentage associated with the CEP or Uncertainty Ellipse depending upon which is included */
+    kal_int32  altitude;            /* [-64000..1280000], altitude with respect to WGS84 [GPS-ICD-200D] ellipsoid, scale factor 2^(-7) meters, range [-500, 10000] meters */
+    kal_uint8  uncAltitude;         /* [0..255], the altitude uncertainty expressed as the coded number N, the relation between the altitude uncertainty and
+                                       the coded number is given by uncertainty= 0.3*((1+0.02)^N -1) meters, range [0, 45.6) meters */
+    kal_bool   confVerticalValid;
+    kal_uint8  confVertical;        /* [0..99], specify the confidence percentage associated with the altitude uncertainty */
+} gnss_ha_high_accu_3d_position_struct;
+
+#if 0
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif
+
+/* begin of gnss_ha_ionospheric_model */
+typedef struct
+{
+    gnss_ha_validity_period_struct  validityPeriod;  /* specify the start time and duration of the model validity period */
+    kal_int8                        alfa0;           /* [-128..127], specify the alpha0 parameter of the Klobuchar model, scale factor 2^(-30) seconds */
+    kal_int8                        alfa1;           /* [-128..127], specify the alpha1 parameter of the Klobuchar model, scale factor 2^(-27) seconds/semi-circle */
+    kal_int8                        alfa2;           /* [-128..127], specify the alpha2 parameter of the Klobuchar model, scale factor 2^(-24) seconds/semi-circle^2 */
+    kal_int8                        alfa3;           /* [-128..127], specify the alpha3 parameter of the Klobuchar model, scale factor 2^(-24) seconds/semi-circle^3 */
+    kal_int8                        beta0;           /* [-128..127], specify the beta0 parameter of the Klobuchar model, scale factor 2^11 seconds */
+    kal_int8                        beta1;           /* [-128..127], specify the beta1 parameter of the Klobuchar model, scale factor 2^14 seconds/semi-circle */
+    kal_int8                        beta2;           /* [-128..127], specify the beta2 parameter of the Klobuchar model, scale factor 2^16 seconds/semi-circle^2 */
+    kal_int8                        beta3;           /* [-128..127], specify the beta3 parameter of the Klobuchar model, scale factor 2^16 seconds/semi-circle^3 */
+} gnss_ha_local_klobuchar_model_struct;
+
+
+typedef struct
+{
+    gnss_ha_validity_area_struct          validityArea;
+    kal_uint8                             numKlobucharModel;
+    gnss_ha_local_klobuchar_model_struct  klobucharModel[GNSS_HA_MAX_LOCAL_KLOBUCHAR_MODEL];  /* local klobuchar model per validity period */
+} gnss_ha_local_klobuchar_model_element_struct;
+
+
+typedef struct
+{
+    kal_uint8                                     numKlobucharElement;
+    gnss_ha_local_klobuchar_model_element_struct  klobucharElement[GNSS_HA_MAX_LOCAL_KLOBUCHAR_MODEL_ELEMENT];  /* local klobuchar model per validity area */
+} gnss_ha_local_klobuchar_model_list_struct;
+
+#if 0
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif
+
+typedef struct
+{
+    gnss_ha_validity_period_struct      validityPeriod; 
+    //gnss_ha_rle_iono_list_struct  rleListIono;
+} gnss_ha_storm_element_struct;
+
+
+typedef struct
+{
+    kal_uint8                     numStormElement;
+    gnss_ha_storm_element_struct  stormElement[GNSS_HA_MAX_STORM_ELEMENT];  
+} gnss_ha_storm_list_struct;
+
+
+typedef struct
+{
+    gnss_ha_storm_validity_area_struct  area;       /* rlelist is not not included or ignored in IonoStormIndication */
+    gnss_ha_storm_list_struct           stormList;  /* provide information on the ionospheric activity in the area defined by area */
+} gnss_ha_iono_storm_ind_struct;
+
+
+typedef struct
+{
+    kal_bool                                   localKlobucharListValid;
+    gnss_ha_local_klobuchar_model_list_struct  localKlobucharList;  /* localized Klobuchar model */
+
+    kal_bool                                   ionoStormIndValid;
+    gnss_ha_iono_storm_ind_struct              ionoStormInd;        /* information on the ionosphere conditions in the area */
+} gnss_ha_ionospheric_static_model_struct;
+
+#if 0
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif
+
+typedef struct
+{
+    kal_bool                      durationValid;
+    gnss_ha_duration              duration;           /* specify the length of the continuous periodic assistance session */
+ 
+    kal_bool                      rateValid;
+    kal_uint8                     rate;               /* [1..64], specify the length of the continuous periodic assistance session */
+
+    kal_bool                      refPositionValid;
+    //gnss_ha_ellipsoid_point_struct       referencePosition;  /* TBD: redefine internal structure? */
+
+    kal_bool                      validityAreaValid;
+    gnss_ha_validity_area_struct  validityArea;
+} gnss_ha_wa_iono_control_param_struct;
+
+
+typedef struct
+{
+    gnss_ha_validity_period_struct  validityPeriod;  /* define the validity period of the widea area ionosphere correction */
+} gnss_ha_wa_iono_common_param_struct;
+
+
+typedef struct
+{
+    kal_bool                                controlParamsValid;
+    gnss_ha_wa_iono_control_param_struct    controlParams;       /* carry the control parameters of the periodic Wide Area ionosphere surface corrections */
+    kal_bool                                commonParamsValid;
+    gnss_ha_wa_iono_common_param_struct     commonParams;        /* carry the common parameters of the periodic Wide Area ionosphere surface corrections */
+} gnss_ha_ionospheric_periodic_model_struct;
+
+
+typedef struct
+{
+    LOCAL_PARA_HDR
+    kal_uint8 padding[4];
+    kal_uint16                                     transactionID;
+
+    gnss_ha_iono_model_type_enum                   type;
+    union
+    {
+        gnss_ha_ionospheric_static_model_struct    staticModel;
+        gnss_ha_ionospheric_periodic_model_struct  periodicWAIono;  /* based on the real-time GNSS observations and thus updated frequently to the target */
+    } data;
+} lcsp_gnss_ha_common_ionospheric_model_req_struct;
+/* end of gnss_ha_ionospheric_model */
+
+
+/* begin of gnss_ha_troposphere_model */
+typedef struct
+{
+    gnss_ha_validity_period_struct      validityPeriod;     /* specify the start time and duration of the local troposphere parameters validity period */
+    kal_uint16                          zh0;                /* [0..4095], the hydrostatic zenith delay (meters), measured at the reference altitude level, scale factor 2^(-10) m */
+
+    kal_uint8                           validityBitmap;     /* ehValid, zw0Valid, ewValid, gNValid, gEValid, use GNSS_HA_LOCAL_TROPO_DELAY_TIME_ELEMENT_BIT_*_VALID */
+    /* optional */
+    kal_uint16                          eh;                 /* [0..4095], the exponential fit parameter (1/m) for scaling zh0 to the target altitude, scale factor 2^(-20) (1/m) */
+    /* optional */
+    kal_uint16                          zw0;                /* [0..4095], the wet zenith delay (meters), measured at the reference altitude level, scale factor 2^(-10) m */
+    /* optional */
+    kal_uint16                          ew;                 /* [0..4095], the exponential fit parameter (1/m) for scaling zw0 to the target altitude, scale factor 2^(-20) (1/m) */
+    /* optional */
+    kal_int16                           gN;                 /* [-8192..8191], the gradient parameter (m) in North direction of the azimuthally asymmetric part of the tropospheric slant delay, scale factor 2^(-7) m */
+    /* optioanl */
+    kal_int16                           gE;                 /* [-8192..8191], the gradient parameter (m) in East direction of the azimuthally asymmetric part of the tropospheric slant delay, scale factor 2^(-7) m */
+
+    gnss_ha_mapping_func_params_struct  mappingFuncParams;  /* coefficients of the mapping functions */
+} gnss_ha_local_tropo_delay_time_element_struct;
+
+
+typedef struct
+{
+    kal_uint8                                      numDelayTimeElement;
+    gnss_ha_local_tropo_delay_time_element_struct  delayTimeElement[GNSS_HA_MAX_LOCAL_TROPO_DELAY_TIME_ELEMENT];
+} gnss_ha_local_tropo_delay_time_list_struct;
+
+
+typedef struct
+{
+    gnss_ha_validity_area_struct                validityArea;         /* specify the geographical validity area of the local troposphere model parameters */
+
+    kal_bool                                    refAltitudeValid;
+    kal_int16                                   refAltitude;          /* [-1000..8192], specify the reference altitude (from nominal sea level, EGM96) at which the delay measurements are made, scale factor 1m, if absent, the reference altitude is the zero nominal sea level */
+
+    kal_bool                                    graRefPositionValid;
+    //gnss_ha_ellipsoid_point_struct                graRefPosition;       /* TBD: redefine internal structure? */  /* specify the origion for the spatial gradients gN and gE, if absent, the origin is taken as the middle point of the validity area */
+
+    gnss_ha_local_tropo_delay_time_list_struct  delayList;            /* specify the troposphere delays */
+} gnss_ha_local_tropo_delay_area_element_struct;
+
+
+typedef struct
+{
+    kal_uint8                                      numDelayAreaElement;
+    gnss_ha_local_tropo_delay_area_element_struct  delayAreaElement[GNSS_HA_MAX_LOCAL_TROPO_DELAY_AREA_ELEMENT];
+} gnss_ha_troposphere_delay_list_struct;
+
+
+typedef struct
+{
+    gnss_ha_validity_period_struct      validityPeriod;  /* specify the start time and duration of the surface parameter validity period */
+
+    kal_int16                           pressure;        /* [-1024..1023], local atmospheric pressure measurement (hPa) at the altitude given by refAltitude, scale factor 0.1 hPa, the value is added to the nominal pressure of 1013hPa */
+    kal_int8                            pressureRate;    /* [-128..127], rate of change of pressure, when calculating the pressure, the origin of time is the begin time of the validity period, scale factor 10 Pa/hour */
+
+    kal_uint8                           validityBitmap;  /* gNpressureValid, gEpressureValid, temperatureValid, temperatureRateValid, gNtemperatureValid, gEtemperatureValid, use GNSS_HA_LOCAL_SURF_PARAMS_TIME_ELEMENT_BIT_* */
+    /* optional */
+    kal_int8                            gNpressure;      /* [-128..127], specify the northward gradient of the atmospheric pressure, if this field is present, but gE is not given, the eastward gradient is zero, scale factor 10 Pa/km */
+    /* optional */
+    kal_int8                            gEpressure;      /* [-128..127], specify the eastward gradient of the atmospheric pressure, if this field is present, but gN is not given, the nothward gradient is zero, scale factor 10 Pa/km */
+    /* optional */
+    kal_int8                            temperature;     /* [-64..63], local temperature measurement at the reference altitude refAltitude, scale factor 1K, the value is added to 273K */
+    /* optional */
+    kal_int8                            temperatureRate; /* [-16..16], local temperature change rate, the scale factor 1K/hour */
+    /* optional */
+    kal_int8                            gNtemperature;   /* [-8..7], specify the northward gradient of the temperature, if this field is present, but gE is not given, the eastward gradient is zero, scale factor 1 K/km */
+    /* optional*/
+    kal_int8                            gEtemperature;   /* [-8..7], specify the eastward gradient of the temperature, if this field is present, but gN is not given, the nothward gradient is zero, scale factor 1 K/km */
+
+    gnss_ha_mapping_func_params_struct  mappingFuncParams;  /* coefficients of the mapping functions */
+} gnss_ha_local_surface_params_time_element_struct;
+
+
+typedef struct
+{
+    kal_uint8                                         numParamsTimeElements;
+    gnss_ha_local_surface_params_time_element_struct  paramsTimeElement[GNSS_HA_MAX_LOCAL_SURFACE_PARAMS_TIME_ELEMENT];
+} gnss_ha_local_surface_params_struct;
+
+
+typedef struct
+{
+    gnss_ha_validity_area_struct         validityArea;         /* specify the geographical validity area of the local troposphere model parameters */
+
+    kal_bool                             refAltitudeValid;
+    kal_int16                            refAltitude;          /* [-1000..8192], specify the reference altitude (from nominal sea level, EGM96) at which the surface measurements are made, scale factor 1m, if absent, the reference altitude is the zero nominal sea level EGM96 */
+
+    kal_bool                             graRefPositionValid;
+    //gnss_ha_ellipsoid_point_struct         graRefPosition;       /* specify the origion for the spatial gradients gN and gE, if absent, the origin is taken as the middle point of the validity area */
+    gnss_ha_local_surface_params_struct  paramsList;           /* specify the surface parameters */
+} gnss_ha_local_surface_params_element_struct;
+
+
+typedef struct
+{
+    kal_uint8                                    numParamsElements;
+    gnss_ha_local_surface_params_element_struct  paramsElement[GNSS_HA_MAX_LOCAL_SURFACE_PARAMS_ELEMENT];
+} gnss_ha_local_surface_params_list_struct;
+
+
+typedef struct
+{
+    LOCAL_PARA_HDR
+    kal_uint8 padding[4];
+    kal_uint16                                transactionID; 
+    
+    kal_bool                                  tropoDelayListValid;
+    gnss_ha_troposphere_delay_list_struct     tropoDelayList;         /* provide the zenith troposphere delay components determined in a given location and the needed parameters to adjust the delay to the target's altitude */
+    kal_bool                                  surfaceParamListValid;
+    gnss_ha_local_surface_params_list_struct  surfaceParametersList;  /* provide the surface pressure and optionally temperature that allow the target to compute the tropospheric delay using one of the known atmosphere models, such as the Hopfield or Saastamoinen model */
+} lcsp_gnss_ha_common_troposphere_model_req_struct;
+/* end of gnss_ha_troposphere_model */
+
+
+/* begin of gnss_ha_altitude_assist */
+typedef struct
+{
+    gnss_ha_validity_period_struct  validityPeriod;     /* specify the start time and duration of the altitude assistance validity period */
+
+    kal_int16                       pressure;           /* [-1024..1023], local atmospheric pressure measurement (hPa) at the altitude given by refAltitude, scale factor 10 Pa, the value is added to the nominal pressure of 1013hPa */
+    kal_bool                        pressureRateValid;
+    kal_int8                        pressureRate;       /* [-128..127], rate of change of pressure, when calculating the pressure, the origin of time is the begin time of the validity period, scale factor 10 Pa/hour */
+
+    kal_bool                        gNValid;
+    kal_int8                        gN;                 /* [-128..127], specify the northward gradient of the atmospheric pressure, scale factor 10 Pa/km */
+    kal_bool                        gEValid;
+    kal_int8                        gE;                 /* [-128..127], specify the eastward gradient of the atmospheric pressure, scale factor 10 Pa/km */
+} gnss_ha_pressure_assist_element_struct;
+
+
+typedef struct
+{
+   kal_uint8                               numPressureElements;
+   gnss_ha_pressure_assist_element_struct  pressureElement[GNSS_HA_MAX_PRESSURE_ASSIST_ELEMENT];
+} gnss_ha_pressure_assist_list_struct;
+
+
+typedef struct
+{
+   gnss_ha_validity_area_struct         validityArea;            /* specify the geographical validity area of the altitude assistance */
+
+   kal_bool                             gradRefPositionValid;
+   gnss_reference_location_struct       gradRefPosition;         /* specify the origin for the spatial gradients gN and gE, if absent, the origin is taken as the middle point of the validity area */
+
+   kal_bool                             refAltitudeValid;
+   kal_int16                            refAltitude;             /* specify the reference altitude (from nominal sea level, [EGM96]) at which the surface measurements are made, scale factor 1m, if absent, the reference altitude is the zero nominal sea level */
+
+   gnss_ha_pressure_assist_list_struct  pressureAssistanceList;  /* specify the set of pressure assistance elements for different periods of time */
+} gnss_ha_altitude_assist_area_element_struct;
+
+
+typedef struct
+{
+    LOCAL_PARA_HDR
+    kal_uint8 padding[4];
+    kal_uint16                                transactionID;
+
+    kal_uint8                                    numAltitudeAreaElement;
+    gnss_ha_altitude_assist_area_element_struct  altitudeAreaElement[GNSS_HA_MAX_ALTITUDE_ASSIST_AREA_ELEMENT];
+} lcsp_gnss_ha_common_altitude_assist_req_struct;
+/* end of gnss_ha_altitude_assist */
+
+
+/* begin of gnss_ha_altitude_assist */
+typedef struct
+{
+    LOCAL_PARA_HDR
+    kal_uint8 padding[4];
+    kal_uint16                                transactionID;
+
+    kal_uint16  solarRad;  /* specifies the solar radiation at one AU from the Sun, scale factor 1 Wm^(-2) */
+} lcsp_gnss_ha_common_solar_radiation_req_struct;
+/* end of gnss_ha_altitude_assist */
+
+
+/* begin of gnss_ha_ccp_assist_common */
+typedef struct
+{
+    gnss_id_enum  gnssID;       /* specify the GNSS type */
+    kal_uint8     gnssSignals;  /* specify the GNSS signal types for which CCP assistance can be provided in the area, GNSS Signal(s), map to GNSS_SGN_ID_BITMAP_* */
+} gnss_ha_ccp_signal_supp_element_struct;
+
+
+typedef struct
+{
+    kal_uint8                               numSigSuppElement;
+    gnss_ha_ccp_signal_supp_element_struct  sigSuppElement[GNSS_HA_MAX_CCP_SIGNAL_SUPP_ELEMENT];
+} gnss_ha_ccp_signal_supp_struct;
+
+
+typedef struct
+{
+    gnss_ha_validity_area_struct    areaDescr;  /* provide the description of the area */
+    gnss_ha_ccp_signal_supp_struct  sigSupp;    /* provide the GNSS signal support information */
+} gnss_ha_ccp_support_area_struct;
+
+#if 0
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif
+
+
+typedef struct
+{
+   kal_uint16                                 refStationID;       /* define the ID of the reference station */
+   gnss_ha_high_accu_3d_position_struct       refStationLoc;      /* define the location of the reference station, of which ID is refStationID */
+   kal_bool                                   antennaDescrValid;
+   //gnss_ha_antenna_struct  antennaDescr;       /* TBD: redefine internal structure? */ /* specify the antenna type used at the reference station */
+} gnss_ha_ccp_pref_station_list_element_struct;
+
+
+typedef struct
+{
+
+    kal_uint8                                     numPrefStationElement;
+    gnss_ha_ccp_pref_station_list_element_struct  prefStationElement[GNSS_HA_MAX_CCP_PREF_STATION_LIST_ELEMENT];
+} gnss_ha_ccp_pref_station_list_struct;
+
+
+typedef struct
+{
+    kal_bool                              supportAreaValid;
+    gnss_ha_ccp_support_area_struct       supportArea;      /* provide information on the area, in which CCP is supported */
+
+    kal_bool                              nbrListValid;
+    gnss_ha_ccp_pref_station_list_struct  nbrList;          /* provide information on the possible neighbour reference stations */
+
+    kal_bool                              durationValid;
+    gnss_ha_duration                      duration;         /* specify the length of the continuous periodic assistance session */
+
+    kal_bool                              rateValid;
+    kal_uint8                             rate;             /* [1..64], specify the interval between the assistance data deliveries in seconds */
+
+    kal_bool                              refStationListValid;
+    gnss_ha_ccp_pref_station_list_struct  refStationList;   /* provide the locations of the reference stations for which CCP assistance is being provided */
+} gnss_ha_ccp_assist_common_ctrl_params_struct;
+
+
+typedef struct
+{
+    LOCAL_PARA_HDR
+    kal_uint8 padding[4];
+    kal_uint16                           transactionID;
+    gnss_ha_ccp_assist_common_type_enum  type;
+    union
+    {
+        gnss_system_time_struct                       commParamsRefSysTime;  /* define the CCP-specific common parameters (reference time) */
+        gnss_ha_ccp_assist_common_ctrl_params_struct  ctrlParams;            /* define the CCP-specific control parameters */
+    } data;
+} lcsp_gnss_ha_common_ccp_assist_req_struct;
+/* end of gnss_ha_ccp_assist_common */
+
+#if 0
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif
+
+/* begin of gnss_ha_req_ionospheric_model */
+typedef struct
+{
+    kal_uint8                ionoReq;            /* specify which ionosphere models are being requested for, mapping to GNSS_HA_COMM_AD_REQ_IONO_BIT_* */
+
+    kal_bool                 reqBeginTimeValid;
+    gnss_system_time_struct  reqBeginTime;       /* specify the first time instant when an ionosphere model is needed, if absent, begin time is the current time */
+
+    gnss_ha_duration         duration;           /* specify for how long period the ionospheric model is requested */
+} gnss_ha_req_ionospheric_static_model_struct;
+
+
+typedef struct
+{
+    kal_bool          durationValid;
+    gnss_ha_duration  duration;       /* specify the length of the continuous periodic assistance session */
+
+    kal_bool          rateValid;
+    kal_uint8         rate;           /* [0..64], specify the interval between the assistance data deliveries in seconds */
+} gnss_ha_req_ionospheric_periodic_model_struct;
+
+
+typedef struct
+{
+    gnss_ha_iono_model_type_enum                   type;
+    union
+    {
+        gnss_ha_req_ionospheric_static_model_struct    staticModelReq;     /* request for the one-shot ionosphere models */
+        gnss_ha_req_ionospheric_periodic_model_struct  periodicWAIonoReq;  /* request for periodic ionosphere models */
+    } data;
+} gnss_ha_req_ionospheric_model_struct;
+/* end of gnss_ha_req_ionospheric_model */
+
+
+/* begin of gnss_ha_req_troposphere_model */
+typedef struct
+{
+    kal_uint8                tropoModelReq;           /* specify the desired model or models, mapping to GNSS_HA_COMM_AD_REQ_TROPO_BIT_* */
+
+    kal_bool                 supportMultiGridPoints;  /* indicate if the target is requesting parameter sets originating from multiple locations around it (TRUE)
+                                                         FALSE means that only the nearest grid point parameters are requested */
+
+    kal_bool                 reqBeginTimeValid;
+    gnss_system_time_struct  reqBeginTime;            /* specify the first time instant when a valid troposphere model is needed, if absent, the begin time is the current time */
+
+    gnss_ha_duration         duration;                /* specify how long time the tropospheric model is requested for */
+} gnss_ha_req_troposphere_model_struct;
+/* end of gnss_ha_req_troposphere_model */
+
+
+/* begin of gnss_ha_req_altitude_assist */
+typedef struct
+{
+    kal_bool                 reqBeginTimeValid;
+    gnss_system_time_struct  reqBeginTime;       /* specify the first time instant when altitude assistance is needed, if absent, the begin time is the current time */
+
+    kal_bool                 durationValid;
+    gnss_ha_duration         duration;           /* specify how long time the altitude assistance is requested for, if absent, altitude assistance is requested for the current moment */
+} gnss_ha_req_altitude_assist_struct;
+/* end of gnss_ha_req_altitude_assist */
+
+
+/* begin of gnss_ha_req_ccp_ctrl_params */
+typedef struct
+{
+   gnss_ha_high_accu_3d_position_struct  reqRefStationLoc;  /* request for a new reference station based on the position. The position may or may not be the target position */
+   gnss_ha_agnss_qor_type_enum           qor;               /* QoR (Quality-of-Reference station) defines how close to the requested location the closest reference station must be 
+                                                               In case the closest reference station is within the uncertainty area of the target location, the QoR parameter is neglected */
+} gnss_ha_req_ccp_pos_based_ref_station_struct;
+
+
+typedef struct
+{
+    kal_uint8   numRefStationIDElement;
+    kal_uint16  refStationIDElement[GNSS_HA_MAX_CCP_PREF_STATION_LIST_ELEMENT];  /* [0..65535], contain the reference station ID list */
+} gnss_ha_req_ccp_ref_station_list_struct;
+
+
+typedef struct
+{
+    gnss_ha_req_ccp_ref_station_type_enum             type;
+    union
+    {
+        gnss_ha_req_ccp_pos_based_ref_station_struct  posBasedRefStationReq;
+        gnss_ha_req_ccp_ref_station_list_struct       idBasedRefStationReq;    /* request for CCP AD for a new reference station based on the reference station ID */
+        gnss_ha_req_ccp_ref_station_list_struct       refStationKillList;      /* terminate CCP AD deliveries for selected reference stations based on their reference station IDs */
+    } data;
+} gnss_ha_req_ccp_ref_station_struct;
+
+
+typedef struct
+{
+    kal_bool                            durationValid;
+    gnss_ha_duration                    duration;          /* specify the length of the continuous periodic assistance session */
+
+    kal_bool                            rateValid;
+    kal_uint8                           rate;              /* [1..64], specify the interval between the assistance data deliveries in seconds */
+
+    kal_bool                            refStationValid;
+    gnss_ha_req_ccp_ref_station_struct  refStation;        /* specify the request/modification of the active reference station set */
+} gnss_ha_req_ccp_common_req_struct;
+
+
+typedef struct
+{
+    kal_bool                           ccpSuppAreaReq;    /* TRUE if request for the information on the CCP assistance availability in the target area */
+    kal_bool                           ccpNbrListReq;     /* TRUE if request for the information on the reference stations in the vicinity of the target */
+
+    gnss_ha_req_ccp_common_req_struct  ccpCommonRequest;  /* request for a new reference station or stopping CCP AD delivery for a reference station */
+} gnss_ha_req_ccp_ctrl_params_struct;
+/* end of gnss_ha_req_ccp_ctrl_params */
+
+/* begin of gnss_ha_req_ccp_generic_struct */
+typedef struct
+{
+    kal_uint8  ccpGnssSignalsReq;  /* specify the GNSS signal types for which the CCP assistance is requested by the target device, GNSS Signal(s), map to GNSS_SGN_ID_BITMAP_* */
+} gnss_ha_req_ccp_generic_struct;
+/* end of gnss_ha_req_ccp_generic_struct */
+
+typedef struct
+{
+    gnss_id_enum                             gnssId;
+    // kal_bool                        waIonoSurfaceReq;     /* TRUE if wide area ionosphere correction surface is requested for the SVs of this GNSS */
+    // gnss_ha_req_mechanics_struct    mechanicsReq;         /* request the SV mechanics information */
+    // gnss_ha_req_dcb_struct          dcbReq;               /* request the differential code biases to gain higher accuracy */
+    kal_bool                        degradModelReq;       /* TRUE if request the accuracy models for the SV orbit and clock models to get a better understanding of the accuracy of the computed position */
+    gnss_ha_req_ccp_generic_struct  ccpAssistGenericReq;  /* request for the CCP reference assistance data for high accuracy */
+    // gnss_ha_req_nav_model_struct    navigationModelReq;   /* TBD. request for the navigation models defined in LPPe */
+
+} gnss_ha_generic_assist_struct;
+
+typedef struct
+{
+    LOCAL_PARA_HDR
+    kal_uint8 padding[4];
+    kal_uint16                            transactionID;
+
+    /* Common assistance data */
+    kal_bool                              ionoModelReqValid;
+    gnss_ha_req_ionospheric_model_struct  ionoModelReq;        /* request for ionosphere models */
+
+    kal_bool                              tropoModelReqValid;
+    gnss_ha_req_troposphere_model_struct  tropoModelReq;       /* request troposphere models */
+
+    kal_bool                              altAssistReqValid;
+    gnss_ha_req_altitude_assist_struct    altAssistReq;        /* request altitude assistance for improved availability */
+
+    kal_bool                              solarRadReq;         /* TRUE if request the solar radiation intensity */
+
+    kal_bool                              ccpCtrlParamsReqValid;
+    gnss_ha_req_ccp_ctrl_params_struct    ccpCtrlParamsReq;    /* request for the control parameters of the CCP AD session.
+                                                                  it shall be accompanied by ccpAssistGenericReq in the generic part of the AGNSS request */
+    /* Generic assistance data */
+    kal_uint8                             numGnssSupport;
+    gnss_ha_generic_assist_struct         genericAssistReq[16];                                                                                                                                      
+} lcsp_gnss_ha_assist_data_request_ind_struct;
+
+#if 0
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif
+
+/* begin of gnss_ha_degradation_model */
+typedef struct
+{
+    kal_uint8  clockRMS0;       /* specify the constant term of the clock model degradation model by cRMS0 =((1+0.1)^clockRMS0 -1) meters,
+                                   where clockRMS0 = 31 denotes 'Use At Own Risk', the range is [0, 16.45) meters, refer to OMA-TS-LPPe Appendix C.6.1 */
+    kal_bool   clockRMS1Valid;
+    kal_uint8  clockRMS1;       /* specify the first order term of the clock model degradation model, cRMS1, scale factor 2^(-14) m/s,
+                                   range [0, 4.3e-4) m/s, refer to OMA-TS-LPPe Appendix C.6.1 */
+} gnss_ha_clock_model_degrad_model_struct;
+
+
+typedef struct
+{
+    kal_uint8  orbitRMS0;       /* specify the constant term of the orbit model degradation model by oRMS0 =((1+0.1)^orbitRMS0 -1) meters,
+                                   where orbitRMS0 = 31 denotes 'Use At Own Risk', the range is [0, 16.45) meters, refer to OMA-TS-LPPe Appendix C.6.2 */
+    kal_bool   orbitRMS1Valid;
+    kal_uint8  orbitRMS1;       /* specify the first order term of the orbit model degradation model, oRMS1, scale factor 2^(-14) m/s, range [0, 4.3e-4) m/s,
+                                   refer to OMA-TS-LPPe Appendix C.6.2 */
+} gnss_ha_orbit_model_degrad_model_struct;
+
+
+typedef struct
+{
+    kal_uint8                                svID;                   /* [0..63], specify the SV for which degradation models are provided */
+    gnss_ha_clock_model_degrad_model_struct  clockDegradationModel;  /* provide the degradation model for the clock model */
+    gnss_ha_orbit_model_degrad_model_struct  orbitDegradationModel;  /* provide the degradation model for the orbit model */
+} gnss_ha_degrad_model_element_struct;
+
+
+typedef struct
+{
+    LOCAL_PARA_HDR
+    kal_uint8 padding[4];
+    kal_uint16                               transactionID;
+    gnss_id_enum                             gnssId;
+    
+    kal_uint8                            numDegradModelElement;
+    gnss_ha_degrad_model_element_struct  degradModelElement[GNSS_HA_MAX_DEGRAD_MODEL_ELEMENT];
+} lcsp_gnss_ha_generic_degradation_model_req_struct;
+/* end of gnss_ha_degradation_model */
+
+
+/* begin of gnss_ha_ccp_assist_generic */
+typedef struct
+{
+    gnss_ha_code_phase_err_type_enum  type;
+    union
+    {
+        kal_uint8  codePhaseRMSError;  /* contain the pseudorange RMS error value, representation refer to TS 36.355 floating-point representation of GNSS-MeasurementList field descriptions */
+        kal_uint8  cnr;                /* carrier-to-noise ratio, scale factor 0.25 dB-Hz, range [0, 63.75] dB-Hz */
+    } data;
+} gnss_ha_code_phase_error_struct;
+
+
+typedef struct
+{
+    kal_uint8                        svID;                      /* [0..63], identify the SV for which CCP assistance is being provided */
+
+    kal_bool                         intCodePhaseValid;
+    kal_uint8                        intCodePhase;              /* [0..255], indicate the integer milli-second part of the code phase */
+
+    kal_uint32                       codePhase;                 /* [0.. 14989622], contain the sub-millisecond part of the code phase observation
+                                                                   for the particular satellite signal at the reference time, scale factor 0.02 meters, range [0, 299792.44] meters */
+
+    kal_bool                         codePhaseErrorValid;
+    gnss_ha_code_phase_error_struct  codePhaseError;            /* code phase error */
+
+    kal_int32                        phaseRangeDelta;           /* [-524288.. 524287], define the (Phase Range �V Pseudorange), scale factor 0.5 mm, range [-262.144, 262.1435] meters */
+
+    kal_bool                         phaseRangeRMSErrorValid;
+    kal_uint8                        phaseRangeRMSerror;        /* [0..127], contain the RMS error of the continuous carrier phase, scale factor 2^(-10) meters, in the range [0, 0.12403) meters */
+
+    kal_bool                         lockIndicator;             /* TRUE: if the carrier phase tracking has been continuous between the previous and the current assistance 
+                                                                   data delivery. FALSE: a cycle slip has occurred */
+} gnss_ha_ccp_sv_element_struct;
+
+
+typedef struct
+{
+    kal_uint8                      numCCPPerSVElement;
+    gnss_ha_ccp_sv_element_struct  ccpPerSVElement[GNSS_HA_MAX_CCP_PER_SV_ELEMENT];
+} gnss_ha_ccp_per_sv_list_struct;
+
+
+typedef struct
+{
+    kal_uint8                       signalID;      /* indicate the signal id, map to GNSS_SGN_ID_VALUE_* */
+    gnss_ha_ccp_per_sv_list_struct  ccpPerSVlist;
+} gnss_ha_ccp_per_signal_element_struct;
+
+
+typedef struct
+{
+    kal_uint8                              numCCPPerSigElement;
+    gnss_ha_ccp_per_signal_element_struct  ccpPerSigElement[GNSS_HA_MAX_CCP_PER_SIG_ELEMENT];
+} gnss_ha_ccp_per_signal_list_struct;
+
+
+typedef struct
+{
+   kal_uint16                          refStationID;      /* define the ID of the reference station to which the CCP assistance is provided */
+   gnss_ha_ccp_per_signal_list_struct  ccpPerSignalList; 
+} gnss_ha_ccp_generic_element_struct;
+
+
+typedef struct
+{
+    LOCAL_PARA_HDR
+    kal_uint8 padding[4];
+    kal_uint16                               transactionID;
+    gnss_id_enum                             gnssId;
+
+    kal_uint8                           numCCPGenericElement;
+    gnss_ha_ccp_generic_element_struct  ccpGenericElement[GNSS_HA_MAX_CCP_GENERIC_ELEMENT];
+} lcsp_gnss_ha_generic_ccp_assist_req_struct;
+/* end of gnss_ha_ccp_assist_generic */
+
+#if 0
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif
+
+typedef struct
+{
+    gnss_id_enum    gnssID;       /* GNSS ID for which HA GNSS measurements are requested */
+    kal_uint8       gnssSignals;  /* specify the GNSS signal types for which HA GNSS measurements are requested by the server, map to GNSS_SGN_ID_BITMAP_* */
+} gnss_ha_meas_signal_req_element_struct;
+
+
+typedef struct
+{
+    kal_bool                                durationValid;
+    gnss_ha_duration                        duration;       /* specify the length of the HA GNSS measurement session */
+
+    kal_bool                                rateValid;
+    kal_uint8                               rate;           /* [1..63], specify the rate of delivery of the HA GNSS measurements, scale factor 1 second */
+
+    /* should we support antenna info for HA GNSS? */
+    //kal_bool antennaInfoReqValid;
+    ///LPP_EXT_OMA_LPPe_AGNSS_HAgnssRequestControlParameters_antennaInformationReq antennaInformationReq; /* request for the target antenna information */
+
+    kal_bool                                pressureReq;    /* request for the pressure information at the target site */
+
+    kal_uint8                               numSigReqElement;
+    gnss_ha_meas_signal_req_element_struct  sigReqelement[GNSS_HA_MAX_MEAS_PER_GNSS_ELEMENT];  /*  request HA GNSS measurements for specific GNSS signals */
+} gnss_ha_meas_req_struct;
+
+
+typedef struct
+{
+    kal_int16  pressure;     /* [-1024..1023], local atmospheric pressure measurement (hPa) at the target��s altitude, scale factor 0.1 hPa, the value is added to the average pressure 1013hPa */
+    kal_uint8  pressureUnc;  /* [0..127], the 1-sigma standard deviation of the pressure measurement, the scale factor 0.1 hPa */
+} gnss_ha_local_pressure_struct;
+
+
+typedef struct
+{
+    kal_uint8                           svID;                /* [0..63], identify the SV for which HA GNSS measurements are provided */
+
+    kal_bool                            intCodePhaseValid;
+    kal_uint8                           intCodePhase;        /* [0..255], indicate the integer milli-second part of the code phase */
+
+    kal_uint32                          codePhase;           /* [0..14989622], contain the sub-millisecond part of the code phase observation for the particular satellite signal at the reference time
+                                                                target shall reconstruct the full pseudorange by Pseudorange = (Integer Code Phase) + (Code Phase), scale factor 0.02 meters. Range [0, 299792.44] meters */
+                                     
+    kal_uint8                           codePhaseRMSError;   /* [0..63], contain the pseudorange RMS error value. representation refer to TS 36.355 floating-point representation of GNSS-MeasurementList field descriptions */
+    gnss_ha_multipath_detect_type_enum  multipathDetection;  /* contain an estimate of the multipath environment */
+    kal_uint8                           cnr;                 /* [0..255], contain an estimate of the carrier-to-noise ratio, scale factor 0.25 dB-Hz, range [0, 63.75] dB-Hz */
+    kal_uint32                          adr;                 /* [0..536870911], contain the continuous carrier phase with direct data polarity, scale factor 2^-10 meters, in the range [0, 524287.999023438) meters */
+    kal_uint8                           adrRMSerror;         /* [0..127], contain the RMS error of the continuous carrier phase, scale factor 2^-10 meters, in the range [0, 0.12403) meters */
+    kal_bool                            lockIndicator;       /* TRUE if the carrier phase tracking has been continuous between the previous and the current measurement delivery;
+                                                                FALSE if a cycle slip has occurred */
+} gnss_ha_meas_per_sv_element_struct;
+
+
+typedef struct
+{
+    kal_uint8                           numPerSVElement;
+    gnss_ha_meas_per_sv_element_struct  perSVElement[GNSS_HA_MAX_MEAS_PER_SV_ELEMENT];
+} gnss_ha_meas_per_sv_list_struct;
+
+
+typedef struct
+{
+    kal_uint8                        signalID;   /* define GNSS signal ID for which measurements are being provided, map to GNSS_SGN_ID_VALUE_* */
+    gnss_ha_meas_per_sv_list_struct  perSVlist;  /* carry the HA GNSS measurements for specific satellites */
+} gnss_ha_meas_per_sig_element_struct;
+
+
+typedef struct
+{
+    kal_uint8                            numPerSigElement;
+    gnss_ha_meas_per_sig_element_struct  perSigElement[GNSS_HA_MAX_MEAS_PER_SIGNAL_ELEMENT];
+} gnss_ha_meas_per_sig_list_struct;
+
+
+typedef struct
+{
+    gnss_id_enum                      gnssID;        /* GNSS ID for which measurements are being provided */
+    gnss_ha_meas_per_sig_list_struct  perSignalList; /* carry the HA GNSS measurements for the given signals */
+} gnss_ha_meas_per_gnss_element_struct;
+
+
+typedef struct
+{
+    kal_uint8                             numGnssElement;
+    gnss_ha_meas_per_gnss_element_struct  gnssElement[GNSS_HA_MAX_MEAS_PER_GNSS_ELEMENT];
+} gnss_ha_measured_result_struct;
+
+
+typedef struct
+{
+    kal_bool                        positionValid;
+    gnss_reference_location_struct  position;        /* specify the position of the target device */
+
+    gnss_system_time_struct         refTime;         /* specify the time, when the measurements included are applicable */
+
+    kal_bool                        localPressureValid;
+    gnss_ha_local_pressure_struct   localPressure;      /* specify the local atmospheric pressure measurement at the target's altitude for improved altitude or delta-altitude performance */
+
+    /* should we support antenna info for HA GNSS? */    
+    //LPP_EXT_OMA_LPPe_Orientation antennaOrientation; /* OPTIONAL */
+
+    gnss_ha_measured_result_struct      signalMeasurements; /* carry the HA GNSS signal measurements */
+} gnss_ha_meas_cnf_struct;
+
+
+typedef struct
+{
+    kal_uint16  azimuth;         /* [0..359], indicate the azimuth angle of the ionosphere measurement, i.e. the direction from the user where the TEC values are observed.
+                                    azimuth angle is defined as the clockwise angle from the true North, scale factor 1 degree */
+    kal_uint8   elevation;       /* [0..90], indicate the elevation angle of the ionosphere measurement, i.e. how high or low in the sky the TEC value is observed, scale factor is 1 degree */
+    kal_uint16  tecValue;        /* [0..511], indicate the measured TEC value towards the SV concerned, scale factor is 1 TEC unit, 10^16 e-/m^2 */
+    kal_uint8   tecUncertainty;  /* [0..63], indicate the 1-sigma standard deviation of the TEC measurement, scale factor is 1 TEC unit, 10^16 e-/m^2 */
+} gnaa_ha_tec_per_sv_element_struct;
+
+
+typedef struct
+{
+    kal_uint8                          numPerSVElement;
+    gnaa_ha_tec_per_sv_element_struct  perSVElement[GNSS_HA_MAX_TEC_PER_SV_ELEMENT];
+} gnss_ha_tec_per_sv_struct;
+
+
+typedef struct
+{
+    kal_uint16  tecValueAtZenith;        /* [0..511], indicate the measured vertical TEC value, scale factor is 1 TEC unit, 10^16 e-/m^2 */
+    kal_uint8   tecUncertaintyAtZenith;  /* [0..63], indicate the 1-sigma standard deviation of the TEC measurement, scale factor is 1 TEC unit 10^16 e-/m^2 */
+} gnss_ha_tec_at_zenith_struct;
+
+
+typedef struct
+{
+   kal_uint16 azimuth; 
+   kal_uint8 elevation; 
+   kal_uint16 tecValue; 
+   kal_uint8 tecUncertainty; 
+} gnss_ha_tec_persv_element_struct;
+
+
+typedef struct
+{
+   kal_uint8 numElements;
+   gnss_ha_tec_persv_element_struct *element;
+} gnss_ha_tec_persv_struct;
+
+
+typedef struct
+{
+    gnss_system_time_struct         gnssTime;             /* indicate the measurement time */
+    gnss_reference_location_struct  position;             /* indicates the measurement location */
+
+    kal_bool                        tecPerSVValid;
+    gnss_ha_tec_persv_struct tecPerSV;             /* contain the list of TEC values from the target towards each of the SVs seen by the target */
+
+    kal_bool                           tecAtZenithValid;
+    gnss_ha_tec_at_zenith_struct tecAtZenith;       /* contain the target's estimate of the zenith TEC value at the target's position */
+} gnss_ha_iono_meas_struct;
+
+
+typedef struct
+{
+    kal_bool   temperatureValid;
+    kal_int8   temperature;          /* [-64..63], local temperature measured by the target, the value is added to 273K, scale factor 1K */
+
+    kal_bool   temperatureUncValid;
+    kal_uint8  temperatureUnc;       /* [0..7], the 1-sigma standard deviation of the temperature measurement, scale factor 1K */
+} gnss_ha_temperature_meas_struct;
+
+
+typedef struct
+{
+    gnss_system_time_struct          gnssTime;              /* indicate the measurement time */
+    gnss_reference_location_struct   position;              /* indicates the measurement location */
+
+    kal_int16                        pressure;              /* local atmospheric pressure measurement (hPa) at the target's altitude, scale factor is 0.1 hPa, the value is added to the nominal pressure of 1013hPa */
+    kal_uint8                        pressureUncertainty;   /* the 1-sigma standard deviation of the pressure measurement, the scale factor is 0.1 hPa */
+
+    kal_bool                         temperatureMeasValid;
+    gnss_ha_temperature_meas_struct  temperatureMeas;       /* provide temperature measurement */
+} gnss_ha_local_surf_meas_struct;
+
+
+typedef struct
+{
+    kal_bool                                haErrCauseValid;
+    gnss_ha_tgt_err_cause_enum              haErrCause;
+
+    kal_bool                                ionoMeasErrCauseValid;
+    gnss_ha_tgt_iono_meas_err_cause_enum    ionoMeasErrCause;
+
+    kal_bool                                envObserveErrCauseValid;
+    gnss_ha_tgt_env_observe_err_cause_enum  envObserveErrCause;
+
+    kal_bool                                haGNSSErrCauseValid; 
+    gnss_ha_tgt_gnss_err_cause_enum         haGNSSErrCause;
+} gnss_ha_tgt_error_struct;
+
+
+typedef struct
+{
+    kal_uint8   ionoModelSupport;       /* specify which ionospheric model or models the target supports, mapping to GNSS_HA_COMM_IONO_AD_SUPP_BIT_* */
+    kal_uint8   tropoModelSupport;      /* specify which troposphere model or models the target supports and combining troposphere information from several grid points surrounding the target, mapping to GNSS_HA_COMM_TROPO_AD_SUPP_BIT_* */
+    kal_bool    altitudeAssistSupport;  /* TRUE if the targets supports altitude assistance */
+    kal_bool    solarRadiationSupport;  /* TRUE if the targets supports solar radiation assistance data */
+    kal_uint8   ccpSupport;             /* specify which CCP assistance data type the target supports, mapping to GNSS_HA_COMM_CCP_AD_SUPP_BIT_* */
+} gnss_ha_common_assist_data_support_struct;
+
+
+typedef struct
+{
+    gnss_id_enum  gnss_ID;
+
+    kal_bool      mechanicsSupport;            /* TRUE if the target supports mechanics assistance data */
+    kal_bool      dcbSupport;                  /* TRUE if the target supports Differential Code Bias assistance data */
+    kal_bool      degradationModelSupport;     /* TRUE if the target supports navigation model degradation model assistance data */
+    kal_uint8     ccpAssistSignalIDsSupport;   /* indicate if target supports CCP assistance data for at least one signal of the GNSS, mapping to GNSS_SGN_ID_BITMAP_* */
+    kal_uint8     navModelSupport[GNSS_HA_MAX_GENERIC_AD_NAV_MODEL_ID_ELEMENT];  /* TBD */
+} gnss_ha_generic_assist_data_support_element_struct;
+
+
+typedef struct
+{
+    kal_uint8                                           numGenericElement;
+    gnss_ha_generic_assist_data_support_element_struct  genericElement[GNSS_HA_MAX_GNSS_GENERIC_ASSIST_DATA_ELEMENT];
+} gnss_ha_generic_assist_data_support_struct;
+
+
+typedef struct
+{
+    gnss_ha_common_assist_data_support_struct   commonAssistDataSupp;   /* provide target's GNSS-independent AGNSS capabilities */
+    gnss_ha_generic_assist_data_support_struct  genericAssistDataSupp;  /* provide target's GNSS-dependent AGNSS assistance data capabilities */
+} gnss_ha_assist_data_support_list_struct;
+
+
+typedef struct
+{
+    kal_uint8  ionoMeasSupport;         /* specify the ionospheric measurement supported by the target device, mapping to GNSS_HA_GENE_AD_SUPP_BIT_BIT_* */
+    kal_bool   pressureMeasSupport;
+    kal_bool   temperatureMeasSupport;
+} gnss_ha_env_observe_support_list_struct;
+
+
+typedef struct
+{
+    gnss_id_enum  gnssID;            /* specify the ID of the GNSS for which HA GNSS capabilities are provided */
+    kal_uint8     signalIDsSupport;  /* specify the GNSS signal types for which HA GNSS signal measurements are supported by the target device */
+} gnss_ha_capa_per_gnss_support_struct;
+
+
+typedef struct
+{
+    kal_uint8                             modeSupport;          /* indicate which mode supports HA GNSS, mapping to GNSS_HA_MODE_SUPPORT_BIT* */
+    kal_bool                              pressureInfoSupport;  /* TRUE if the target is capable of providing absolute pressure information for improved delta-altitude performance */
+    kal_uint8                             antInfoSupport;       /* specify the antenna information support type, mapping to GNSS_HA_ANT_SUPPORT_BIT_* */
+
+    kal_uint8                             numPerGNSSElement;
+    gnss_ha_capa_per_gnss_support_struct  perGNSSElement[GNSS_HA_MAX_HA_GNSS_CAPA_ELEMENT];
+} gnss_ha_gnss_capa_support_struct;
+
+
+typedef struct
+{
+    kal_bool                                 assistDataSuppListValid;
+    gnss_ha_assist_data_support_list_struct  assistDataSuppList;          /* provide target's HA GNSS assist data capabilities */
+ 
+    kal_bool                                 envObserveSupportListValid;
+    gnss_ha_env_observe_support_list_struct  envObserveSupportList;       /* provide target's environment observation capabilities */
+ 
+    kal_bool                                 haGNSSSupportValid;
+    gnss_ha_gnss_capa_support_struct         haGNSSSupport;               /* provide target's HA GNSS capabilities */
+} gnss_ha_capability_struct;
+
+typedef struct
+{
+     LOCAL_PARA_HDR
+    kal_uint8 padding[4];
+     kal_int32 type; /* refer to agps_md_huge_data_msg_id */
+} lbs_gnss_ha_assist_cnf_struct;
+
+/* ---LPPe HA GNSS Interface---end--- */
+
+typedef struct
+{
+    kal_uint16                    gnssMethod;        /* specify the estimated location is calculated by which GNSS systems, map to GNSS_ID_BITMAP_* */
+    gnss_gad_pos_estimate_struct   locationEstimate;
+    gnss_measured_ref_time        measuredRefTime;   /* should always present */
+    kal_bool                     haLocValid;
+    gnss_ha_pos_estimate_struct    haLocationEstimate;    
+} gnss_pos_result_struct;
+
+/* This structure for MSG_ID_LCSP_GNSS_STANDALONE_POS_IND*/
+typedef struct
+{
+    LOCAL_PARA_HDR
+    kal_uint16                           transactionID;
+
+    gnss_loc_result_enum                 resultStatus;
+
+    gnss_pos_result_type_enum            type;
+    union
+    {
+        gnss_pos_result_struct           posResult;      /* only valid when resultStatus = GNSS_LOC_RESULT_NO_ERROR */
+        gnss_request_assist_data_struct  assistDataReq;  /* used for ULCS/RRLP, selected when resultStatus = GNSS_LOC_RESULT_ASSIST_DATA_MISSING */
+    } data;
+} lcsp_gnss_standalone_pos_ind_struct;
+
+
+/* This structure for MSG_ID_LCSP_GNSS_POS_CNF */
+typedef struct
+{
+    LOCAL_PARA_HDR
+    kal_uint16                           transactionID;
+
+    gnss_loc_result_enum                 resultStatus;
+
+    gnss_pos_result_type_enum            type;
+    union
+    {
+        gnss_pos_result_struct           posResult;      /* only valid when resultStatus = GNSS_LOC_RESULT_NO_ERROR */
+        gnss_request_assist_data_struct  assistDataReq;  /* used for ULCS/RRLP, selected when resultStatus = GNSS_LOC_RESULT_ASSIST_DATA_MISSING */
+    } data;   
+} lcsp_gnss_pos_cnf_struct;
+
+
+/* This structure for MSG_ID_LCSP_GNSS_MEAS_CNF */
+typedef struct
+{
+    LOCAL_PARA_HDR
+    kal_uint16                           transactionID;
+
+    gnss_loc_result_enum                 resultStatus;
+
+    gnss_meas_result_type_enum           type;
+    union
+    {
+        gnss_measured_result_struct      measuredResult;  /* only valid when resultStatus = GNSS_LOC_RESULT_NO_ERROR */
+        gnss_request_assist_data_struct  assistDataReq;   /* used for ULCS/RRLP, selected when resultStatus = GNSS_LOC_RESULT_ASSIST_DATA_MISSING */
+    } data;
+} lcsp_gnss_meas_cnf_struct;
+
+
+//#endif /* #if defined(__AGNSS_SUPPORT__) || defined(__AGPS_SUPPORT__) */
+
+#endif /* _GNSS2LCSP_STRUCT_H */
+