[Feature]Upload Modem source code

Change-Id: Id4294f30faced84d3e6fd6d5e61e1111bf287a37
diff --git a/mcu/protocol/interface/agps/gps_common.h b/mcu/protocol/interface/agps/gps_common.h
new file mode 100644
index 0000000..d5a55c4
--- /dev/null
+++ b/mcu/protocol/interface/agps/gps_common.h
@@ -0,0 +1,775 @@
+/*****************************************************************************
+*  Copyright Statement:
+*  --------------------
+*  This software is protected by Copyright and the information contained
+*  herein is confidential. The software may not be copied and the information
+*  contained herein may not be used or disclosed except with the written
+*  permission of MediaTek Inc. (C) 2005
+*
+*  BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+*  THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+*  RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+*  AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES, 
+*  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+*  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+*  NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+*  SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+*  SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+*  THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+*  NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+*  SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+*  BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+*  LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE, 
+*  AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE, 
+*  OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+*  MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. 
+*
+*  THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+*  WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+*  LAWS PRINCIPLES.  ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+*  RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+*  THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+/*******************************************************************************
+ * Filename:
+ * ---------
+ *  gps_common.h
+ *
+ * Project:
+ * --------
+ *  MAUI
+ *
+ * Description:
+ * ------------
+ *  GPS related interface hand file, such as GPS uart and NMEA parser
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ *******************************************************************************/
+#ifndef _GPS_COMMON_H_
+#define _GPS_COMMON_H_
+
+#include "kal_public_defs.h" 
+#include "kal_general_types.h"
+#include "ps_public_utility.h"
+#include "lbs_common_enum.h"
+#include "gnss2lcsp_enum.h"
+
+
+#define GPS_PARSER_P_VERSION_MAX        32
+#define GPS_NMEA_MAX_SVVIEW             20
+#define GPS_NMEA_MESSAGE_MAX_LENGTH         (100)
+
+/* mdi_datatype.h UART port 7000 */
+#define RES_GPS_UART_SUCCEED                            0
+#define RES_GPS_UART_ERR_PORT_NUMBER_WRONG              -7002
+#define RES_GPS_UART_ERR_PORT_ERR_UNKNOW                -7005
+#define RES_GPS_UART_ERR_NO_SLOT                        -7007
+
+#define AGPS_NR_AS_MAX_SERVING_CELL_NUM           8    /* We truncate the maximum number  due to CCCI channl limitation.*/
+#define AGPS_NR_AS_MAX_MEASURED_CELL_NUM          32
+
+
+/*Data type for callback function of NMEA data or parserred data*/
+typedef enum
+{
+    GPS_PARSER_RAW_DATA = 0,    /*Raw data of NMEA*/
+    GPS_PARSER_NMEA_GGA,        /*Data structure of GGA info*/
+    GPS_PARSER_NMEA_GLL,        /*Data structure of GLL info*/
+    GPS_PARSER_NMEA_GSA,        /*Data structure of GSA info*/
+    GPS_PARSER_NMEA_GSV,        /*Data structure of GSV info*/
+    GPS_PARSER_NMEA_RMC,        /*Data structure of RMC info*/
+    GPS_PARSER_NMEA_VTG,        /*Data structure of VTG info*/
+    GPS_PARSER_NMEA_SENTENCE,   
+    GPS_UART_EVENT_VPORT_LOST,  /*Virtual port is lost, maybe bluetooth connection is break(not support current)*/
+    GPS_SHOW_AGPS_ICON,
+    GPS_HIDE_AGPS_ICON,
+    GPS_PARSER_NMEA_END,
+    GPS_PARSER_MA_STATUS = 255
+} gps_common_parser_info_enum;
+
+
+/*Enum of GPS command*/
+typedef enum
+{
+    GPS_UART_GPS_WARM_START = 0,        /*Let GPS do warm start*/
+    GPS_UART_GPS_HOT_START,             /*Let GPS do hot start*/
+    GPS_UART_GPS_COLD_START,            /*Let GPS do cold start*/
+    GPS_UART_GPS_VERSION,
+    GPS_UART_GPS_ENABLE_DEBUG_INFO,    
+    GPS_UART_GPS_SWITCH_MODE_MA,
+    GPS_UART_GPS_SWITCH_MODE_MB,
+    GPS_UART_GPS_SWITCH_MODE_NORMAL,
+    GPS_UART_GPS_QUERY_POS,
+    GPS_UART_GPS_QUERY_MEAS,
+    GPS_UART_GPS_CLEAR_NVRAM,           /*Clear GPS NVRAM*/
+    GPS_UART_GPS_AGPS_START,            /*Clear GPS data*/
+    GPS_UART_GPS_SLEEP,                 /*Let GPS chip goto sleep mode*/
+    GPS_UART_GPS_STOP,                  /*Let GPS chip stop*/
+    GPS_UART_GPS_WAKE_UP,               /*Let GPS chip wake up from sleep mode*/
+    GPS_UART_GPS_DUMMY = -1
+} gps_common_uart_cmd_type_enum;
+
+/*Enum of GPS work mode*/
+typedef enum
+{
+    GPS_UART_MODE_RAW_DATA = 0,         /*Just need raw data*/
+    GPS_UART_MODE_LOCATION,             /*Just need location*/
+    GPS_UART_MODE_LOCATION_WITH_QOP     /*Need AGPS data with Qop*/
+} gps_common_uart_work_mode_enum;
+
+typedef struct 
+{
+    LOCAL_PARA_HDR
+    kal_uint32 length; 
+    kal_uint8  data[GPS_NMEA_MESSAGE_MAX_LENGTH]; 
+}gps_common_uart_write_req_struct;
+
+typedef struct
+{            
+    kal_int8      hour;
+    kal_int8      minute;
+    kal_int8      second;
+    kal_int8      millisecond;
+} gps_common_nmea_utc_time_struct;
+
+typedef struct
+{            
+    kal_int8      year;
+    kal_int8      month;
+    kal_int8      day;
+} gps_common_nmea_utc_date_struct;
+
+/*GPGGA -- Global Positioning System Fix Data*/
+typedef struct
+{            
+    double  latitude;               /*Latitude South<0  North>0*/
+    double  longitude;              /*Longitude West<0 east>0*/
+    float   h_precision;            /*Horizontal Dilution of precision*/
+    double  altitude;               /*Antenna Altitude above/below mean-sea-level (geoid)*/
+    float   unit_of_altitude;       /*Units of antenna altitude, meters*/
+    float   geoidal ;               /*Geoidal separation, the difference between the WGS-84 earth*/
+    float   unit_of_geoidal;        /*Units of geoidal separation, meters*/
+    float   gps_age;                /*Age of differential GPS data, time in seconds since last SC104*/
+    kal_uint16    station_id;       /*Differential reference station ID, 0000-1023*/
+    kal_uint8     sat_in_view;      /*Number of satellites in use*/
+    gps_common_nmea_utc_time_struct    utc_time;       /*Time (UTC)*/
+    kal_int8      north_south;      /*north or south*/
+    kal_int8      east_west;        /*east or west*/
+    kal_int8      quality;          /*GPS Quality Indicator*/
+} gps_common_nmea_gga_struct;
+
+
+ /*GPGSA -- GNSS DOP and Active Satellites*/
+typedef struct 
+{           
+    float   pdop;       /*PDOP in meters*/
+    float   hdop;       /*HDOP in meters*/
+    float   vdop;       /*VDOP in meters*/
+    kal_uint16     sate_id[12]; /*ID of satellites*/
+    kal_int8      op_mode;      /*Selection mode: A=auto M=manual*/
+    kal_int8      fix_mode;     /*Mode*/
+} gps_common_nmea_gsa_struct;
+
+
+/*GPGSV -- GNSS Satellites in View*/
+typedef struct 
+{            
+    kal_int16     msg_sum;              /*total number of messages*/
+    kal_int16     msg_index;            /*message number*/
+    kal_int16     sates_in_view;        /*satellites in view*/
+    kal_int16     max_snr;              /*Max snr*/
+    kal_int16     min_snr;              /*Min snr*/
+    kal_int16     num_sv_trk;           /*satellite number*/
+    struct
+    {
+        kal_uint8 sate_id;              /*satellite id*/
+        kal_uint8 elevation;            /*elevation in degrees*/
+        kal_int16 azimuth;              /*azimuth in degrees to true*/
+        kal_uint8 snr;                  /*SNR in dB*/
+    }       rsv[GPS_NMEA_MAX_SVVIEW];
+} gps_common_nmea_gsv_struct;
+
+
+/*GPRMC -- Recommended Minimum Specific GNSS Data*/
+typedef struct
+{            
+    double   latitude;          /*latitude*/
+    double   longitude;         /*longitude*/
+    float   ground_speed;       /*Speed over ground, knots*/
+    float   trace_degree;       /*Track mode degrees,north is 0*/
+    float   magnetic;
+    gps_common_nmea_utc_time_struct      utc_time; /*UTC time*/
+    gps_common_nmea_utc_date_struct      utc_date; /*UTC date*/
+    kal_int8      status;       /*Status, V = Navigation receiver warning*/
+    kal_int8      north_south;  /*N or S*/
+    kal_int8      east_west;    /*E or W*/
+    kal_int8      magnetic_e_w; /*Magnetic E or W*/
+    kal_int8      cmode;        /*Mode*/
+} gps_common_nmea_rmc_struct;
+
+
+/*GPGLL -- Geographic Position - Latitude/Longitude*/
+typedef struct
+{            
+    double  latitude;               /*latitude*/ 
+    double  longitude;              /*longitude*/
+    gps_common_nmea_utc_time_struct      utc_time;     /*UTC time*/
+    kal_int8      north_south;      /*N or S*/
+    kal_int8      east_west;        /*E or W*/
+    kal_int8      status;           /*Status A - Data Valid, V - Data Invalid*/
+    kal_int8      mode;             /*mode*/
+} gps_common_nmea_gll_struct;
+
+
+/*GPVTG -- VTG Data*/
+typedef struct
+{
+    float   true_heading;   /*Track Degrees*/
+    float   mag_heading;    /*Magnetic Track Degrees*/
+    float   hspeed_knot;    /*Speed Knots*/
+    float   hspeed_km;      /*Speed Kilometers Per Hour*/
+    kal_int8      mode;     /*Mode*/
+} gps_common_nmea_vtg_struct;
+
+
+typedef struct
+{
+    kal_char    version[GPS_PARSER_P_VERSION_MAX];
+    kal_uint32  number;
+} gps_common_p_release_struct;
+
+typedef struct
+{
+    gps_common_p_release_struct    release;
+} gps_common_p_info_struct;
+
+typedef struct 
+{
+    LOCAL_PARA_HDR
+    kal_uint16   port;
+    kal_char*    buffer;
+    kal_uint32   length;
+}gps_uart_log_write_struct;
+
+#if defined(__GPS_SUPPORT__)||defined(__BT_GPS_SUPPORT__)
+kal_uint16 gnss_agnss_capability_query(void);
+void gnss_agnss_capability_set(kal_uint16 gnssMethod);
+kal_bool gnss_is_agps_supported(void);
+kal_uint8 gnss_agnss_sid_query(gnss_id_enum gnssID);
+#endif  /* #if defined(__GPS_SUPPORT__)||defined(__BT_GPS_SUPPORT__) */
+
+/*Enum of GNSS rat mode*/
+typedef enum
+{
+    GNSS_RAT_GSM = 0,
+    GNSS_RAT_UMTS,
+    GNSS_RAT_LTE,
+    GNSS_RAT_NR
+} gnss_rat_enum;
+
+/* ------------------------------------------------------- */
+/* For Neighbor cell struct, copy from nbr_struct_public.h */
+/* ------------------------------------------------------- */
+
+typedef struct
+{
+    kal_uint16 mcc;
+    kal_uint16 mnc;
+    kal_uint16 lac;
+    kal_uint16 ci;
+} agps_global_cell_id_struct;
+
+typedef struct
+{
+    agps_global_cell_id_struct gci;
+    kal_uint8 nbr_meas_rslt_index;
+} agps_gas_cell_info_struct;
+
+typedef struct
+{
+    kal_uint16 arfcn;
+    kal_uint8 bsic;
+    kal_uint8 rxlev;
+} agps_gas_nbr_cell_meas_struct;
+
+typedef struct
+{
+    kal_int8 nbr_meas_num;
+    agps_gas_nbr_cell_meas_struct nbr_cells[15];
+} agps_gas_nbr_meas_struct;
+
+typedef struct
+{
+    agps_gas_cell_info_struct serv_info;
+    kal_uint8 ta;
+    kal_uint8 ordered_tx_pwr_lev;
+    kal_uint8 nbr_cell_num;
+    agps_gas_cell_info_struct nbr_cell_info[6];
+    agps_gas_nbr_meas_struct nbr_meas_rslt;
+} agps_gas_nbr_cell_info_struct;
+
+/* WCDMA cell info */
+typedef struct
+{
+    kal_uint8        uarfcn_ul_used;
+    kal_uint16      uarfcn_ul;
+    kal_uint16      uarfcn_dl;
+} agps_uas_freq_info_fdd_struct;
+
+typedef struct
+{
+    kal_uint16      uarfcn;
+} agps_uas_freq_info_tdd_struct;
+
+typedef struct agps_uas_freq_info_mode_specific_info_struct
+{
+    kal_uint8             mode;   // uas_freq_info_mode_enum
+    union
+    {
+        agps_uas_freq_info_fdd_struct        fdd;
+        agps_uas_freq_info_tdd_struct        tdd;
+    } choice;
+} agps_uas_freq_info_mode_specific_info_struct;
+
+typedef struct
+{
+    agps_uas_freq_info_mode_specific_info_struct     mode_specific_info;
+} agps_uas_freq_info_struct;
+
+typedef struct
+{
+    kal_uint16              psc;
+    kal_uint8                cpich_Ec_N0_used;
+    kal_uint8               cpich_Ec_N0;
+    kal_uint8                cpich_rscp_used;
+    kal_uint8               cpich_rscp;
+    kal_uint8                pathloss_used;
+    kal_uint8               pathloss;
+} agps_uas_cell_measured_results_fdd_struct;
+
+typedef struct
+{
+    kal_uint8               num;
+    kal_uint8               element[2*7];
+} agps_uas_cell_measured_result_tdd_timeslot_iscp_struct;
+
+typedef struct
+{
+    kal_uint8                                           cellParameterId;
+    kal_uint8                                            tgsn_used;
+    kal_uint8                                           tgsn;
+    kal_uint8                                            pccpch_rscp_used;
+    kal_uint8                                           pccpch_rscp;
+    kal_uint8                                            pathloss_used;
+    kal_uint8                                           pathloss;
+    kal_uint8                                            timeSlot_iscp_used;
+    agps_uas_cell_measured_result_tdd_timeslot_iscp_struct   timeslot_iscp_list;
+
+} agps_uas_cell_measured_results_tdd_struct;
+
+typedef struct agps_uas_cell_measured_results_mode_specific_info_struct
+{
+    kal_uint8         mode;   // uas_cell_measured_results_mode_enum
+
+    union
+    {
+        agps_uas_cell_measured_results_fdd_struct    fdd;
+        agps_uas_cell_measured_results_tdd_struct    tdd;
+    } choice;
+} agps_uas_cell_measured_results_mode_specific_info_struct;
+
+typedef struct
+{
+    kal_uint8                                                    cell_id_used;
+    kal_uint32                                                  cell_id;
+    agps_uas_cell_measured_results_mode_specific_info_struct         mode_specific_info;
+} agps_uas_cell_measured_results_struct;
+
+typedef struct
+{
+    kal_uint8                               num;
+    agps_uas_cell_measured_results_struct        element[6];
+} agps_uas_cell_measured_results_list_struct;
+
+typedef struct
+{
+    kal_uint8                                freq_info_used;
+    agps_uas_freq_info_struct                    freq_info;
+    kal_uint8                                utra_carrier_rssi_used;
+    kal_uint8                               utra_carrier_rssi;
+    kal_uint8                                cell_measured_results_list_used;
+    agps_uas_cell_measured_results_list_struct   cell_measured_results_list;
+} agps_uas_measured_results_struct;
+
+typedef struct
+{
+    kal_uint8                           num;
+    agps_uas_measured_results_struct         element[3];
+} agps_uas_measured_results_list_struct;
+
+typedef struct agps_uas_cell_plmn_id_struct
+{
+    kal_uint16                      mcc;
+    kal_uint16                      mnc;
+} agps_uas_cell_plmn_id_struct;
+
+typedef struct
+{
+    kal_uint8                       is_LAC_valid;
+    kal_uint16                     lac; 
+    kal_uint8                       is_RAC_valid;
+    kal_uint8                       rac; 
+    kal_uint8                       num_plmn_id;
+    agps_uas_cell_plmn_id_struct         plmn_id_list[6];
+} agps_uas_cell_info_struct;
+
+typedef struct
+{
+    kal_uint8                               num;
+    agps_uas_cell_info_struct        cell_info[6];
+} agps_uas_cell_info_list_struct;
+
+typedef struct
+{
+    agps_uas_cell_info_list_struct   cell_info_list;
+} agps_uas_cell_info_per_freq_struct;
+
+/* Measurement results of most 3 different UARFCN's */
+typedef struct
+{
+    kal_uint8                           num_freq;
+    agps_uas_cell_info_per_freq_struct         cell_info_per_freq[3];
+} agps_uas_cell_info_ext_struct;
+
+typedef struct
+{
+    kal_uint16                          mcc;
+    kal_uint16                          mnc;
+    kal_uint32                          uc;
+    kal_uint8                            freq_info_used;
+    agps_uas_freq_info_struct                freq_info;
+    kal_uint8                            psc_used;
+    kal_uint16                          psc;
+    kal_uint8                            measured_results_list_used;
+    agps_uas_measured_results_list_struct    measured_results_list;
+
+    agps_uas_cell_measured_results_mode_specific_info_struct serving_meas_result;
+    agps_uas_cell_info_struct                 serving_cell_ext_info;
+    agps_uas_cell_info_ext_struct            cell_info_ext_list;
+} agps_uas_nbr_cell_info_struct;
+
+typedef struct
+{ 
+    kal_uint32                          dl_freq;   
+    kal_uint16                          pci;        //0~503
+    kal_uint8                           rsrp;       //0~97
+    kal_uint8                           rsrq;       //0~34
+    
+    kal_uint8                           is_cell_id_used;
+    kal_uint32                          cell_id;    //0~0x0FFFFFFF
+    kal_uint16                          mcc;        //0~999
+    kal_uint16                          mnc;        //0~999
+    kal_uint8                           is_2_digit_mnc; //ncell cell plmn is 2 digits or 3 digits    
+    kal_uint16                          tac;        //0~65535
+} agps_eas_cell_measured_results_struct;
+
+/* LTE cell info */
+typedef struct 
+{
+    /* Serving cell info */
+    kal_uint16                          mcc;            //0~999
+    kal_uint16                          mnc;            //0~999
+    kal_uint8                           is_2_digit_mnc; //serving cell plmn is 2 digits or 3 digits
+    kal_uint32                          cell_id;        //0~0x0FFFFFFF
+    kal_uint32                              dl_freq;        
+    kal_uint8                           ul_freq_used;   
+    kal_uint32                              ul_freq;        
+    kal_uint16                          pci;            //0~503
+    kal_uint8                           is_ta_used; 
+    kal_uint16                          time_advance;   //0~1282
+    kal_uint8                           is_rsrp_valid; 
+    kal_uint8                           rsrp;           //0~97
+    kal_uint8                           is_rsrq_valid; 
+    kal_uint8                           rsrq;           //0~34
+    kal_uint16                          tac;            //0~65535
+
+    /* Neighbor cell info */   
+    kal_uint8                           num_nbr_cell;
+    agps_eas_cell_measured_results_struct    nbr_cell_list[32]; 
+} agps_eas_nbr_cell_info_struct;
+
+typedef struct
+{
+    kal_bool is_rsrp_valid;
+    kal_uint8 rsrp;             // 0~127
+
+    kal_bool is_rsrq_valid;     
+    kal_uint8 rsrq;             // 0~127
+
+    kal_bool is_sinr_valid;
+    kal_uint8 sinr;            // 0~127 
+} agps_ssb_measurement_struct, agps_csi_measurement_struct;
+
+#pragma pack(push) // Backup the current alignment configuration
+#pragma pack(4)    // Let the max alignment be 4-byte even if we have an element of alignment 8 like kal_uint64
+/* NR serving cell info */
+typedef struct 
+{
+    kal_uint32 phys_cell_id;    // 0~1007
+    kal_uint32 arfcn;           // 0~3279165
+
+    // In case cell broadcasts several sets of NAS sysinfo, NR AS informs
+    // first set of NAS sysinfo in SIB1 of the cell.
+
+    // NAS sys info (mcc/mnc/cell_id/tac) validity
+    kal_bool is_nas_sysinfo_valid;
+
+    kal_uint16 primary_plmn_mcc;             // 0~999
+
+    kal_bool is_2_digit_mnc;
+    kal_uint16 primary_plmn_mnc;             // 0~999
+
+    kal_uint64 primary_plmn_cell_id;         // 36-bit
+    kal_uint32 primary_plmn_tac;             // 24-bit
+
+    kal_bool is_ssb_valid;
+    agps_ssb_measurement_struct ssb;
+
+    kal_bool is_csi_valid;
+    agps_csi_measurement_struct csi;
+
+    kal_bool is_ta_valid;
+    kal_uint16 ta;
+} agps_nr_as_serving_cell_info_struct;
+
+/* NR neighbor cell info */
+typedef struct 
+{
+    kal_uint32 phys_cell_id;    // 0~1007
+    kal_uint32 arfcn;           // 0~3279165
+
+    // In case cell broadcasts several sets of NAS sysinfo, NR AS informs
+    // first set of NAS sysinfo in SIB1 of the cell.
+
+    // NAS sys info (mcc/mnc/cell_id/tac) validity
+    kal_bool is_nas_sysinfo_valid;
+
+    kal_uint16 primary_plmn_mcc;             // 0~999
+
+    kal_bool is_2_digit_mnc;
+    kal_uint16 primary_plmn_mnc;             // 0~999
+
+    kal_uint64 primary_plmn_cell_id;         // 36-bit
+    kal_uint32 primary_plmn_tac;             // 24-bit
+
+    kal_bool is_ssb_valid;
+    agps_ssb_measurement_struct ssb;
+
+    kal_bool is_csi_valid;
+    agps_csi_measurement_struct csi;
+} agps_nr_as_cell_measured_result_struct;
+#pragma pack(pop) // Restore the alignment configuration
+
+/* NR cell info */
+typedef struct 
+{
+    kal_uint8 num_serving_cell;
+    agps_nr_as_serving_cell_info_struct nr_serving_cell_list[AGPS_NR_AS_MAX_SERVING_CELL_NUM];
+
+    kal_uint8 num_nbr_cell;
+    agps_nr_as_cell_measured_result_struct nbr_cell_list[AGPS_NR_AS_MAX_MEASURED_CELL_NUM];
+} agps_nr_as_nbr_cell_info_struct;
+
+typedef union
+{
+    agps_gas_nbr_cell_info_struct gas_nbr_cell_info;
+    agps_uas_nbr_cell_info_struct uas_nbr_cell_info;
+    agps_eas_nbr_cell_info_struct eas_nbr_cell_info;
+    agps_nr_as_nbr_cell_info_struct nr_as_nbr_cell_info;
+} agps_ps_nbr_cell_info_union_type;
+
+
+extern kal_bool is_agps_cp_allowed_by_rat(gnss_rat_enum rat_mode);
+extern void lbs_update_cfun_state(kal_uint8 sim_index, kal_uint8 cfun_state);
+extern void agps_cp_allowed_set_by_rat(gnss_rat_enum rat_mode, kal_bool is_allowed);
+extern pos_mode_enum check_positioning_mode_capability(void);
+extern pos_mode_enum check_agnss_positioning_mode_capability(gnss_rat_enum rat_mode,protocol_id_enum ps_id);
+extern kal_int8 lbs_cp_guard_time();
+extern kal_bool is_lbs_cp_guard_time_enable();
+extern kal_bool lbs_cp_pos_method_capability_query(pos_method_enum pos_method);
+extern kal_bool lbs_op_id_check(protocol_id_enum pid, kal_uint8 gnss_rat_mode, kal_uint32 gnss_query_op);
+extern kal_bool lbs_gvc_block_non_ems_nilr(protocol_id_enum ps_id);
+/* Query API for AGPSD LPPe support capability */
+kal_bool is_agps_lppe_enabled(void);
+kal_bool is_agps_lppe_network_location_enabled(void);
+
+#define __LBS_SETTING_SUPPORT__
+#define __EARLY_FIX_SUPPORT__
+#define __LBS_EM_SUPPORT__
+#define __LBS_LIO_SUPPORT__
+
+/* Type for LBS AP setting query API */
+typedef enum   
+{
+    LBS_GENERIC_AP_SETTING,
+    LBS_SETTING_MAX_NUM
+} lbs_setting_enum;
+        
+/* Structure for LBS AP setting query API */
+//typedef agps_md_sim_info_req lbs_setting_generic_ap;
+        
+/* Error cause for LBS AP setting query API */
+#define LBS_SETTING_NOT_AVAILABLE (0)
+
+/* Prototype for LBS AP setting query API */
+#if defined(__UE_SIMULATOR__) || !defined(__AGPS_SUPPORT__)
+#define lbs_query_setting(a,b,c) (0)
+#else
+kal_int32 lbs_query_setting(lbs_setting_enum setting, void *buf, kal_uint32 buf_size);
+#endif
+kal_uint8 custom_lcsp_adj_rsp_time(kal_uint8 rsp, protocol_id_enum pid);
+
+typedef kal_bool (*lbs_gnss_time_update_callback)(kal_uint64);
+void register_ssu_gnss_time_update_callback(lbs_gnss_time_update_callback api);
+void deregister_ssu_gnss_time_update_callback();
+
+#endif /* _GPS_COMMON_H_ */ 
+
+
+
+