/*================================================================ Copyright (c) 2021, Quectel Wireless Solutions Co., Ltd. All rights reserved. Quectel Wireless Solutions Proprietary and Confidential. =================================================================*/ #ifndef _GPS_APP_H_ #define _GPS_APP_H_ #ifdef __cplusplus extern "C" { #endif #include #include "quec_cust_feature.h" #include "gps_channel.h" #define QUEC_GSV_MAX_SATS (32) #define QUEC_NV_GPS_CFG "quec_nv_gps_cfg" enum{ GGA, RMC, GSV, GSA, VTG, GLL, NMEA_MAX }; #define GNSS_SYSCONFGE_ENABLE (0x01 << 1) #define GNSS_NMEATYPE_ENABLE (0x01 << 2) typedef struct quec_gnss_data_struct { /*是否有效定位*/ unsigned char valid; /*经度*/ double longitude; /*经度E(东经)或W(西经)*/ unsigned char longitude_cardinal; /*纬度*/ double latitude; /*纬度N(北纬)或S(南纬)*/ unsigned char latitude_cardinal; /*hdop精度*/ float hdop; /*phop精度*/ float pdop; /*航向 0-360*/ float heading; /*速度 km/h*/ float gps_speed; /*信号强度,max=5, data from avg_snr*/ unsigned char gps_signal; /*最大信号?? db*/ unsigned int max_cnr; unsigned int max_cnr2; /*最小信号?? db*/ unsigned int min_cnr; /*平均信号?? db*/ unsigned int avg_cnr; /*信号值数??*/ unsigned int cnrs[QUEC_GSV_MAX_SATS]; unsigned int cnrs_index; /*定位卫星数量*/ unsigned int satellites_num; /*海拔高度*/ float altitude; /*FWVER*/ char fwver[32]; struct tm time; unsigned char quality; unsigned char navmode; /*定位模式*/ unsigned char fix_mode; /*VTG:地面速率 单位:节*/ double sog; /*VTG:地面速率 单位:km/h*/ double kph; /*VTG:地面航向*/ double cogt; }quec_gnss_nmea_data_t; typedef struct { int mdflag; unsigned int gnss_sys_type; unsigned int gps_nmea_type; } nmeasrc_sentences_cfg; typedef struct{ char agps_type; char agps_en; }agps_cnf_t; typedef enum{ STR_MODE, PACKET_MODE, }nmea_mode_t; #ifdef QUEC_AT_GPS_ENABLE typedef enum { PORT_NONE, PORT_USBNMEA, PORT_UARTDEBUG, PORT_MAX, } nmea_outport_row; typedef struct { char outport_en; nmea_outport_row type; unsigned char out_channel; }quec_gps_outport_config; #endif typedef struct{ unsigned char profile_inx; char agps_url[128]; char agpsvendorID[50]; char agpsmodelID[25]; char agpspassWord[50]; }quec_agps_cfg_t; typedef struct { nmeasrc_sentences_cfg nmea_handle_cfg; #ifdef QUEC_AT_GPS_ENABLE quec_gps_outport_config outport; /*nmea语句输出口*/ #endif char autogps; /*gps开机自启动*/ char apflash; /*快速冷启动*/ agps_cnf_t agps_cfg; /*星历快速定位*/ int nmeasrc_enable; quec_agps_cfg_t quec_agps_cfg; /*agps server配置*/ char ntp_url[32]; /*ntp server*/ }quec_gps_handle; #ifdef QUEC_AT_GPS_ENABLE typedef enum { QGPS_PROTO_NMEA_SRC_GGA, /* GPGGA */ QGPS_PROTO_NMEA_SRC_GLL, /* GPGGA */ QGPS_PROTO_NMEA_SRC_GSA, /* GPGSA GNGSA PQGSA */ QGPS_PROTO_NMEA_SRC_GSV, /* GPGSV GLGSV GAGSV PQGSV */ QGPS_PROTO_NMEA_SRC_RMC, /* GPRMC */ QGPS_PROTO_NMEA_SRC_VTG, /* GPVTG */ QGPS_PROTO_NMEA_SRC_ZDA, /* GPVTG */ QGPS_PROTO_NMEA_SRC_GST, /* GPVTG */ QGPS_PROTO_NMEA_SRC_MAX, } qgps_proto_nmea_src_e_type; #define GSV_NUM 8 #define GSA_NUM 8 typedef enum{ QUEC_GPS, //GP QUEC_GLONASS,//GL QUEC_GALILEO, QUEC_BDS, //GB QUEC_MULTISYS, //GN QUEC_GT_MAX }quec_gps_type; typedef struct { struct { char gp_gga_nmea_len; /* GPGGA */ char gp_gga_sent[128]; }gga_sentences; /* gpgsv glgsv gagsv pqgsv */ struct { char gp_rmc_nmea_len; /* GPRMC */ char gp_rmc_sent[128]; }rmc_sentences; /* gpgsv glgsv gagsv pqgsv */ struct { char nmea_sentences_len; char gp_gsv_sent[GSV_NUM][128]; /* one grp gsv most have 8 line*/ }gsv_sentences[QUEC_GT_MAX]; /* gpgsv glgsv gagsv pqgsv */ struct { char gp_gsa_nmea_len; /* GPGSA */ char gp_gsa_sent[GSA_NUM][128]; }gsa_sentences; /* gpgsv glgsv gagsv pqgsv */ struct { char gp_vtg_nmea_len; /* GPVTG */ char gp_vtg_sent[128]; }vtg_sentences; /* gpgsv glgsv gagsv pqgsv */ struct { char gp_gll_nmea_len; /* GAGNS */ char gp_gll_sent[128]; }gll_sentences; /* gpgsv glgsv gagsv pqgsv */ } nmeasrc_sentences; #endif quec_gps_handle *quec_gnss_config_para_get(void); void quec_gnss_auto_start(void); int quec_gnss_sys_set(int sys_type); int quec_gnss_nmea_set(char value); void * quec_get_location_para(void); int quec_gnss_reset(int type); int quec_set_agps_file(void); void quec_gnss_open(void); void quec_gnss_close(void); void quec_get_agps_sate_num(void * cb); int quec_send_agps_to_gps(char *data,int len); int quec_set_gnss_nmea_mode(nmea_mode_t mode); quec_gnss_monitor_struct_t *quec_get_monitor_param(void); int quec_gnss_aidpos_inject(quec_gnss_nmea_data_t *aidpos); void quec_hx_bckp_set(int value); int quec_hx_bckp_get(void); int quec_agps_param_cfg(quec_agps_cfg_t *quec_agps_cfg); typedef enum { QUEC_GPS_INITIAL_SUCCESS = 0, QUEC_GPS_INITIAL_FAILED = 1, QUEC_GPS_INITIALED = 2, QUEC_GPS_DOWNLOAD_SUCCESS = 3, QUEC_GPS_DOWNLOAD_FAIL = 4, QUEC_GPS_SEND_DATA_SUCCESS = 5, QUEC_GPS_SEND_DATA_FAIL = 6, QUEC_GPS_DEINIT_SUCCESS, QUEC_GPS_DEINIT_FAIL, }QUEC_USER_CB_STATE_T; typedef void (*QUEC_GPS_USER_CALLBACK)(QUEC_USER_CB_STATE_T event, void *data, int data_len); void quec_gnss_reg_user_cb(void* cb); #ifdef __cplusplus } #endif #endif