[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/hd8122_dl/fwup.c b/mbtk/mbtk_gnssd/hd8122_dl/fwup.c
index b2662aa..9567ea6 100755
--- a/mbtk/mbtk_gnssd/hd8122_dl/fwup.c
+++ b/mbtk/mbtk_gnssd/hd8122_dl/fwup.c
@@ -313,11 +313,113 @@
* @param len : the length of firmware data
* @retval None
*/
+ //8040update
int fw_update_boot(int uart_fd, uint8_t *data, uint32_t len)
{
int i = 1;
// uint8_t dataAck[10];
- //1st 1KB send at last
+// 1st 1KB send at last
+ uint8_t *data1st1k = data;
+ uint8_t recvBuf[READ_LENGTH] = {0};
+ uint8_t errorCount = 0;
+ int32_t ret = 0;
+ if (NULL == data )
+ {
+ HDBD_LOG("[%s %d]firmware data error\n", __FUNCTION__, __LINE__);
+ return -1;
+ }
+
+ uart_clear_buf(uart_fd);
+ errorCount = 0;
+ while(1)
+ {
+ ret = get_mon_ver(uart_fd, (uint8_t *)recvBuf, READ_LENGTH - 1);
+ errorCount ++;
+ if (ret != 0)
+ {
+ HDBD_LOG("[%s %d]boot: Get version FAIL in baudrate 460800, return\n", __FUNCTION__, __LINE__);
+ if(errorCount >= 4)
+ {
+ HDBD_LOG("[%s %d] enter boot failed!\n", __FUNCTION__, __LINE__);
+ return -1;
+ }
+ }
+ else
+ {
+ break;
+ }
+ }
+
+ i = 0;
+ while(i < 15)
+ {
+ if( (recvBuf[i] == 'F') && (recvBuf[i+1] == 'B') && (recvBuf[i+2] == '0') && (recvBuf[i+3] == '3'))
+ {
+ goto BOOT;
+ }
+ HDBD_LOG("[%s %d] enter boot failed!\n", __FUNCTION__, __LINE__);
+ return -1;
+ }
+
+BOOT:
+ ret = uart_send(uart_fd, (uint8_t *)cmdSETFRQ, sizeof(cmdSETFRQ));
+ usleep(50000);
+
+ uart_clear_buf(uart_fd);
+ memset(recvBuf, 0x00, sizeof(recvBuf));
+ i = 10;
+
+ ret = send_cmd_and_recv_result(uart_fd,cmdBOOTERASE_100, recvBuf, sizeof(cmdBOOTERASE_100), &i, 3);
+ HDBD_LOG("[%s %d]ret:%d,cmdOpenQe_and_wrtPro(%d)(%02x,%x,%x,%x,%x,%x,%x,%x,%x,%x)\n", __FUNCTION__, __LINE__, ret, i,
+ recvBuf[0],recvBuf[1],recvBuf[2],recvBuf[3],recvBuf[4],recvBuf[5],
+ recvBuf[6],recvBuf[7],recvBuf[8],recvBuf[9]);
+ if( (recvBuf[0] == 0xF1) && (recvBuf[1] == 0xD9) && (recvBuf[2] == 0x05) && (recvBuf[3] != 0x01) )
+ {
+ HDBD_LOG("[%s %d] cmdBOOTERASE error!\n", __FUNCTION__, __LINE__);
+ return -1;
+ }
+
+ uart_clear_buf(uart_fd);
+
+ data += 1024;
+ len -= 1024;
+ for(i = 1 ;len > 1024; ++i, data += 1024, len -= 1024)
+ {
+ ret = sendfwboot(uart_fd, 0x00100000 + i * 0x400, i, data, 1024, recvBuf);
+ if (ret != 0)
+ {
+ HDBD_LOG("[%s %d] upgrade error,return!\n", __FUNCTION__, __LINE__);
+ return -1;
+ }
+ }
+
+ ret = sendfwboot(uart_fd, 0x00100000 + i * 0x400, i, data, len, recvBuf);
+ if (ret != 0)
+ {
+ HDBD_LOG("[%s %d] upgrade error,return!\n", __FUNCTION__, __LINE__);
+ return -1;
+ }
+ i++;
+
+ ret = sendfwboot(uart_fd, 0x00100000, i, data1st1k, 1024, recvBuf);
+ if (ret != 0)
+ {
+ HDBD_LOG("[%s %d] upgrade error,return!\n", __FUNCTION__, __LINE__);
+ return -1;
+ }
+
+ //uart_send((uint8_t *)cmdCFGRST, 9);
+ HDBD_LOG("[%s %d] upgrade success!\n", __FUNCTION__, __LINE__);
+ return 0;
+}
+
+
+//8122update
+int fw_update_boot_8122(int uart_fd, uint8_t *data, uint32_t len)
+{
+ int i = 1;
+// uint8_t dataAck[10];
+// 1st 1KB send at last
uint8_t *data1st1k = data;
uint8_t recvBuf[READ_LENGTH] = {0};
uint8_t errorCount = 0;
@@ -424,7 +526,6 @@
}
}
-
ret = send_cmd_and_recv_result(uart_fd,cmdBOOTERASE_900, recvBuf, sizeof(cmdBOOTERASE_900), &i, 3);
HDBD_LOG("[%s %d]ret:%d,cmdOpenQe_and_wrtPro(%d)(%02x,%x,%x,%x,%x,%x,%x,%x,%x,%x)\n", __FUNCTION__, __LINE__, ret, i,
recvBuf[0],recvBuf[1],recvBuf[2],recvBuf[3],recvBuf[4],recvBuf[5],
@@ -469,4 +570,3 @@
return 0;
}
-