diff Discovery/Src/tComm.c @ 316:4da2bffb07ca Bugfix_Flip_FirmwareUpdate

Bugfix text display in update mode (flipped display) and reduction of timeout in case of a failed firmware update The text shown during firmware update was not shown in the correct position => updated screen orientation In case of an interrupt of a firmware update the sw was froozen for about 60 seconds (former timeout for receiption of data block). To reduce the timeout to 6 seconds the receiption of date will now be split into blocks of 16k byte instead of 64k byte.
author ideenmodellierer
date Mon, 17 Jun 2019 21:47:33 +0200
parents ad6ddc4aabcd
children effa6fb9eb89
line wrap: on
line diff
--- a/Discovery/Src/tComm.c	Mon Jun 17 21:47:19 2019 +0200
+++ b/Discovery/Src/tComm.c	Mon Jun 17 21:47:33 2019 +0200
@@ -103,10 +103,11 @@
 uint8_t updateSettingsAndMenuOnExit = 0;
 
 /* Private types -------------------------------------------------------------*/
-#define BYTE_DOWNLOAD_MODE		(0xBB)
-#define BYTE_SERVICE_MODE		(0xAA)
+#define BYTE_DOWNLOAD_MODE			(0xBB)
+#define BYTE_SERVICE_MODE			(0xAA)
 
-#define UART_TIMEOUT_SECONDS	(120u)		/* Timeout for keeping connection open and waiting for data */
+#define UART_TIMEOUT_SECONDS		(120u)		/* Timeout for keeping connection open and waiting for data */
+#define UART_TIMEOUT_LARGE_BLOCK 	(6000u)		/* Timeout (ms) for receiption of an 16K data block (typical RX time ~4,5seconds) */
 
 const uint8_t id_Region1_firmware = 0xFF;
 const uint8_t id_RTE = 0xFE;
@@ -147,8 +148,18 @@
     tCwindow.WindowTab = 400;
     tCwindow.WindowX0 = 20;
     tCwindow.WindowX1 = 779;
-    tCwindow.WindowY0 = 0;
-    tCwindow.WindowY1 = 799;
+
+
+    if(!settingsGetPointer()->FlipDisplay)
+    {
+        tCwindow.WindowY0 = 0;
+        tCwindow.WindowY1 = 479;
+    }
+    else
+    {
+    	tCwindow.WindowY0 = 479 - 390;
+    	tCwindow.WindowY1 = 479 - 25;
+    }
 
     StartListeningToUART = 1;
 
@@ -225,7 +236,7 @@
     }
     else if(display_text[255])
     {
-      display_text[display_text[255]] = 0;
+        display_text[(uint8_t)display_text[255]] = 0;
         releaseFrame(18,tCscreen.FBStartAdress);
         tCscreen.FBStartAdress = getFrame(18);
         write_content_simple(&tCscreen, 0, 800, 480-24, &FontT24,"Exit",CLUT_ButtonSurfaceScreen);
@@ -1194,28 +1205,29 @@
 
 HAL_StatusTypeDef receive_uart_large_size(UART_HandleTypeDef *huart, uint8_t *pData, uint32_t Size)
 {
-    uint16_t length_16_blocks;
-    uint16_t length_16_remainder;
+    uint16_t length_16k_blocks;
+    uint16_t length_16k_remainder;
     uint32_t temp;
     HAL_StatusTypeDef result = HAL_OK;
     uint32_t pDataLocal;
 
-    length_16_blocks = (uint16_t) (Size / 0xFFFF);
-    temp = length_16_blocks;
-    temp *= 0xFFFF;
-    length_16_remainder = (uint16_t) ( Size - temp);
+    length_16k_blocks = (uint16_t) (Size / 0x3FFF);
+    temp = length_16k_blocks;
+    temp *= 0x3FFF;
+    length_16k_remainder = (uint16_t) ( Size - temp);
 
     pDataLocal = (uint32_t)pData;
 
-    while((result == HAL_OK) && length_16_blocks)
+
+    while((result == HAL_OK) && length_16k_blocks)
     {
-        result = HAL_UART_Receive(&UartHandle, (uint8_t *)pDataLocal, 0xFFFF , 60000);
-        pDataLocal += 0xFFFF;
-        length_16_blocks--;
+        result = HAL_UART_Receive(&UartHandle, (uint8_t *)pDataLocal, 0x3FFF , UART_TIMEOUT_LARGE_BLOCK);
+        pDataLocal += 0x3FFF;
+        length_16k_blocks--;
     }
-    if((result == HAL_OK) && length_16_remainder)
+    if((result == HAL_OK) && length_16k_remainder)
     {
-        result = HAL_UART_Receive(&UartHandle, (uint8_t *)pDataLocal, length_16_remainder , 60000);
+        result = HAL_UART_Receive(&UartHandle, (uint8_t *)pDataLocal, length_16k_remainder , UART_TIMEOUT_LARGE_BLOCK);
     }
     return result;
 }