问题:冷启动指令无效果
原因:8122 gnss保存了星历数据
解决方案:打开gnss时关闭星历保存
影响:影响gnss功能模块
Change-Id: If869301152e9cdf076351a1e17a1404e79af0059
diff --git a/mbtk/mbtk_gnssd/gnss_hd8122.c b/mbtk/mbtk_gnssd/gnss_hd8122.c
index e61bfe6..de0a5fa 100755
--- a/mbtk/mbtk_gnssd/gnss_hd8122.c
+++ b/mbtk/mbtk_gnssd/gnss_hd8122.c
@@ -573,6 +573,23 @@
return GNSS_ERR_OK;
}
+static gnss_err_enum gnss_8122_ephsave(int fd, uint8 status)
+{
+ uint8 buff[GNSS_PACK_BUFF_SIZE];
+ LOGD("EPHSAVE");
+ int len = pack_create(HD8122_ID_TYPE_CFG, HD8122_ID_CFG_EPHSAVE, 1, (uint8*)(&status), buff, sizeof(buff));
+ if(len <= 0)
+ {
+ LOGE("pack_create() fail.");
+ return GNSS_ERR_ARG;
+ }
+ log_hex("PACK", buff, len);
+ gnss_write(fd, buff, len);
+ msg_insert(HD8122_ID_TYPE_CFG, HD8122_ID_CFG_EPHSAVE);
+ return GNSS_ERR_OK;
+}
+
+
int gnss_8122_dev_open()
{
//return mbtk_gpio_value_set(GNSS_POWER_GPIO, MBTK_GPIO_DIRECT_OUT, 1);
@@ -601,6 +618,14 @@
return gnss_port_close(fd);
}
+int gnss_8122_init_set(int fd)
+{
+ sleep(1); //wait 8122 ready...
+ gnss_8122_ephsave(fd, (uint8)HD8122_EPHSAVE_STATUS_DISABLE);
+ gnss_8122_cfg_save(fd);
+ return GNSS_ERR_OK;
+}
+
int gnss_8122_fw_dl(int fd, const char *fw_name, const char *dev)
{
int uart_fd = OpenUart(dev);//PORT_NAME234
diff --git a/mbtk/mbtk_gnssd/gnss_hd8122.h b/mbtk/mbtk_gnssd/gnss_hd8122.h
index 1917ff1..da51d20 100755
--- a/mbtk/mbtk_gnssd/gnss_hd8122.h
+++ b/mbtk/mbtk_gnssd/gnss_hd8122.h
@@ -94,6 +94,10 @@
HD8122_ID_AID_PALM_QZSS = 0x26
} hd8122_id_aid_enum;
+typedef enum {
+ HD8122_EPHSAVE_STATUS_DISABLE = 0x0,
+ HD8122_EPHSAVE_STATUS_ENABLE = 0x1
+} hd8122_ephsave_status_enum;
typedef struct {
bool enable;
uint8 gid; // Groud ID
@@ -117,6 +121,8 @@
int gnss_8122_close();
+int gnss_8122_init_set(int fd);
+
int gnss_8122_fw_dl(int fd, const char *fw_name, const char *dev);
gnss_err_enum gnss_8122_agnss_get_eph(const char *param);
diff --git a/mbtk/mbtk_gnssd/gnss_info.h b/mbtk/mbtk_gnssd/gnss_info.h
index 6b2c255..7d1b3e3 100755
--- a/mbtk/mbtk_gnssd/gnss_info.h
+++ b/mbtk/mbtk_gnssd/gnss_info.h
@@ -76,6 +76,7 @@
typedef int (*gnss_dev_close_func)(int fd);
typedef int (*gnss_open_func)(const char *dev);
typedef int (*gnss_close_func)(int fd);
+typedef int (*gnss_init_set_func)(int fd);
typedef int (*gnss_fw_dl_func)(int fd, const char *fw_name, const char *dev);
typedef void (*gnss_dl_read_cb_func)(const void *data, int data_len);
typedef gnss_err_enum (*gnss_set_func)(int fd, const char *cmd, void *cmd_rsp, int cmd_rsp_len);
@@ -137,6 +138,7 @@
gnss_dev_close_func gnss_dev_close;
gnss_open_func gnss_open;
gnss_close_func gnss_close;
+ gnss_init_set_func gnss_init_set;
gnss_fw_dl_func gnss_fw_dl;
gnss_dl_read_cb_func gnss_dl_read_cb;
gnss_set_func gnss_set;
diff --git a/mbtk/mbtk_gnssd/gnss_main.c b/mbtk/mbtk_gnssd/gnss_main.c
index a495f4f..0fc37d0 100755
--- a/mbtk/mbtk_gnssd/gnss_main.c
+++ b/mbtk/mbtk_gnssd/gnss_main.c
@@ -832,6 +832,10 @@
LOGD("GNSS open success.");
+ if(NULL != gnss_info.gnss_init_set)
+ {
+ gnss_info.gnss_init_set(gnss_info.fd);
+ }
#if MBTK_GNSS_TEST_LOG
gnss_test_log("gnss open success.");
#endif
@@ -1131,6 +1135,7 @@
gnss_info.gnss_dev_close = gnss_6228_dev_close;
gnss_info.gnss_open = gnss_6228_open;
gnss_info.gnss_close = gnss_6228_close;
+ gnss_info.gnss_init_set = NULL;
gnss_info.gnss_fw_dl = gnss_6228_fw_dl;
gnss_info.gnss_dl_read_cb = gnss_6228_dl_read_cb;
gnss_info.gnss_set = gnss_6228_set;
@@ -1146,6 +1151,7 @@
gnss_info.gnss_dev_close = gnss_8122_dev_close;
gnss_info.gnss_open = gnss_8122_open;
gnss_info.gnss_close = gnss_8122_close;
+ gnss_info.gnss_init_set = gnss_8122_init_set;
gnss_info.gnss_fw_dl = gnss_8122_fw_dl;
gnss_info.gnss_dl_read_cb = NULL;
gnss_info.gnss_set = gnss_8122_set;
@@ -1161,6 +1167,7 @@
gnss_info.gnss_dev_close = gnss_5311_dev_close;
gnss_info.gnss_open = gnss_5311_open;
gnss_info.gnss_close = gnss_5311_close;
+ gnss_info.gnss_init_set = NULL;
gnss_info.gnss_fw_dl = gnss_5311_fw_dl;
gnss_info.gnss_dl_read_cb = NULL;
gnss_info.gnss_set = gnss_5311_set;
@@ -1176,6 +1183,7 @@
gnss_info.gnss_dev_close = gnss_n50db_dev_close;
gnss_info.gnss_open = gnss_n50db_open;
gnss_info.gnss_close = gnss_n50db_close;
+ gnss_info.gnss_init_set = NULL;
gnss_info.gnss_fw_dl = gnss_n50db_fw_dl;
gnss_info.gnss_dl_read_cb = NULL;
gnss_info.gnss_set = gnss_n50db_set;