Add basic change for v1453
Change-Id: I9497a61bbc3717f66413794a4e7dee0347c0bc33
diff --git a/mbtk/libql_lib_v2_rilv2/ql_gnss.c b/mbtk/libql_lib_v2_rilv2/ql_gnss.c
new file mode 100755
index 0000000..85322e3
--- /dev/null
+++ b/mbtk/libql_lib_v2_rilv2/ql_gnss.c
@@ -0,0 +1,879 @@
+/*-----------------------------------------------------------------------------------------------*/
+/**
+ @file ql_gnss.c
+ @brief SIM 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 .
+-------------------------------------------------------------------------------------------------*/
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <time.h>
+
+#include "ql_type.h"
+#include "ql_gnss.h"
+#include "mbtk_type.h"
+#include "mbtk_gnss.h"
+#include "mbtk_log.h"
+
+/*----------------------------------------------DEFINE-------------------------------------------*/
+#define QL_GNSS_LOGE LOGE
+#define QL_GNSS_LOGD LOGD
+
+#define QL_GNSS_TIMEOUT 5
+#define QL_GNSS_NMEA_SIZE_MAX 128
+#define QL_GNSS_AGPS_URL_SIZE_MAX 128
+
+#define QL_AGNSS_DOWNLOAD_TIMEPUT 60
+#define QL_AGNSS_INJECT_TIMEOUT 20
+
+#define QL_AGNSS_URL_PATH "http://uagnss.allystar.com:80/ephemeris/"
+
+#define QL_AGNSS_EPH_GPS "HD_GPS.hdb"
+#define QL_AGNSS_EPH_BDS "HD_BDS.hdb"
+#define QL_AGNSS_EPH_GLO "HD_GLO.hdb"
+#define QL_AGNSS_EPH_GAL "HD_GAL.hdb"
+#define QL_AGNSS_EPH_QZS "HD_QZS.hdb"
+#define QL_AGNSS_EPH_GPS_BDS "HD_GPS_BDS.hdb"
+#define QL_AGNSS_EPH_GPS_GLO "HD_GPS_GLO.hdb"
+#define QL_AGNSS_EPH_GPS_GAL "HD_GPS_GAL.hdb"
+#define QL_AGNSS_EPH_GPS_QZSS "HD_GPS_QZSS.hdb"
+
+/*----------------------------------------------DEFINE-------------------------------------------*/
+
+/*----------------------------------------------ENUM---------------------------------------------*/
+typedef enum {
+ QL_GNSS_INIT_STOP = 0,
+ QL_GNSS_INIT_START,
+}ql_gnss_init_enum;
+
+/*----------------------------------------------ENUM---------------------------------------------*/
+
+/*----------------------------------------------STRUCT-------------------------------------------*/
+typedef struct {
+ ql_gnss_init_enum status;
+ ql_gnss_ind_cb_f ind_cb;
+ ql_gnss_error_cb_f server_cb;
+ time_t timestamp;
+}ql_gnss_info_handle_t;
+
+/*----------------------------------------------STRUCT-------------------------------------------*/
+
+/*----------------------------------------------GLOBAL VARIABLE----------------------------------*/
+extern long timezone;
+
+/*----------------------------------------------GLOBAL VARIABLE----------------------------------*/
+
+/*----------------------------------------------GLOBAL STATIC VARIABLE---------------------------*/
+static ql_gnss_info_handle_t* gnss_handle = NULL;
+
+/*----------------------------------------------GLOBAL STATIC VARIABLE---------------------------*/
+
+/*----------------------------------------------GNSS FUNCTION-------------------------------------*/
+static time_t ql_get_timestamp(char *time)
+{
+ char tmp_char[4] = {0};
+ struct tm tmp_time;
+
+ memset(&tmp_time, 0, sizeof(struct tm));
+ memset(tmp_char, 0, sizeof(tmp_char));
+ memcpy(tmp_char, &time[4], 2);
+ tmp_time.tm_sec = atoi(tmp_char);
+
+ memcpy(tmp_char, &time[2], 2);
+ tmp_time.tm_min = atoi(tmp_char);
+
+ memcpy(tmp_char, &time[0], 2);
+ tmp_time.tm_hour = atoi(tmp_char);
+
+ memcpy(tmp_char, &time[6], 2);
+ tmp_time.tm_mday = atoi(tmp_char);
+
+ memcpy(tmp_char, &time[8], 2);
+ tmp_time.tm_mon = atoi(tmp_char) - 1;
+
+ memcpy(tmp_char, &time[10], 2);
+ tmp_time.tm_year = 100 + atoi(tmp_char);
+
+ time_t _t = mktime(&tmp_time);
+ tzset();
+ _t = _t - timezone;
+
+ return _t;
+}
+
+static time_t ql_get_gnss_time_sec(char *data, int data_len)
+{
+// int i = 0, num = 0;
+ char* previous_p = data;
+ char* current_p = NULL;
+ int current_get_num = 0;
+ char time[15] = {0};
+
+ //$GNRMC,024142.000,A,3039.364421,N,10403.417935,E,0.051,0.00,030124,,E,A*00
+
+ do
+ {
+ current_p = strchr(previous_p, ',');
+ if(current_p != NULL)
+ {
+ current_get_num++;
+ if(current_get_num == 2)
+ {
+ if(previous_p != current_p)
+ {
+ memcpy(time, previous_p, 6);
+ //QL_GNSS_LOGE("[%s] time:%s.", __func__, time);
+ }
+ else
+ {
+ gnss_handle->timestamp = 0;
+ return 0;
+ }
+ }
+
+ if(current_get_num == 10)
+ {
+ if(previous_p != current_p)
+ {
+ memcpy(time + 6, previous_p, 6);
+ //QL_GNSS_LOGE("[%s] date + time:%s.", __func__, time);
+ break;
+ }
+ else
+ {
+ gnss_handle->timestamp = 0;
+ return 0;
+ }
+ }
+
+ if(current_p + 1 <= data + data_len)
+ {
+ previous_p = current_p + 1;
+ }
+ else
+ {
+ QL_GNSS_LOGE("[%s] data out of range.", __func__);
+ gnss_handle->timestamp = 0;
+ return 0;
+ }
+ }
+ }while(current_p != NULL);
+
+ gnss_handle->timestamp = ql_get_timestamp(time);
+
+ return gnss_handle->timestamp;
+}
+
+static void ql_gnss_callback(uint32 ind_type, const void* data, uint32 data_len)
+{
+ if(data == NULL || data_len <= 0)
+ {
+ QL_GNSS_LOGE("[%s] data is NULL.", __func__);
+ return;
+ }
+
+ if(gnss_handle->ind_cb != NULL)
+ {
+ if(ind_type == MBTK_GNSS_IND_NMEA)
+ {
+ nmea_srv_ind_msg nmea_msg = {0};
+ memset(&nmea_msg, 0x0, sizeof(nmea_srv_ind_msg));
+ nmea_msg.msg_id = QL_GNSS_NMEA_MSG;
+ if(data_len <= QL_GNSS_NMEA_SIZE_MAX)
+ {
+ memcpy(nmea_msg.nmea_sentence, (const char *)data, data_len);
+ }
+ else
+ {
+ QL_GNSS_LOGE("[%s] data too long. %s", __func__, (char*)data);
+ return;
+ }
+
+ if(NULL != strstr((char*)data, "RMC"))
+ {
+ nmea_msg.time = ql_get_gnss_time_sec(nmea_msg.nmea_sentence, data_len);
+ }
+ else
+ {
+ nmea_msg.time = gnss_handle->timestamp;
+ }
+
+ gnss_handle->ind_cb((void*)&nmea_msg);
+ }
+ else
+ {
+ QL_GNSS_LOGE("[%s] Unknown IND : %d.", __func__, ind_type);
+ }
+ }
+
+}
+
+/*----------------------------------------------GNSS FUNCTION-------------------------------------*/
+
+/*-----------------------------------------------------------------------------------------------*/
+/**
+ @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)
+{
+ if(NULL == gnss_handle)
+ {
+ gnss_handle = (ql_gnss_info_handle_t*)malloc(sizeof(ql_gnss_info_handle_t));
+ if(NULL == gnss_handle)
+ {
+ QL_GNSS_LOGE("[%s] gnss handle malloc fail.", __func__);
+ return QL_ERR_FAILED;
+ }
+
+ gnss_err_enum ret = mbtk_gnss_init(ql_gnss_callback);
+ if(ret == GNSS_ERR_OK)
+ {
+ gnss_handle->status = QL_GNSS_INIT_STOP;
+ ret = mbtk_gnss_ind_set(MBTK_GNSS_IND_NMEA, QL_GNSS_TIMEOUT);
+ if(ret != GNSS_ERR_OK)
+ {
+ QL_GNSS_LOGE("[%s] gnss ind set fail.[%d]", __func__, ret);
+ goto error_2;
+ }
+ }
+ else
+ {
+ QL_GNSS_LOGE("[%s] gnss init fail.[%d]", __func__, ret);
+ goto error_1;
+ }
+
+ gnss_handle->ind_cb = NULL;
+ gnss_handle->server_cb = NULL;
+ gnss_handle->timestamp = 0;
+ }
+
+ return QL_ERR_OK;
+error_2:
+ if(gnss_handle->status == QL_GNSS_INIT_START)
+ {
+ mbtk_gnss_deinit();
+ gnss_handle->status = QL_GNSS_INIT_STOP;
+ }
+error_1:
+ if(gnss_handle)
+ {
+ free(gnss_handle);
+ gnss_handle = NULL;
+ }
+ return QL_ERR_FAILED;
+}
+
+/*-----------------------------------------------------------------------------------------------*/
+/**
+ @brief Deinitialize the gnss client
+ @return
+ QL_ERR_OK - successful
+ Other - error code defined by ql_type.h
+ */
+/*-----------------------------------------------------------------------------------------------*/
+int ql_gnss_deinit(void)
+{
+ if(NULL == gnss_handle)
+ {
+ QL_GNSS_LOGE("[%s] gnss handle not init.", __func__);
+ return QL_ERR_NOT_INIT;
+ }
+
+ gnss_handle->timestamp = 0;
+ gnss_handle->server_cb = NULL;
+ gnss_handle->ind_cb = NULL;
+
+ gnss_err_enum ret = mbtk_gnss_deinit();
+ if(ret == GNSS_ERR_OK)
+ {
+ gnss_handle->status = QL_GNSS_INIT_STOP;
+ }
+ else
+ {
+ QL_GNSS_LOGE("[%s] gnss init fail.[%d]", __func__, ret);
+ return QL_ERR_FAILED;
+ }
+
+ free(gnss_handle);
+ gnss_handle = NULL;
+
+ return QL_ERR_OK;
+}
+
+/*-----------------------------------------------------------------------------------------------*/
+/**
+ @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)
+{
+ if(NULL == gnss_handle)
+ {
+ QL_GNSS_LOGE("[%s] gnss handle not init.", __func__);
+ return QL_ERR_NOT_INIT;
+ }
+
+ gnss_err_enum ret = GNSS_ERR_UNKNOWN;
+ ret = mbtk_gnss_open(255, QL_GNSS_TIMEOUT);
+ if(ret != GNSS_ERR_OK)
+ {
+ LOGE("[%s] gnss open fail.[%d]", __func__, ret);
+ return QL_ERR_FAILED;
+ }
+
+ gnss_handle->status = QL_GNSS_INIT_START;
+
+ return QL_ERR_OK;
+}
+
+/*-----------------------------------------------------------------------------------------------*/
+/**
+ @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)
+{
+ if(NULL == gnss_handle)
+ {
+ QL_GNSS_LOGE("[%s] gnss handle not init.", __func__);
+ return QL_ERR_NOT_INIT;
+ }
+
+ gnss_err_enum ret = GNSS_ERR_UNKNOWN;
+ ret = mbtk_gnss_close(QL_GNSS_TIMEOUT);
+ if(ret != GNSS_ERR_OK)
+ {
+ LOGE("[%s] gnss close fail.[%d]", ret);
+ return QL_ERR_FAILED;
+ }
+
+ gnss_handle->status = QL_GNSS_INIT_STOP;
+
+ return QL_ERR_OK;
+}
+
+/*-----------------------------------------------------------------------------------------------*/
+/**
+ @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)
+{
+ if(NULL == gnss_handle)
+ {
+ QL_GNSS_LOGE("[%s] gnss handle not init.", __func__);
+ return QL_ERR_NOT_INIT;
+ }
+
+ gnss_err_enum ret = GNSS_ERR_UNKNOWN;
+ char param_buf[32] = {0};
+// int length = 0;
+ int mode = 0;
+
+ if(mask == QL_GNSS_COLD_START)
+ {
+ mode = 3;
+ }
+ else if(mask == QL_GNSS_WARM_START)
+ {
+ mode = 2;
+ }
+ else if(mask == QL_GNSS_HOT_START)
+ {
+ mode = 1;
+ }
+ else
+ {
+ QL_GNSS_LOGE("[%s] mask error.", __func__);
+ return QL_ERR_INVALID_ARG;
+ }
+
+ snprintf(param_buf, 32, "$RESET,%d", mode);
+ ret = mbtk_gnss_setting(param_buf, QL_GNSS_TIMEOUT);
+ if(ret != GNSS_ERR_OK)
+ {
+ LOGE("[%s] gnss setting fail.[%d]", __func__);
+ return QL_ERR_FAILED;
+ }
+
+ return QL_ERR_OK;
+}
+
+/*-----------------------------------------------------------------------------------------------*/
+/**
+ @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)
+{
+ UNUSED(nmea_str);
+
+ if(NULL == gnss_handle)
+ {
+ QL_GNSS_LOGE("[%s] gnss handle not init.", __func__);
+ return QL_ERR_NOT_INIT;
+ }
+
+ return QL_ERR_OK;
+}
+
+/*-----------------------------------------------------------------------------------------------*/
+/**
+ @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)
+{
+ UNUSED(enable);
+ UNUSED(str);
+ UNUSED(len);
+
+ if(NULL == gnss_handle)
+ {
+ QL_GNSS_LOGE("[%s] gnss handle not init.", __func__);
+ return QL_ERR_NOT_INIT;
+ }
+
+ return QL_ERR_OK;
+}
+
+/*-----------------------------------------------------------------------------------------------*/
+/**
+ @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)
+{
+ UNUSED(state);
+
+ if(NULL == gnss_handle)
+ {
+ QL_GNSS_LOGE("[%s] gnss handle not init.", __func__);
+ return QL_ERR_NOT_INIT;
+ }
+
+ return QL_ERR_OK;
+}
+
+/*-----------------------------------------------------------------------------------------------*/
+/**
+ @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)
+{
+ UNUSED(mask);
+
+ if(NULL == gnss_handle)
+ {
+ QL_GNSS_LOGE("[%s] gnss handle not init.", __func__);
+ return QL_ERR_NOT_INIT;
+ }
+
+ return QL_ERR_OK;
+}
+
+/*-----------------------------------------------------------------------------------------------*/
+/**
+ @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)
+{
+ UNUSED(mask);
+
+ if(NULL == gnss_handle)
+ {
+ QL_GNSS_LOGE("[%s] gnss handle not init.", __func__);
+ return QL_ERR_NOT_INIT;
+ }
+
+ return QL_ERR_OK;
+}
+
+/*-----------------------------------------------------------------------------------------------*/
+/**
+ @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)
+{
+ UNUSED(mask);
+
+ if(NULL == gnss_handle)
+ {
+ QL_GNSS_LOGE("[%s] gnss handle not init.", __func__);
+ return QL_ERR_NOT_INIT;
+ }
+
+ return QL_ERR_OK;
+}
+
+/*-----------------------------------------------------------------------------------------------*/
+/**
+ @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)
+{
+ UNUSED(version);
+
+ if(NULL == gnss_handle)
+ {
+ QL_GNSS_LOGE("[%s] gnss handle not init.", __func__);
+ return QL_ERR_NOT_INIT;
+ }
+
+ return QL_ERR_OK;
+}
+
+/*-----------------------------------------------------------------------------------------------*/
+/**
+ @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)
+{
+ UNUSED(version);
+
+ if(NULL == gnss_handle)
+ {
+ QL_GNSS_LOGE("[%s] gnss handle not init.", __func__);
+ return QL_ERR_NOT_INIT;
+ }
+
+ return QL_ERR_OK;
+}
+
+/*-----------------------------------------------------------------------------------------------*/
+/**
+ @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)
+{
+ if(NULL == gnss_handle)
+ {
+ QL_GNSS_LOGE("[%s] gnss handle not init.", __func__);
+ return QL_ERR_NOT_INIT;
+ }
+
+ char eph_file[32] = {0};
+ gnss_err_enum ret = GNSS_ERR_UNKNOWN;
+ char write_buff[512] = {0};
+// int write_length = 0;
+
+ if((mask & QL_GNSS_EPH_DATA_GPS) == mask)
+ {
+ memcpy(eph_file, QL_AGNSS_EPH_GPS, strlen(QL_AGNSS_EPH_GPS));
+ }
+ else if((mask & QL_GNSS_EPH_DATA_BDS) == mask)
+ {
+ memcpy(eph_file, QL_AGNSS_EPH_BDS, strlen(QL_AGNSS_EPH_BDS));
+ }
+ else if((mask & QL_GNSS_EPH_DATA_GLO) == mask)
+ {
+ memcpy(eph_file, QL_AGNSS_EPH_GLO, strlen(QL_AGNSS_EPH_GLO));
+ }
+ else if((mask & QL_GNSS_EPH_DATA_GAL) == mask)
+ {
+ memcpy(eph_file, QL_AGNSS_EPH_GAL, strlen(QL_AGNSS_EPH_GAL));
+ }
+ else if((mask & QL_GNSS_EPH_DATA_QZSS) == mask)
+ {
+ memcpy(eph_file, QL_AGNSS_EPH_QZS, strlen(QL_AGNSS_EPH_QZS));
+ }
+ else if((mask & (QL_GNSS_EPH_DATA_GPS | QL_GNSS_EPH_DATA_BDS)) == mask)
+ {
+ memcpy(eph_file, QL_AGNSS_EPH_GPS_BDS, strlen(QL_AGNSS_EPH_GPS_BDS));
+ }
+ else if((mask & (QL_GNSS_EPH_DATA_GPS | QL_GNSS_EPH_DATA_GLO)) == mask)
+ {
+ memcpy(eph_file, QL_AGNSS_EPH_GPS_GLO, strlen(QL_AGNSS_EPH_GPS_GLO));
+ }
+ else if((mask & (QL_GNSS_EPH_DATA_GPS | QL_GNSS_EPH_DATA_GAL)) == mask)
+ {
+ memcpy(eph_file, QL_AGNSS_EPH_GPS_GAL, strlen(QL_AGNSS_EPH_GPS_GAL));
+ }
+ else if((mask & (QL_GNSS_EPH_DATA_GPS | QL_GNSS_EPH_DATA_QZSS)) == mask)
+ {
+ memcpy(eph_file, QL_AGNSS_EPH_GPS_QZSS, strlen(QL_AGNSS_EPH_GPS_QZSS));
+ }
+ else
+ {
+ QL_GNSS_LOGE("[%s] unknown mask.", __func__);
+ return QL_ERR_INVALID_ARG;
+ }
+
+ snprintf(write_buff, 512, "$AGPSCFG,%s%s,NULL,NULL", QL_AGNSS_URL_PATH, eph_file);
+ ret = mbtk_gnss_setting(write_buff, QL_GNSS_TIMEOUT);
+ if(ret != GNSS_ERR_OK)
+ {
+ LOGE("[%s] gnss setting fail.[%d]", __func__, ret);
+ return QL_ERR_FAILED;
+ }
+ return QL_ERR_OK;
+}
+
+/*-----------------------------------------------------------------------------------------------*/
+/**
+ @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)
+{
+ if(NULL == gnss_handle)
+ {
+ QL_GNSS_LOGE("[%s] gnss handle not init.", __func__);
+ return QL_ERR_NOT_INIT;
+ }
+
+ gnss_err_enum ret = GNSS_ERR_UNKNOWN;
+ ret = mbtk_gnss_eph_download(QL_AGNSS_DOWNLOAD_TIMEPUT);
+ if(ret != GNSS_ERR_OK)
+ {
+ LOGE("[%s] gnss eph download fail.[%d]", __func__, ret);
+ return QL_ERR_FAILED;
+ }
+
+ ret = mbtk_gnss_eph_inject(QL_AGNSS_INJECT_TIMEOUT);
+ if(ret != GNSS_ERR_OK)
+ {
+ LOGE("[%s] gnss eph inject fail.[%d]", __func__, ret);
+ return QL_ERR_FAILED;
+ }
+
+ return QL_ERR_OK;
+}
+
+/*-----------------------------------------------------------------------------------------------*/
+/**
+ @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)
+{
+ UNUSED(timestamp);
+
+ if(NULL == gnss_handle)
+ {
+ QL_GNSS_LOGE("[%s] gnss handle not init.", __func__);
+ return QL_ERR_NOT_INIT;
+ }
+
+ return QL_ERR_OK;
+}
+
+/*-----------------------------------------------------------------------------------------------*/
+/**
+ @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)
+{
+ if(NULL == gnss_handle)
+ {
+ QL_GNSS_LOGE("[%s] gnss handle not init.", __func__);
+ return QL_ERR_NOT_INIT;
+ }
+
+ return QL_ERR_OK;
+}
+
+/*-----------------------------------------------------------------------------------------------*/
+/**
+ @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)
+{
+ if(NULL == gnss_handle)
+ {
+ QL_GNSS_LOGE("[%s] gnss handle not init.", __func__);
+ return QL_ERR_NOT_INIT;
+ }
+
+ return QL_ERR_OK;
+}
+
+
+
+
+/*-----------------------------------------------------------------------------------------------*/
+/**
+ @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)
+{
+ if(NULL == gnss_handle)
+ {
+ QL_GNSS_LOGE("[%s] gnss handle not init.", __func__);
+ return QL_ERR_NOT_INIT;
+ }
+
+ gnss_handle->ind_cb = cb;
+
+ return QL_ERR_OK;
+}
+
+/*-----------------------------------------------------------------------------------------------*/
+/**
+ @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)
+{
+ if(NULL == gnss_handle)
+ {
+ QL_GNSS_LOGE("[%s] gnss handle not init.", __func__);
+ return QL_ERR_NOT_INIT;
+ }
+
+ gnss_handle->server_cb = cb;
+
+ return QL_ERR_OK;
+}
+