mcu_hi3321_watch/tjd/service_cpp/gnss/service_pgnss.h
2025-05-26 20:15:20 +08:00

123 lines
2.8 KiB
C

/*----------------------------------------------------------------------------
* Copyright (c) TJD Technologies Co., Ltd. 2025. All rights reserved.
*
* Description: service_pgnss.h
*
* Author: luziquan@ss-tjd.com
*
* Create: 2025-05-09
*--------------------------------------------------------------------------*/
#ifndef SERVICE_PGNSS_H
#define SERVICE_PGNSS_H
#include "./parse/inc/gnss_nmea_parse.h"
#include <cmsis_os2.h>
#include <stdbool.h>
#include <stdint.h>
#include <stdio.h>
#ifdef __cplusplus
#if __cplusplus
extern "C"
{
#endif
#endif
#define GNSS_SUCCESS 0
#define GNSS_FAILURE -1
#define GNSS_THREAD_CREATE_FAILURE 0x80000001
#define GNSS_ALREADY_OPEN 0x80000002
#define GNSS_FILE_OPEN_FAILURE 0x80000003
#define GNSS_PROCESSING_FAILURE 0x80000004
#define GNSS_THREAD_RUNNING 0x80000005
#define GNSS_SAT_NUM_MAX 64
enum GnssLocationValidity : int32_t {
GNSS_LOCATION_LAT_VALID = 1,
GNSS_LOCATION_LONG_VALID = 2,
GNSS_LOCATION_ALTITUDE_VALID = 4,
GNSS_LOCATION_SPEED_VALID = 8,
GNSS_LOCATION_BEARING_VALID = 16,
GNSS_LOCATION_HORIZONTAL_ACCURACY_VALID = 32,
GNSS_LOCATION_VERTICAL_ACCURACY_VALID = 64,
GNSS_LOCATION_SPEED_ACCURACY_VALID = 128,
GNSS_LOCATION_BEARING_ACCURACY_VALID = 256,
GNSS_LOCATION_TIME_VALID = 512,
GNSS_LOCATION_TIME_SINCE_BOOT_VALID = 1024,
GNSS_LOCATION_TIME_UNCERTAINTY_VALID = 2048,
};
typedef enum {
GNSS_QUAL_POOR = 0,
GNSS_QUAL_MEDIUM = 1,
GNSS_QUAL_HIGH = 2
} GnssQualityLevel;
typedef struct {
/* 可用元素*/
uint32_t fieldValidity;
/* 纬度 */
double latitude;
/* 经度 */
double longitude;
/* 海拔高度 */
double altitude;
/* 速度 米/小时 */
float speed;
/* 方向(单位:度) */
float bearing;
/* 水平定位精度(单位:米) */
float horizontalAccuracy;
/* 垂直定位精度(单位:米) */
float verticalAccuracy;
/* 速度精度(单位:米/小时) */
float speedAccuracy;
/* 方向精度(单位:度) */
float bearingAccuracy;
} GnssLocation;
typedef void (*OnGsvChange)(const GnssSatelliteList *satList);
typedef void (*OnLocationChange)(const GnssLocation *location);
typedef void (*OnSignalQualityUpdate)(GnssQualityLevel signal);
typedef struct {
OnGsvChange onGsvUpdate;
OnLocationChange onLocationUpdate;
OnSignalQualityUpdate onSignalQualityUpdate;
} GnssCallbackIfaces;
typedef struct
{
bool gnssEnabled;
bool gnssStarted;
GnssCallbackIfaces gnssCallback;
GnssInfo gnssInfo;
GnssLocation location;
GnssSatelliteStatus satStatus;
osThreadId_t listenGnssDataThreadId;
FILE *gnssNmeaFp;
} GnssServiceContext;
void GnssServiceRegisterCallback(GnssCallbackIfaces *callback);
uint32_t GnssServiceOpen(void);
void GnssServiceClose(void);
#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif
#endif