extend mbus handling

This commit is contained in:
2020-10-29 15:57:59 +01:00
parent 3ce69c0a64
commit 236bfc7c0d

View File

@ -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;
}
}