#ifndef SERVICE_GPS_H #define SERVICE_GPS_H #include #include #include "minmea.h" #ifdef __cplusplus #if __cplusplus extern "C" { #endif #endif typedef struct { bool valid; float latitude; float longitude; float speed; float course; float variation; } gnss_rmc_data_t; typedef struct { minmea_gnss_type_id_t type; int nr; int elevation; int azimuth; int snr; } gnss_gsv_data_t; typedef struct { float true_track_degrees; float magnetic_track_degrees; float speed_knots; float speed_kph; } gnss_vtg_data_t; typedef struct { bool valid; // 有效性 float latitude; // 纬度 float longitude; // 经度 uint16_t num_sats; // 卫星数量 } gnss_data_t; // 获取RMC数据回调函数 typedef void (*gnss_service_changed_callback)(bool open); typedef void (*gnss_rmc_status_callback)(gnss_rmc_data_t *rmc_data); typedef void (*gnss_gsv_status_callback)(const struct minmea_sentence_gsv *frame); typedef void (*gnss_zda_status_callback)(const char *time); typedef void (*gnss_gga_status_callback)(const struct minmea_sentence_gga *frame); typedef void (*gnss_vtg_status_callback)(gnss_vtg_data_t *vtg_data); typedef struct { gnss_service_changed_callback service_changed_cb; gnss_rmc_status_callback rmc_status_cb; gnss_gsv_status_callback gsv_status_cb; gnss_zda_status_callback zda_status_cb; gnss_gga_status_callback gga_status_cb; gnss_vtg_status_callback vtg_status_cb; } gnss_service_cb_t; uint32_t tjd_service_gps_open(void); void tjd_service_gps_close(void); void tjd_service_gps_sync_ephemeris_event(void); void tjd_service_gps_sync_open(void); void tjd_service_gps_get_data(gnss_data_t *rmc_data); void tjd_service_gps_get_gga_data(struct minmea_sentence_gga *gga_data); void register_gnss_changed_cb(gnss_service_cb_t *gnss_service_func); void unregister_gnss_changed_cb(void); /** * @brief 星历是否有效 * @return true 有效 * @return false 已过期 */ bool tjd_service_gps_ephemer_is_valid(void); #ifdef __cplusplus #if __cplusplus } #endif #endif #endif