diff --git a/cube/User/Inc/mbusComm.h b/cube/User/Inc/mbusComm.h index 2f765db..2b9fd79 100644 --- a/cube/User/Inc/mbusComm.h +++ b/cube/User/Inc/mbusComm.h @@ -33,6 +33,7 @@ typedef struct { // e_mbusCommRequestResult mbusCommRequest(t_mbusDevice *mbusDevice); void mbusCommInit(); +void mbusCommExec(); void mbusCommEnable(bool enable); void mbusCommTxCpltCallback(UART_HandleTypeDef *huart); void mbusCommRxCpltCallback(UART_HandleTypeDef *huart); diff --git a/cube/User/Src/main2.c b/cube/User/Src/main2.c index fe80584..cd2a13c 100644 --- a/cube/User/Src/main2.c +++ b/cube/User/Src/main2.c @@ -71,6 +71,8 @@ void my_loop() { #ifndef LOGGER_OUTPUT_BY_INTERRUPT logExec(); #endif //LOGGER_OUTPUT_BY_INTERRUPT + + mbusCommExec(); } void SYSTICK_Callback() { diff --git a/cube/User/Src/mbusComm.c b/cube/User/Src/mbusComm.c index 7f1cbd5..ce49a9c 100644 --- a/cube/User/Src/mbusComm.c +++ b/cube/User/Src/mbusComm.c @@ -16,6 +16,8 @@ #include #include #include +#include + #include @@ -87,6 +89,7 @@ typedef struct { uint8_t receiveCnt; uint8_t receivedOctet; bool receiving; + ringbuffer_t *receiveBuffer; e_mbusCommResult result; t_longframe frame; t_mbusDevice *device; @@ -247,10 +250,9 @@ static void parseAndPrintFrame(t_mbusCommHandle *localMbusCommHandle) { static void handleRequestEngine(void *handle); static void timeoutHandler(void *handle) { t_mbusCommHandle *localMbusCommHandle = (t_mbusCommHandle*) handle; - // coloredMsg(LOG_RED, true, "mbc th [%d] timeout", localMbusCommHandle->requestId); + coloredMsg(LOG_RED, true, "mbc th [%d] timeout", localMbusCommHandle->requestId); localMbusCommHandle->state = MBCS_TIMEOUT; localMbusCommHandle->receiving = false; - handleRequestEngine(handle); } static void receiveNext(t_mbusCommHandle *localMbusCommHandle) { @@ -278,8 +280,8 @@ void mbusCommErrorCallback(UART_HandleTypeDef *huart) { } } -static void handleRequestEngine(void *handle) { - t_mbusCommHandle *localMbusCommHandle = (t_mbusCommHandle*) handle; +void mbusCommExec() { + t_mbusCommHandle *localMbusCommHandle = &mbusCommHandle; static uint8_t userdataIdx = 0; static uint8_t calculatedChksum = 0; @@ -702,5 +704,10 @@ static void mbusCommScheduler(void *handle) { void mbusCommInit() { coloredMsg(LOG_GREEN, true, "mbc mci initializing Meterbus communication"); + ringbufferInit(&(mbusCommHandle.receiveBuffer), 256); + coloredMsg(LOG_GREEN, true, "mbc mci ringbuffer created"); + HAL_StatusTypeDef recvRet = HAL_UART_Receive_IT(&mbusUart, &(mbusCommHandle.receivedOctet), 1); + coloredMsg(LOG_GREEN, true, "mbc mci enable receiver, retCode: 0x%02x", recvRet); + schAdd(mbusCommScheduler, NULL, 0, 1000); }