91 lines
2.1 KiB
C
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 |