overrun error in meterbus uart handled
This commit is contained in:
@ -20,7 +20,7 @@ static const uint8_t EEPROM_WREN = 0x06;
|
||||
// static const uint8_t EEPROM_WRSR = 0x01;
|
||||
|
||||
|
||||
static const uint32_t EEPROM_MAGIC = 0xaffe0006;
|
||||
static const uint32_t EEPROM_MAGIC = 0xaffe0007;
|
||||
|
||||
|
||||
typedef union {
|
||||
@ -116,12 +116,14 @@ static void eepromHourlyUpdateDeviceStats(void *handle) {
|
||||
|
||||
deviceStats.s.totalRequests = stats->requestCnt;
|
||||
deviceStats.s.totalFailures = stats->errorCnt;
|
||||
deviceStats.s.totalOverruns = stats->overrunCnt;
|
||||
|
||||
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));
|
||||
}
|
||||
@ -145,6 +147,7 @@ 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);
|
||||
@ -178,8 +181,9 @@ 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};
|
||||
t_mbusCommStats stats = { .requestCnt = deviceStats.s.totalRequests, .errorCnt = deviceStats.s.totalFailures, .overrunCnt = deviceStats.s.totalOverruns };
|
||||
mbusCommSetStats(stats);
|
||||
|
||||
deviceStats.s.totalPowercycles += 1;
|
||||
|
@ -37,7 +37,7 @@ void frontendDisable() {
|
||||
void frontendAdcCallback(ADC_HandleTypeDef* hadc) {
|
||||
static int32_t holdValue = 0;
|
||||
|
||||
show(DEBUG_2, TOGGLE);
|
||||
// show(DEBUG_2, TOGGLE);
|
||||
|
||||
if (frontendEnabled) {
|
||||
int32_t currentValue = (int32_t) HAL_ADC_GetValue(hadc);
|
||||
|
@ -64,7 +64,7 @@ void my_setup_2() {
|
||||
}
|
||||
|
||||
void my_loop() {
|
||||
show(DEBUG_1, TOGGLE);
|
||||
// show(DEBUG_1, TOGGLE);
|
||||
|
||||
schExec();
|
||||
|
||||
@ -111,3 +111,9 @@ void HAL_SPI_TxCpltCallback(SPI_HandleTypeDef *hspi) {
|
||||
eepromSpiTxCpltCallback(hspi);
|
||||
}
|
||||
}
|
||||
|
||||
void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart) {
|
||||
if (huart == &mbusUart) {
|
||||
mbusCommErrorCallback(huart);
|
||||
}
|
||||
}
|
@ -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
|
||||
}
|
||||
|
@ -58,8 +58,8 @@ static void mqttStatusPublisher(void *handle) {
|
||||
|
||||
char buf[128];
|
||||
uint32_t uptime = HAL_GetTick() / 1000;
|
||||
snprintf(buf, sizeof(buf), "{\"uptime\":\"%ld\", \"runningHours\":\"%ld\", \"powerCycles\":\"%ld\", \"tasks\":\"%d\", \"requests\":\"%ld\", \"errors\":\"%ld\"}",
|
||||
uptime, globalDeviceStats->totalRunningHours, globalDeviceStats->totalPowercycles, schTaskCnt(), mbusCommStats->requestCnt, mbusCommStats->errorCnt);
|
||||
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);
|
||||
bool res = publish(&mqttClient, StatusTopic, (const uint8_t*)buf, strlen(buf), false);
|
||||
coloredMsg(LOG_GREEN, false, "mqch, publish returned %d", res);
|
||||
|
||||
@ -69,11 +69,10 @@ static void mqttStatusPublisher(void *handle) {
|
||||
oledPrintf(OLED_SCREEN1, "Addr:%d.%d.%d.%d", addr[0], addr[1], addr[2], addr[3]);
|
||||
oledPrintf(OLED_SCREEN1, "Network available:%d", isNetworkAvailable());
|
||||
oledPrintf(OLED_SCREEN1, "Uptime:%ld", uptime);
|
||||
oledPrintf(OLED_SCREEN1, "RunHours:%d", globalDeviceStats->totalRunningHours);
|
||||
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);
|
||||
}
|
||||
|
||||
void mqttCommHandler(void *handle) {
|
||||
|
Reference in New Issue
Block a user