not yet working correctly again

This commit is contained in:
Wolfgang Hottgenroth 2020-11-24 22:43:02 +01:00
parent d5c568a63c
commit 950c7b07d2
No known key found for this signature in database
GPG Key ID: 656C88C7C1734267

View File

@ -94,6 +94,7 @@ typedef struct {
uint8_t addr; uint8_t addr;
linearBuffer_t sendBuffer; linearBuffer_t sendBuffer;
linearBuffer_t receiveBuffer; linearBuffer_t receiveBuffer;
uint32_t startTime;
uint8_t receiveCnt; uint8_t receiveCnt;
bool waitForOctet; bool waitForOctet;
bool receiving; bool receiving;
@ -103,7 +104,7 @@ typedef struct {
} t_mbusCommHandle; } t_mbusCommHandle;
static t_mbusCommHandle mbusCommHandle = { .requestId = 0, .state = MBCS_IDLE, .retryCnt = 0, .cmd = 0, .addr = 0, .receiveCnt = 0, .waitForOctet = false, .receiving = false }; static t_mbusCommHandle mbusCommHandle = { .requestId = 0, .state = MBCS_IDLE, .retryCnt = 0, .cmd = 0, .addr = 0, .startTime = 0, .receiveCnt = 0, .waitForOctet = false, .receiving = false };
static t_mbusCommStats mbusCommStats = { .requestCnt = 0, .errorCnt = 0, .overrunCnt = 0 }; static t_mbusCommStats mbusCommStats = { .requestCnt = 0, .errorCnt = 0, .overrunCnt = 0 };
@ -277,9 +278,12 @@ void mbusCommISR() {
void mbusCommExec() { void mbusCommExec() {
static uint8_t userdataIdx = 0; static uint8_t userdataIdx = 0;
static uint8_t calculatedChksum = 0; static uint8_t calculatedChksum = 0;
uint8_t receivedOctet = 0; uint8_t receivedOctet = 0;
if (mbusCommHandle.waitForOctet) {
if ((mbusCommHandle.startTime != 0) && (mbusCommHandle.startTime + 2500 < HAL_GetTick())) {
mbusCommHandle.state = MBCS_TIMEOUT;
coloredMsg(LOG_RED, false, "TIMEOUT!!");
} else if (mbusCommHandle.waitForOctet) {
if (mbusCommHandle.receiveBuffer.readIdx >= mbusCommHandle.receiveBuffer.writeIdx) { if (mbusCommHandle.receiveBuffer.readIdx >= mbusCommHandle.receiveBuffer.writeIdx) {
return; return;
} }
@ -290,10 +294,10 @@ void mbusCommExec() {
mbusCommHandle.waitForOctet = false; mbusCommHandle.waitForOctet = false;
} }
switch (mbusCommHandle.state) { switch (mbusCommHandle.state) {
case MBCS_IDLE: case MBCS_IDLE:
// coloredMsg(LOG_YELLOW, false, "mbc hre [%d] state IDLE", mbusCommHandle.requestId); // coloredMsg(LOG_YELLOW, false, "mbc hre [%d] state IDLE", mbusCommHandle.requestId);
mbusCommHandle.startTime = 0;
break; break;
case MBCS_SEND: case MBCS_SEND:
@ -480,18 +484,13 @@ void mbusCommExec() {
coloredMsg(LOG_RED, false, "mbc hre [%d] state TIMEOUT", mbusCommHandle.requestId); coloredMsg(LOG_RED, false, "mbc hre [%d] state TIMEOUT", mbusCommHandle.requestId);
mbusCommStats.errorCnt += 1; mbusCommStats.errorCnt += 1;
mbusCommHandle.device->failures += 1; mbusCommHandle.device->failures += 1;
mbusCommHandle.startTime = 0;
printError(); printError();
mbusCommHandle.receiving = false; mbusCommHandle.receiving = false;
if (mbusCommHandle.frame.userdata != NULL) { if (mbusCommHandle.frame.userdata != NULL) {
free(mbusCommHandle.frame.userdata); free(mbusCommHandle.frame.userdata);
mbusCommHandle.frame.userdata = NULL; mbusCommHandle.frame.userdata = NULL;
} }
// FIXME check whether abort of receiving is necessary at all
HAL_UART_AbortReceive(&mbusUart);
uint8_t kitchenSink[16];
memset(kitchenSink, 0, 16);
HAL_StatusTypeDef r = HAL_UART_Receive(&mbusUart, kitchenSink, 16, 100);
coloredMsg(LOG_RED, false, "mbc hre [%d] abort, last receive result: %02x", mbusCommHandle.requestId, r);
// no break // no break
case MBCS_DISABLE_FRONTEND: case MBCS_DISABLE_FRONTEND:
@ -522,6 +521,7 @@ static e_mbusCommRequestResult mbusCommRequest(t_mbusDevice *mbusDevice) {
mbusCommHandle.cmd = MBUS_QUERY_CMD; mbusCommHandle.cmd = MBUS_QUERY_CMD;
mbusCommHandle.addr = mbusDevice->address; mbusCommHandle.addr = mbusDevice->address;
mbusCommHandle.device = mbusDevice; mbusCommHandle.device = mbusDevice;
mbusCommHandle.startTime = HAL_GetTick();
mbusDevice->requests += 1; mbusDevice->requests += 1;
coloredMsg(LOG_YELLOW, true, "mbc mcr [%d] new request %s R:%d F:%d GRC:%d GEC:%d", coloredMsg(LOG_YELLOW, true, "mbc mcr [%d] new request %s R:%d F:%d GRC:%d GEC:%d",