diff --git a/cube/User/Src/mbusComm.c b/cube/User/Src/mbusComm.c index 8e7bf54..9fd8fda 100644 --- a/cube/User/Src/mbusComm.c +++ b/cube/User/Src/mbusComm.c @@ -30,6 +30,7 @@ typedef enum { MBCS_CHKSUM, MBCS_STOP, MBCS_DONE, + MBCS_TIMEOUT, MBCS_DISABLE_FRONTEND, MBCS_ERROR } e_mbusCommState; @@ -63,7 +64,7 @@ static void handleRequestEngine(void *handle); static void timeoutHandler(void *handle) { logMsg("mbc timeout"); t_mbusCommHandle *localMbusCommHandle = (t_mbusCommHandle*) handle; - localMbusCommHandle->state = MBCS_DISABLE_FRONTEND; + localMbusCommHandle->state = MBCS_TIMEOUT; localMbusCommHandle->receiving = false; handleRequestEngine(handle); } @@ -253,6 +254,7 @@ static void handleRequestEngine(void *handle) { printFrame(&(localMbusCommHandle->frame)); localMbusCommHandle->result = MBCR_SUCCESS; localMbusCommHandle->state = MBCS_DISABLE_FRONTEND; + schDel(timeoutHandler, handle); schAdd(handleRequestEngine, handle, 0, 0); break; @@ -263,15 +265,18 @@ static void handleRequestEngine(void *handle) { receiveNext(localMbusCommHandle); break; - - case MBCS_DISABLE_FRONTEND: - logMsg("hre state DISABLE_FRONTEND"); + case MBCS_TIMEOUT: + logMsg("hre state TIMEOUT"); localMbusCommHandle->receiving = false; HAL_UART_AbortReceive(&mbusUart); uint8_t kitchenSink[16]; memset(kitchenSink, 0, 16); - HAL_StatusTypeDef r = HAL_UART_Receive(&mbusUart, kitchenSink, 16, 1000); + HAL_StatusTypeDef r = HAL_UART_Receive(&mbusUart, kitchenSink, 16, 100); logMsg("hre abort, last receive result: %02x", r); + // no break + + case MBCS_DISABLE_FRONTEND: + logMsg("hre state DISABLE_FRONTEND"); frontendDisable(); localMbusCommHandle->state = MBCS_IDLE; break;