[T106][ZXW-22]7520V3SCV2.01.01.02P42U09_VEC_V0.8_AP_VEC origin source commit
Change-Id: Ic6e05d89ecd62fc34f82b23dcf306c93764aec4b
diff --git a/boot/common/src/uboot/downloader/cmd_downloader.c b/boot/common/src/uboot/downloader/cmd_downloader.c
new file mode 100644
index 0000000..9d0cbf4
--- /dev/null
+++ b/boot/common/src/uboot/downloader/cmd_downloader.c
@@ -0,0 +1,229 @@
+/*
+ ******************************************************************************
+ * Copyright (C) 2016, ZIXC Corporation.
+ *
+ * File Name:
+ * File Mark:
+ * Description:
+ * Others:
+ * Version: 1.0
+ * Author: geanfeng
+ * Date: 2013-3-4
+ * History 1:
+ * Date:
+ * Version:
+ * Author:
+ * Modification:
+ * History 2:
+ *******************************************************************************
+ */
+
+/*
+ ***************************************************************************
+ * Include files
+ ***************************************************************************
+ */
+#include <common.h>
+#include <command.h>
+#include <net.h>
+#include "downloader_serial.h"
+#include "partition_table.h"
+
+
+/****************************************************************************
+* Local Macros
+****************************************************************************/
+#define TSP_DOWNLOADER_CBSIZE 256
+
+/****************************************************************************
+* Local Types
+****************************************************************************/
+
+/****************************************************************************
+* Global Variables
+****************************************************************************/
+//char tsp_console_buffer[TSP_DOWNLOADER_CBSIZE + 1]; /* downloader I/O buffer */
+ char *tsp_console_buffer = (char*)(CONFIG_NAND_DMA_BUF_ADDR+0x4000);
+
+unsigned int null_slice_flag = 0;
+
+
+/****************************************************************************
+* Global Function Prototypes
+****************************************************************************/
+extern void downloader_serial_init(void);
+extern int UART_CmdRead(char *pchBuf, int dwLen);
+
+/****************************************************************************
+* Function Definitions
+****************************************************************************/
+/*******************************************************************************
+ * Function:downloader_readline_into_buffer
+ * Description:
+ * Parameters:
+ * Input:
+ *
+ * Output:
+ *
+ * Returns:
+ *
+ *
+ * Others:
+ ********************************************************************************/
+int downloader_readline_into_buffer (char * buffer)
+{
+ char * p_buf = buffer;
+ unsigned int retSize = 0;
+ unsigned int recvSize = 0;
+
+ while(1)
+ {
+#if CONFIG_USB_DL
+ retSize = downloader_serial_read(p_buf,512);
+#else
+ retSize = UART_CmdRead(p_buf,512);
+#endif
+ if(retSize<=0)
+ {
+ continue;
+ }
+ recvSize += retSize;
+ if(recvSize >= TSP_DOWNLOADER_CBSIZE)
+ {
+ recvSize = 0;
+ p_buf = buffer;
+ }
+ if(buffer[0] == 0x5a) /*filter syc 0x5a*/
+ {
+ printf("readline filter syc 0x5a\n");
+ recvSize = 0;
+ continue;
+ }
+
+ switch(p_buf[retSize-1])
+ {
+ case '\r': /*Enter */
+ case '\n':
+ case '\0':
+ while(retSize>0)
+ {
+ if( (p_buf[retSize-1] >='a' && p_buf[retSize-1]<='z') ||\
+ (p_buf[retSize-1] >='A' && p_buf[retSize-1]<='Z') || \
+ (p_buf[retSize-1] >='0' && p_buf[retSize-1]<='9') ) /*filter invalid character*/
+ {
+ break;
+ }
+ retSize--;
+ }
+ p_buf[retSize]='\0';
+ return 0;
+ default:
+ p_buf += retSize;
+ continue;
+ }
+
+ }
+
+ return 0;
+}
+/*******************************************************************************
+ * Function:downloader_readline
+ * Description:
+ * Parameters:
+ * Input:
+ *
+ * Output:
+ *
+ * Returns:
+ *
+ *
+ * Others:
+ ********************************************************************************/
+int downloader_readline (char * buffer)
+{
+ /*
+ * If console_buffer isn't 0-length the user will be prompted to modify
+ * it instead of entering it from scratch as desired.
+ */
+ buffer[0] = '\0';
+
+ return downloader_readline_into_buffer(buffer);
+}
+
+/*******************************************************************************
+ * Function:do_downloader
+ * Description:
+ * Parameters:
+ * Input:
+ *
+ * Output:
+ *
+ * Returns:
+ *
+ *
+ * Others:
+ ********************************************************************************/
+int do_downloader(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ int ret = 0;
+ int type = 0;
+ char ack[20] = {0};
+ printf( "[sys_entry]: do downloader\n");
+
+ ret = read_partition_and_check();
+ if( ret != 0 )
+ {
+ printf( "[sys_entry]: read_partition error...\n");
+ }
+
+ type = read_boot_flashtype();
+ if(type == IF_TYPE_NOR)
+ {
+ ret = get_nor_null_slice_flag(&null_slice_flag);
+ if(ret)
+ {
+ printf ("nor flash read null_slice_flag error.\n");
+ return 1;
+ }
+ }
+
+ downloader_serial_init();
+ printf ("### downloader : serial init success \n");
+
+ /*sync*/
+ while(1)
+ {
+#if CONFIG_USB_DL
+ downloader_serial_read(tsp_console_buffer,512);
+#else
+ downloader_serial_read(tsp_console_buffer,1);
+#endif
+ if(tsp_console_buffer[0]==0x5a)
+ {
+ tsp_console_buffer[0]=0xa7; /*ack*/
+ downloader_serial_write(tsp_console_buffer,1);
+ break;
+ }
+ }
+
+ /*run commands*/
+ while(1)
+ {
+ downloader_readline(tsp_console_buffer);
+ ret = run_command (tsp_console_buffer, 0);
+ if(ret == -2)
+ {
+ sprintf(ack,"UNKNOWN COMMAND");
+ downloader_serial_write(ack, strlen(ack)+1);
+ }
+ }
+
+ return 0;
+}
+
+U_BOOT_CMD(
+ downloader, 1, 0, do_downloader,
+ "Perform ZIXC TSP downloader",
+ ""
+);
+