/** ##########################################################################
**     Filename  :
**     Project   :
**     Module    :
**     Processor :
**     Version   : 1.0
**     Compiler  :
**     Date/Time :
**     Abstract  :
**     Contents  :
**     Note      :
**
**     (c) Copyright dmdz Co.,Ltd
**  --------------------------------------------------------------------------
**               R E V I S I O N   H I S T O R Y
**  --------------------------------------------------------------------------
**  Date       Ver   Author             Description

**  -20230602-  --V1.0--  --mingyea---  --修改--

** #########################################################################*/

/*---------------------------------------------------------------------------
- I N C L U D E   F I L E S
----------------------------------------------------------------------------*/
#if 0
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#endif

#include "common_types.h"    
#include "common_cfg.h"    
#include "mf_config.h"    
#include "fm33lg0xx_fl.h"
#if defined(USE_FULL_ASSERT)
#include "fm33_assert.h"
#endif /* USE_FULL_ASSERT */

#include "nvic.h"

#include "clk.h"
#include "gpio.h"
#include "tim.h"
#include "rmu.h"
#include "svd.h"

//#include "pwm.h"
#include "wdog.h"
//#include "spm.h"
#include "can.h"
#include "ls_nm.h"
#include "nvm.h"

#include "logic_timer.h"

#ifdef CAN_AUTOSAR_EN
#include "CanTrcv.h"
#include "can_drive.h"
#include "CanIf.h"
#include "CanIf_Cfg.h"
#include "Com.h"
#include "CanTp.h"
#include "Dcm.h"
#include "Demm.h"
#include "app_com.h"
#include "app_dcm.h"
#endif
#include "user_init.h"
#include "logic_timer.h"
//#include "lin_app.h"

#include "stack_check.h"

#include "boot_app.h"

#include "bl_timer.h"
#include "bl_can.h"
#include "bl_booting.h"
#include "bl_process_driver.h"
#include "bl_system.h"
#include "bl_logical_block.h"
#include "bl_flash_if.h"
#include "bl_adpt_uds_platform.h"

u8 g_flash_read_flag2 =0xff;
/*---------------------------------------------------------------------------
- D E F I N E S / M A C R O S
----------------------------------------------------------------------------*/


/*---------------------------------------------------------------------------
- T Y P E   D E F I N I T I O N S
----------------------------------------------------------------------------*/


/*---------------------------------------------------------------------------
- S T A T I C   V A R I A B L E S
----------------------------------------------------------------------------*/


/*---------------------------------------------------------------------------
* G L O B A L   V A R I A B L E S
----------------------------------------------------------------------------*/


/*---------------------------------------------------------------------------
- C O N S T A N T S
----------------------------------------------------------------------------*/


/*---------------------------------------------------------------------------
- F U N C T I O N   P R O T O T Y P E
----------------------------------------------------------------------------*/
int main(void)
{
    u8 i;
    bl_BootingFlag_t flag;
    bl_BootingFlag_t flag1;
    bl_BootingFlag_t flag2;

    //__disable_irq();

    //__enable_irq();

    /*Initialize system*/
    Rte_PreInit();
    #if 1
    #ifdef BOOT_STATE_PROG_DEBUG_EN
    adpt_test_init();
    #endif
    #ifdef FLASH_TEST_ERASE_WRITE
    flash_if_test();
    #endif
    //boot_app_init();
    flag = Bootm_CheckBootingRequirement();
    flag1 = check_program_valid_nores_is_valid();
    flag2 = check_program_valid_to_app_valid();
    //再判断，编程会话的无应答模式
    if(flag1 == BOOTING_FLAG_REPROGRAM_VALID)
    {
        flag = BOOTING_FLAG_REPROGRAM_VALID;
    }
    else
    {
        //code
    }
    if (BOOTING_FLAG_APPLICATION_VALID == flag)
    {
        if(lb_logic_block_read_app_valid1()!=0)
        {
            #ifdef BOOT_STATE_PROG_DEBUG_EN
            #else
                //#ifdef FALSH_DRIVER_INIT_EN
                //#else
                //boot_app_jump();
                Bootm_GotoApplication();
                //#endif
            #endif
            flag=0u;
        }
        else
        {
            flag=0u;
        }
        /*never return unless StayInBoot enable and receive a valid SIB frame*/
    }
    g_flash_read_flag2 = flag;
    #endif
    rmu_init();
    svd_init();
    (void)Rte_PostInit();

    lb_logic_block_init_flashdrv();
    //Dm_WriteDefaultData(1);  //flash app
    //g_test_flash_app_flag = Dm_IsDefaultData(1);

    if(flag2 == BOOTING_FLAG_REPROGRAM_VALID)
    {
		clear_program_valid_to_app_valid();
        //回复，默认会话
        Adpt_Res_default_ValidProcess();
    }
    #if 1
    if(flag1==BOOTING_FLAG_REPROGRAM_VALID)
    {
        Adpt_ReprogramValid_nores_Process();     //
    }
    else
    #endif
    {
        Rte_ProcessReset(flag);     // 跳到這里 flag=0; 或者  BOOTING_FLAG_REPROGRAM_VALID
    }
    #ifdef NVM_EEPROM_EXT_EN
    eeprom_init();  //要在不跳转时，初始化EEPROM
    #endif

    for( ;; )
    {
        //wdog_task();
        //app_task_1ms();
        gpio_task();
        PROC_SCHEDULE();  // 相當於 Proc_PassiveSchedule(&g_UdsPlatformAdapter)
    }
}


