#!/system/bin/sh
# 功能：灭屏+飞行模式下锁定DDR频率，运行stressapptest
 
# ---- 配置变量 ----
DDR_OPP_PATH="/sys/kernel/helio-dvfsrc/dvfsrc_force_vcore_dvfs_opp"  # DDR频率控制路径
DDR_DATA_RATE="/sys/bus/platform/drivers/dramc_drv/dram_data_rate"
DDR_OPP_VALUE="92"                  # 目标DDR频率档位
STRESSAPP_TEST_TIME=600             # stressapptest测试时长（秒）
LOG_FILE="/data/vivo-common/BSPTest/test_file/emi_hang_test.log"   # 日志保存路径
 
# ---- 初始化日志 ----
echo "[$(date +'%Y-%m-%d %T')] 脚本启动" > $LOG_FILE
 
# ---- 函数定义 ----
# 设置飞行模式状态（1开启/0关闭）
set_airplane_mode() {
  local state=$1
  settings put global airplane_mode_on $state
  am broadcast -a android.intent.action.AIRPLANE_MODE --ez state $state > /dev/null 2>&1
  echo "[$(date +'%T')] 飞行模式已为$state" >> $LOG_FILE
}
 
# 强制灭屏
force_screen_off() {
  input keyevent 3
  input keyevent 26
  echo "[$(date +'%T')] 屏幕已关闭" >> $LOG_FILE
}
 
# 锁定DDR频率
lock_ddr_frequency() {
  #先降频依赖模块
  echo 0 5 > /sys/module/mtk_mmdvfs_debug/parameters/force_step
  echo 3 >  /sys/devices/platform/soc/16810000.ufshci/clkscale/clkscale_control
  echo 3 >  /sys/devices/platform/soc/16890000.ufshci/clkscale/clkscale_control
  echo 3 > /sys/module/mtk_hwz/parameters/kick_hwe_gear
  #锁频
  echo $DDR_OPP_VALUE > $DDR_OPP_PATH
  local current_data_rate=$(cat $DDR_DATA_RATE)
  echo "[$(date +'%T')] 当前DDR频率：$current_data_rate" >> $LOG_FILE

}
 
# 运行压力测试
run_stressapptest() {
  echo "[$(date +'%T')] 开始stressapptest（${STRESSAPP_TEST_TIME}秒）..." >> $LOG_FILE
  stressapptest -s $STRESSAPP_TEST_TIME -M 1024 -m 16 >> $LOG_FILE # 512MB内存，8线程，记录警告
  local ret=$?
  echo "[$(date +'%T')] stressapptest退出码：$ret" >> $LOG_FILE
  return $ret
}

#测试完成恢复环境
restore_state() {
  set_airplane_mode 0  # 关闭飞行模式
  input keyevent POWER  # 点亮屏幕
  echo 255 > /sys/kernel/helio-dvfsrc/dvfsrc_force_vcore_dvfs_opp
  echo 0 -1 > /sys/module/mtk_mmdvfs_debug/parameters/force_step
  echo 5 > /sys/devices/platform/soc/16810000.ufshci/clkscale/clkscale_control
  echo 5 > /sys/devices/platform/soc/16890000.ufshci/clkscale/clkscale_control
  echo 99 > /sys/module/mtk_hwz/parameters/kick_hwe_gear
}
 
# ---- 主流程 ----
{
  # 1. 开启飞行模式
  set_airplane_mode 1
  sleep 2  # 等待设置生效
 
  # 2. 强制灭屏
  force_screen_off
  sleep 1  # 确保屏幕完全关闭
 
  # 3. 锁定DDR频率
  lock_ddr_frequency
 
  # 4. 执行压力测试
  run_stressapptest
 
  # 5. 恢复环境
  restore_state
  
} >> $LOG_FILE 2>&1  # 重定向所有输出到日志
 
echo "[$(date +'%T')] 测试完成！日志查看：adb pull $LOG_FILE" >> $LOG_FILE