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_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;