blob: ca67bbaeab90a3e15874856ec1c17cd879cf0d9c [file] [log] [blame]
/*-----------------------------------------------------------------------------------------------*/
/**
@file ql_gnss.h
@brief GNSS service API
*/
/*-----------------------------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------------------------------
Copyright (c) 2024 mobiletek Wireless Solution, Co., Ltd. All Rights Reserved.
mobiletek Wireless Solution Proprietary and Confidential.
-------------------------------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------------------------------
EDIT HISTORY
This section contains comments describing changes made to the file.
Notice that changes are listed in reverse chronological order.
$Header: $
when who what, where, why
-------- --------- -----------------------------------------------------------------
20241022 yq.wang Created .
-------------------------------------------------------------------------------------------------*/
#ifndef __QL_GNSS_H__
#define __QL_GNSS_H__
#ifdef __cplusplus
extern "C" {
#endif
typedef enum {
/** Cold Start Gnss*/
QL_GNSS_COLD_START = 0,
/** Warm Start Gnss */
QL_GNSS_WARM_START,
/** Hot Start Gnss*/
QL_GNSS_HOT_START,
}QL_GNSS_START_MODE_E;
typedef enum
{
/** gnss engine is off */
QL_GNSS_ENGINE_STATE_OFF = 0,
/** gnss engine is on */
QL_GNSS_ENGINE_STATE_ON = 1,
}QL_GNSS_ENGINE_STATE_E;
typedef enum
{
QL_GNSS_EPH_DATA_GPS = 0x01,
QL_GNSS_EPH_DATA_BDS = 0x02,
QL_GNSS_EPH_DATA_GLO = 0x04,
QL_GNSS_EPH_DATA_GAL = 0x08,
QL_GNSS_EPH_DATA_QZSS = 0x10,
}QL_GNSS_EPH_DATA_E;
typedef enum
{
GPS_ONLY = 0x01,
BDS_ONLY = 0x02,
GPS_BDS = 0x03,
GLONASS_ONLY = 0x04,
GPS_GLONASS = 0x05,
BDS_GLONASS = 0x06,
GPS_BDS_GLONASS = 0x07,
GPS_SBAS_QZSS = 0x08, /* GPS+SBAS+QZSS */
GPS_BDS_GALILEO_SBAS_QZSS = 0x11, /* GPS+BDS+GAL+SBAS+QZSS */
GPS_GLONASS_GALILEO_SBAS_QZSS = 0x101 /* Not currently supported */
} QL_GNSS_CONSTELLATION_MASK_E;
typedef enum
{
QL_GNSS_NMEA_VERSION_V30, /* NMEA 3.0 */
QL_GNSS_NMEA_VERSION_V41 /* NMEA 4.1 */
}QL_GNSS_NMEA_VERSION_ID_E;
typedef enum
{
QL_GNSS_MSG_MIN = 0, /* GNSS MIN MSG */
QL_GNSS_NMEA_MSG, /* GNSS NMEA DATA */
QL_GNSS_STATUS_MSG, /* GNSS NMEA DATA */
QL_GNSS_MSG_MAX /* GNSS MAX MSG */
}QL_GNSS_IND_MSG_ID_E;
/**
* gnss state definition
*/
typedef enum
{
QL_GNSS_STATUS_UNDEFINE = 0u, /* Undefined state */
QL_GNSS_STATUS_FOTA_START, /* Fota init state */
QL_GNSS_STATUS_FOTA_REQ, /* Fota state req */
QL_GNSS_STATUS_FOTA_ING, /* Fota progressing */
QL_GNSS_STATUS_FOTA_BOOT, /* Fota bootloader */
QL_GNSS_STATUS_FOTA_FIRM, /* Fota firmware */
QL_GNSS_STATUS_FOTA_END, /* Fota end */
QL_GNSS_STATUS_WORKING, /* GNSS working */
QL_GNSS_STATUS_MAX, /* Max state */
}QL_GNSS_STATUS_E;
typedef struct
{
char *ptr;
size_t len;
} curl_rsp_msg_t;
typedef struct
{
uint8_t msg_id;
uint32_t time;
char nmea_sentence[128];
} nmea_srv_ind_msg;
typedef struct
{
uint8_t msg_id;
QL_GNSS_STATUS_E g_status;
} gnss_status_ind_msg;
typedef struct
{
double latitude;
double longitude;
double altitude;
} ql_inject_location_t;
typedef struct
{
uint8_t mask;
struct
{
uint8_t gga_nmea_len; /* GGA */
char gga_sent[128];
}gga_sentences;
struct
{
uint8_t rmc_nmea_len; /* RMC */
char rmc_sent[128];
}rmc_sentences;
uint8_t gpgsv_lines;
struct
{
uint8_t nmea_sentences_len; /* GPGSV */
char gsv_sent[128];
}gpgsv_sentences[4];
uint8_t bdgsv_lines;
struct
{
uint32_t gsv_lines;
uint8_t nmea_sentences_len; /* BD/GBGSV */
char gsv_sent[128];
}bdgsv_sentences[4];
} nmeasrc_sentences;
typedef void (*ql_gnss_ind_cb_f)(void *msg);
typedef void (*ql_gnss_error_cb_f)(int error);
/*-----------------------------------------------------------------------------------------------*/
/**
@brief Initialize the gnss client
@return
QL_ERR_OK - successful
QL_ERR_INVALID_ARG - as defined
QL_ERR_SERVICE_NOT_READY - service is not ready, need to retry
Other - error code defined by ql_type.h
*/
/*-----------------------------------------------------------------------------------------------*/
int ql_gnss_init(void);
/*-----------------------------------------------------------------------------------------------*/
/**
@brief Deinitialize the gnss client
@return
QL_ERR_OK - successful
Other - error code defined by ql_type.h
*/
/*-----------------------------------------------------------------------------------------------*/
int ql_gnss_deinit(void);
/*-----------------------------------------------------------------------------------------------*/
/**
@brief Start gnss
@return
QL_ERR_OK - successful
QL_ERR_NOT_INIT - uninitialized
QL_ERR_SERVICE_NOT_READY - service is not ready
QL_ERR_INVALID_ARG - Invalid arguments
Other - error code defined by ql_type.h
*/
/*-----------------------------------------------------------------------------------------------*/
int ql_gnss_start(void);
/*-----------------------------------------------------------------------------------------------*/
/**
@brief Stop gnss
@return
QL_ERR_OK - successful
QL_ERR_NOT_INIT - uninitialized
QL_ERR_SERVICE_NOT_READY - service is not ready
QL_ERR_INVALID_ARG - Invalid arguments
Other - error code defined by ql_type.h
*/
/*-----------------------------------------------------------------------------------------------*/
int ql_gnss_stop(void);
/*-----------------------------------------------------------------------------------------------*/
/**
@brief Set gnss start mode
@param[in] mask Gnss start mode
@return
QL_ERR_OK - successful
QL_ERR_NOT_INIT - uninitialized
QL_ERR_SERVICE_NOT_READY - service is not ready
QL_ERR_INVALID_ARG - Invalid arguments
Other - error code defined by ql_type.h
*/
/*-----------------------------------------------------------------------------------------------*/
int ql_gnss_set_start_mode(QL_GNSS_START_MODE_E mask);
/*-----------------------------------------------------------------------------------------------*/
/**
@brief Get gnss nmea
@param[in] nmea_str
@return
QL_ERR_OK - successful
QL_ERR_NOT_INIT - uninitialized
QL_ERR_SERVICE_NOT_READY - service is not ready
QL_ERR_INVALID_ARG - Invalid arguments
Other - error code defined by ql_type.h
*/
/*-----------------------------------------------------------------------------------------------*/
int ql_gnss_qgpsgnmea(nmeasrc_sentences *nmea_str);
/*-----------------------------------------------------------------------------------------------*/
/**
@brief Set gnss qgpscfg
@param[in] enable
@param[in] str
@param[in] len
@return
QL_ERR_OK - successful
QL_ERR_NOT_INIT - uninitialized
QL_ERR_SERVICE_NOT_READY - service is not ready
QL_ERR_INVALID_ARG - Invalid arguments
Other - error code defined by ql_type.h
*/
/*-----------------------------------------------------------------------------------------------*/
int ql_gnss_set_qgpscfg(uint32_t enable, char *str, uint32_t len);
/*-----------------------------------------------------------------------------------------------*/
/**
@brief Get engine state
@param[out] state on/ff
@return
QL_ERR_OK - successful
QL_ERR_NOT_INIT - uninitialized
QL_ERR_SERVICE_NOT_READY - service is not ready
QL_ERR_INVALID_ARG - Invalid arguments
Other - error code defined by ql_type.h
*/
/*-----------------------------------------------------------------------------------------------*/
int ql_gnss_get_engine_state(QL_GNSS_ENGINE_STATE_E *state);
/*-----------------------------------------------------------------------------------------------*/
/**
@brief Set Constellation .
@param[in] mask GPS/GLO/BDS/GAL/QZSS/SBAS
@return
QL_ERR_OK - successful
QL_ERR_NOT_INIT - uninitialized
QL_ERR_SERVICE_NOT_READY - service is not ready
QL_ERR_INVALID_ARG - Invalid arguments
Other - error code defined by ql_type.h
*/
/*-----------------------------------------------------------------------------------------------*/
int ql_gnss_set_constellation(QL_GNSS_CONSTELLATION_MASK_E mask);
/*-----------------------------------------------------------------------------------------------*/
/**
@brief Get Constellation
@param[out] mask GPS/GLO/BDS/GAL/QZSS/SBAS
@return
QL_ERR_OK - successful
QL_ERR_NOT_INIT - uninitialized
QL_ERR_SERVICE_NOT_READY - service is not ready
QL_ERR_INVALID_ARG - Invalid arguments
Other - error code defined by ql_type.h
*/
/*-----------------------------------------------------------------------------------------------*/
int ql_gnss_get_constellation(QL_GNSS_CONSTELLATION_MASK_E *mask);
/*-----------------------------------------------------------------------------------------------*/
/**
@brief Set nmea type
@param[in] mask type
@return
QL_ERR_OK - successful
QL_ERR_NOT_INIT - uninitialized
QL_ERR_SERVICE_NOT_READY - service is not ready
QL_ERR_INVALID_ARG - Invalid arguments
Other - error code defined by ql_type.h
*/
/*-----------------------------------------------------------------------------------------------*/
int ql_gnss_set_nmea_type(uint32_t mask);
/*-----------------------------------------------------------------------------------------------*/
/**
@brief Get nmea version
@param[out] version nmea version
@return
QL_ERR_OK - successful
QL_ERR_NOT_INIT - uninitialized
QL_ERR_SERVICE_NOT_READY - service is not ready
QL_ERR_INVALID_ARG - Invalid arguments
Other - error code defined by ql_type.h
*/
/*-----------------------------------------------------------------------------------------------*/
int ql_gnss_get_nmea_version(QL_GNSS_NMEA_VERSION_ID_E *version);
/*-----------------------------------------------------------------------------------------------*/
/**
@brief Set nmea version
@param[in] version nmea version
@return
QL_ERR_OK - successful
QL_ERR_NOT_INIT - uninitialized
QL_ERR_SERVICE_NOT_READY - service is not ready
QL_ERR_INVALID_ARG - Invalid arguments
Other - error code defined by ql_type.h
*/
/*-----------------------------------------------------------------------------------------------*/
int ql_gnss_set_nmea_version(QL_GNSS_NMEA_VERSION_ID_E version);
/*-----------------------------------------------------------------------------------------------*/
/**
@brief Set gnss agnss mode
@param[in] mask Gnss agnss mode
@return
QL_ERR_OK - successful
QL_ERR_NOT_INIT - uninitialized
QL_ERR_SERVICE_NOT_READY - service is not ready
QL_ERR_INVALID_ARG - Invalid arguments
Other - error code defined by ql_type.h
*/
/*-----------------------------------------------------------------------------------------------*/
int ql_gnss_set_agnss_mode(uint32_t mask);
/*-----------------------------------------------------------------------------------------------*/
/**
@brief Inject agnss data
@param[in] data agnss data
@return
QL_ERR_OK - successful
QL_ERR_NOT_INIT - uninitialized
QL_ERR_SERVICE_NOT_READY - service is not ready
QL_ERR_INVALID_ARG - Invalid arguments
Other - error code defined by ql_type.h
*/
/*-----------------------------------------------------------------------------------------------*/
int ql_gnss_inject_agnss_data(void);
/*-----------------------------------------------------------------------------------------------*/
/**
@brief Inject UTC time to GNSS Engine.
@param[in] timestamp ,unit: ms
@return Whether to successfully Start Gnss
@retval QL_ERR_OK successful
@retval QL_ERR_FAILED Start Gnss Failed
@retval Other error code defined by ql_gnss.h
*/
/*-----------------------------------------------------------------------------------------------*/
int ql_gnss_inject_utc_time(uint64_t timestamp);
/*-----------------------------------------------------------------------------------------------*/
/**
@brief Set gnss suspend
@return
QL_ERR_OK - successful
QL_ERR_NOT_INIT - uninitialized
QL_ERR_SERVICE_NOT_READY - service is not ready
QL_ERR_INVALID_ARG - Invalid arguments
Other - error code defined by ql_type.h
*/
/*-----------------------------------------------------------------------------------------------*/
int ql_gnss_suspend(void);
/*-----------------------------------------------------------------------------------------------*/
/**
@brief Set gnss resume
@return
QL_ERR_OK - successful
QL_ERR_NOT_INIT - uninitialized
QL_ERR_SERVICE_NOT_READY - service is not ready
QL_ERR_INVALID_ARG - Invalid arguments
Other - error code defined by ql_type.h
*/
/*-----------------------------------------------------------------------------------------------*/
int ql_gnss_resume(void);
/*-----------------------------------------------------------------------------------------------*/
/**
@brief Register gnss callback
@param[in] cb
@return
QL_ERR_OK - successful
QL_ERR_NOT_INIT - uninitialized
QL_ERR_SERVICE_NOT_READY - service is not ready
QL_ERR_INVALID_ARG - Invalid arguments
Other - error code defined by ql_type.h
*/
/*-----------------------------------------------------------------------------------------------*/
int ql_gnss_set_ind_cb(ql_gnss_ind_cb_f cb);
/*-----------------------------------------------------------------------------------------------*/
/**
@brief Registration server error callback. Currently, only if the server exits abnormally,
the callback function will be executed, and the error code is QL_ERR_ABORTED;
@param[in] cb Callback function
@return
QL_ERR_OK - successful
Other - error code defined by ql_type.h
*/
/*-----------------------------------------------------------------------------------------------*/
int ql_gnss_set_service_error_cb(ql_gnss_error_cb_f cb);
#ifdef __cplusplus
}
#endif
#endif