@echo off
title=MT798X串口TTL救砖

:comSTART
set /p comPort=请关闭可能占用串口的其他程序，然后输入串口COM号：
if "%comPort%"=="" (
	echo 请重新输入串口COM号。。。
	goto comSTART
)
echo ^>^>^>已输入 串口COM号 %comPort%
echo ==================================

echo 选择mtk_uartboot上传文件的串口波特率：
echo 1. 正常波特率（--brom 921600 --bl2 1500000）
echo 2. 低波特率  （--brom 115200 --bl2 115200）
echo 默认正常波特率即可，如果你的串口承受不了再尝试低波特率。
set /p baudRate=选择波特率（输入序号）：
if "%baudRate%"=="2" (
	set "BromBaudRate=115200"
	set "Bl2BaudRate=115200"
	echo ^>^>^>已选择 低波特率  （--brom 115200 --bl2 115200）
) else (
	set "BromBaudRate=921600"
	set "Bl2BaudRate=1500000"
	echo ^>^>^>已选择 正常波特率（--brom 921600 --bl2 1500000）
)
echo ==================================

rem 设置bl2、fip文件夹路径变量
set "bl2FolderPath=.\mtk_uartboot\bl2-ram-boot"
set "fipFolderPath=.\mtk_uartboot\fip-debrick-only"

setlocal enabledelayedexpansion
set count=0
for /f "tokens=*" %%a in ('dir /b /a-d "%fipFolderPath%" ^| findstr /i "fip"') do (
	set /a count+=1
	echo !count!. %%a
	set "model[!count!]=%%a"
)
if %count% equ 0 (
    echo 请检查.\mtk_uartboot\fip-debrick-only文件夹是否有fip文件！
    goto :end
)
echo 注意：mtk_uartboot文件夹下的bl2、fip只用于救砖，不要用于正常机子
:modelSTART
set /p modelNumber=请输入需要救砖机型的fip序号：

if not defined model[%modelNumber%] (
	echo 无效的机型fip序号，请重新输入。。。
	goto modelSTART
)
set "selectedModel=!model[%modelNumber%]!"
echo ^>^>^>已选择 %selectedModel%

rem 根据fip文件名获取SOC和DDR，以便匹配ram boot bl2
rem 截取文明名前面的mt7981或者mt7986
for /f "tokens=1 delims=_" %%a in ("%selectedModel%") do (
    set "modelSOC=%%a"
)
rem 根据文件名匹配是否是DDR4，不是则默认DDR3
if "%selectedModel:mt7981_cmcc_rax3000m=%" neq "%selectedModel%" (
	set "modelDDR=ddr4"
) else if "%selectedModel:mt7981_cmcc_xr30=%" neq "%selectedModel%" (
	set "modelDDR=ddr4"
) else if "%selectedModel:mt7986_jdcloud_re-cp-03=%" neq "%selectedModel%" (
	set "modelDDR=ddr4"
) else if "%selectedModel:mt7986_glinet_gl-mt6000=%" neq "%selectedModel%" (
	set "modelDDR=ddr4"
) else if "%selectedModel:mt7986_redmi_ax6000=%" neq "%selectedModel%" (
	set "modelDDR=ddr4"
) else if "%selectedModel:mt7986_zyxel_ex5700=%" neq "%selectedModel%" (
	set "modelDDR=ddr4"
) else (
	set "modelDDR=ddr3"
)
echo SoC type: %modelSOC%
echo DDR type: %modelDDR%

set "bl2Path=%bl2FolderPath%\%modelSOC%-%modelDDR%-bl2-ram-boot.bin"
set "fipPath=%fipFolderPath%\%selectedModel%"

echo .\mtk_uartboot\mtk_uartboot.exe -s COM%comPort% -p %bl2Path% -a -f %fipPath% --brom-load-baudrate %BromBaudRate% --bl2-load-baudrate %Bl2BaudRate%
echo ^>^>^>命令已执行，出现Handshake...信息后，请上电启动路由器开始握手
echo 【请阅读下列提示】
echo 1.Uboot会直接进入Web failsafe UI，无需操作
echo 2.不支持DHCP，请设置Web failsafe UI同网段不同主机号的固定IP
echo 3.加载的是临时uboot，需要进入相应页面重新刷写变砖的分区
echo 4.Web failsafe UI启动后可以通过按Ctrl+C回到Uboot控制台
echo 5.如无线的factory分区损坏，需要有线进系统恢复该分区
echo http://192.168.*.1			刷写固件，救砖一般不用
echo http://192.168.*.1/uboot.html		刷写uboot
echo http://192.168.*.1/bl2.html		刷写bl2，注意刷写eMMC的bl2文件不大于1MB
echo http://192.168.*.1/gpt.html		刷写eMMC机型的gpt分区表
echo http://192.168.*.1/simg.html		刷写single image镜像
echo http://192.168.*.1/initramfs.html	刷写内存启动固件initramfs
echo 注意：刷写bl2、gpt、simg不会验证文件，请一定做好原机备份并确认上传文件的有效性，特别是simg！！！
echo 关于single image：
echo SPI-NAND的是从BL2到最后一个分区的合并镜像，只合并到FIP分区也可
echo eMMC的是从gpt到最后一个分区的合并镜像，只合并到fip分区也可，不包含bl2，bl2需要单独刷写
echo 注意：eMMC从gpt到第一个分区间有段空白也要合并在内，请用我教程备份的分区bin文件进行合并
echo ==================================
.\mtk_uartboot\mtk_uartboot.exe -s COM%comPort% -p %bl2Path% -a -f %fipPath% --brom-load-baudrate %BromBaudRate% --bl2-load-baudrate %Bl2BaudRate%

echo .\mtk_uartboot\SimplySerial\ss.exe --com:%comPort% --baud:115200 --quiet
for /l %%i in (1,1,30) do echo.
.\mtk_uartboot\SimplySerial\ss.exe --com:%comPort% --baud:115200 --quiet

:end
endlocal
echo ==================================
echo 按任意键退出
pause >nul