264 lines
7.6 KiB
C
264 lines
7.6 KiB
C
/*----------------------------------------------------------------------------
|
||
* Copyright (c) Fenda Technologies Co., Ltd. 2021. All rights reserved.
|
||
*
|
||
* Description: sys_restart.c
|
||
*
|
||
* Author: saimen
|
||
*
|
||
* Create: 2024-06-08
|
||
*--------------------------------------------------------------------------*/
|
||
#include "sys_config.h"
|
||
#include "sys_restart.h"
|
||
#include "sys_typedef.h"
|
||
#include "sql_all.h"
|
||
#include "fs_user_common.h"
|
||
#include "hal_reboot.h"
|
||
#include "exception.h"
|
||
#include "service_ancillary.h"
|
||
|
||
|
||
#define ENABLE_STATIC_PRINT 0
|
||
#define static_print_error(...) sys_log_e(__VA_ARGS__) //错误信息打印一般常开
|
||
#define static_print_warn(...) sys_log_w(__VA_ARGS__) //警告信息打印一般常开
|
||
#if ENABLE_STATIC_PRINT
|
||
#define static_print_debug(...) sys_log_d(__VA_ARGS__)
|
||
#else
|
||
#define static_print_debug(...)
|
||
#endif
|
||
|
||
uint32_t g_sys_restart_reason = 0;
|
||
|
||
void tjd_sys_anomaly_data_save ( void )
|
||
{
|
||
#if 0
|
||
uint8_t *p_save_data;
|
||
uint32_t len;
|
||
uint32_t len_conut;
|
||
char* path;
|
||
|
||
len_conut = 0;
|
||
p_save_data = sql_setting_get_info(&len,&path);
|
||
rom_api_smart_write(HARDFAULT_INFO_BASE_ADDR+len_conut,p_save_data,len);
|
||
|
||
len_conut += len;
|
||
p_save_data = sql_weather_get_info(&len,&path);
|
||
rom_api_smart_write(HARDFAULT_INFO_BASE_ADDR+len_conut,p_save_data,len);
|
||
|
||
len_conut += len;
|
||
p_save_data = sql_fit_get_info(&len, &path);
|
||
rom_api_smart_write(HARDFAULT_INFO_BASE_ADDR+len_conut,p_save_data,len);
|
||
|
||
len_conut += len;
|
||
p_save_data = log_api_get_info(&len,&path);
|
||
rom_api_smart_write(HARDFAULT_INFO_BASE_ADDR+len_conut,p_save_data,len);
|
||
if(len_conut>(HARDFAULT_INFO_DATA_SIZE/2))
|
||
{
|
||
static_print_warn("error: len_conut>HARDFAULT_INFO_DATA_SIZE.\r\n");
|
||
}
|
||
#endif
|
||
}
|
||
|
||
void tjd_sys_restart_data_save ( void )
|
||
{
|
||
static_print_warn("tjd_sys_restart_data_save()");
|
||
tjd_service_ancillary_data_save_process(0xffffffff);
|
||
}
|
||
|
||
// 对保存在MCU ROM的某些数据进行开机启动时的处量:数据检查、检验、读取等.
|
||
void tjd_sys_start_data_recover ( void )
|
||
{
|
||
int ret;
|
||
uint8_t *p_save_data;
|
||
uint32_t len;
|
||
char* path;
|
||
uint32_t len_conut;
|
||
|
||
static_print_warn("tjd_sys_start_data_recover()");
|
||
// 开机读取flash里面保存的校验值
|
||
// factory_read_all_calibration_data();
|
||
// xfile_sys_init();
|
||
|
||
if(tjd_sys_check_restart_reason()&0x40)//restart_reason = watchdog
|
||
{
|
||
#if 0
|
||
len_conut = 0;
|
||
p_save_data = sql_setting_get_info(&len,&path);
|
||
memcpy(p_save_data,(uint8_t*)(HARDFAULT_INFO_BASE_ADDR+len_conut),len);
|
||
|
||
len_conut += len;
|
||
p_save_data = sql_weather_get_info(&len,&path);
|
||
memcpy(p_save_data,(uint8_t*)(HARDFAULT_INFO_BASE_ADDR+len_conut),len);
|
||
|
||
len_conut += len;
|
||
p_save_data = sql_fit_get_info(&len, &path);
|
||
memcpy(p_save_data,(uint8_t*)(HARDFAULT_INFO_BASE_ADDR+len_conut),len);
|
||
|
||
len_conut += len;
|
||
p_save_data = log_api_get_info(&len,&path);
|
||
memcpy(p_save_data,(uint8_t*)(HARDFAULT_INFO_BASE_ADDR+len_conut),len);
|
||
|
||
// esase current data
|
||
for(uint8_t i = 0; i < HARDFAULT_INFO_DATA_SIZE / MCU_ROM_PAGE_SIZE; i++)
|
||
{
|
||
rom_api_erase(HARDFAULT_INFO_BASE_ADDR + i * MCU_ROM_PAGE_SIZE);
|
||
tjd_sys_smart_delay_ms(10);
|
||
static_print_warn("attention : i = %d , fun: %s ease current back data !!! \n",i,__FUNCTION__);
|
||
}
|
||
#endif
|
||
}
|
||
else
|
||
{
|
||
#if 1
|
||
p_save_data = sql_setting_get_info(&len,&path);
|
||
ret = tjd_fs_api_file_load(path, 0, p_save_data, len);
|
||
static_print_warn("[%s] ret=%d len=%d",path,ret,len);
|
||
|
||
p_save_data = sql_fit_get_info(&len, &path);
|
||
ret = tjd_fs_api_file_load(path, 0, p_save_data, len);
|
||
static_print_warn("[%s] ret=%d len=%d",path,ret,len);
|
||
|
||
p_save_data = sql_weather_get_info(&len,&path);
|
||
ret = tjd_fs_api_file_load(path, 0, p_save_data, len);
|
||
static_print_warn("[%s] ret=%d len=%d",path,ret,len);
|
||
|
||
p_save_data = sql_bt_get_info(&len, &path);
|
||
ret = tjd_fs_api_file_load(path, 0, p_save_data, len);
|
||
static_print_warn("[%s] ret=%d len=%d",path,ret,len);
|
||
|
||
p_save_data = sql_alarm_get_info(&len, &path);
|
||
ret = tjd_fs_api_file_load(path, 0, p_save_data, len);
|
||
static_print_warn("[%s] ret=%d len=%d",path,ret,len);
|
||
#endif
|
||
}
|
||
|
||
sql_setting_init();
|
||
sql_fit_init();
|
||
sql_weather_init();
|
||
sql_bt_init();
|
||
sql_alarm_init();
|
||
sql_message_init();
|
||
//log_api_init();
|
||
|
||
//tjd_sys_restart_data_save();//test
|
||
tjd_fs_api_print_dir_list("/system");
|
||
}
|
||
|
||
void tjd_sys_restart_no_save ( void )
|
||
{
|
||
//am_hal_reset_control(AM_HAL_RESET_CONTROL_SWPOI, 0);
|
||
hal_reboot_chip();
|
||
while(1);
|
||
}
|
||
|
||
void tjd_sys_restart (void* restart_reason)
|
||
{
|
||
#if 1
|
||
int ret;
|
||
uint8_t *p_save_data;
|
||
uint32_t len;
|
||
char* path;
|
||
|
||
tjd_sys_restart_data_save();
|
||
|
||
reset_deal_with_fs();
|
||
//set_cpu_utils_reset_cause(REBOOT_CAUSE_APPLICATION_SYSRESETREQ);
|
||
//tjd_sys_smart_delay_ms(50);
|
||
|
||
tjd_sys_restart_no_save();
|
||
#endif
|
||
}
|
||
|
||
void tjd_sys_restore_factory ( void ) //恢复出厂设置
|
||
{
|
||
#if 0
|
||
//将息屏提到前面运行,解决恢复出厂按钮按下长时间无反应问题
|
||
//rom_api_erase(USER_SYS_PAIR_INFO_BASE_ADDR); //擦除IOS设备配对绑定信息
|
||
|
||
fs_user_factory_reset();
|
||
//重置时间为出厂时间
|
||
rtc_api_set_by_utc_timestamp(VALID_UTC_TIMESTAMP_START);
|
||
tjd_sys_restart_data_save();
|
||
tjd_sys_smart_delay_ms(50);
|
||
tjd_sys_restart_no_save();
|
||
#endif
|
||
}
|
||
|
||
void tjd_sys_shipping_mode ( void )
|
||
{
|
||
#if 0
|
||
int ret;
|
||
uint8_t *p_save_data;
|
||
uint32_t len;
|
||
char* path;
|
||
// SaveSysCache();
|
||
tjd_sys_restart_data_save();
|
||
tjd_sys_smart_delay_ms(50);
|
||
charge_api_enable_ship_mode();
|
||
#endif
|
||
}
|
||
|
||
void tjd_sys_enter_sleep_mode_no_save ( void )
|
||
{
|
||
#if 0
|
||
//不能挂起ancillary任务,需要ancillary任务处理timer任务产生的打点数据
|
||
debug_api_deinit();
|
||
motor_api_stop();
|
||
|
||
charge_enter_sleep_mode();
|
||
|
||
task_alg_sleep();
|
||
task_fit_sleep();
|
||
task_ui_enter_sleep_mode();
|
||
|
||
sys_smart_delay_ms(50);
|
||
BleSleepMode();
|
||
|
||
factory_ate_sleep_mode();
|
||
#endif
|
||
}
|
||
|
||
static void set_system_restart_reg_status ( uint8_t status )
|
||
{
|
||
*((volatile uint32_t *)0x40000010) = status;
|
||
}
|
||
|
||
static void clear_system_restart_reg_status ( void )
|
||
{
|
||
*((volatile uint32_t *)0x40000010) = 0x01;
|
||
}
|
||
|
||
uint32_t tjd_sys_check_restart_reason ( void )
|
||
{
|
||
g_sys_restart_reason = 0X00;
|
||
static_print_warn("check_system_reset_reason:0x%04x, sizeof:%d \r\n", g_sys_restart_reason, sizeof(g_sys_restart_reason));
|
||
return g_sys_restart_reason;
|
||
}
|
||
|
||
uint32_t tjd_sys_restart_get_reason(void)
|
||
{
|
||
return g_sys_restart_reason;
|
||
}
|
||
|
||
void tjd_sys_rtc_por_recover(void)
|
||
{
|
||
#if 0
|
||
if ( tjd_sys_restart_get_reason() & 0x02 ) //bPORStat 硬上电复位标志
|
||
{
|
||
pm_save_t* p_pm_data = sql_setting_get_bat_saved_info();
|
||
if (p_pm_data != NULL)
|
||
{
|
||
rtc_api_set_by_utc_timestamp(p_pm_data->utc_timestamp + 3); //保存的时间与真正断电的时间存在大约3秒的时间差
|
||
// static_print_warn("system power on reset, exist rtc cache: %d \r\n", p_pm_data->utc_timestamp);
|
||
}
|
||
}
|
||
#endif
|
||
}
|
||
|
||
uint8_t tjd_sys_save_data_before_restart ( uint8_t type, void *pdata )
|
||
{
|
||
return RET_SUCCESS;
|
||
}
|
||
|
||
|
||
|