comparison Discovery/Src/tComm.c @ 218:ff59d1d07f9c Improve_IPC_Sync

Splitted 120 seconds UART timeout into chunks of 500ms The UART connection via Bluetooth was realized using a receive call with 120 seconds timeout. By cancellation it seemed for the user as if the connection would have been aborted. In reality the received function keeped executing the wait for RX data till timeout occure. To avaoid this the timeout has been splitted into several calls with 500ms timeout => If the user disconnects by pressing "back" the COMM function is now ended.
author ideenmodellierer
date Sun, 31 Mar 2019 15:44:12 +0200
parents 255eedad4155
children 2c0b502b0a72
comparison
equal deleted inserted replaced
217:ce05c801b002 218:ff59d1d07f9c
95 95
96 uint8_t receiveStartByteUart = 0; 96 uint8_t receiveStartByteUart = 0;
97 uint8_t bluetoothActiveLastTime = 0; 97 uint8_t bluetoothActiveLastTime = 0;
98 98
99 uint8_t StartListeningToUART = 0; 99 uint8_t StartListeningToUART = 0;
100 char display_text[256] = { 0 }; 100 unsigned char display_text[256] = { 0 };
101 101
102 uint8_t setForcedBluetoothName = 0; 102 uint8_t setForcedBluetoothName = 0;
103 103
104 uint8_t updateSettingsAndMenuOnExit = 0; 104 uint8_t updateSettingsAndMenuOnExit = 0;
105 105
106 /* Private types -------------------------------------------------------------*/ 106 /* Private types -------------------------------------------------------------*/
107 #define BYTE_DOWNLOAD_MODE (0xBB) 107 #define BYTE_DOWNLOAD_MODE (0xBB)
108 #define BYTE_SERVICE_MODE (0xAA) 108 #define BYTE_SERVICE_MODE (0xAA)
109
110 #define UART_TIMEOUT_SECONDS (120u) /* Timeout for keeping connection open and waiting for data */
109 111
110 const uint8_t id_Region1_firmware = 0xFF; 112 const uint8_t id_Region1_firmware = 0xFF;
111 const uint8_t id_RTE = 0xFE; 113 const uint8_t id_RTE = 0xFE;
112 const uint8_t id_FONT = 0x10; 114 const uint8_t id_FONT = 0x10;
113 const uint8_t id_FONT_OLD = 0x00; 115 const uint8_t id_FONT_OLD = 0x00;
397 } 399 }
398 400
399 401
400 uint8_t openComm(uint8_t aRxByte) 402 uint8_t openComm(uint8_t aRxByte)
401 { 403 {
404 SStateList status;
405 uint8_t timeoutCounter = 0;
402 uint8_t answer = 0; 406 uint8_t answer = 0;
403 uint8_t service_mode_last_three_bytes[3]; 407 uint8_t service_mode_last_three_bytes[3];
404 uint8_t service_mode_response[5] = 408 uint8_t service_mode_response[5] =
405 { 409 {
406 0x4B, 410 0x4B,
452 /* 456 /*
453 uint8_t debug[256] = {0}; 457 uint8_t debug[256] = {0};
454 uint8_t dbgptr = 0; 458 uint8_t dbgptr = 0;
455 debug[dbgptr++] = aRxByte; 459 debug[dbgptr++] = aRxByte;
456 */ 460 */
457 while((answer == prompt4D4C(receiveStartByteUart)) && (HAL_UART_Receive(&UartHandle, (uint8_t*)&aRxByte, 1, 120000)== HAL_OK)) 461 while((answer == prompt4D4C(receiveStartByteUart)) && (timeoutCounter < UART_TIMEOUT_SECONDS * 2)) /* Split 120 seconds timeout into 240 iterations a 500ms */
458 { 462 {
463 if(HAL_UART_Receive(&UartHandle, (uint8_t*)&aRxByte, 1, 500)!= HAL_OK) /* Timeout half a second */
464 {
465 timeoutCounter++;
466 get_globalStateList(&status);
467 if (status.base != BaseComm)
468 {
469 timeoutCounter = UART_TIMEOUT_SECONDS * 2; /* Abort action triggered outside main loop => exit */
470 }
471 }
472 else
473 {
459 // debug[dbgptr++] = aRxByte; 474 // debug[dbgptr++] = aRxByte;
460 answer = select_mode(aRxByte); 475 answer = select_mode(aRxByte);
476 }
461 } 477 }
462 set_returnFromComm(); 478 set_returnFromComm();
463 return 1; 479 return 1;
464 } 480 }
465 481