/* * * Copyright (c) 2022 Project CHIP Authors * All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * @file * This file provides the function to initialize the ASR platform. */ #include "AppConfig.h" #include #include #include #include #include #include "lega_wlan_api.h" #include "soc_init.h" #ifdef CFG_PLF_RV32 #include "asr_flash_kv.h" #include "asr_pinmux.h" #include "asr_sec_hw_common.h" #include "asr_uart.h" #elif defined CFG_PLF_DUET #include "duet_flash_kv.h" #include "duet_pinmux.h" #include "duet_uart.h" #include "duet_version.h" #else #include "lega_flash_kv.h" #include "lega_pinmux.h" #include "lega_uart.h" #include "lega_version.h" #endif #include "lega_ota_utils.h" #include "lega_rtos_api.h" #if defined(CFG_PLF_RV32) || defined(CFG_PLF_DUET) #include "printf_uart.h" #endif #include "tcpip.h" #if (CFG_EASY_LOG_ENABLE == 1) #include "elog.h" #include "elog_cfg.h" #endif #ifdef CFG_PLF_RV32 #define LEGA_UART0_INDEX UART0_INDEX #define LEGA_UART1_INDEX UART1_INDEX #define LEGA_UART2_INDEX UART2_INDEX #define duet_pinmux_config asr_pinmux_config #define duet_uart_init printf_uart_init #define duet_flash_kv_init alto_flash_kv_init #elif defined CFG_PLF_DUET #define LEGA_UART0_INDEX DUET_UART0_INDEX #define LEGA_UART1_INDEX DUET_UART1_INDEX #define LEGA_UART2_INDEX DUET_UART2_INDEX #else #define duet_pinmux_config lega_pinmux_config #define duet_uart_init lega_uart_init #define duet_flash_kv_init lega_flash_kv_init #define UART1_INDEX LEGA_UART1_INDEX #endif #define UART1_TX_PIN PAD2 #define UART1_RX_PIN PAD3 #ifdef CFG_PLF_RV32 extern asr_uart_dev_t lega_at_uart; #elif defined CFG_PLF_DUET extern duet_uart_dev_t lega_at_uart; #else extern lega_uart_dev_t lega_at_uart; #endif #ifdef __cplusplus extern "C" { #endif void lega_sram_rf_pta_init(void); void lega_recovery_phy_fsm_config(void); void lega_wlan_efuse_read(void); int lega_wlan_init(void); void ota_roll_back_pro(void); int32_t duet_flash_kv_init(void); void lega_at_cmd_register_all(void); int lega_at_init(void); void at_handle_uartirq(char ch); int asr_security_engine_init(); void at_uart_init(void); #ifdef __cplusplus } #endif void at_uart_init(void) { memset(&lega_at_uart, 0, sizeof(lega_at_uart)); lega_at_uart.config.baud_rate = UART_BAUDRATE_115200; lega_at_uart.config.data_width = DATA_8BIT; lega_at_uart.config.flow_control = FLOW_CTRL_DISABLED; lega_at_uart.config.parity = PARITY_NO; lega_at_uart.config.stop_bits = STOP_1BIT; lega_at_uart.config.mode = TX_RX_MODE; lega_at_uart.port = UART1_INDEX; #if defined CFG_PLF_RV32 || defined CFG_PLF_DUET duet_pinmux_config(UART1_TX_PIN, PF_UART1); duet_pinmux_config(UART1_RX_PIN, PF_UART1); #endif // register uart callback func for receiving at command lega_at_uart.priv = (void *) (at_handle_uartirq); duet_uart_init(&lega_at_uart); } void init_asrPlatform(void) { // don't run any code before soc_pre_init. soc_pre_init(); soc_init(); duet_flash_kv_init(); // uart init and register uart for receiving at command at_uart_init(); // ota roll back,just for flash_remapping ota_roll_back_pro(); // disable wdg ota_wdg_disable(); // register uart for printf log, the used uart should be init before. printf_uart_register(LEGA_UART1_INDEX); // register uart for at log, the used uart should be init before. printf2_uart_register(LEGA_UART1_INDEX); // printf("\napp version: %s\n",LEGA_VERSION_STR); /* set EasyLogger log format */ #if (CFG_EASY_LOG_ENABLE == 1) elog_init(); elog_set_fmt(ELOG_LVL_ASSERT, ELOG_FMT_LVL | ELOG_FMT_TAG | ELOG_FMT_TIME); elog_set_fmt(ELOG_LVL_ERROR, ELOG_FMT_LVL | ELOG_FMT_TAG | ELOG_FMT_TIME); elog_set_fmt(ELOG_LVL_WARN, ELOG_FMT_LVL | ELOG_FMT_TAG | ELOG_FMT_TIME); elog_set_fmt(ELOG_LVL_INFO, ELOG_FMT_LVL | ELOG_FMT_TAG | ELOG_FMT_TIME); elog_set_fmt(ELOG_LVL_DEBUG, ELOG_FMT_LVL | ELOG_FMT_TAG | ELOG_FMT_TIME); elog_set_fmt(ELOG_LVL_VERBOSE, ELOG_FMT_LVL | ELOG_FMT_TAG | ELOG_FMT_TIME); elog_start(); #endif #if defined CFG_PLF_RV32 || defined CFG_PLF_DUET lega_wlan_efuse_read(); #ifdef CFG_PLF_DUET // set certifacation type before rf init, param 0x00 is old srrc, 0x10 is new srrc lega_wlan_set_cert_type(0x00); #endif lega_sram_rf_pta_init(); lega_recovery_phy_fsm_config(); #endif asr_security_engine_init(); #ifndef CONFIG_ENABLE_CHIP_SHELL lega_at_init(); #endif lega_at_cmd_register_all(); lega_wlan_init(); tcpip_init(NULL, NULL); }