gnss: update gnss fw download code
Change-Id: Iaba40436629ee6ff4b63961d697eeb27ced814c2
diff --git a/mbtk/mbtk_gnssd/gnss_hd8122.c b/mbtk/mbtk_gnssd/gnss_hd8122.c
index 5a328de..8b476ce 100755
--- a/mbtk/mbtk_gnssd/gnss_hd8122.c
+++ b/mbtk/mbtk_gnssd/gnss_hd8122.c
@@ -34,7 +34,8 @@
#define GNSS_PACK_BUFF_SIZE 1024
#define GNSS_MSG_NUM_MAX 30
#define READ_LEN_MAX 1024 //BOOT_UPGRADE_BUFF_MAX_1
-
+#define GNSS_FW_GQALS_PATH "/lib/firmware/HD8122.YIKE.GN3.115200.0035.720e5.53ef0.GQALS.ANT.EPH.CFG.PPS13.240115R1.bin"
+#define GNSS_FW_GAQBS_PATH "/lib/firmware/HD8122.YIKE.GN3.115200.0037.dbd12.53ef0.GAQBS.B1C.ANT.EPH.CFG.PPS13.240416R1.bin"
static pthread_cond_t read_cond;
static pthread_mutex_t read_mutex;
@@ -43,6 +44,8 @@
static void *gnss_set_rsp_ptr = NULL;
static gnss_err_enum gnss_set_result = GNSS_ERR_OK;
static hd8122_msg_id_t msg_array[GNSS_MSG_NUM_MAX];
+static char gnss_ctrl_path[128] = "/sys/devices/platform/mbtk-gnss/ctrl";
+
int gnss_write(int fd, const void *data, int data_len);
int OpenUart(char* UART_DEV);
@@ -160,6 +163,41 @@
return count;
}
+static int gnss_ctrl_write(char* str)
+{
+ int fd = -1;
+ int ret = -1;
+ fd = open((const char*)gnss_ctrl_path, O_WRONLY);
+ if (fd < 0)
+ {
+ LOGE("open %s fail", gnss_ctrl_path);
+ return -1;
+ }
+ else
+ {
+ ret = write(fd, str, strlen(str));
+ close(fd);
+ if(ret < 0)
+ {
+ LOGE("write %s fail", str);
+ return -1;
+ }
+ }
+ return 0;
+}
+
+static int gnss_fwdl_enable()
+{
+ int ret = -1;
+ ret = gnss_ctrl_write("fdl");
+ if(ret < 0)
+ {
+ LOGE("gnss_ctrl_write fail");
+ return -1;
+ }
+ return 0;
+}
+
static uint32_t read_bin_file(uint8_t *path, uint8_t *buff)
{
int fp = -1;
@@ -469,40 +507,83 @@
return GNSS_ERR_OPEN_DEV;
}
+ uint8_t fw_path[256] = {0};
+ memset(fw_path, 0x0, 256);
+ if(memcmp(fw_name, "gp_gl_ga", 8) == 0)
+ {
+ memcpy(fw_path, GNSS_FW_GQALS_PATH, strlen(GNSS_FW_GQALS_PATH));
+ }
+ else if(memcmp(fw_name, "gp_bd_ga", 8) == 0)
+ {
+ memcpy(fw_path, GNSS_FW_GAQBS_PATH, strlen(GNSS_FW_GAQBS_PATH));
+ }
+ else
+ {
+ LOGE("fw dl param error");
+ return GNSS_ERR_ARG;
+ }
+
uint8_t *g_bin_buff = (uint8_t*)malloc(500*1024);
if(g_bin_buff == NULL) {
LOGE("malloc() fail : %d", errno);
return GNSS_ERR_UNKNOWN;
}
memset(g_bin_buff, 0, 500*1024);
- uint32_t len = read_bin_file(fw_name, g_bin_buff);
+ uint32_t len = read_bin_file(fw_path, g_bin_buff);
if (len <= 0)
{
LOGE("Read file failed ,len = %d", len);
- return GNSS_ERR_DL_FW;
+ goto error;
}
- if(gnss_8122_dev_open()) {
+ if(gnss_8122_dev_open())
+ {
LOGE("open gnss device fail:%d", errno);
- return GNSS_ERR_DL_FW;
+ goto error;
}
+
+ if(gnss_fwdl_enable() < 0)
+ {
+ LOGE("gnss_fwdl_enable fail");
+ goto error;
+ }
+
int ret = fw_update_boot(uart_fd, g_bin_buff, len);
- free(g_bin_buff);
if (ret < 0)
{
LOGE("fw_update_boot() fail : %d", ret);
- return GNSS_ERR_DL_FW;
+ goto error;
}
- uart_close(uart_fd);
if(ret == HDBD_UPG_SUCESS)
{
LOGD("upgrade sucess!");
- return GNSS_ERR_OK;
}
else
{
LOGD("upgrade FAIL, fail style:%d", ret);
- return GNSS_ERR_DL_FW;
+ goto error;
}
+
+ if(gnss_8122_dev_close(0))
+ {
+ LOGE("close gnss device fail:%d", errno);
+ goto error;
+ }
+ free(g_bin_buff);
+ g_bin_buff = NULL;
+ uart_close(uart_fd);
+ return GNSS_ERR_OK;
+error:
+ if(g_bin_buff)
+ {
+ free(g_bin_buff);
+ g_bin_buff = NULL;
+ }
+ if(uart_fd > 0)
+ {
+ uart_close(uart_fd);
+ uart_fd = -1;
+ }
+ return GNSS_ERR_DL_FW;
}
void gnss_8122_set_cb(const void *data, int data_len)