meterbus state machine

This commit is contained in:
Wolfgang Hottgenroth 2020-11-02 19:43:37 +01:00
parent e5e0001a0e
commit 545fe203df
Signed by: wn
GPG Key ID: 6C1E5E531E0D5D7F

View File

@ -30,6 +30,7 @@ typedef enum {
MBCS_CHKSUM, MBCS_CHKSUM,
MBCS_STOP, MBCS_STOP,
MBCS_DONE, MBCS_DONE,
MBCS_TIMEOUT,
MBCS_DISABLE_FRONTEND, MBCS_DISABLE_FRONTEND,
MBCS_ERROR MBCS_ERROR
} e_mbusCommState; } e_mbusCommState;
@ -63,7 +64,7 @@ static void handleRequestEngine(void *handle);
static void timeoutHandler(void *handle) { static void timeoutHandler(void *handle) {
logMsg("mbc timeout"); logMsg("mbc timeout");
t_mbusCommHandle *localMbusCommHandle = (t_mbusCommHandle*) handle; t_mbusCommHandle *localMbusCommHandle = (t_mbusCommHandle*) handle;
localMbusCommHandle->state = MBCS_DISABLE_FRONTEND; localMbusCommHandle->state = MBCS_TIMEOUT;
localMbusCommHandle->receiving = false; localMbusCommHandle->receiving = false;
handleRequestEngine(handle); handleRequestEngine(handle);
} }
@ -253,6 +254,7 @@ static void handleRequestEngine(void *handle) {
printFrame(&(localMbusCommHandle->frame)); printFrame(&(localMbusCommHandle->frame));
localMbusCommHandle->result = MBCR_SUCCESS; localMbusCommHandle->result = MBCR_SUCCESS;
localMbusCommHandle->state = MBCS_DISABLE_FRONTEND; localMbusCommHandle->state = MBCS_DISABLE_FRONTEND;
schDel(timeoutHandler, handle);
schAdd(handleRequestEngine, handle, 0, 0); schAdd(handleRequestEngine, handle, 0, 0);
break; break;
@ -263,15 +265,18 @@ static void handleRequestEngine(void *handle) {
receiveNext(localMbusCommHandle); receiveNext(localMbusCommHandle);
break; break;
case MBCS_TIMEOUT:
case MBCS_DISABLE_FRONTEND: logMsg("hre state TIMEOUT");
logMsg("hre state DISABLE_FRONTEND");
localMbusCommHandle->receiving = false; localMbusCommHandle->receiving = false;
HAL_UART_AbortReceive(&mbusUart); HAL_UART_AbortReceive(&mbusUart);
uint8_t kitchenSink[16]; uint8_t kitchenSink[16];
memset(kitchenSink, 0, 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); logMsg("hre abort, last receive result: %02x", r);
// no break
case MBCS_DISABLE_FRONTEND:
logMsg("hre state DISABLE_FRONTEND");
frontendDisable(); frontendDisable();
localMbusCommHandle->state = MBCS_IDLE; localMbusCommHandle->state = MBCS_IDLE;
break; break;