overrun error in meterbus uart handled
This commit is contained in:
@ -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
|
||||
}
|
||||
|
Reference in New Issue
Block a user