/************************************************************************************//**
* \file         Demo/ARMCM0_STM32G0_Nucleo_G071RB_CubeIDE/Prog/App/app.c
* \brief        User program application source file.
* \ingroup      Prog_ARMCM0_STM32G0_Nucleo_G071RB_CubeIDE
* \internal
*----------------------------------------------------------------------------------------
*                          C O P Y R I G H T
*----------------------------------------------------------------------------------------
*   Copyright (c) 2020  by Feaser    http://www.feaser.com    All rights reserved
*
*----------------------------------------------------------------------------------------
*                            L I C E N S E
*----------------------------------------------------------------------------------------
* This file is part of OpenBLT. OpenBLT is free software: you can redistribute it and/or
* modify it under the terms of the GNU General Public License as published by the Free
* Software Foundation, either version 3 of the License, or (at your option) any later
* version.
*
* OpenBLT is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
* PURPOSE. See the GNU General Public License for more details.
*
* You have received a copy of the GNU General Public License along with OpenBLT. It
* should be located in ".\Doc\license.html". If not, contact Feaser to obtain a copy.
*
* \endinternal
****************************************************************************************/

/****************************************************************************************
* Include files
****************************************************************************************/
extern "C" {
    #include "header.h"                                    /* generic header               */
}

#include "uart_bridge.hpp"

UartBridge bridge(true, USART1, USART2, 9600, 9600);
/************************************************************************************//**
** \brief     Initializes the user program application. Should be called once during
**            software program initialization.
** \return    none.
**
****************************************************************************************/
void AppInit(void)
{
  /* Initialize the timer driver. */
  TimerInit();
  /* Initialize the led driver. */
  LedInit();
  /* initialize the bootloader interface */
  bridge.init();
/*
  BootComInit();
*/
} /*** end of AppInit ***/


/************************************************************************************//**
** \brief     Task function of the user program application. Should be called
**            continuously in the program loop.
** \return    none.
**
****************************************************************************************/
uint8_t temp[2];
void AppTask(void)
{
    if (!bridge.uart1Buf->is_empty() && (__HAL_UART_GET_FLAG(bridge.getHuart2(), UART_FLAG_TC)))
    {
        temp[1] = bridge.uart1Buf->dequeue();
        HAL_UART_Transmit_IT(bridge.getHuart2(), &temp[1], 1);
    }

    if (!bridge.uart2Buf->is_empty() && (__HAL_UART_GET_FLAG(bridge.getHuart1(), UART_FLAG_TC)))
    {
        temp[2] = bridge.uart2Buf->dequeue();
        HAL_UART_Transmit_IT(bridge.getHuart1(), &temp[2], 1);
    }
}

  /* check for bootloader activation request */
/*
  BootComCheckActivationRequest();
*/
 /*** end of AppTask ***/


/*********************************** end of app.c **************************************/

//////////// FINALLY NEED TO UNCOMMENT BootComCheckActivationRequest and BootComInit for success firmwaare update from HOST