consider noise error
This commit is contained in:
parent
1357b17bb8
commit
f5f8aa0660
@ -33,6 +33,7 @@ typedef struct {
|
|||||||
uint32_t uartOverrunCnt;
|
uint32_t uartOverrunCnt;
|
||||||
uint32_t uartFramingErrCnt;
|
uint32_t uartFramingErrCnt;
|
||||||
uint32_t uartParityErrCnt;
|
uint32_t uartParityErrCnt;
|
||||||
|
uint32_t uartNoiseErrCnt;
|
||||||
} t_mbusCommStats;
|
} t_mbusCommStats;
|
||||||
|
|
||||||
// e_mbusCommRequestResult mbusCommRequest(t_mbusDevice *mbusDevice);
|
// e_mbusCommRequestResult mbusCommRequest(t_mbusDevice *mbusDevice);
|
||||||
|
@ -44,7 +44,7 @@ typedef struct {
|
|||||||
|
|
||||||
// clear statistics
|
// clear statistics
|
||||||
bool clearCmd(uint8_t argc, char **args) {
|
bool clearCmd(uint8_t argc, char **args) {
|
||||||
t_mbusCommStats zeroedStats = { .mbusRequestCnt = 0, .mbusErrorCnt = 0, .uartOctetCnt = 0, .uartOverrunCnt = 0, .uartFramingErrCnt = 0, .uartParityErrCnt = 0 };
|
t_mbusCommStats zeroedStats = { .mbusRequestCnt = 0, .mbusErrorCnt = 0, .uartOctetCnt = 0, .uartOverrunCnt = 0, .uartFramingErrCnt = 0, .uartParityErrCnt = 0, .uartNoiseErrCnt = 0 };
|
||||||
mbusCommSetStats(zeroedStats);
|
mbusCommSetStats(zeroedStats);
|
||||||
coloredMsg(LOG_YELLOW, true, "ch cc global statistics cleared");
|
coloredMsg(LOG_YELLOW, true, "ch cc global statistics cleared");
|
||||||
return true;
|
return true;
|
||||||
@ -60,9 +60,10 @@ bool globalStatsCmd(uint8_t argc, char **args) {
|
|||||||
" UART Octets: %ld\n\r" \
|
" UART Octets: %ld\n\r" \
|
||||||
" UART Overruns: %ld\n\r" \
|
" UART Overruns: %ld\n\r" \
|
||||||
" UART Framing Errs: %ld\n\r" \
|
" UART Framing Errs: %ld\n\r" \
|
||||||
" UART Parity Errs: %ld\n\r",
|
" UART Parity Errs: %ld\n\r" \
|
||||||
|
" UART Noise Errs: %ld\n\r",
|
||||||
stats->mbusRequestCnt, stats->mbusErrorCnt,
|
stats->mbusRequestCnt, stats->mbusErrorCnt,
|
||||||
stats->uartOctetCnt, stats->uartOverrunCnt, stats->uartFramingErrCnt, stats->uartParityErrCnt
|
stats->uartOctetCnt, stats->uartOverrunCnt, stats->uartFramingErrCnt, stats->uartParityErrCnt, stats->uartNoiseErrCnt
|
||||||
);
|
);
|
||||||
send(CMD_SOCK, (uint8_t*)buf, strlen(buf));
|
send(CMD_SOCK, (uint8_t*)buf, strlen(buf));
|
||||||
return true;
|
return true;
|
||||||
|
@ -105,7 +105,7 @@ typedef struct {
|
|||||||
|
|
||||||
static t_mbusCommHandle mbusCommHandle = { .requestId = 0, .state = MBCS_IDLE, .retryCnt = 0, .cmd = 0, .addr = 0, .startTime = 0, .receiveCnt = 0, .waitForOctet = false };
|
static t_mbusCommHandle mbusCommHandle = { .requestId = 0, .state = MBCS_IDLE, .retryCnt = 0, .cmd = 0, .addr = 0, .startTime = 0, .receiveCnt = 0, .waitForOctet = false };
|
||||||
|
|
||||||
static t_mbusCommStats mbusCommStats = { .mbusRequestCnt = 0, .mbusErrorCnt = 0, .uartOctetCnt = 0, .uartOverrunCnt = 0, .uartFramingErrCnt = 0, .uartParityErrCnt = 0 };
|
static t_mbusCommStats mbusCommStats = { .mbusRequestCnt = 0, .mbusErrorCnt = 0, .uartOctetCnt = 0, .uartOverrunCnt = 0, .uartFramingErrCnt = 0, .uartParityErrCnt = 0, .uartNoiseErrCnt = 0 };
|
||||||
|
|
||||||
static bool mbusCommEnabled = true;
|
static bool mbusCommEnabled = true;
|
||||||
|
|
||||||
@ -265,7 +265,7 @@ void mbusCommISR() {
|
|||||||
|
|
||||||
// RXNEIE doesn't need to be considered since it is always on and more over the
|
// RXNEIE doesn't need to be considered since it is always on and more over the
|
||||||
// RXNE flag is cleared by reading the DR, which is done in any case
|
// RXNE flag is cleared by reading the DR, which is done in any case
|
||||||
if (((isrflags & USART_SR_RXNE) != RESET) || ((isrflags & (USART_SR_ORE | USART_SR_FE | USART_SR_PE)) != RESET)) {
|
if (((isrflags & USART_SR_RXNE) != RESET) || ((isrflags & (USART_SR_ORE | USART_SR_FE | USART_SR_PE | USART_SR_NE)) != RESET)) {
|
||||||
// Error flags are only valid together with the RX flag.
|
// Error flags are only valid together with the RX flag.
|
||||||
// They will be cleared by reading SR (already done above) followed by reading DR (below).
|
// They will be cleared by reading SR (already done above) followed by reading DR (below).
|
||||||
bool errorFound = false;
|
bool errorFound = false;
|
||||||
@ -282,6 +282,10 @@ void mbusCommISR() {
|
|||||||
mbusCommStats.uartParityErrCnt += 1;
|
mbusCommStats.uartParityErrCnt += 1;
|
||||||
errorFound = true;
|
errorFound = true;
|
||||||
}
|
}
|
||||||
|
if ((isrflags & USART_SR_NE) != RESET) {
|
||||||
|
mbusCommStats.uartNoiseErrCnt += 1;
|
||||||
|
errorFound = true;
|
||||||
|
}
|
||||||
mbusCommStats.uartOctetCnt += 1;
|
mbusCommStats.uartOctetCnt += 1;
|
||||||
// it is required to read the DR in any case here, not only when the buffer has space
|
// it is required to read the DR in any case here, not only when the buffer has space
|
||||||
// otherwise the interrupt flag won't be disabled, particularly important in case of
|
// otherwise the interrupt flag won't be disabled, particularly important in case of
|
||||||
|
@ -58,9 +58,9 @@ static void mqttStatusPublisher(void *handle) {
|
|||||||
|
|
||||||
char buf[256];
|
char buf[256];
|
||||||
uint32_t uptime = HAL_GetTick() / 1000;
|
uint32_t uptime = HAL_GetTick() / 1000;
|
||||||
snprintf(buf, sizeof(buf), "{\"uptime\":\"%ld\", \"runningHours\":\"%ld\", \"powerCycles\":\"%ld\", \"tasks\":\"%d\", \"requests\":\"%ld\", \"errors\":\"%ld\", \"octets\":\"%ld\", \"overrun\":\"%ld\", \"framing\":\"%ld\", \"parity\":\"%ld\"}",
|
snprintf(buf, sizeof(buf), "{\"uptime\":\"%ld\", \"runningHours\":\"%ld\", \"powerCycles\":\"%ld\", \"tasks\":\"%d\", \"requests\":\"%ld\", \"errors\":\"%ld\", \"octets\":\"%ld\", \"overrun\":\"%ld\", \"framing\":\"%ld\", \"parity\":\"%ld\", \"noise\":\"%ld\"}",
|
||||||
uptime, globalDeviceStats->totalRunningHours, globalDeviceStats->totalPowercycles, schTaskCnt(), mbusCommStats->mbusRequestCnt, mbusCommStats->mbusErrorCnt,
|
uptime, globalDeviceStats->totalRunningHours, globalDeviceStats->totalPowercycles, schTaskCnt(), mbusCommStats->mbusRequestCnt, mbusCommStats->mbusErrorCnt,
|
||||||
mbusCommStats->uartOctetCnt, mbusCommStats->uartOverrunCnt, mbusCommStats->uartFramingErrCnt, mbusCommStats->uartParityErrCnt);
|
mbusCommStats->uartOctetCnt, mbusCommStats->uartOverrunCnt, mbusCommStats->uartFramingErrCnt, mbusCommStats->uartParityErrCnt, mbusCommStats->uartNoiseErrCnt);
|
||||||
bool res = publish(&mqttClient, StatusTopic, (const uint8_t*)buf, strlen(buf), false);
|
bool res = publish(&mqttClient, StatusTopic, (const uint8_t*)buf, strlen(buf), false);
|
||||||
coloredMsg(LOG_GREEN, false, "mqch, publish returned %d", res);
|
coloredMsg(LOG_GREEN, false, "mqch, publish returned %d", res);
|
||||||
|
|
||||||
@ -73,7 +73,7 @@ static void mqttStatusPublisher(void *handle) {
|
|||||||
oledPrintf(OLED_SCREEN1, "PowerCycl:%d", globalDeviceStats->totalPowercycles);
|
oledPrintf(OLED_SCREEN1, "PowerCycl:%d", globalDeviceStats->totalPowercycles);
|
||||||
oledPrintf(OLED_SCREEN1, "Req:%ld", mbusCommStats->mbusRequestCnt);
|
oledPrintf(OLED_SCREEN1, "Req:%ld", mbusCommStats->mbusRequestCnt);
|
||||||
oledPrintf(OLED_SCREEN1, "Err:%ld", mbusCommStats->mbusErrorCnt);
|
oledPrintf(OLED_SCREEN1, "Err:%ld", mbusCommStats->mbusErrorCnt);
|
||||||
oledPrintf(OLED_SCREEN1, "Uart:%d", mbusCommStats->uartOverrunCnt + mbusCommStats->uartFramingErrCnt + mbusCommStats->uartParityErrCnt);
|
oledPrintf(OLED_SCREEN1, "Uart:%d", mbusCommStats->uartOverrunCnt + mbusCommStats->uartFramingErrCnt + mbusCommStats->uartParityErrCnt + mbusCommStats->uartNoiseErrCnt);
|
||||||
}
|
}
|
||||||
|
|
||||||
void mqttCommHandler(void *handle) {
|
void mqttCommHandler(void *handle) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user