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)
diff --git a/mbtk/mbtk_gnssd/hd8122_dl/fwup.c b/mbtk/mbtk_gnssd/hd8122_dl/fwup.c
index 16b30a5..9b667cf 100755
--- a/mbtk/mbtk_gnssd/hd8122_dl/fwup.c
+++ b/mbtk/mbtk_gnssd/hd8122_dl/fwup.c
@@ -466,7 +466,7 @@
 

 	//uart_send((uint8_t *)cmdCFGRST, 9);

 	HDBD_LOG("[%s %d] upgrade success!\n", __FUNCTION__, __LINE__);

-	return 1;

+	return 0;

 }

 

 

diff --git a/mbtk/mbtk_gnssd/hd8122_dl/port.h b/mbtk/mbtk_gnssd/hd8122_dl/port.h
index 56ea1e9..5e55db8 100755
--- a/mbtk/mbtk_gnssd/hd8122_dl/port.h
+++ b/mbtk/mbtk_gnssd/hd8122_dl/port.h
@@ -16,11 +16,12 @@
 #include <dirent.h>

 #include <sys/stat.h>

 

+#include "mbtk_log.h"

 #define SUCCESS 0

 #define FAIL -1

 

 #ifndef HDBD_LOG

-#define HDBD_LOG printf

+#define HDBD_LOG LOGE

 #endif

 

 typedef unsigned char  uint8_t;