meterbus state machine
This commit is contained in:
parent
e5e0001a0e
commit
545fe203df
@ -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;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user