int main() { modules_init(); wmprintf("Build Time: " __DATE__ " " __TIME__ "\r\n"); /* Start the application framework */ if (app_framework_start(common_event_handler) != WM_SUCCESS) { wmprintf("Failed to start application framework\r\n"); appln_critical_error_handler((void *) -WM_FAIL); } return 0; }
static void modules_init() { int ret; ret = wmstdio_init(UART0_ID, 0); if (ret != WM_SUCCESS) { wmprintf("Error: wmstdio_init failed\r\n"); appln_critical_error_handler((void *) -WM_FAIL); } ret = cli_init(); if (ret != WM_SUCCESS) { wmprintf("Error: cli_init failed\r\n"); appln_critical_error_handler((void *) -WM_FAIL); } ret = wlan_cli_init(); if (ret != WM_SUCCESS) { wmprintf("Error: wlan_cli_init failed\r\n"); appln_critical_error_handler((void *) -WM_FAIL); } ret = pm_cli_init(); if (ret != WM_SUCCESS) { wmprintf("Error: pm_cli_init failed\r\n"); appln_critical_error_handler((void *) -WM_FAIL); } /* Initialize time subsystem. * * Initializes time to 1/1/1970 epoch 0. */ ret = wmtime_init(); if (ret != WM_SUCCESS) { wmprintf("Error: wmtime_init failed\r\n"); appln_critical_error_handler((void *) -WM_FAIL); } return; }
static void modules_init() { int ret; struct partition_entry *p; flash_desc_t fl; /* * Initialize wmstdio prints */ ret = wmstdio_init(UART0_ID, 115200); if (ret != WM_SUCCESS) { appln_critical_error_handler((void *) -WM_FAIL); } /* Initialize time subsystem. * * Initializes time to 1/1/1970 epoch 0. */ ret = wmtime_init(); if (ret != WM_SUCCESS) { wmprintf("Error: wmtime_init failed"); appln_critical_error_handler((void *) -WM_FAIL); } /* * Initialize CLI Commands */ ret = cli_init(); if (ret != WM_SUCCESS) { LOG_ERROR("Error: cli_init failed"); appln_critical_error_handler((void *) -WM_FAIL); } /* Initialize the partition module */ ret = part_init(); if (ret != 0) { LOG_ERROR("Failed to initialize partition\r\n"); appln_critical_error_handler((void *) -WM_FAIL); } p = part_get_layout_by_id(FC_COMP_PSM, NULL); if (!p) { LOG_ERROR("Error: no psm partition found"); appln_critical_error_handler((void *) -WM_FAIL); } part_to_flash_desc(p, &fl); #if defined CONFIG_CPU_MC200 && defined CONFIG_WiFi_8801 //check psm _format psm_format_check(&fl); #endif /* Initilize psm module */ ret = app_psm_init(); if (ret != 0) { LOG_ERROR("Failed to initialize psm module\r\n"); appln_critical_error_handler((void *) -WM_FAIL); } wmprintf("\n\r"); wmprintf("_| _| _|_|_| _|_|_| _|_| \n\r"); wmprintf("_|_| _|_| _| _| _| _|\n\r"); wmprintf("_| _| _| _| _| _| _|\n\r"); wmprintf("_| _| _| _| _| _|\n\r"); wmprintf("_| _| _|_|_| _|_|_| _|_| \n\r"); print_versions(); read_provision_status(); #ifndef RELEASE /* Initilize cli for psm module */ ret = psm_cli_init(); if (ret != 0) { LOG_ERROR("Failed to register psm-cli commands\r\n"); appln_critical_error_handler((void *) -WM_FAIL); } #endif ret = gpio_drv_init(); if (ret != WM_SUCCESS) { LOG_ERROR("Error: gpio_drv_init failed"); appln_critical_error_handler((void *) -WM_FAIL); } ret = aes_drv_init(); if (ret != WM_SUCCESS) { LOG_ERROR("Error: aes drv init failed"); appln_critical_error_handler((void *) -WM_FAIL); } ret = factory_cli_init(); if (ret != 0) { LOG_ERROR("Error: factory_cli_init failed"); appln_critical_error_handler((void *) -WM_FAIL); } ret = miio_chip_rpc_init(); if (ret != 0) { LOG_ERROR("Error: miio_chip_rpc_cli_init failed"); appln_critical_error_handler((void *) -WM_FAIL); } #ifndef RELEASE ret = appln_cli_init(); if (ret != 0) { LOG_ERROR("Error: appln init failed"); appln_critical_error_handler((void *) -WM_FAIL); } #endif /* init add on interface */ init_addon_interface(); ret = ota_init(); if (ret != 0) { LOG_ERROR("Error: ota init failed"); appln_critical_error_handler((void *) -WM_FAIL); } #ifdef MIIO_COMMANDS ret = mcmd_create(UART1_ID); if (ret < 0) { LOG_ERROR("Error: miio command init failed(%d)\r\n", ret); appln_critical_error_handler((void *) -WM_FAIL); } #endif /* * Initialize Power Management Subsystem */ ret = pm_init(); if (ret != WM_SUCCESS) { LOG_ERROR("Error: pm_init failed"); appln_critical_error_handler((void *) -WM_FAIL); } }
int main() { int ret; modules_init();//模块的初始化 user_init(); /* system tag data */ store_or_retrive_taged_config(); get_mcu_version_from_psm(); LOG_DEBUG("rst cause is %x\r\n", boot_reset_cause()); #ifdef MIIO_COMMANDS mcmd_enqueue_raw("MIIO_model_req"); mcmd_enqueue_raw("MIIO_mcu_version_req"); #endif ret = os_mutex_create(&network_state_mutex,"network_state",OS_MUTEX_INHERIT); if(WM_SUCCESS != ret) { LOG_ERROR("create network_state_mutex fail"); goto main_error; } register_device_network_state_observer(led_network_state_observer); /*set wifi calbration data*/ product_set_wifi_cal_data(); /* Start the application framework */ if ((ret = app_framework_start(common_event_handler)) != WM_SUCCESS) { LOG_ERROR("Failed to start application framework.\r\n"); #if defined(CONFIG_CPU_MC200) if (-WLAN_ERROR_FW_DNLD_FAILED == ret || -WLAN_ERROR_FW_NOT_DETECTED == ret || -WLAN_ERROR_FW_NOT_READY == ret) { LOG_WARN("Wifi firmware broken, trying to recover.\r\n"); if (recover_wifi_fw() != WM_SUCCESS) { LOG_FATAL("Recovering wifi fw failed!!!\r\n"); } else { LOG_WARN("Recovering wifi fw success.\r\n"); pm_reboot_soc(); } } #endif appln_critical_error_handler((void *) -WM_FAIL); } ret = is_factory_mode_enable(); LOG_DEBUG("factory mode magic is %x\r\n" ,get_factory_mode_enable()); if (0 == ret) { // user mode static xTaskHandle task_handle; if (app_thread) { xTaskCreate(app_thread, (signed char*) "app", 2000, NULL, APPLICATION_PRIORITY, &task_handle); xTaskCreate(app_uart_thread, (signed char*) "app_uart", 2000, NULL, APPLICATION_PRIORITY, &task_handle); LOG_INFO("App thread and App uart thread started.\r\n"); } } else { // factory mode static xTaskHandle task_handle; if (app_test_thread) { xTaskCreate(app_test_thread, (signed char*) "test", 2000, NULL, 2, &task_handle); LOG_INFO("Test thread started.\r\n"); } } // Initialize power management hp_pm_init(); //enter main loop, main loop will be used as a worker thread main_loop_run(); //main loop return means error main_error: pm_reboot_soc(); //error occure on main thread , reboot return 1; }