657 lines
16 KiB
C
657 lines
16 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"
|
|
|
|
/* common includes */
|
|
#include "iot_io.h"
|
|
#include "iot_bitops.h"
|
|
#include "iot_pkt.h"
|
|
#include "iot_ipc.h"
|
|
#include "iot_plc_lib.h"
|
|
#include "iot_dbglog_api.h"
|
|
#include "iot_config.h"
|
|
#include "iot_version.h"
|
|
#include "iot_app.h"
|
|
#include "iot_share_task.h"
|
|
#include "iot_socket.h"
|
|
|
|
/* pib includes */
|
|
#include "iot_pib.h"
|
|
#include "iot_oem.h"
|
|
|
|
/* driver includes */
|
|
#include "cpu.h"
|
|
#include "iot_system.h"
|
|
#include "iot_clock.h"
|
|
#include "iot_uart.h"
|
|
#include "iot_wdg.h"
|
|
#include "iot_mtd.h"
|
|
#include "iot_crypto.h"
|
|
#include "iot_plc_led.h"
|
|
#include "iot_board.h"
|
|
#include "iot_led.h"
|
|
#include "iot_log_api.h"
|
|
#include "ahb.h"
|
|
#include "upgrade.h"
|
|
#include "snapshot.h"
|
|
#include "iot_efuse.h"
|
|
#include "iot_gptmr.h"
|
|
#include "iot_plc_pm.h"
|
|
#include "iot_plc_hw_tsfm.h"
|
|
#include "iot_plc_hw_topo.h"
|
|
#include "iot_power_mgmt.h"
|
|
#include "iot_energe_meter.h"
|
|
#include "iot_rtc.h"
|
|
#include "iot_dma.h"
|
|
#include "iot_eth.h"
|
|
#include "board_info.h"
|
|
|
|
/* cli includes */
|
|
#include "iot_cli.h"
|
|
#include "iot_uart_h.h"
|
|
|
|
/* ftm includes */
|
|
#include "iot_ftm.h"
|
|
#if IOT_PT_BOARD_SELECT
|
|
#include "iot_pt_board_mp.h"
|
|
#endif
|
|
/* debug includes*/
|
|
#include "dbg_io.h"
|
|
|
|
/* plc public includes */
|
|
#include "plc_const.h"
|
|
#include "mac_init_api.h"
|
|
#include "cvg_api.h"
|
|
#include "htbus_api.h"
|
|
#include "plc_protocol.h"
|
|
#include "hw_phy_init.h"
|
|
#include "phy_chn.h"
|
|
#include "phy_rf_chn.h"
|
|
|
|
#include "iot_cal_data.h"
|
|
#include "platform.h"
|
|
#include "mp_mode.h"
|
|
|
|
#include "mac_channel.h"
|
|
|
|
#include "iot_lwip.h"
|
|
#include "iot_upgrade_api.h"
|
|
#include "iot_busmon.h"
|
|
#include "iot_gpio_api.h"
|
|
#include "spi_flash.h"
|
|
#include "iot_oem_api.h"
|
|
#include "iot_crypto_async.h"
|
|
|
|
/* wireless include */
|
|
#include "phy_rf_init.h"
|
|
#include "phy_rf_chn.h"
|
|
#include "dbg_msg_pop.h"
|
|
#include "hw_mem_map.h"
|
|
#include "hw_phy_api.h"
|
|
|
|
uint8_t g_app_reg_done = 0;
|
|
extern void iot_board_info_init();
|
|
extern void heap_alloc_caps_init(uint32_t reserved_sz);
|
|
extern uint32_t vc_module_init();
|
|
|
|
extern int sec_cpu_start();
|
|
|
|
const iot_pkt_config_t g_pkt_config =
|
|
{
|
|
{
|
|
#if RUN_IN_PSRAM
|
|
/* for PSRAM enabled case, we need to make sure 520 PB allocated for
|
|
* PHY data receiving inside the internal RAM to fix band 0 ext TMI 1
|
|
* receive error, so choose the size carefully.
|
|
*/
|
|
/* reserve IOT_SG_UPGRADE_BLOCK block for upgrading */
|
|
{
|
|
PLC_SHORT_BUF_SIZE,
|
|
(PLC_SHORT_BUF_COUNT + IOT_SG_UPGRADE_BLOCK_CNT - 30),
|
|
PKT_OWNER_ALL, //PKT_OWNER_PLC
|
|
},
|
|
{
|
|
(PLC_SHORT_BUF_SIZE + 4),
|
|
30 + RF_SHORT_BUF_COUNT,
|
|
PKT_OWNER_ALL, //PKT_OWNER_PLC
|
|
},
|
|
#else /* RUN_IN_PSRAM */
|
|
/* reserve IOT_SG_UPGRADE_BLOCK block for upgrading */
|
|
{
|
|
PLC_SHORT_BUF_SIZE,
|
|
(PLC_SHORT_BUF_COUNT + IOT_SG_UPGRADE_BLOCK_CNT),
|
|
PKT_OWNER_ALL, //PKT_OWNER_PLC
|
|
},
|
|
#if RF_SHORT_BUF_COUNT
|
|
{
|
|
(PLC_SHORT_BUF_SIZE + 4),
|
|
RF_SHORT_BUF_COUNT,
|
|
PKT_OWNER_ALL, //PKT_OWNER_PLC
|
|
},
|
|
#endif
|
|
#endif /* RUN_IN_PSRAM */
|
|
{
|
|
PLC_SMALL_BUF_SIZE,
|
|
PLC_SMALL_BUF_COUNT,
|
|
PKT_OWNER_ALL, //PKT_OWNER_PLC
|
|
},
|
|
#if RF_SMALL_BUF_COUNT
|
|
{
|
|
(PLC_SMALL_BUF_SIZE + 4),
|
|
RF_SMALL_BUF_COUNT,
|
|
PKT_OWNER_ALL, //PKT_OWNER_PLC
|
|
},
|
|
#endif
|
|
{
|
|
PLC_LONG_BUF_SIZE,
|
|
PLC_LONG_BUF_COUNT,
|
|
PKT_OWNER_ALL, //PKT_OWNER_PLC
|
|
},
|
|
{
|
|
PLC_LARGE_BUF_SIZE,
|
|
PLC_LARGE_BUF_COUNT + DBGLOG_MAX_BUFFER_CNT,
|
|
PKT_OWNER_ALL, //PKT_OWNER_PLC
|
|
},
|
|
{
|
|
PLC_LIB_MSG_SHORT_BUF_SIZE,
|
|
PLC_LIB_MSG_SHORT_BUF_CNT,
|
|
PKT_OWNER_ALL,
|
|
},
|
|
{
|
|
PLC_HUGE_BUF_SIZE,
|
|
PLC_HUGE_BUF_COUNT,
|
|
PKT_OWNER_ALL,
|
|
},
|
|
#if RUN_IN_PSRAM
|
|
{
|
|
PLC_LIB_MSG_LONG_BUF_SIZE,
|
|
PLC_LIB_MSG_LONG_BUF_CNT,
|
|
PKT_OWNER_ALL,
|
|
},
|
|
#else /* RUN_IN_PSRAM */
|
|
#if !RF_SHORT_BUF_COUNT
|
|
{
|
|
0,
|
|
0,
|
|
PKT_OWNER_NONE,
|
|
},
|
|
#endif
|
|
{
|
|
0,
|
|
0,
|
|
PKT_OWNER_NONE,
|
|
},
|
|
#endif /* RUN_IN_PSRAM */
|
|
#if !RF_SMALL_BUF_COUNT
|
|
{
|
|
0,
|
|
0,
|
|
PKT_OWNER_NONE,
|
|
}
|
|
#endif
|
|
}
|
|
};
|
|
|
|
//mm mode or mp mode
|
|
#if (IOT_MP_SUPPORT == 1 && IOT_PT_BOARD_SELECT == 0)
|
|
|
|
/* plc mission mode initialization second half */
|
|
static void plc_mm_init2(iot_msg_entry_t *entry)
|
|
{
|
|
uint8_t ret;
|
|
(void)entry;
|
|
(void)ret;
|
|
|
|
extern os_task_h _init_handle;
|
|
os_delete_task(_init_handle);
|
|
os_delay(100);
|
|
|
|
/* launch applications */
|
|
ret = iot_app_start();
|
|
|
|
#if PLC_COMM_ENABLE && (!IOT_HTBUS_EN)
|
|
if (ret == 0) {
|
|
cvg_start_vdev(0, NULL, CVG_VDEV_START_BOOT_UP);
|
|
} else if (ret == 1) {
|
|
cvg_start_vdev(0, NULL, CVG_VDEV_START_BOOT_UP_CERT_ONLY);
|
|
}
|
|
#endif /* PLC_COMM_ENABLE && (!IOT_HTBUS_EN) */
|
|
g_app_reg_done = 1;
|
|
}
|
|
|
|
static void plc_mm_init2_cancel(iot_msg_entry_t *entry)
|
|
{
|
|
IOT_ASSERT(0);
|
|
}
|
|
#endif
|
|
|
|
void iot_mode_set(int fw_mode)
|
|
{
|
|
uint8_t reason = IOT_SYS_RST_REASON_UNKNOWN;
|
|
|
|
iot_board_get_boot_reason(&reason);
|
|
if (fw_mode == FTM_MODE || reason == IOT_SYS_RST_REASON_FTM) {
|
|
g_fw_mode = FTM_MODE;
|
|
} else {
|
|
g_fw_mode = MM_MODE;
|
|
}
|
|
|
|
#if ( (IOT_FTM_SUPPORT == 1 && IOT_MP_SUPPORT == 0) \
|
|
|| (IOT_MP_MODE_DIRECT_ENABLE == 1) \
|
|
|| (IOT_MP_RF_MODE_DIRECT_ENABLE == 1) \
|
|
|| (IOT_MP_TX_MODE_ENABLE == 1) \
|
|
|| (IOT_PT_BOARD_SELECT != IOT_PT_BOARD_NONE) \
|
|
|| (IOT_MP_RX_MODE_ENABLE == 1))
|
|
/* TBD. add GPIO detection for bring up mode */
|
|
g_fw_mode = FTM_MODE;
|
|
#endif
|
|
|
|
#if (IOT_STA_CONTROL_TYPE_STA == IOT_STA_CONTROL_MODE)
|
|
heap_alloc_caps_init(MEM_MAP_RESERVED_BUF_SZ);
|
|
#elif (IOT_FTM_SUPPORT == 1)
|
|
if (g_fw_mode == FTM_MODE) {
|
|
heap_alloc_caps_init(MEM_MAP_RESERVED_BUF_SZ);
|
|
}
|
|
#endif
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 硬件部分初始化
|
|
void iot_hw_init()
|
|
{
|
|
// 初始化efuse
|
|
iot_efuse_init();
|
|
// 初始化时钟
|
|
system_clock_init();
|
|
// 初始化boardid为0
|
|
iot_board_info_init();
|
|
// 加密
|
|
iot_crypto_init();
|
|
|
|
/*resource initializations;*/
|
|
// 初始化flash
|
|
mtd_device_init(0);
|
|
|
|
/* init oem module load oem cfg from file */
|
|
// 初始化oem状态 cco还是sta
|
|
#if (PLC_SUPPORT_CCO_ROLE)
|
|
iot_oem_init(1);
|
|
#else
|
|
iot_oem_init(0);
|
|
#endif
|
|
// 目前是空函数
|
|
iot_cal_data_init();
|
|
|
|
#if (IOT_FLASH_BUILD == 1)
|
|
/* board info config*/
|
|
iot_board_cfg_init();
|
|
#endif
|
|
|
|
iot_led_init();
|
|
|
|
system_uart_init();
|
|
|
|
#ifndef DISABLE_PRINT
|
|
dbg_uart_init_port(iot_board_get_uart(UART_PRINT), 1);
|
|
dbg_uart_stage1_init();
|
|
#endif
|
|
|
|
#if (IOT_FLASH_BUILD == 1)
|
|
// 打印oem配置信息
|
|
iot_board_cfg_dump();
|
|
#endif
|
|
|
|
iot_busmon_init();
|
|
/*platform intialization*/
|
|
// 这里初始化cpu中断 异常处理函数 gp定时器等
|
|
platform_init();
|
|
/* chip id checking */
|
|
iot_chip_id_check();
|
|
|
|
iot_wdg_enable();
|
|
}
|
|
|
|
// 子系统初始化
|
|
void iot_sub_system_init()
|
|
{
|
|
/* init common modules */
|
|
// 检查前导零数组是否正常
|
|
iot_bitops_init();
|
|
|
|
/* init os related modules and utilities */
|
|
os_utils_init();
|
|
|
|
/* rtc init */
|
|
iot_rtc_init();
|
|
|
|
/* init pkt module */
|
|
iot_pkt_init(&g_pkt_config);
|
|
|
|
/* init shared background task. It shall be ahead of pib init. */
|
|
iot_share_task_init();
|
|
|
|
/* init dbglog module */
|
|
iot_dbglog_init();
|
|
|
|
/* init dma module */
|
|
iot_dma_init();
|
|
|
|
/* init gpio module */
|
|
iot_gpio_module_init();
|
|
|
|
if (g_fw_mode == MM_MODE) {
|
|
/* init uart module */
|
|
iot_uart_init(0);
|
|
} else {
|
|
/* init uart module */
|
|
iot_uart_init(1);
|
|
}
|
|
|
|
/* init ipc module */
|
|
iot_ipc_init();
|
|
}
|
|
|
|
|
|
/* plc mission mode initialization first half */
|
|
void proto_mm_init()
|
|
{
|
|
#if (IOT_MP_SUPPORT == 1 && IOT_PT_BOARD_SELECT == 0)
|
|
bool_t upgraded = false;
|
|
|
|
/* efuse protect */
|
|
iot_efuse_protect();
|
|
|
|
/* gpio reset control */
|
|
iot_sys_reset_ctrl();
|
|
|
|
/* update boot paramters */
|
|
if (0 == dev_startup_param_value_check(false)) {
|
|
upgraded = true;
|
|
}
|
|
/* set first boot flag */
|
|
iot_upgrade_set_first_boot(upgraded);
|
|
|
|
/* init pib module and load pib cfg from file */
|
|
iot_pib_init();
|
|
iot_pib_load(upgraded);
|
|
|
|
/* load user build info if any */
|
|
iot_board_load_user_build_info();
|
|
|
|
/* update reboot log */
|
|
iot_board_reset_check();
|
|
|
|
/* log dev init */
|
|
iot_log_dev_init();
|
|
|
|
#if IOT_ETH_ENABLE
|
|
iot_eth_init();
|
|
#endif
|
|
|
|
#if IOT_EXT_FLASH_ENABLE
|
|
iot_spi_flash_init();
|
|
#endif
|
|
|
|
/* init upgrade module */
|
|
iot_upgrade_init();
|
|
|
|
/* init plc led module */
|
|
iot_plc_led_init(0);
|
|
|
|
/* init power management module */
|
|
iot_plc_pm_init();
|
|
|
|
/* init hw_tsfm management module */
|
|
iot_plc_hw_tsfm_init();
|
|
|
|
/* init hw_topo management module */
|
|
iot_plc_hw_topo_init();
|
|
|
|
/* init dbg msg */
|
|
dbg_msg_print_init();
|
|
|
|
#if IOT_SEC_CPU_SUPPORT
|
|
if (sec_cpu_start()) {
|
|
IOT_ASSERT(0);
|
|
}
|
|
#endif
|
|
|
|
/* init crypto async */
|
|
iot_crypto_async_init();
|
|
|
|
/* for tx/rx phase switch gpio init */
|
|
phy_trx_phase_switch_gpio_init();
|
|
|
|
#if PLC_COMM_ENABLE
|
|
/* phy init, please be noted with proto init */
|
|
uint32_t proto = PLC_PROTO_TYPE_SG;
|
|
#if SUPPORT_SMART_GRID
|
|
proto = PLC_PROTO_TYPE_SG;
|
|
#elif SUPPORT_SOUTHERN_POWER_GRID
|
|
proto = PLC_PROTO_TYPE_SPG;
|
|
#endif
|
|
|
|
uint32_t hw_band_id = IOT_PLC_PHY_BAND_DFT;
|
|
/* for yunnan spg */
|
|
iot_oem_cfg_t *oemcfg_t = NULL;
|
|
iot_oem_get_cfg(&oemcfg_t);
|
|
uint8_t user_type;
|
|
|
|
g_phy_cpu_share_ctxt.sym_num_fix_dis = 1;
|
|
if (PLC_PROTO_TYPE_SPG == proto && \
|
|
oemcfg_t->base_cfg.module_type != MODULE_TYPE_CCO) {
|
|
user_type = iot_oem_get_user_type();
|
|
if (USER_TYPE_SOUTHEN_POWER_GRID_YUNNAN == user_type) {
|
|
hw_band_id = IOT_SUPPORT_TONE_100_230;
|
|
} else if (USER_TYPE_SOUTHEN_POWER_GRID_GUIZHOU == user_type) {
|
|
hw_band_id = IOT_SUPPORT_TONE_80_490;
|
|
g_phy_cpu_share_ctxt.sym_num_fix_dis = 0;
|
|
}
|
|
} else if (PLC_PROTO_TYPE_SG == proto && \
|
|
((USER_TYPE_STATE_GRID_CQ == iot_oem_get_user_type()) ||
|
|
(USER_TYPE_STATE_GRID_JIBEI == iot_oem_get_user_type()))) {
|
|
hw_band_id = IOT_SUPPORT_TONE_100_230;
|
|
}
|
|
/* NOTE: ckq need bbai at phy first init */
|
|
phy_init(proto, hw_band_id, phy_band_to_tonemask_id_get(hw_band_id),
|
|
((IOT_STA_CONTROL_MODE == IOT_STA_CONTROL_TYPE_METER)||
|
|
(IOT_STA_CONTROL_MODE == IOT_STA_CONTROL_TYPE_PPM_DETECT)));
|
|
|
|
uint8_t rf_band_sel, opt, ch;
|
|
if (iot_board_is_overseas_rf_band()) {
|
|
rf_band_sel = PHY_RF_BAND_OVERSEAS;
|
|
} else {
|
|
rf_band_sel = PHY_RF_BAND_NSG;
|
|
}
|
|
phy_rf_band_info_init((PHY_RF_BAND_T)rf_band_sel);
|
|
phy_rf_get_default_cfg(&opt, &ch);
|
|
/* wireless phy init, plccpu and bbcpu sync init, rf rxdc diable */
|
|
phy_rf_init(proto, (uint32_t)opt, (uint32_t)ch, 1, 0, 0);
|
|
|
|
/* mac init */
|
|
mac_init(PHY_PROTO_TYPE_GET());
|
|
|
|
#if IOT_HTBUS_EN == 0
|
|
/* init plc cvg module */
|
|
cvg_init((uint8_t)PHY_PROTO_TYPE_GET());
|
|
#else
|
|
/* init plc htbus module */
|
|
htbus_init();
|
|
#endif
|
|
|
|
/* init plc lib */
|
|
iot_plc_lib_init((uint8_t)PHY_PROTO_TYPE_GET());
|
|
#endif /* PLC_COMM_ENABLE */
|
|
|
|
/* init tcpip stack */
|
|
iot_lwip_init();
|
|
|
|
/* create task for socket to receive data. */
|
|
iot_socket_task_init();
|
|
|
|
#if IOT_BT_EXT_ENABLE
|
|
extern uint32_t iot_bt_ext_open(void);
|
|
iot_bt_ext_open();
|
|
#endif
|
|
|
|
#if IOT_CLI_MODULE_ENABLE
|
|
/* init cli module 1 is uart*/
|
|
/* TODO: enable this after fixing the iot_pkt free issue */
|
|
iot_cli_init(1, 0);
|
|
#endif /* IOT_CLI_MODULE_ENABLE */
|
|
|
|
#if K48_STA_MULTI_CHANNEL_SELECT_ENABLE
|
|
iot_mac_k48sta_init_channelgpio();
|
|
#endif
|
|
|
|
#if K48_CCO_MULTI_CHANNEL_SELECT_ENABLE
|
|
iot_mac_k48cco_init_channelgpio();
|
|
#endif
|
|
|
|
|
|
dev_startup_param_value_check(true);
|
|
|
|
/* gp timer callback to share task. */
|
|
iot_gp_timer_task_register();
|
|
|
|
/* energe meter init*/
|
|
#if IOT_ENERGE_METER_ENABLE
|
|
iot_energe_meter_init();
|
|
#endif
|
|
|
|
#if INCLUDE_VIRTUAL_CHANNEL
|
|
vc_module_init();
|
|
#endif
|
|
/* start bottom half init in shared task context to free current task
|
|
* to save memory.
|
|
*/
|
|
iot_share_task_msg_register(IOT_SHARE_TASK_MT_BH_INIT,
|
|
plc_mm_init2, plc_mm_init2_cancel);
|
|
iot_share_task_post_msg(IOT_SHARE_TASK_QUEUE_HP, IOT_SHARE_TASK_MT_BH_INIT,
|
|
0, 0, NULL);
|
|
/* delay enough time to allow bottom half init to delete init task
|
|
* to free memory quickly
|
|
*/
|
|
os_delay(10000);
|
|
#endif
|
|
}
|
|
|
|
/* plc factory test mode initialization */
|
|
void proto_ftm_init()
|
|
{
|
|
bool_t upgraded = false;
|
|
|
|
/* gpio reset control */
|
|
iot_sys_reset_ctrl();
|
|
|
|
/* update boot paramters */
|
|
if (0 == dev_startup_param_value_check(false)) {
|
|
upgraded = true;
|
|
}
|
|
/* set first boot flag */
|
|
iot_upgrade_set_first_boot(upgraded);
|
|
|
|
/* init pib module and load pib cfg from file */
|
|
iot_pib_init();
|
|
iot_pib_load(upgraded);
|
|
|
|
#if (IOT_FLASH_BUILD)
|
|
iot_log_dev_init();
|
|
#endif
|
|
|
|
/* init plc led module */
|
|
iot_plc_led_init(1);
|
|
|
|
/* init dbg msg */
|
|
dbg_msg_print_init();
|
|
|
|
#if IOT_SEC_CPU_SUPPORT
|
|
if (sec_cpu_start()) {
|
|
IOT_ASSERT(0);
|
|
}
|
|
#endif
|
|
|
|
/* init crypto async */
|
|
iot_crypto_async_init();
|
|
|
|
/* for tx/rx phase switch gpio init */
|
|
phy_trx_phase_switch_gpio_init();
|
|
|
|
/* phy init */
|
|
uint32_t proto = PLC_PROTO_TYPE_SG;
|
|
#if SUPPORT_SMART_GRID
|
|
proto = PLC_PROTO_TYPE_SG;
|
|
#elif SUPPORT_SOUTHERN_POWER_GRID
|
|
proto = PLC_PROTO_TYPE_SPG;
|
|
#endif
|
|
phy_init(proto, IOT_PLC_PHY_BAND_DFT,
|
|
phy_band_to_tonemask_id_get(IOT_PLC_PHY_BAND_DFT),
|
|
!IOT_CLI_IC_TOOL_EN);
|
|
|
|
#if IOT_CLI_IC_TOOL_EN == 0
|
|
uint8_t rf_band_sel, opt, ch;
|
|
if (iot_board_is_overseas_rf_band()) {
|
|
rf_band_sel = PHY_RF_BAND_OVERSEAS;
|
|
} else {
|
|
rf_band_sel = PHY_RF_BAND_NSG;
|
|
}
|
|
phy_rf_band_info_init((PHY_RF_BAND_T)rf_band_sel);
|
|
phy_rf_get_default_cfg(&opt, &ch);
|
|
/* wireless phy init, plccpu and bbcpu sync init, rf rxdc diable */
|
|
phy_rf_init(proto, (uint32_t)opt, (uint32_t)ch, 1, 0, 0);
|
|
#endif
|
|
|
|
/* init plc lib */
|
|
iot_plc_lib_init((uint8_t)PHY_PROTO_TYPE_GET());
|
|
|
|
#if IOT_CLI_MODULE_ENABLE
|
|
/* init cli module */
|
|
iot_cli_init(1, 1);
|
|
#endif /* IOT_CLI_MODULE_ENABLE */
|
|
|
|
#if K48_STA_MULTI_CHANNEL_SELECT_ENABLE
|
|
iot_mac_k48sta_init_channelgpio();
|
|
#endif
|
|
|
|
#if K48_CCO_MULTI_CHANNEL_SELECT_ENABLE
|
|
iot_mac_k48cco_init_channelgpio();
|
|
#endif
|
|
|
|
/* init ftm module */
|
|
iot_ftm_init();
|
|
|
|
dev_startup_param_value_check(true);
|
|
|
|
/* 1. production test board open watch dog
|
|
* 2. 产测的DUT open watch dog
|
|
*/
|
|
if (IOT_PT_BOARD_SELECT || (IOT_MP_SUPPORT && phy_get_fw_mode() !=
|
|
MP_MODE)) {
|
|
} else {
|
|
iot_wdg_disable();
|
|
}
|
|
|
|
//mp mode entry
|
|
iot_init_mp_mode_entry();
|
|
|
|
return;
|
|
}
|