not yet working correctly again
This commit is contained in:
parent
d5c568a63c
commit
950c7b07d2
@ -94,6 +94,7 @@ typedef struct {
|
||||
uint8_t addr;
|
||||
linearBuffer_t sendBuffer;
|
||||
linearBuffer_t receiveBuffer;
|
||||
uint32_t startTime;
|
||||
uint8_t receiveCnt;
|
||||
bool waitForOctet;
|
||||
bool receiving;
|
||||
@ -103,7 +104,7 @@ typedef struct {
|
||||
} 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 };
|
||||
|
||||
@ -277,9 +278,12 @@ void mbusCommISR() {
|
||||
void mbusCommExec() {
|
||||
static uint8_t userdataIdx = 0;
|
||||
static uint8_t calculatedChksum = 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) {
|
||||
return;
|
||||
}
|
||||
@ -290,10 +294,10 @@ void mbusCommExec() {
|
||||
mbusCommHandle.waitForOctet = false;
|
||||
}
|
||||
|
||||
|
||||
switch (mbusCommHandle.state) {
|
||||
case MBCS_IDLE:
|
||||
// coloredMsg(LOG_YELLOW, false, "mbc hre [%d] state IDLE", mbusCommHandle.requestId);
|
||||
mbusCommHandle.startTime = 0;
|
||||
break;
|
||||
|
||||
case MBCS_SEND:
|
||||
@ -480,18 +484,13 @@ void mbusCommExec() {
|
||||
coloredMsg(LOG_RED, false, "mbc hre [%d] state TIMEOUT", mbusCommHandle.requestId);
|
||||
mbusCommStats.errorCnt += 1;
|
||||
mbusCommHandle.device->failures += 1;
|
||||
mbusCommHandle.startTime = 0;
|
||||
printError();
|
||||
mbusCommHandle.receiving = false;
|
||||
if (mbusCommHandle.frame.userdata != NULL) {
|
||||
free(mbusCommHandle.frame.userdata);
|
||||
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
|
||||
|
||||
case MBCS_DISABLE_FRONTEND:
|
||||
@ -522,6 +521,7 @@ static e_mbusCommRequestResult mbusCommRequest(t_mbusDevice *mbusDevice) {
|
||||
mbusCommHandle.cmd = MBUS_QUERY_CMD;
|
||||
mbusCommHandle.addr = mbusDevice->address;
|
||||
mbusCommHandle.device = mbusDevice;
|
||||
mbusCommHandle.startTime = HAL_GetTick();
|
||||
mbusDevice->requests += 1;
|
||||
|
||||
coloredMsg(LOG_YELLOW, true, "mbc mcr [%d] new request %s R:%d F:%d GRC:%d GEC:%d",
|
||||
|
Loading…
x
Reference in New Issue
Block a user