Mercurial > public > ostc4
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 |