151 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			151 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /****************************************************************************
 | |
| 
 | |
| Copyright(c) 2019 by Aerospace C.Power (Chongqing) Microelectronics. ALL RIGHTS RESERVED.
 | |
| 
 | |
| This Information is proprietary to Aerospace C.Power (Chongqing) Microelectronics and MAY NOT
 | |
| be copied by any method or incorporated into another program without
 | |
| the express written consent of Aerospace C.Power. This Information or any portion
 | |
| thereof remains the property of Aerospace C.Power. The Information contained herein
 | |
| is believed to be accurate and Aerospace C.Power assumes no responsibility or
 | |
| liability for its use in any way and conveys no license or title under
 | |
| any patent or copyright and makes no representation or warranty that this
 | |
| Information is free from patent or copyright infringement.
 | |
| 
 | |
| ****************************************************************************/
 | |
| /* os shim includes */
 | |
| #include "os_types.h"
 | |
| #include "os_task.h"
 | |
| #include "os_utils.h"
 | |
| 
 | |
| #include "system.h"
 | |
| 
 | |
| /* common includes */
 | |
| #include "iot_config.h"
 | |
| #include "iot_io.h"
 | |
| #include "iot_system.h"
 | |
| #include "iot_version.h"
 | |
| #include "iot_mtd.h"
 | |
| 
 | |
| #include "iot_board_api.h"
 | |
| #include "iot_gpio_api.h"
 | |
| 
 | |
| os_task_h _init_handle;
 | |
| extern uint32_t _sp;
 | |
| 
 | |
| /* working mode for fw
 | |
|  * 0 - Mission Mode
 | |
|  * 1 - FTM mode
 | |
|  */
 | |
| extern uint32_t g_fw_mode;
 | |
| 
 | |
| extern void iot_hw_init();
 | |
| extern void iot_sub_system_init();
 | |
| extern void proto_mm_init();
 | |
| extern void proto_ftm_init();
 | |
| extern void iot_mode_set(int fw_mode);
 | |
| 
 | |
| static void startup_mm_init()
 | |
| {
 | |
|     proto_mm_init();
 | |
| }
 | |
| 
 | |
| static void startup_ftm_init()
 | |
| {
 | |
| #if (BUILD_AMP_TYPE == IOT_BUILD_AMP_CUSTOM)
 | |
|     proto_mm_init();
 | |
| #else
 | |
|     proto_ftm_init();
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // 初始化task 然后删除自身
 | |
| void iot_startup_init_task(void *arg)
 | |
| {
 | |
|     uint8_t gpio_3v3;
 | |
|     uint8_t gpio_eth_rst;
 | |
| 
 | |
|     for (;;) {
 | |
|         /* sub system init */
 | |
|         iot_sub_system_init();
 | |
| 
 | |
|         /* open the 3v3 power for bluetooth, wifi, rtc and em_ext module */
 | |
|         gpio_3v3 = iot_board_get_gpio(GPIO_P3V3_EN);
 | |
|         if (gpio_3v3 != GPIO_INVALID) {
 | |
|             iot_gpio_open_as_output(gpio_3v3);
 | |
|             iot_gpio_value_set(gpio_3v3, 0);
 | |
|         }
 | |
| 
 | |
|         /* output high to reset of ethernet phy */
 | |
|         gpio_eth_rst = iot_board_get_gpio(GPIO_ETH_PHY_RESET);
 | |
|         if (gpio_eth_rst != GPIO_INVALID) {
 | |
|             iot_gpio_open_as_output(gpio_eth_rst);
 | |
|             iot_gpio_value_set(gpio_eth_rst, 1);
 | |
|         }
 | |
| 
 | |
|         if(g_fw_mode == MM_MODE){
 | |
|             //mm mode or mt mode
 | |
|             startup_mm_init();
 | |
|         } else {
 | |
|             //mp mode or ftm mode
 | |
|             startup_ftm_init();
 | |
|         }
 | |
| 
 | |
|         os_delete_task(_init_handle);
 | |
|     }
 | |
| }
 | |
| 
 | |
| int32_t iot_startup_init()
 | |
| {
 | |
|     /* startup task */
 | |
|     _init_handle = os_create_task_ext(iot_startup_init_task, NULL,
 | |
|         IOT_INIT_TASK_PRIO, PLC_STARTUP_INIT_SIZE, __FUNCTION__);
 | |
| 
 | |
|     /* create the tasks */
 | |
|     if(_init_handle != NULL) {
 | |
|         iot_printf("init task create successfully...\n");
 | |
|     }
 | |
| 
 | |
|     return 0;
 | |
| }
 | |
| 
 | |
| int32_t iot_module_init(void)
 | |
| {
 | |
|     /* hardware init */
 | |
|     iot_hw_init();
 | |
| 
 | |
|     /* startup task init */
 | |
|     iot_startup_init();
 | |
| 
 | |
|     return 0;
 | |
| }
 | |
| 
 | |
| int32_t iot_module_start(void)
 | |
| {
 | |
|     os_start_kernel();
 | |
| 
 | |
|     return 0;
 | |
| }
 | |
| 
 | |
| 
 | |
| 
 | |
| uint32_t iot_plc_entry(iot_build_info_t *info)
 | |
| {
 | |
|     sbl_param_input_t param = {0};
 | |
| 
 | |
|     iot_system_get_fw_boot_param(¶m);
 | |
|     // 设置app的build_info
 | |
|     iot_version_set_user_build_info(info);
 | |
|     // 设置模块运行模式 工厂模式等
 | |
|     iot_mode_set(param.fw_mode);
 | |
|     mtd_set_flash_size(param.flash_size);
 | |
|     mtd_set_psram_state(param.run_in_psram);
 | |
| 
 | |
|     /* module init */
 | |
|     iot_module_init();
 | |
| 
 | |
|     /* module start */
 | |
|     iot_module_start();
 | |
| 
 | |
|     return -1;
 | |
| }
 |