123 lines
2.8 KiB
C
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 |