Index: QRDecode_demo/user/main.c
===================================================================
--- /YC3121_demo/ModuleDemo/QRDecode/QRDecode_demo/user/main.c	(revision 700)
+++ /YC3121_demo/ModuleDemo/QRDecode/QRDecode_demo/user/main.c	(working copy)
@@ -36,6 +36,7 @@
 
 /* Private typedef -----------------------------------------------------------*/
 /* Private define ------------------------------------------------------------*/
+//#define BCTC_TEST_CMD
 /* Private macro -------------------------------------------------------------*/
 /* Private variables ---------------------------------------------------------*/
 /* Private function prototypes -----------------------------------------------*/
@@ -119,7 +120,9 @@
 #endif
     GPIO_Config(GPIOA, GPIO_Pin_2, OUTPUT_HIGH);//Íâ²¿ldoÊ¹ÄÜ
     UART_Configuration();
+	#ifndef BCTC_TEST_CMD
     MyPrintf("Yichip Yc3121 qrdecode Demo V1.0.\r\n");
+	#endif
     TFT_Configuration();
     Display_InterfaceWindow();
 
@@ -150,7 +153,11 @@
     - Hardware flow control disabled (RTS and CTS signals)
     - Receive and transmit enabled
     */
+    #ifdef BCTC_TEST_CMD
+    UART_InitStruct.BaudRate = 115200;
+    #else
     UART_InitStruct.BaudRate = UARTBAUD;			//Configure serial port baud rate, the baud rate defaults to 128000.
+    #endif
     UART_InitStruct.DataBits = Databits_8b;
     UART_InitStruct.StopBits = StopBits_1;
     UART_InitStruct.Parity = Parity_None;
@@ -186,7 +193,7 @@
     ST7789_TFT_Init();
 
 }
-void QRCode_test1()
+void QRCode_test1(uint8_t timeout)
 {
     uint32_t len = 0;
     uint8_t show_messsage_len = 0;
@@ -232,34 +239,52 @@
     p_QRDecode_Config.camera_configCB.pin_data  = 30;
     p_QRDecode_Config.camera_configCB.pin_cs    = 42;
     p_QRDecode_Config.camera_configCB.camera_setparaCB.camera_setpara_num = sizeof(camera_setpara) / 2;
+    #ifndef BCTC_TEST_CMD
     MyPrintf("camera_setpara_num=%x\n", sizeof(camera_setpara) / 2);
+    #endif
     for (uint8_t i = 0; i < p_QRDecode_Config.camera_configCB.camera_setparaCB.camera_setpara_num; i++)
     {
         p_QRDecode_Config.camera_configCB.camera_setparaCB.camera_setpara[i][0] = camera_setpara[i][0];
         p_QRDecode_Config.camera_configCB.camera_setparaCB.camera_setpara[i][1] = camera_setpara[i][1];
     }
     p_QRDecode_Config.flash_backup_addr = 0x1000000 + 4 * 200 * 1024;
-    p_QRDecode_Config.timeout = 30;
+    p_QRDecode_Config.timeout = timeout;
 
     ST7789_TFT_Clear_White(0, 0, TFT_COL, TFT_ROW);
     QR_Enter_Ret = YC_QRDecode(&p_QRDecode_Config, &len, message);
+    #ifndef BCTC_TEST_CMD
     MyPrintf("\nQR_Enter_Ret = %d", QR_Enter_Ret);
+    #endif
 
     ST7789_TFT_Clear_White(0, 0, TFT_COL, TFT_ROW);
 
     if (QR_Enter_Ret ==  QR_SUCCESS)
     {
+        #ifndef BCTC_TEST_CMD
         MyPrintf("\nEnterQRDecode End \r\n");
         MyPrintf("len=%x", len);
         printv(message, len, "message");
+        MyPrintf("\r\n");
+        #endif
+        UART_SendBuf(UART0,message,len);
         if (len > 250) show_messsage_len = 250;
         else show_messsage_len = len;
         ST7789_TFT_ShowString(0, 0, show_messsage_len * 12,  12, message, 24, 1, WHITE, OLIVE);
+        #ifndef BCTC_TEST_CMD
         BEEP_Start();
         delay_ms(50);
         BEEP_End();
+        #endif
         return;
     }
+    #ifdef BCTC_TEST_CMD
+    else
+    {
+        uint8_t str_timeout[] = {"\nFFFF\n"};
+        UART_SendBuf(UART0,str_timeout,sizeof(str_timeout)-1);
+    }
+    #endif
+	
     switch (QR_Enter_Ret)
     {
     case QR_CANCEL:
@@ -294,6 +319,7 @@
     ST7789_TFT_Draw_Piece(0, 27, TFT_COL, 28, DGRAY);
     TFT_Power_scan();
     TFT_Single_scan();
+    #ifndef BCTC_TEST_CMD
     BEEP_Start();
     delay_ms(50);
     BEEP_End();
@@ -301,34 +327,69 @@
     BEEP_Start();
     delay_ms(50);
     BEEP_End();
+    #endif
     return ;
 }
 
-void QRCode_test()
+//return 00:no cmd; other:QRCode scan timeout
+uint8_t Bctc_Qrtest_parse_cmd(void)
 {
-    uint8_t keyCode = 0;
-    while (keyCode != KEY_MENU)
-    {
-        keyCode = KEY_Scan();
-    }
-    while (1)
-    {
-        QRCode_test1();
-        ST7789_TFT_ShowString(0, 200, sizeof("CANCEL             CONFIRM") * 12,  12, "CANCEL             CONFIRM", 24, 1, WHITE, OLIVE);
-        while (1)
-        {
-            keyCode = KEY_Scan();
-            if (keyCode == KEY_CANCEL)
+    #ifdef BCTC_TEST_CMD
+    const uint8_t s[] = "101099";
+    uint8_t buf[10], r;
+    uint8_t src[] = {"\nffff\n"};
+    uint8_t src1[] = {"00"};
+    if (UART_IsRXFIFONotEmpty(UART0))
+    {	
+        delay_ms(50);
+        r = UART_RecvBuf(UART0, buf, sizeof(buf));
+        buf[r] = '\0';
+        if(strncmp(buf,s,6)==0)
+        {				
+            if( strncmp(buf+6,src1,2)==0)
             {
-                Display_InterfaceWindow();
-                return;//ÍË³öÉšÂë
-            }
-            else if (keyCode == KEY_CONFIRM)
+                UART_SendBuf(UART0,src,sizeof(src)-1);
+            }			
+            else
             {
-                break; // ŒÌÐøÉšÂë
+                return (uint8_t)((buf[6]-0x30)*10+(buf[7]-0x30));
             }
         }
     }
+    #endif
+    return 0;
+}
+
+void QRCode_test()
+{
+		uint8_t keyCode = 0;
+		uint8_t timeout=0;
+		do
+		{
+			keyCode = KEY_Scan();
+			timeout=Bctc_Qrtest_parse_cmd();
+		}
+		while(keyCode != KEY_MENU&&timeout==0);
+		
+		while(1)
+		{
+		  QRCode_test1(timeout==0?30:timeout);
+			ST7789_TFT_ShowString(0, 200, sizeof("CANCEL             CONFIRM")*12,  12, "CANCEL             CONFIRM", 24, 1, WHITE, OLIVE);
+			while(1)
+			{
+				keyCode = KEY_Scan();
+				timeout=Bctc_Qrtest_parse_cmd();
+				if(keyCode==KEY_CANCEL)
+				{
+					Display_InterfaceWindow();
+					return;//exit
+				}
+				else if(keyCode==KEY_CONFIRM||timeout!=0)
+				{
+					break; // continue
+				}
+			}
+		}
 }
 
 /************************ (C) COPYRIGHT Yichip Microelectronics *****END OF FILE****/
