mcu_hi3321_watch/tjd/service/service_gps.h
2025-05-26 20:15:20 +08:00

91 lines
2.1 KiB
C

#ifndef SERVICE_GPS_H
#define SERVICE_GPS_H
#include <stdbool.h>
#include <stdint.h>
#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