diff --git a/cube/User/Inc/mbusComm.h b/cube/User/Inc/mbusComm.h index e999deb..2cc3cb5 100644 --- a/cube/User/Inc/mbusComm.h +++ b/cube/User/Inc/mbusComm.h @@ -28,6 +28,7 @@ typedef enum { typedef struct { uint32_t mbusRequestCnt; uint32_t mbusErrorCnt; + uint32_t uartOctetCnt; uint32_t uartOverrunCnt; uint32_t uartFramingErrCnt; uint32_t uartParityErrCnt; diff --git a/cube/User/Src/cmdHandler.c b/cube/User/Src/cmdHandler.c index 3b9a6ad..51b3c4b 100644 --- a/cube/User/Src/cmdHandler.c +++ b/cube/User/Src/cmdHandler.c @@ -44,7 +44,7 @@ typedef struct { // clear statistics bool clearCmd(uint8_t argc, char **args) { - t_mbusCommStats zeroedStats = { .mbusRequestCnt = 0, .mbusErrorCnt = 0, .uartOverrunCnt = 0, .uartFramingErrCnt = 0, .uartParityErrCnt = 0 }; + t_mbusCommStats zeroedStats = { .mbusRequestCnt = 0, .mbusErrorCnt = 0, .uartOctetCnt = 0, .uartOverrunCnt = 0, .uartFramingErrCnt = 0, .uartParityErrCnt = 0 }; mbusCommSetStats(zeroedStats); coloredMsg(LOG_YELLOW, true, "ch cc global statistics cleared"); return true; @@ -57,11 +57,12 @@ bool globalStatsCmd(uint8_t argc, char **args) { "Global statistics\n\r" \ " Meterbus Requests: %ld\n\r" \ " Meterbus Errors: %ld\n\r" \ + " UART Octets: %ld\n\r" \ " UART Overruns: %ld\n\r" \ " UART Framing Errs: %ld\n\r" \ " UART Parity Errs: %ld\n\r", stats->mbusRequestCnt, stats->mbusErrorCnt, - stats->uartOverrunCnt, stats->uartFramingErrCnt, stats->uartParityErrCnt + stats->uartOctetCnt, stats->uartOverrunCnt, stats->uartFramingErrCnt, stats->uartParityErrCnt ); send(CMD_SOCK, (uint8_t*)buf, strlen(buf)); return true; diff --git a/cube/User/Src/mbusComm.c b/cube/User/Src/mbusComm.c index 3467cbb..7fe3286 100644 --- a/cube/User/Src/mbusComm.c +++ b/cube/User/Src/mbusComm.c @@ -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_mbusCommStats mbusCommStats = { .mbusRequestCnt = 0, .mbusErrorCnt = 0, .uartOverrunCnt = 0, .uartFramingErrCnt = 0, .uartParityErrCnt = 0 }; +static t_mbusCommStats mbusCommStats = { .mbusRequestCnt = 0, .mbusErrorCnt = 0, .uartOctetCnt = 0, .uartOverrunCnt = 0, .uartFramingErrCnt = 0, .uartParityErrCnt = 0 }; static bool mbusCommEnabled = true; @@ -275,6 +275,7 @@ void mbusCommISR() { if ((isrflags & USART_SR_PE) != RESET) { mbusCommStats.uartParityErrCnt += 1; } + mbusCommStats.uartOctetCnt += 1; // 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 // ORE diff --git a/cube/User/Src/mqttComm.c b/cube/User/Src/mqttComm.c index b6663cb..f0ab7b7 100644 --- a/cube/User/Src/mqttComm.c +++ b/cube/User/Src/mqttComm.c @@ -58,9 +58,9 @@ static void mqttStatusPublisher(void *handle) { char buf[256]; uint32_t uptime = HAL_GetTick() / 1000; - snprintf(buf, sizeof(buf), "{\"uptime\":\"%ld\", \"runningHours\":\"%ld\", \"powerCycles\":\"%ld\", \"tasks\":\"%d\", \"requests\":\"%ld\", \"errors\":\"%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\"}", uptime, globalDeviceStats->totalRunningHours, globalDeviceStats->totalPowercycles, schTaskCnt(), mbusCommStats->mbusRequestCnt, mbusCommStats->mbusErrorCnt, - mbusCommStats->uartOverrunCnt, mbusCommStats->uartFramingErrCnt, mbusCommStats->uartParityErrCnt); + mbusCommStats->uartOctetCnt, mbusCommStats->uartOverrunCnt, mbusCommStats->uartFramingErrCnt, mbusCommStats->uartParityErrCnt); bool res = publish(&mqttClient, StatusTopic, (const uint8_t*)buf, strlen(buf), false); coloredMsg(LOG_GREEN, false, "mqch, publish returned %d", res);