[Feature][T108][task-view-1878]add hd8040 fw update and hd8122 fw update
Only Configure:No
Affected branch:mbtk_source_ds
Affected module:fw_date
Is it affected on: GNSS
Self-test: Yes
Doc Update:No
Change-Id: I276760cfc11ed18565ea004824615ee5285ba8e6
diff --git a/mbtk/mbtk_gnssd/gnss_hd8122.c b/mbtk/mbtk_gnssd/gnss_hd8122.c
index d9c61e2..ea1ced8 100755
--- a/mbtk/mbtk_gnssd/gnss_hd8122.c
+++ b/mbtk/mbtk_gnssd/gnss_hd8122.c
@@ -61,7 +61,7 @@
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";
+//static char gnss_ctrl_path[128] = "/sys/devices/platform/mbtk-gnss/ctrl";
static gnss_agps_info_t agps_info;
static char *gnss_set_cmd_rsp = NULL;
static int gnss_cmd_rsp_len = 0;
@@ -70,6 +70,8 @@
int OpenUart(const char* UART_DEV);
int uart_close(int fd);
int fw_update_boot(int uart_fd, uint8_t *data, uint32_t len);
+int fw_update_boot_8122(int uart_fd, uint8_t *data, uint32_t len);
+
static uint16 fletcher16(const uint8_t* data, int data_len)
{
@@ -184,40 +186,6 @@
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)
{
@@ -634,7 +602,8 @@
int gnss_8122_fw_dl(int fd, const char *fw_name, const char *dev)
{
- int uart_fd = OpenUart(dev);//PORT_NAME234
+ //PORT_NAME234
+ int uart_fd = open(dev , O_RDWR|O_NOCTTY);
if (uart_fd < 0)
{
LOGE("open uart failed %d[%d]", uart_fd, errno);
@@ -651,6 +620,13 @@
{
memcpy(fw_path, GNSS_FW_GAQBS_PATH, strlen(GNSS_FW_GAQBS_PATH));
}
+ else if(fw_name != NULL)
+ {
+ memcpy(fw_path, fw_name, strlen(fw_name));
+ LOGE("fw_path: %s",fw_path);
+ }
+
+
else
{
LOGE("fw dl param error");
@@ -669,43 +645,91 @@
LOGE("Read file failed ,len = %d", len);
goto error;
}
- if(gnss_8122_dev_open())
- {
- LOGE("open gnss device fail:%d", errno);
- goto error;
+
+ int ret;
+ // branch1:gp_gl_ga & gp_bd_ga
+ if (memcmp(fw_name, "gp_gl_ga", 8) == 0 || memcmp(fw_name, "gp_bd_ga", 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
+ mbtk_system("echo 62 > /sys/class/gpio/unexport");
+ mbtk_system("echo 63 > /sys/class/gpio/unexport");
+
+
+ ret = fw_update_boot_8122(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;
+ }
+ // branch2: else
+ else {
+ mbtk_system("echo 0 > /sys/class/gpio/gpio41/value");//41 gnss_power_en
+ 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
+ usleep(500000);//500ms
+
+
+ ret = fw_update_boot(uart_fd, g_bin_buff, len);
+ if (ret < 0)
+ {
+ LOGE("fw_update_boot() fail : %d", ret);
+ 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;
}
- if(gnss_fwdl_enable() < 0)
- {
- LOGE("gnss_fwdl_enable fail");
- goto error;
- }
-
- int ret = fw_update_boot(uart_fd, g_bin_buff, len);
- if (ret < 0)
- {
- LOGE("fw_update_boot() fail : %d", ret);
- goto error;
- }
- if(ret == HDBD_UPG_SUCESS)
- {
- LOGD("upgrade sucess!");
- }
- else
- {
- LOGD("upgrade FAIL, fail style:%d", ret);
- 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)
{