[Feature][T8TSK-304] merge mtk official patch 5th AP patch release
--AP Part

Only Configure: No
Affected branch: N/A
Affected module: N/A
Is it affected on both ZXIC and MTK: only MTK
Self-test: Yes
Doc Update: No

Change-Id: I4be050bd818251a360aad650055386a7560cb6d2
diff --git a/meta/meta-mediatek-ivt/recipes-support/platform-libs-common/files/userload.patch b/meta/meta-mediatek-ivt/recipes-support/platform-libs-common/files/userload.patch
index 526c84f..44fb31c 100644
--- a/meta/meta-mediatek-ivt/recipes-support/platform-libs-common/files/userload.patch
+++ b/meta/meta-mediatek-ivt/recipes-support/platform-libs-common/files/userload.patch
@@ -25,7 +25,7 @@
 +    char* buffer = NULL;
 +    size_t buffer_size = 0;
 +    bool isUser = false;
-+    /*
++
 +    if ((fp = popen("/bin/getprop ro.build.type", "r")) == NULL) {
 +        syslog(LOG_ERR, "open build.prop failed");
 +        return false;
@@ -50,7 +50,7 @@
 +    }
 +    if (fp != NULL) {
 +        pclose(fp);
-+    }*/
++    }
 +    return isUser;
 +}
 +#endif
diff --git a/meta/meta-mediatek-mt2735/conf/machine/auto2735evb-ivt-base.conf b/meta/meta-mediatek-mt2735/conf/machine/auto2735evb-ivt-base.conf
index d537a5e..2cb8cfd 100755
--- a/meta/meta-mediatek-mt2735/conf/machine/auto2735evb-ivt-base.conf
+++ b/meta/meta-mediatek-mt2735/conf/machine/auto2735evb-ivt-base.conf
@@ -155,6 +155,7 @@
 MODEM_CUSTOM_EXIST = "${@ os.path.exists('${MODEM_CUSTOM}')}"
 MODEM_DIR = "${@'${MODEM_INT}/${MODEM_PROJECT}' if ${MODEM_INT_EXIST} == True else '${MODEM_CUSTOM}/${MODEM_PROJECT}'}"
 EXTRA_IMAGEDEPENDS += "${@'modem' if ${MODEM_INT_EXIST} == True or ${MODEM_CUSTOM_EXIST} == True else ''}"
+CONFIG_PACKAGE_MDLOGGER = "yes"
 
 # MIPC
 MIPC_MODEM_PROJECT = "mt2735_ivt_nlwg_wide_temp"
@@ -215,7 +216,7 @@
 #xf.li@20230207 modiry for version number start
 LYNQ_CONFIG_VERSION = "T800_UNSET_v02.MP1_MR3.02b06.00.01"
 LYNQ_CONFIG_SW_VERSION = "T800_UNSET_v02.MP1_MR1.01b06.00"
-LYNQ_CONFIG_COMMITID = "b6568ebb0"
+LYNQ_CONFIG_COMMITID = "b290d0b2c"
 #xf.li@20230207 modiry for version number end
 
 #liu hong add for gsw remove connman 20230425 start
diff --git a/meta/meta-mediatek-mt2735/recipes-telephonyware/libuciwrapper/files/radio_property.config b/meta/meta-mediatek-mt2735/recipes-telephonyware/libuciwrapper/files/radio_property.config
index 977d5af..92c0dc3 100644
--- a/meta/meta-mediatek-mt2735/recipes-telephonyware/libuciwrapper/files/radio_property.config
+++ b/meta/meta-mediatek-mt2735/recipes-telephonyware/libuciwrapper/files/radio_property.config
@@ -9,13 +9,14 @@
 	option persist_mtk_volte_enable '1'
 	option ro_vendor_mtk_disable_cap_switch '0'
 	option persist_vendor_radio_data_sim '1'
+	option persist_vendor_ims_support '1'
 	option persist_mtk_volte_enable1 '3'
 	option ro_lynq_sw_version 'T800v01.MP1_RC201b01'
 	option persist_mtk_volte_enable2 '1'
 	option ro_product_device 'mt2735evb-ivt-main'
-	option ro_product_manufacture 'ZHENGZHOU'
-	option ro_lynq_hw_version 'T800v01.MP1_RC201b01'
-	option ro_product_oem 'liutao'
+	option ro_product_manufacture 'MobileTek'
+	option ro_lynq_hw_version 'T800v04.MP1-MR3'
+	option ro_product_oem 'MobileTek'
 	option ro_spk_volume_level '5'
 	option ro_boot_opt_ps1_rat 'N/Lf/Lt/W/G'
 	option ro_vendor_mtk_protocol1_rat_config 'N/Lf/Lt/W/G'
diff --git a/src/connectivity/gps/2.0/mtk_mnld/mnl/libs/inc/mtk_agps_data_center_base.h b/src/connectivity/gps/2.0/mtk_mnld/mnl/libs/inc/mtk_agps_data_center_base.h
new file mode 100644
index 0000000..69ae3dd
--- /dev/null
+++ b/src/connectivity/gps/2.0/mtk_mnld/mnl/libs/inc/mtk_agps_data_center_base.h
@@ -0,0 +1,1798 @@
+#ifndef MTK_AGPS_DATA_BASE_H

+#define MTK_AGPS_DATA_BASE_H

+#include <stdbool.h>

+#include <time.h>

+#include "mtk_gps_agps.h"

+

+typedef unsigned char       uint8;

+typedef char                int8;

+typedef unsigned short      uint16;

+typedef short               int16;

+typedef unsigned int        uint32;

+typedef int                 int32;

+typedef unsigned long long  uint64;

+typedef long long           int64;

+

+

+#define SOURCE_LPP  (1<<0)

+#define SOURCE_NTRIP  (1<<1)

+

+

+#define AGENT_DATA_CENTER_SUCCESS                    (0)

+

+#define AGENT_DATA_CENTER_UNKNOWN_FAIL               (-1)

+#define AGENT_DATA_CENTER_MALLOC_FAIL                (-2)

+#define AGENT_DATA_CENTER_FUNCTION_POINTER_NULL      (-3)

+#define AGENT_DATA_CENTER_OUT_OF_INDEX               (-4)

+#define AGENT_DATA_CENTER_GET_ITEM_FAIL              (-5)

+#define AGENT_DATA_CENTER_ALREADY_EXIST              (-6)

+#define AGENT_DATA_CENTER_PARAMETER_POINTER_NULL     (-7)

+#define AGENT_DATA_CENTER_SYS_API_FAIL               (-8)

+#define AGENT_DATA_CENTER_NOT_SUPPORT                (-9)

+

+#define DATA_CENTER_DEBUG_RAWDATA

+

+#ifndef MAX
+#define MAX(A,B) ((A)>(B)?(A):(B))
+#endif
+#ifndef MIN
+#define MIN(A,B) ((A)<(B)?(A):(B))
+#endif

+

+#define ARRAY_SIZE(array) (sizeof(array)/sizeof(array[0]))

+

+

+//below from RTCM 3.3

+#define RTCM_MAX_SAT_32      32

+#define RTCM_MAX_SAT_64      64

+#define RTCM_MAX_SAT_CODE     32

+

+#define RTCM_HEADER_LEN        3              // 1byte preamble+ 8bit reserved + 10bit length
+#define RTCM_CRC_LEN           3              // CRC Length is 3 bytes
+#define RTCM_PKT_BUF          (1023 + 3)      //MAX pkt length + header
+
+#define RTCM_PKT_LEN_BIT_MASK  0x000003FF     //10 bit for pkt length
+#define RTCM_PKT_PREAMBLE      0xD3
+
+
+#define RTCM_1001_MAX_SAT      32
+#define RTCM_1001_ONE_GPS_SAT_BITS 58
+
+#define RTCM_1002_MAX_SAT      32
+#define RTCM_1002_ONE_GPS_SAT_BITS 74
+
+#define RTCM_1003_MAX_SAT      32
+#define RTCM_1003_ONE_GPS_SAT_BITS 101
+
+#define RTCM_1004_MAX_SAT      32
+#define RTCM_1004_ONE_GPS_SAT_BITS 125
+
+#define RTCM_1009_MAX_SAT      32
+#define RTCM_1009_ONE_GLO_SAT_BITS 64
+
+#define RTCM_1010_MAX_SAT      32
+#define RTCM_1010_ONE_GLO_SAT_BITS 79
+
+#define RTCM_1011_MAX_SAT      32
+#define RTCM_1011_ONE_GLO_SAT_BITS 107
+
+#define RTCM_1012_MAX_SAT      32
+#define RTCM_1012_ONE_GLO_SAT_BITS 130
+
+#define RTCM_1033_MAX_NUM_N    31
+#define RTCM_1033_MAX_NUM_M    31
+#define RTCM_1033_MAX_NUM_I    31
+#define RTCM_1033_MAX_NUM_J    31
+#define RTCM_1033_MAX_NUM_K    31
+
+#define RTCM_1057_MAX_SAT      64
+#define RTCM_1057_ONE_GPS_SAT_BITS 135
+
+#define RTCM_1058_MAX_SAT      64
+#define RTCM_1058_ONE_GPS_SAT_BITS 76
+
+#define RTCM_1059_MAX_SAT      64
+#define RTCM_1059_MAX_SAT_CODE 32
+#define RTCM_1059_ONE_GPS_SAT_BITS 11  //need to check and confirm
+#define RTCM_1059_ONE_GPS_SAT_ONE_CODE_BITS 19
+
+#define RTCM_1060_MAX_SAT      64
+#define RTCM_1060_ONE_GPS_SAT_BITS 205
+
+#define RTCM_1061_MAX_SAT      64
+#define RTCM_1061_ONE_GPS_SAT_BITS 12
+
+#define RTCM_1062_MAX_SAT      64
+#define RTCM_1062_ONE_GPS_SAT_BITS 28
+
+#define RTCM_1063_MAX_SAT      64
+#define RTCM_1063_ONE_GLO_SAT_BITS 134
+
+#define RTCM_1064_MAX_SAT      64
+#define RTCM_1064_ONE_GLO_SAT_BITS 75
+
+#define RTCM_1065_MAX_SAT      64
+#define RTCM_1065_MAX_SAT_CODE 32
+#define RTCM_1065_ONE_GLO_SAT_BITS 10  //need to check and confirm
+#define RTCM_1065_ONE_GLO_SAT_ONE_CODE_BITS 19
+
+#define RTCM_1066_MAX_SAT      64
+#define RTCM_1066_ONE_GLO_SAT_BITS 204
+
+#define RTCM_1067_MAX_SAT      64
+#define RTCM_1067_ONE_GLO_SAT_BITS 11
+
+#define RTCM_1068_MAX_SAT      64
+#define RTCM_1068_ONE_GLO_SAT_BITS 27
+
+#define RTCM_MSMX_MAX_SAT      64
+#define RTCM_MSMX_MAX_SAT_SIG      32
+
+#define RTCM_MSM1_ONE_SAT_BITS 10
+#define RTCM_MSM1_ONE_SIG_BITS 15
+
+#define RTCM_MSM2_ONE_SAT_BITS 10
+#define RTCM_MSM2_ONE_SIG_BITS 27
+
+#define RTCM_MSM3_ONE_SAT_BITS 10
+#define RTCM_MSM3_ONE_SIG_BITS 42
+
+#define RTCM_MSM4_ONE_SAT_BITS 18
+#define RTCM_MSM4_ONE_SIG_BITS 48
+
+#define RTCM_MSM5_ONE_SAT_BITS 36
+#define RTCM_MSM5_ONE_SIG_BITS 63
+
+#define RTCM_MSM6_ONE_SAT_BITS 18
+#define RTCM_MSM6_ONE_SIG_BITS 65
+
+#define RTCM_MSM7_ONE_SAT_BITS 36
+#define RTCM_MSM7_ONE_SIG_BITS 80
+
+
+#define RTCM_1104_MAX_SAT      37
+#define RTCM_1104_ONE_SAT_BLK_BITS 69

+

+

+//below from LPP R16

+#ifndef GNSS_SGN_ID_VALUE_MAX

+#define GNSS_SGN_ID_VALUE_MAX 7

+#endif

+

+#define BITS_PER_INT  (32)

+

+

+#define BITOP_MASK(nr)        (1UL << ((nr) % BITS_PER_INT))

+#define BITOP_WORD(nr)        ((nr) / BITS_PER_INT)

+

+

+#define MESSAGE_HASH_SIZE    255

+#define ITEM_SIZE_MAX (10*1024)

+

+

+#define BITS_TO_LONGS(bits) (((bits)+BITS_PER_INT-1)/BITS_PER_INT)

+#define DECLARE_BITMAP(name,bits) unsigned int name[BITS_TO_LONGS(bits)]

+

+

+/* GNSS ID Bitmap, use two-byte representation */
+#define GNSS_ID_BITMAP_NONE     0x00
+#define GNSS_ID_BITMAP_GPS      0x8000  /* gps     (0) */
+#define GNSS_ID_BITMAP_SBAS     0x4000  /* sbas    (1) */
+#define GNSS_ID_BITMAP_QZSS     0x2000  /* qzss    (2) */
+#define GNSS_ID_BITMAP_GALILEO  0x1000  /* galileo (3) */
+#define GNSS_ID_BITMAP_GLONASS  0x0800  /* glonass (4) */
+#define GNSS_ID_BITMAP_BDS      0x0400  /* bds     (5) */
+#define GNSS_ID_BITMAP_NAVIC    0x0200  /* navic   (6) */

+

+#define GNSS_MAX_EQUAL_INT_AMBIGUITY_LEVEL_REF_STATION_ID_NUM 16
+#define GNSS_MAX_SSR_RELATIVE_LOCATION_ELEMENT 64
+#define GNSS_MAX_RTK_SAT_SIGNAL_DATA_ELEMENT 24
+#define GNSS_MAX_RTK_SAT_DATA_ELEMENT 32 /* Spec defines 64, use 32 to reduce structure size */
+#define GNSS_MAX_SSR_ORBIT_CORRECTION_SAT_ELEMENT 32 /* Spec defines 64, use 32 to reduce structure size */
+#define GNSS_MAX_SSR_CLOCK_CORRECTION_SAT_ELEMENT 32 /* Spec defines 64, use 32 to reduce structure size */
+#define GNSS_MAX_SSR_CODE_BIAS_SAT_ELEMENT 32 /* Spec defines 64, use 32 to reduce structure size */
+#define GNSS_MAX_SSR_URA_SAT_ELEMENT 32 /* Spec defines 64, use 32 to reduce structure size */
+#define GNSS_MAX_SSR_PHASE_BIAS_SAT_ELEMENT 32 /* Spec defines 64, use 32 to reduce structure size */
+#define GNSS_MAX_SSR_STEC_SAT_ELEMENT 32 /* Spec defines 64, use 32 to reduce structure size */
+#define GNSS_MAX_STEC_RESIDUAL_SAT_ELEMENT 32 /* Spec defines 64, use 32 to reduce structure size */
+#define GNSS_MAX_SSR_GRID_ELEMENT 64
+#define GNSS_MAX_NAVIC_CORRECTION_ELEMENT 32 /* Spec defines 64, use 32 to reduce structure size */
+#define GNSS_MAX_NAVIC_REGION_IGP_ELEMENT 16
+#define GNSS_MAX_SAT_LIST_ELEMENT 32 /* Spec defines 64, use 32 to reduce structure size */

+

+/* GNSS Signal ID value */
+#define GNSS_SGN_ID_VALUE_GPS_L1C_A       0
+#define GNSS_SGN_ID_VALUE_GPS_L1C         1
+#define GNSS_SGN_ID_VALUE_GPS_L2C         2
+#define GNSS_SGN_ID_VALUE_GPS_L5          3
+#define GNSS_SGN_ID_VALUE_GPS_L1P 4
+#define GNSS_SGN_ID_VALUE_GPS_L1Z 5
+#define GNSS_SGN_ID_VALUE_GPS_L2_C_A 6
+#define GNSS_SGN_ID_VALUE_GPS_L2P 7
+#define GNSS_SGN_ID_EXT_VALUE_GPS_L2Z 8
+#define GNSS_SGN_ID_EXT_VALUE_GPS_L2C_M 9
+#define GNSS_SGN_ID_EXT_VALUE_GPS_L2C_L 10
+#define GNSS_SGN_ID_EXT_VALUE_GPS_L2C_M_L 11
+#define GNSS_SGN_ID_EXT_VALUE_GPS_L5I 12
+#define GNSS_SGN_ID_EXT_VALUE_GPS_L5Q 13
+#define GNSS_SGN_ID_EXT_VALUE_GPS_L5_I_Q 14
+#define GNSS_SGN_ID_EXT_VALUE_GPS_L1C_D 15
+#define GNSS_SGN_ID_EXT_VALUE_GPS_L1C_P 16
+#define GNSS_SGN_ID_EXT_VALUE_GPS_L1C_D_P 17
+
+#define GNSS_SGN_ID_VALUE_SBAS_L1         0
+#define GNSS_SGN_ID_VALUE_SBAS_L5I 1
+#define GNSS_SGN_ID_VALUE_SBAS_L5Q 2
+#define GNSS_SGN_ID_VALUE_SBAS_L5_I_Q 3
+
+#define GNSS_SGN_ID_VALUE_QZSS_L1C_A      0
+#define GNSS_SGN_ID_VALUE_QZSS_L1C        1
+#define GNSS_SGN_ID_VALUE_QZSS_L2C        2
+#define GNSS_SGN_ID_VALUE_QZSS_L5         3
+#define GNSS_SGN_ID_VALUE_QZSS_LEX_S 4
+#define GNSS_SGN_ID_VALUE_QZSS_LEX_L 5
+#define GNSS_SGN_ID_VALUE_QZSS_LEX_S_L 6
+#define GNSS_SGN_ID_VALUE_QZSS_L2C_M 7
+#define GNSS_SGN_ID_EXT_VALUE_QZSS_L2C_L 8
+#define GNSS_SGN_ID_EXT_VALUE_QZSS_L2C_M_L 9
+#define GNSS_SGN_ID_EXT_VALUE_QZSS_L5I 10
+#define GNSS_SGN_ID_EXT_VALUE_QZSS_L5Q 11
+#define GNSS_SGN_ID_EXT_VALUE_QZSS_L5_I_Q 12
+#define GNSS_SGN_ID_EXT_VALUE_QZSS_L1C_D 13
+#define GNSS_SGN_ID_EXT_VALUE_QZSS_L1C_P 14
+#define GNSS_SGN_ID_EXT_VALUE_QZSS_L1C_D_P 15
+
+#define GNSS_SGN_ID_VALUE_GLONASS_G1      0
+#define GNSS_SGN_ID_VALUE_GLONASS_G2      1
+#define GNSS_SGN_ID_VALUE_GLONASS_G3      2
+#define GNSS_SGN_ID_VALUE_GLONASS_G1P 3
+#define GNSS_SGN_ID_VALUE_GLONASS_G2P 4
+#define GNSS_SGN_ID_VALUE_GLONASS_G1A_D 5
+#define GNSS_SGN_ID_VALUE_GLONASS_G1A_P 6
+#define GNSS_SGN_ID_VALUE_GLONASS_G1A_D_P 7
+#define GNSS_SGN_ID_EXT_VALUE_GLONASS_G2A_I 8
+#define GNSS_SGN_ID_EXT_VALUE_GLONASS_G2A_P 9
+#define GNSS_SGN_ID_EXT_VALUE_GLONASS_G2A_I_P 10
+#define GNSS_SGN_ID_EXT_VALUE_GLONASS_G3I 11
+#define GNSS_SGN_ID_EXT_VALUE_GLONASS_G3Q 12
+#define GNSS_SGN_ID_EXT_VALUE_GLONASS_G3_I_Q 13
+
+#define GNSS_SGN_ID_VALUE_GALILEO_E1      0
+#define GNSS_SGN_ID_VALUE_GALILEO_E5A     1
+#define GNSS_SGN_ID_VALUE_GALILEO_E5B     2
+#define GNSS_SGN_ID_VALUE_GALILEO_E6      3
+#define GNSS_SGN_ID_VALUE_GALILEO_E5_A_B  4
+#define GNSS_SGN_ID_VALUE_GALILEO_E1C 5
+#define GNSS_SGN_ID_VALUE_GALILEO_E1A 6
+#define GNSS_SGN_ID_VALUE_GALILEO_E1B 7
+#define GNSS_SGN_ID_EXT_VALUE_GALILEO_E1_B_C 8
+#define GNSS_SGN_ID_EXT_VALUE_GALILEO_E1_A_B_C 9
+#define GNSS_SGN_ID_EXT_VALUE_GALILEO_E6C 10
+#define GNSS_SGN_ID_EXT_VALUE_GALILEO_E6A 11
+#define GNSS_SGN_ID_EXT_VALUE_GALILEO_E6B 12
+#define GNSS_SGN_ID_EXT_VALUE_GALILEO_E6_B_C 13
+#define GNSS_SGN_ID_EXT_VALUE_GALILEO_E6_A_B_C 14
+#define GNSS_SGN_ID_EXT_VALUE_GALILEO_E5B_I 15
+#define GNSS_SGN_ID_EXT_VALUE_GALILEO_E5B_Q 16
+#define GNSS_SGN_ID_EXT_VALUE_GALILEO_E5B_I_Q 17
+#define GNSS_SGN_ID_EXT_VALUE_GALILEO_E5_A_B_I 18
+#define GNSS_SGN_ID_EXT_VALUE_GALILEO_E5_A_B_Q 19
+#define GNSS_SGN_ID_EXT_VALUE_GALILEO_E5_A_B_I_Q 20
+#define GNSS_SGN_ID_EXT_VALUE_GALILEO_E5A_I 21
+#define GNSS_SGN_ID_EXT_VALUE_GALILEO_E5A_Q 22
+#define GNSS_SGN_ID_EXT_VALUE_GALILEO_E5A_I_Q 23
+
+#define GNSS_SGN_ID_VALUE_BDS_B1I         0
+#define GNSS_SGN_ID_VALUE_BDS_B1Q 1
+#define GNSS_SGN_ID_VALUE_BDS_B1_I_Q 2
+#define GNSS_SGN_ID_VALUE_BDS_B3I 3
+#define GNSS_SGN_ID_VALUE_BDS_B3Q 4
+#define GNSS_SGN_ID_VALUE_BDS_B3_I_Q 5
+#define GNSS_SGN_ID_VALUE_BDS_B2I 6
+#define GNSS_SGN_ID_VALUE_BDS_B2Q 7
+#define GNSS_SGN_ID_EXT_VALUE_BDS_B2_I_Q 8
+#define GNSS_SGN_ID_EXT_VALUE_BDS_B1C_D 9
+#define GNSS_SGN_ID_EXT_VALUE_BDS_B1C_P 10
+#define GNSS_SGN_ID_EXT_VALUE_BDS_B1C_D_P 11
+

+#define DATA_CENTER_TRANSFER_MAX_SAT_SIG  8

+#define DATA_CENTER_TRANSFER_MAX_SAT  32

+

+typedef enum {

+    GNSS_TOW,

+    GNSS_TOD,

+} gnss_time_type;

+

+typedef enum {

+    AGENT_ID_RefStation_info                = 0,

+    AGENT_ID_Receiver_Antenna_Dec           = 1,

+    AGENT_ID_Phy_Ref_Station_Info           = 2,

+    AGENT_ID_RTK_MSM1_Observations          = 3,

+    AGENT_ID_RTK_MSM2_Observations          = 4,

+    AGENT_ID_RTK_MSM3_Observations          = 5,

+    AGENT_ID_RTK_MSM4_Observations          = 6,

+    AGENT_ID_RTK_MSM5_Observations          = 7,

+    AGENT_ID_RTK_MSM6_Observations          = 8,

+    AGENT_ID_RTK_MSM7_Observations          = 9,

+    AGENT_ID_SSR_Orbit_Corrections          = 10,

+    AGENT_ID_Clock_Corrections              = 11,

+    AGENT_ID_Code_Bias_Datas                = 12,

+    AGENT_ID_SSR_URA_Datas                  = 13,

+    AGENT_ID_Phase_Bias_Datas               = 14,

+    AGENT_ID_SSR_STEC_Corrections           = 15,

+    AGENT_ID_SSR_CorrectionPoints           = 16,

+    AGENT_ID_SSR_Gridded_Correction         = 17,

+    AGENT_ID_GG_L1_Obsers                   = 18,

+    AGENT_ID_GG_L1_L2_Obsers                = 19,

+    AGENT_ID_BDS_GRID_ION                   = 20,

+    AGENT_ID_MAX                            = 21

+} data_center_msg_id;

+

+

+typedef struct { DECLARE_BITMAP(bits, AGENT_ID_MAX); } fast_table_bitmap_t;

+

+

+#define FAST_TABLE_MASK_NONE                            \

+(fast_table_bitmap_t) { {                                \

+    [0 ... BITS_TO_LONGS(AGENT_ID_MAX)-1] =  0UL                \

+} }

+

+struct id_list {

+    struct id_list *next;

+    uint32 id;

+};

+

+typedef struct {

+    uint32 total_num;

+    uint32 id_array[0];

+} agps_data_base_fast_list;

+

+#define TRANS_STRATEGY_HOLD  (1<<0) // will send fast table to mnl first

+#define TRANS_STRATEGY_PERIODIC (1<<1) //will monitor the data

+#define UNPACK_STRATEGY_UNPACK (1<<2) //will unpack the data when transfer

+#define SAVE_STRATEGY_NO_SAVE (1<<3) //will not save to database, will free every message after sending them to mnl

+

+typedef enum {
+    DATA_CENTER_IDLE = 0, //mnld begin run.

+    DATA_CENTER_REQUESTING = 1, // mnl has already required time ,but did not receieve MD ack.

+    DATA_CENTER_REQUESTED = 2,  //mnl has already required time ,and receieve MD ack.

+} data_center_status;

+

+typedef enum {

+    ADAPTER_SOURCE_ID_LPP = 0,

+    ADAPTER_SOURCE_ID_RTCM = 1,

+    ADAPTER_SOURCE_ID_MAX = 2,

+} ADAPTER_SOURCE_ID;

+

+struct agps_data_base_fast_table {

+    uint32 total_num;

+    struct id_list *list;// used for query

+    fast_table_bitmap_t bitmap; //used for transfer

+};

+

+struct agps_data_base {

+    uint32 data_size;//size of this structure with payload lenth

+    struct agps_data_base *next;//mnl should not use this pointer, only can be used by data center

+    uint32 source_id;

+    uint32 message_id;

+    time_t utc_seconds;//add os tick, utc time

+    uint32 os_tick;

+    uint32 total_num;

+    uint32 item_size;

+    union {

+        uint32 rtcm_messageID;

+        uint32 lpp_transactionID;

+    } private_data;

+    char valid;

+    char data[0];

+};

+

+struct fast_table_iter {

+    fast_table_bitmap_t* bitmap;

+    uint32 cur;

+};

+

+struct data_center_fsm {

+    data_center_status status;

+    uint64 time_stamp;// unit: s

+    uint16 internal_transactionID;//0:when mnld boot up; increase when new req from mnl

+    void *pri;// private data of specific data source

+};

+

+struct require_parameter {

+    /*tbc*/

+};

+

+struct bitmap_iter {

+    unsigned int *bitmap;

+    unsigned int offset;

+    unsigned int size;

+};

+

+/*lpp gnss_ha_referenceStationID_struct*/

+typedef struct {

+    uint16 referenceStationID; /* 0..65535 */

+    char providerNameValid;

+    uint32 providerNameLen;

+    char providerName[32]; /* SIZE (1..32) */

+} referenceStationID;

+

+/* AntennaReferencePointUnc-r15 */
+typedef struct {

+    uint8 uncX; /* 0..255 */

+    uint8 confX; /* 0..100 */

+    uint8 uncY; /* 0..255 */

+    uint8 confY; /* 0..100 */

+    uint8 uncZ; /* 0..255 */

+    uint8 confZ; /* 0..100 */

+} antennaReferencePointUnc;

+

+typedef struct {

+    MTK_GNSS_ID_ENUM gnssTimeID;

+    uint32 tow;

+} tow_time_struct;

+

+typedef struct {

+    referenceStationID u2RefStationID; //Reference station ID

+    uint8 u1MulMsgInd;     //Multiple Message Indicator

+    char IODSValid;

+    uint8 u1IODS;          //IODS-Issue of Data Station

+    uint8 u1Reserved;        //Reserved

+    uint8 u1ClkSteerInd;     //Clock Steering Indicator

+    uint8 u1ExtClkInd;       //External Clock Indicator

+    uint8 u1DFSInd;       //GNSS Divergence-free Smoothing Indicator

+    uint8 u1SmthInt;      //GNSS Smoothing Interval

+    /*if need? if can be instead by gnsstime*/uint8 u1DOW;           //GLONASS Day Of Week

+} rtcm_msg_common_header;

+

+//Content of Signal Data for MSM1 : DF400
+typedef struct {
+    uint8 u1SigID;         //Signal ID in Signal Mask 1-32 [range:1-32]

+    int16 i2FinePseu;          //GNSS Signal fine Pseudoranges

+    uint8 u1Flag;         //if flag is 1, it means the signal data is available to get

+} data_center_rtcm_t_msm1_sat_sig;

+
+//Content of Satellite Date for MSM1 : DF398
+typedef struct {
+    uint8 u1SatID;         //Satellite ID in Satellite Mask [range:1-64]

+    uint16 u2RouRanMod;     //GNSS Satellite rough ranges modulo 1 millisecond

+    uint8 u1SigNum;

+    data_center_rtcm_t_msm1_sat_sig rSatSigInfo[RTCM_MSMX_MAX_SAT_SIG];

+    uint8 u1Flag;         //if Flag is 1, it means the satellite data is available to get

+} data_center_rtcm_t_msm1_sat;

+

+typedef struct {
+    uint8 u1SatID;         //Satellite ID in Satellite Mask [range:1-64]

+    uint8 u1RouRanInteger; //The number of integer milliseconds in GNSS Satellite rough ranges

+    uint16 u2RouRanMod;     //GNSS Satellite rough ranges modulo 1 millisecond

+    uint8 u1SigNum;

+    data_center_rtcm_t_msm1_sat_sig rSatSigInfo[DATA_CENTER_TRANSFER_MAX_SAT_SIG];

+} reduced_data_center_rtcm_t_msm1_sat;

+

+//Content of Signal Data for MSM2 : DF401, DF402, DF420
+typedef struct {
+    uint8 u1SigID;         //Signal ID in Signal Mask 1-32 [range:1-32]

+    int32 i4FinePhase;               //GNSS Signal fine Phaserange  data

+    uint8 u1PhaseLockTimeInd; //GNSS Phaserange Lock Time Indicator

+    uint8 u1HalfCycleAmbInd;  //Half-cycle ambiguity indicator

+    uint8 u1Flag;         //if flag is 1, it means the signal data is available to get

+} data_center_rtcm_t_msm2_sat_sig;

+
+//Content of Satellite Date for MSM2 : DF398
+typedef struct {
+    uint8 u1SatID;         //Satellite ID in Satellite Mask [range:1-64]

+    uint16 u2RouRanMod;     //GNSS Satellite rough ranges modulo 1 millisecond

+    uint8 u1SigNum;

+    data_center_rtcm_t_msm2_sat_sig rSatSigInfo[RTCM_MSMX_MAX_SAT_SIG];

+    uint8 u1Flag;          //if Flag is 1, it means the satellite data is available to get

+} data_center_rtcm_t_msm2_sat;

+

+typedef struct {
+    uint8 u1SatID;         //Satellite ID in Satellite Mask [range:1-64]

+    uint8 u1RouRanInteger; //The number of integer milliseconds in GNSS Satellite rough ranges

+    uint16 u2RouRanMod;     //GNSS Satellite rough ranges modulo 1 millisecond

+    uint8 u1SigNum;

+    data_center_rtcm_t_msm2_sat_sig rSatSigInfo[DATA_CENTER_TRANSFER_MAX_SAT_SIG];

+} reduced_data_center_rtcm_t_msm2_sat;

+

+//Content of Signal Data for MSM3 : DF400, DF401, DF402, DF420
+typedef struct {
+    uint8 u1SigID;         //Signal ID in Signal Mask 1-32 [range:1-32]

+    int16 i2FinePseu;              //GNSS Signal fine Pseudoranges

+    int32 i4FinePhase;               //GNSS Signal fine Phaserange  data

+    uint8 u1PhaseLockTimeInd; //GNSS Phaserange Lock Time Indicator

+    uint8 u1HalfCycleAmbInd;  //Half-cycle ambiguity indicator

+    uint8 u1Flag;         //if flag is 1, it means the signal data is available to get

+} data_center_rtcm_t_msm3_sat_sig;

+
+//Content of Satellite Date for MSM3 : DF398
+typedef struct {
+    uint8 u1SatID;         //Satellite ID in Satellite Mask [range:1-64]

+    uint16 u2RouRanMod;     //GNSS Satellite rough ranges modulo 1 millisecond

+    uint8 u1SigNum;

+    data_center_rtcm_t_msm3_sat_sig rSatSigInfo[RTCM_MSMX_MAX_SAT_SIG];

+    uint8 u1Flag;         //if Flag is 1, it means the satellite data is available to get

+} data_center_rtcm_t_msm3_sat;

+

+typedef struct {
+    uint8 u1SatID;         //Satellite ID in Satellite Mask [range:1-64]

+    uint8 u1RouRanInteger; //The number of integer milliseconds in GNSS Satellite rough ranges

+    uint16 u2RouRanMod;     //GNSS Satellite rough ranges modulo 1 millisecond

+    uint8 u1SigNum;

+    data_center_rtcm_t_msm3_sat_sig rSatSigInfo[DATA_CENTER_TRANSFER_MAX_SAT_SIG];

+} reduced_data_center_rtcm_t_msm3_sat;

+

+//Content of Signal Data for MSM4 : DF400, DF401, DF402, DF420, DF403
+typedef struct {
+    uint8 u1SigID;         //Signal ID in Signal Mask 1-32 [range:1-32]

+    int16 i2FinePseu;              //GNSS Signal fine Pseudoranges

+    int32 i4FinePhase;               //GNSS Signal fine Phaserange  data

+    uint8 u1PhaseLockTimeInd; //GNSS Phaserange Lock Time Indicator

+    uint8 u1HalfCycleAmbInd;  //Half-cycle ambiguity indicator

+    uint8 u1CNRs;             //GNSS signal CNRs

+    uint8 u1Flag;          //if flag is 1, it means the signal data is available to get

+} data_center_rtcm_t_msm4_sat_sig;

+

+typedef struct {
+    uint8 u1SatID;         //Satellite ID in Satellite Mask [range:1-64]

+    uint8 u1RouRanInteger; //The number of integer milliseconds in GNSS Satellite rough ranges

+    uint16 u2RouRanMod;     //GNSS Satellite rough ranges modulo 1 millisecond

+    uint8 u1SigNum;

+    data_center_rtcm_t_msm4_sat_sig rSatSigInfo[DATA_CENTER_TRANSFER_MAX_SAT_SIG];

+} reduced_data_center_rtcm_t_msm4_sat;

+

+//Content of Satellite Date for MSM4 : DF397, DF398
+typedef struct {
+    uint8 u1SatID;         //Satellite ID in Satellite Mask [range:1-64]

+    uint8 u1RouRanInteger; //The number of integer milliseconds in GNSS Satellite rough ranges

+    uint16 u2RouRanMod;     //GNSS Satellite rough ranges modulo 1 millisecond

+    uint8 u1SigNum;

+    data_center_rtcm_t_msm4_sat_sig rSatSigInfo[RTCM_MSMX_MAX_SAT_SIG];

+    uint8 u1Flag;          //if Flag is 1, it means the satellite data is available to get

+} data_center_rtcm_t_msm4_sat;

+
+//Content of Signal Data for MSM5 : DF400, DF401, DF402, DF420, DF403, DF404
+typedef struct {
+    uint8 u1SigID;         //Signal ID in Signal Mask 1-32 [range:1-32]

+    int16 i2FinePseu;              //GNSS Signal fine Pseudoranges

+    int32 i4FinePhase;               //GNSS Signal fine Phaserange  data

+    uint8 u1PhaseLockTimeInd; //GNSS Phaserange Lock Time Indicator

+    uint8 u1HalfCycleAmbInd;  //Half-cycle ambiguity indicator

+    uint8 u1CNRs;             //GNSS signal CNRs

+    int16 i2FinePhaRanRates;      //GNSS signal fine PhaseRangeRates

+    uint8 u1Flag;            //if flag is 1, it means the signal data is available to get

+} data_center_rtcm_t_msm5_sat_sig;

+
+//Content of Satellite Date for MSM5 : DF397, specific, DF398, DF399
+typedef struct {
+    uint8 u1SatID;         //Satellite ID in Satellite Mask [range:1-64]

+    uint8 u1RouRanInteger; //The number of integer milliseconds in GNSS Satellite rough ranges

+    uint8 u1ExtInfo;        //Extended Satellite Information, (if it's GLONASS satellite, it means Frequency Channel Number)

+    uint16 u2RouRanMod;     //GNSS Satellite rough ranges modulo 1 millisecond

+    int16 i2RouPhaRanRates;    //GNSS Satellite rough PhaseRangeRates

+    uint8 u1SigNum;

+    data_center_rtcm_t_msm5_sat_sig rSatSigInfo[RTCM_MSMX_MAX_SAT_SIG];

+    uint8 u1Flag;          //if Flag is 1, it means the satellite data is available to get

+} data_center_rtcm_t_msm5_sat;

+

+typedef struct {
+    uint8 u1SatID;         //Satellite ID in Satellite Mask [range:1-64]

+    uint8 u1RouRanInteger; //The number of integer milliseconds in GNSS Satellite rough ranges

+    uint8 u1ExtInfo;        //Extended Satellite Information, (if it's GLONASS satellite, it means Frequency Channel Number)

+    uint16 u2RouRanMod;     //GNSS Satellite rough ranges modulo 1 millisecond

+    int16 i2RouPhaRanRates;    //GNSS Satellite rough PhaseRangeRates

+    uint8 u1SigNum;

+    data_center_rtcm_t_msm5_sat_sig rSatSigInfo[DATA_CENTER_TRANSFER_MAX_SAT_SIG];

+} reduced_data_center_rtcm_t_msm5_sat;

+

+//Content of Signal Data for MSM6 : DF405, DF406, DF407, DF420, DF408
+typedef struct {
+    uint8 u1SigID;         //Signal ID in Signal Mask 1-32 [range:1-32]

+    int32 i4FinePseuExt;              //GNSS Signal fine Pseudoranges with extended resolution

+    int32 i4FinePhaseExt;               //GNSS Signal fine Phaserange data with extended resolution

+    uint16 u2PhaseLockTimeIndExt; //GNSS Phaserange Lock Time Indicator with extended range and resolution

+    uint8 u1HalfCycleAmbInd;  //Half-cycle ambiguity indicator

+    uint16 u2CNRsExt;         //GNSS signal CNRs with extended resolution

+    uint8 u1Flag;           //if flag is 1, it means the signal data is available to get

+} data_center_rtcm_t_msm6_sat_sig;

+
+//Content of Satellite Date for MSM6 : DF397, DF398
+typedef struct {
+    uint8 u1SatID;         //Satellite ID in Satellite Mask [range:1-64]

+    uint8 u1RouRanInteger; //The number of integer milliseconds in GNSS Satellite rough ranges

+    uint16 u2RouRanMod;     //GNSS Satellite rough ranges modulo 1 millisecond

+    uint8 u1SigNum;

+    data_center_rtcm_t_msm6_sat_sig rSatSigInfo[RTCM_MSMX_MAX_SAT_SIG];

+    uint8 u1Flag;           //if Flag is 1, it means the satellite data is available to get

+} data_center_rtcm_t_msm6_sat;

+

+typedef struct {
+    uint8 u1SatID;         //Satellite ID in Satellite Mask [range:1-64]

+    uint8 u1RouRanInteger; //The number of integer milliseconds in GNSS Satellite rough ranges

+    uint16 u2RouRanMod;     //GNSS Satellite rough ranges modulo 1 millisecond

+    uint8 u1SigNum;

+    data_center_rtcm_t_msm6_sat_sig rSatSigInfo[DATA_CENTER_TRANSFER_MAX_SAT_SIG];

+} reduced_data_center_rtcm_t_msm6_sat;

+

+//Content of Signal Data for MSM7 : DF405, DF406, DF407, DF420, DF408, DF404
+typedef struct {
+    uint8 u1SigID;         //Signal ID in Signal Mask 1-32 [range:1-32]

+    int32 i4FinePseuExt;              //GNSS Signal fine Pseudoranges with extended resolution

+    int32 i4FinePhaseExt;               //GNSS Signal fine Phaserange data with extended resolution

+    uint16 u2PhaseLockTimeIndExt; //GNSS Phaserange Lock Time Indicator with extended range and resolution

+    uint8 u1HalfCycleAmbInd;  //Half-cycle ambiguity indicator

+    char carrierToNoiseRatioValid;

+    uint16 u2CNRsExt;         //GNSS signal CNRs with extended resolution

+    char finePhaseRangeRateValid;

+    int16 i2FinePhaRanRates;      //GNSS signal fine PhaseRangeRates

+    uint8 u1Flag;           //if flag is 1, it means the signal data is available to get

+} data_center_rtcm_t_msm7_sat_sig;

+
+//Content of Satellite Date for MSM7 : DF397, specific, DF398, DF399
+typedef struct {
+    uint8 u1SatID;         //Satellite ID in Satellite Mask [range:1-64]

+    char integerMsValid;

+    uint8 u1RouRanInteger; //The number of integer milliseconds in GNSS Satellite rough ranges

+    uint8 u1ExtInfo;        //Extended Satellite Information, (if it's GLONASS satellite, it means Frequency Channel Number)

+    uint16 u2RouRanMod;     //GNSS Satellite rough ranges modulo 1 millisecond

+    char roughPhaseRangeRateValid;

+    int16 i2RouPhaRanRates;    //GNSS Satellite rough PhaseRangeRates

+    uint8 u1SigNum;

+    data_center_rtcm_t_msm7_sat_sig rSatSigInfo[RTCM_MSMX_MAX_SAT_SIG];

+    uint8 u1Flag;          //if Flag is 1, it means the satellite data is available to get

+} data_center_rtcm_t_msm7_sat;

+

+typedef struct {
+    uint8 u1SatID;         //Satellite ID in Satellite Mask [range:1-64]

+    uint8 u1RouRanInteger; //The number of integer milliseconds in GNSS Satellite rough ranges

+    uint16 u2RouRanMod;     //GNSS Satellite rough ranges modulo 1 millisecond

+    uint8 u1SigNum;

+    data_center_rtcm_t_msm7_sat_sig rSatSigInfo[DATA_CENTER_TRANSFER_MAX_SAT_SIG];

+} reduced_data_center_rtcm_t_msm7_sat;

+

+typedef struct {

+    uint8 u1SatNum;

+    uint64 u8SatMask;  //GNSS Satellite Mask

+    uint32 u4SigMask;            //GNSS Signal Mask

+    uint64 u8CellMask; //GNSS Cell Mask

+    gnss_time_type time_type;

+    union {

+        gnss_system_time_struct epochTime;

+        tow_time_struct towTime;

+    } time;

+    data_center_rtcm_t_msm1_sat rSatInfo[RTCM_MSMX_MAX_SAT];

+} data_center_rtk_msm1_observation;

+

+typedef struct {

+    uint8 u1SatNum;

+    uint64 u8SatMask;  //GNSS Satellite Mask

+    uint32 u4SigMask;            //GNSS Signal Mask

+    uint64 u8CellMask; //GNSS Cell Mask

+    gnss_time_type time_type;

+    union {

+        gnss_system_time_struct epochTime;

+        tow_time_struct towTime;

+    } time;

+    data_center_rtcm_t_msm2_sat rSatInfo[RTCM_MSMX_MAX_SAT];

+} data_center_rtk_msm2_observation;

+

+typedef struct {

+    uint8 u1SatNum;

+    uint64 u8SatMask;  //GNSS Satellite Mask

+    uint32 u4SigMask;            //GNSS Signal Mask

+    uint64 u8CellMask; //GNSS Cell Mask

+    gnss_time_type time_type;

+    union {

+        gnss_system_time_struct epochTime;

+        tow_time_struct towTime;

+    } time;

+    data_center_rtcm_t_msm3_sat rSatInfo[RTCM_MSMX_MAX_SAT];

+} data_center_rtk_msm3_observation;

+

+typedef struct {

+    uint8 u1SatNum;

+    uint64 u8SatMask;  //GNSS Satellite Mask

+    uint32 u4SigMask;            //GNSS Signal Mask

+    uint64 u8CellMask; //GNSS Cell Mask

+    gnss_time_type time_type;

+    union {

+        gnss_system_time_struct epochTime;

+        tow_time_struct towTime;

+    } time;

+    data_center_rtcm_t_msm4_sat rSatInfo[RTCM_MSMX_MAX_SAT];

+} data_center_rtk_msm4_observation;

+

+typedef struct {

+    uint8 u1SatNum;

+    uint64 u8SatMask;  //GNSS Satellite Mask

+    uint32 u4SigMask;            //GNSS Signal Mask

+    uint64 u8CellMask; //GNSS Cell Mask

+    gnss_time_type time_type;

+    union {

+        gnss_system_time_struct epochTime;

+        tow_time_struct towTime;

+    } time;

+    data_center_rtcm_t_msm5_sat rSatInfo[RTCM_MSMX_MAX_SAT];

+} data_center_rtk_msm5_observation;

+

+typedef struct {

+    uint8 u1SatNum;

+    uint64 u8SatMask;  //GNSS Satellite Mask

+    uint32 u4SigMask;            //GNSS Signal Mask

+    uint64 u8CellMask; //GNSS Cell Mask

+    gnss_time_type time_type;

+    union {

+        gnss_system_time_struct epochTime;

+        tow_time_struct towTime;

+    } time;

+    data_center_rtcm_t_msm6_sat rSatInfo[RTCM_MSMX_MAX_SAT];

+} data_center_rtk_msm6_observation;

+

+typedef struct {

+    uint8 u1SatNum;

+    uint64 u8SatMask;  //GNSS Satellite Mask

+    uint32 u4SigMask;            //GNSS Signal Mask

+    uint64 u8CellMask; //GNSS Cell Mask

+    gnss_time_type time_type;

+    union {

+        gnss_system_time_struct epochTime;

+        tow_time_struct towTime;

+    } time;

+    data_center_rtcm_t_msm7_sat rSatInfo[RTCM_MSMX_MAX_SAT];

+} data_center_rtk_msm7_observation;

+

+typedef struct {
+    uint8 u1SatID;         //GPS Satellite ID

+    uint16 u1IODE;          //GPS IODE

+    int32 i4DeltaRadial;             //Delta Radial

+    int32 i4DeltaAlong_Track;        //Delta Along_Track

+    int32 i4DeltaCross_Track;        //Delta Cross_Track

+    char dotDeltaRadialValid;

+    int32 i4DotDeltaRadial;          //Dot Delta Radial

+    char dotDeltaAlongTrackValid;

+    int32 i4DotDeltaAlong_Track;     //Dot Delta Along_Track

+    char dotDeltaCrossTrackValid;

+    int32 i4DotDeltaCross_Track;     //Dot Delta Cross_Track

+    uint8 u1Flag;

+} RTCM_T_ORBIT_SAT;

+

+typedef struct {

+    gnss_time_type time_type;

+    union {

+        gnss_system_time_struct epochTime;

+        tow_time_struct towTime;

+    } time;

+    uint8 u1UpdateInte;     //Update Interval

+    char u1satRefDatumValid;

+    gnss_ssr_orbit_corrections_sat_ref_datum_enum satRefDatum;

+    uint8 u1MulMsgInd;     //Multiple Message Indicator

+    uint8 u1SatRefDat;     //Satellite Reference Datum

+    uint8 u1IOD;           //IOD SSR

+

+    char u1ProviderIDValid;

+    uint16 u2ProviderID;   //Provider ID

+    char u1SolutionIDValid;

+    uint8 u1SolutionID;    //Solution ID

+    uint8 u1SatNum;       //No. of Satellites

+    RTCM_T_ORBIT_SAT rSatInfo[RTCM_MSMX_MAX_SAT];

+} data_center_ssr_orbit_correction;

+

+typedef struct {
+    uint8 u1SatID;         //GPS Satellite ID

+    int32 i4DeltaClk_C0;            //Delta Clock C0

+    char deltaClockC1Valid;

+    int32 i4DeltaClk_C1;            //Delta Clock C1

+    char deltaClockC2Valid;

+    int32 i4DeltaClk_C2;            //Delta Clock C2

+    char u1HighRateClkCorValid;

+    int i4HighRateClkCor;         //High Rate Clock Correction

+    uint8 u1Flag;

+} data_center_rtcm_t_clock_correction_sat;

+

+typedef struct {
+    gnss_time_type time_type;

+    union {

+        gnss_system_time_struct epochTime;

+        tow_time_struct towTime;

+    } time;

+    uint8 u1UpdateInte;     //Update Interval

+    uint8 u1MulMsgInd;     //Multiple Message Indicator

+    uint8 u1IOD;           //IOD SSR

+

+    char u1ProviderIDValid;

+    uint16 u2ProviderID;   //Provider ID

+    char u1SolutionIDValid;

+    uint8 u1SolutionID;    //Solution ID

+    uint8 u1SatNum;       //No. of Satellites

+    data_center_rtcm_t_clock_correction_sat rSatInfo[RTCM_MSMX_MAX_SAT];

+} data_center_clock_correction;

+

+typedef struct {
+    uint8 u1Signal_TrackModeInd;    //GPS Signal and Tracking Mode Indicator

+    int16 i2CodeBias;   //Code Bias

+    uint8 u1Flag;

+} data_center_rtcm_t_code_bias_sat_code;

+
+typedef struct {
+    uint8 u1SatID;         //GPS Satellite ID

+    uint8 u1CodeBiasNUM;   //No. of Code Biases Processed

+    data_center_rtcm_t_code_bias_sat_code rCodeBiasMsg[RTCM_MAX_SAT_CODE];

+    uint8 u1Flag;

+} data_center_rtcm_t_code_bias_sat;

+
+//Type 1059 Message, Each Satellite - SSR GPS Clock Code Bias Message
+typedef struct {
+    gnss_time_type time_type;

+    union {

+        gnss_system_time_struct epochTime;

+        tow_time_struct towTime;

+    } time;

+    uint8 u1UpdateInte;     //Update Interval

+    uint8 u1MulMsgInd;     //Multiple Message Indicator

+    uint8 u1IOD;           //IOD SSR

+    char u1ProviderIDValid;

+    uint16 u2ProviderID;   //Provider ID

+    char u1SolutionIDValid;

+    uint8 u1SolutionID;    //Solution ID

+    uint8 u1SatNum;       //No. of Satellites

+    data_center_rtcm_t_code_bias_sat rSatInfo[RTCM_MSMX_MAX_SAT];

+} data_center_code_bias_data;

+

+typedef struct {
+    uint8 u1SatID;         //GPS Satellite ID

+    uint8 u1URA;           //SSR URA

+    uint8 u1Flag;

+} data_center_rtcm_t_ssr_ura_sat;

+
+//Type 1061 Message, Each Satellite - SSR GPS URA Message
+typedef struct {
+    gnss_time_type time_type;

+    union {

+        gnss_system_time_struct epochTime;

+        tow_time_struct towTime;

+    } time;

+    uint8 u1UpdateInte;     //Update Interval

+    uint8 u1MulMsgInd;     //Multiple Message Indicator

+    uint8 u1IOD;           //IOD SSR

+    char u1ProviderIDValid;

+    uint16 u2ProviderID;   //Provider ID

+    char u1SolutionIDValid;

+    uint8 u1SolutionID;    //Solution ID

+    uint8 u1SatNum;       //No. of Satellites

+    data_center_rtcm_t_ssr_ura_sat rSatInfo[RTCM_MSMX_MAX_SAT];

+} data_center_ssr_ura_data;

+

+/* LPP_SSR_PhaseBiasSignalElement_r16 */

+typedef struct {

+    uint8 gnssSignalID; /* map to GNSS_SGN_ID_VALUE_*, 0..7 */

+    char gnssSignalIDExtValid; /* KAL_TRUE: gnssSignalID is set to 7 and shall be ignored */

+    uint8 gnssSignalIDExt; /* map to GNSS_SGN_ID_EXT_VALUE_*, 8..23 */

+    int16 phaseBias; /* -16384..16383 */

+    uint8 phaseDiscontinuityIndicator; /* 0..3 */

+    char phaseBiasIntegerIndicatorValid;

+    uint8 phaseBiasIntegerIndicator; /* 0..3 */

+} data_center_phase_bias_signal_element_struct;

+

+/* LPP_SSR_PhaseBiasSignalList_r16 */

+typedef struct {

+    uint8 numSsrPhaseBiasSigElm;

+    data_center_phase_bias_signal_element_struct ssrPhaseBiasSigElm[GNSS_SGN_ID_VALUE_MAX];

+} data_center_phase_bias_signal_list_struct;

+

+/* LPP_SSR_PhaseBiasSatElement_r16 */

+typedef struct {

+    uint8 svID; /* 0..63 */

+    data_center_phase_bias_signal_list_struct ssrPhaseBiasSigList;

+} data_center_phase_bias_sat_element_struct;

+

+/* LPP_SSR_PhaseBiasSatList_r16 */

+typedef struct {

+    uint8 numSsrPhaseBiasSatElm;

+    data_center_phase_bias_sat_element_struct ssrPhaseBiasSatElm[GNSS_MAX_SSR_PHASE_BIAS_SAT_ELEMENT];

+} data_center_phase_bias_sat_list_struct;

+

+/* LPP_GNSS_SSR_PhaseBias_r16 */

+typedef struct {

+    gnss_time_type time_type;

+    union {

+        gnss_system_time_struct epochTime;

+        tow_time_struct towTime;

+    } time;

+    uint8 ssrUpdateInterval; /* 0..15 */

+    uint8 iodSsr; /* 0..15 */

+    data_center_phase_bias_sat_list_struct ssrPhaseBiasSatList;

+} data_center_phase_bias_data;

+

+typedef struct {

+    uint8 svID; /* 0..63 */

+    uint8 stecQualityIndicator; /* 6 bits. The 3 MSB define the CLASS with a range of 0-7 and the 3 LSB define the VALUE with a range of 0-7 */

+    int16 stecC00; /* -8192..8191 */

+    char stecC01Valid;

+    int16 stecC01; /* -2048..2047 */

+    char stecC10Valid;

+    int16 stecC10; /* -2048..2047 */

+    char stecC11Valid;

+    int16 stecC11; /* -512..511 */

+} data_center_stec_sat_element_struct;

+

+/* LPP_STEC_SatList_r16 */

+typedef struct {

+    uint8 numStecSatElm;

+    data_center_stec_sat_element_struct stecSatElm[GNSS_MAX_SSR_STEC_SAT_ELEMENT];

+} data_center_stec_sat_list_struct;

+

+/* LPP_GNSS_SSR_STEC_Correction_r16 */

+typedef struct {

+    gnss_time_type time_type;

+    union {

+        gnss_system_time_struct epochTime;

+        tow_time_struct towTime;

+    } time;

+    uint8 ssrUpdateInterval; /* 0..15 */

+    uint8 iodSsr; /* 0..15 */

+    uint16 correctionPointSetID; /* 0..16383 */

+    data_center_stec_sat_list_struct stecSatList;

+} data_center_ssr_stec_correction;

+

+/* LPP_RelativeLocationElement_r16 */

+typedef struct {

+    int16 deltaLatitude; /* -512..511 */

+    int16 deltaLongitude; /* -1024..1023 */

+} data_center_relative_location_element_struct;

+

+/* LPP_GNSS_SSR_ListOfCorrectionPoints_r16_relativeLocationsList_r16 */

+typedef struct {

+    uint8 numRelativeLocElm;

+    data_center_relative_location_element_struct relativeLocElm[GNSS_MAX_SSR_RELATIVE_LOCATION_ELEMENT];

+} data_center_relative_locations_list_struct;

+

+/* LPP_GNSS_SSR_ListOfCorrectionPoints_r16 */

+typedef struct {

+    int16 referencePointLatitude; /* -16384..16383 */

+    int16 referencePointLongitude; /* -32768..32767 */

+    data_center_relative_locations_list_struct relativeLocList;

+} data_center_ssr_list_of_correction_points_struct;

+

+/* LPP_GNSS_SSR_ArrayOfCorrectionPoints_r16 */

+typedef struct {

+    int16 referencePointLatitude; /* -16384..16383 */

+    int16 referencePointLongitude; /* -32768..32767 */

+    uint8 numberOfStepsLatitude; /* 0..63 */

+    uint8 numberOfStepsLongitude; /* 0..63 */

+    uint16 stepOfLatitude; /* 1..511 */

+    uint16 stepOfLongitude; /* 1..1023 */

+    char bitmaskOfGridsValid;

+    uint8 bitmaskOfGrids[8]; /* Only the first numberOfStepsLatitude*numberOfStepsLongitude bits are used, the remainder are set to '0' */

+} data_center_ssr_array_of_correction_points_struct;

+

+/* LPP_GNSS_SSR_CorrectionPoints_r16_correctionPoints_r16 */

+typedef struct {

+    gnss_ssr_correction_points_enum selection;

+    union {

+      data_center_ssr_list_of_correction_points_struct listOfCorrectionPoints;

+      data_center_ssr_array_of_correction_points_struct arrayOfCorrectionPoints;

+    } choice;

+} data_center_correction_points_struct;

+

+

+/* LPP_TropospericDelayCorrection_r16 */

+typedef struct {

+    int16 tropoHydroStaticVerticalDelay; /* -256..255 */

+    int8 tropoWetVerticalDelay; /* -128..127 */

+} data_center_troposperic_delay_correction_struct;

+

+/* LPP_STEC_ResidualSatElement_r16 */

+typedef struct {

+    uint8 svID; /* 0..63 */

+    gnss_stec_residual_correction_enum selection;

+    union {

+        int8 b7; /* -64..63 */

+        int16 b16; /* -32768..32767 */

+    } choice;

+} data_center_stec_residual_sat_element_struct;

+

+/* LPP_STEC_ResidualSatList_r16 */

+typedef struct {

+    uint8 numResidualSatElm;

+    data_center_stec_residual_sat_element_struct stecResidualSatElm[GNSS_MAX_STEC_RESIDUAL_SAT_ELEMENT];

+} data_center_stec_residual_sat_list_struct;

+

+

+/* LPP_GridElement_r16 */

+typedef struct {

+    char tropospericDelayCorrectionValid;

+    data_center_troposperic_delay_correction_struct tropospericDelayCorrection; /* OPTIONAL */

+    data_center_stec_residual_sat_list_struct stecResidualSatList;

+} data_center_grid_element_struct;

+

+/* LPP_GridList_r16 */

+typedef struct {

+    uint8 numGridElm;

+    data_center_grid_element_struct gridElm[GNSS_MAX_SSR_GRID_ELEMENT];

+} data_center_grid_list_struct;

+

+typedef struct {
+    uint8 u1SatID;         //GLONASS Satellite ID(Satellite Slot Number)

+    uint8 u1L1CodeInd;     //GLONASS L1 Code Indicator

+    uint8 u1FreqChanNum;    //GLONASS Satellite Frequency Channel Number

+    uint32 u4L1Pseu;        //GLONASS L1 Pseudorange

+    int32 i4L1PhaPseuDif;           //GlONASS L1 PhaseRange - L1 Pseudorange

+    uint8 u1L1TimeInd;     //GLONASS L1 Lock time Indicator

+    char pseuModAmbgValid;

+    uint8 u1L1PseuModAmbg; //GLONASS Integer L1 Pseudorange Modulus Ambiguity

+    char L1CNRValid;

+    uint8 u1L1CNR;         //GLONASS L1 CNR

+    uint8 u1Flag;

+} rtcm_t_gps_glonass_l1_sat;

+
+//Type 1010 Message, Each Satellite - GLONASS Extended RTK, L1 Only
+typedef struct {
+    uint16 u2MsgNum;       //Message Number

+    uint16 u2RefStationID; //Reference Station ID

+    uint32 u4EpochTime;      //GPS/GLONASS Epoch Time (tk)

+    uint8 u1GNSSFlag;     //Synchronous GNSS Flag

+    uint8 u1SatNum;       //No. of GLONASS Satellite Signals Processed

+    uint8 u1DFSInd;       //GLONASS Divergence-free Smoothing Indicator

+    uint8 u1SmthInt;      //GLONASS Smoothing Interval

+    rtcm_t_gps_glonass_l1_sat rSatInfo[RTCM_1010_MAX_SAT];

+} rtcm_t_gps_glonass_l1_obser;

+

+typedef struct {
+    uint8 u1SatID;         //GLONASS Satellite ID(Satellite Slot Number)

+    uint8 u1L1CodeInd;     //GLONASS L1 Code Indicator

+    uint8 u1FreqChanNum;    //GLONASS Satellite Frequency Channel Number

+    uint32 u4L1Pseu;         //GLONASS L1 Pseudorange

+    int32 i4L1PhaPseuDif;           //GlONASS L1 PhaseRange - L1 Pseudorange

+    uint8 u1L1TimeInd;     //GLONASS L1 Lock time Indicator

+    uint8 u1L1PseuModAmbg; //GLONASS Integer L1 Pseudorange Modulus Ambiguity

+    uint8 u1L1CNR;         //GLONASS L1 CNR

+    uint8 u1L2CodeInd;     //GLONASS L2 Code Indicator

+    int16 i2L2L1PseuDif;      //GLONASS L2-L1 Pseudorange Difference

+    int32 i4L2PhaL1PseuDif;          //GLONASS L2 PhaseRange - L1 Pseudorange

+    uint8 u1L2TimeInd;     //GLONASS L2 Lock time Indicator

+    uint8 u1L2CNR;         //GLONASS L2 CNR

+    uint8 u1Flag;

+} rtcm_t_1012_sat;

+

+typedef struct {
+    uint8 u1SatID;         //GLONASS Satellite ID(Satellite Slot Number)

+    uint8 u1L1CodeInd;     //GLONASS L1 Code Indicator

+    uint8 u1FreqChanNum;    //GLONASS Satellite Frequency Channel Number

+    uint32 u4L1Pseu;         //GLONASS L1 Pseudorange

+    int32 i4L1PhaPseuDif;           //GlONASS L1 PhaseRange - L1 Pseudorange

+    uint8 u1L1TimeInd;     //GLONASS L1 Lock time Indicator

+    char pseuModAmbgValid;

+    uint8 u1L1PseuModAmbg; //GLONASS Integer L1 Pseudorange Modulus Ambiguity

+    char L1CNRValid;

+    uint8 u1L1CNR;         //GLONASS L1 CNR

+    uint8 u1L2CodeInd;     //GLONASS L2 Code Indicator

+    int16 i2L2L1PseuDif;   //GLONASS L2-L1 Pseudorange Difference

+    int32 i4L2PhaL1PseuDif;  //GLONASS L2 PhaseRange - L1 Pseudorange

+    uint8 u1L2TimeInd;     //GLONASS L2 Lock time Indicator

+    char L2CNRValid;

+    uint8 u1L2CNR;         //GLONASS L2 CNR

+    uint8 u1Flag;

+} rtcm_t_gps_glonass_l1_l2_sat;

+
+//Type 1012 Message, Each Satellite - GLONASS Extended RTK, L1 & L2
+typedef struct {
+    uint16 u2MsgNum;       //Message Number

+    uint16 u2RefStationID; //Reference Station ID

+    uint32 u4EpochTime;      //GLONASS Epoch Time (tk)

+    uint8 u1GNSSFlag;     //Synchronous GNSS Flag

+    uint8 u1SatNum;       //No. of GLONASS Satellite Signals Processed

+    uint8 u1DFSInd;       //GLONASS Divergence-free Smoothing Indicator

+    uint8 u1SmthInt;      //GLONASS Smoothing Interval

+    rtcm_t_gps_glonass_l1_l2_sat rSatInfo[RTCM_1012_MAX_SAT];

+} rtcm_t_gps_glonass_l1_l2_obser;

+

+

+typedef struct {

+    uint16 referenceStationID; /* 0..65535 */

+    char providerNameValid;

+    uint32 providerNameLen;

+    char providerName[32]; /* SIZE (1..32) */

+} data_center_gnss_ref_station_id_struct;

+

+

+typedef struct {

+    uint8 numRefStationElm;

+    data_center_gnss_ref_station_id_struct refStationElm[GNSS_MAX_EQUAL_INT_AMBIGUITY_LEVEL_REF_STATION_ID_NUM];

+} data_center_gnss_ref_station_list_struct;

+

+

+typedef struct {

+    gnss_equal_int_ambiguity_level_enum selection;

+    union

+    {

+        data_center_gnss_ref_station_list_struct refStationList;

+    } choice;

+} data_center_equal_int_ambiguity_level_struct;

+

+

+/**

+ * @msg id: 0

+ * @name: data_center_ref_station_info

+ * @lpp: GNSS-RTK-ReferenceStationInfo-r15

+            referenceStationID-r15

+            referenceStationIndicator-r15

+            antenna-reference-point-ECEF-X-r15

+            antenna-reference-point-ECEF-Y-r15

+            antenna-reference-point-ECEF-Z-r15

+            antennaHeight-r15

+            //antennaDescription-r15

+            //antenna-reference-point-unc-r15

+            //physical-reference-station-info-r15

+            equalIntegerAmbiguityLevel-r16

+ * @ntrip: 1005/1006

+ * also for mnl use

+ */

+/*MNL Use msg id: 0*/

+typedef struct {

+    referenceStationID u2RefStationID; //Reference Station ID

+    char ITRFValid;

+    /*tbc*/uint8 u1ITRF;         //Reserved for ITRF Realization Year

+    char GPSIndValid;

+    /*tbc*/uint8 u1GPSInd;       //GPS Indicator

+    char GLIndValid;

+    /*tbc*/uint8 u1GLInd;        //GLONASS Indicator

+    char GAIndValid;

+    /*tbc*/uint8 u1GAInd;        //Reserved for Galileo Indicator

+    uint8 u1RefStationInd;//Reference-Station Indicator

+    int64 i8ECEF_X;       //Antenna Reference Point ECEF-X

+    char OscIndValid;

+    /*tbc*/uint8 u1OscInd;       //Single Receiver Oscillator Indicator

+    uint8 u1Reserved1;    //Reserved

+    int64 i8ECEF_Y;       //Antenna Reference Point ECEF-Y

+    char QuarterCycleIndValid;

+    /*tbc*//*3.3update*/uint8 u1QuarterCycleInd;    //Quarter Cycle Indicator

+    int64 i8ECEF_Z;       //Antenna Reference Point ECEF-Z

+    char AntHgtValid;

+    uint16 u2AntHgt;       //Antenna Height

+

+    /*below is expanded from LPP*/

+    char EqualIntAmbiguityLevelValid;

+    data_center_equal_int_ambiguity_level_struct equalIntAmbiguityLevel;

+} data_center_ref_station_info;

+

+

+/**

+ * @msg id: 1

+ * @name: data_center_receiver_antenna_dec

+ * @lpp: antennaDescription-r15

+     antennaDescriptor-r15

+     antennaSetUpID-r15

+ * @ntrip: 1007/1008/1033

+ * also for mnl use

+ */

+/*MNL Use msg id: 1*/

+typedef struct {

+    referenceStationID u2RefStationID; //Reference Station ID

+    char antennaDescriptionValid;

+    uint8 u1AntDesCounter_N;        //Antenna Descriptor Counter N

+    char chAntDes[RTCM_1033_MAX_NUM_N];     //Antenna Descriptor

+    char antennaSetUpIDValid;

+    uint8 u1AntSetupID;             //Antenna Setup ID

+    char AntSeriNumValid;

+    uint8 u1AntSeriNumCounter_M;    //Antenna Serial Number Counter M

+    /*tbc*/char chAntSeriNum[RTCM_1033_MAX_NUM_M]; //Antenna Serial Number

+    char RecTypeDesValid;

+    uint8 u1RecTypeDesCounter_I;    //Receiver Type Descriptor Counter I

+    /*tbc*/char chRecTypeDes[RTCM_1033_MAX_NUM_I]; //Receiver Type Descriptor

+    char RecFwVerValid;

+    uint8 u1RecFwVerCounter_J;      //Receiver Firmware Version Counter J

+    /*tbc*/char chRecFwVer[RTCM_1033_MAX_NUM_J];   //Receiver Firmware Version

+    char RecSeriNumValid;

+    uint8 u1RecSeriNumCounter_K;    //Receiver Serial Number Counter K

+    /*tbc*/char chRecSeriNum[RTCM_1033_MAX_NUM_K]; //Receiver Serial Number

+

+    /*below is expanded from LPP*/

+    char antennaRefPointUncValid;

+    antennaReferencePointUnc antennaRefPointUnc;

+} data_center_receiver_antenna_dec;

+

+

+/**

+ * @msg id: 2

+ * @name: data_center_phy_ref_station_info

+ * @lpp: physical-reference-station-info-r15

+     antennaDescriptor-r15

+     antennaSetUpID-r15

+ * @ntrip: 1007/1008/1033

+ * also for mnl use

+ */

+

+/*MNL Use msg id: 2*/

+typedef struct {

+    char nonPhyRefStationIDValid;

+    /*tbc*/referenceStationID u2Non_PhyRefStationID;  //Non-PhysicalReference Station ID

+    referenceStationID u2PhyRefStationID;     //Physical Reference Station ID

+    char ITRFValid;

+    uint8 u1ITRF;              //ITRF Epoch Year

+    int64 i8ARP_ECEF_X;       //Physical referencestation ARP ECEF-X

+    int64 i8ARP_ECEF_Y;       //Physical referencestation ARP ECEF-Y

+    int64 i8ARP_ECEF_Z;       //Physical referencestation ARP ECEF-Z

+

+    /*below is expanded from LPP*/

+    char i1PhyArpUncValid;

+    antennaReferencePointUnc phyArpUnc; /* OPTIONAL */

+} data_center_phy_ref_station_info;

+

+/**

+ * @msg id: 3~9

+ * @name: data_center_rtk_msmn_observations

+ * @lpp:

+     gnss-RTK-CommonObservationInfo-r15

+        referenceStationID-r15

+            referenceStationID-r15

+            providerName-r15

+        clockSteeringIndicator-r15

+        externalClockIndicator-r15

+        smoothingIndicator-r15

+        smoothingInterval-r15

+     gnss-RTK-Observations-r15

+        epochTime-r15

+        gnss-ObservationList-r15 SIZE(1..64)

+            svID-r15

+            integer-ms-r15 INTEGER (0..254)

+            rough-range-r15  INTEGER (0..1023)

+            rough-phase-range-rate-r15 INTEGER (-8192..8191)

+            gnss-rtk-SatelliteSignalDataList-r15[List 24]

+                gnss-SignalID-r15

+                fine-PseudoRange-r15

+                fine-PhaseRange-r15

+                lockTimeIndicator-r15 INTEGER (0..1023)

+                halfCycleAmbiguityIndicator-r15

+                carrier-to-noise-ratio-r15 INTEGER (0..1023)

+                fine-PhaseRangeRate-r15 INTEGER (-16384..16383)

+ * @ntrip: 1071-1128,1004,1012

+ */

+

+/**

+ * @msg id: 3

+ * @name: data_center_rtk_msm1_observations

+ * @ntrip: DF398 DF405

+ */

+

+typedef struct {

+    uint32 u4Bitmap;//indecate we have which GNSS data.

+    rtcm_msg_common_header rHeadInfo;

+    data_center_rtk_msm1_observation obser[GNSS_LPP_ID_MAX];

+} data_center_rtk_msm1_observations;

+

+/*MNL Use msg id: 3*/

+typedef struct {

+    MTK_GNSS_ID_ENUM gnss_id;

+    rtcm_msg_common_header rHeadInfo;

+    gnss_time_type time_type;

+    union {

+        gnss_system_time_struct epochTime;

+        tow_time_struct towTime;

+    } time;

+    uint8 u1SatNum;

+    reduced_data_center_rtcm_t_msm1_sat rSatInfo[0];

+} data_center_rtk_msm1_observations_sat_item;

+

+/**

+ * @msg id: 4

+ * @name: data_center_rtk_msm2_observations

+ * @ntrip: DF398 DF406 DF407 DF420

+ */

+typedef struct {

+    uint32 u4Bitmap;//indecate we have which GNSS data.

+    rtcm_msg_common_header rHeadInfo;

+    data_center_rtk_msm2_observation obser[GNSS_LPP_ID_MAX];

+} data_center_rtk_msm2_observations;

+

+/*MNL Use msg id: 4*/

+typedef struct {

+    MTK_GNSS_ID_ENUM gnss_id;

+    rtcm_msg_common_header rHeadInfo;

+    gnss_time_type time_type;

+    union {

+        gnss_system_time_struct epochTime;

+        tow_time_struct towTime;

+    } time;

+    uint8 u1SatNum;

+    reduced_data_center_rtcm_t_msm2_sat rSatInfo[0];

+} data_center_rtk_msm2_observations_sat_item;

+

+

+/**

+ * @msg id: 5

+ * @name: data_center_rtk_msm3_observations

+ * @ntrip: DF398 DF405 DF406 DF407 DF420

+ */

+typedef struct {

+    uint32 u4Bitmap;//indecate we have which GNSS data.

+    rtcm_msg_common_header rHeadInfo;

+    data_center_rtk_msm3_observation obser[GNSS_LPP_ID_MAX];

+} data_center_rtk_msm3_observations;

+

+/*MNL Use msg id: 5*/

+typedef struct {

+    MTK_GNSS_ID_ENUM gnss_id;

+    rtcm_msg_common_header rHeadInfo;

+    gnss_time_type time_type;

+    union {

+        gnss_system_time_struct epochTime;

+        tow_time_struct towTime;

+    } time;

+    uint8 u1SatNum;

+    reduced_data_center_rtcm_t_msm3_sat rSatInfo[0];

+} data_center_rtk_msm3_observations_sat_item;

+

+/**

+ * @msg id: 6

+ * @name: data_center_rtk_msm4_observations

+ * @ntrip: DF397 DF398 DF405 DF406 DF407 DF420 DF408

+ */

+typedef struct {

+    uint32 u4Bitmap;//indecate we have which GNSS data.

+    rtcm_msg_common_header rHeadInfo;

+    data_center_rtk_msm4_observation obser[GNSS_LPP_ID_MAX];

+} data_center_rtk_msm4_observations;

+

+/*MNL Use msg id: 6*/

+typedef struct {

+    MTK_GNSS_ID_ENUM gnss_id;

+    rtcm_msg_common_header rHeadInfo;

+    gnss_time_type time_type;

+    union {

+        gnss_system_time_struct epochTime;

+        tow_time_struct towTime;

+    } time;

+    uint8 u1SatNum;

+    reduced_data_center_rtcm_t_msm4_sat rSatInfo[0];

+} data_center_rtk_msm4_observations_sat_item;

+

+/**

+ * @msg id: 7

+ * @name: data_center_rtk_msm5_observations

+ * @ntrip: DF397 DF398 DF399 DF405 DF406 DF407 DF420 DF408 DF404

+ */

+

+typedef struct {

+    uint32 u4Bitmap;//indecate we have which GNSS data.

+    rtcm_msg_common_header rHeadInfo;

+    data_center_rtk_msm5_observation obser[GNSS_LPP_ID_MAX];

+} data_center_rtk_msm5_observations;

+

+/*MNL Use msg id: 7*/

+typedef struct {

+    MTK_GNSS_ID_ENUM gnss_id;

+    rtcm_msg_common_header rHeadInfo;

+    gnss_time_type time_type;

+    union {

+        gnss_system_time_struct epochTime;

+        tow_time_struct towTime;

+    } time;

+    uint8 u1SatNum;

+    reduced_data_center_rtcm_t_msm5_sat rSatInfo[0];

+} data_center_rtk_msm5_observations_sat_item;

+

+

+/**

+ * @msg id: 8

+ * @name: data_center_rtk_msm6_observations

+ * @ntrip: DF397 DF398 DF405 DF406 DF407 DF420 DF408 DF404

+ */

+

+typedef struct {

+    uint32 u4Bitmap;//indecate we have which GNSS data.

+    rtcm_msg_common_header rHeadInfo;

+    data_center_rtk_msm6_observation obser[GNSS_LPP_ID_MAX];

+} data_center_rtk_msm6_observations;

+

+/*MNL Use msg id: 8*/

+typedef struct {

+    MTK_GNSS_ID_ENUM gnss_id;

+    rtcm_msg_common_header rHeadInfo;

+    gnss_time_type time_type;

+    union {

+        gnss_system_time_struct epochTime;

+        tow_time_struct towTime;

+    } time;

+    uint8 u1SatNum;

+    reduced_data_center_rtcm_t_msm6_sat rSatInfo[0];

+} data_center_rtk_msm6_observations_sat_item;

+

+/**

+ * @msg id: 9

+ * @name: data_center_rtk_msm7_observations

+ * @ntrip: DF397 DF398 DF399 DF405 DF406 DF407 DF420 DF408 DF404

+ */

+

+typedef struct {

+    uint32 u4Bitmap;//indecate we have which GNSS data.

+    rtcm_msg_common_header rHeadInfo;

+    data_center_rtk_msm7_observation obser[GNSS_LPP_ID_MAX];

+} data_center_rtk_msm7_observations;

+

+/*MNL Use msg id: 9*/

+typedef struct {

+    MTK_GNSS_ID_ENUM gnss_id;

+    rtcm_msg_common_header rHeadInfo;

+    gnss_time_type time_type;

+    union {

+        gnss_system_time_struct epochTime;

+        tow_time_struct towTime;

+    } time;

+    uint8 u1SatNum;

+    reduced_data_center_rtcm_t_msm7_sat rSatInfo[0];

+} data_center_rtk_msm7_observations_sat_item;

+

+/**

+ * @msg id: 10

+ * @name: data_center_ssr_orbit_corrections

+ * @lpp: gnss-SSR-OrbitCorrections-r15

+ * @ntrip: 1057/1060/1063

+ */

+typedef struct {

+    uint32 u4Bitmap;//indecate we have which GNSS data.

+    data_center_ssr_orbit_correction orbit_cor[GNSS_LPP_ID_MAX];

+} data_center_ssr_orbit_corrections;

+

+/*MNL Use msg id: 10*/

+typedef struct {

+    MTK_GNSS_ID_ENUM gnss_id;

+    gnss_time_type time_type;

+    union {

+        gnss_system_time_struct epochTime;

+        tow_time_struct towTime;

+    } time;

+    uint8 u1UpdateInte;     //Update Interval

+    char u1satRefDatumValid;

+    gnss_ssr_orbit_corrections_sat_ref_datum_enum satRefDatum;

+    uint8 u1MulMsgInd;     //Multiple Message Indicator

+    uint8 u1SatRefDat;     //Satellite Reference Datum

+    uint8 u1IOD;           //IOD SSR

+

+    char u1ProviderIDValid;

+    uint16 u2ProviderID;   //Provider ID

+    char u1SolutionIDValid;

+    uint8 u1SolutionID;    //Solution ID

+    uint8 u1SatNum;       //No. of Satellites

+    RTCM_T_ORBIT_SAT rSatInfo[0];

+} data_center_ssr_orbit_corrections_sat_item;

+

+

+/**

+ * @msg id: 11

+ * @name: data_center_clock_corrections

+ * @lpp: gnss-SSR-ClockCorrections-r15

+ * @ntrip: 1058/1060/1062/1064/1066/1068

+ */

+

+typedef struct {

+    uint32 u4Bitmap;//indecate we have which GNSS data.

+    data_center_clock_correction clock_cor[GNSS_LPP_ID_MAX];

+} data_center_clock_corrections;

+

+/*MNL Use msg id: 11*/

+typedef struct {

+    MTK_GNSS_ID_ENUM gnss_id;

+    gnss_time_type time_type;

+    union {

+        gnss_system_time_struct epochTime;

+        tow_time_struct towTime;

+    } time;

+    uint8 u1UpdateInte;     //Update Interval

+    uint8 u1MulMsgInd;     //Multiple Message Indicator

+    uint8 u1IOD;           //IOD SSR

+

+    char u1ProviderIDValid;

+    uint16 u2ProviderID;   //Provider ID

+    char u1SolutionIDValid;

+    uint8 u1SolutionID;    //Solution ID

+    uint8 u1SatNum;       //No. of Satellites

+    data_center_rtcm_t_clock_correction_sat rSatInfo[0];

+} data_center_clock_corrections_sat_item;

+

+

+

+/**

+ * @msg id: 12

+ * @name: data_center_code_bias_datas

+ * @lpp: gnss-SSR-CodeBias-r15

+ * @ntrip: 1059/1065

+ */

+

+typedef struct {

+    uint32 u4Bitmap;//indecate we have which GNSS data.

+    data_center_code_bias_data code_bias[GNSS_LPP_ID_MAX];

+} data_center_code_bias_datas;

+

+/*MNL Use msg id: 12*/

+typedef struct {

+    MTK_GNSS_ID_ENUM gnss_id;

+    gnss_time_type time_type;

+    union {

+        gnss_system_time_struct epochTime;

+        tow_time_struct towTime;

+    } time;

+    uint8 u1UpdateInte;     //Update Interval

+    uint8 u1MulMsgInd;     //Multiple Message Indicator

+    uint8 u1IOD;           //IOD SSR

+    char u1ProviderIDValid;

+    uint16 u2ProviderID;   //Provider ID

+    char u1SolutionIDValid;

+    uint8 u1SolutionID;    //Solution ID

+    uint8 u1SatNum;       //No. of Satellites

+    data_center_rtcm_t_code_bias_sat rSatInfo[0];

+} data_center_code_bias_datas_sat_item;

+

+/**

+ * @msg id: 13

+ * @name: data_center_ssr_ura_datas

+ * @lpp: gnss-SSR-URA-r16

+ * @ntrip: 1061

+ */

+

+typedef struct {

+    uint32 u4Bitmap;//indecate we have which GNSS data.

+    data_center_ssr_ura_data ura[GNSS_LPP_ID_MAX];

+} data_center_ssr_ura_datas;

+

+/*MNL Use msg id: 13*/

+typedef struct {

+    MTK_GNSS_ID_ENUM gnss_id;

+    gnss_time_type time_type;

+    union {

+        gnss_system_time_struct epochTime;

+        tow_time_struct towTime;

+    } time;

+    uint8 u1UpdateInte;     //Update Interval

+    uint8 u1MulMsgInd;     //Multiple Message Indicator

+    uint8 u1IOD;           //IOD SSR

+    char u1ProviderIDValid;

+    uint16 u2ProviderID;   //Provider ID

+    char u1SolutionIDValid;

+    uint8 u1SolutionID;    //Solution ID

+    uint8 u1SatNum;       //No. of Satellites

+    data_center_rtcm_t_ssr_ura_sat rSatInfo[0];

+} data_center_ssr_ura_datas_sat_item;

+

+/**

+ * @msg id: 14

+ * @name: data_center_phase_bias_datas

+ * @lpp: gnss-SSR-PhaseBias-r16

+ * @ntrip: N/A

+ */

+

+typedef struct {

+    uint32 u4Bitmap;//indecate we have which GNSS data.

+    data_center_phase_bias_data phase_bias[GNSS_LPP_ID_MAX];

+} data_center_phase_bias_datas;

+

+/*MNL Use msg id: 14*/

+typedef struct {

+    MTK_GNSS_ID_ENUM gnss_id;

+    gnss_time_type time_type;

+    union {

+        gnss_system_time_struct epochTime;

+        tow_time_struct towTime;

+    } time;

+    uint8 ssrUpdateInterval; /* 0..15 */

+    uint8 iodSsr; /* 0..15 */

+    uint8 numSsrPhaseBiasSatElm;

+    data_center_phase_bias_sat_element_struct ssrPhaseBiasSatElm[0];

+} data_center_phase_bias_data_sat_item;

+

+/**

+ * @msg id: 15

+ * @name: data_center_ssr_stec_corrections

+ * @lpp: GNSS-SSR-STEC-Correction-r16

+ * @ntrip: N/A

+ */

+

+typedef struct {

+    uint32 u4Bitmap;//indecate we have which GNSS data.

+    data_center_ssr_stec_correction stec_cor[GNSS_LPP_ID_MAX];

+} data_center_ssr_stec_corrections;

+

+/*MNL Use msg id: 15*/

+typedef struct {

+    MTK_GNSS_ID_ENUM gnss_id;

+    gnss_time_type time_type;

+    union {

+        gnss_system_time_struct epochTime;

+        tow_time_struct towTime;

+    } time;

+    uint8 ssrUpdateInterval; /* 0..15 */

+    uint8 iodSsr; /* 0..15 */

+    uint16 correctionPointSetID; /* 0..16383 */

+    uint8 numStecSatElm;

+    data_center_stec_sat_element_struct stecSatElm[0];

+} data_center_ssr_stec_correction_sat_item;

+

+/**

+ * @msg id: 16

+ * @name: data_center_ssr_correctionPoints

+ * @lpp: GNSS-SSR-CorrectionPoints-r16

+ * @ntrip: N/A

+ * also for mnl use

+ */

+

+/*MNL Use msg id: 16*/

+typedef struct {

+    uint16 correctionPointSetID; /* 0..16383 */

+    data_center_correction_points_struct correctionPoints; /* MANDATORY */

+} data_center_ssr_correctionPoints;

+

+

+/**

+ * @msg id: 17

+ * @name: data_center_ssr_gridded_correction

+ * @lpp: gnss-SSR-GriddedCorrection-r16

+ * @ntrip: N/A

+ */

+

+/* LPP_GNSS_SSR_GriddedCorrection_r16 */

+typedef struct {

+    gnss_time_type time_type;

+    union {

+        gnss_system_time_struct epochTime;

+        tow_time_struct towTime;

+    } time;

+    uint8 ssrUpdateInterval; /* 0..15 */

+    uint8 iodSsr; /* 0..15 */

+    char troposphericDelayQualityIndicatorValid;

+    uint8 troposphericDelayQualityIndicator; /* 6 bits. The 3 MSB define the CLASS with a range of 0-7 and the 3 LSB define the VALUE with a range of 0-7 */

+    uint16 correctionPointSetID; /* 0..16383 */

+    data_center_grid_list_struct gridList;

+} data_center_ssr_gridded_correction;

+

+/*MNL Use msg id: 17*/

+typedef struct {

+    gnss_time_type time_type;

+    union {

+        gnss_system_time_struct epochTime;

+        tow_time_struct towTime;

+    } time;

+    uint8 ssrUpdateInterval; /* 0..15 */

+    uint8 iodSsr; /* 0..15 */

+    char troposphericDelayQualityIndicatorValid;

+    uint8 troposphericDelayQualityIndicator; /* 6 bits. The 3 MSB define the CLASS with a range of 0-7 and the 3 LSB define the VALUE with a range of 0-7 */

+    uint16 correctionPointSetID; /* 0..16383 */

+    uint8 numGridElm;

+    data_center_grid_element_struct gridElm[0];

+} data_center_ssr_gridded_correction_sat_item;

+

+/**

+ * @msg id: 18

+ * @name: data_center_GG_L1_observations

+ * @lpp: N/A

+ * @ntrip: 1001/1002/1009/1010

+ */

+

+typedef struct {

+    char gpsObserValid;

+    rtcm_t_gps_glonass_l1_obser gpsObser;

+    char glonassObserValid;

+    rtcm_t_gps_glonass_l1_obser glonassObser;

+} data_center_gg_L1_observations;

+

+/*MNL Use msg id: 18*/

+typedef struct {

+    MTK_GNSS_ID_ENUM gnss_id;

+    rtcm_t_gps_glonass_l1_obser Obser;

+} data_center_gg_l1_observations_cons_item;

+

+/**

+ * @msg id: 19

+ * @name: data_center_gg_l1_l2_observations

+ * @lpp: N/A

+ * @ntrip: 1003/1004/1011/1012

+ */

+

+typedef struct {

+    char gpsObserValid;

+    rtcm_t_gps_glonass_l1_l2_obser gpsObser;

+    char glonassObserValid;

+    rtcm_t_gps_glonass_l1_l2_obser glonassObser;

+} data_center_gg_l1_l2_observations;

+

+/*MNL Use msg id: 19*/

+typedef struct {

+    MTK_GNSS_ID_ENUM gnss_id;

+    rtcm_t_gps_glonass_l1_l2_obser Obser;

+} data_center_gg_l1_l2_observations_cons_item;

+

+

+

+/**

+ * @msg id: 20

+ * @name: data_center_bds_grid_model_params

+ * @lpp: BDS-GridModelParameter

+ * @ntrip: N/A

+ */

+

+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 */

+} data_center_bds_grid_ion_element;

+

+typedef struct

+{

+    kal_uint16                        numGridIonElement;

+    data_center_bds_grid_ion_element  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 */

+} data_center_bds_grid_ion_list;

+

+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 */

+    data_center_bds_grid_ion_list  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 */

+} data_center_bds_grid_model_params;

+

+static inline void copy_long_long_type(void *dist, const void *src) {

+    memcpy(dist, src, sizeof(int64));

+}

+

+/**

+ * Description: this is a safe api to get global helper handler.

+ * @param void

+ * @return pointer to global helper handler

+ */

+struct agps_data_base_helper* get_agps_data_base_helper();

+

+

+/**

+ * Description: init the data base and function, must be called before require service.

+ * @param void

+ * @return void

+ */

+void init_data_base_helper(void);

+

+

+/**

+ * Description: get the system boot time

+ * @param void

+ * @return the system boot time(ms)

+ */

+uint32 get_boot_time_ms();

+

+

+/**

+ * Description: Transform the error code returned by the data center function into a more understandable way

+ * @param int error type

+ * @return string that description the corresponding error code

+ */

+const char* data_center_strerror(int32 error);

+

+

+/**

+ * Description: Do the bitwise AND operation of two bitmaps

+ * @param dst the result bitmap

+ * @param bitmap1 the source bitmap1

+ * @param bitmap2 the source bitmap2

+ * @param size the max number of bits supported by this bitmap

+ * @return void

+ */

+void bitmap_and(unsigned int *dst, const unsigned int *bitmap1, const unsigned int *bitmap2, unsigned int size);

+

+

+/**

+ * Description: Initialization work done in advance in order to iterate a bitmap

+ * @param inter the Iterator

+ * @param bitmap the bitmap need to iterate

+ * @param offset where to start iteration

+ * @param size the max number of bits supported by this bitmap

+ * @return void

+ */

+void bitmap_iter_init(struct bitmap_iter *inter, unsigned int *bitmap, unsigned int offset, unsigned int size);

+

+

+/**

+ * Description: Get the next highest bit in bitmap. for example, if bitmap is 0b01001. when

+ * first called this function it will return 0, the second call will return 3, the third call will return -1;

+ * @param inter the Iterator which has been initialized by function bitmap_iter_init

+ * @return The next highest bit

+ */

+unsigned int bitmap_iter_next(struct bitmap_iter *inter);

+

+

+#endif

+

diff --git a/src/connectivity/gps/2.0/mtk_mnld/mnl/libs/inc/mtk_gps_agps.h b/src/connectivity/gps/2.0/mtk_mnld/mnl/libs/inc/mtk_gps_agps.h
index 59fda96..e83f636 100644
--- a/src/connectivity/gps/2.0/mtk_mnld/mnl/libs/inc/mtk_gps_agps.h
+++ b/src/connectivity/gps/2.0/mtk_mnld/mnl/libs/inc/mtk_gps_agps.h
@@ -49,6 +49,580 @@
 #define SUPPORT_AGA
 #define AGPS_RRLP_MAX_PRM 14
 
+/* MACROS *******************************************************************/
+
+/**
+ * among LPP/RRC/RRLP, the max number of elements for GNSS data is different in some data fields.
+ * we take the largest value as element definition for common interface
+ */
+#define GNSS_MAX_REF_TIME_SAT_ELEMENT                    16  /* 64 for LPP, 16 for RRC, 12 for RRLP. Use 16 to reduce structure size */
+#define GNSS_MAX_REF_CELL_FTA_ELEMENT                    16  /* 16 for LPP, 1 for RRC/RRLP */
+
+#define GNSS_MAX_GNSS_GENERIC_ASSIST_DATA_ELEMENT        16  /* 16 for LPP, 8 for RRC/RRLP in provide assistance data;
+                                                                16 for LPP/RRLP, 8 for RRC in capability */
+
+/* GNSS Time Model */
+#define GNSS_MAX_TIME_MODEL_ELEMENT                       5  /* 15 for LPP, 7 for RRC/RRLP, Use 5 since gnss-TO-ID only 5 (GPS, Galileo, QZSS, GLONASS, BDS) */
+
+/* GNSS DGNSS */
+#define GNSS_MAX_DGNSS_SGN_TYPE_ELEMENT                   3  /* 3 for LPP/RRLP, 8 for RRC */
+#define GNSS_MAX_DGNSS_CORRECTION_INFO_ELEMENT           16  /* 64 for LPP/RRC, 16 for RRLP. Use 16 to reduce structure size */
+
+/* GNSS Navigation Model */
+#define GNSS_MAX_NAV_SAT_ELEMENT                         16  /* 64 for LPP/RRC, 32 for RRLP. Use 16 to reduce structure size */
+#define GNSS_MAX_NAV_SAT_ELEMENT_BIT_POS                 64  /* 64 for LPP/RRC, 32 for RRLP, dedicated for assist data req */
+#define GNSS_MAX_NAV_STD_CLK_MODEL_ELEMENT                4  /* 2 for LPP/RRLP, 4 for RRC */
+#define GNSS_MAX_NAV_CLOCK_MODEL_ELEMENT                  6  /* currently there is 6 clock models */
+#define GNSS_MAX_NAV_ORBIT_MODEL_ELEMENT                  6  /* currently there is 6 orbit models */
+
+/* GNSS Real Time Integrity */
+#define GNSS_MAX_RTI_BAD_SAT_ELEMENT                     16  /* 64 for LPP/RRC, 16 for RRLP. Use 16 to reduce structure size */
+
+/* GNSS Data Bit Assistance */
+#define GNSS_MAX_DBA_SGN_TYPE_ELEMENT                     8  /* 8 for LPP/RRC/RRLP */
+#define GNSS_MAX_DBA_SAT_ELEMENT                         16  /* 64 for LPP/RRC, 32 for RRLP. Use 16 to reduce structure size */
+#define GNSS_MAX_DBA_BIT_LENGTH                          64  /* 1024 bit for LPP/RRC/RRLP, but RRLP use integer intead of bit. Process only max 64 bits to reduce structure size */
+
+/* GNSS Acquisition Assitance */
+#define GNSS_MAX_ACQ_ASSIST_SAT_ELEMENT                  16  /* 64 for LPP/RRC, 16 for RRLP. Use 16 to reduce structure size */
+
+/* GNSS Almanac */
+#define GNSS_MAX_ALMANAC_SAT_ELEMENT                     32  /* 64 for LPP/RRC, 36 for RRLP. Use 32 to reduce structure size */
+
+/* GNSS Auxiliary Information */
+#define GNSS_MAX_AUX_SAT_ELEMENT                         64  /* 64 for LPP/RRC/RRLP. Use 16 to reduce structure size */
+
+/* GNSS BDS Grid Ion Model */
+#define GNSS_MAX_BDS_GRID_ION_ELEMENT                    320  /* 320 for LPP/RRC/RRLP. Use 16 to reduce structure size.
+                                                                Spec description of BDS-GridModelParameter\gridIonList:
+                                                                This list provides ionospheric grid point information for each grid point. Up to 16 instances are used in this version of the specification. */
+
+/* GNSS DBDS Correction */
+#define GNSS_MAX_DBDS_SGN_TYPE_ELEMENT                    3  /* 3 for LPP/RRLP, 8 for RRC */
+#define GNSS_MAX_DBDS_CORRECTION_ELEMENT                 16  /* 64 for LPP/RRC/RRLP. Use 16 to reduce structure size */
+
+
+/* MTK supports standalone GPS+QZSS+GLONASS+Galileo+Beidou, and assisted-GNSS supports A-GPS+A-GLONASS+A-BDS */
+#define GNSS_MAX_SUPPORT_NUM    0x06 /* A-GPS + A-GLONASS + A-BDS + A-Galileo + NavIC + QZSS */
+
+
+/* GNSS Measurement Info */
+#define GNSS_MAX_MEASURED_GNSS_ELEMENT                   GNSS_MAX_SUPPORT_NUM  /* 16 for LPP, 8 for RRC/RRLP, Use GNSS_MAX_SUPPORT_NUM to reduce structure size */
+#define GNSS_MAX_MEASURED_SGN_PER_GNSS_ELEMENT                              4  /* 8 for LPP/RRC/RRLP, Use 4 to reduce structure size */
+#define GNSS_MAX_MEASURED_SAT_PER_SGN_ELEMENT                              16  /* 64 for LPP/RRC, 16 for RRLP. Use 16 to reduce structure size */
+
+/* GNSS Request Additional Generic Assist Data */
+#define GNSS_MAX_REQ_ADD_GENERIC_ASSIST_DATA_ELEMENT     GNSS_MAX_SUPPORT_NUM  /* 16 for LPP, 8 for RRC, unspecified for RRLP (up to 40 bytes), Use 9 since number of generic assistance data type is only 9 */
+
+
+/* GNSS ID Bitmap, use two-byte representation */
+#define GNSS_ID_BITMAP_NONE     0x00
+#define GNSS_ID_BITMAP_GPS      0x8000  /* gps     (0) */
+#define GNSS_ID_BITMAP_SBAS     0x4000  /* sbas    (1) */
+#define GNSS_ID_BITMAP_QZSS     0x2000  /* qzss    (2) */
+#define GNSS_ID_BITMAP_GALILEO  0x1000  /* galileo (3) */
+#define GNSS_ID_BITMAP_GLONASS  0x0800  /* glonass (4) */
+#define GNSS_ID_BITMAP_BDS      0x0400  /* bds     (5) */
+#define GNSS_ID_BITMAP_NAVIC    0x0200  /* navic   (6) */
+
+#define GNSS_ID_BITMAP_GPS_GLONASS        (GNSS_ID_BITMAP_GPS | GNSS_ID_BITMAP_GLONASS)
+#define GNSS_ID_BITMAP_GPS_BDS            (GNSS_ID_BITMAP_GPS | GNSS_ID_BITMAP_BDS)
+#define GNSS_ID_BITMAP_GPS_GLONASS_BDS    (GNSS_ID_BITMAP_GPS | GNSS_ID_BITMAP_GLONASS | GNSS_ID_BITMAP_BDS)
+#define GNSS_ID_BITMAP_GPS_GALILEO              (GNSS_ID_BITMAP_GPS | GNSS_ID_BITMAP_GALILEO)
+#define GNSS_ID_BITMAP_GPS_QZSS                 (GNSS_ID_BITMAP_GPS | GNSS_ID_BITMAP_QZSS)
+#define GNSS_ID_BITMAP_GPS_NAVIC              (GNSS_ID_BITMAP_GPS | GNSS_ID_BITMAP_NAVIC)
+#define GNSS_ID_BITMAP_GPS_GLONASS_BDS_GALILEO    (GNSS_ID_BITMAP_GPS | GNSS_ID_BITMAP_GLONASS | GNSS_ID_BITMAP_BDS | GNSS_ID_BITMAP_GALILEO)
+#define GNSS_ID_BITMAP_GPS_GLONASS_BDS_GALILEO_NAVIC    (GNSS_ID_BITMAP_GPS | GNSS_ID_BITMAP_GLONASS | GNSS_ID_BITMAP_BDS | GNSS_ID_BITMAP_GALILEO | GNSS_ID_BITMAP_NAVIC)
+#define GNSS_ID_BITMAP_GPS_GLONASS_BDS_GALILEO_NAVIC_QZSS    (GNSS_ID_BITMAP_GPS | GNSS_ID_BITMAP_GLONASS | GNSS_ID_BITMAP_BDS | GNSS_ID_BITMAP_GALILEO | GNSS_ID_BITMAP_NAVIC | GNSS_ID_BITMAP_QZSS)
+
+/* SBAS ID Bitmap, use one-byte representation */
+#define SBAS_ID_BITMAP_NONE   0x00
+#define SBAS_ID_BITMAP_WASS   0x80  /* waas  (0) */
+#define SBAS_ID_BITMAP_EGNOS  0x40  /* egnos (1) */
+#define SBAS_ID_BITMAP_MSAS   0x20  /* msas  (2) */
+#define SBAS_ID_BITMAP_GAGAN  0x10  /* gagan (3) */
+
+/* GNSS Signal IDs Bitmap, use one-byte representation
+ * GNSS    | Bit 1  | Bit 2 | Bit 3 | Bit 4 | Bit 5 | Bit 6 | Bit 7 | Bit 8 |
+ *         | (MSB)  |       |       |       |       |       |       | (LSB) |
+ * --------+--------+-------+-------+-------+-------+-------+-------+-------+
+ * GPS     | L1 C/A |  L1C  |  L2C  |   L5  | -- reserved --|-------|-------|
+ * SBAS    |   L1   | -- reserved --|-------|-------|-------|-------|-------|
+ * QZSS    | QZS-L1 |QZS-L1C|QZS-L2C| QZS-L5| -- reserved --|-------|-------|
+ * GLONASS |   G1   |   G2  |  G3   | -- reserved --|-------|-------|-------|
+ * Galileo |   E1   |   E5a |  E5b  |   E6  |E5a+E5b| -- reserved --|-------|
+ * BDS     |   B1I  | -- reserved --|-------|-------|-------|-------|-------|
+ */
+/* GNSS signal spectrum */
+#define GNSS_SGN_ID_BITMAP_GPS_L1C_A       0x80  /* bit 1 */
+#define GNSS_SGN_ID_BITMAP_GPS_L1C         0x40  /* bit 2 */
+#define GNSS_SGN_ID_BITMAP_GPS_L2C         0x20  /* bit 3 */
+#define GNSS_SGN_ID_BITMAP_GPS_L5          0x10  /* bit 4 */
+
+#define GNSS_SGN_ID_BITMAP_SBAS_L1         0x80  /* bit 1 */
+
+#define GNSS_SGN_ID_BITMAP_QZSS_L1C_A      0x80  /* bit 1 */
+#define GNSS_SGN_ID_BITMAP_QZSS_L1C        0x40  /* bit 2 */
+#define GNSS_SGN_ID_BITMAP_QZSS_L2C        0x20  /* bit 3 */
+#define GNSS_SGN_ID_BITMAP_QZSS_L5         0x10  /* bit 4 */
+
+#define GNSS_SGN_ID_BITMAP_GLONASS_G1      0x80  /* bit 1 */
+#define GNSS_SGN_ID_BITMAP_GLONASS_G2      0x40  /* bit 2 */
+#define GNSS_SGN_ID_BITMAP_GLONASS_G3      0x20  /* bit 3 */
+
+#define GNSS_SGN_ID_BITMAP_GALILEO_E1      0x80  /* bit 1 */
+#define GNSS_SGN_ID_BITMAP_GALILEO_E5A     0x40  /* bit 2 */
+#define GNSS_SGN_ID_BITMAP_GALILEO_E5B     0x20  /* bit 3 */
+#define GNSS_SGN_ID_BITMAP_GALILEO_E6      0x10  /* bit 4 */
+#define GNSS_SGN_ID_BITMAP_GALILEO_E5_A_B  0x08  /* bit 5 */
+#define GNSS_SGN_ID_BITMAP_GALILEO_E1C     0x04  /* bit 6 */
+#define GNSS_SGN_ID_BITMAP_GALILEO_E1A     0x02  /* bit 7 */
+#define GNSS_SGN_ID_BITMAP_GALILEO_E1B     0x01  /* bit 8 */
+
+#define GNSS_SGN_ID_BITMAP_BDS_B1I         0x80  /* bit 1 */
+
+#define GNSS_SGN_ID_BITMAP_NAVIC_L5_SPS      0x80  /* bit 1 */
+
+#define GNSS_SGN_ID_EXT_BITMAP_GPS_L2Z 0x8000  /* bit 1 */
+#define GNSS_SGN_ID_EXT_BITMAP_GPS_L2C_M 0x4000  /* bit 2 */
+#define GNSS_SGN_ID_EXT_BITMAP_GPS_L2C_L 0x2000  /* bit 3 */
+#define GNSS_SGN_ID_EXT_BITMAP_GPS_L2C_M_L 0x1000  /* bit 4 */
+#define GNSS_SGN_ID_EXT_BITMAP_GPS_L5I 0x0800  /* bit 5 */
+#define GNSS_SGN_ID_EXT_BITMAP_GPS_L5Q 0x0400  /* bit 6 */
+#define GNSS_SGN_ID_EXT_BITMAP_GPS_L5_I_Q 0x0200  /* bit 7 */
+#define GNSS_SGN_ID_EXT_BITMAP_GPS_L1C_D 0x0100  /* bit 8 */
+#define GNSS_SGN_ID_EXT_BITMAP_GPS_L1C_P 0x0080  /* bit 9 */
+#define GNSS_SGN_ID_EXT_BITMAP_GPS_L1C_D_P 0x0040  /* bit 10 */
+
+#define GNSS_SGN_ID_EXT_BITMAP_QZSS_L2C_L 0x8000  /* bit 1 */
+#define GNSS_SGN_ID_EXT_BITMAP_QZSS_L2C_M_L 0x4000  /* bit 2 */
+#define GNSS_SGN_ID_EXT_BITMAP_QZSS_L5I 0x2000  /* bit 3 */
+#define GNSS_SGN_ID_EXT_BITMAP_QZSS_L5Q 0x1000  /* bit 4 */
+#define GNSS_SGN_ID_EXT_BITMAP_QZSS_L5_I_Q 0x0800  /* bit 5 */
+#define GNSS_SGN_ID_EXT_BITMAP_QZSS_L1C_D 0x0400  /* bit 6 */
+#define GNSS_SGN_ID_EXT_BITMAP_QZSS_L1C_P 0x0200  /* bit 7 */
+#define GNSS_SGN_ID_EXT_BITMAP_QZSS_L1C_D_P 0x0100  /* bit 8 */
+
+#define GNSS_SGN_ID_EXT_BITMAP_GLONASS_G2A_I 0x8000  /* bit 1 */
+#define GNSS_SGN_ID_EXT_BITMAP_GLONASS_G2A_P 0x4000  /* bit 2 */
+#define GNSS_SGN_ID_EXT_BITMAP_GLONASS_G2A_I_P 0x2000  /* bit 3 */
+#define GNSS_SGN_ID_EXT_BITMAP_GLONASS_G3I 0x1000  /* bit 4 */
+#define GNSS_SGN_ID_EXT_BITMAP_GLONASS_G3Q 0x0800  /* bit 5 */
+#define GNSS_SGN_ID_EXT_BITMAP_GLONASS_G3_I_Q 0x0400  /* bit 6 */
+
+#define GNSS_SGN_ID_EXT_BITMAP_GALILEO_E1_B_C 0x8000  /* bit 1 */
+#define GNSS_SGN_ID_EXT_BITMAP_GALILEO_E1_A_B_C 0x4000  /* bit 2 */
+#define GNSS_SGN_ID_EXT_BITMAP_GALILEO_E6C 0x2000  /* bit 3 */
+#define GNSS_SGN_ID_EXT_BITMAP_GALILEO_E6A 0x1000  /* bit 4 */
+#define GNSS_SGN_ID_EXT_BITMAP_GALILEO_E6B 0x0800  /* bit 5 */
+#define GNSS_SGN_ID_EXT_BITMAP_GALILEO_E6_B_C 0x0400  /* bit 6 */
+#define GNSS_SGN_ID_EXT_BITMAP_GALILEO_E6_A_B_C 0x0200  /* bit 7 */
+#define GNSS_SGN_ID_EXT_BITMAP_GALILEO_E5B_I 0x0100  /* bit 8 */
+#define GNSS_SGN_ID_EXT_BITMAP_GALILEO_E5B_Q 0x0080  /* bit 9 */
+#define GNSS_SGN_ID_EXT_BITMAP_GALILEO_E5B_I_Q 0x0040  /* bit 10 */
+#define GNSS_SGN_ID_EXT_BITMAP_GALILEO_E5_A_B_I 0x0020  /* bit 11 */
+#define GNSS_SGN_ID_EXT_BITMAP_GALILEO_E5_A_B_Q 0x0010  /* bit 12 */
+#define GNSS_SGN_ID_EXT_BITMAP_GALILEO_E5_A_B_I_Q 0x0008  /* bit 13 */
+#define GNSS_SGN_ID_EXT_BITMAP_GALILEO_E5A_I 0x0004  /* bit 14 */
+#define GNSS_SGN_ID_EXT_BITMAP_GALILEO_E5A_Q 0x0002  /* bit 15 */
+#define GNSS_SGN_ID_EXT_BITMAP_GALILEO_E5A_I_Q 0x0001  /* bit 16 */
+
+#define GNSS_SGN_ID_EXT_BITMAP_BDS_B2_I_Q 0x8000  /* bit 1 */
+#define GNSS_SGN_ID_EXT_BITMAP_BDS_B1C_D 0x4000  /* bit 2 */
+#define GNSS_SGN_ID_EXT_BITMAP_BDS_B1C_P 0x2000  /* bit 3 */
+#define GNSS_SGN_ID_EXT_BITMAP_BDS_B1C_D_P 0x1000  /* bit 4 */
+#define GNSS_SGN_ID_EXT_BITMAP_BDS_B2A_D (0x0800 )  /* bit 20 */
+#define GNSS_SGN_ID_EXT_BITMAP_BDS_B2A_P (0x0400 )  /* bit 19 */
+#define GNSS_SGN_ID_EXT_BITMAP_BDS_B2A_D_P (0x0200 )  /* bit 18 */
+#define GNSS_SGN_ID_EXT_BITMAP_BDS_B2B_I (0x0100 )  /* bit 17 */
+#define GNSS_SGN_ID_EXT_BITMAP_BDS_B2B_Q (0x0080 )  /* bit 16 */
+
+/* GNSS Signal ID value */
+#define GNSS_SGN_ID_VALUE_GPS_L1C_A       0
+#define GNSS_SGN_ID_VALUE_GPS_L1C         1
+#define GNSS_SGN_ID_VALUE_GPS_L2C         2
+#define GNSS_SGN_ID_VALUE_GPS_L5          3
+#define GNSS_SGN_ID_VALUE_GPS_L1P 4
+#define GNSS_SGN_ID_VALUE_GPS_L1Z 5
+#define GNSS_SGN_ID_VALUE_GPS_L2_C_A 6
+#define GNSS_SGN_ID_VALUE_GPS_L2P 7
+#define GNSS_SGN_ID_EXT_VALUE_GPS_L2Z 8
+#define GNSS_SGN_ID_EXT_VALUE_GPS_L2C_M 9
+#define GNSS_SGN_ID_EXT_VALUE_GPS_L2C_L 10
+#define GNSS_SGN_ID_EXT_VALUE_GPS_L2C_M_L 11
+#define GNSS_SGN_ID_EXT_VALUE_GPS_L5I 12
+#define GNSS_SGN_ID_EXT_VALUE_GPS_L5Q 13
+#define GNSS_SGN_ID_EXT_VALUE_GPS_L5_I_Q 14
+#define GNSS_SGN_ID_EXT_VALUE_GPS_L1C_D 15
+#define GNSS_SGN_ID_EXT_VALUE_GPS_L1C_P 16
+#define GNSS_SGN_ID_EXT_VALUE_GPS_L1C_D_P 17
+
+#define GNSS_SGN_ID_VALUE_SBAS_L1         0
+#define GNSS_SGN_ID_VALUE_SBAS_L5I 1
+#define GNSS_SGN_ID_VALUE_SBAS_L5Q 2
+#define GNSS_SGN_ID_VALUE_SBAS_L5_I_Q 3
+
+#define GNSS_SGN_ID_VALUE_QZSS_L1C_A      0
+#define GNSS_SGN_ID_VALUE_QZSS_L1C        1
+#define GNSS_SGN_ID_VALUE_QZSS_L2C        2
+#define GNSS_SGN_ID_VALUE_QZSS_L5         3
+#define GNSS_SGN_ID_VALUE_QZSS_LEX_S 4
+#define GNSS_SGN_ID_VALUE_QZSS_LEX_L 5
+#define GNSS_SGN_ID_VALUE_QZSS_LEX_S_L 6
+#define GNSS_SGN_ID_VALUE_QZSS_L2C_M 7
+#define GNSS_SGN_ID_EXT_VALUE_QZSS_L2C_L 8
+#define GNSS_SGN_ID_EXT_VALUE_QZSS_L2C_M_L 9
+#define GNSS_SGN_ID_EXT_VALUE_QZSS_L5I 10
+#define GNSS_SGN_ID_EXT_VALUE_QZSS_L5Q 11
+#define GNSS_SGN_ID_EXT_VALUE_QZSS_L5_I_Q 12
+#define GNSS_SGN_ID_EXT_VALUE_QZSS_L1C_D 13
+#define GNSS_SGN_ID_EXT_VALUE_QZSS_L1C_P 14
+#define GNSS_SGN_ID_EXT_VALUE_QZSS_L1C_D_P 15
+
+#define GNSS_SGN_ID_VALUE_GLONASS_G1      0
+#define GNSS_SGN_ID_VALUE_GLONASS_G2      1
+#define GNSS_SGN_ID_VALUE_GLONASS_G3      2
+#define GNSS_SGN_ID_VALUE_GLONASS_G1P 3
+#define GNSS_SGN_ID_VALUE_GLONASS_G2P 4
+#define GNSS_SGN_ID_VALUE_GLONASS_G1A_D 5
+#define GNSS_SGN_ID_VALUE_GLONASS_G1A_P 6
+#define GNSS_SGN_ID_VALUE_GLONASS_G1A_D_P 7
+#define GNSS_SGN_ID_EXT_VALUE_GLONASS_G2A_I 8
+#define GNSS_SGN_ID_EXT_VALUE_GLONASS_G2A_P 9
+#define GNSS_SGN_ID_EXT_VALUE_GLONASS_G2A_I_P 10
+#define GNSS_SGN_ID_EXT_VALUE_GLONASS_G3I 11
+#define GNSS_SGN_ID_EXT_VALUE_GLONASS_G3Q 12
+#define GNSS_SGN_ID_EXT_VALUE_GLONASS_G3_I_Q 13
+
+#define GNSS_SGN_ID_VALUE_GALILEO_E1      0
+#define GNSS_SGN_ID_VALUE_GALILEO_E5A     1
+#define GNSS_SGN_ID_VALUE_GALILEO_E5B     2
+#define GNSS_SGN_ID_VALUE_GALILEO_E6      3
+#define GNSS_SGN_ID_VALUE_GALILEO_E5_A_B  4
+#define GNSS_SGN_ID_VALUE_GALILEO_E1C 5
+#define GNSS_SGN_ID_VALUE_GALILEO_E1A 6
+#define GNSS_SGN_ID_VALUE_GALILEO_E1B 7
+#define GNSS_SGN_ID_EXT_VALUE_GALILEO_E1_B_C 8
+#define GNSS_SGN_ID_EXT_VALUE_GALILEO_E1_A_B_C 9
+#define GNSS_SGN_ID_EXT_VALUE_GALILEO_E6C 10
+#define GNSS_SGN_ID_EXT_VALUE_GALILEO_E6A 11
+#define GNSS_SGN_ID_EXT_VALUE_GALILEO_E6B 12
+#define GNSS_SGN_ID_EXT_VALUE_GALILEO_E6_B_C 13
+#define GNSS_SGN_ID_EXT_VALUE_GALILEO_E6_A_B_C 14
+#define GNSS_SGN_ID_EXT_VALUE_GALILEO_E5B_I 15
+#define GNSS_SGN_ID_EXT_VALUE_GALILEO_E5B_Q 16
+#define GNSS_SGN_ID_EXT_VALUE_GALILEO_E5B_I_Q 17
+#define GNSS_SGN_ID_EXT_VALUE_GALILEO_E5_A_B_I 18
+#define GNSS_SGN_ID_EXT_VALUE_GALILEO_E5_A_B_Q 19
+#define GNSS_SGN_ID_EXT_VALUE_GALILEO_E5_A_B_I_Q 20
+#define GNSS_SGN_ID_EXT_VALUE_GALILEO_E5A_I 21
+#define GNSS_SGN_ID_EXT_VALUE_GALILEO_E5A_Q 22
+#define GNSS_SGN_ID_EXT_VALUE_GALILEO_E5A_I_Q 23
+
+#define GNSS_SGN_ID_VALUE_BDS_B1I         0
+#define GNSS_SGN_ID_VALUE_BDS_B1Q 1
+#define GNSS_SGN_ID_VALUE_BDS_B1_I_Q 2
+#define GNSS_SGN_ID_VALUE_BDS_B3I 3
+#define GNSS_SGN_ID_VALUE_BDS_B3Q 4
+#define GNSS_SGN_ID_VALUE_BDS_B3_I_Q 5
+#define GNSS_SGN_ID_VALUE_BDS_B2I 6
+#define GNSS_SGN_ID_VALUE_BDS_B2Q 7
+#define GNSS_SGN_ID_EXT_VALUE_BDS_B2_I_Q 8
+#define GNSS_SGN_ID_EXT_VALUE_BDS_B1C_D 9
+#define GNSS_SGN_ID_EXT_VALUE_BDS_B1C_P 10
+#define GNSS_SGN_ID_EXT_VALUE_BDS_B1C_D_P 11
+
+#define GNSS_SGN_ID_VALUE_NAVIC_L5_SPS 0
+
+#define GNSS_SGN_ID_VALUE_MAX             7
+#define GNSS_SGN_ID_EXT_VALUE_MAX 23
+
+/* GNSS Clock and Orbit Model Value (for Navigation Model) */
+#define GNSS_NAV_CLOCK_MODEL_1_VALUE_STANDARD  1  /* model-1 */
+#define GNSS_NAV_CLOCK_MODEL_2_VALUE_NAV       2  /* model-2 */
+#define GNSS_NAV_CLOCK_MODEL_3_VALUE_CNAV      3  /* model-3 */
+#define GNSS_NAV_CLOCK_MODEL_4_VALUE_GLONASS   4  /* model-4 */
+#define GNSS_NAV_CLOCK_MODEL_5_VALUE_SBAS      5  /* model-5 */
+#define GNSS_NAV_CLOCK_MODEL_6_VALUE_BDS       6  /* model-6 */
+#define GNSS_NAV_CLOCK_MODEL_8_VALUE_NAVIC     8  /* model-8 */
+
+#define GNSS_NAV_ORBIT_MODEL_1_VALUE_KEPLERIAN_SET       1  /* model-1 */
+#define GNSS_NAV_ORBIT_MODEL_2_VALUE_NAV_KEPLERIAN_SET   2  /* model-2 */
+#define GNSS_NAV_ORBIT_MODEL_3_VALUE_CNAV_KEPLERIAN_SET  3  /* model-3 */
+#define GNSS_NAV_ORBIT_MODEL_4_VALUE_GLONASS_ECEF        4  /* model-4 */
+#define GNSS_NAV_ORBIT_MODEL_5_VALUE_SBAS_ECEF           5  /* model-5 */
+#define GNSS_NAV_ORBIT_MODEL_6_VALUE_BDS_KEPLERIAN_SET   6  /* model-6 */
+#define GNSS_NAV_ORBIT_MODEL_8_VALUE_NAVIC_KEPLERIAN_SET 8  /* model-8 */
+
+/* Almanac Model Value */
+#define GNSS_ALMANAC_MODEL_1_VALUE_KEPLERIAN_SET          1  /* model-1 */
+#define GNSS_ALMANAC_MODEL_2_VALUE_NAV_KEPLERIAN_SET      2  /* model-2 */
+#define GNSS_ALMANAC_MODEL_3_VALUE_REDUCED_KEPLERIAN_SET  3  /* model-3 */
+#define GNSS_ALMANAC_MODEL_4_VALUE_MIDI_KEPLERIAN_SET     4  /* model-4 */
+#define GNSS_ALMANAC_MODEL_5_VALUE_GLONASS_SET            5  /* model-5 */
+#define GNSS_ALMANAC_MODEL_6_VALUE_ECEF_SBAS_SET          6  /* model-6 */
+#define GNSS_ALMANAC_MODEL_7_VALUE_BDS_ALMANAC_SET        7  /* model-7 */
+#define GNSS_ALMANAC_MODEL_8_VALUE_NAVIC_ALMANAC_SET      8  /* model-8 */
+
+/* UTC Model Value */
+#define GNSS_UTC_MODEL_1_VALUE  1  /* model-1 (0) */
+#define GNSS_UTC_MODEL_2_VALUE  2  /* model-2 (1) */
+#define GNSS_UTC_MODEL_3_VALUE  3  /* model-3 (2) */
+#define GNSS_UTC_MODEL_4_VALUE  4  /* model-4 (3) */
+#define GNSS_UTC_MODEL_5_VALUE  5  /* model-5 (4) */
+
+/* Ionospheric Model */
+#define GNSS_ION_MODEL_KLOBUCHAR  0x80  /* klobuchar (0) */
+#define GNSS_ION_MODEL_NEQUICK    0x40  /* neQuick   (1) */
+
+/* Klobuchar Model Parameter - dataID (2 bits) */
+/**
+ * '11': the parameters have been generated by QZSS
+ * '10': the parameters have been generated by NAVIC
+ * '01': the parameters have been generated by BDS
+ * '00': the parameters are applicable worldwide
+ */
+#define GNSS_ION_KLOBUCHAR_DATA_ID_VALUE_QZSS    0x03
+#define GNSS_ION_KLOBUCHAR_DATA_ID_VALUE_NAVIC   0x02
+#define GNSS_ION_KLOBUCHAR_DATA_ID_VALUE_BDS     0x01
+#define GNSS_ION_KLOBUCHAR_DATA_ID_VALUE_WW      0x00
+#define GNSS_ION_KLOBUCHAR_DATA_ID_MASK          0x03
+
+/* Navigation Model */
+#define GNSS_NAV_CLOCK_MODEL_1_STANDARD  0x80  /* model-1 (0) */
+#define GNSS_NAV_CLOCK_MODEL_2_NAV       0x40  /* model-2 (1) */
+#define GNSS_NAV_CLOCK_MODEL_3_CNAV      0x20  /* model-3 (2) */
+#define GNSS_NAV_CLOCK_MODEL_4_GLONASS   0x10  /* model-4 (3) */
+#define GNSS_NAV_CLOCK_MODEL_5_SBAS      0x08  /* model-5 (4) */
+#define GNSS_NAV_CLOCK_MODEL_6_BDS       0x04  /* model-6 (5) */
+#define GNSS_NAV_CLOCK_MODEL_7_BDS2      0x02  /* model-7 (6) */
+#define GNSS_NAV_CLOCK_MODEL_8_NAVIC     0x01  /* model-8 (7) */
+
+#define GNSS_NAV_ORBIT_MODEL_1_KEPLERIAN_SET       0x80  /* model-1 (0) */
+#define GNSS_NAV_ORBIT_MODEL_2_NAV_KEPLERIAN_SET   0x40  /* model-2 (1) */
+#define GNSS_NAV_ORBIT_MODEL_3_CNAV_KEPLERIAN_SET  0x20  /* model-3 (2) */
+#define GNSS_NAV_ORBIT_MODEL_4_GLONASS_ECEF        0x10  /* model-4 (3) */
+#define GNSS_NAV_ORBIT_MODEL_5_SBAS_ECEF           0x08  /* model-5 (4) */
+#define GNSS_NAV_ORBIT_MODEL_6_BDS_KEPLERIAN_SET   0x04  /* model-6 (5) */
+#define GNSS_NAV_ORBIT_MODEL_7_BDS_KEPLERIAN_SET2  0x02  /* model-7 (6) */
+#define GNSS_NAV_ORBIT_MODEL_8_NAVIC_KEPLERIAN_SET 0x01  /* model-8 (7) */
+
+
+/* Almanac */
+#define GNSS_ALMANAC_MODEL_1_KEPLERIAN_SET          0x80  /* model-1 (0) */
+#define GNSS_ALMANAC_MODEL_2_NAV_KEPLERIAN_SET      0x40  /* model-2 (1) */
+#define GNSS_ALMANAC_MODEL_3_REDUCED_KEPLERIAN_SET  0x20  /* model-3 (2) */
+#define GNSS_ALMANAC_MODEL_4_MIDI_KEPLERIAN_SET     0x10  /* model-4 (3) */
+#define GNSS_ALMANAC_MODEL_5_GLONASS_SET            0x08  /* model-5 (4) */
+#define GNSS_ALMANAC_MODEL_6_ECEF_SBAS_SET          0x04  /* model-6 (5) */
+#define GNSS_ALMANAC_MODEL_7_BDS_ALMANAC_SET        0x02  /* model-7 (6) */
+#define GNSS_ALMANAC_MODEL_8_NAVIC_ALMANAC_SET      0x01  /* model-8 (7) */
+
+
+/* UTC Model*/
+#define GNSS_UTC_MODEL_1  0x80  /* model-1 (0) */
+#define GNSS_UTC_MODEL_2  0x40  /* model-2 (1) */
+#define GNSS_UTC_MODEL_3  0x20  /* model-3 (2) */
+#define GNSS_UTC_MODEL_4  0x10  /* model-4 (3) */
+#define GNSS_UTC_MODEL_5  0x08  /* model-5 (4) */
+
+
+/* GNSS measurement fields validity bitmask */
+#define GNSS_MEAS_INFO_CARRIER_QUALITY_VALIDITY   0x01
+#define GNSS_MEAS_INFO_INT_CODE_PHASE_VALIDITY    0x02
+#define GNSS_MEAS_INFO_DOPPLER_VALIDITY           0x04
+#define GNSS_MEAS_INFO_ADR_VALIDITY               0x08
+#define GNSS_MEAS_INFO_ALL_VALIDITY               0x0F
+
+#define CHECK_GNSS_MEAS_INFO_CARRIER_QUALITY_VALIDITY(validity)      ((validity & GNSS_MEAS_INFO_ALL_VALIDITY) & GNSS_MEAS_INFO_CARRIER_QUALITY_VALIDITY) ? KAL_TRUE : KAL_FALSE
+#define SET_GNSS_MEAS_INFO_CARRIER_QUALITY_VALIDITY(validity)        (validity |= GNSS_MEAS_INFO_CARRIER_QUALITY_VALIDITY)
+
+#define CHECK_GNSS_MEAS_INFO_INT_CODE_PHASE_VALIDITY(validity)       ((validity & GNSS_MEAS_INFO_ALL_VALIDITY) & GNSS_MEAS_INFO_INT_CODE_PHASE_VALIDITY) ? KAL_TRUE : KAL_FALSE
+#define SET_GNSS_MEAS_INFO_INT_CODE_PHASE_VALIDITY(validity)         (validity |= GNSS_MEAS_INFO_INT_CODE_PHASE_VALIDITY)
+
+#define CHECK_GNSS_MEAS_INFO_DOPPLER_VALIDITY(validity)              ((validity & GNSS_MEAS_INFO_ALL_VALIDITY) & GNSS_MEAS_INFO_DOPPLER_VALIDITY) ? KAL_TRUE : KAL_FALSE
+#define SET_GNSS_MEAS_INFO_DOPPLER_VALIDITY(validity)                (validity |= GNSS_MEAS_INFO_DOPPLER_VALIDITY)
+
+#define CHECK_GNSS_MEAS_INFO_ADR_VALIDITY(validity)                  ((validity & GNSS_MEAS_INFO_ALL_VALIDITY) & GNSS_MEAS_INFO_ADR_VALIDITY) ? KAL_TRUE : KAL_FALSE
+#define SET_GNSS_MEAS_INFO_ADR_VALIDITY(validity)                    (validity |= GNSS_MEAS_INFO_ADR_VALIDITY)
+
+
+/* GNSS assist data type bitmask */
+#define GNSS_ASSIST_MASK_NONE                        0x0
+
+#define GNSS_COM_ASSIST_MASK_REF_TIME                (1 << 0)  /* 0x0001 */
+#define GNSS_COM_ASSIST_MASK_REF_LOCATION            (1 << 1)  /* 0x0002 */
+#define GNSS_COM_ASSIST_MASK_IONOSPHERE              (1 << 2)  /* 0x0004 */
+#define GNSS_COM_ASSIST_MASK_EARTH_ORIENT_PARAMS     (1 << 3)  /* 0x0008 */
+
+#define GNSS_GEN_ASSIST_MASK_TIME_MODEL              (1 << 4)  /* 0x0010 */
+#define GNSS_GEN_ASSIST_MASK_DGNSS_CORRECTION        (1 << 5)  /* 0x0020 */
+#define GNSS_GEN_ASSIST_MASK_NAV_MODEL               (1 << 6)  /* 0x0040 */
+#define GNSS_GEN_ASSIST_MASK_RTI                     (1 << 7)  /* 0x0080 */
+#define GNSS_GEN_ASSIST_MASK_DATA_BIT_ASSIST         (1 << 8)  /* 0x0100 */
+#define GNSS_GEN_ASSIST_MASK_ACQUISITION             (1 << 9)  /* 0x0200 */
+#define GNSS_GEN_ASSIST_MASK_ALMANAC                 (1 <<10)  /* 0x0400 */
+#define GNSS_GEN_ASSIST_MASK_UTC_MODEL               (1 <<11)  /* 0x0800 */
+#define GNSS_GEN_ASSIST_MASK_AUX_INFO                (1 <<12)  /* 0x1000 */
+#define GNSS_GEN_ASSIST_MASK_DBDS_CORRECTION         (1 <<13)  /* 0x2000 */
+#define GNSS_GEN_ASSIST_MASK_BDS_GRID_MODEL          (1 <<14)  /* 0x4000 */
+
+// LPPE HA Part
+#define MAX_ENUM_VALUE    2147483647
+
+#define GNSS_HA_COM_ASSIST_MASK_IONOSPHERE           (1 << 15)  /* 0x08000 */
+#define GNSS_HA_COM_ASSIST_MASK_TROPOSPHERE          (1 << 16)  /* 0x10000 */
+#define GNSS_HA_COM_ASSIST_MASK_ALTITUDE             (1 << 17)  /* 0x20000 */
+#define GNSS_HA_COM_ASSIST_MASK_SOLAR_RADIATION      (1 << 18)  /* 0x40000 */
+#define GNSS_HA_COM_ASSIST_MASK_CCP                 (1 << 19)  /* 0x80000 */
+#define GNSS_HA_GEN_ASSIST_MASK_CCP                (1 << 20)  /* 0x100000 */
+#define GNSS_HA_GEN_ASSIST_MASK_DEGRADATION         (1 << 21)  /* 0x200000 */
+
+
+#define GNSS_ASSIST_MB_MANDATORY_MASK                (GNSS_COM_ASSIST_MASK_REF_TIME            | \
+                                                      GNSS_COM_ASSIST_MASK_REF_LOCATION        | \
+                                                      GNSS_COM_ASSIST_MASK_IONOSPHERE          | \
+                                                      GNSS_COM_ASSIST_MASK_EARTH_ORIENT_PARAMS | \
+                                                      GNSS_GEN_ASSIST_MASK_TIME_MODEL          | \
+                                                      GNSS_GEN_ASSIST_MASK_DGNSS_CORRECTION    | \
+                                                      GNSS_GEN_ASSIST_MASK_NAV_MODEL           | \
+                                                      GNSS_GEN_ASSIST_MASK_RTI                 | \
+                                                      GNSS_GEN_ASSIST_MASK_DATA_BIT_ASSIST     | \
+                                                      GNSS_GEN_ASSIST_MASK_ALMANAC             | \
+                                                      GNSS_GEN_ASSIST_MASK_UTC_MODEL           | \
+                                                      GNSS_GEN_ASSIST_MASK_AUX_INFO            | \
+                                                      GNSS_GEN_ASSIST_MASK_DBDS_CORRECTION     | \
+                                                      GNSS_GEN_ASSIST_MASK_BDS_GRID_MODEL)     /* 0x7DFF */
+
+
+#define GNSS_ASSIST_MA_MANDATORY_MASK               (GNSS_COM_ASSIST_MASK_REF_TIME             | \
+                                                     GNSS_GEN_ASSIST_MASK_ACQUISITION          | \
+                                                     GNSS_GEN_ASSIST_MASK_AUX_INFO)      /* 0x1201 */
+
+
+#define GNSS_ASSIST_TIME_INDEPENDENT_MASK           (GNSS_COM_ASSIST_MASK_REF_LOCATION)  /* 0x0002 */
+
+
+#define GNSS_LAST_SEC_TIME       1000
+#define GNSS_MDT_GPS_RESPONSE_TIME  1000
+#define GNSS_MDT_LBS_ERRC_PERIOD_TIME  1280
+#define GNSS_INIT_TIMER_INTERVAL       10000
+
+
+/* ---LPPe HA GNSS Interface--- maximum element definition */
+#define GNSS_HA_MAX_LOCAL_KLOBUCHAR_MODEL_ELEMENT     16
+#define GNSS_HA_MAX_LOCAL_KLOBUCHAR_MODEL              8
+#define GNSS_HA_MAX_STORM_ELEMENT                     16
+#define GNSS_HA_MAX_LOCAL_TROPO_DELAY_AREA_ELEMENT     8
+#define GNSS_HA_MAX_LOCAL_TROPO_DELAY_TIME_ELEMENT     8
+#define GNSS_HA_MAX_LOCAL_SURFACE_PARAMS_ELEMENT       8
+#define GNSS_HA_MAX_LOCAL_SURFACE_PARAMS_TIME_ELEMENT  8
+#define GNSS_HA_MAX_ALTITUDE_ASSIST_AREA_ELEMENT       8
+#define GNSS_HA_MAX_PRESSURE_ASSIST_ELEMENT           16
+#define GNSS_HA_MAX_CCP_SIGNAL_SUPP_ELEMENT            8
+#define GNSS_HA_MAX_CCP_PREF_STATION_LIST_ELEMENT      8  /* OMA-TS-LPPe: maxReferenceStations */
+#define GNSS_HA_MAX_WA_IONO_SURF_PER_SV_ELEMENT       16  /* OMA-TS-LPPe: defines 64, reduce size to 16 */
+#define GNSS_HA_MAX_MECHANICS_SV_ELEMENT              16  /* OMA-TS-LPPe: defines 64, reduce size to 16 */
+#define GNSS_HA_MAX_DCB_LIST_ELEMENT                  16  /* OMA-TS-LPPe: defines 64, reduce size to 16 */
+#define GNSS_HA_MAX_DCB_ELEMENT                       16
+#define GNSS_HA_MAX_DEGRAD_MODEL_ELEMENT              16  /* OMA-TS-LPPe: defines 64, reduce size to 16 */
+#define GNSS_HA_MAX_CCP_GENERIC_ELEMENT                8
+#define GNSS_HA_MAX_CCP_PER_SIG_ELEMENT                8
+#define GNSS_HA_MAX_CCP_PER_SV_ELEMENT                16  /* OMA-TS-LPPe: defines 64, reduce size to 16 */
+#define GNSS_HA_MAX_REQ_NAV_MODEL_ID_ELEMENT           8
+#define GNSS_HA_MAX_MEAS_PER_GNSS_ELEMENT             16
+#define GNSS_HA_MAX_MEAS_PER_SIGNAL_ELEMENT            8
+#define GNSS_HA_MAX_MEAS_PER_SV_ELEMENT               16  /* OMA-TS-LPPe: defines 64, reduce size to 16 */
+#define GNSS_HA_MAX_TEC_PER_SV_ELEMENT                16  /* OMA-TS-LPPe: defines 64, reduce size to 16 */
+
+#define GNSS_HA_MAX_GNSS_GENERIC_ASSIST_DATA_ELEMENT  16
+#define GNSS_HA_MAX_GENERIC_AD_NAV_MODEL_ID_ELEMENT    8
+#define GNSS_HA_MAX_HA_GNSS_CAPA_ELEMENT               8
+
+
+/* ---LPPe HA GNSS Interface--- optional field validity bit definition */
+#define GNSS_HA_MAPPING_FUNC_PARAMS_BIT_BH_VALID      0x80
+#define GNSS_HA_MAPPING_FUNC_PARAMS_BIT_CH_VALID      0x40
+#define GNSS_HA_MAPPING_FUNC_PARAMS_BIT_AW_VALID      0x20
+#define GNSS_HA_MAPPING_FUNC_PARAMS_BIT_BW_VALID      0x10
+#define GNSS_HA_MAPPING_FUNC_PARAMS_BIT_CW_VALID      0x08
+
+#define GNSS_HA_LOCAL_TROPO_DELAY_TIME_ELEMENT_BIT_EH_VALID     0x80
+#define GNSS_HA_LOCAL_TROPO_DELAY_TIME_ELEMENT_BIT_ZW0_VALID    0x40
+#define GNSS_HA_LOCAL_TROPO_DELAY_TIME_ELEMENT_BIT_EW_VALID     0x20
+#define GNSS_HA_LOCAL_TROPO_DELAY_TIME_ELEMENT_BIT_GN_VALID     0x10
+#define GNSS_HA_LOCAL_TROPO_DELAY_TIME_ELEMENT_BIT_GE_VALID     0x08
+
+#define GNSS_HA_LOCAL_SURF_PARAMS_TIME_ELEMENT_BIT_GN_PRESSURE       0x80
+#define GNSS_HA_LOCAL_SURF_PARAMS_TIME_ELEMENT_BIT_GE_PRESSURE       0x40
+#define GNSS_HA_LOCAL_SURF_PARAMS_TIME_ELEMENT_BIT_TEMPERATURE       0x20
+#define GNSS_HA_LOCAL_SURF_PARAMS_TIME_ELEMENT_BIT_TEMPERATURE_RATE  0x10
+#define GNSS_HA_LOCAL_SURF_PARAMS_TIME_ELEMENT_BIT_GN_TEMPERATURE    0x08
+#define GNSS_HA_LOCAL_SURF_PARAMS_TIME_ELEMENT_BIT_GE_TEMPERATURE    0x04
+
+
+/* ---LPPe HA GNSS Interface--- bitmask field bit defintion */
+#define GNSS_HA_COMM_AD_REQ_IONO_BIT_KLOBUCHAR_MODEL        0x01
+#define GNSS_HA_COMM_AD_REQ_IONO_BIT_IONO_STORM_WARNING     0x02
+
+#define GNSS_HA_COMM_AD_REQ_TROPO_BIT_DELAY_LIST            0x01
+#define GNSS_HA_COMM_AD_REQ_TROPO_BIT_SURFACE_PARAMS        0x02
+
+#define GNSS_HA_IONO_MEAS_REQ_BIT_TEC_PER_SV                0x01
+#define GNSS_HA_IONO_MEAS_REQ_BIT_ZENITH_TEC                0x02
+
+#define GNSS_HA_COMM_IONO_AD_SUPP_BIT_LOCAL_KLOBUCHAR            0x01
+#define GNSS_HA_COMM_IONO_AD_SUPP_BIT_IONO_STORM_WARNING         0x02
+#define GNSS_HA_COMM_IONO_AD_SUPP_BIT_WIDE_AREA_IONO_SURFACE     0x04
+
+#define GNSS_HA_COMM_TROPO_AD_SUPP_BIT_LOCAL_TROPOSPHERE_DELAY   0x01
+#define GNSS_HA_COMM_TROPO_AD_SUPP_BIT_SURFACE_PARAMETERS        0x02
+#define GNSS_HA_COMM_TROPO_AD_SUPP_BIT_MULTI_GRID_POINTS         0x04
+
+#define GNSS_HA_COMM_CCP_AD_SUPP_BIT_SUPPORT_AREA_ASSIST         0x01
+#define GNSS_HA_COMM_CCP_AD_SUPP_BIT_MULTI_REF_STATION           0x02
+
+#define GNSS_HA_GENE_AD_SUPP_BIT_BIT_TEC_PER_SV                  0x01
+#define GNSS_HA_GENE_AD_SUPP_BIT_BIT_ZENITH_TEC                  0x02
+
+#define GNSS_HA_MODE_SUPPORT_BIT_UE_BASED                        0x01
+#define GNSS_HA_MODE_SUPPORT_BIT_UE_ASSISTED                     0x02
+
+#define GNSS_HA_ANT_SUPPORT_BIT_ANT_DESCRIPTION                  0x01
+#define GNSS_HA_ANT_SUPPORT_BIT_ANT_ORIENTATION                  0x02
+
+
+/* GNSS standard clock model element */
+#define ITEM_0_IS_INAV 0
+#define ITEM_1_IS_INAV 1
+#define ITEM_0_IS_FNAV 0
+#define ITEM_1_IS_FNAV 1
+#define STANDARD_CLOCK_MODEL_INAV 0
+#define STANDARD_CLOCK_MODEL_FNAV 1
+
+
+/* ---LPP HA GNSS Interface--- maximum element definition */
+#define GNSS_MAX_EQUAL_INT_AMBIGUITY_LEVEL_REF_STATION_ID_NUM 16
+#define GNSS_MAX_SSR_RELATIVE_LOCATION_ELEMENT 64
+#define GNSS_MAX_RTK_SAT_SIGNAL_DATA_ELEMENT 24
+#define GNSS_MAX_RTK_SAT_DATA_ELEMENT 32 /* Spec defines 64, use 32 to reduce structure size */
+#define GNSS_MAX_SSR_ORBIT_CORRECTION_SAT_ELEMENT 32 /* Spec defines 64, use 32 to reduce structure size */
+#define GNSS_MAX_SSR_CLOCK_CORRECTION_SAT_ELEMENT 32 /* Spec defines 64, use 32 to reduce structure size */
+#define GNSS_MAX_SSR_CODE_BIAS_SAT_ELEMENT 32 /* Spec defines 64, use 32 to reduce structure size */
+#define GNSS_MAX_SSR_CODE_BIAS_SIG_ELEMENT 16
+#define GNSS_MAX_SSR_URA_SAT_ELEMENT 32 /* Spec defines 64, use 32 to reduce structure size */
+#define GNSS_MAX_SSR_PHASE_BIAS_SAT_ELEMENT 32 /* Spec defines 64, use 32 to reduce structure size */
+#define GNSS_MAX_SSR_PHASE_BIAS_SIG_ELEMENT 16
+#define GNSS_MAX_SSR_STEC_SAT_ELEMENT 32 /* Spec defines 64, use 32 to reduce structure size */
+#define GNSS_MAX_STEC_RESIDUAL_SAT_ELEMENT 32 /* Spec defines 64, use 32 to reduce structure size */
+#define GNSS_MAX_SSR_GRID_ELEMENT 64
+#define GNSS_MAX_NAVIC_CORRECTION_ELEMENT 32 /* Spec defines 64, use 32 to reduce structure size */
+#define GNSS_MAX_NAVIC_REGION_IGP_ELEMENT 16
+#define GNSS_MAX_SAT_LIST_ELEMENT 32 /* Spec defines 64, use 32 to reduce structure size */
+
+
+
+
 typedef enum {
     MTK_AGPS_OPEN_TYPE_UNKNOWN = 0,             // 0 (i.e., old agpsd)
     MTK_AGPS_OPEN_TYPE_C2K     = 0x10,          // 0x10
@@ -715,6 +1289,14 @@
 } MTK_GNSS_ASSIST_BSV_T;
 /* end for gnss real time integrity */
 
+typedef enum
+{
+    GNSS_ACQ_ASSIST_DOPPLER_UNCERTAINTY_EXT_ENUM_D60,
+    GNSS_ACQ_ASSIST_DOPPLER_UNCERTAINTY_EXT_ENUM_D80,
+    GNSS_ACQ_ASSIST_DOPPLER_UNCERTAINTY_EXT_ENUM_D100,
+    GNSS_ACQ_ASSIST_DOPPLER_UNCERTAINTY_EXT_ENUM_D120,
+    GNSS_ACQ_ASSIST_DOPPLER_UNCERTAINTY_EXT_ENUM_NO_INFO
+} MTK_GNSS_ACQ_DOPP_UNCERT_EXT_ENUM;
 
 /* start for gnss acquisition assistance */
 typedef struct
@@ -1172,6 +1754,2184 @@
 #pragma pack()
 #endif
 
+/* NNUM ********************************************************************/
+
+typedef enum
+{
+    GNSS_NETWORK_CELL_TYPE_NULL,
+    GNSS_NETWORK_CELL_TYPE_EUTRA,
+    GNSS_NETWORK_CELL_TYPE_UTRA,
+    GNSS_NETWORK_CELL_TYPE_GSM
+} gnss_network_cell_type_enum;
+
+typedef enum
+{
+    GNSS_COMMON_ASSIST_DATA_TYPE_REF_TIME,
+    GNSS_COMMON_ASSIST_DATA_TYPE_REF_LOCACTION,
+    GNSS_COMMON_ASSIST_DATA_TYPE_ION_MODEL,
+    GNSS_COMMON_ASSIST_DATA_TYPE_EARTH_ORIENT_PARAMS,
+    GNSS_COMMON_HA_ASSIST_DATA_TYPE_ION_MODEL,
+    GNSS_COMMON_HA_ASSIST_DATA_TYPE_TROPO_MODEL,
+    GNSS_COMMON_HA_ASSIST_DATA_TYPE_ALT,
+    GNSS_COMMON_HA_ASSIST_DATA_TYPE_SOLAR,
+    GNSS_COMMON_HA_ASSIST_DATA_TYPE_CCP
+} gnss_common_assist_data_type_enum;
+
+typedef enum
+{
+    GNSS_GENERIC_ASSIST_DATA_TYPE_TIME_MODEL,
+    GNSS_GENERIC_ASSIST_DATA_TYPE_DGNSS_CORRECTION,
+    GNSS_GENERIC_ASSIST_DATA_TYPE_NAVIGATION_MODEL,
+    GNSS_GENERIC_ASSIST_DATA_TYPE_RTI,
+    GNSS_GENERIC_ASSIST_DATA_TYPE_DATA_BIT_ASSIST,
+    GNSS_GENERIC_ASSIST_DATA_TYPE_ACQUISITION,
+    GNSS_GENERIC_ASSIST_DATA_TYPE_ALMANAC,
+    GNSS_GENERIC_ASSIST_DATA_TYPE_UTC_MODEL,
+    GNSS_GENERIC_ASSIST_DATA_TYPE_AUX_INFO,
+    GNSS_GENERIC_ASSIST_DATA_TYPE_DBDS_CORRECTION,
+    GNSS_GENERIC_ASSIST_DATA_TYPE_BDS_GRID_MODEL,
+    GNSS_GENERIC_HA_ASSIST_DATA_TYPE_CCP,
+    GNSS_GENERIC_HA_ASSIST_DATA_TYPE_DEGRADATION
+} gnss_generic_assist_data_type_enum;
+
+typedef enum
+{
+    GNSS_NAV_MODEL_REQ_TYPE_STORED_NAV_LIST,
+    GNSS_NAV_MODEL_REQ_TYPE_REQ_NAV_LIST
+} gnss_nav_model_req_type_enum;
+
+typedef enum
+{
+    GNSS_UTC_MODEL_TYPE_MODEL1,  /* GPS, Galileo, QZSS */
+    GNSS_UTC_MODEL_TYPE_MODEL2,  /* NAVIC, BDS B1C */
+    GNSS_UTC_MODEL_TYPE_MODEL3,  /* GLONASS */
+    GNSS_UTC_MODEL_TYPE_MODEL4,  /* SBAS */
+    GNSS_UTC_MODEL_TYPE_MODEL5   /* BDS B1I */
+} gnss_utc_model_type_enum;
+
+
+typedef enum
+{
+    GNSS_AUX_INFO_GNSS_TYPE_GPS,
+    GNSS_AUX_INFO_GNSS_TYPE_GLONASS,
+    GNSS_AUX_INFO_GNSS_TYPE_BDS
+} gnss_aux_info_gnss_type_enum;
+
+
+typedef enum
+{
+    GNSS_POS_RESULT_TYPE_POS_CNF,
+    GNSS_POS_RESULT_TYPE_ASSIST_DATA_REQ
+} gnss_pos_result_type_enum;
+
+
+typedef enum
+{
+    GNSS_MEAS_RESULT_TYPE_MEAS_CNF,
+    GNSS_MEAS_RESULT_TYPE_ASSIST_DATA_REQ
+} gnss_meas_result_type_enum;
+
+
+typedef enum
+{
+    GNSS_LOC_RESULT_NULL,
+    GNSS_LOC_RESULT_NO_ERROR,
+    GNSS_LOC_RESULT_UNDEFINED,
+    GNSS_LOC_RESULT_REQ_TIMEOUT,
+    GNSS_LOC_RESULT_NOT_ENOUGH_SATELLITES,
+    GNSS_LOC_RESULT_ASSIST_DATA_MISSING,  /* not used in POS(MEAS)_REQ/CNF primitive */
+
+    /* dedicated for RRLP */
+    GNSS_LOC_RESULT_METHOD_NOT_SUPPORTED,
+    GNSS_LOC_RESULT_REFERENCE_BTS_NOT_SERVING_BTS,
+
+    /* dedicated for RRC */
+    GNSS_LOC_RESULT_NOT_ACCOMPLISHED_TIMING_OF_CELL_FRAMES,  /* similar to FINE_TIME_ASSISTANCE_MEASUREMENTS_NOT_POSSIBLE */
+    GNSS_LOC_RESULT_REFERENCE_CELL_NOT_SERVING_CELL,         /* reference cell's SFN cannot be decoded */
+
+    /* dedicated for LPP */
+    GNSS_LOC_RESULT_FINE_TIME_ASSISTANCE_MEASUREMENTS_NOT_POSSIBLE,  /* fineTimeAssistanceMeasurementsNotPossible IE present */
+    GNSS_LOC_RESULT_ADR_MEASUREMENTS_NOT_POSSIBLE,                   /* adrMeasurementsNotPossible IE present */
+    GNSS_LOC_RESULT_MULTI_FREQUENCY_MEASUREMENTS_NOT_POSSIBLE        /* multiFrequencyMeasurementsNotPossible IE present */
+    //#ifdef __EARLY_FIX_SUPPORT__
+       ,GNSS_LOC_RESULT_EARLY_FIX,                                       /* Early fix result */
+        GNSS_LOC_RESULT_EARLY_FIX_NO_RESULT                              /* Early fix no result */
+    //#endif
+} gnss_loc_result_enum;
+
+typedef enum {
+    TIME_SIB_RESULT_OK          =0,         /* ERRC/EL1 reported useful info, check fields in lbs_errc_read_time_sib_ind_struct */
+    TIME_SIB_RESULT_NOT_TRY     =1,         /* No valid SIB info, and LBS doesnt need to try again */
+    TIME_SIB_RESULT_RE_TRY      =2,         /* No valid SIB info, and LBS may try again */
+    TIME_SIB_RESULT_TIMEOUT     =3          /* While trying to read SIB for time sync, guard timer timeouts(2s), Can retry, ask ERRC for further check*/
+} time_sib_result_enum;
+
+typedef enum {
+    TIME_SIB_CDMA_SYS_TIME_SYNC  =0,
+    TIME_SIB_CDMA_SYS_TIME_ASYNC =1
+} time_sib_cdma_sys_time_type_enum;
+
+typedef enum {
+    GNSS_TIME,
+    GPS_TIME,
+    UTC_TIME
+} frame_sync_pulse_time_type_enum;
+
+
+/* ---LPPe HA GNSS Interface--- */
+typedef enum
+{
+    GNSS_HA_IONO_MODEL_TYPE_STATIC_MODEL,
+    GNSS_HA_IONO_MODEL_TYPE_PERIODIC_MODEL,
+    GNSS_HA_IONO_MODEL_TYPE_MAX = MAX_ENUM_VALUE
+} gnss_ha_iono_model_type_enum;
+
+
+typedef enum
+{
+    GNSS_HA_COMMON_ASSIST_DATA_TYPE_IONO_MODEL,
+    GNSS_HA_COMMON_ASSIST_DATA_TYPE_TROPO_MODEL,
+    GNSS_HA_COMMON_ASSIST_DATA_TYPE_ALTITUDE,
+    GNSS_HA_COMMON_ASSIST_DATA_TYPE_SOLAR_RAD,
+    GNSS_HA_COMMON_ASSIST_DATA_TYPE_CCP_ASSIST,
+    GNSS_HA_COMMON_ASSIST_DATA_TYPE_MAX = MAX_ENUM_VALUE
+} gnss_ha_common_assist_data_type_enum;
+
+
+typedef enum
+{
+    GNSS_HA_GENERIC_ASSIST_DATA_TYPE_WA_ION_SURF,
+    GNSS_HA_GENERIC_ASSIST_DATA_TYPE_SV_MECHANICS,
+    GNSS_HA_GENERIC_ASSIST_DATA_TYPE_SV_DCB,
+    GNSS_HA_GENERIC_ASSIST_DATA_TYPE_DEGRAD_MODEL,
+    GNSS_HA_GENERIC_ASSIST_DATA_TYPE_CCP_ASSIST,
+    GNSS_HA_GENERIC_ASSIST_DATA_TYPE_NAV_MODEL,
+    GNSS_HA_GENERIC_ASSIST_DATA_TYPE_MAX = MAX_ENUM_VALUE
+} gnss_ha_generic_assist_data_type_enum;
+
+
+typedef enum
+{
+    GNSS_HA_CCP_ASSIST_COMMON_TYPE_COMMOM,
+    GNSS_HA_CCP_ASSIST_COMMON_TYPE_CONTROL,
+    GNSS_HA_CCP_ASSIST_COMMON_TYPE_MAX = MAX_ENUM_VALUE
+} gnss_ha_ccp_assist_common_type_enum;
+
+
+typedef enum
+{
+    GNSS_HA_SV_TYPE_GPS_IIR,
+    GNSS_HA_SV_TYPE_GPS_IIRM,
+    GNSS_HA_SV_TYPE_GPS_IIF,
+    GNSS_HA_SV_TYPE_GPS_III,
+    GNSS_HA_SV_TYPE_GLONASS_M,
+    GNSS_HA_SV_TYPE_GLONASS_K1,
+    GNSS_HA_SV_TYPE_GLONASS_K2,
+    GNSS_HA_SV_TYPE_GLONASS_KM,
+    GNSS_HA_SV_TYPE_UNKNOWN,
+    GNSS_HA_SV_TYPE_MAX = MAX_ENUM_VALUE
+} gnss_ha_sv_type_enum;
+
+
+typedef enum
+{
+   GNSS_HA_DCB_REF_PD_PILOT,
+   GNSS_HA_DCB_REF_PD_DATA,
+   GNSS_HA_DCB_REF_PD_NOT_APPLICABLE,
+   GNSS_HA_DCB_REF_MAX = MAX_ENUM_VALUE
+} gnss_ha_dcb_ref_pd_enum;
+
+
+typedef enum
+{
+    GNSS_HA_CODE_PHASE_ERR_TYPE_RMS,
+    GNSS_HA_CODE_PHASE_ERR_TYPE_CNR,
+    GNSS_HA_CODE_PHASE_ERR_TYPE_MAX = MAX_ENUM_VALUE
+} gnss_ha_code_phase_err_type_enum;
+
+
+typedef enum
+{
+    GNSS_HA_AGNSS_QOR_TYPE_10_M,
+    GNSS_HA_AGNSS_QOR_TYPE_1_KM,
+    GNSS_HA_AGNSS_QOR_TYPE_10_KM,
+    GNSS_HA_AGNSS_QOR_TYPE_100_KM,
+    GNAA_HA_AGNSS_QOR_TYPE_MAX = MAX_ENUM_VALUE
+} gnss_ha_agnss_qor_type_enum;
+
+
+typedef enum
+{
+    GNSS_HA_HORI_UNC_TYPE_CEP,
+    GNSS_HA_HORI_UNC_TYPE_ELLIPSE,
+    GNSS_HA_HORI_UNC_TYPE_MAX = MAX_ENUM_VALUE
+} gnss_ha_hori_unc_type_enum;
+
+
+typedef enum
+{
+    GNSS_HA_MULTIPATH_DETECTION_TYPE_LOW,
+    GNSS_HA_MULTIPATH_DETECTION_TYPE_MODERATE,
+    GNSS_HA_MULTIPATH_DETECTION_TYPE_HIGH,
+    GNSS_HA_MULTIPATH_DETECTION_TYPE_NOT_MEASURED,
+    GNSS_HA_MULTIPATH_DETECTION_TYPE_MAX = MAX_ENUM_VALUE
+} gnss_ha_multipath_detect_type_enum;
+
+
+typedef enum
+{
+    GNSS_HA_TGT_ERR_CAUSE_UNDEFINED,
+    GNSS_HA_TGT_ERR_CAUSE_HA_METHOD_NOT_SUPPORTED,
+    GNSS_HA_TGT_ERR_CAUSE_MAX = MAX_ENUM_VALUE
+} gnss_ha_tgt_err_cause_enum;
+
+
+typedef enum
+{
+    GNSS_HA_TGT_IONO_MEAS_ERR_CAUSE_UNDEFINED,
+    GNSS_HA_TGT_IONO_MEAS_ERR_CAUSE_IONO_MEAS_NOT_SUPPORTED,
+    GNSS_HA_TGT_IONO_MEAS_ERR_CAUSE_IONO_MEAS_NOT_AVAILABLE,
+    GNSS_HA_TGT_IONO_MEAS_ERR_CAUSE_MAX = MAX_ENUM_VALUE
+} gnss_ha_tgt_iono_meas_err_cause_enum;
+
+typedef enum
+{
+    GNSS_HA_TGT_ENV_OBSERVE_ERR_CAUSE_UNDEFINED,
+    GNSS_HA_TGT_ENV_OBSERVE_ERR_CAUSE_SURF_MEAS_NOT_SUPPORTED,
+    GNSS_HA_TGT_ENV_OBSERVE_ERR_CAUSE_SURF_MEAS_NOT_AVAILABLE,
+    GNSS_HA_TGT_ENV_OBSERVE_ERR_CAUSE_MAX = MAX_ENUM_VALUE
+} gnss_ha_tgt_env_observe_err_cause_enum;
+
+
+typedef enum
+{
+    GNSS_HA_TGT_GNSS_ERR_CAUSE_UNDEFINED,
+    GNSS_HA_TGT_GNSS_ERR_CAUSE_GNSS_NOT_SUPPORTED_BY_TARGET,
+    GNSS_HA_TGT_GNSS_ERR_CAUSE_GNSS_UNAVAILABLE_FOR_ALL_REQUESTED_SIGNALS,
+    GNSS_HA_TGT_GNSS_ERR_CAUSE_GNSS_ANTENNA_INFO_NOT_SUPPORTED,
+    GNSS_HA_TGT_GNSS_ERR_CAUSE_GNSS_ANTENNA_INFO_NOT_AVAILABLE,
+    GNSS_HA_TGT_GNSS_ERR_CAUSE_GNSS_PRESSURE_INFO_NOT_SUPPORTED,
+    GNSS_HA_TGT_GNSS_ERR_CAUSE_GNSS_PRESSURE_INFO_NOT_AVAILABLE,
+    GNSS_HA_TGT_GNSS_ERR_CAUSE_GNSS_UNABLE_TO_MODIFY_CTRL_PARAMS,
+    GNSS_HA_TGT_GNSS_ERR_CAUSE_GNSS_MAX = MAX_ENUM_VALUE
+} gnss_ha_tgt_gnss_err_cause_enum;
+
+typedef enum
+{
+    GNSS_HA_STEC_Residual_Correction_b7 = 1,
+    GNSS_HA_STEC_Residual_Correction_b16
+} gnss_stec_residual_correction_enum;
+
+typedef enum
+{
+    GNSS_HA_EqualIntegerAmbiguityLevel_allReferenceStations = 1,
+    GNSS_HA_EqualIntegerAmbiguityLevel_referenceStationList
+} gnss_equal_int_ambiguity_level_enum;
+
+typedef enum
+{
+    GNSS_HA_GNSS_SSR_LIST_OF_CORRECTION_POINTS = 1,
+    GNSS_HA_GNSS_SSR_ARRAY_OF_CORRECTION_POINTS
+} gnss_ssr_correction_points_enum;
+
+typedef enum
+{
+    GNSS_HA_REQ_CCP_REF_STATION_TYPE_POS_BASED,
+    GNSS_HA_REQ_CCP_REF_STATION_TYPE_ID_BASED,
+    GNSS_HA_REQ_CCP_REF_STATION_TYPE_KILL_LIST,
+    GNSS_HA_REQ_CCP_REF_STATION_TYPE_MAX = MAX_ENUM_VALUE
+} gnss_ha_req_ccp_ref_station_type_enum;
+
+typedef enum
+{
+   GNSS_HA_SSR_SAT_REF_DATUM_itrf,
+   GNSS_HA_SSR_SAT_REF_DATUM_regional
+} gnss_ssr_orbit_corrections_sat_ref_datum_enum;
+
+
+/* LPP_GNSS_ID_gnss_id */
+typedef enum {
+    GNSS_LPP_ID_GPS,
+    GNSS_LPP_ID_SBAS,
+    GNSS_LPP_ID_QZSS,
+    GNSS_LPP_ID_GALILEO,
+    GNSS_LPP_ID_GLONASS,
+    GNSS_LPP_ID_BDS,
+    GNSS_LPP_ID_NAVIC,
+    GNSS_LPP_ID_MAX,
+} gnss_id_enum;
+
+
+typedef enum
+{
+    GNSS_CLOCK_MODEL_TYPE_STANDARD,
+    GNSS_CLOCK_MODEL_TYPE_NAV,
+    GNSS_CLOCK_MODEL_TYPE_CNAV,
+    GNSS_CLOCK_MODEL_TYPE_GLONASS,
+    GNSS_CLOCK_MODEL_TYPE_SBAS,
+    GNSS_CLOCK_MODEL_TYPE_BDS,
+    GNSS_CLOCK_MODEL_TYPE_BDS_2,
+    GNSS_CLOCK_MODEL_TYPE_NAVIC
+} gnss_clock_model_type_enum;
+
+
+typedef enum
+{
+    GNSS_ORBIT_MODEL_TYPE_KEPLERIAN_SET,
+    GNSS_ORBIT_MODEL_TYPE_NAV_KEPLERIAN_SET,
+    GNSS_ORBIT_MODEL_TYPE_CNAV_KEPLERIAN_SET,
+    GNSS_ORBIT_MODEL_TYPE_GLONASS_ECEF,
+    GNSS_ORBIT_MODEL_TYPE_SBAS_ECEF,
+    GNSS_ORBIT_MODEL_TYPE_BDS_KEPLERIAN_SET,
+    GNSS_ORBIT_MODEL_TYPE_BDS_KEPLERIAN_SET_2,
+    GNSS_ORBIT_MODEL_TYPE_NAVIC_KEPLERIAN_SET
+} gnss_orbit_model_type_enum;
+
+typedef enum
+{
+    GNSS_ALMANAC_TYPE_KEPLERIAN_SET,
+    GNSS_ALMANAC_TYPE_NAV_KEPLERIAN_SET,
+    GNSS_ALMANAC_TYPE_REDUCED_KEPLERIAN_SET,
+    GNSS_ALMANAC_TYPE_MIDI_KEPLERIAN_SET,
+    GNSS_ALMANAC_TYPE_GLONASS_SET,
+    GNSS_ALMANAC_TYPE_ECEF_SBAS_SET,
+    GNSS_ALMANAC_TYPE_BDS_ALMANAC_SET,
+    GNSS_ALMANAC_TYPE_NAVIC_ALMANAC_SET
+} gnss_almanac_type_enum;
+
+typedef enum{
+    ERRC_MDT_NO_REPORT_LOCATION,
+    ERRC_MDT_REQUEST_STORE_LOCATION,                   /* ERRC request report stored location, LBS will determine report mode by ERRC request and User location setting. */
+    ERRC_MDT_REQUEST_OPEN_GPS                          /* ERRC request report GPS, LBS will determine report mode by ERRC request and User location setting. */
+} errc_lbs_gnss_pos_mdt_type_enum;
+
+typedef enum
+{
+   GNSS_HA_RleIonoElement_ionoIndex_noaaScales_selected = 1,
+   GNSS_HA_RleIonoElement_ionoIndex_UnKnowItem_selected,
+   GNSS_HA_RleIonoElement_ionoIndex_MAX = MAX_ENUM_VALUE
+} gnss_ha_rle_iono_element_selector_enum;
+
+
+typedef enum
+{
+   GNSS_HA_NOAASCALES_G1,
+   GNSS_HA_NOAASCALES_G2,
+   GNSS_HA_NOAASCALES_G3,
+   GNSS_HA_NOAASCALES_G4,
+   GNSS_HA_NOAASCALES_G5,
+   GNSS_HA_NOAASCALES_UNKNOWN,
+   GNSS_HA_NOAASCALES_NONE,
+   GNSS_HA_NOAASCALES_MAX = MAX_ENUM_VALUE
+} gnss_ha_noaa_scales_enum;
+
+
+typedef enum
+{
+   GNSS_HA_ELLIPSOID_POINT_LATITUDESIGN_NORTH,
+   GNSS_HA_ELLIPSOID_POINT_LATITUDESIGN_SOUTH,
+   GNSS_HA_ELLIPSOID_POINT_LATITUDESIGN_MAX = MAX_ENUM_VALUE
+} gnss_ha_ellopsoid_point_latitude_sign_enum;
+
+
+typedef enum
+{
+   GNSS_HA_ANTENNA_DESCRIPTION_IGS_ANTENNA_NAME_SELECTED = 1,
+   GNSS_HA_ANTENNA_DESCRIPTION_PROPRIETARY_NAME_SELECTED,
+   GNSS_HA_ANTENNA_DESCRIPTION_UNKNOWN_ITEM_SELECTED,
+   GNSS_HA_ANTENNA_DESCRIPTION_MAX = MAX_ENUM_VALUE
+} gnss_ha_antenna_description_selector_enum;
+
+
+typedef enum
+{
+   GNSS_HA_NAVMODEL_COORDINATE_BASED_REFERENCED_TO_CENTER_OF_MASS,
+   GNSS_HA_NavModel_COORDINATE_BASED_REFERENCED_TO_ANTENNA_PHASE_CENTER,
+   GNSS_HA_NavModel_COORDINATE_BASED_REFERENCED_TO_MAX = MAX_ENUM_VALUE
+} gnss_ha_nav_model_coordinate_based_referenced_enum;
+
+
+typedef enum
+{
+    LIST_GPS_ASSIST_ALMANAC,
+    LIST_GPS_ASSIST_NAVIGATION_MODEL,
+    LIST_GPS_ASSIST_REF_LOCATION,
+    LIST_GNSS_COMMON_ASSIST_DATA_REF_LOCACTION,
+    LIST_GNSS_GENERIC_ASSIST_DATA_NAVIGATION_MODEL,
+    LIST_GNSS_GENERIC_ASSIST_DATA_ALMANAC,
+
+    LIST_GPS_GNSS_ASSIST_DATA_TYPE_MAX
+} list_gps_gnss_assist_data_type_enum;
+
+
+typedef enum
+{
+    GNSS_RTK_REF_STATION_IND_PHYSICAL,
+    GNSS_RTK_REF_STATION_IND_NON_PHYSICAL
+} gnss_rtk_ref_station_indicator_enum;
+
+
+typedef enum
+{
+    GNSS_ANTENNA_SET_UP_ID_NON_ZERO
+} gnss_antenna_set_up_id_enum;
+
+typedef enum
+{
+    LPP_HA_GNSS_ASSIST_DATA_CTRL_REQ_TYPE_START_QUERY,
+    LPP_HA_GNSS_ASSIST_DATA_CTRL_REQ_TYPE_STOP_QUERY,
+} lpp_ha_gnss_assist_data_ctrl_req_type_enum;
+
+
+typedef enum
+{
+    LPP_HA_GNSS_ASSIST_DATA_SOURCE_CP,
+    LPP_HA_GNSS_ASSIST_DATA_SOURCE_UP,
+} lpp_ha_gnss_assist_data_source_enum;
+
+typedef enum
+{
+    LPP_HA_GNSS_ASSIST_DATA_CTRL_IND_TYPE_NW_PERIODIC_PARAMETER_UPDATE,
+    LPP_HA_GNSS_ASSIST_DATA_CTRL_IND_TYPE_NW_END_TRANSACTION,
+    LPP_HA_GNSS_ASSIST_DATA_CTRL_IND_TYPE_LEGACY_SESSION_ONGOING,
+    LPP_HA_GNSS_ASSIST_DATA_CTRL_IND_TYPE_NW_NOT_AVAILABLE,
+    LPP_HA_GNSS_ASSIST_DATA_CTRL_IND_TYPE_NW_ABORT,
+    LPP_HA_GNSS_ASSIST_DATA_CTRL_IND_TYPE_ASK_RSP
+} lpp_ha_gnss_assist_data_ctrl_ind_type_enum;
+
+
+typedef enum
+{
+    LPP_HA_GNSS_COMMON_ASSIST_DATA_TYPE_RTK_REF_STAT_INFO,
+    LPP_HA_GNSS_COMMON_ASSIST_DATA_TYPE_RTK_COM_OBSERV,
+    LPP_HA_GNSS_COMMON_ASSIST_DATA_TYPE_SSR_CORR
+} lpp_ha_gnss_common_assist_data_type_enum;
+
+
+typedef enum
+{
+    LPP_HA_GNSS_GENERIC_ASSIST_DATA_TYPE_RTK_OBSERV,
+    LPP_HA_GNSS_GENERIC_ASSIST_DATA_TYPE_SSR_ORBIT_CORR,
+    LPP_HA_GNSS_GENERIC_ASSIST_DATA_TYPE_SSR_CLK_CORR,
+    LPP_HA_GNSS_GENERIC_ASSIST_DATA_TYPE_SSR_CODE_BIAS,
+    LPP_HA_GNSS_GENERIC_ASSIST_DATA_TYPE_SSR_URA,
+    LPP_HA_GNSS_GENERIC_ASSIST_DATA_TYPE_SSR_PHASE_BIAS,
+    LPP_HA_GNSS_GENERIC_ASSIST_DATA_TYPE_SSR_STEC_CORR,
+    LPP_HA_GNSS_GENERIC_ASSIST_DATA_TYPE_SSR_GRID_CORR
+} lpp_ha_gnss_generic_assist_data_type_enum;
+
+/*-------------------------------
+  A-GNSS-ProvideAssistanceData
+    -> gnss-CommonAssistData
+-------------------------------*/
+/*=== GNSS Common Assistance Data ===*/
+
+typedef enum
+{
+    SBAS_ID_WAAS   = 0,
+    SBAS_ID_EGNOS  = 1,
+    SBAS_ID_MSAS   = 2,
+    SBAS_ID_GAGAN  = 3,
+    SBAS_ID_BEIDOU = 4,
+    SBAS_ID_END
+} MTK_SBAS_ID_ENUM;
+
+/* 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
+{
+    MTK_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;
+
+/* LPP_GNSS_ReferenceStationID_r15 */
+typedef struct
+{
+    kal_uint16 referenceStationID; /* 0..65535 */
+    kal_bool providerNameValid;
+    kal_uint32 providerNameLen;
+    kal_char providerName[32]; /* SIZE (1..32) */
+} gnss_ref_station_id_struct;
+
+/* LPP_AntennaDescription_r15 */
+typedef struct
+{
+    kal_uint32 antennaDescriptorLen;
+    kal_char antennaDescriptor[256]; /* SIZE (1..256) */
+    kal_bool antennaSetUpIDValid;
+    gnss_antenna_set_up_id_enum antennaSetUpID;
+} gnss_antenna_description_struct;
+
+/* LPP_AntennaReferencePointUnc_r15 */
+typedef struct
+{
+    kal_uint8 uncX; /* 0..255 */
+    kal_uint8 confX; /* 0..100 */
+    kal_uint8 uncY; /* 0..255 */
+    kal_uint8 confY; /* 0..100 */
+    kal_uint8 uncZ; /* 0..255 */
+    kal_uint8 confZ; /* 0..100 */
+} gnss_antenna_ref_point_unc_struct;
+
+/* LPP_PhysicalReferenceStationInfo_r15 */
+typedef struct
+{
+    gnss_ref_station_id_struct physicalReferenceStationID;
+    kal_int64 phyArpEcefX; /* -137438953472..137438953471 */
+    kal_int64 phyArpEcefY; /* -137438953472..137438953471 */
+    kal_int64 phyArpEcefZ; /* -137438953472..137438953471 */
+    kal_bool phyArpUncValid;
+    gnss_antenna_ref_point_unc_struct phyArpUnc; /* OPTIONAL */
+} gnss_physical_ref_station_info_struct;
+
+/* LPP_ReferenceStationList_r16 */
+typedef struct
+{
+    kal_uint8 numRefStationElm;
+    gnss_ref_station_id_struct refStationElm[GNSS_MAX_EQUAL_INT_AMBIGUITY_LEVEL_REF_STATION_ID_NUM];
+} gnss_ref_station_list_struct;
+
+/* LPP_EqualIntegerAmbiguityLevel_r16 */
+typedef struct
+{
+    gnss_equal_int_ambiguity_level_enum selection;
+    union
+    {
+        gnss_ref_station_list_struct refStationList;
+    } choice;
+} gnss_equal_int_ambiguity_level_struct;
+
+/* LPP_GNSS_RTK_ReferenceStationInfo_r15 */
+typedef struct
+{
+    gnss_ref_station_id_struct referenceStationID;
+    gnss_rtk_ref_station_indicator_enum referenceStationIndicator;
+    kal_int64 antennaReferencePointEcefX; /* -137438953472..137438953471 */
+    kal_int64 antennaReferencePointEcefY; /* -137438953472..137438953471 */
+    kal_int64 antennaReferencePointEcefZ; /* -137438953472..137438953471 */
+    kal_bool antennaHeightValid;
+    kal_uint16 antennaHeight; /* 0..65535 */
+    kal_bool antennaDescriptionValid;
+    gnss_antenna_description_struct antennaDescription;
+    kal_bool antennaRefPointUncValid;
+    gnss_antenna_ref_point_unc_struct antennaRefPointUnc;
+    kal_bool phyRefStationInfoValid;
+    gnss_physical_ref_station_info_struct physicalRefStationInfo;
+    kal_bool equalIntAmbiguityLevelValid;
+    gnss_equal_int_ambiguity_level_struct equalIntAmbiguityLevel;
+} gnss_rtk_ref_station_info_struct;
+
+/* LPP_GNSS_RTK_CommonObservationInfo_r15 */
+typedef struct
+{
+    gnss_ref_station_id_struct referenceStationID;
+    kal_uint8 clockSteeringIndicator; /* 0..3 */
+    kal_uint8 externalClockIndicator; /* 0..3 */
+    kal_bool smoothingIndicator; /* KAL_TRUE: Divergence-free smoothing; KAL_FALSE: Other type of smoothing */
+    kal_uint8 smoothingInterval; /* 3 bits */
+} gnss_rtk_common_observ_info_struct;
+
+/* LPP_RelativeLocationElement_r16 */
+typedef struct
+{
+    kal_int16 deltaLatitude; /* -512..511 */
+    kal_int16 deltaLongitude; /* -1024..1023 */
+} gnss_relative_location_element_struct;
+
+/* LPP_GNSS_SSR_ListOfCorrectionPoints_r16_relativeLocationsList_r16 */
+typedef struct
+{
+    kal_uint8 numRelativeLocElm;
+    gnss_relative_location_element_struct relativeLocElm[GNSS_MAX_SSR_RELATIVE_LOCATION_ELEMENT];
+} gnss_relative_locations_list_struct;
+
+/* LPP_GNSS_SSR_ListOfCorrectionPoints_r16 */
+typedef struct
+{
+    kal_int16 referencePointLatitude; /* -16384..16383 */
+    kal_int16 referencePointLongitude; /* -32768..32767 */
+    gnss_relative_locations_list_struct relativeLocList;
+} gnss_ssr_list_of_correction_points_struct;
+
+/* LPP_GNSS_SSR_ArrayOfCorrectionPoints_r16 */
+typedef struct
+{
+    kal_int16 referencePointLatitude; /* -16384..16383 */
+    kal_int16 referencePointLongitude; /* -32768..32767 */
+    kal_uint8 numberOfStepsLatitude; /* 0..63 */
+    kal_uint8 numberOfStepsLongitude; /* 0..63 */
+    kal_uint16 stepOfLatitude; /* 1..511 */
+    kal_uint16 stepOfLongitude; /* 1..1023 */
+    kal_bool bitmaskOfGridsValid;
+    kal_uint8 bitmaskOfGrids[8]; /* Only the first numberOfStepsLatitude*numberOfStepsLongitude bits are used, the remainder are set to '0' */
+} gnss_ssr_array_of_correction_points_struct;
+
+/* LPP_GNSS_SSR_CorrectionPoints_r16_correctionPoints_r16 */
+typedef struct
+{
+    gnss_ssr_correction_points_enum selection;
+    union
+    {
+      gnss_ssr_list_of_correction_points_struct listOfCorrectionPoints;
+      gnss_ssr_array_of_correction_points_struct arrayOfCorrectionPoints;
+    } choice;
+} gnss_correction_points_struct;
+
+/* LPP_GNSS_SSR_CorrectionPoints_r16 */
+typedef struct
+{
+    kal_uint16 correctionPointSetID; /* 0..16383 */
+    gnss_correction_points_struct correctionPoints; /* MANDATORY */
+} gnss_ssr_correction_points_struct;
+
+
+/*-------------------------------
+  A-GNSS-ProvideAssistanceData
+    -> gnss-GenericAssistData
+-------------------------------*/
+
+/* LPP_GNSS_RTK_SatelliteSignalDataElement_r15 */
+typedef struct
+{
+    kal_uint8 gnssSignalID; /* map to GNSS_SGN_ID_VALUE_*, 0..7 */
+    kal_bool gnssSignalIDExtValid; /* KAL_TRUE: gnssSignalID is set to 7 and shall be ignored */
+    kal_uint8 gnssSignalIDExt; /* map to GNSS_SGN_ID_EXT_VALUE_*, 8..23 */
+    kal_int32 finePseudoRange; /* -524288..524287 */
+    kal_int32 finePhaseRange; /* -8388608..8388607 */
+    kal_uint16 lockTimeIndicator; /* 0..1023 */
+    kal_bool halfCycleAmbiguityIndicator; /* KAL_TRUE: half-cycle ambiguity; KAL_FALSE: no half-cycle ambiguity */
+    kal_bool carrierToNoiseRatioValid;
+    kal_uint16 carrierToNoiseRatio; /* 0..1023 */
+    kal_bool finePhaseRangeRateValid;
+    kal_int16 finePhaseRangeRate; /* -16384..16383 */
+} gnss_rtk_sat_signal_data_element_struct;
+
+/* LPP_GNSS_RTK_SatelliteSignalDataList_r15 */
+typedef struct
+{
+    kal_uint8 numRtkSatSigDataElm;
+    gnss_rtk_sat_signal_data_element_struct rtkSatSigDataElm[GNSS_MAX_RTK_SAT_SIGNAL_DATA_ELEMENT];
+} gnss_rtk_sat_signal_data_list_struct;
+
+/* LPP_GNSS_RTK_SatelliteDataElement_r15 */
+typedef struct
+{
+    kal_uint8 svID;
+    kal_bool integerMsValid;
+    kal_uint8 integerMs; /* 0..254 */
+    kal_uint16 roughRange; /* 0..1023 */
+    kal_bool roughPhaseRangeRateValid;
+    kal_int16 roughPhaseRangeRate; /* -8192..8191 */
+    gnss_rtk_sat_signal_data_list_struct rtkSatSigDataList;
+} gnss_rtk_sat_data_element_struct;
+
+/* LPP_GNSS_ObservationList_r15 */
+typedef struct
+{
+    kal_uint8 numRtkSatDataElm;
+    gnss_rtk_sat_data_element_struct rtkSatDataElm[GNSS_MAX_RTK_SAT_DATA_ELEMENT];
+} gnss_observations_list_struct;
+
+/* LPP_GNSS_RTK_Observations_r15 */
+typedef struct
+{
+    gnss_system_time_struct epochTime;
+    gnss_observations_list_struct observationList;
+} gnss_rtk_observations_struct;
+
+/* LPP_SSR_OrbitCorrectionSatelliteElement_r15 */
+typedef struct
+{
+    kal_uint8 svID; /* 0..63 */
+    kal_uint16 iod; /* 11 bits */
+    kal_int32 deltaRadial; /* -2097152..2097151 */
+    kal_int32 deltaAlongTrack; /* -524288..524287 */
+    kal_int32 deltaCrossTrack; /* -524288..524287 */
+    kal_bool dotDeltaRadialValid;
+    kal_int32 dotDeltaRadial; /* -1048576..1048575 */
+    kal_bool dotDeltaAlongTrackValid;
+    kal_int32 dotDeltaAlongTrack; /* -262144..262143 */
+    kal_bool dotDeltaCrossTrackValid;
+    kal_int32 dotDeltaCrossTrack; /* -262144..262143 */
+} gnss_ssr_orbit_correction_sat_element_struct;
+
+/* LPP_SSR_OrbitCorrectionList_r15 */
+typedef struct
+{
+    kal_uint8 numSsrOrbitSatElm;
+    gnss_ssr_orbit_correction_sat_element_struct ssrOrbitSatElm[GNSS_MAX_SSR_ORBIT_CORRECTION_SAT_ELEMENT];
+} gnss_ssr_orbit_correction_list_struct;
+
+/* LPP_GNSS_SSR_OrbitCorrections_r15 */
+typedef struct
+{
+    gnss_system_time_struct epochTime;
+    kal_uint8 ssrUpdateInterval; /* 0..15 */
+    gnss_ssr_orbit_corrections_sat_ref_datum_enum satRefDatum;
+    kal_uint8 iodSsr; /* 0..15 */
+    gnss_ssr_orbit_correction_list_struct ssrOrbitSatList;
+} gnss_ssr_orbit_corrections_struct;
+
+/* LPP_SSR_ClockCorrectionSatelliteElement_r15 */
+typedef struct
+{
+    kal_uint8 svID; /* 0..63 */
+    kal_int32 deltaClockC0; /* -2097152..2097151 */
+    kal_bool deltaClockC1Valid;
+    kal_int32 deltaClockC1; /* -1048576..1048575 */
+    kal_bool deltaClockC2Valid;
+    kal_int32 deltaClockC2; /* -67108864..67108863 */
+} gnss_ssr_clock_correction_sat_element_struct;
+
+/* LPP_SSR_ClockCorrectionList_r15 */
+typedef struct
+{
+    kal_uint8 numSsrClockSatElm;
+    gnss_ssr_clock_correction_sat_element_struct ssrClockSatElm[GNSS_MAX_SSR_CLOCK_CORRECTION_SAT_ELEMENT];
+} gnss_ssr_clock_correction_list_struct;
+
+/* LPP_GNSS_SSR_ClockCorrections_r15 */
+typedef struct
+{
+    gnss_system_time_struct epochTime;
+    kal_uint8 ssrUpdateInterval; /* 0..15 */
+    kal_uint8 iodSsr; /* 0..15 */
+    gnss_ssr_clock_correction_list_struct ssrClockSatList;
+} gnss_ssr_clock_corrections_struct;
+
+/* LPP_SSR_CodeBiasSignalElement_r15 */
+typedef struct
+{
+    kal_uint8 gnssSignalID; /* map to GNSS_SGN_ID_VALUE_*, 0..7 */
+    kal_bool gnssSignalIDExtValid; /* KAL_TRUE: gnssSignalID is set to 7 and shall be ignored */
+    kal_uint8 gnssSignalIDExt; /* map to GNSS_SGN_ID_EXT_VALUE_*, 8..23 */
+    kal_int16 codeBias; /* -8192..8191 */
+} gnss_ssr_code_bias_signal_element_struct;
+
+/* LPP_SSR_CodeBiasSignalList_r15 */
+typedef struct
+{
+    kal_uint8 numSsrCodeBiasSigElm;
+    gnss_ssr_code_bias_signal_element_struct ssrCodeBiasSigElm[GNSS_MAX_SSR_CODE_BIAS_SIG_ELEMENT];
+} gnss_ssr_code_bias_signal_list_struct;
+
+/* LPP_SSR_CodeBiasSatElement_r15 */
+typedef struct
+{
+    kal_uint8 svID; /* 0..63 */
+    gnss_ssr_code_bias_signal_list_struct ssrCodeBiasSigList;
+} gnss_ssr_code_bias_sat_element_struct;
+
+/* LPP_SSR_CodeBiasSatList_r15 */
+typedef struct
+{
+    kal_uint8 numSsrCodeBiasSatElm;
+    gnss_ssr_code_bias_sat_element_struct ssrCodeBiasSatElm[GNSS_MAX_SSR_CODE_BIAS_SAT_ELEMENT];
+} gnss_ssr_code_bias_sat_list_struct;
+
+/* LPP_GNSS_SSR_CodeBias_r15 */
+typedef struct
+{
+    gnss_system_time_struct epochTime;
+    kal_uint8 ssrUpdateInterval; /* 0..15 */
+    kal_uint8 iodSsr; /* 0..15 */
+    gnss_ssr_code_bias_sat_list_struct ssrCodeBiasSatList;
+} gnss_ssr_code_bias_struct;
+
+/* LPP_SSR_URA_SatElement_r16 */
+typedef struct
+{
+    kal_uint8 svID; /* 0..63 */
+    kal_uint8 ssrUra; /* 6 bits. The 3 MSB define the CLASS with a range of 0-7 and the 3 LSB define the VALUE with a range of 0-7 */
+} gnss_ssr_ura_sat_element_struct;
+
+/* LPP_SSR_URA_SatList_r16 */
+typedef struct
+{
+    kal_uint8 numSsrUraSatElm;
+    gnss_ssr_ura_sat_element_struct ssrUraSatElm[GNSS_MAX_SSR_URA_SAT_ELEMENT];
+} gnss_ssr_ura_sat_list_struct;
+
+/* LPP_GNSS_SSR_URA_r16 */
+typedef struct
+{
+    gnss_system_time_struct epochTime;
+    kal_uint8 ssrUpdateInterval; /* 0..15 */
+    kal_uint8 iodSsr; /* 0..15 */
+    gnss_ssr_ura_sat_list_struct ssrUraSatList;
+} gnss_ssr_ura_struct;
+
+/* LPP_SSR_PhaseBiasSignalElement_r16 */
+typedef struct
+{
+    kal_uint8 gnssSignalID; /* map to GNSS_SGN_ID_VALUE_*, 0..7 */
+    kal_bool gnssSignalIDExtValid; /* KAL_TRUE: gnssSignalID is set to 7 and shall be ignored */
+    kal_uint8 gnssSignalIDExt; /* map to GNSS_SGN_ID_EXT_VALUE_*, 8..23 */
+    kal_int16 phaseBias; /* -16384..16383 */
+    kal_uint8 phaseDiscontinuityIndicator; /* 0..3 */
+    kal_bool phaseBiasIntegerIndicatorValid;
+    kal_uint8 phaseBiasIntegerIndicator; /* 0..3 */
+} gnss_ssr_phase_bias_signal_element_struct;
+
+/* LPP_SSR_PhaseBiasSignalList_r16 */
+typedef struct
+{
+    kal_uint8 numSsrPhaseBiasSigElm;
+    gnss_ssr_phase_bias_signal_element_struct ssrPhaseBiasSigElm[GNSS_MAX_SSR_PHASE_BIAS_SIG_ELEMENT];
+} gnss_ssr_phase_bias_signal_list_struct;
+
+/* LPP_SSR_PhaseBiasSatElement_r16 */
+typedef struct
+{
+    kal_uint8 svID; /* 0..63 */
+    gnss_ssr_phase_bias_signal_list_struct ssrPhaseBiasSigList;
+} gnss_ssr_phase_bias_sat_element_struct;
+
+/* LPP_SSR_PhaseBiasSatList_r16 */
+typedef struct
+{
+    kal_uint8 numSsrPhaseBiasSatElm;
+    gnss_ssr_phase_bias_sat_element_struct ssrPhaseBiasSatElm[GNSS_MAX_SSR_PHASE_BIAS_SAT_ELEMENT];
+} gnss_ssr_phase_bias_sat_list_struct;
+
+/* LPP_GNSS_SSR_PhaseBias_r16 */
+typedef struct
+{
+    gnss_system_time_struct epochTime;
+    kal_uint8 ssrUpdateInterval; /* 0..15 */
+    kal_uint8 iodSsr; /* 0..15 */
+    gnss_ssr_phase_bias_sat_list_struct ssrPhaseBiasSatList;
+} gnss_ssr_phase_bias_struct;
+
+/* LPP_STEC_SatElement_r16 */
+typedef struct
+{
+    kal_uint8 svID; /* 0..63 */
+    kal_uint8 stecQualityIndicator; /* 6 bits. The 3 MSB define the CLASS with a range of 0-7 and the 3 LSB define the VALUE with a range of 0-7 */
+    kal_int16 stecC00; /* -8192..8191 */
+    kal_bool stecC01Valid;
+    kal_int16 stecC01; /* -2048..2047 */
+    kal_bool stecC10Valid;
+    kal_int16 stecC10; /* -2048..2047 */
+    kal_bool stecC11Valid;
+    kal_int16 stecC11; /* -512..511 */
+} gnss_stec_sat_element_struct;
+
+/* LPP_STEC_SatList_r16 */
+typedef struct
+{
+    kal_uint8 numStecSatElm;
+    gnss_stec_sat_element_struct stecSatElm[GNSS_MAX_SSR_STEC_SAT_ELEMENT];
+} gnss_stec_sat_list_struct;
+
+/* LPP_GNSS_SSR_STEC_Correction_r16 */
+typedef struct
+{
+    gnss_system_time_struct epochTime;
+    kal_uint8 ssrUpdateInterval; /* 0..15 */
+    kal_uint8 iodSsr; /* 0..15 */
+    kal_uint16 correctionPointSetID; /* 0..16383 */
+    gnss_stec_sat_list_struct stecSatList;
+} gnss_ssr_stec_correction_struct;
+
+/* LPP_TropospericDelayCorrection_r16 */
+typedef struct
+{
+    kal_int16 tropoHydroStaticVerticalDelay; /* -256..255 */
+    kal_int8 tropoWetVerticalDelay; /* -128..127 */
+} gnss_troposperic_delay_correction_struct;
+
+/* LPP_STEC_ResidualSatElement_r16 */
+typedef struct
+{
+    kal_uint8 svID; /* 0..63 */
+    gnss_stec_residual_correction_enum selection;
+    union
+    {
+        kal_int8 b7; /* -64..63 */
+        kal_int16 b16; /* -32768..32767 */
+    } choice;
+} gnss_stec_residual_sat_element_struct;
+
+/* LPP_STEC_ResidualSatList_r16 */
+typedef struct
+{
+    kal_uint8 numResidualSatElm;
+    gnss_stec_residual_sat_element_struct stecResidualSatElm[GNSS_MAX_STEC_RESIDUAL_SAT_ELEMENT];
+} gnss_stec_residual_sat_list_struct;
+
+/* LPP_GridElement_r16 */
+typedef struct
+{
+    kal_bool tropospericDelayCorrectionValid;
+    gnss_troposperic_delay_correction_struct tropospericDelayCorrection; /* OPTIONAL */
+    gnss_stec_residual_sat_list_struct stecResidualSatList;
+} gnss_grid_element_struct;
+
+/* LPP_GridList_r16 */
+typedef struct
+{
+    kal_uint8 numGridElm;
+    gnss_grid_element_struct gridElm[GNSS_MAX_SSR_GRID_ELEMENT];
+} gnss_grid_list_struct;
+
+/* LPP_GNSS_SSR_GriddedCorrection_r16 */
+typedef struct
+{
+    gnss_system_time_struct epochTime;
+    kal_uint8 ssrUpdateInterval; /* 0..15 */
+    kal_uint8 iodSsr; /* 0..15 */
+    kal_bool troposphericDelayQualityIndicatorValid;
+    kal_uint8 troposphericDelayQualityIndicator; /* 6 bits. The 3 MSB define the CLASS with a range of 0-7 and the 3 LSB define the VALUE with a range of 0-7 */
+    kal_uint16 correctionPointSetID; /* 0..16383 */
+    gnss_grid_list_struct gridList;
+} gnss_ssr_gridded_correction_struct;
+
+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;
+
+
+/* LPP_NavIC_EDC_r16 */
+typedef struct
+{
+    kal_int16 navicAlphaEDC; /* -8192..8191 */
+    kal_int16 navicBetaEDC; /* -8192..8191 */
+    kal_int16 navicGammaEDC; /* -16384..16383 */
+    kal_int16 navicAoIcorrection; /* -2048..2047 */
+    kal_int16 navicAoRAcorrection; /* -2048..2047 */
+    kal_int16 navicSemiMajorcorrection; /* -2048..2047 */
+} gnss_navic_edc_struct;
+
+/* LPP_NavIC_CDC_r16 */
+typedef struct
+{
+    kal_int16 navicClockBiasCorrection; /* -4096..4095 */
+    kal_int8 navicClockDriftCorrection; /* -128..127 */
+} gnss_navic_cdc_struct;
+
+/* LPP_NavIC_CorrectionElementAutoNav_r16 */
+typedef struct
+{
+    kal_uint8 svID; /* 0..63 */
+    kal_uint16 navicTod; /* 0..65535 */
+    kal_uint8 navicIodec; /* 0..255 */
+    kal_int8 navicUDRAI; /* -16..15 */
+    kal_int8 navicUDRArateI; /* -16..15 */
+    gnss_navic_edc_struct navicEDC;
+    gnss_navic_cdc_struct navicCDC;
+} gnss_navic_correction_element_auto_nav_struct;
+
+/* LPP_NavIC_CorrectionListAutoNav_r16 */
+typedef struct
+{
+    kal_uint8 numNavicCorrElmAutoNav;
+    gnss_navic_correction_element_auto_nav_struct navicCorrElmAutoNav[GNSS_MAX_NAVIC_CORRECTION_ELEMENT];
+} gnss_navic_correction_list_auto_nav_struct;
+
+/* LPP_NavIC_DifferentialCorrections_r16 */
+typedef struct
+{
+    kal_uint16 navicRefTOWC; /* 0..50400 */
+    gnss_navic_correction_list_auto_nav_struct navicCorrListAutoNav;
+} gnss_navic_differential_corrections_struct;
+
+/* LPP_RegionIgpElement_r16 */
+typedef struct
+{
+    kal_uint8 regionID; /* 0..15 */
+    kal_uint8 givei1; /* 0..15 */
+    kal_uint16 givd1; /* 0..511 */
+    kal_uint8 givei2; /* 0..15 */
+    kal_uint16 givd2; /* 0..511 */
+    kal_uint8 givei3; /* 0..15 */
+    kal_uint16 givd3; /* 0..511 */
+    kal_uint8 givei4; /* 0..15 */
+    kal_uint16 givd4; /* 0..511 */
+    kal_uint8 givei5; /* 0..15 */
+    kal_uint16 givd5; /* 0..511 */
+    kal_uint8 givei6; /* 0..15 */
+    kal_uint16 givd6; /* 0..511 */
+    kal_uint8 givei7; /* 0..15 */
+    kal_uint16 givd7; /* 0..511 */
+    kal_uint8 givei8; /* 0..15 */
+    kal_uint16 givd8; /* 0..511 */
+    kal_uint8 givei9; /* 0..15 */
+    kal_uint16 givd9; /* 0..511 */
+    kal_uint8 givei10; /* 0..15 */
+    kal_uint16 givd10; /* 0..511 */
+    kal_uint8 givei11; /* 0..15 */
+    kal_uint16 givd11; /* 0..511 */
+    kal_uint8 givei12; /* 0..15 */
+    kal_uint16 givd12; /* 0..511 */
+    kal_uint8 givei13; /* 0..15 */
+    kal_uint16 givd13; /* 0..511 */
+    kal_uint8 givei14; /* 0..15 */
+    kal_uint16 givd14; /* 0..511 */
+    kal_uint8 givei15; /* 0..15 */
+    kal_uint16 givd15; /* 0..511 */
+} gnss_region_igp_element_struct;
+
+/* LPP_RegionIgpsList_r16 */
+typedef struct
+{
+    kal_uint8 numRegionIgpElm;
+    gnss_region_igp_element_struct regionIgpElm[GNSS_MAX_NAVIC_REGION_IGP_ELEMENT];
+} gnss_region_igp_list_struct;
+
+/* LPP_NavIC_GridModelParameter_r16 */
+typedef struct
+{
+    kal_uint16 navicRefTOWC; /* 0..50400 */
+    kal_uint16 regionMasked; /* 0..1023 */
+    gnss_region_igp_list_struct regionIgpsList;
+} gnss_navic_grid_model_param_struct;
+
+
+/*-------------------------------
+  Control transaction message
+-------------------------------*/
+
+/* LPP_GNSS_RTK_ReferenceStationInfoReq_r15 */
+typedef struct
+{
+    kal_bool antennaDescriptionReq;
+    kal_bool antennaHeightReq;
+    kal_bool physicalReferenceStationReq;
+    kal_bool stationIDValid;
+    gnss_ref_station_id_struct stationID;
+} gnss_rtk_ref_station_info_req_struct;
+
+/* LPP_GNSS_SSR_CorrectionPointsReq_r16 */
+typedef struct
+{
+   kal_bool corrPointSetIDReqValid;
+   kal_uint16 correctionPointSetIDReq; /* 0..16383 */
+} gnss_ssr_correction_points_req_struct;
+
+/* LPP_GNSS_SignalIDs */
+typedef struct
+{
+    kal_uint8 signalIDs; /* map to GNSS_SGN_ID_BITMAP_* */
+    kal_bool signalIDsExtValid;
+    kal_uint16 signalIDsExt; /* map to GNSS_SGN_ID_EXT_BITMAP_* */
+} gnss_signal_ids_struct;
+
+/* LPP_GNSS_RTK_ObservationsReq_r15 */
+typedef struct
+{
+    gnss_signal_ids_struct gnssRtkSignalsReq;
+    kal_bool gnssRtkIntegerMsReq;
+    kal_bool gnssRtkPhaseRangeRateReq;
+    kal_bool gnssRtkCnrReq;
+    kal_bool stationIDValid;
+    gnss_ref_station_id_struct stationID;
+} gnss_rtk_observations_req_struct;
+
+/* LPP_SatListElement_r15 */
+typedef struct
+{
+    kal_uint8 svID; /* 0..63 */
+    kal_uint16 iod; /* BIT STRING (SIZE(11)) */
+} gnss_sat_list_element_struct;
+
+/* LPP_GNSS_NavListInfo_r15 */
+typedef struct
+{
+    kal_uint8 numSatListElm;
+    gnss_sat_list_element_struct satListElm[GNSS_MAX_SAT_LIST_ELEMENT];
+} gnss_nav_list_info_struct;
+
+/* LPP_GNSS_SSR_OrbitCorrectionsReq_r15 */
+typedef struct
+{
+    gnss_nav_list_info_struct storedNavList;
+} gnss_ssr_orbit_corrections_req_struct;
+
+/* LPP_GNSS_SSR_ClockCorrectionsReq_r15 */
+typedef struct
+{
+    gnss_nav_list_info_struct storedNavList;
+} gnss_ssr_clock_corrections_req_struct;
+
+/* LPP_GNSS_SSR_CodeBiasReq_r15 */
+typedef struct
+{
+    gnss_signal_ids_struct signalAndTrackingModeIdMap;
+    gnss_nav_list_info_struct storedNavList;
+} gnss_ssr_code_bias_req_struct;
+
+/* LPP_GNSS_SSR_PhaseBiasReq_r16 */
+typedef struct
+{
+    gnss_signal_ids_struct signalAndTrackingModeIdMap;
+    gnss_nav_list_info_struct storedNavList;
+} gnss_ssr_phase_bias_req_struct;
+
+typedef struct
+{
+    kal_bool rtkRefStatInfoReqValid;
+    gnss_rtk_ref_station_info_req_struct rtkRefStatInfoReq;
+    kal_bool ssrCorrReqValid;
+    gnss_ssr_correction_points_req_struct ssrCorrReq;
+} lpp_ha_gnss_common_assist_data_request_struct;
+
+typedef struct
+{
+    gnss_id_enum gnssId;
+    kal_bool sbasIdValid;
+    MTK_SBAS_ID_ENUM sbasId;
+
+    kal_bool rtkObservReqValid;
+    gnss_rtk_observations_req_struct rtkObservReq;
+    kal_bool ssrOrbitCorrReqValid;
+    gnss_ssr_orbit_corrections_req_struct ssrOrbitCorrReq;
+    kal_bool ssrClkCorrReqValid;
+    gnss_ssr_clock_corrections_req_struct ssrClkCorrReq;
+    kal_bool ssrCodeBiasReqValid;
+    gnss_ssr_code_bias_req_struct ssrCodeBiasReq;
+    kal_bool ssrUraReqValid;
+    kal_bool ssrPhaseBiasReqValid;
+    gnss_ssr_phase_bias_req_struct ssrPhaseBiasReq;
+    kal_bool ssrStecCorrReqValid;
+    kal_bool ssrGridCorrReqValid;
+    kal_bool gnssBDSGridModelReq;
+} lpp_ha_gnss_generic_assist_data_struct;
+
+/* LPP_GNSS_PeriodicControlParam_r15 */
+typedef struct
+{
+    kal_uint8 deliveryAmount; /* 1..32 */
+    kal_uint8 deliveryInterval; /* 1..64 */
+} gnss_periodic_control_param_struct;
+
+/* LPP_GNSS_PeriodicAssistDataReq_r15 */
+typedef struct
+{
+    kal_bool rtkObservReqValid;
+    gnss_periodic_control_param_struct rtkObservReq;
+    kal_bool ssrOrbitCorrReqValid;
+    gnss_periodic_control_param_struct ssrOrbitCorrReq;
+    kal_bool ssrClkCorrReqValid;
+    gnss_periodic_control_param_struct ssrClkCorrReq;
+    kal_bool ssrCodeBiasReqValid;
+    gnss_periodic_control_param_struct ssrCodeBiasReq;
+    kal_bool ssrUraReqValid;
+    gnss_periodic_control_param_struct ssrUraReq;
+    kal_bool ssrPhaseBiasReqValid;
+    gnss_periodic_control_param_struct ssrPhaseBiasReq;
+    kal_bool ssrStecCorrReqValid;
+    gnss_periodic_control_param_struct ssrStecCorrReq;
+    kal_bool ssrGridCorrReqValid;
+    gnss_periodic_control_param_struct ssrGridCorrReq;
+} gnss_periodic_assist_data_req_struct;
+
+typedef struct
+{
+    lpp_ha_gnss_common_assist_data_request_struct haGnssCommonAssistData;
+    kal_uint8 numGnssGenericAssistData;
+    lpp_ha_gnss_generic_assist_data_struct haGnssGenericAssistData[GNSS_MAX_REQ_ADD_GENERIC_ASSIST_DATA_ELEMENT];
+    gnss_periodic_assist_data_req_struct periodicAssistDataReq;
+} lpp_ha_gnss_assist_data_request_struct;
+
+/* [AP->MD] AGPS_MD_HUGE_DATA_TYPE_LPP_HA_GNSS_ASSIST_DATA_CTRL_REQ */
+typedef struct
+{
+    kal_uint16 internalTransactionID; /* 0..65535 */
+    lpp_ha_gnss_assist_data_ctrl_req_type_enum ctrlReqType;
+    lpp_ha_gnss_assist_data_request_struct haGnssAssistDataReq;
+} lpp_lbs_ha_gnss_assist_data_ctrl_req_struct;
+
+/* [MD->AP] AGPS_MD_HUGE_DATA_TYPE_LPP_HA_GNSS_ASSIST_DATA_CTRL_CNF */
+typedef struct
+{
+    kal_uint16 internalTransactionID; /* 0..65535 */
+} lpp_lbs_ha_gnss_assist_data_ctrl_cnf_struct;
+
+/* LPP_GNSS_PeriodicAssistData_r15 */
+typedef struct
+{
+    kal_bool rtkObservValid;
+    gnss_periodic_control_param_struct rtkObserv;
+    kal_bool ssrOrbitCorrValid;
+    gnss_periodic_control_param_struct ssrOrbitCorr;
+    kal_bool ssrClkCorrValid;
+    gnss_periodic_control_param_struct ssrClkCorr;
+    kal_bool ssrCodeBiasValid;
+    gnss_periodic_control_param_struct ssrCodeBias;
+    kal_bool ssrUraValid;
+    gnss_periodic_control_param_struct ssrUra;
+    kal_bool ssrPhaseBiasValid;
+    gnss_periodic_control_param_struct ssrPhaseBias;
+    kal_bool ssrStecCorrValid;
+    gnss_periodic_control_param_struct ssrStecCorr;
+    kal_bool ssrGridCorrValid;
+    gnss_periodic_control_param_struct ssrGridCorr;
+} gnss_periodic_assist_data_struct;
+
+/* [MD->AP] AGPS_MD_HUGE_DATA_TYPE_LPP_HA_GNSS_ASSIST_DATA_CTRL_IND */
+typedef struct
+{
+    kal_uint16 internalTransactionID; /* 0..65535 */
+    kal_uint8 lppPeriodicSessionID; /* 0..255 */
+    kal_uint8 lppTransactionID; /* 0..255 */
+    lpp_ha_gnss_assist_data_source_enum source;
+    lpp_ha_gnss_assist_data_ctrl_ind_type_enum ctrlIndType;
+    gnss_periodic_assist_data_struct periodicAssistData;
+} lpp_lbs_ha_gnss_assist_data_ctrl_ind_struct;
+
+/* [AP->MD] AGPS_MD_HUGE_DATA_TYPE_LPP_HA_GNSS_ASSIST_DATA_CTRL_RSP */
+typedef struct
+{
+    kal_uint16 internalTransactionID; /* 0..65535 */
+    kal_uint8 lppPeriodicSessionID; /* 0..255 */
+    kal_uint8 lppTransactionID; /* 0..255 */
+} lpp_lbs_ha_gnss_assist_data_ctrl_rsp_struct;
+
+
+/*-------------------------------
+  Data transaction message
+    -> Common assistance data
+-------------------------------*/
+
+/* [MD->AP] AGPS_MD_HUGE_DATA_TYPE_LPP_HA_GNSS_COMMON_ASSIST_DATA_RTK_REF_STAT_INFO_IND */
+typedef struct
+{
+    kal_uint16 internalTransactionID; /* 0..65535 */
+    kal_uint8 lppPeriodicSessionID; /* 0..255 */
+    kal_uint8 lppTransactionID; /* 0..255 */
+    gnss_rtk_ref_station_info_struct rtkRefStatInfo;
+} lpp_lbs_ha_gnss_common_assist_data_rtk_ref_stat_info_ind_struct;
+
+/* [MD->AP] AGPS_MD_HUGE_DATA_TYPE_LPP_HA_GNSS_COMMON_ASSIST_DATA_RTK_COM_OBSERV_IND */
+typedef struct
+{
+    kal_uint16 internalTransactionID; /* 0..65535 */
+    kal_uint8 lppPeriodicSessionID; /* 0..255 */
+    kal_uint8 lppTransactionID; /* 0..255 */
+    gnss_rtk_common_observ_info_struct rtkComObserv;
+} lpp_lbs_ha_gnss_common_assist_data_rtk_com_observ_ind_struct;
+
+/* [MD->AP] AGPS_MD_HUGE_DATA_TYPE_LPP_HA_GNSS_COMMON_ASSIST_DATA_SSR_CORR_IND */
+typedef struct
+{
+    kal_uint16 internalTransactionID; /* 0..65535 */
+    kal_uint8 lppPeriodicSessionID; /* 0..255 */
+    kal_uint8 lppTransactionID; /* 0..255 */
+    gnss_ssr_correction_points_struct ssrCorr;
+} lpp_lbs_ha_gnss_common_assist_data_ssr_corr_ind_struct;
+
+/*-------------------------------
+  Data transaction message
+    -> Generic assistance data
+-------------------------------*/
+
+/* [MD->AP] AGPS_MD_HUGE_DATA_TYPE_LPP_HA_GNSS_GENERIC_ASSIST_DATA_RTK_OBSERV_IND */
+typedef struct
+{
+    kal_uint16 internalTransactionID; /* 0..65535 */
+    kal_uint8 lppPeriodicSessionID; /* 0..255 */
+    kal_uint8 lppTransactionID; /* 0..255 */
+    gnss_id_enum gnssId;
+    kal_bool sbasIdValid; /* only present when gnss is sbas */
+    MTK_SBAS_ID_ENUM sbasId;
+    gnss_rtk_observations_struct rtkObserv;
+} lpp_lbs_ha_gnss_generic_assist_data_rtk_observ_ind_struct;
+
+/* [MD->AP] AGPS_MD_HUGE_DATA_TYPE_LPP_HA_GNSS_GENERIC_ASSIST_DATA_SSR_ORBIT_CORR_IND */
+typedef struct
+{
+    kal_uint16 internalTransactionID; /* 0..65535 */
+    kal_uint8 lppPeriodicSessionID; /* 0..255 */
+    kal_uint8 lppTransactionID; /* 0..255 */
+    gnss_id_enum gnssId;
+    kal_bool sbasIdValid; /* only present when gnss is sbas */
+    MTK_SBAS_ID_ENUM sbasId;
+    gnss_ssr_orbit_corrections_struct ssrOrbitCorr;
+} lpp_lbs_ha_gnss_generic_assist_data_ssr_orbit_corr_ind_struct;
+
+/* [MD->AP] AGPS_MD_HUGE_DATA_TYPE_LPP_HA_GNSS_GENERIC_ASSIST_DATA_SSR_CLK_CORR_IND */
+typedef struct
+{
+    kal_uint16 internalTransactionID; /* 0..65535 */
+    kal_uint8 lppPeriodicSessionID; /* 0..255 */
+    kal_uint8 lppTransactionID; /* 0..255 */
+    gnss_id_enum gnssId;
+    kal_bool sbasIdValid; /* only present when gnss is sbas */
+    MTK_SBAS_ID_ENUM sbasId;
+    gnss_ssr_clock_corrections_struct ssrClkCorr;
+} lpp_lbs_ha_gnss_generic_assist_data_ssr_clk_corr_ind_struct;
+
+/* [MD->AP] AGPS_MD_HUGE_DATA_TYPE_LPP_HA_GNSS_GENERIC_ASSIST_DATA_SSR_CODE_BIAS_IND */
+typedef struct
+{
+    kal_uint16 internalTransactionID; /* 0..65535 */
+    kal_uint8 lppPeriodicSessionID; /* 0..255 */
+    kal_uint8 lppTransactionID; /* 0..255 */
+    gnss_id_enum gnssId;
+    kal_bool sbasIdValid; /* only present when gnss is sbas */
+    MTK_SBAS_ID_ENUM sbasId;
+    gnss_ssr_code_bias_struct ssrCodeBias;
+} lpp_lbs_ha_gnss_generic_assist_data_ssr_code_bias_ind_struct;
+
+/* [MD->AP] AGPS_MD_HUGE_DATA_TYPE_LPP_HA_GNSS_GENERIC_ASSIST_DATA_SSR_URA_IND */
+typedef struct
+{
+    kal_uint16 internalTransactionID; /* 0..65535 */
+    kal_uint8 lppPeriodicSessionID; /* 0..255 */
+    kal_uint8 lppTransactionID; /* 0..255 */
+    gnss_id_enum gnssId;
+    kal_bool sbasIdValid; /* only present when gnss is sbas */
+    MTK_SBAS_ID_ENUM sbasId;
+    gnss_ssr_ura_struct ssrUra;
+} lpp_lbs_ha_gnss_generic_assist_data_ssr_ura_ind_struct;
+
+/* [MD->AP] AGPS_MD_HUGE_DATA_TYPE_LPP_HA_GNSS_GENERIC_ASSIST_DATA_SSR_PHASE_BIAS_IND */
+typedef struct
+{
+    kal_uint16 internalTransactionID; /* 0..65535 */
+    kal_uint8 lppPeriodicSessionID; /* 0..255 */
+    kal_uint8 lppTransactionID; /* 0..255 */
+    gnss_id_enum gnssId;
+    kal_bool sbasIdValid; /* only present when gnss is sbas */
+    MTK_SBAS_ID_ENUM sbasId;
+    gnss_ssr_phase_bias_struct ssrPhaseBias;
+} lpp_lbs_ha_gnss_generic_assist_data_ssr_phase_bias_ind_struct;
+
+/* [MD->AP] AGPS_MD_HUGE_DATA_TYPE_LPP_HA_GNSS_GENERIC_ASSIST_DATA_SSR_STEC_CORR_IND */
+typedef struct
+{
+    kal_uint16 internalTransactionID; /* 0..65535 */
+    kal_uint8 lppPeriodicSessionID; /* 0..255 */
+    kal_uint8 lppTransactionID; /* 0..255 */
+    gnss_id_enum gnssId;
+    kal_bool sbasIdValid; /* only present when gnss is sbas */
+    MTK_SBAS_ID_ENUM sbasId;
+    gnss_ssr_stec_correction_struct ssrStecCorr;
+} lpp_lbs_ha_gnss_generic_assist_data_ssr_stec_corr_ind_struct;
+
+/* [MD->AP] AGPS_MD_HUGE_DATA_TYPE_LPP_HA_GNSS_GENERIC_ASSIST_DATA_SSR_GRID_CORR_IND */
+typedef struct
+{
+    kal_uint16 internalTransactionID; /* 0..65535 */
+    kal_uint8 lppPeriodicSessionID; /* 0..255 */
+    kal_uint8 lppTransactionID; /* 0..255 */
+    gnss_id_enum gnssId;
+    kal_bool sbasIdValid; /* only present when gnss is sbas */
+    MTK_SBAS_ID_ENUM sbasId;
+    gnss_ssr_gridded_correction_struct ssrGridCorr;
+} lpp_lbs_ha_gnss_generic_assist_data_ssr_grid_corr_ind_struct;
+
+/* [MD->AP] AGPS_MD_HUGE_DATA_TYPE_LCSP_GNSS_GENERIC_ASSIST_DATA_BDS_GRID_MODEL_IND */
+typedef struct
+{
+    kal_uint16 internalTransactionID; /* 0..65535 */
+    kal_uint8 lppPeriodicSessionID; /* 0..255 */
+    kal_uint8 lppTransactionID; /* 0..255 */
+    gnss_id_enum gnssId;
+    kal_bool sbasIdValid; /* only present when gnss is sbas */
+    MTK_SBAS_ID_ENUM sbasId;
+    gnss_bds_grid_model_params_struct bdsGridModel;
+} lpp_lbs_lcsp_gnss_generic_assist_data_bds_grid_model_ind_struct;
+
+/* [AP->MD] AGPS_MD_HUGE_DATA_TYPE_LCSP_GNSS_GENERIC_ASSIST_DATA_RSP */
+typedef struct
+{
+    kal_uint16 internalTransactionID; /* 0..65535 */
+    kal_uint8 lppTransactionID;
+    gnss_generic_assist_data_type_enum type;
+} lpp_lbs_lcsp_gnss_generic_assist_data_rsp_struct;
+
+
+/*gnss2lcsp_struct*/
+
+
+
+/*=== GNSS Common Assistance Data ===*/
+
+/* start 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 */
+
+/* ---LPPe HA GNSS Interface---begin--- */
+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;
+
+
+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;
+    //LPP_EXT_OMA_LPPe_RleList  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;
+
+/* 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;
+
+
+typedef struct
+{
+    gnss_ha_validity_period_struct      validityPeriod;   /* specify the time interval over which the storm data is valid */
+    //LPP_EXT_OMA_LPPe_AGNSS_RleListIono  rleListIono;      /* TBD: structure is too big, redefine internal structure? */
+} gnss_ha_storm_element_struct;
+
+
+typedef struct
+{
+    kal_uint8                     numStormElement;
+    gnss_ha_storm_element_struct  stormElement[GNSS_HA_MAX_STORM_ELEMENT];  /* storm indication element per validity period */
+} 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;
+
+
+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;
+    //LPP_EXT_Ellipsoid_Point       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
+{
+    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;
+} gnss_ha_common_ionospheric_model_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;
+    //LPP_EXT_Ellipsoid_Point                     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;
+    //LPP_EXT_Ellipsoid_Point              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_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
+{
+    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 */
+} gnss_ha_common_troposphere_model_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
+{
+    kal_uint16                                   transactionID;
+    kal_uint8                                    numAltitudeAreaElement;
+    gnss_ha_altitude_assist_area_element_struct  altitudeAreaElement[GNSS_HA_MAX_ALTITUDE_ASSIST_AREA_ELEMENT];
+} gnss_ha_common_altitude_assist_struct;
+/* end of gnss_ha_altitude_assist */
+
+
+/* begin of gnss_ha_altitude_assist */
+typedef struct
+{
+    kal_uint16  transactionID;
+    kal_uint16  solarRad;  /* specifies the solar radiation at one AU from the Sun, scale factor 1 Wm^(-2) */
+} gnss_ha_common_solar_radiation_struct;
+/* end of gnss_ha_altitude_assist */
+
+
+/* begin of gnss_ha_common_ccp_assist */
+typedef struct
+{
+    MTK_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;
+
+
+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;
+   //LPP_EXT_OMA_LPPe_AGNSS_AntennaDescription  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
+{
+    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;
+} gnss_ha_common_ccp_assist_struct;
+/* end of gnss_ha_common_ccp_assist */
+
+
+/* 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_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
+{
+    kal_uint16                               transactionID;
+    MTK_GNSS_ID_ENUM                             gnssId;
+
+    kal_uint8                                numDegradModelElement;
+    gnss_ha_degrad_model_element_struct      degradModelElement[GNSS_HA_MAX_DEGRAD_MODEL_ELEMENT];
+} gnss_ha_generic_degradation_model_struct;
+/* end of gnss_ha_degradation_model */
+
+
+/* begin of gnss_ha_generic_ccp_assist */
+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
+{
+    kal_uint16                               transactionID;
+    MTK_GNSS_ID_ENUM                             gnssId;
+    kal_uint8                                numCCPGenericElement;
+    gnss_ha_ccp_generic_element_struct       ccpGenericElement[GNSS_HA_MAX_CCP_GENERIC_ELEMENT];
+} gnss_ha_generic_ccp_assist_struct;
+/* end of gnss_ha_generic_ccp_assist */
+
+
+/* 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
+{
+    MTK_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
+{
+    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.*/
+
+    /* Generic assistance data */
+    kal_uint8                             numGnssSupport;
+    gnss_ha_generic_assist_struct         genericAssistReq[16];
+} gnss_ha_assist_data_request_ind_struct;
+
+typedef struct
+{
+     kal_int32 type; /* refer to agps_md_huge_data_type */
+} gnss_ha_assist_ack_struct;
+
+typedef struct
+{
+    unsigned int u4_lppe_assis_data_bitmap;
+    gnss_ha_ionospheric_static_model_struct *ionospheric_static_model;
+    gnss_ha_ionospheric_periodic_model_struct *ionospheric_periodic_model;
+    gnss_ha_common_troposphere_model_struct *troposphere_model;
+    gnss_ha_common_altitude_assist_struct *altitude_assist;
+    gnss_ha_common_solar_radiation_struct *solar_radiation;
+    gnss_system_time_struct    *ccp_specific_common_para_ref_time;
+    gnss_ha_ccp_assist_common_ctrl_params_struct*  ctrlParams;
+    gnss_ha_generic_ccp_assist_struct *ccp_generic_assist_struct;
+    gnss_ha_generic_degradation_model_struct *generic_degradation_model;
+} gnss_lppe_database;
+typedef struct
+{
+    /*LPPE_enabled is for agent to management lppe assistant data, can be setted by driver*/
+    kal_uint8    LPPE_enabled;
+    /*ionospher must choose one, can't require both according to spec*/
+    kal_bool prefer_ionospheric_static_model;
+    /*common ccp must choose one, can't require both according to spec*/
+    kal_bool prefer_ccp_common_ctrl_params;
+}agent_lppe_config;
+
+
 /*****************************************************************************
  * FUNCTION
  *  mtk_agps_get_param
diff --git a/src/connectivity/gps/2.0/mtk_mnld/mnl/libs/inc/mtk_gps_type.h b/src/connectivity/gps/2.0/mtk_mnld/mnl/libs/inc/mtk_gps_type.h
index 3a61859..9062172 100644
--- a/src/connectivity/gps/2.0/mtk_mnld/mnl/libs/inc/mtk_gps_type.h
+++ b/src/connectivity/gps/2.0/mtk_mnld/mnl/libs/inc/mtk_gps_type.h
@@ -157,25 +157,25 @@
 #define MTK_GNSS_MAX_MEASUREMENT   64
 
 typedef UINT32 MTK_GnssMeasurementflags;
-#define MTK_GNSS_MEASUREMENT_HAS_SNR                               (1<<0)    /** A valid 'snr' is stored in the data structure. */                                  
-#define MTK_GNSS_MEASUREMENT_HAS_ELEVATION                         (1<<1)    /** A valid 'elevation' is stored in the data structure. */                            
-#define MTK_GNSS_MEASUREMENT_HAS_ELEVATION_UNCERTAINTY             (1<<2)    /** A valid 'elevation uncertainty' is stored in the data structure. */                
-#define MTK_GNSS_MEASUREMENT_HAS_AZIMUTH                           (1<<3)    /** A valid 'azimuth' is stored in the data structure. */                              
-#define MTK_GNSS_MEASUREMENT_HAS_AZIMUTH_UNCERTAINTY               (1<<4)    /** A valid 'azimuth uncertainty' is stored in the data structure. */                  
-#define MTK_GNSS_MEASUREMENT_HAS_PSEUDORANGE                       (1<<5)    /** A valid 'pseudorange' is stored in the data structure. */                          
-#define MTK_GNSS_MEASUREMENT_HAS_PSEUDORANGE_UNCERTAINTY           (1<<6)    /** A valid 'pseudorange uncertainty' is stored in the data structure. */              
-#define MTK_GNSS_MEASUREMENT_HAS_CODE_PHASE                        (1<<7)    /** A valid 'code phase' is stored in the data structure. */                           
-#define MTK_GNSS_MEASUREMENT_HAS_CODE_PHASE_UNCERTAINTY            (1<<8)    /** A valid 'code phase uncertainty' is stored in the data structure. */               
-#define MTK_GNSS_MEASUREMENT_HAS_CARRIER_FREQUENCY                 (1<<9)    /** A valid 'carrier frequency' is stored in the data structure. */                    
-#define MTK_GNSS_MEASUREMENT_HAS_CARRIER_CYCLES                    (1<<10)   /** A valid 'carrier cycles' is stored in the data structure. */                       
-#define MTK_GNSS_MEASUREMENT_HAS_CARRIER_PHASE                     (1<<11)   /** A valid 'carrier phase' is stored in the data structure. */                        
-#define MTK_GNSS_MEASUREMENT_HAS_CARRIER_PHASE_UNCERTAINTY         (1<<12)   /** A valid 'carrier phase uncertainty' is stored in the data structure. */            
-#define MTK_GNSS_MEASUREMENT_HAS_AUTOMATIC_GAIN_CONTROL            (1<<13)   /** A valid automatic gain control is stored in the data structure. */                 
-#define MTK_GNSS_MEASUREMENT_HAS_TIME_FROM_LAST_BIT                (1<<14)   /** A valid 'time from last bit' is stored in the data structure. */                   
-#define MTK_GNSS_MEASUREMENT_HAS_DOPPLER_SHIFT                     (1<<15)   /** A valid 'doppler shift' is stored in the data structure. */                        
-#define MTK_GNSS_MEASUREMENT_HAS_HAS_FULL_ISB                      (1<<16)   /** A valid full inter-signal bias is stored in the data structure. */                 
-#define MTK_GNSS_MEASUREMENT_HAS_HAS_FULL_ISB_UNCERTAINTY          (1<<17)   /** A valid full inter-signal bias uncertainty is stored in the data structure. */     
-#define MTK_GNSS_MEASUREMENT_HAS_HAS_SATELLITE_ISB                 (1<<18)   /** A valid satellite inter-signal bias is stored in the data structure. */            
+#define MTK_GNSS_MEASUREMENT_HAS_SNR                               (1<<0)    /** A valid 'snr' is stored in the data structure. */
+#define MTK_GNSS_MEASUREMENT_HAS_ELEVATION                         (1<<1)    /** A valid 'elevation' is stored in the data structure. */
+#define MTK_GNSS_MEASUREMENT_HAS_ELEVATION_UNCERTAINTY             (1<<2)    /** A valid 'elevation uncertainty' is stored in the data structure. */
+#define MTK_GNSS_MEASUREMENT_HAS_AZIMUTH                           (1<<3)    /** A valid 'azimuth' is stored in the data structure. */
+#define MTK_GNSS_MEASUREMENT_HAS_AZIMUTH_UNCERTAINTY               (1<<4)    /** A valid 'azimuth uncertainty' is stored in the data structure. */
+#define MTK_GNSS_MEASUREMENT_HAS_PSEUDORANGE                       (1<<5)    /** A valid 'pseudorange' is stored in the data structure. */
+#define MTK_GNSS_MEASUREMENT_HAS_PSEUDORANGE_UNCERTAINTY           (1<<6)    /** A valid 'pseudorange uncertainty' is stored in the data structure. */
+#define MTK_GNSS_MEASUREMENT_HAS_CODE_PHASE                        (1<<7)    /** A valid 'code phase' is stored in the data structure. */
+#define MTK_GNSS_MEASUREMENT_HAS_CODE_PHASE_UNCERTAINTY            (1<<8)    /** A valid 'code phase uncertainty' is stored in the data structure. */
+#define MTK_GNSS_MEASUREMENT_HAS_CARRIER_FREQUENCY                 (1<<9)    /** A valid 'carrier frequency' is stored in the data structure. */
+#define MTK_GNSS_MEASUREMENT_HAS_CARRIER_CYCLES                    (1<<10)   /** A valid 'carrier cycles' is stored in the data structure. */
+#define MTK_GNSS_MEASUREMENT_HAS_CARRIER_PHASE                     (1<<11)   /** A valid 'carrier phase' is stored in the data structure. */
+#define MTK_GNSS_MEASUREMENT_HAS_CARRIER_PHASE_UNCERTAINTY         (1<<12)   /** A valid 'carrier phase uncertainty' is stored in the data structure. */
+#define MTK_GNSS_MEASUREMENT_HAS_AUTOMATIC_GAIN_CONTROL            (1<<13)   /** A valid automatic gain control is stored in the data structure. */
+#define MTK_GNSS_MEASUREMENT_HAS_TIME_FROM_LAST_BIT                (1<<14)   /** A valid 'time from last bit' is stored in the data structure. */
+#define MTK_GNSS_MEASUREMENT_HAS_DOPPLER_SHIFT                     (1<<15)   /** A valid 'doppler shift' is stored in the data structure. */
+#define MTK_GNSS_MEASUREMENT_HAS_HAS_FULL_ISB                      (1<<16)   /** A valid full inter-signal bias is stored in the data structure. */
+#define MTK_GNSS_MEASUREMENT_HAS_HAS_FULL_ISB_UNCERTAINTY          (1<<17)   /** A valid full inter-signal bias uncertainty is stored in the data structure. */
+#define MTK_GNSS_MEASUREMENT_HAS_HAS_SATELLITE_ISB                 (1<<18)   /** A valid satellite inter-signal bias is stored in the data structure. */
 #define MTK_GNSS_MEASUREMENT_HAS_HAS_SATELLITE_ISB_UNCERTAINTY     (1<<19)   /** A valid satellite inter-signal bias uncertainty is stored in the data structure. */
 
 typedef UINT16 MTK_GnssAccumulatedDeltaRangestate;
@@ -184,7 +184,7 @@
 #define MTK_GNSS_ADR_STATE_RESET                     (1<<1)
 #define MTK_GNSS_ADR_STATE_SLIP                      (1<<2)
 #define MTK_GNSS_ADR_STATE_HALF_RESOLVED             (1<<3)
-#define MTK_GNSS_ADR_STATE_HALF_REPORTED             (1<<4)            
+#define MTK_GNSS_ADR_STATE_HALF_REPORTED             (1<<4)
 
 
 
@@ -222,8 +222,8 @@
 #define MTK_GNSS_MEASUREMENT_STATE_STRING_SYNC           (1<<6)
 #define MTK_GNSS_MEASUREMENT_STATE_TOD_DECODED           (1<<7)
 #define MTK_GNSS_MEASUREMENT_STATE_BDS_D2_SUBFRAME_SYNC  (1<<9)
-#define MTK_GNSS_MEASUREMENT_STATE_STATE_TOW_KNOWN       (1<<14) 
-#define MTK_GNSS_MEASUREMENT_STATE_STATE_TOD_KNOWN       (1<<15) 
+#define MTK_GNSS_MEASUREMENT_STATE_STATE_TOW_KNOWN       (1<<14)
+#define MTK_GNSS_MEASUREMENT_STATE_STATE_TOD_KNOWN       (1<<15)
 
 
 
@@ -440,6 +440,18 @@
     MTK_AGPS_CB_MD_TIME_SYNC_REQ,                 // Case 1: MNL-Initiated
     MTK_AGPS_CB_MD_TIME_INFO_RSP,                 // OK to have a location with time sync
     MTK_AGPS_CB_NOTIFY_LOC_MEA_REPORT,
+
+    MTK_AGPS_CB_START_NTRIP_PPP_SERVICE,
+    MTK_AGPS_CB_STOP_NTRIP_PPP_SERVICE,
+    MTK_AGPS_CB_START_3GPP_PPP_SERVICE,
+    MTK_AGPS_CB_STOP_3GPP_PPP_SERVICE,
+    MTK_AGPS_CB_REQUEST_RTK_PPP_FAST_TABLE,
+    MTK_AGPS_CB_REQUEST_RTK_PPP_AIDING,
+    MTK_AGPS_CB_REQUESTASSISTANCEDATA,
+    MTK_AGPS_CB_PROVIDELOCATIONINFORMATION,
+    MTK_AGPS_CB_ASNACK,
+    MTK_AGPS_CB_RESTART,
+
     MTK_AGPS_CB_END_LIST
 } MTK_GPS_AGPS_CB_MSG_TYPE;
 
@@ -1033,20 +1045,43 @@
   MTK_PARAM_CMD_EXTPVT_GPS_UTC,
   MTK_PARAM_CMD_EXTPVT_GPS_RTI,
   MTK_PARAM_CMD_EXTPVT_GANSS_AUX,
-  MTK_PARAM_CMD_EXTPVT_SET_CN0_MASK,  
-  MTK_PARAM_CMD_EXTPVT_SET_ELE_MASK,  
-  MTK_PARAM_CMD_EXTPVT_SET_STATIC_VEL_MASK,  
-  MTK_PARAM_CMD_EXTPVT_SET_CP_CN0_MASK,  
+  MTK_PARAM_CMD_EXTPVT_SET_CN0_MASK,
+  MTK_PARAM_CMD_EXTPVT_SET_ELE_MASK,
+  MTK_PARAM_CMD_EXTPVT_SET_STATIC_VEL_MASK,
+  MTK_PARAM_CMD_EXTPVT_SET_CP_CN0_MASK,
   MTK_PARAM_CMD_EXTPVT_SET_MEAS_RATE,
   MTK_PARAM_CMD_SET_AGPS_OPEN_TYPE,
   MTK_PARAM_CMD_EXTPVT_SET_GEOFANCE,
-  MTK_PARAM_CMD_RTK_FILL_NMEA_INFO, 
-  MTK_PARAM_CMD_RTK_FILL_POSITION, 
+  MTK_PARAM_CMD_RTK_FILL_NMEA_INFO,
+  MTK_PARAM_CMD_RTK_FILL_POSITION,
   MTK_PARAM_CMD_RTK_STATUS_REPONSE,
   MTK_PARAM_CMD_AUTO_ELEV_CONFIG,
   MTK_PARAM_CMD_AUTO_OPMODE,
   MTK_PARAM_CMD_AUTO_L5_DISABLE,
   MTK_PARAM_CMD_AUTO_FIXRATE,
+  MTK_PARAM_CMD_AUTO_START_WN,
+  MTK_PARAM_CMD_PWM_OP_MODE,
+  MTK_PARAM_CMD_REPORT_CONTROL,
+  MTK_PARAM_CMD_CORRECTION_VECTOR,
+  MTK_PARAM_NTP_TIME,
+  MTK_PARAM_CMD_MSD_INFO,
+  MTK_PARAM_CMD_AIDING_CONFIG,
+  MTK_MSG_AGPS_MSG_DATA_CENTER_AIDING,
+  MTK_MSG_AGPS_MSG_DATA_CENTER_FAST_TABLE,
+  MTK_MSG_AGPS_MSG_DATA_CENTER_STATION_CHANGE,
+  MTK_PARAM_CMD_INJECT_START_MPE,
+  MTK_PARAM_CMD_INJECT_STOP_MPE,
+  MTK_PARAM_CMD_INJECT_ADR_STATUS_MPE,
+  MTK_PARAM_CMD_INJECT_GPS_AIDING_MPE,
+  MTK_PARAM_CMD_CONFIG_BLUE_MEAS_CORR_V2,
+  MTK_PARAM_CMD_PROVIDEASSISTANCEDATA,
+  MTK_PARAM_CMD_REQUETLOCATIONINFORMATION,
+  MTK_MSG_AGPS_MSG_ASN1_BIG_DATA,
+  MTK_PARAM_CMD_APTIMETAG,
+  MTK_PARAM_CMD_ABORT,
+  MTK_PARAM_CMD_AGPS_VERSION,
+  MTK_PARAM_CMD_QueryRequiredAssistanceData,
+  MTK_PARAM_CMD_FREE_ASN1,
 } MTK_GPS_PARAM;
 
 typedef enum{
@@ -1627,7 +1662,7 @@
   UINT8     pps_polarity;     /* Range: 0~1   , Default: 0 */
   INT32     pps_delay;        /* Range: -4000~4000, Default: 0 */
   INT8      elev_mask;        /* Range: 0~90 */
-  UINT8     ga_before_ttff;  //0:Disable,1:Enable
+  UINT8     ga_before_ttff;   //0: Disable, 1: Enable
 } MTK_GPS_INIT_CFG;
 
 #define MTK_GPS_DRIVER_CFG_EXT_SUPPORT
@@ -1962,6 +1997,62 @@
     unsigned long long timestamp;   // Timestamp of SENSOR location
 } MNL_location_input_t;
 
+#pragma pack(push)
+#pragma pack(4)
+typedef struct
+{
+    unsigned int gnss;              // defined in GnssConstellationType
+    unsigned int signal;            // defined in GnssSignalType
+    unsigned int svid;              // index starts from 0, (0,31) for GPS (prn-1), (0,23) for GLONASS (slot-1)
+
+    double cn0;                     // CN0 in dB-Hz
+    double ele;                     // elevation in degrees
+    double azi;                     // azimuth in degrees
+
+    double satPos[3];               // Satellilte 3D position with earth rotation correction, in ECEF (m)
+    double satVel[3];               // Satellilte 3D velocity with earth rotation correction, in ECEF (m/s)
+    double satTimeCorrection;       // in meters
+    double ionoCorrection;          // in meters
+    double tropCorrection;          // in meters
+
+    int multipathState;             // defined in ExtPvtMultipathStateType
+
+    double pr;                      // in meters
+    int prState;                    // defined in ExtPvtPrStateType
+    double prUnc;                   // in meters
+
+    double dr;                      // in meters per second
+    int drState;                    // defined in ExtPvtDrStateType
+    double drUnc;                   // in meters per second
+
+    double cp;                      // in meters
+    int cpState;                    // defined in ExtPvtCpStateType
+    double cpUnc;                   // in meters
+
+    int cycleSlipNumber;            // Cycle-slip number
+
+    int resI4[3];                   // reserved int
+    double resR8[3];                // reserved double
+} MpePvtSatMeasType;
+
+typedef struct
+{
+    unsigned int gpsWeekRound;      // GPS week round
+    unsigned int gpsWeekNum;        // GPS week number
+    double gpsWeekSeconds;          // GPS week seconds (s)
+    double gpsLeapSeconds;          // GPS leap seconds (s)
+
+    double clockTemp;               // TSX temperature (degree C)
+    double clockBias;               // Receiver clock error (m)
+    double clockDrift;              // Receiver clock error drift (m/s)
+    double clockBiasUnc;            // Clock confidence/uncertainty (m)
+    double clockDriftUnc;           // Clock drift confidence/uncertainty (m/s)
+
+    unsigned int numSvs;            // Number of satellites
+    MpePvtSatMeasType satMeas[MTK_GPS_SV_MAX_NUM];
+} MpePvtSatMeasList;
+#pragma pack(pop)
+
 typedef enum
 {
     // To MPE
@@ -1975,6 +2066,7 @@
     CMD_SET_GPS_AIDING_REQ,     //Request MPE send fused location (per request, by FLP)
     CMD_GET_ADR_STATUS_REQ,     // Request MPE send AR & heading status (per request, by MNL)
     CMD_SEND_GPS_TIME_RES,       //Send GPS timeto MPE
+    CMD_SEND_GPS_SAT_RAW,       //Send GPS satellite raw data to MPE
 
     // From MPE
     CMD_START_MPE_RES = 0x20,  //no payload, response MPE start status
@@ -2513,17 +2605,6 @@
 
 typedef enum
 {
-    SBAS_ID_WAAS   = 0,
-    SBAS_ID_EGNOS  = 1,
-    SBAS_ID_MSAS   = 2,
-    SBAS_ID_GAGAN  = 3,
-    SBAS_ID_BEIDOU = 4,
-    SBAS_ID_END
-} MTK_SBAS_ID_ENUM;
-
-
-typedef enum
-{
     GNSS_COMMON_ASSIST_TIM   = 0,
     GNSS_COMMON_ASSIST_LOC   = 1,
     GNSS_COMMON_ASSIST_ION   = 2,
@@ -2546,48 +2627,6 @@
     GNSS_GENERIC_ASSIST_END   = 9,
 } MTK_GNSS_GENERIC_ASSIST_ENUM;
 
-
-typedef enum
-{
-    GNSS_CLOCK_MODEL_TYPE_STANDARD,
-    GNSS_CLOCK_MODEL_TYPE_NAV,
-    GNSS_CLOCK_MODEL_TYPE_CNAV,
-    GNSS_CLOCK_MODEL_TYPE_GLONASS,
-    GNSS_CLOCK_MODEL_TYPE_SBAS
-} gnss_clock_model_type_enum;
-
-
-typedef enum
-{
-    GNSS_ORBIT_MODEL_TYPE_KEPLERIAN_SET,
-    GNSS_ORBIT_MODEL_TYPE_NAV_KEPLERIAN_SET,
-    GNSS_ORBIT_MODEL_TYPE_CNAV_KEPLERIAN_SET,
-    GNSS_ORBIT_MODEL_TYPE_GLONASS_ECEF,
-    GNSS_ORBIT_MODEL_TYPE_SBAS_ECEF
-} gnss_orbit_model_type_enum;
-
-
-typedef enum
-{
-    GNSS_ACQ_ASSIST_DOPPLER_UNCERTAINTY_EXT_ENUM_D60,
-    GNSS_ACQ_ASSIST_DOPPLER_UNCERTAINTY_EXT_ENUM_D80,
-    GNSS_ACQ_ASSIST_DOPPLER_UNCERTAINTY_EXT_ENUM_D100,
-    GNSS_ACQ_ASSIST_DOPPLER_UNCERTAINTY_EXT_ENUM_D120,
-    GNSS_ACQ_ASSIST_DOPPLER_UNCERTAINTY_EXT_ENUM_NO_INFO
-} MTK_GNSS_ACQ_DOPP_UNCERT_EXT_ENUM;
-
-
-typedef enum
-{
-    GNSS_ALMANAC_TYPE_KEPLERIAN_SET,
-    GNSS_ALMANAC_TYPE_NAV_KEPLERIAN_SET,
-    GNSS_ALMANAC_TYPE_REDUCED_KEPLERIAN_SET,
-    GNSS_ALMANAC_TYPE_MIDI_KEPLERIAN_SET,
-    GNSS_ALMANAC_TYPE_GLONASS_SET,
-    GNSS_ALMANAC_TYPE_ECEF_SBAS_SET,
-} gnss_almanac_type_enum;
-
-
 typedef enum
 {
     UTC_MODEL_GPS,
@@ -2824,253 +2863,8 @@
 #define GNSS_HA_ANT_SUPPORT_BIT_ANT_ORIENTATION                  0x02
 
 
-
-/* NNUM ********************************************************************/
-
-typedef enum
-{
-    GNSS_NETWORK_CELL_TYPE_NULL,
-    GNSS_NETWORK_CELL_TYPE_EUTRA,
-    GNSS_NETWORK_CELL_TYPE_UTRA,
-    GNSS_NETWORK_CELL_TYPE_GSM
-} gnss_network_cell_type_enum;
-
-typedef enum
-{
-    GNSS_COMMON_ASSIST_DATA_TYPE_REF_TIME,
-    GNSS_COMMON_ASSIST_DATA_TYPE_REF_LOCACTION,
-    GNSS_COMMON_ASSIST_DATA_TYPE_ION_MODEL,
-    GNSS_COMMON_ASSIST_DATA_TYPE_EARTH_ORIENT_PARAMS
-} gnss_common_assist_data_type_enum;
-
-
-typedef enum
-{
-    GNSS_GENERIC_ASSIST_DATA_TYPE_TIME_MODEL,
-    GNSS_GENERIC_ASSIST_DATA_TYPE_DGNSS_CORRECTION,
-    GNSS_GENERIC_ASSIST_DATA_TYPE_NAVIGATION_MODEL,
-    GNSS_GENERIC_ASSIST_DATA_TYPE_RTI,
-    GNSS_GENERIC_ASSIST_DATA_TYPE_DATA_BIT_ASSIST,
-    GNSS_GENERIC_ASSIST_DATA_TYPE_ACQUISITION,
-    GNSS_GENERIC_ASSIST_DATA_TYPE_ALMANAC,
-    GNSS_GENERIC_ASSIST_DATA_TYPE_UTC_MODEL,
-    GNSS_GENERIC_ASSIST_DATA_TYPE_AUX_INFO
-} gnss_generic_assist_data_type_enum;
-
-typedef enum
-{
-    GNSS_NAV_MODEL_REQ_TYPE_STORED_NAV_LIST,
-    GNSS_NAV_MODEL_REQ_TYPE_REQ_NAV_LIST
-} gnss_nav_model_req_type_enum;
-
-typedef enum
-{
-    GNSS_UTC_MODEL_TYPE_MODEL1,
-    GNSS_UTC_MODEL_TYPE_MODEL2,
-    GNSS_UTC_MODEL_TYPE_MODEL3,
-    GNSS_UTC_MODEL_TYPE_MODEL4
-} gnss_utc_model_type_enum;
-
-
-typedef enum
-{
-    GNSS_AUX_INFO_GNSS_TYPE_GPS,
-    GNSS_AUX_INFO_GNSS_TYPE_GLONASS
-} gnss_aux_info_gnss_type_enum;
-
-
-typedef enum
-{
-    GNSS_POS_RESULT_TYPE_POS_CNF,
-    GNSS_POS_RESULT_TYPE_ASSIST_DATA_REQ
-} gnss_pos_result_type_enum;
-
-
-typedef enum
-{
-    GNSS_MEAS_RESULT_TYPE_MEAS_CNF,
-    GNSS_MEAS_RESULT_TYPE_ASSIST_DATA_REQ
-} gnss_meas_result_type_enum;
-
-
-typedef enum
-{
-    GNSS_LOC_RESULT_NULL,
-    GNSS_LOC_RESULT_NO_ERROR,
-    GNSS_LOC_RESULT_UNDEFINED,
-    GNSS_LOC_RESULT_REQ_TIMEOUT,
-    GNSS_LOC_RESULT_NOT_ENOUGH_SATELLITES,
-    GNSS_LOC_RESULT_ASSIST_DATA_MISSING,  /* not used in POS(MEAS)_REQ/CNF primitive */
-
-    /* dedicated for RRLP */
-    GNSS_LOC_RESULT_METHOD_NOT_SUPPORTED,
-    GNSS_LOC_RESULT_REFERENCE_BTS_NOT_SERVING_BTS,
-
-    /* dedicated for RRC */
-    GNSS_LOC_RESULT_NOT_ACCOMPLISHED_TIMING_OF_CELL_FRAMES,  /* similar to FINE_TIME_ASSISTANCE_MEASUREMENTS_NOT_POSSIBLE */
-    GNSS_LOC_RESULT_REFERENCE_CELL_NOT_SERVING_CELL,         /* reference cell's SFN cannot be decoded */
-
-    /* dedicated for LPP */
-    GNSS_LOC_RESULT_FINE_TIME_ASSISTANCE_MEASUREMENTS_NOT_POSSIBLE,  /* fineTimeAssistanceMeasurementsNotPossible IE present */
-    GNSS_LOC_RESULT_ADR_MEASUREMENTS_NOT_POSSIBLE,                   /* adrMeasurementsNotPossible IE present */
-    GNSS_LOC_RESULT_MULTI_FREQUENCY_MEASUREMENTS_NOT_POSSIBLE        /* multiFrequencyMeasurementsNotPossible IE present */
-
-} gnss_loc_result_enum;
-
-typedef enum {
-    TIME_SIB_RESULT_OK          =0,         /* ERRC/EL1 reported useful info, check fields in lbs_errc_read_time_sib_ind_struct */
-    TIME_SIB_RESULT_NOT_TRY     =1,         /* No valid SIB info, and LBS doesnt need to try again */
-    TIME_SIB_RESULT_RE_TRY      =2,         /* No valid SIB info, and LBS may try again */
-    TIME_SIB_RESULT_TIMEOUT     =3          /* While trying to read SIB for time sync, guard timer timeouts(2s), Can retry, ask ERRC for further check*/
-} time_sib_result_enum;
-
-typedef enum {
-    TIME_SIB_CDMA_SYS_TIME_SYNC  =0,
-    TIME_SIB_CDMA_SYS_TIME_ASYNC =1
-} time_sib_cdma_sys_time_type_enum;
-
-typedef enum {
-    GNSS_TIME,
-    GPS_TIME,
-    UTC_TIME
-} frame_sync_pulse_time_type_enum;
-
-
-/* ---LPPe HA GNSS Interface--- */
-typedef enum
-{
-    GNSS_HA_IONO_MODEL_TYPE_STATIC_MODEL,
-    GNSS_HA_IONO_MODEL_TYPE_PERIODIC_MODEL
-} gnss_ha_iono_model_type_enum;
-
-
-typedef enum
-{
-    GNSS_HA_COMMON_ASSIST_DATA_TYPE_IONO_MODEL,
-    GNSS_HA_COMMON_ASSIST_DATA_TYPE_TROPO_MODEL,
-    GNSS_HA_COMMON_ASSIST_DATA_TYPE_ALTITUDE,
-    GNSS_HA_COMMON_ASSIST_DATA_TYPE_SOLAR_RAD,
-    GNSS_HA_COMMON_ASSIST_DATA_TYPE_CCP_ASSIST,
-} gnss_ha_common_assist_data_type_enum;
-
-
-typedef enum
-{
-    GNSS_HA_GENERIC_ASSIST_DATA_TYPE_WA_ION_SURF,
-    GNSS_HA_GENERIC_ASSIST_DATA_TYPE_SV_MECHANICS,
-    GNSS_HA_GENERIC_ASSIST_DATA_TYPE_SV_DCB,
-    GNSS_HA_GENERIC_ASSIST_DATA_TYPE_DEGRAD_MODEL,
-    GNSS_HA_GENERIC_ASSIST_DATA_TYPE_CCP_ASSIST,
-    GNSS_HA_GENERIC_ASSIST_DATA_TYPE_NAV_MODEL,
-} gnss_ha_generic_assist_data_type_enum;
-
-
-typedef enum
-{
-    GNSS_HA_CCP_ASSIST_COMMON_TYPE_COMMOM,
-    GNSS_HA_CCP_ASSIST_COMMON_TYPE_CONTROL
-} gnss_ha_ccp_assist_common_type_enum;
-
-
-typedef enum
-{
-    GNSS_HA_SV_TYPE_GPS_IIR,
-    GNSS_HA_SV_TYPE_GPS_IIRM,
-    GNSS_HA_SV_TYPE_GPS_IIF,
-    GNSS_HA_SV_TYPE_GPS_III,
-    GNSS_HA_SV_TYPE_GLONASS_M,
-    GNSS_HA_SV_TYPE_GLONASS_K1,
-    GNSS_HA_SV_TYPE_GLONASS_K2,
-    GNSS_HA_SV_TYPE_GLONASS_KM,
-    GNSS_HA_SV_TYPE_UNKNOWN
-} gnss_ha_sv_type_enum;
-
-
-typedef enum
-{
-   GNSS_HA_DCB_REF_PD_PILOT,
-   GNSS_HA_DCB_REF_PD_DATA,
-   GNSS_HA_DCB_REF_PD_NOT_APPLICABLE
-} gnss_ha_dcb_ref_pd_enum;
-
-
-typedef enum
-{
-    GNSS_HA_CODE_PHASE_ERR_TYPE_RMS,
-    GNSS_HA_CODE_PHASE_ERR_TYPE_CNR
-} gnss_ha_code_phase_err_type_enum;
-
-
-typedef enum
-{
-    GNSS_HA_AGNSS_QOR_TYPE_10_M,
-    GNSS_HA_AGNSS_QOR_TYPE_1_KM,
-    GNSS_HA_AGNSS_QOR_TYPE_10_KM,
-    GNSS_HA_AGNSS_QOR_TYPE_100_KM
-} gnss_ha_agnss_qor_type_enum;
-
-
-typedef enum
-{
-    GNSS_HA_HORI_UNC_TYPE_CEP,
-    GNSS_HA_HORI_UNC_TYPE_ELLIPSE
-} gnss_ha_hori_unc_type_enum;
-
-
-typedef enum
-{
-    GNSS_HA_MULTIPATH_DETECTION_TYPE_LOW,
-    GNSS_HA_MULTIPATH_DETECTION_TYPE_MODERATE,
-    GNSS_HA_MULTIPATH_DETECTION_TYPE_HIGH,
-    GNSS_HA_MULTIPATH_DETECTION_TYPE_NOT_MEASURED
-} gnss_ha_multipath_detect_type_enum;
-
-
-typedef enum
-{
-    GNSS_HA_TGT_ERR_CAUSE_UNDEFINED,
-    GNSS_HA_TGT_ERR_CAUSE_HA_METHOD_NOT_SUPPORTED
-} gnss_ha_tgt_err_cause_enum;
-
-
-typedef enum
-{
-    GNSS_HA_TGT_IONO_MEAS_ERR_CAUSE_UNDEFINED,
-    GNSS_HA_TGT_IONO_MEAS_ERR_CAUSE_IONO_MEAS_NOT_SUPPORTED,
-    GNSS_HA_TGT_IONO_MEAS_ERR_CAUSE_IONO_MEAS_NOT_AVAILABLE
-} gnss_ha_tgt_iono_meas_err_cause_enum;
-
-typedef enum
-{
-    GNSS_HA_TGT_ENV_OBSERVE_ERR_CAUSE_UNDEFINED,
-    GNSS_HA_TGT_ENV_OBSERVE_ERR_CAUSE_SURF_MEAS_NOT_SUPPORTED,
-    GNSS_HA_TGT_ENV_OBSERVE_ERR_CAUSE_SURF_MEAS_NOT_AVAILABLE
-} gnss_ha_tgt_env_observe_err_cause_enum;
-
-
-typedef enum
-{
-    GNSS_HA_TGT_GNSS_ERR_CAUSE_UNDEFINED,
-    GNSS_HA_TGT_GNSS_ERR_CAUSE_GNSS_NOT_SUPPORTED_BY_TARGET,
-    GNSS_HA_TGT_GNSS_ERR_CAUSE_GNSS_UNAVAILABLE_FOR_ALL_REQUESTED_SIGNALS,
-    GNSS_HA_TGT_GNSS_ERR_CAUSE_GNSS_ANTENNA_INFO_NOT_SUPPORTED,
-    GNSS_HA_TGT_GNSS_ERR_CAUSE_GNSS_ANTENNA_INFO_NOT_AVAILABLE,
-    GNSS_HA_TGT_GNSS_ERR_CAUSE_GNSS_PRESSURE_INFO_NOT_SUPPORTED,
-    GNSS_HA_TGT_GNSS_ERR_CAUSE_GNSS_PRESSURE_INFO_NOT_AVAILABLE,
-    GNSS_HA_TGT_GNSS_ERR_CAUSE_GNSS_UNABLE_TO_MODIFY_CTRL_PARAMS
-} gnss_ha_tgt_gnss_err_cause_enum;
-
-
-typedef enum
-{
-    GNSS_HA_REQ_CCP_REF_STATION_TYPE_POS_BASED,
-    GNSS_HA_REQ_CCP_REF_STATION_TYPE_ID_BASED,
-    GNSS_HA_REQ_CCP_REF_STATION_TYPE_KILL_LIST
-} gnss_ha_req_ccp_ref_station_type_enum;
-
-/*gnss2lcsp_struct*/
-
 typedef char                kal_bool;
+typedef char                kal_char;
 typedef unsigned char       kal_uint8;
 typedef char                kal_int8;
 typedef unsigned short      kal_uint16;
@@ -3080,782 +2874,6 @@
 typedef unsigned long long  kal_uint64;
 typedef long long           kal_int64;
 
-/*=== 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
-{
-    MTK_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;
-
-/* 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 */
-
-/* ---LPPe HA GNSS Interface---begin--- */
-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;
-
-
-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;
-    //LPP_EXT_OMA_LPPe_RleList  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;
-
-/* 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;
-
-
-typedef struct
-{
-    gnss_ha_validity_period_struct      validityPeriod;   /* specify the time interval over which the storm data is valid */
-    //LPP_EXT_OMA_LPPe_AGNSS_RleListIono  rleListIono;      /* TBD: structure is too big, redefine internal structure? */
-} gnss_ha_storm_element_struct;
-
-
-typedef struct
-{
-    kal_uint8                     numStormElement;
-    gnss_ha_storm_element_struct  stormElement[GNSS_HA_MAX_STORM_ELEMENT];  /* storm indication element per validity period */
-} 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;
-
-
-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;
-    //LPP_EXT_Ellipsoid_Point       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
-{
-    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;
-} gnss_ha_common_ionospheric_model_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;
-    //LPP_EXT_Ellipsoid_Point                     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;
-    //LPP_EXT_Ellipsoid_Point              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_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
-{
-    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 */
-} gnss_ha_common_troposphere_model_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
-{
-    kal_uint16                                   transactionID;
-    kal_uint8                                    numAltitudeAreaElement;
-    gnss_ha_altitude_assist_area_element_struct  altitudeAreaElement[GNSS_HA_MAX_ALTITUDE_ASSIST_AREA_ELEMENT];
-} gnss_ha_common_altitude_assist_struct;
-/* end of gnss_ha_altitude_assist */
-
-
-/* begin of gnss_ha_altitude_assist */
-typedef struct
-{
-    kal_uint16  transactionID;
-    kal_uint16  solarRad;  /* specifies the solar radiation at one AU from the Sun, scale factor 1 Wm^(-2) */
-} gnss_ha_common_solar_radiation_struct;
-/* end of gnss_ha_altitude_assist */
-
-
-/* begin of gnss_ha_common_ccp_assist */
-typedef struct
-{
-    MTK_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;
-
-
-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;
-   //LPP_EXT_OMA_LPPe_AGNSS_AntennaDescription  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
-{
-    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;
-} gnss_ha_common_ccp_assist_struct;
-/* end of gnss_ha_common_ccp_assist */
-
-
-/* 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_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
-{
-    kal_uint16                               transactionID;
-    MTK_GNSS_ID_ENUM                             gnssId;
-
-    kal_uint8                                numDegradModelElement;
-    gnss_ha_degrad_model_element_struct      degradModelElement[GNSS_HA_MAX_DEGRAD_MODEL_ELEMENT];
-} gnss_ha_generic_degradation_model_struct;
-/* end of gnss_ha_degradation_model */
-
-
-/* begin of gnss_ha_generic_ccp_assist */
-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
-{
-    kal_uint16                               transactionID;
-    MTK_GNSS_ID_ENUM                             gnssId;
-    kal_uint8                                numCCPGenericElement;
-    gnss_ha_ccp_generic_element_struct       ccpGenericElement[GNSS_HA_MAX_CCP_GENERIC_ELEMENT];
-} gnss_ha_generic_ccp_assist_struct;
-/* end of gnss_ha_generic_ccp_assist */
-
-
-/* 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
-{
-    MTK_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
-{
-    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.*/
-
-    /* Generic assistance data */
-    kal_uint8                             numGnssSupport;
-    gnss_ha_generic_assist_struct         genericAssistReq[16];
-} gnss_ha_assist_data_request_ind_struct;
-
-typedef struct
-{
-     kal_int32 type; /* refer to agps_md_huge_data_type */
-} gnss_ha_assist_ack_struct;
-
-typedef struct
-{
-    unsigned int u4_lppe_assis_data_bitmap;
-    gnss_ha_ionospheric_static_model_struct *ionospheric_static_model;
-    gnss_ha_ionospheric_periodic_model_struct *ionospheric_periodic_model;
-    gnss_ha_common_troposphere_model_struct *troposphere_model;
-    gnss_ha_common_altitude_assist_struct *altitude_assist;
-    gnss_ha_common_solar_radiation_struct *solar_radiation;
-    gnss_system_time_struct    *ccp_specific_common_para_ref_time;
-    gnss_ha_ccp_assist_common_ctrl_params_struct*  ctrlParams;
-    gnss_ha_generic_ccp_assist_struct *ccp_generic_assist_struct;
-    gnss_ha_generic_degradation_model_struct *generic_degradation_model;
-} gnss_lppe_database;
-typedef struct
-{
-    /*LPPE_enabled is for agent to management lppe assistant data, can be setted by driver*/
-    kal_uint8    LPPE_enabled;
-    /*ionospher must choose one, can't require both according to spec*/
-    kal_bool prefer_ionospheric_static_model;
-    /*common ccp must choose one, can't require both according to spec*/
-    kal_bool prefer_ccp_common_ctrl_params;
-}agent_lppe_config;
-
-
 
 /*for PMTK763*/
 typedef struct
diff --git a/src/connectivity/gps/2.0/mtk_mnld/mnld_entity/inc/epo.h b/src/connectivity/gps/2.0/mtk_mnld/mnld_entity/inc/epo.h
index fcd85e8..4dbf323 100644
--- a/src/connectivity/gps/2.0/mtk_mnld/mnld_entity/inc/epo.h
+++ b/src/connectivity/gps/2.0/mtk_mnld/mnld_entity/inc/epo.h
@@ -24,8 +24,8 @@
 #define GPS_EPO_FILE_LEN  MTK_GPS_EPO_FILE_NAME_LEN
 #define GPS_EPO_URL_LEN 256
 
-#define EPO_URL_HOME_C "https://qepodownload.mediatek.com/"
-#define EPO_URL_HOME_G "https://qgepodownload.mediatek.com/"
+#define EPO_URL_HOME_C "https://aepodownload.mediatek.com/"
+#define EPO_URL_HOME_G "https://aepodownload.mediatek.com/"
 
 typedef struct EPO_Status {
     unsigned int EPO_piece_flag[MAX_EPO_PIECE];
diff --git a/src/connectivity/gps/2.0/mtk_mnld/mnld_entity/src/gps_controller.c b/src/connectivity/gps/2.0/mtk_mnld/mnld_entity/src/gps_controller.c
index 7511179..5c73119 100755
--- a/src/connectivity/gps/2.0/mtk_mnld/mnld_entity/src/gps_controller.c
+++ b/src/connectivity/gps/2.0/mtk_mnld/mnld_entity/src/gps_controller.c
@@ -215,6 +215,7 @@
 extern UINT8 lppe_enable;
 extern UINT8 enable_debug2app;
 
+extern int mnl2agps_gps_close();
 extern int mnld_init();
 extern int mtk_gps_sys_init();
 extern int mtk_gps_sys_uninit();
@@ -2244,6 +2245,10 @@
         mnld_feadback_time_to_MD((gnss_timeOfDay_with_unc*)data);
     }
     #endif
+    else if (type == MTK_AGPS_CB_RESTART) {
+        mnl2agps_gps_close();
+        LOGD("AGPS notify restart");
+    }
     return ret;
 }
 
diff --git a/src/multimedia/audio-misc/audio-ctrl-service/audio_big_sw/audio-ctrl-service-interface.c b/src/multimedia/audio-misc/audio-ctrl-service/audio_big_sw/audio-ctrl-service-interface.c
index e418f3c..e096a28 100755
--- a/src/multimedia/audio-misc/audio-ctrl-service/audio_big_sw/audio-ctrl-service-interface.c
+++ b/src/multimedia/audio-misc/audio-ctrl-service/audio_big_sw/audio-ctrl-service-interface.c
@@ -1,3 +1,4 @@
+// SPDX-License-Identifier: MediaTekProprietary
 #include <stdio.h>
 #include <string.h>
 #include <unistd.h>
diff --git a/src/multimedia/audio-misc/audio-ctrl-service/audio_big_sw/audio-ctrl-service.c b/src/multimedia/audio-misc/audio-ctrl-service/audio_big_sw/audio-ctrl-service.c
index ae57e14..3012c0c 100755
--- a/src/multimedia/audio-misc/audio-ctrl-service/audio_big_sw/audio-ctrl-service.c
+++ b/src/multimedia/audio-misc/audio-ctrl-service/audio_big_sw/audio-ctrl-service.c
@@ -1,3 +1,4 @@
+// SPDX-License-Identifier: MediaTekProprietary
 #include "AudioParamParser.h"
 #include "AudioParamParserPriv.h"
 #include "xml_parser_def.h"
diff --git a/src/multimedia/audio-misc/audio-ctrl-service/audio_big_sw/audio_ctrl_service_api.h b/src/multimedia/audio-misc/audio-ctrl-service/audio_big_sw/audio_ctrl_service_api.h
index 90c9ca3..2b68e4c 100755
--- a/src/multimedia/audio-misc/audio-ctrl-service/audio_big_sw/audio_ctrl_service_api.h
+++ b/src/multimedia/audio-misc/audio-ctrl-service/audio_big_sw/audio_ctrl_service_api.h
@@ -1,3 +1,4 @@
+// SPDX-License-Identifier: MediaTekProprietary
 #ifndef _AUDIO_CTRL_SERVICE_API_H_
 #define _AUDIO_CTRL_SERVICE_API_H_
 
diff --git a/src/telephonyware/3.0/hardware/ril/fusion/libril/ril.cpp b/src/telephonyware/3.0/hardware/ril/fusion/libril/ril.cpp
index 49704a1..0ef8d3e 100755
--- a/src/telephonyware/3.0/hardware/ril/fusion/libril/ril.cpp
+++ b/src/telephonyware/3.0/hardware/ril/fusion/libril/ril.cpp
@@ -6473,13 +6473,11 @@
             }
 
             RLOGD("RIL_client_register create socket clientSocketName %s", clientSocketName);
-
             s_fdCommand_client[i] = -1;
             if (createClientSocket(clientSocketName, i) < 0) {
                 RLOGE("create client failed");
                 return;
             }
-
         }
     }
 }
@@ -6660,7 +6658,7 @@
 //            #endif
 //        }
 //    }
-
+    // initialize mutex
     for (int i = 0; i < RIL_SOCKET_NUM; i++) {
         pthread_mutex_init(&s_state_mutex[i], NULL);
         pthread_mutex_init(&s_pendingUrcMutex[i], NULL);
@@ -6692,11 +6690,6 @@
     startListen(RIL_SOCKET_4, &s_ril_param_socket4);
     }
 
-    // initialize mutex
-    //for (int i = 0; i < RIL_SOCKET_NUM; i++) {
-    //    pthread_mutex_init(&s_pendingUrcMutex[i], NULL);
-    //    s_fdCommand[i] = -1;
-    //}
     /// @}
     RILJ_register();
 
diff --git a/src/telephonyware/3.0/hardware/ril/fusion/libril/rilmipc/telephony/network/RpNwController.cpp b/src/telephonyware/3.0/hardware/ril/fusion/libril/rilmipc/telephony/network/RpNwController.cpp
index 5bc81bd..c4fddf2 100755
--- a/src/telephonyware/3.0/hardware/ril/fusion/libril/rilmipc/telephony/network/RpNwController.cpp
+++ b/src/telephonyware/3.0/hardware/ril/fusion/libril/rilmipc/telephony/network/RpNwController.cpp
@@ -305,6 +305,17 @@
     }
 }
 
+int boundarycheck (int variable, int upperbound, int lowerbound)
+{
+    if (variable >= upperbound) {
+        return upperbound;
+    }
+    else if (variable <= lowerbound) {
+        return lowerbound;
+    }
+    return variable;
+}
+
 void mipc_unsol_nitz_time_recv_cb(
     mipc_sim_ps_id_enum sim_ps_id,
     mipc_nw_nitz_info_struct4 *result_ptr,
@@ -691,11 +702,6 @@
     uint32_t count = 0;
     uint32_t gsm_cell_count, utms_cell_count,lte_cell_count,nr_cell_count;
 
-/*Typethree merge MTK patch to fixed signal define difference 2023/01/18 start*/
-    int INVALID = INT_MAX; // 0x7FFFFFFF;
-    int INVALID_IE = 0XFF;
-/*Typethree merge MTK patch to fixed signal define difference 2023/01/18 end*/
-
     gsm_cell_count = mipc_nw_ecell_ind_get_gsm_cell_count(msg_ptr,0);
     utms_cell_count = mipc_nw_ecell_ind_get_umts_cell_count(msg_ptr,0);
     lte_cell_count = mipc_nw_ecell_ind_get_lte_cell_count(msg_ptr,0);
@@ -767,41 +773,24 @@
             mipc_nw_lte_cell_struct4* lte_cell = mipc_nw_ecell_ind_get_lte_cell_list(msg_ptr,NULL);
             if(lte_cell != NULL) {
                 for(uint32_t i = 0; i < lte_cell_count; i++) {
-/*Typethree merge MTK patch to fixed signal define difference 2023/01/18 start*/
-#if 0
-                    int aosp_rsrp =
-                        lte_cell->rsrp_in_qdbm != INVALID ? -lte_cell->rsrp_in_qdbm / 4 : INVALID;
-                    if (aosp_rsrp > 140 && aosp_rsrp != INVALID) aosp_rsrp = 140;
-                    else if (aosp_rsrp < 44 && aosp_rsrp != INVALID) aosp_rsrp = 44;
 
-                    int aosp_rsrq =
-                        lte_cell->rsrq_in_qdbm != INVALID ? -lte_cell->rsrq_in_qdbm / 4 : INVALID;
-                    if (aosp_rsrq > 20 && aosp_rsrq != INVALID) aosp_rsrq = 20;
-                    else if (aosp_rsrq < 3 && aosp_rsrq != INVALID) aosp_rsrq = 3;
-#else
-                    int aosp_rsrp =
-                        lte_cell->rsrp != INVALID ? (141 - lte_cell->rsrp) : INVALID;
-                    if (aosp_rsrp > 140 && aosp_rsrp != INVALID) aosp_rsrp = 140;
-                    else if (aosp_rsrp < 44 && aosp_rsrp != INVALID) aosp_rsrp = 44;
+                    int aosp_rsrp = 141 - lte_cell->rsrp;
+                    aosp_rsrp = boundarycheck (aosp_rsrp, 140, 44);
 
-                    int aosp_rsrq =
-                        lte_cell->rsrq != INVALID ? ((40 - lte_cell->rsrq) >> 1) : INVALID;
-                    if (aosp_rsrq > 20 && aosp_rsrq != INVALID) aosp_rsrq = 20;
-                    else if (aosp_rsrq < 3 && aosp_rsrq != INVALID) aosp_rsrq = 3;
-#endif
+                    int aosp_rsrq = (40 - lte_cell->rsrq) >> 1;
+                    aosp_rsrq = boundarycheck (aosp_rsrq, 20, 3);
+
                     int aosp_cqi = lte_cell->cqi;
-                    if (aosp_cqi < 0 && aosp_cqi != INVALID) aosp_cqi = 0;
-                    else if (aosp_cqi > 15 && aosp_cqi != INVALID) aosp_cqi = 15;
+                    aosp_cqi = boundarycheck (aosp_cqi, 15, 0);
 
-                    int aosp_ta = lte_cell->ta != INVALID ? (int)(lte_cell->ta) : INVALID;
-                    if (aosp_ta < 0 && aosp_ta != INVALID) aosp_ta = 0;
-                    else if (aosp_ta > 0x7FFFFFFE && aosp_ta != INVALID) aosp_ta = 0x7FFFFFFE;
+                    int aosp_ta = (int)(lte_cell->ta);
+                    aosp_ta = boundarycheck (aosp_ta, 0x7FFFFFFE, 0);
 
                     RFX_LOG_D(RFX_LOG_TAG,"lte_cell_count: aosp_rsrp:%d, aosp_rsrq:%d, aosp_cqi:%d, aosp_ta:%d",
                             aosp_rsrp, aosp_rsrq, aosp_cqi, aosp_ta);
                     RFX_LOG_D(RFX_LOG_TAG,"lte_cell_count: rsrp:%d, rsrq:%d, rsrp_in_qdbm:%d, rsrq_in_qdbm:%d, rssnr:%d, cqi:%d, ta:%d",
                             lte_cell->rsrp, lte_cell->rsrq, lte_cell->rsrp_in_qdbm, lte_cell->rsrq_in_qdbm, lte_cell->rssnr, lte_cell->cqi, lte_cell->ta);
-/*Typethree merge MTK patch to fixed signal define difference 2023/01/18 end*/
+
                     p->writeInt32(RIL_CELL_INFO_TYPE_LTE);
                     p->writeInt32(lte_cell->state);
                     p->writeInt32(0);
@@ -814,7 +803,7 @@
                     p->writeInt32(lte_cell->physical_cell_id);
                     p->writeInt32(lte_cell->tac);
                     p->writeInt32(lte_cell->earfcn);
-/*Typethree merge MTK patch to fixed signal define difference 2023/01/18 start*/
+
                     /* For LTE, the ext1((rssnr)) in +ECELL is rssi, and format follows 27.007 +CSQ. alps05878992  */
                     p->writeInt32(lte_cell->rssnr); //signalStrength
                     p->writeInt32(aosp_rsrp);
@@ -823,7 +812,6 @@
                     p->writeInt32(0); //rssnr
                     p->writeInt32(aosp_cqi); //cqi
                     p->writeInt32(aosp_ta);
-/*Typethree merge MTK patch to fixed signal define difference 2023/01/18 end*/
                 }
             }
         }
@@ -832,36 +820,24 @@
             mipc_nw_nr_cell_struct4* nr_cell = mipc_nw_ecell_ind_get_nr_cell_list(msg_ptr,NULL);
             if(nr_cell != NULL) {
                 for(uint32_t i = 0; i < nr_cell_count; i++) {
-/*Typethree merge MTK patch to fixed signal define difference 2023/01/18 start*/
-                    int aosp_nr_ssrsrp =
-                        nr_cell->rsrp != INVALID_IE ? (157 - nr_cell->rsrp) : INVALID;
-                    if (aosp_nr_ssrsrp > 140 && aosp_nr_ssrsrp != INVALID) aosp_nr_ssrsrp = 140;
-                    else if (aosp_nr_ssrsrp < 44 && aosp_nr_ssrsrp != INVALID) aosp_nr_ssrsrp = 44;
 
-                    int aosp_nr_ssrsrq =
-                        nr_cell->rsrq != INVALID_IE ? ((87 - nr_cell->rsrq) >> 1) : INVALID;
-                    if (aosp_nr_ssrsrq > 20 && aosp_nr_ssrsrq != INVALID) aosp_nr_ssrsrq = 20;
-                    else if (aosp_nr_ssrsrq < 3 && aosp_nr_ssrsrq != INVALID) aosp_nr_ssrsrq = 3;
+                    int aosp_nr_ssrsrp = 157 - nr_cell->rsrp;
+                    aosp_nr_ssrsrp = boundarycheck (aosp_nr_ssrsrp, 140, 44);
 
-                    int aosp_nr_sssinr =
-                        nr_cell->sinr != INVALID_IE ? ((nr_cell->sinr - 47) >> 1) : INVALID;
-                    if (aosp_nr_sssinr > 40 && aosp_nr_sssinr != INVALID) aosp_nr_sssinr = 40;
-                    else if (aosp_nr_sssinr < -23 && aosp_nr_sssinr != INVALID) aosp_nr_sssinr = -23;
+                    int aosp_nr_ssrsrq = (87 - nr_cell->rsrq) >> 1;
+                    aosp_nr_ssrsrq = boundarycheck (aosp_nr_ssrsrq, 20, 3);
 
-                    int aosp_nr_csirsrp =
-                        nr_cell->csirsrp != INVALID_IE ? (157 - nr_cell->csirsrp) : INVALID;
-                    if (aosp_nr_csirsrp > 140 && aosp_nr_csirsrp != INVALID) aosp_nr_csirsrp = 140;
-                    else if (aosp_nr_csirsrp < 44 && aosp_nr_csirsrp != INVALID) aosp_nr_csirsrp = 44;
+                    int aosp_nr_sssinr = (nr_cell->sinr - 47) >> 1;
+                    aosp_nr_sssinr = boundarycheck (aosp_nr_sssinr, 40, -23);
 
-                    int aosp_nr_csirsrq =
-                        nr_cell->csirsrq != INVALID_IE ? ((87 - nr_cell->csirsrq) >> 1) : INVALID;
-                    if (aosp_nr_csirsrq > 20 && aosp_nr_csirsrq != INVALID) aosp_nr_csirsrq = 20;
-                    else if (aosp_nr_csirsrq < 3 && aosp_nr_csirsrq != INVALID) aosp_nr_csirsrq = 3;
+                    int aosp_nr_csirsrp = 157 - nr_cell->csirsrp;
+                    aosp_nr_csirsrp = boundarycheck (aosp_nr_csirsrp, 140, 44);
 
-                    int aosp_nr_csisinr =
-                        nr_cell->csisinr != INVALID_IE ? ((nr_cell->csisinr - 47) >> 1) : INVALID;
-                    if (aosp_nr_csisinr > 40 && aosp_nr_csisinr != INVALID) aosp_nr_csisinr = 40;
-                    else if (aosp_nr_csisinr < -23 && aosp_nr_csisinr != INVALID) aosp_nr_csisinr = -23;
+                    int aosp_nr_csirsrq = (87 - nr_cell->csirsrq) >> 1;
+                    aosp_nr_csirsrq = boundarycheck (aosp_nr_csirsrq, 20, 3);
+
+                    int aosp_nr_csisinr = (nr_cell->csisinr - 47) >> 1;
+                    aosp_nr_csisinr = boundarycheck (aosp_nr_csisinr, 40, -23);
 
                     RFX_LOG_D(RFX_LOG_TAG,"nr_cell_count: aosp_nr_ssrsrp:%d, aosp_nr_ssrsrq:%d, aosp_nr_sssinr:%d, \
                                     aosp_nr_csirsrp:%d, aosp_nr_csirsrq:%d, aosp_nr_csisinr:%d",
@@ -869,7 +845,8 @@
 
                     RFX_LOG_D(RFX_LOG_TAG,"nr_cell_count: nr_cell->rsrp:%d, nr_cell->rsrq:%d, nr_cell->sinr:%d, nr_cell->csirsrp:%d, nr_cell->csirsrq:%d, nr_cell->csisinr:%d",
                         nr_cell->rsrp, nr_cell->rsrq, nr_cell->sinr, nr_cell->csirsrp, nr_cell->csirsrq, nr_cell->csisinr);
-/*Typethree merge MTK patch to fixed signal define difference 2023/01/18 end*/
+
+
                     p->writeInt32(RIL_CELL_INFO_TYPE_NR);
                     p->writeInt32(nr_cell->state);
                     p->writeInt32(0);
@@ -883,14 +860,12 @@
                     p->writeInt32(nr_cell->physical_cell_id);
                     p->writeInt32(nr_cell->tac);
                     p->writeInt32(nr_cell->nr_arfcn);
-/*Typethree merge MTK patch to fixed signal define difference 2023/01/18 start*/
                     p->writeInt32(aosp_nr_ssrsrp);
                     p->writeInt32(aosp_nr_ssrsrq);
                     p->writeInt32(aosp_nr_sssinr);
                     p->writeInt32(aosp_nr_csirsrp); //csirsrp
                     p->writeInt32(aosp_nr_csirsrq); //csirsrq
                     p->writeInt32(aosp_nr_csisinr); //csisinr
-/*Typethree merge MTK patch to fixed signal define difference 2023/01/18 end*/
                 }
             }
         }
@@ -1182,7 +1157,8 @@
 
 static void fillCellIdentityResponse(Parcel *p,mipc_nw_cs_ps_cell_info *cell_list) {
     int cell_type = cell_list->cell_type;
-    RFX_LOG_D(RFX_LOG_TAG,"cell_type %d\n",cell_type);
+    p->writeInt32(cell_type);  // jw.ren [Feature]API-190 MTK patch CR-ID AUTO00173061 -- on Jun 2 2022
+    RFX_LOG_D(RFX_LOG_TAG,"write cell_type %d\n",cell_type);  // jw.ren [Feature]API-190 MTK patch CR-ID AUTO00173061 -- on Jun 2 2022
     if(MIPC_NW_CELL_TYPE_GSM == cell_type)
     {
         char mcc[4] = {0};
@@ -1229,13 +1205,13 @@
         p->writeInt32(atoi(mcc));
         p->writeInt32(atoi(mnc));
         p->writeInt32(mnclen);
-        p->writeUint64(cell_list->nr_cell.cid);
+        p->writeUint64(cell_list->nr_cell.cid);  // jw.ren [Feature]API-190 MTK patch CR-ID AUTO00173061 -- on Jun 2 2022
         p->writeInt32(cell_list->nr_cell.physical_cell_id);
         p->writeInt32(cell_list->nr_cell.tac);
         p->writeInt32(cell_list->nr_cell.nr_arfcn);
 
         RFX_LOG_D(RFX_LOG_TAG,"MIPC_NW_CELL_TYPE_NR cid=%llu, physical_cell_id=%d, tac=%d\n",
-        cell_list->nr_cell.cid, cell_list->nr_cell.physical_cell_id, cell_list->nr_cell.tac);
+        cell_list->nr_cell.cid, cell_list->nr_cell.physical_cell_id, cell_list->nr_cell.tac);  // jw.ren [Feature]API-190 MTK patch CR-ID AUTO00173061 -- on Jun 2 2022
     }
     else if(MIPC_NW_CELL_TYPE_UMTS == cell_type)
     {
@@ -1361,10 +1337,7 @@
 {
     RFX_LOG_D(RFX_LOG_TAG,"mipc_get_cell_info_cb result_code %d\n",result_ptr->result_code);
     RFX_LOG_D(RFX_LOG_TAG,"result_code:%d,cell_list_count:%d\n", result_ptr->result_code, result_ptr->cell_list_count);
-/*Typethree merge MTK patch to fixed signal define difference 2023/01/18 start*/
-    int INVALID = INT_MAX; // 0x7FFFFFFF;
-    int INVALID_IE = 0XFF;
-/*Typethree merge MTK patch to fixed signal define difference 2023/01/18 end*/
+
     if(result_ptr->result_code != MIPC_RESULT_SUCCESS) {
         //result code to ril error transfer
         rfx_enqueue_response_message(NULL,cb_priv_ptr,mipc_sim_id_to_slot_id(sim_ps_id),result_ptr->result_code);
@@ -1414,35 +1387,18 @@
                     break;
                 }
                 case RIL_CELL_INFO_TYPE_LTE: {
-/*Typethree merge MTK patch to fixed signal define difference 2023/01/18 start*/
-#if 0
-                    int aosp_rsrp =
-                        result_ptr->cell_list[i].u.lte_cell.rsrp_in_qdbm != INVALID ? -result_ptr->cell_list[i].u.lte_cell.rsrp_in_qdbm / 4 : INVALID;
-                    if (aosp_rsrp > 140 && aosp_rsrp != INVALID) aosp_rsrp = 140;
-                    else if (aosp_rsrp < 44 && aosp_rsrp != INVALID) aosp_rsrp = 44;
 
-                    int aosp_rsrq =
-                        result_ptr->cell_list[i].u.lte_cell.rsrq_in_qdbm != INVALID_IE ? -result_ptr->cell_list[i].u.lte_cell.rsrq_in_qdbm / 4 : INVALID;
-                    if (aosp_rsrq > 20 && aosp_rsrq != INVALID) aosp_rsrq = 20;
-                    else if (aosp_rsrq < 3 && aosp_rsrq != INVALID) aosp_rsrq = 3;
-#else
-                    int aosp_rsrp =
-                        result_ptr->cell_list[i].u.lte_cell.rsrp != INVALID ? (141 - result_ptr->cell_list[i].u.lte_cell.rsrp) : INVALID;
-                    if (aosp_rsrp > 140 && aosp_rsrp != INVALID) aosp_rsrp = 140;
-                    else if (aosp_rsrp < 44 && aosp_rsrp != INVALID) aosp_rsrp = 44;
+                    int aosp_rsrp = 141 - result_ptr->cell_list[i].u.lte_cell.rsrp;
+                    aosp_rsrp = boundarycheck (aosp_rsrp, 140, 44);
 
-                    int aosp_rsrq =
-                        result_ptr->cell_list[i].u.lte_cell.rsrq != INVALID_IE ? ((40 - result_ptr->cell_list[i].u.lte_cell.rsrq) >> 1) : INVALID;
-                    if (aosp_rsrq > 20 && aosp_rsrq != INVALID) aosp_rsrq = 20;
-                    else if (aosp_rsrq < 3 && aosp_rsrq != INVALID) aosp_rsrq = 3;
-#endif
+                    int aosp_rsrq = (40 - result_ptr->cell_list[i].u.lte_cell.rsrq) >> 1;
+                    aosp_rsrq = boundarycheck (aosp_rsrq, 20, 3);
+
                     int aosp_cqi = result_ptr->cell_list[i].u.lte_cell.cqi;
-                    if (aosp_cqi < 0 && aosp_cqi != INVALID) aosp_cqi = 0;
-                    else if (aosp_cqi > 15 && aosp_cqi != INVALID) aosp_cqi = 15;
+                    aosp_cqi = boundarycheck (aosp_cqi, 15, 0);
 
-                    int aosp_ta = result_ptr->cell_list[i].u.lte_cell.ta != INVALID ? (int)(result_ptr->cell_list[i].u.lte_cell.ta) : INVALID;
-                    if (aosp_ta < 0 && aosp_ta != INVALID) aosp_ta = 0;
-                    else if (aosp_ta > 0x7FFFFFFE && aosp_ta != INVALID) aosp_ta = 0x7FFFFFFE;
+                    int aosp_ta = (int)(result_ptr->cell_list[i].u.lte_cell.ta);
+                    aosp_ta = boundarycheck (aosp_ta, 0x7FFFFFFE, 0);
 
                     RFX_LOG_D(RFX_LOG_TAG,"RIL_CELL_INFO_TYPE_LTE: aosp_rsrp:%d, aosp_rsrq:%d, aosp_cqi:%d, aosp_ta:%d",
                             aosp_rsrp, aosp_rsrq, aosp_cqi, aosp_ta);
@@ -1454,7 +1410,7 @@
                             result_ptr->cell_list[i].u.lte_cell.rssnr,
                             result_ptr->cell_list[i].u.lte_cell.cqi,
                             result_ptr->cell_list[i].u.lte_cell.ta);
-/*Typethree merge MTK patch to fixed signal define difference 2023/01/18 end*/
+
                     p->writeInt32(result_ptr->cell_list[i].u.lte_cell.state);
                     p->writeInt32(0);
                     p->writeInt64(0);
@@ -1467,7 +1423,7 @@
                     p->writeInt32(result_ptr->cell_list[i].u.lte_cell.physical_cell_id);
                     p->writeInt32(result_ptr->cell_list[i].u.lte_cell.tac);
                     p->writeInt32(result_ptr->cell_list[i].u.lte_cell.earfcn);
-/*Typethree merge MTK patch to fixed signal define difference 2023/01/18 start*/
+
                     /* For LTE, the ext1((rssnr)) in +ECELL is rssi, and format follows 27.007 +CSQ. alps05878992  */
                     p->writeInt32(result_ptr->cell_list[i].u.lte_cell.rssnr); //signalStrength
                     p->writeInt32(aosp_rsrp);
@@ -1476,40 +1432,27 @@
                     p->writeInt32(0); //rssnr
                     p->writeInt32(aosp_cqi); //cqi
                     p->writeInt32(aosp_ta);
-/*Typethree merge MTK patch to fixed signal define difference 2023/01/18 end*/
                     break;
                 }
                 case RIL_CELL_INFO_TYPE_NR: {
-/*Typethree merge MTK patch to fixed signal define difference 2023/01/18 start*/
-                    int aosp_nr_ssrsrp =
-                        result_ptr->cell_list[i].u.nr_cell.rsrp != INVALID_IE ? (157 - result_ptr->cell_list[i].u.nr_cell.rsrp) : INVALID;
-                    if (aosp_nr_ssrsrp > 140 && aosp_nr_ssrsrp != INVALID) aosp_nr_ssrsrp = 140;
-                    else if (aosp_nr_ssrsrp < 44 && aosp_nr_ssrsrp != INVALID) aosp_nr_ssrsrp = 44;
 
-                    int aosp_nr_ssrsrq =
-                        result_ptr->cell_list[i].u.nr_cell.rsrq != INVALID_IE ? ((87 - result_ptr->cell_list[i].u.nr_cell.rsrq) >> 1) : INVALID;
-                    if (aosp_nr_ssrsrq > 20 && aosp_nr_ssrsrq != INVALID) aosp_nr_ssrsrq = 20;
-                    else if (aosp_nr_ssrsrq < 3 && aosp_nr_ssrsrq != INVALID) aosp_nr_ssrsrq = 3;
+                    int aosp_nr_ssrsrp = 157 - result_ptr->cell_list[i].u.nr_cell.rsrp;
+                    aosp_nr_ssrsrp = boundarycheck (aosp_nr_ssrsrp, 140, 44);
 
-                    int aosp_nr_sssinr =
-                        result_ptr->cell_list[i].u.nr_cell.sinr != INVALID_IE ? ((result_ptr->cell_list[i].u.nr_cell.sinr - 47) >> 1) : INVALID;
-                    if (aosp_nr_sssinr > 40 && aosp_nr_sssinr != INVALID) aosp_nr_sssinr = 40;
-                    else if (aosp_nr_sssinr < -23 && aosp_nr_sssinr != INVALID) aosp_nr_sssinr = -23;
+                    int aosp_nr_ssrsrq = (87 - result_ptr->cell_list[i].u.nr_cell.rsrq) >> 1;
+                    aosp_nr_ssrsrq = boundarycheck (aosp_nr_ssrsrq, 20, 3);
 
-                    int aosp_nr_csirsrp =
-                        result_ptr->cell_list[i].u.nr_cell.csirsrp != INVALID_IE ? (157 - result_ptr->cell_list[i].u.nr_cell.csirsrp) : INVALID;
-                    if (aosp_nr_csirsrp > 140 && aosp_nr_csirsrp != INVALID) aosp_nr_csirsrp = 140;
-                    else if (aosp_nr_csirsrp < 44 && aosp_nr_csirsrp != INVALID) aosp_nr_csirsrp = 44;
+                    int aosp_nr_sssinr = (result_ptr->cell_list[i].u.nr_cell.sinr - 47) >> 1;
+                    aosp_nr_sssinr = boundarycheck (aosp_nr_sssinr, 40, -23);
 
-                    int aosp_nr_csirsrq =
-                        result_ptr->cell_list[i].u.nr_cell.csirsrq != INVALID_IE ? ((87 - result_ptr->cell_list[i].u.nr_cell.csirsrq) >> 1) : INVALID;
-                    if (aosp_nr_csirsrq > 20 && aosp_nr_csirsrq != INVALID) aosp_nr_csirsrq = 20;
-                    else if (aosp_nr_csirsrq < 3 && aosp_nr_csirsrq != INVALID) aosp_nr_csirsrq = 3;
+                    int aosp_nr_csirsrp = 157 - result_ptr->cell_list[i].u.nr_cell.csirsrp;
+                    aosp_nr_csirsrp = boundarycheck (aosp_nr_csirsrp, 140, 44);
 
-                    int aosp_nr_csisinr =
-                        result_ptr->cell_list[i].u.nr_cell.csisinr != INVALID_IE ? ((result_ptr->cell_list[i].u.nr_cell.csisinr - 47) >> 1) : INVALID;
-                    if (aosp_nr_csisinr > 40 && aosp_nr_csisinr != INVALID) aosp_nr_csisinr = 40;
-                    else if (aosp_nr_csisinr < -23 && aosp_nr_csisinr != INVALID) aosp_nr_csisinr = -23;
+                    int aosp_nr_csirsrq = (87 - result_ptr->cell_list[i].u.nr_cell.csirsrq) >> 1;
+                    aosp_nr_csirsrq = boundarycheck (aosp_nr_csirsrq, 20, 3);
+
+                    int aosp_nr_csisinr = (result_ptr->cell_list[i].u.nr_cell.csisinr - 47) >> 1;
+                    aosp_nr_csisinr = boundarycheck (aosp_nr_csisinr, 40, -23);
 
                     RFX_LOG_D(RFX_LOG_TAG,"RIL_CELL_INFO_TYPE_NR: aosp_nr_ssrsrp:%d, aosp_nr_ssrsrq:%d, aosp_nr_sssinr:%d, \
                                     aosp_nr_csirsrp:%d, aosp_nr_csirsrq:%d, aosp_nr_csisinr:%d",
@@ -1518,7 +1461,6 @@
                     RFX_LOG_D(RFX_LOG_TAG,"RIL_CELL_INFO_TYPE_NR: rsrp:%d, rsrq:%d, sinr:%d, csirsrp:%d, csirsrq:%d, csisinr:%d",
                         result_ptr->cell_list[i].u.nr_cell.rsrp, result_ptr->cell_list[i].u.nr_cell.rsrq, result_ptr->cell_list[i].u.nr_cell.sinr,
                         result_ptr->cell_list[i].u.nr_cell.csirsrp, result_ptr->cell_list[i].u.nr_cell.csirsrq, result_ptr->cell_list[i].u.nr_cell.csisinr);
-/*Typethree merge MTK patch to fixed signal define difference 2023/01/18 end*/
 
                     p->writeInt32(result_ptr->cell_list[i].u.nr_cell.state);
                     p->writeInt32(0);
@@ -1532,14 +1474,13 @@
                     p->writeUint32(result_ptr->cell_list[i].u.nr_cell.physical_cell_id);
                     p->writeInt32(result_ptr->cell_list[i].u.nr_cell.tac);
                     p->writeInt32(result_ptr->cell_list[i].u.nr_cell.nr_arfcn);
-/*Typethree merge MTK patch to fixed signal define difference 2023/01/18 start*/
                     p->writeInt32(aosp_nr_ssrsrp);
                     p->writeInt32(aosp_nr_ssrsrq);
                     p->writeInt32(aosp_nr_sssinr);
                     p->writeInt32(aosp_nr_csirsrp); //csirsrp
                     p->writeInt32(aosp_nr_csirsrq); //csirsrq
                     p->writeInt32(aosp_nr_csisinr); //csisinr
-/*Typethree merge MTK patch to fixed signal define difference 2023/01/18 end*/
+
                     break;
                 }
                 default: {
diff --git a/src/telephonyware/3.0/hardware/ril/fusion/libril/rilmipc/telephony/sys/RtcCapabilitySwitchChecker.cpp b/src/telephonyware/3.0/hardware/ril/fusion/libril/rilmipc/telephony/sys/RtcCapabilitySwitchChecker.cpp
index c777f10..9f4b694 100644
--- a/src/telephonyware/3.0/hardware/ril/fusion/libril/rilmipc/telephony/sys/RtcCapabilitySwitchChecker.cpp
+++ b/src/telephonyware/3.0/hardware/ril/fusion/libril/rilmipc/telephony/sys/RtcCapabilitySwitchChecker.cpp
@@ -1,3 +1,4 @@
+//SPDX-License-Identifier: MediaTekProprietary

 /* Copyright Statement:

  *

  * This software/firmware and related documentation ("MediaTek Software") are

@@ -215,9 +216,9 @@
 #endif

 

 bool RtcCapabilitySwitchChecker::imsiReady(bool log) {

-        int card_type = 0;

+    int card_type = 0;

 

-	for (int i = RFX_SLOT_ID_0; i < getSimCount(); i++) {

+    for (int i = RFX_SLOT_ID_0; i < getSimCount(); i++) {

 /*TODO

         int sim_state = m_status_managers[i]->getIntValue(RFX_STATUS_KEY_SIM_STATE);

         int sim_onoff_state = getSimOnOffState(i, log);

diff --git a/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/framework/base/RfxParcelTransferUtils.cpp b/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/framework/base/RfxParcelTransferUtils.cpp
index 53c774d..50f0bd8 100755
--- a/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/framework/base/RfxParcelTransferUtils.cpp
+++ b/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/framework/base/RfxParcelTransferUtils.cpp
@@ -1768,7 +1768,7 @@
     Parcel *old_parcel = p;
     Parcel *new_parcel = newp;
     int rat = 0, tmp_value = 0, valid_count=0;
-    uint64_t tmp_value_64 = 0;
+    uint64_t tmp_value_64 = 0;   // jw.ren [Feature]API-190 MTK patch CR-ID AUTO00173061 -- on Jun 2 2022
     char *responseStr[11]={NULL};
     int regState = 0;
     RIL_CellInfoType type;
@@ -1810,7 +1810,7 @@
 
     old_parcel->readInt32(&tmp_value);
     type = RIL_CellInfoType(tmp_value);
-    RFX_LOG_D(LOG_TAG,"type is:%d",type);
+    RFX_LOG_D(LOG_TAG,"type is:%d",type);   // jw.ren [Feature]API-190 MTK patch CR-ID AUTO00173061 -- on Jun 2 2022
     // TODO: cellIdentity
     switch(type)
     {
@@ -1929,14 +1929,14 @@
             /*nr_cell.mnc_len  -diff*/
             old_parcel->readInt32(&tmp_value);
             /*nr_cell.cid*/
-            old_parcel->readUint64(&tmp_value_64);
-            asprintf(&responseStr[2], "%llu", tmp_value_64);
+            old_parcel->readUint64(&tmp_value_64);   // jw.ren [Feature]API-190 MTK patch CR-ID AUTO00173061 -- on Jun 2 2022
+            asprintf(&responseStr[2], "%llu", tmp_value_64);   // jw.ren [Feature]API-190 MTK patch CR-ID AUTO00173061 -- on Jun 2 2022
             /*nr_cell.pci*/
             old_parcel->readInt32(&tmp_value);
             asprintf(&responseStr[7], "%d", tmp_value);
             /*nr_cell.tac*/
             old_parcel->readInt32(&tmp_value);
-            asprintf(&responseStr[1], "%d", tmp_value);
+            asprintf(&responseStr[1], "%d", tmp_value);  // jw.ren [Feature]API-190 MTK patch CR-ID AUTO00173061 -- on Jun 2 2022
             asprintf(&responseStr[6], "%d", tmp_value);
             /*nr_cell.nr_arfcn  -diff*/
             old_parcel->readInt32(&tmp_value);
diff --git a/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/apn/RpApnController.cpp b/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/apn/RpApnController.cpp
index 4145f51..53385cb 100755
--- a/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/apn/RpApnController.cpp
+++ b/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/apn/RpApnController.cpp
@@ -314,11 +314,6 @@
         return true;
 }
 
-void RpApnController::reloadApnDBPub()
-{
-    RpApnController::reloadApnDB();
-}
-
 void RpApnController::reloadApnDB() {
 
     for(int i=0; i<RFX_SLOT_COUNT; i++)
@@ -332,14 +327,7 @@
         RpApnController *apnController = (RpApnController *)findController(i,
                                     RFX_OBJ_CLASS_INFO(RpApnController));
 
-/*        char mccmncvalue[32]={0};
-        String8 mccMncKey("");
-        mccMncKey.append("vendor.ril.data.gsm_mcc_mnc");
-        mccMncKey.append(String8::format("%d", i));
-        property_get(mccMncKey, mccmncvalue,"");
-        getStatusManager(i)->setString8Value(RFX_STATUS_KEY_GSM_OPERATOR_NUMERIC, String8(mccmncvalue));
-        logD(RFX_LOG_TAG, "[reloadApnDB]mccmnc: %s",mccmncvalue);
-*/
+
         mccmnc = getStatusManager(i)->getString8Value(RFX_STATUS_KEY_GSM_OPERATOR_NUMERIC, String8(""));
         if (!mccmnc.isEmpty()) {
             logD(RFX_LOG_TAG, "[reloadApnDB]start: %d, dataController->getApnReady() =%d", i, dataController->getApnReady());
diff --git a/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/apn/RpApnController.h b/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/apn/RpApnController.h
index 5305f46..baab352 100755
--- a/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/apn/RpApnController.h
+++ b/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/apn/RpApnController.h
@@ -119,7 +119,6 @@
     void freeApnList(Vector<ApnsettingT*>* list);
     void generateApnDB();
     void GetApnDBBymccmnc();
-    void reloadApnDBPub();
     class ApnInitThread: public Thread {
     public:
         ApnInitThread(RpApnController* controller);
diff --git a/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/data/DcTracker.cpp b/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/data/DcTracker.cpp
index aeb0699..0f3917d 100755
--- a/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/data/DcTracker.cpp
+++ b/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/data/DcTracker.cpp
@@ -240,8 +240,7 @@
     } else {
         apnContext->decRefCount();
         RFX_LOG_D(RFX_LOG_TAG, "deactiveNetwork with apnType: %s is using, ignore this request!!!", requestApn.c_str());
-         //apnContext->notifyStateChange(RIL_Data_Call_PdnState::PDN_DISCONNECTED);
-         apnContext->notifyStateChange(apnContext->getState());
+        apnContext->notifyStateChange(apnContext->getState());
     }
 }
 
@@ -1060,6 +1059,7 @@
                                 apnSetting.logInfo().c_str());
 
                 apnContext->markApnPermanentFailed(apnSetting);
+                apnContext->setSate(RIL_Data_Call_PdnState::PDN_FAILED);
             }
 
             if (RIL_DataCallFailCause::PDP_FAIL_FALLBACK_RETRY
@@ -1079,7 +1079,7 @@
 
             RFX_LOG_D(RFX_LOG_TAG, "onSetupConnectionCompleted, clear up the pdn connection with apn type: %s",
                             apnContext->getApnType().c_str());
-            //apnContext->setSate(RIL_Data_Call_PdnState::PDN_FAILED);
+            // apnContext->setSate(RIL_Data_Call_PdnState::PDN_FAILED);
             apnContext->getApnSetting().clear();
             dataConnection->updateCompatibleApnContexts(apnContext);
 
@@ -1110,11 +1110,6 @@
             DcTracker::reTrySetupData(apnType, std::string("retry"));
         } else {
 
-            // no need config the network for DEFAULT pdn.
-            //if (apnContext->getApnType()!= TEXT_APN_TYPE_DEFAULT) {
-                //RpDataUtils::configNetwork(dataCallResponse.netId, dataCallResponse.ifname,
-                    //dataCallResponse.addresses, dataCallResponse.dnses);
-            //}
             apnContext->setSate(RIL_Data_Call_PdnState::PDN_CONNECTED);
             dataConnection->updateCompatibleApnContexts(apnContext);
             dataConnection->setcId(dataCallResponse.cid);
diff --git a/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/data/RpDataController.h b/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/data/RpDataController.h
index d270e08..fb8075a 100755
--- a/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/data/RpDataController.h
+++ b/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/data/RpDataController.h
@@ -1,3 +1,4 @@
+// SPDX-License-Identifier: MediaTekProprietary
 /* Copyright Statement:
  *
  * This software/firmware and related documentation ("MediaTek Software") are
diff --git a/src/telephonyware/3.0/netagent/src/libnetagent/MdEventHandler.c b/src/telephonyware/3.0/netagent/src/libnetagent/MdEventHandler.c
index ea0b0be..d8b6ab0 100755
--- a/src/telephonyware/3.0/netagent/src/libnetagent/MdEventHandler.c
+++ b/src/telephonyware/3.0/netagent/src/libnetagent/MdEventHandler.c
@@ -268,6 +268,7 @@
     }
 
     enqueueReqToNa(cmd_obj, REQUEST_TYPE_L5);
+
     if (cmd == MIPC_INTERNAL_EIF_IND_CMD_IFUP && mtu > 0) {
         // needs to update MTU size
         cmd_obj_for_mtu = netagent_io_cmd_alloc(transid, NETAGENT_IO_CMD_MAX);
diff --git a/src/telephonyware/3.0/netagent/src/libnetagent/NetAgentService.cpp b/src/telephonyware/3.0/netagent/src/libnetagent/NetAgentService.cpp
index 343f8de..6ce66f2 100755
--- a/src/telephonyware/3.0/netagent/src/libnetagent/NetAgentService.cpp
+++ b/src/telephonyware/3.0/netagent/src/libnetagent/NetAgentService.cpp
@@ -869,7 +869,6 @@
         recordPdnIpInfo(interfaceId, addrType,addressV4, addressV6);
         //confirmIpAddOrDel(interfaceId, NETAGENT_IO_CMD_IPDEL, result, addrType, addrV6_binary, INVALID_IPV6_PREFIX_LENGTH);
         confirmIpAddOrDelToMd(getTransIntfId(interfaceId), NETAGENT_IO_CMD_IPDEL, result, addrType, addrV6_binary, INVALID_IPV6_PREFIX_LENGTH, sim_id);
-
     } else {
         NA_LOG_E("[%s] not get address", __FUNCTION__);
         return;
diff --git a/src/telephonyware/3.0/netagent/src/libnetagent/nautils/common/ioutils/netagent_io.c b/src/telephonyware/3.0/netagent/src/libnetagent/nautils/common/ioutils/netagent_io.c
index b4b379a..0b74ff9 100755
--- a/src/telephonyware/3.0/netagent/src/libnetagent/nautils/common/ioutils/netagent_io.c
+++ b/src/telephonyware/3.0/netagent/src/libnetagent/nautils/common/ioutils/netagent_io.c
@@ -466,6 +466,7 @@
     return NETAGENT_IO_RET_SUCCESS;
 }
 
+
 int
 netagent_io_get_sim_id(void *co, int *sim_id) {
     netagent_io_cmd_obj_t   *cmd_obj = co;
@@ -479,7 +480,6 @@
     return NETAGENT_IO_RET_SUCCESS;
 }
 
-
 int
 netagent_io_get_cmd_type(void *co, netagent_io_cmd_e *cmd) {
     netagent_io_cmd_obj_t   *cmd_obj = co;