KT25-1015_AC695x_SDK310/apps/soundbox/common/init.c

249 lines
4.8 KiB
C
Raw Normal View History

2025-10-15 07:18:43 +00:00
#include "app_config.h"
#include "system/includes.h"
#include "asm/charge.h"
#include "app_power_manage.h"
#include "update.h"
#include "app_main.h"
#include "app_charge.h"
#include "chgbox_ctrl.h"
#include "update_loader_download.h"
2026-04-20 06:50:04 +00:00
#include "kt.h"
2025-10-15 07:18:43 +00:00
extern void setup_arch();
extern int audio_dec_init();
extern int audio_enc_init();
static void do_initcall()
{
__do_initcall(initcall);
}
static void do_early_initcall()
{
__do_initcall(early_initcall);
}
static void do_late_initcall()
{
__do_initcall(late_initcall);
}
static void do_platform_initcall()
{
__do_initcall(platform_initcall);
}
static void do_module_initcall()
{
__do_initcall(module_initcall);
}
void __attribute__((weak)) board_init()
{
}
void __attribute__((weak)) board_early_init()
{
}
int eSystemConfirmStopStatus(void)
{
/* 系统进入在未来时间里,无任务超时唤醒,可根据用户选择系统停止,或者系统定时唤醒(100ms) */
2026-05-08 14:12:19 +00:00
// 1:Endless Sleep
// 0:100 ms wakeup
if (get_charge_full_flag())
{
2025-10-15 07:18:43 +00:00
log_i("Endless Sleep");
power_set_soft_poweroff();
return 1;
2026-05-08 14:12:19 +00:00
}
else
{
2025-10-15 07:18:43 +00:00
log_i("100 ms wakeup");
return 0;
}
}
static void check_power_on_key(void)
{
u32 delay_10ms_cnt = 0;
u32 delay_10msp_cnt = 0;
2026-05-08 14:12:19 +00:00
while (1)
{
2025-10-15 07:18:43 +00:00
clr_wdt();
os_time_dly(2);
extern u8 get_power_on_status(void);
2026-05-08 14:12:19 +00:00
if (get_power_on_status())
{
2025-10-15 07:18:43 +00:00
putchar('+');
delay_10msp_cnt = 0;
delay_10ms_cnt++;
2026-05-08 14:12:19 +00:00
if (delay_10ms_cnt > 70)
{
printf("power on key\n");
app_var.poweron_charge = 0;
2025-10-15 07:18:43 +00:00
return;
}
2026-05-08 14:12:19 +00:00
}
else
{
if (app_var.poweron_charge)
{
printf("this plug wakeup......,no need check power on key\n");
return;
}
2025-10-15 07:18:43 +00:00
putchar('-');
delay_10ms_cnt = 0;
delay_10msp_cnt++;
2026-05-08 14:12:19 +00:00
if (delay_10msp_cnt > 20)
{
2025-10-15 07:18:43 +00:00
puts("enter softpoweroff\n");
power_set_soft_poweroff();
}
}
}
}
static void app_init()
{
int update;
2026-05-08 14:12:19 +00:00
app_var.poweron_charge = 0;
// if (gpio_read(IO_PORTB_03)) {
// app_var.poweron_charge = 1;
// }
2025-10-15 07:18:43 +00:00
do_early_initcall();
do_platform_initcall();
board_init();
2026-04-20 06:50:04 +00:00
kt_boot_init();
2025-10-15 07:18:43 +00:00
do_initcall();
do_module_initcall();
do_late_initcall();
audio_enc_init();
audio_dec_init();
2026-05-08 14:12:19 +00:00
if (gpio_read(IO_PORTB_03))
{
printf("USB VBUS insert\n");
app_var.poweron_charge = 1;
}
if (!UPDATE_SUPPORT_DEV_IS_NULL())
{
2025-10-15 07:18:43 +00:00
update = update_result_deal();
}
app_var.play_poweron_tone = 1;
2026-05-08 14:12:19 +00:00
if (!get_charge_online_flag())
{
2025-10-15 07:18:43 +00:00
check_power_on_voltage();
#if TCFG_POWER_ON_NEED_KEY
/*充电拔出,CPU软件复位, 不检测按键,直接开机*/
#if TCFG_CHARGE_OFF_POWERON_NE
2026-05-08 14:12:19 +00:00
if ((!update && cpu_reset_by_soft()) || is_ldo5v_wakeup())
{
2025-10-15 07:18:43 +00:00
#else
2026-05-08 14:12:19 +00:00
if (!update && cpu_reset_by_soft())
{
2025-10-15 07:18:43 +00:00
#endif
app_var.play_poweron_tone = 0;
2026-05-08 14:12:19 +00:00
}
else
{
2025-10-15 07:18:43 +00:00
check_power_on_key();
}
#endif
}
#if (TCFG_MC_BIAS_AUTO_ADJUST == MC_BIAS_ADJUST_POWER_ON)
extern u8 power_reset_src;
u8 por_flag = 0;
u8 cur_por_flag = 0;
/*
*1.update
*2.power_on_reset(BIT0:)
*3.pin reset(BIT4:)
*/
2026-05-08 14:12:19 +00:00
if (update || (power_reset_src & BIT(0)) || (power_reset_src & BIT(4)))
{
// log_info("reset_flag:0x%x",power_reset_src);
2025-10-15 07:18:43 +00:00
cur_por_flag = 0xA5;
}
int ret = syscfg_read(CFG_POR_FLAG, &por_flag, 1);
2026-05-08 14:12:19 +00:00
if ((cur_por_flag == 0xA5) && (por_flag != cur_por_flag))
{
// log_info("update POR flag");
2025-10-15 07:18:43 +00:00
ret = syscfg_write(CFG_POR_FLAG, &cur_por_flag, 1);
}
#endif
2026-05-08 14:12:19 +00:00
#if (TCFG_CHARGE_BOX_ENABLE)
2025-10-15 07:18:43 +00:00
/* clock_add_set(CHARGE_BOX_CLK); */
chgbox_init_app();
#endif
}
static void app_task_handler(void *p)
{
app_init();
app_main();
}
__attribute__((used)) int *__errno()
{
static int err;
return &err;
}
int main()
{
2026-05-08 14:12:19 +00:00
#if (CONFIG_CPU_BR25)
2025-10-15 07:18:43 +00:00
2026-05-08 14:12:19 +00:00
#if (TCFG_DEC2TWS_ENABLE || RECORDER_MIX_EN || TCFG_DRC_ENABLE || TCFG_USER_BLE_ENABLE || TCFG_DEC_APE_ENABLE || TCFG_DEC_FLAC_ENABLE || TCFG_DEC_DTS_ENABLE || TCFG_USER_EMITTER_ENABLE)
2025-10-15 07:18:43 +00:00
clock_set_sfc_max_freq(100 * 1000000, 100 * 1000000);
#else
#if ((TCFG_AEC_ENABLE) && (TCFG_USER_TWS_ENABLE))
clock_set_sfc_max_freq(80 * 1000000, 80 * 1000000);
#else
clock_set_sfc_max_freq(64 * 1000000, 64 * 1000000);
#endif
#endif
#endif
wdt_close();
os_init();
setup_arch();
board_early_init();
task_create(app_task_handler, NULL, "app_core");
os_start();
local_irq_enable();
2026-05-08 14:12:19 +00:00
while (1)
{
2025-10-15 07:18:43 +00:00
asm("idle");
}
return 0;
}