/************************************************************************************//** * \file Demo/ARMCM7_STM32F7_Nucleo_F767ZI_CubeIDE/Boot/App/app.c * \brief Bootloader application source file. * \ingroup Boot_ARMCM7_STM32F7_Nucleo_F767ZI_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 ****************************************************************************************/ #include "boot.h" /* bootloader generic header */ #include "stm32f7xx.h" /* STM32 CPU and HAL header */ #include "shared_params.h" /* Shared parameters header */ /************************************************************************************//** ** \brief Initializes the bootloader application. Should be called once during ** software program initialization. ** \return none. ** ****************************************************************************************/ void AppInit(void) { blt_int8u deferredInitRequestFlag = 0; /* initialize the shared parameters module */ SharedParamsInit(); /* initialize the bootloader */ BootInit(); #if (BOOT_COM_DEFERRED_INIT_ENABLE == 1) /* the bootloader is configured to NOT initialize the TCP/IP network stack by default * to bypass unnecessary delay times before starting the user program. the TCP/IP net- * work tack is now only initialized when: (a) no valid user program is detected, or * (b) a forced backdoor entry occurred (CpuUserProgramStartHook() returned BLT_FALSE). * * these demo bootloader and user programs have one extra feature implemented for * demonstration purposes. the demo user program can detect firmware update requests * from the TCP/IP network in which case it activates the bootloader. But...the * TCP/IP network stack will not be initialized in this situation. for this reason * the shared parameter module was integrated in both the bootloader and user program. * more information about the shared parameter module can be found here: * https://www.feaser.com/en/blog/?p=216 * * the shared parameter at the first index (0) contains a flag. this flag is set to * 1, right before the user program activates this bootloader, to explicitly request * the bootloader to initialize the TCP/IP network stack. this makes it possible for * a firmware update to proceed. the code here reads out this flag and performs the * TCP/IP network stack initialization when requested. */ SharedParamsReadByIndex(0, &deferredInitRequestFlag); if (deferredInitRequestFlag == 1) { /* explicitly initialize all communication interface for which the deferred * initialization feature was enabled. */ ComDeferredInit(); } #endif } /*** end of AppInit ***/ /************************************************************************************//** ** \brief Task function of the bootloader application. Should be called continuously ** in the program loop. ** \return none. ** ****************************************************************************************/ void AppTask(void) { /* Run the bootloader task. */ BootTask(); } /*** end of AppTask ***/ /*********************************** end of app.c **************************************/