overrun error in meterbus uart handled

This commit is contained in:
2020-11-22 21:23:52 +01:00
parent 3fd30aaa36
commit bd435dd5d6
8 changed files with 63 additions and 29 deletions

View File

@ -95,7 +95,7 @@ typedef struct {
static t_mbusCommHandle mbusCommHandle = { .requestId = 0, .state = MBCS_IDLE, .retryCnt = 0, .cmd = 0, .addr = 0, .receiveCnt = 0, .receivedOctet = 0, .receiving = false };
static t_mbusCommStats mbusCommStats = { .requestCnt = 0, .errorCnt = 0 };
static t_mbusCommStats mbusCommStats = { .requestCnt = 0, .errorCnt = 0, .overrunCnt = 0 };
static bool mbusCommEnabled = true;
@ -255,9 +255,26 @@ static void timeoutHandler(void *handle) {
static void receiveNext(t_mbusCommHandle *localMbusCommHandle) {
localMbusCommHandle->receiving = true;
coloredMsg(LOG_RED, false, "RN1: %d", localMbusCommHandle->state);
HAL_StatusTypeDef res = HAL_UART_Receive_IT(&mbusUart, &(localMbusCommHandle->receivedOctet), 1);
coloredMsg(LOG_RED, false, "RN2: 0x%02x", res);
// coloredMsg(LOG_RED, false, "RN1: %d", localMbusCommHandle->state);
__attribute__((unused)) HAL_StatusTypeDef res = HAL_UART_Receive_IT(&mbusUart, &(localMbusCommHandle->receivedOctet), 1);
// coloredMsg(LOG_RED, false, "RN2: 0x%02x", res);
}
void mbusCommRxCpltCallback(UART_HandleTypeDef *huart) {
if (mbusCommHandle.receiving) {
// coloredMsg(LOG_RED, false, "RO: 0x%02x", mbusCommHandle.receivedOctet);
schAdd(handleRequestEngine, (void*) &mbusCommHandle, 0, 0);
mbusCommHandle.receiving = false;
}
}
void mbusCommErrorCallback(UART_HandleTypeDef *huart) {
if (huart->ErrorCode == HAL_UART_ERROR_ORE) {
coloredMsg(LOG_RED, false, "mbc errcb overrun error, restart receiving");
mbusCommStats.overrunCnt += 1;
HAL_StatusTypeDef res = HAL_UART_Receive_IT(&mbusUart, &(mbusCommHandle.receivedOctet), 1);
coloredMsg(LOG_RED, false, "mbc errcb, recv: 0x%02x", res);
}
}
static void handleRequestEngine(void *handle) {
@ -492,13 +509,6 @@ void mbusCommTxCpltCallback(UART_HandleTypeDef *huart) {
schAdd(handleRequestEngine, (void*) &mbusCommHandle, 0, 0);
}
void mbusCommRxCpltCallback(UART_HandleTypeDef *huart) {
if (mbusCommHandle.receiving) {
coloredMsg(LOG_RED, false, "RO: 0x%02x", mbusCommHandle.receivedOctet);
schAdd(handleRequestEngine, (void*) &mbusCommHandle, 0, 0);
mbusCommHandle.receiving = false;
}
}
void mbusCommEnable(bool enable) {
mbusCommEnabled = enable;
@ -539,6 +549,8 @@ static e_mbusCommRequestResult mbusCommRequest(t_mbusDevice *mbusDevice) {
}
#define PERIOD 60
static uint8_t numOfDevices = 8;
static t_mbusDevice devices[] = {
{
@ -547,7 +559,7 @@ static t_mbusDevice devices[] = {
.consideredField = { 0, 17, -1, -1 },
.requests = 0,
.failures = 0,
.period = 60,
.period = PERIOD,
.delay = 0,
.waiting = false
},
@ -557,7 +569,7 @@ static t_mbusDevice devices[] = {
.consideredField = { 0, 4, 2, 3 },
.requests = 0,
.failures = 0,
.period = 60,
.period = PERIOD,
.delay = 0,
.waiting = false
},
@ -567,7 +579,7 @@ static t_mbusDevice devices[] = {
.consideredField = { 0, 4, 2, 3 },
.requests = 0,
.failures = 0,
.period = 60,
.period = PERIOD,
.delay = 0,
.waiting = false
},
@ -577,7 +589,7 @@ static t_mbusDevice devices[] = {
.consideredField = { 0, 4, 2, 3 },
.requests = 0,
.failures = 0,
.period = 60,
.period = PERIOD,
.delay = 0,
.waiting = false
},
@ -587,7 +599,7 @@ static t_mbusDevice devices[] = {
.consideredField = { 0, 4, 2, 3 },
.requests = 0,
.failures = 0,
.period = 60,
.period = PERIOD,
.delay = 0,
.waiting = false
},
@ -597,7 +609,7 @@ static t_mbusDevice devices[] = {
.consideredField = { 0, 4, 2, 3 },
.requests = 0,
.failures = 0,
.period = 15,
.period = PERIOD,
.delay = 0,
.waiting = false
},
@ -607,7 +619,7 @@ static t_mbusDevice devices[] = {
.consideredField = { 0, 4, 2, 3 },
.requests = 0,
.failures = 0,
.period = 60,
.period = PERIOD,
.delay = 0,
.waiting = false
},
@ -617,7 +629,7 @@ static t_mbusDevice devices[] = {
.consideredField = { 0, 4, 2, 3 },
.requests = 0,
.failures = 0,
.period = 60,
.period = PERIOD,
.delay = 0,
.waiting = false
}