blob: 046ede21e99acce0fd722c21bba2bca706f11c93 [file] [log] [blame]
/**
* @file : gsw_gnss_interface.h
* @brief : gnss function
* @date : 2022-07-05
* @author : gaofeng6122
* @version : v1.0
* @copyright Copyright(C) 2022,Gosuncnwelink
*/
#ifndef __GSW_GNSS_INTERFACE__H__
#define __GSW_GNSS_INTERFACE__H__
/*********************************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <pthread.h>
#include <stddef.h>
#include "gsw_hal_errcode.h"
typedef enum {
GNSS_FREQ_1HZ = 1, /**< 1Hz */
GNSS_FREQ_2HZ = 2, /**< 2Hz */
GNSS_FREQ_5HZ = 5, /**< 5Hz */
GNSS_FREQ_10HZ = 10, /**< 10Hz */
} gnss_freq_type;
#define GNSS_OK GSW_HAL_SUCCESS
#define GNSS_ERROR GSW_HAL_NORMAL_FAIL
typedef struct
{
size_t size; /**< set to sizeof(GpsLocation) */
unsigned short int flags; /**< Contains GpsLocationFlags bits. */
double latitude; /**< Represents latitude in degrees. */
double longitude; /**< Represents longitude in degrees. */
double altitude; /**< Represents altitude in meters above the WGS 84 reference ellipsoid. */
float speed; /**< Represents speed in meters per second. */
float bearing; /**< Represents heading in degrees. */
float accuracy; /**< Represents expected accuracy in meters. */
long long int timestamp; /**< Timestamp for the location fix. */
}GSW_GNSS_LOCATION_T;
typedef struct {
GSW_GNSS_LOCATION_T legacyLocation;
float horizontalAccuracyMeters; /**< horizontal position accuracy in meters (68% confidence)*/
float verticalAccuracyMeters; /**< vertical position accuracy in meters (68% confidence)*/
float speedAccuracyMetersPerSecond;/**< speed accuracy in meter per seconds (68% confidence)*/
float bearingAccuracyDegrees; /**< bearing accuracy in degrees (68% confidence)*/
}GSW_GNSS_LOCATION_EXT_T;
typedef enum{
GSW_MODE_GPS_GLONASS = 0, /**< GPS+GLONASS */
GSW_MODE_GPS_BEIDOU, /**< GPS+BEIDOU */
GSW_MODE_GPS_GLONASS_BEIDOU, /**< GPS+GLONASS+BEIDOU */
GSW_MODE_GPS, /**< GPS only */
GSW_MODE_BEIDOU, /**< BEIDOU only*/ /* The high-tech platform does not support this type */
GSW_MODE_GLONASS, /**< GLONASS only */ /* The high-tech platform does not support this type */
GSW_MODE_GPS_GLONASS_BEIDOU_GALILEO, /**< GPS+GLONASS+BEIDOU+GALILEO */
GSW_MODE_GPS_GALILEO, /**< GPS+GALILEO */
GSW_MODE_GPS_GLONASS_GALILEO, /**< GPS+GLONASS+GALILEO */
GSW_MODE_GPS_GALILEO_ONLY, /**< GPS or GALILEO only */
GSW_MODE_GPS_GLONASS_BEIDOU_GALILEO_NAVIC, /**< GPS+GLONASS+BEIDOU+GALILEO+NAVIC */ /* The high-tech platform does not support this type */
GSW_MODE_GNSS_END /**< init value */
}GSW_GNSS_MODE_CONFIGURATION;
typedef enum{
GSW_SWITCH_DISABLE = 0, /**< configuration switch disable :0 */
GSW_SWITCH_ENABLE /**< configuration switch enable :1 */
}GSW_CONF_SWITCH;
typedef enum
{
GSW_LOC_DELETE_EPHEMERIS = (1 << 0), /**< Delete ephemeris data. */
GSW_LOC_DELETE_ALMANAC = (1 << 1), /**< Delete almanac data. */
GSW_LOC_DELETE_POSITION = (1 << 2), /**< Delete position data. */
GSW_LOC_DELETE_TIME = (1 << 3), /**< Delete time data. */
GSW_LOC_DELETE_IONO = (1 << 4), /**< Delete IONO data. */
GSW_LOC_DELETE_UTC = (1 << 5), /**< Delete UTC data. */
GSW_LOC_DELETE_HEALTH = (1 << 6), /**< Delete health data. */
GSW_LOC_DELETE_SVDIR = (1 << 7), /**< Delete SVDIR data. */
GSW_LOC_DELETE_SVSTEER = (1 << 8), /**< Delete SVSTEER data. */
GSW_LOC_DELETE_SADATA = (1 << 9), /**< Delete SA data. */
GSW_LOC_DELETE_RTI = (1 << 10), /**< Delete RTI data. */
GSW_LOC_DELETE_CELLDB_INFO = (1 << 11), /**< Delete cell DB information. */
GSW_LOC_DELETE_ALL = 0xFFFFFFFF, /**< Delete all location data. */
} GSW_AIDING_DATA_E;
/* Callback function registered to gnss location
* Note:don`t use blocking function inside callback functions */
typedef void (*gsw_gnss_location_callback_ext)(GSW_GNSS_LOCATION_EXT_T* location);
/* Callback function registered to gnss nmea
* Note:don`t use blocking function inside callback functions */
typedef void (* gsw_gnss_nmea_callback)(const char* nmea, int length);
typedef struct
{
gsw_gnss_location_callback_ext gsw_location_cb; /**< location callback */
gsw_gnss_nmea_callback gsw_nmea_cb; /**< nmea callback */
}gsw_gnss_cb;
typedef enum
{
GSW_XTRA_STATE_MIN = 0,
GSW_XTRA_STATE_DISBALE = GSW_XTRA_STATE_MIN,
GSW_XTRA_STATE_ENABLE,
GSW_XTRA_STATE_MAX
} gsw_xtra_state_e;
/**
* @brief SDK interface to set gnss sampling frequency
* @details E02 and E06 unused
* @param [in] freq
* @retval 0: success
* @retval other: fail
*/
int gsw_gnss_set_freq(int freq);
/**
* @brief SDK interface to initialization gnss
*
* @param
* @retval 0: success
* @retval other: fail
*/
int gsw_gnss_init(void);
/**
* @brief SDK interface to start gnss
* @param
* @retval 0: success
* @retval other: fail
*/
int gsw_gnss_start(void);
/**
* @brief SDK interface to stop gnss
* @param
* @retval 0: success
* @retval other: fail
*/
int gsw_gnss_stop(void);
/**
* @brief SDK interface to de initialization gnss
* @param
* @retval 0: success
* @retval other: fail
*/
int gsw_gnss_deinit(void);
/**
* @brief SDK interface to set gnss start mode,specific mode refreence GSW_GNSS_MODE_CONFIGURATION
* @details E02 and E06 unused
*
* @param [in] start_mode
* @retval 0: success
* @retval other: fail
*/
int gsw_gnss_set_start_mode(GSW_GNSS_MODE_CONFIGURATION start_mode);
/**
* @brief SDK interface to set EPO switch if open or close
* @details E02 and E06 unused
*
* @param [in] switch_op
* @retval 0: success
* @retval other: fail
*/
int gsw_gnss_epo_switch(GSW_CONF_SWITCH switch_op);
/**
* @brief SDK interface to delete aiding data,delete aiding data for cold start
* @details E02 and E06 unused
*
* @param [in] flags
* @retval 0: success
* @retval other: fail
*/
int gsw_gnss_delete_aiding_data(unsigned int flags);
/**
* @brief load the dynamic link library.this interface must be called before other interface
* @details E02 and E06 unused
*
* @retval 0: success
* @retval other: fail
*/
int gsw_gnss_add_lib(void); /* The high-tech platform does not support this type */
/**
* @brief SDK interface to registered callback function
* @details E02 and E06 unused
*
* @param [in] callback
* @retval 0: success
* @retval other: fail
*/
int gsw_gnss_reg_cb_group(gsw_gnss_cb callback);
/**
* @brief check xtra support or not
* @details E02 and E06 unused
*
* @param [in] state
* @retval 0: success
* @retval other: fail
*/
int gsw_gnss_xtra_is_enable(gsw_xtra_state_e state);
/**
* @brief to get current gps information function
* @details only for E02 and E06
*
* @param [out] GSW_GNSS_LOCATION_T
* @retval 0: success
* @retval other: fail
*/
int gsw_gnss_get_current_location(GSW_GNSS_LOCATION_T* location_info);
/**
* @brief to get current modem nmea data tail type
* @details E02 and E06 unused
*
* @param [out] tail_type
* @param [in] len
* @retval 0: success
* @retval other: fail
*/
int gsw_gnss_get_tail_nmea_type(char *tail_type, int len);
#endif //__GSW_GNSS_INTERFACE__H__