From 236bfc7c0d821b686773f238c8a20e237082784e Mon Sep 17 00:00:00 2001 From: Wolfgang Hottgenroth Date: Thu, 29 Oct 2020 15:57:59 +0100 Subject: [PATCH] extend mbus handling --- cube/User/Src/mbusComm.c | 36 +++++++++++++++++++++++------------- 1 file changed, 23 insertions(+), 13 deletions(-) diff --git a/cube/User/Src/mbusComm.c b/cube/User/Src/mbusComm.c index fd35391..83f0f4a 100644 --- a/cube/User/Src/mbusComm.c +++ b/cube/User/Src/mbusComm.c @@ -10,7 +10,8 @@ typedef enum { IDLE, SEND, - SEND_CONT + SEND_CONT, + SENDING } e_mbusCommState; typedef struct { @@ -25,36 +26,45 @@ static t_mbusCommHandle mbusCommHandle = { .state = IDLE, .retryCnt = 0, .cmd = static void handleRequestEngine(void *handle) { - t_mbusCommHandle *myHandle = (t_mbusCommHandle*) handle; + t_mbusCommHandle *localMbusCommHandle = (t_mbusCommHandle*) handle; - switch (myHandle->state) { + switch (localMbusCommHandle->state) { case IDLE: break; case SEND: - myHandle->sendBuf[0] = 0x10; - myHandle->sendBuf[1] = myHandle->cmd; - myHandle->sendBuf[2] = myHandle->addr; - myHandle->sendBuf[3] = myHandle->cmd + myHandle->addr; // checksum - myHandle->sendBuf[4] = 0x16; - myHandle->state = SEND_CONT; + localMbusCommHandle->sendBuf[0] = 0x10; + localMbusCommHandle->sendBuf[1] = localMbusCommHandle->cmd; + localMbusCommHandle->sendBuf[2] = localMbusCommHandle->addr; + localMbusCommHandle->sendBuf[3] = localMbusCommHandle->cmd + localMbusCommHandle->addr; // checksum + localMbusCommHandle->sendBuf[4] = 0x16; + localMbusCommHandle->state = SEND_CONT; // no break !! case SEND_CONT: led(RED, OFF); if (! loopActive) { - myHandle->retryCnt++; + localMbusCommHandle->retryCnt++; loopEnable(); schAdd(handleRequestEngine, handle, 10, 0); } else { // write(fd, sendBuf, 5); - HAL_UART_Transmit_IT(&mbusUart, myHandle->sendBuf, 5); - myHandle->state = IDLE; + HAL_UART_Transmit_IT(&mbusUart, localMbusCommHandle->sendBuf, 5); + localMbusCommHandle->state = SENDING; + schAdd(handleRequestEngine, handle, 1, 0); + } + break; + + case SENDING: + if (HAL_UART_GetState(&mbusUart) == HAL_UART_STATE_READY) { + localMbusCommHandle->state = IDLE; + } else { + schAdd(handleRequestEngine, handle, 1, 0); } break; default: - myHandle->state = IDLE; + localMbusCommHandle->state = IDLE; break; } }