@echo off & setlocal enabledelayedexpansion
for /F "tokens=1,2 delims=#" %%a in ('"prompt #$H#$E# & echo on & for %%b in (1) do rem"') do (
set "DEL=%%a"
)
set FASTBOOT=fastboot
set FIRMWARE_PATH="firmware"
set MARCO_PACKAGE_VARIANT_USERDEBUG=userdebug
@set MARCO_PACKAGE_VARIANT_USER=user
@set MARCO_PACKAGE_VARIANT_ENG=eng
@set EVB_NAME=EV
@set SR_NAME=SR
::=========Additional Override Define For Input Para Use========
@set MARCO_PACKAGE_VARIANT_FACTORY=fac
@set MARCO_PACKAGE_VARIANT_SHIPPING=shipping
@set SKIP_REBOOT=0
::==============GLOBLE DEFINE=========================================
@set PACKAGE_VARIANT=
@set PROJECT=
@set ERASE_DATA_CACHE=
@set DEVICE_SSN=
@set PACKAGE_TARGET_SKU=
@set UPDATE_SCRIPT_NAME=
@set STAGE_ID=
@set PROJECT_VERSION=
@set SKIP_CRC=
:loop_args
@echo off
if "%1" NEQ "" (
if "%1"=="–shipping" (
set PACKAGE_VARIANT=%MARCO_PACKAGE_VARIANT_SHIPPING%
)
if "%1"=="–fac" (
set PACKAGE_VARIANT=%MARCO_PACKAGE_VARIANT_FACTORY%
)
if "%1"=="1" (
set ERASE_DATA_CACHE=1
)
if "%1"=="–skip" (
set SKIP_REBOOT=1
)
if "%1"=="-s" (
if "%2" EQU "" (
call :color_text 0c "-s requires an argument." & echo,
pause
exit 1
)
set DEVICE_SSN=%2
SHIFT
)
if "%1"=="skipcrc" (
set SKIP_CRC=1
)
if "%1"=="skipcrcall" (
set SKIP_CRC=2
)
SHIFT
goto loop_args
) else (
goto setfb
)
:setfb
if "%DEVICE_SSN%" neq "" (
set FASTBOOT=%FASTBOOT% -s %DEVICE_SSN%
)
echo fastboot cmd : %FASTBOOT%
@if "%PACKAGE_VARIANT%"=="%MARCO_PACKAGE_VARIANT_SHIPPING%" (
@echo Cautious, This is shipping flash route
)
@if "%PACKAGE_VARIANT%"=="%MARCO_PACKAGE_VARIANT_FACTORY%" (
@echo Cautious, This is factory flash route
)
%FASTBOOT% getvar project > getprjtemp%DEVICE_SSN%.txt 2>&1
for /f "tokens=2 delims=\:" %%i in ('type getprjtemp%DEVICE_SSN%.txt ^| findstr "project"') do (
set "project=%%i"
)
del getprjtemp%DEVICE_SSN%.txt
if "%project%" equ " DAVINCI" (
call :color_text 0a "Project %project% matching success!" & echo,
)else if "%project%" equ " DAVINCIN" (
call :color_text 0a "Project %project% matching success!" & echo,
)else (
call :color_text 0c "The script can't be used in this devices,project=%project%!" & echo,
pause
exit 1
)
%FASTBOOT% oem get-hwid > gethwtemp%DEVICE_SSN%.txt 2>&1
for /f "tokens=2 delims=\=" %%i in ('type gethwtemp%DEVICE_SSN%.txt ^| findstr "HWID"') do (
set "hwid=%%i"
)
del gethwtemp%DEVICE_SSN%.txt
::add to check 8450/8475
%FASTBOOT% oem get-smid > getsmtemp%DEVICE_SSN%.txt 2>&1
for /f "tokens=2 delims=\=" %%i in ('type getsmtemp%DEVICE_SSN%.txt ^| findstr "SM"') do (
set "smid=%%i"
)
del getsmtemp%DEVICE_SSN%.txt
if "%smid%" equ " 1" (
set FIRMWARE_PATH="firmware"
)else (
if exist ".\firmware_8475" (
set FIRMWARE_PATH="firmware_8475"
)else (
set FIRMWARE_PATH="firmware"
)
)
call :color_text 0a "FIRMWARE_PATH %FIRMWARE_PATH% !" & echo,
:: =================== erase: misc ======================
call :erase_partition misc
if "%ERASE_DATA_CACHE%" equ "1" (
%FASTBOOT% -w
%FASTBOOT% erase asuskey
)
:: ====================== flash: abl ====================
if "%smid%" equ " 1" (
call :flash_image abl_a abl.elf
call :flash_image abl_b abl.elf
)else (
call :flash_image abl_a abl_8475.elf
call :flash_image abl_b abl_8475.elf
)
%FASTBOOT% reboot-bootloader
ping 0.0.0.0 -n 10 > nul
%FASTBOOT% getvar version-bootloader > getvbtemp%DEVICE_SSN%.txt 2>&1
for /f "tokens=4 delims=\-" %%i in ('type getvbtemp%DEVICE_SSN%.txt ^| findstr "userdebug"') do (
set "target_build_variant_userdebug=%%i"
)
for /f "tokens=4 delims=\-" %%i in ('type getvbtemp%DEVICE_SSN%.txt ^| findstr "FTM"') do (
set "target_build_variant_ftm=%%i"
)
for /f "tokens=4 delims=\-" %%i in ('type getvbtemp%DEVICE_SSN%.txt ^| findstr "version-bootloader"') do (
set "build_version=%%i"
)
call :color_text 0a "build version %build_version% !" & echo,
del getvbtemp%DEVICE_SSN%.txt
::add to check change of signed fw in new codebase
:: ==================== flash: aop ======================
call :flash_image aop_a %FIRMWARE_PATH%\aop.mbn
call :flash_image aop_b %FIRMWARE_PATH%\aop.mbn
:: ==================== flash: aop_config ======================
call :flash_image aop_config_a %FIRMWARE_PATH%\aop_devcfg.mbn
call :flash_image aop_config_b %FIRMWARE_PATH%\aop_devcfg.mbn
:: ==================== flash: TZ =======================
call :flash_image tz_a %FIRMWARE_PATH%\tz.mbn
call :flash_image tz_b %FIRMWARE_PATH%\tz.mbn
:: ==================== flash: hyp ======================
call :flash_image hyp_a %FIRMWARE_PATH%\hypvm.mbn
call :flash_image hyp_b %FIRMWARE_PATH%\hypvm.mbn
:: ==================== flash: qupfw ====================
call :flash_image cpucp_a %FIRMWARE_PATH%\cpucp.elf
call :flash_image cpucp_b %FIRMWARE_PATH%\cpucp.elf
:: ============== add for fac flash fail ================
call :flash_image multiimgoem_a %FIRMWARE_PATH%\multi_image.mbn
call :flash_image multiimgoem_b %FIRMWARE_PATH%\multi_image.mbn
:: ==================== partition_0 =====================
%FASTBOOT% flash partition:0 gpt_both0.bin
call :failure_prompt !errorlevel! partition0
:: ==================== partition_1 =====================
%FASTBOOT% flash partition:1 gpt_both1.bin
call :failure_prompt !errorlevel! partition1
:: ==================== partition_2 =====================
%FASTBOOT% flash partition:2 gpt_both2.bin
call :failure_prompt !errorlevel! partition2
:: ==================== partition_3 =====================
%FASTBOOT% flash partition:3 gpt_both3.bin
call :failure_prompt !errorlevel! partition3
:: ==================== partition_4 =====================
%FASTBOOT% flash partition:4 gpt_both4.bin
call :failure_prompt !errorlevel! partition4
:: ==================== partition_5 =====================
%FASTBOOT% flash partition:5 gpt_both5.bin
call :failure_prompt !errorlevel! partition5
:: ==================== partition_6 =====================
%FASTBOOT% flash partition:6 gpt_both6.bin
call :failure_prompt !errorlevel! partition6
:: ================ flash: multiimgoem ==================
call :flash_image multiimgoem_a %FIRMWARE_PATH%\multi_image.mbn
call :flash_image multiimgoem_b %FIRMWARE_PATH%\multi_image.mbn
:: =============== flash: xbl & xbl_config===============
call :flash_image xbl_a %FIRMWARE_PATH%\xbl_s.melf
call :flash_image xbl_config_a %FIRMWARE_PATH%\xbl_config.elf
call :flash_image xbl_b %FIRMWARE_PATH%\xbl_s.melf
call :flash_image xbl_config_b %FIRMWARE_PATH%\xbl_config.elf
call :flash_image xbl_ramdump_a %FIRMWARE_PATH%\XblRamdump.elf
call :flash_image xbl_ramdump_b %FIRMWARE_PATH%\XblRamdump.elf
call :flash_image uefi_a %FIRMWARE_PATH%\uefi.elf
call :flash_image uefi_b %FIRMWARE_PATH%\uefi.elf
:: ==================== flash: shrm =====================
call :flash_image shrm_a %FIRMWARE_PATH%\shrm.elf
call :flash_image shrm_b %FIRMWARE_PATH%\shrm.elf
:: ====================== flash: abl ====================
if "%smid%" equ " 1" (
call :flash_image abl_a abl.elf
call :flash_image abl_b abl.elf
) else (
call :flash_image abl_a abl_8475.elf
call :flash_image abl_b abl_8475.elf
)
if "%build_version%" equ "user" (
%FASTBOOT% oem uart-off
) else (
%FASTBOOT% oem uart-on
)
:: ==================== flash: aop ======================
call :flash_image aop_a %FIRMWARE_PATH%\aop.mbn
call :flash_image aop_b %FIRMWARE_PATH%\aop.mbn
:: ==================== flash: aop_config ======================
call :flash_image aop_config_a %FIRMWARE_PATH%\aop_devcfg.mbn
call :flash_image aop_config_b %FIRMWARE_PATH%\aop_devcfg.mbn
:: ==================== flash: TZ =======================
call :flash_image tz_a %FIRMWARE_PATH%\tz.mbn
call :flash_image tz_b %FIRMWARE_PATH%\tz.mbn
:: ==================== flash: hyp ======================
call :flash_image hyp_a %FIRMWARE_PATH%\hypvm.mbn
call :flash_image hyp_b %FIRMWARE_PATH%\hypvm.mbn
:: ================== flash: Modem ======================
call :flash_image modem_a %FIRMWARE_PATH%\NON-HLOS.bin
call :flash_image modem_b %FIRMWARE_PATH%\NON-HLOS.bin
:: ================ flash: bluetooth ====================
call :flash_image bluetooth_a %FIRMWARE_PATH%\BTFM.bin
call :flash_image bluetooth_b %FIRMWARE_PATH%\BTFM.bin
:: ===================== flash: dsp =====================
call :flash_image dsp_a %FIRMWARE_PATH%\dspso.bin
call :flash_image dsp_b %FIRMWARE_PATH%\dspso.bin
:: ================= flash: keymaster ===================
call :flash_image keymaster_a %FIRMWARE_PATH%\keymint.mbn
call :flash_image keymaster_b %FIRMWARE_PATH%\keymint.mbn
:: =================== flash: rtice =====================
call :flash_image rtice %FIRMWARE_PATH%\rtice.mbn
:: ================== flash: storsec ====================
call :flash_image storsec %FIRMWARE_PATH%\storsec.mbn
:: =================== erase: misc ======================
call :erase_partition misc
:: =================== erase: ssd =======================
::call :erase_partition ssd
:: ================= erase: keystore ====================
::call :erase_partition keystore
:: ================ flash: apdp & spunvm ================
::call :flash_image apdp apdp.mbn
::call :flash_image spunvm %FIRMWARE_PATH%\spunvm.bin
call :flash_image apdp %FIRMWARE_PATH%\DP_dev_dec_full_dump_signed.mbn
call :flash_image apdpb %FIRMWARE_PATH%\DP_dev_dec_full_dump_signed.mbn
:: ================ flash: qweslicstore =================
call :flash_image qweslicstore_a %FIRMWARE_PATH%\qweslicstore.bin
call :flash_image qweslicstore_b %FIRMWARE_PATH%\qweslicstore.bin
:: =================== flash: batinfo====================
::call :flash_image batinfo batinfo.img
:: ===================== flash: ADF =====================
::call :flash_image ADF ADF.img
:: ===================== flash: ADF =====================
::call :flash_image APD APD.img
:: ================== flash: devcfg =====================
call :flash_image devcfg_a %FIRMWARE_PATH%\devcfg.mbn
call :flash_image devcfg_b %FIRMWARE_PATH%\devcfg.mbn
:: ============= flash: cmnlib & cmnlib64 ===============
::call :flash_image cmnlib_a %FIRMWARE_PATH%\cmnlib.mbn
::call :flash_image cmnlib_b %FIRMWARE_PATH%\cmnlib.mbn
::call :flash_image cmnlib64_a %FIRMWARE_PATH%\cmnlib64.mbn
::call :flash_image cmnlib64_b %FIRMWARE_PATH%\cmnlib64.mbn
:: ==================== flash: qupfw ====================
call :flash_image qupfw_a %FIRMWARE_PATH%\qupv3fw.elf
call :flash_image qupfw_b %FIRMWARE_PATH%\qupv3fw.elf
:: ==================== flash: qupfw ====================
call :flash_image cpucp_a %FIRMWARE_PATH%\cpucp.elf
call :flash_image cpucp_b %FIRMWARE_PATH%\cpucp.elf
:: ==================== flash: logfs ====================
call :flash_image logfs %FIRMWARE_PATH%\logfs_ufs_8mb.bin
:: ================= flash: uefisecapp ==================
call :flash_image uefisecapp_a %FIRMWARE_PATH%\uefi_sec.mbn
call :flash_image uefisecapp_b %FIRMWARE_PATH%\uefi_sec.mbn
:: ================ flash: featenabler ==================
call :flash_image featenabler_a %FIRMWARE_PATH%\featenabler.mbn
call :flash_image featenabler_b %FIRMWARE_PATH%\featenabler.mbn
:: =================== flash: imagefv ===================
call :flash_image imagefv_a %FIRMWARE_PATH%\imagefv.elf
call :flash_image imagefv_b %FIRMWARE_PATH%\imagefv.elf
:: ==================== flash: vbmeta ===================
::call :flash_image persist persist.img
:: ===================== flash: ADF =====================
if exist ADF.img (
call :flash_image ADF ADF.img
)
:: ==================== flash: vbmeta ===================
call :flash_image vbmeta_a vbmeta.img
call :flash_image vbmeta_b vbmeta.img
:: =============== flash: vbmeta_system =================
call :flash_image vbmeta_system_a vbmeta_system.img
call :flash_image vbmeta_system_b vbmeta_system.img
:: ==================== flash: Kernel ===================
call :flash_image boot_a boot.img
call :flash_image boot_b boot.img
:: ================== flash: vendor_boot ================
call :flash_image vendor_boot_a vendor_boot.img
call :flash_image vendor_boot_b vendor_boot.img
:: ====================== flash: dtbo ===================
call :flash_image dtbo_a dtbo.img
call :flash_image dtbo_b dtbo.img
:: ==================== flash: asdf======================
call :erase_partition asdf
call :flash_image asdf asdf_384M.img
:: ==================== flash: XROM =====================
call :erase_partition xrom_a
call :erase_partition xrom_b
if exist ASUS-xrom.img (
call :flash_image xrom_a ASUS-xrom.img
call :flash_image xrom_b ASUS-xrom.img
)
:: ================== flash: recovery ===================
if exist recovery.img (
call :flash_image recovery_a recovery.img
call :flash_image recovery_b recovery.img
)
:: ===================== flash: super ===================
call :erase_partition super
call :flash_image super super.img
if %FIRMWARE_PATH% == "firmware" (
set crc_size_txt="crc32_img_size.txt"
set crc_checksum_txt="crc32_checksum.txt"
) else (
set crc_size_txt="crc32_img_size_8475.txt"
set crc_checksum_txt="crc32_checksum_8475.txt"
)
call :Crc32CheckGeneralPartition
:: ================= erase: userdata ====================
if "%ERASE_DATA_CACHE%" equ "1" (
%FASTBOOT% -w
%FASTBOOT% format logbuf
%FASTBOOT% erase asuskey
) else (
echo "don't erase userdate"
)
:: ==================== reset active ====================
:: ====================== finished ======================
echo =======================
echo "Download_PASS"
echo =======================
goto :eof
:Crc32CheckGeneralPartition
echo Crc32 General Check Partitions…
call :Crc32Checksum multiimgoem_a
call :Crc32Checksum multiimgoem_b
call :Crc32Checksum xbl_a
call :Crc32Checksum xbl_config_a
call :Crc32Checksum xbl_b
call :Crc32Checksum xbl_config_b
call :Crc32Checksum xbl_ramdump_a
call :Crc32Checksum xbl_ramdump_b
call :Crc32Checksum uefi_a
call :Crc32Checksum uefi_b
call :Crc32Checksum abl_a
call :Crc32Checksum abl_b
call :Crc32Checksum aop_a
call :Crc32Checksum aop_b
call :Crc32Checksum aop_config_a
call :Crc32Checksum aop_config_b
call :Crc32Checksum tz_a
call :Crc32Checksum tz_b
call :Crc32Checksum hyp_a
call :Crc32Checksum hyp_b
call :Crc32Checksum modem_a
call :Crc32Checksum modem_b
call :Crc32Checksum bluetooth_a
call :Crc32Checksum bluetooth_b
call :Crc32Checksum dsp_a
call :Crc32Checksum dsp_b
call :Crc32Checksum keymaster_a
call :Crc32Checksum keymaster_b
call :Crc32Checksum rtice
call :Crc32Checksum storsec
call :Crc32Checksum shrm_a
call :Crc32Checksum shrm_b
call :Crc32Checksum asdf
call :Crc32Checksum devcfg_a
call :Crc32Checksum devcfg_b
call :Crc32Checksum qupfw_a
call :Crc32Checksum qupfw_b
call :Crc32Checksum cpucp_a
call :Crc32Checksum cpucp_b
call :Crc32Checksum logfs
call :Crc32Checksum uefisecapp_a
call :Crc32Checksum uefisecapp_b
call :Crc32Checksum featenabler_a
call :Crc32Checksum featenabler_b
call :Crc32Checksum qweslicstore_a
call :Crc32Checksum qweslicstore_b
call :Crc32Checksum imagefv_a
call :Crc32Checksum imagefv_b
call :Crc32Checksum ADF
call :Crc32Checksum vbmeta_a
call :Crc32Checksum vbmeta_b
call :Crc32Checksum vbmeta_system_a
call :Crc32Checksum vbmeta_system_b
call :Crc32Checksum boot_a
call :Crc32Checksum boot_b
call :Crc32Checksum vendor_boot_a
call :Crc32Checksum vendor_boot_b
call :Crc32Checksum dtbo_a
call :Crc32Checksum dtbo_b
call :Crc32Checksum recovery_a
call :Crc32Checksum recovery_b
if "x%SKIP_CRC%" equ "x1" (
call :color_text 0a "Crc32Check General Partitions Pass" & echo,
goto :eof
) else (
call :Crc32Checksum super
call :color_text 0a "Crc32Check General Partitions Pass" & echo,
goto :eof
)
:Crc32Checksum
set patition_name=%~1
set patition_name_in_crc32file=%patition_name%
for /f %%a in ('grep.exe -w %patition_name_in_crc32file% %crc_size_txt%') do (
set file_size=%%a
)
for /f "tokens=1" %%i in ('grep.exe -w %patition_name_in_crc32file% %crc_checksum_txt%') do (
set img_crc32_val=%%i
)
%FASTBOOT% oem hashsize_%file_size% > nul 2>&1
for /f "tokens=2" %%a in ('%FASTBOOT% oem crc32check_%patition_name% 2^>^&1 ^| findstr bootloader') do (
set pt_crc32_val=%%a
)
if /i "%pt_crc32_val%" neq "%img_crc32_val%" (
call :color_text 0c "pt_crc32_val = %pt_crc32_val% img_crc32_val = %img_crc32_val%" & echo,
call :color_text 0c "Crc32Check partition %1 fail = different" & echo,
pause
) else (
call :color_text 0a "%patition_name% crc32 check succeed!" & echo,
)
goto :eof
:failure_prompt
if "x%1" neq "x0" (
call :color_text 0c "%2 flash failed,press any key to exit the script! " & echo,
pause
exit 1
) else (
call :color_text 0a "%2 flash succeed!" & echo,
)
goto :eof
:flash_image
echo "Start Flash %1"
%FASTBOOT% flash -S 300M %1 %2
call :failure_prompt !errorlevel! %1
goto :eof
:erase_partition
echo "Start erase %1"
%FASTBOOT% erase %1
call :failure_prompt !errorlevel! %1
goto :eof
:color_text
::echo off
<nul set /p ".=%DEL%" > "%~2%DEVICE_SSN%"
findstr /v /a:%1 /R "^$" "%~2%DEVICE_SSN%" nul
del "%~2%DEVICE_SSN%" > nul 2>&1
goto :eof