not yet working correctly again
This commit is contained in:
parent
d5c568a63c
commit
950c7b07d2
@ -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",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user