working now?
This commit is contained in:
parent
7c63579390
commit
edf1942ad3
@ -10,7 +10,6 @@ typedef struct __attribute__((__packed__)) s_deviceStats {
|
||||
uint32_t totalPowercycles;
|
||||
uint32_t totalRequests;
|
||||
uint32_t totalFailures;
|
||||
uint32_t totalOverruns;
|
||||
} t_deviceStats;
|
||||
|
||||
void eepromInit();
|
||||
|
@ -26,9 +26,11 @@ typedef enum {
|
||||
} e_mbusCommRequestResult;
|
||||
|
||||
typedef struct {
|
||||
uint32_t requestCnt;
|
||||
uint32_t errorCnt;
|
||||
uint32_t overrunCnt;
|
||||
uint32_t mbusRequestCnt;
|
||||
uint32_t mbusErrorCnt;
|
||||
uint32_t uartOverrunCnt;
|
||||
uint32_t uartFramingErrCnt;
|
||||
uint32_t uartParityErrCnt;
|
||||
} t_mbusCommStats;
|
||||
|
||||
// e_mbusCommRequestResult mbusCommRequest(t_mbusDevice *mbusDevice);
|
||||
|
@ -44,7 +44,7 @@ typedef struct {
|
||||
|
||||
// clear statistics
|
||||
bool clearCmd(uint8_t argc, char **args) {
|
||||
t_mbusCommStats zeroedStats = { .requestCnt = 0, .errorCnt = 0 };
|
||||
t_mbusCommStats zeroedStats = { .mbusRequestCnt = 0, .mbusErrorCnt = 0, .uartOverrunCnt = 0, .uartFramingErrCnt = 0, .uartParityErrCnt = 0 };
|
||||
mbusCommSetStats(zeroedStats);
|
||||
coloredMsg(LOG_YELLOW, true, "ch cc global statistics cleared");
|
||||
return true;
|
||||
@ -55,9 +55,13 @@ bool globalStatsCmd(uint8_t argc, char **args) {
|
||||
char buf[256];
|
||||
sprintf(buf, \
|
||||
"Global statistics\n\r" \
|
||||
" Requests: %ld\n\r" \
|
||||
" Errors: %ld\n\r",
|
||||
stats->requestCnt, stats->errorCnt
|
||||
" Meterbus Requests: %ld\n\r" \
|
||||
" Meterbus Errors: %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
|
||||
);
|
||||
send(CMD_SOCK, (uint8_t*)buf, strlen(buf));
|
||||
return true;
|
||||
|
@ -20,7 +20,7 @@ static const uint8_t EEPROM_WREN = 0x06;
|
||||
// static const uint8_t EEPROM_WRSR = 0x01;
|
||||
|
||||
|
||||
static const uint32_t EEPROM_MAGIC = 0xaffe0007;
|
||||
static const uint32_t EEPROM_MAGIC = 0xaffe0008;
|
||||
|
||||
|
||||
typedef union {
|
||||
@ -114,16 +114,14 @@ static void eepromHourlyUpdateDeviceStats(void *handle) {
|
||||
|
||||
t_mbusCommStats *stats = mbusCommGetStats();
|
||||
|
||||
deviceStats.s.totalRequests = stats->requestCnt;
|
||||
deviceStats.s.totalFailures = stats->errorCnt;
|
||||
deviceStats.s.totalOverruns = stats->overrunCnt;
|
||||
deviceStats.s.totalRequests += stats->mbusRequestCnt;
|
||||
deviceStats.s.totalFailures += stats->mbusErrorCnt;
|
||||
|
||||
logMsg("eeHUDS, about to write updated device stats");
|
||||
logMsg("eeHUDS, total powercycles so far: %d", deviceStats.s.totalPowercycles);
|
||||
logMsg("eeHUDS, total running hours so far: %d", deviceStats.s.totalRunningHours);
|
||||
logMsg("eeHUDS, total requests so far: %d", deviceStats.s.totalRequests);
|
||||
logMsg("eeHUDS, total failures so far: %d", deviceStats.s.totalFailures);
|
||||
logMsg("eeHUDS, total overruns so far: %d", deviceStats.s.totalOverruns);
|
||||
|
||||
eepromWrite(DEVICE_STATS_ADDR, deviceStats.b, sizeof(deviceStats));
|
||||
}
|
||||
@ -147,7 +145,6 @@ void eepromInit() {
|
||||
deviceStats.s.totalRunningHours = 0;
|
||||
deviceStats.s.totalRequests = 0;
|
||||
deviceStats.s.totalFailures = 0;
|
||||
deviceStats.s.totalOverruns = 0;
|
||||
logMsg("eeI, about to write device stats for the first time");
|
||||
eepromWrite(DEVICE_STATS_ADDR, deviceStats.b, sizeof(deviceStats));
|
||||
eepromActiveDelay(7);
|
||||
@ -181,10 +178,6 @@ void eepromInit() {
|
||||
logMsg("eeI, total running hours so far: %d", deviceStats.s.totalRunningHours);
|
||||
logMsg("eeI, total requests so far: %d", deviceStats.s.totalRequests);
|
||||
logMsg("eeI, total failures so far: %d", deviceStats.s.totalFailures);
|
||||
logMsg("eeI, total overruns so far: %d", deviceStats.s.totalOverruns);
|
||||
|
||||
t_mbusCommStats stats = { .requestCnt = deviceStats.s.totalRequests, .errorCnt = deviceStats.s.totalFailures, .overrunCnt = deviceStats.s.totalOverruns };
|
||||
mbusCommSetStats(stats);
|
||||
|
||||
deviceStats.s.totalPowercycles += 1;
|
||||
logMsg("eeI, about to write device stats with updated power cycles counter");
|
||||
|
@ -106,7 +106,7 @@ typedef struct {
|
||||
|
||||
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 = { .mbusRequestCnt = 0, .mbusErrorCnt = 0, .uartOverrunCnt = 0, .uartFramingErrCnt = 0, .uartParityErrCnt = 0 };
|
||||
|
||||
static bool mbusCommEnabled = true;
|
||||
|
||||
@ -262,15 +262,25 @@ void mbusCommISR() {
|
||||
uint32_t isrflags = READ_REG(mbusUart.Instance->SR);
|
||||
|
||||
if (((isrflags & USART_SR_RXNE) != RESET) || ((isrflags & USART_SR_ORE) != RESET)) {
|
||||
if ((isrflags & USART_SR_ORE) != RESET) {
|
||||
mbusCommStats.uartOverrunCnt += 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
|
||||
uint8_t data = (uint8_t)(mbusUart.Instance->DR & (uint8_t)0x00FF);
|
||||
// coloredMsg(LOG_RED, false, "mbc isr 0x%02x", data);
|
||||
if (mbusCommHandle.receiveBuffer.writeIdx < mbusCommHandle.receiveBuffer.size) {
|
||||
mbusCommHandle.receiveBuffer.buffer[mbusCommHandle.receiveBuffer.writeIdx] = data;
|
||||
mbusCommHandle.receiveBuffer.writeIdx += 1;
|
||||
}
|
||||
return;
|
||||
} else {
|
||||
coloredMsg(LOG_RED, false, "mbc isr error 0x%02x", isrflags);
|
||||
if ((isrflags & USART_SR_FE) != RESET) {
|
||||
mbusCommStats.uartFramingErrCnt += 1;
|
||||
}
|
||||
if ((isrflags & USART_SR_PE) != RESET) {
|
||||
mbusCommStats.uartParityErrCnt += 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -484,7 +494,7 @@ void mbusCommExec() {
|
||||
|
||||
case MBCS_TIMEOUT:
|
||||
coloredMsg(LOG_RED, false, "mbc hre [%d] state TIMEOUT", mbusCommHandle.requestId);
|
||||
mbusCommStats.errorCnt += 1;
|
||||
mbusCommStats.mbusErrorCnt += 1;
|
||||
mbusCommHandle.device->failures += 1;
|
||||
mbusCommHandle.startTime = 0; // disable timeout
|
||||
mbusCommHandle.waitForOctet = false; // disable receiver
|
||||
@ -527,18 +537,14 @@ static e_mbusCommRequestResult mbusCommRequest(t_mbusDevice *mbusDevice) {
|
||||
mbusCommHandle.device = mbusDevice;
|
||||
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",
|
||||
mbusCommHandle.requestId,
|
||||
mbusDevice->deviceName,
|
||||
mbusDevice->requests,
|
||||
mbusDevice->failures,
|
||||
mbusCommStats.requestCnt,
|
||||
mbusCommStats.errorCnt);
|
||||
mbusDevice->deviceName);
|
||||
|
||||
oledPrint(OLED_SCREEN0, mbusDevice->deviceName);
|
||||
res = MBCRR_TRIGGERED;
|
||||
|
||||
mbusCommStats.requestCnt += 1;
|
||||
mbusCommStats.mbusRequestCnt += 1;
|
||||
}
|
||||
} else {
|
||||
res = MBCRR_DISABLED;
|
||||
|
@ -56,10 +56,11 @@ static void mqttStatusPublisher(void *handle) {
|
||||
t_mbusCommStats *mbusCommStats = mbusCommGetStats();
|
||||
t_deviceStats* globalDeviceStats = getGlobalDeviceStats();
|
||||
|
||||
char buf[128];
|
||||
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\", \"overruns\":\"%ld\"}",
|
||||
uptime, globalDeviceStats->totalRunningHours, globalDeviceStats->totalPowercycles, schTaskCnt(), mbusCommStats->requestCnt, mbusCommStats->errorCnt, mbusCommStats->overrunCnt);
|
||||
snprintf(buf, sizeof(buf), "{\"uptime\":\"%ld\", \"runningHours\":\"%ld\", \"powerCycles\":\"%ld\", \"tasks\":\"%d\", \"requests\":\"%ld\", \"errors\":\"%ld\", \"overrun\":\"%ld\", \"framing\":\"%ld\", \"parity\":\"%ld\"}",
|
||||
uptime, globalDeviceStats->totalRunningHours, globalDeviceStats->totalPowercycles, schTaskCnt(), mbusCommStats->mbusRequestCnt, mbusCommStats->mbusErrorCnt,
|
||||
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);
|
||||
|
||||
@ -70,9 +71,9 @@ static void mqttStatusPublisher(void *handle) {
|
||||
oledPrintf(OLED_SCREEN1, "Network available:%d", isNetworkAvailable());
|
||||
oledPrintf(OLED_SCREEN1, "Uptime:%ld", uptime);
|
||||
oledPrintf(OLED_SCREEN1, "PowerCycl:%d", globalDeviceStats->totalPowercycles);
|
||||
oledPrintf(OLED_SCREEN1, "Req:%ld", mbusCommStats->requestCnt);
|
||||
oledPrintf(OLED_SCREEN1, "Err:%ld", mbusCommStats->errorCnt);
|
||||
oledPrintf(OLED_SCREEN1, "Ovrrn:%d", mbusCommStats->overrunCnt);
|
||||
oledPrintf(OLED_SCREEN1, "Req:%ld", mbusCommStats->mbusRequestCnt);
|
||||
oledPrintf(OLED_SCREEN1, "Err:%ld", mbusCommStats->mbusErrorCnt);
|
||||
oledPrintf(OLED_SCREEN1, "Uart:%d", mbusCommStats->uartOverrunCnt + mbusCommStats->uartFramingErrCnt + mbusCommStats->uartParityErrCnt);
|
||||
}
|
||||
|
||||
void mqttCommHandler(void *handle) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user