/*---------------------------------------------------------------------------- * 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 #include #include #include #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