diff --git a/App/app.cpp b/App/app.cpp index 581a583..b8d590b 100644 --- a/App/app.cpp +++ b/App/app.cpp @@ -34,6 +34,7 @@ extern "C" { #include "vl6180_app.h" } +#include #include "uart_bridge.hpp" #include "tim.h" @@ -114,7 +115,8 @@ uint32_t waitAnswerFromReaderMs = 0; #define DATA_TIMEOUT 500 uint32_t lightStartMs = 0; - +uint8_t uart1Buf[1024]; +uint8_t uart2Buf[1024]; uint8_t uartTask (void) // return 0 if data received , otherwise return 1 { @@ -132,32 +134,41 @@ uint8_t uartTask (void) // return 0 if data received , otherwise return 1 if (!bridge.uart1Buf->is_empty() && (__HAL_UART_GET_FLAG(bridge.getHuart2(), UART_FLAG_TC))) { waitAnswerFromReaderMs = HAL_GetTick(); std::string_view stringView{bridge.uart1Buf->dequeue()}; - if (stringView.find("FIRMWARE_UPDATE") != std::string::npos) + uint32_t size = stringView.size(); + if (size > 4) { - HAL_UART_DeInit(&huart1); - BootComInit(); - zummerOff(); - lightingOff(); + stringView.copy(reinterpret_cast(uart1Buf), size, 0); + if (stringView.find("FIRMWARE_UPDATE") != std::string::npos) + { + HAL_UART_DeInit(&huart1); + BootComInit(); + zummerOff(); + lightingOff(); + } + else if (stringView.find("ZOOMER_ON") != std::string::npos) + { + zummerOn(); + } + else if (stringView.find("ZOOMER_OFF") != std::string::npos) + { + zummerOff(); + } + else + HAL_UART_Transmit_IT(bridge.getHuart2(), (const uint8_t*) uart1Buf, size); } - else if (stringView.find("ZOOMER_ON") != std::string::npos) - { - zummerOn(); - } - else if (stringView.find("ZOOMER_OFF") != std::string::npos) - { - zummerOff(); - } - else - HAL_UART_Transmit_IT(bridge.getHuart2(), (const uint8_t*) std::string(stringView).c_str(), stringView.size()); - return 0; } if (!bridge.uart2Buf->is_empty() && (__HAL_UART_GET_FLAG(bridge.getHuart1(), UART_FLAG_TC))) { waitAnswerFromReaderMs = 0; std::string_view stringView{bridge.uart2Buf->dequeue()}; - HAL_UART_Transmit_IT(bridge.getHuart1(), (const uint8_t*) std::string(stringView).c_str(), stringView.size()); - return 0; + uint32_t size = stringView.size(); + if (size > 4) + { + stringView.copy(reinterpret_cast(uart2Buf), size, 0); + HAL_UART_Transmit_IT(bridge.getHuart1(), (const uint8_t*) uart2Buf, size); + return 0; + } } return 1; } diff --git a/main_prog/Core/Src/uart_bridge.cpp b/main_prog/Core/Src/uart_bridge.cpp index 8d80ff8..e7f42b0 100644 --- a/main_prog/Core/Src/uart_bridge.cpp +++ b/main_prog/Core/Src/uart_bridge.cpp @@ -20,6 +20,7 @@ extern "C" void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t S { std::string_view stringView{(const char *) bridgePnt->dataFromUart1, Size}; bridgePnt->uart1Buf->enqueue(stringView); + HAL_UART_Abort(bridgePnt->getHuart1()); HAL_UARTEx_ReceiveToIdle_IT(bridgePnt->getHuart1(),(uint8_t*)bridgePnt->dataFromUart1, BUF_SIZE ); } @@ -27,6 +28,7 @@ extern "C" void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t S { std::string_view stringView{(const char *) bridgePnt->dataFromUart2, Size}; bridgePnt->uart2Buf->enqueue(stringView); + HAL_UART_Abort(bridgePnt->getHuart2()); HAL_UARTEx_ReceiveToIdle_IT(bridgePnt->getHuart2(),(uint8_t*)bridgePnt->dataFromUart2, BUF_SIZE ); }