Merge "[Bugfix][T108-yd][bug-view-2298][data] in data call demo, ql_data_call_config apn id 2, then start data call fail"
diff --git a/mbtk/mbtk_gnssd/gnss_hd8122.c b/mbtk/mbtk_gnssd/gnss_hd8122.c
index ea1ced8..34cda32 100755
--- a/mbtk/mbtk_gnssd/gnss_hd8122.c
+++ b/mbtk/mbtk_gnssd/gnss_hd8122.c
@@ -41,6 +41,7 @@
 #define READ_LEN_MAX 1024 //BOOT_UPGRADE_BUFF_MAX_1
 #define GNSS_FW_GQALS_PATH "/lib/firmware/gp_gl_ga_fw.bin"
 #define GNSS_FW_GAQBS_PATH "/lib/firmware/gp_bd_ga_fw.bin"
+#define GNSS_FW_8040_PATH "/lib/firmware/gnss8040_fw.bin"
 
 //#define AGNSS_TEST_URL               "http://aclientt.allystar.com:80/ephemeris/HD_GPS_BDS.hdb"
 #define AGNSS_URL                    "http://uagnss.allystar.com:80/ephemeris/%s?compid=yikecs1&token=Z38w5urAuawubTxi"
@@ -620,6 +621,10 @@
     {
         memcpy(fw_path, GNSS_FW_GAQBS_PATH, strlen(GNSS_FW_GAQBS_PATH));
     }
+    else if(memcmp(fw_name, "gnss8040", 8) == 0)
+    {
+        memcpy(fw_path, GNSS_FW_8040_PATH, strlen(GNSS_FW_8040_PATH));
+    }
     else if(fw_name != NULL)
     {
         memcpy(fw_path, fw_name, strlen(fw_name));
@@ -666,6 +671,10 @@
         mbtk_system("echo 0 > /sys/class/gpio/gpio62/value");
         usleep(100000);//100ms
         mbtk_system("echo 1 > /sys/class/gpio/gpio63/value");//boot
+        usleep(100000);//100ms
+        mbtk_system("echo 0 > /sys/class/gpio/gpio63/value");
+        usleep(100000);//100ms
+        mbtk_system("echo in > /sys/class/gpio/gpio63/direction");
         mbtk_system("echo 62 > /sys/class/gpio/unexport");
         mbtk_system("echo 63 > /sys/class/gpio/unexport");
 
@@ -697,14 +706,69 @@
         uart_close(uart_fd);
         return GNSS_ERR_OK;
     }
-    // branch2: else
+    // branch2: gns_8040
+    else if (memcmp(fw_name, "gnss8040", 8) == 0)
+    {
+        if(gnss_8122_dev_open())
+        {
+            LOGE("open gnss device fail:%d", errno);
+            goto error;
+        }
+    
+        mbtk_system("echo 63 > /sys/class/gpio/export");
+        mbtk_system("echo 62 > /sys/class/gpio/export");
+        mbtk_system("echo out > /sys/class/gpio/gpio63/direction");
+        mbtk_system("echo out > /sys/class/gpio/gpio62/direction");
+        mbtk_system("echo 0 > /sys/class/gpio/gpio63/value");
+        usleep(100000);//100ms
+        mbtk_system("echo 1 > /sys/class/gpio/gpio62/value");//reset
+        usleep(1000000);//1s
+        mbtk_system("echo 0 > /sys/class/gpio/gpio62/value");
+        usleep(100000);//100ms
+        mbtk_system("echo 1 > /sys/class/gpio/gpio63/value");//boot
+        usleep(100000);//100ms
+        mbtk_system("echo 0 > /sys/class/gpio/gpio63/value");
+        usleep(100000);//100ms
+        mbtk_system("echo in > /sys/class/gpio/gpio63/direction");
+        mbtk_system("echo 62 > /sys/class/gpio/unexport");
+        mbtk_system("echo 63 > /sys/class/gpio/unexport");
+    
+        ret = fw_update_boot(uart_fd, g_bin_buff, len);
+        if (ret < 0)
+        {
+            LOGE("fw_update_boot() fail : %d", ret);
+            goto error;
+        }
+        if(gnss_8122_dev_close(0))
+        {
+            LOGE("close gnss device fail:%d", errno);
+            goto error;
+        }
+    
+        if(ret == HDBD_UPG_SUCESS)
+        {
+            LOGD("upgrade sucess!");
+        }
+        else
+        {
+            LOGD("upgrade FAIL, fail style:%d", ret);
+            goto error;
+        }
+    
+        free(g_bin_buff);
+        uart_close(uart_fd);
+        return GNSS_ERR_OK;
+    }
+    // branch3: else
     else {
-        mbtk_system("echo 0 > /sys/class/gpio/gpio41/value");//41 gnss_power_en
+        mbtk_system("echo 1 > /sys/class/gpio/gpio47/value");//47 reset
         usleep(500000);//500ms
-
+        
         mbtk_system("echo 1 > /sys/class/gpio/gpio120/value");//120 boot
         usleep(500000);//500ms
-        mbtk_system("echo 1 > /sys/class/gpio/gpio41/value");//41 gnss_power_en
+        mbtk_system("echo 0 > /sys/class/gpio/gpio47/value");//47 reset
+        usleep(500000);//500ms
+        mbtk_system("echo 0 > /sys/class/gpio/gpio120/value");
         usleep(500000);//500ms