diff --git a/.idea/runConfigurations/OCD_Boot.xml b/.idea/runConfigurations/OCD_Boot.xml index d3cb7ab..354bcbe 100644 --- a/.idea/runConfigurations/OCD_Boot.xml +++ b/.idea/runConfigurations/OCD_Boot.xml @@ -1,5 +1,5 @@ - + diff --git a/App/app.cpp b/App/app.cpp index 4f26726..b8802ae 100644 --- a/App/app.cpp +++ b/App/app.cpp @@ -30,8 +30,8 @@ * Include files ****************************************************************************************/ extern "C" { - #include "header.h" /* generic header */ - #include "vl6180_app.h" +#include "header.h" /* generic header */ +#include "vl6180_app.h" } #include @@ -39,27 +39,31 @@ extern "C" { #include "tim.h" UartBridge bridge(true, USART1, USART2, 9600, 9600); -void zummerOff (void); -void zummerOn (void); -void lightingOn (void); -void lightingOff (void); +uint8_t timerCounter = 0; +void zummerOff(void); + +void zummerOn(void); + +void lightingOn(void); + +void lightingOff(void); + /************************************************************************************//** ** \brief Initializes the user program application. Should be called once during ** software program initialization. ** \return none. ** ****************************************************************************************/ -void AppInit(void) -{ - /* Initialize the timer driver. */ - TimerInit(); - vl6180_init(); - /* Initialize the led driver. */ - LedInit(); - /* initialize the bootloader interface */ - bridge.init(); - zummerOff(); - lightingOff(); +void AppInit(void) { + /* Initialize the timer driver. */ + TimerInit(); + vl6180_init(); + /* Initialize the led driver. */ + LedInit(); + /* initialize the bootloader interface */ + bridge.init(); + zummerOff(); + lightingOff(); /* BootComInit(); @@ -80,31 +84,29 @@ uint32_t controlPinDetectedMs = 0; uint8_t updateMode = 0; - -void zummerOff (void) -{ +void zummerOff(void) { HAL_TIM_Base_Stop(&htimZummer); HAL_TIM_PWM_Stop(&htimZummer, TIM_CHANNEL_2); } -void zummerOn (void) -{ + +void zummerOn(void) { HAL_TIM_Base_Start(&htimZummer); HAL_TIM_PWM_Start(&htimZummer, TIM_CHANNEL_2); } -void lightingOn (void) -{ + +void lightingOn(void) { HAL_TIM_Base_Start(&htimLighitng); HAL_TIM_PWM_Start(&htimLighitng, TIM_CHANNEL_1); } -void lightingOff (void) -{ + +void lightingOff(void) { HAL_TIM_Base_Stop(&htimLighitng); HAL_TIM_PWM_Stop(&htimLighitng, TIM_CHANNEL_1); } uint8_t proximityCompleteMessure = 0; -void proximityMessureCompleted (void) -{ + +void proximityMessureCompleted(void) { proximityCompleteMessure = 1; } @@ -117,98 +119,94 @@ uint32_t waitAnswerFromReaderMs = 0; uint32_t lightStartMs = 0; uint8_t uart1Buf[1024]; uint8_t uart2Buf[1024]; -uint8_t uartTask (void) // return 0 if data received , otherwise return 1 + +uint8_t uartTask(void) // return 0 if data received , otherwise return 1 { - if (waitAnswerFromReaderMs != 0) - { - if (HAL_GetTick() - waitAnswerFromReaderMs >= MAX_WAIT_ANSWER_FROM_GM60 ) - { - HAL_GPIO_WritePin(READER_EN_GPIO_Port, READER_EN_Pin, GPIO_PIN_SET ); + if (waitAnswerFromReaderMs != 0) { + if (HAL_GetTick() - waitAnswerFromReaderMs >= MAX_WAIT_ANSWER_FROM_GM60) { + HAL_GPIO_WritePin(READER_EN_GPIO_Port, READER_EN_Pin, GPIO_PIN_SET); HAL_Delay(500); - HAL_GPIO_WritePin(READER_EN_GPIO_Port, READER_EN_Pin, GPIO_PIN_RESET ); + HAL_GPIO_WritePin(READER_EN_GPIO_Port, READER_EN_Pin, GPIO_PIN_RESET); waitAnswerFromReaderMs = 0; } } if (!bridge.uart1Buf->is_empty() && bridge.getHuart2()->gState == 0x20) { - HAL_UART_Abort(bridge.getHuart1()); - HAL_UARTEx_ReceiveToIdle_IT(bridge.getHuart1(),(uint8_t*)bridge.dataFromUart1, BUF_SIZE ); + HAL_UART_AbortReceive_IT(bridge.getHuart1()); + HAL_UARTEx_ReceiveToIdle_IT(bridge.getHuart1(), (uint8_t *) bridge.dataFromUart1, BUF_SIZE); waitAnswerFromReaderMs = HAL_GetTick(); std::string_view stringView{bridge.uart1Buf->dequeue()}; uint32_t size = stringView.size(); - if (size > 4) - { - stringView.copy(reinterpret_cast(uart1Buf), size, 0); - if (stringView.find("FIRMWARE_UPDATE") != std::string::npos) - { - HAL_UART_DeInit(bridge.getHuart1()); - 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); - } + stringView.copy(reinterpret_cast(uart1Buf), size, 0); + if (stringView.find("FIRMWARE_UPDATE") != std::string::npos) { + HAL_UART_DeInit(bridge.getHuart1()); + 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); } + return 0; } if (!bridge.uart2Buf->is_empty() && bridge.getHuart1()->gState == 0x20) { + HAL_TIM_Base_Stop(&htimSecTimer); + HAL_TIM_Base_Start_IT(&htimSecTimer); + timerCounter = 0; waitAnswerFromReaderMs = 0; + HAL_UART_AbortReceive_IT(bridge.getHuart2()); + HAL_UARTEx_ReceiveToIdle_IT(bridge.getHuart2(), (uint8_t *) bridge.dataFromUart2, BUF_SIZE); std::string_view stringView{bridge.uart2Buf->dequeue()}; 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; - } + stringView.copy(reinterpret_cast(uart2Buf), size, 0); + HAL_UART_Transmit_IT(bridge.getHuart1(), (const uint8_t *) uart2Buf, size); + return 0; } return 1; } -void AppTask(void) -{ + +void AppTask(void) { if (!updateMode) { - uartTask(); - if (HAL_GetTick() - lightStartMs >= 10000 && lightStartMs > 0) - { + uartTask(); + if (HAL_GetTick() - lightStartMs >= 10000 && lightStartMs > 0) { lightStartMs = 0; lightingOff(); } - if (bridge.uart1Buf->is_empty() && bridge.uart2Buf->is_empty()) - { - if (proximityCompleteMessure == 1) - { + if (timerCounter == 1) { + timerCounter = 0; + if (vl6180_is_ready() >= 0) + vl6180_single_shot(); + if (proximityCompleteMessure == 1) { proximityCompleteMessure = 0; - if (getRange(&VL6180_Range) == 0) - { - if (VL6180_Range.range_mm > 0 && lightStartMs == 0) - { + if (getRange(&VL6180_Range) == 0) { + if (VL6180_Range.range_mm > 0 && lightStartMs == 0) { lightStartMs = uwTick; lightingOn(); } } } } - } - else - { + } else { BootComCheckActivationRequest(); } } +void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) +{ + if (htim->Instance == htimSecTimer.Instance) + { + HAL_TIM_Base_Stop_IT(htim); + timerCounter = 1; + } +} - /*** end of AppTask ***/ +/*** end of AppTask ***/ /*********************************** end of app.c **************************************/ diff --git a/main_prog/Core/Src/uart_bridge.cpp b/main_prog/Core/Src/uart_bridge.cpp index cfd8173..cf35dfb 100644 --- a/main_prog/Core/Src/uart_bridge.cpp +++ b/main_prog/Core/Src/uart_bridge.cpp @@ -25,8 +25,6 @@ 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 ); } } @@ -94,25 +92,9 @@ UART_HandleTypeDef* UartBridge::getHuart2() { void UartBridge::init(void) { uartInit(&uart1Handle); uartInit(&uart2Handle); - HAL_UARTEx_ReceiveToIdle_IT(&uart1Handle,(uint8_t*)dataFromUart1, BUF_SIZE ); HAL_UARTEx_ReceiveToIdle_IT(&uart2Handle,(uint8_t*)dataFromUart2, BUF_SIZE ); - __HAL_UART_CLEAR_FEFLAG(&uart1Handle); - __HAL_UART_CLEAR_OREFLAG(&uart1Handle); - __HAL_UART_CLEAR_NEFLAG(&uart1Handle); - __HAL_UART_CLEAR_PEFLAG(&uart1Handle); - __HAL_UART_CLEAR_FEFLAG(&uart2Handle); - __HAL_UART_CLEAR_OREFLAG(&uart2Handle); - __HAL_UART_CLEAR_NEFLAG(&uart2Handle); - __HAL_UART_CLEAR_PEFLAG(&uart2Handle); - __HAL_UART_DISABLE_IT(&uart1Handle, UART_IT_ORE); - __HAL_UART_DISABLE_IT(&uart1Handle, UART_IT_PE); - __HAL_UART_DISABLE_IT(&uart1Handle, UART_IT_FE); - __HAL_UART_DISABLE_IT(&uart1Handle, UART_IT_NE); - __HAL_UART_DISABLE_IT(&uart2Handle, UART_IT_ORE); - __HAL_UART_DISABLE_IT(&uart2Handle, UART_IT_PE); - __HAL_UART_DISABLE_IT(&uart2Handle, UART_IT_FE); - __HAL_UART_DISABLE_IT(&uart2Handle, UART_IT_NE); + } diff --git a/main_prog/vl6180/App/vl6180_app.c b/main_prog/vl6180/App/vl6180_app.c index 123fc26..99ea8ea 100644 --- a/main_prog/vl6180/App/vl6180_app.c +++ b/main_prog/vl6180/App/vl6180_app.c @@ -103,7 +103,6 @@ void vl6180_init (void) /* Enable Dmax calculation only if value is displayed (to save computation power) */ //VL6180_DMaxSetState(theVL6180Dev, DMaxDispTime>0); VL6180_ClearAllInterrupt(theVL6180Dev); - VL6180_RangeStartContinuousMode(theVL6180Dev); allowIT = 1; } @@ -275,4 +274,14 @@ void HAL_GPIO_EXTI_Falling_Callback(uint16_t GPIO_Pin) } } } -/* USER CODE END 4 */ \ No newline at end of file +/* USER CODE END 4 */ + +uint8_t vl6180_single_shot () +{ + VL6180_RangeStartSingleShot(theVL6180Dev); +} + +int32_t vl6180_is_ready () +{ + return VL6180_RangeWaitDeviceReady(theVL6180Dev, 3); +} \ No newline at end of file diff --git a/main_prog/vl6180/App/vl6180_app.h b/main_prog/vl6180/App/vl6180_app.h index 37e5a00..cfa56bc 100644 --- a/main_prog/vl6180/App/vl6180_app.h +++ b/main_prog/vl6180/App/vl6180_app.h @@ -10,4 +10,6 @@ #endif //MYPROJECT_VL6180_APP_H void vl6180_init (void); __weak void proximityMessureCompleted (void); -uint8_t getRange (VL6180_RangeData_t* range); \ No newline at end of file +uint8_t getRange (VL6180_RangeData_t* range); +uint8_t vl6180_single_shot (); +int32_t vl6180_is_ready ();