#assert(getprop("ro.build.product" == "odroidc4"));

show_progress(1.0000, 0);

ui_print("\n\nHardkernel's ODROID-C4 Android Update is started...");
set_progress(0.1000);

ui_print("   Bootloader is flashing...");
package_extract_file("u-boot.bin", "/tmp/u-boot.bin");
run_program("/sbin/dd", "if=/tmp/u-boot.bin", "of=/dev/block/bootloader");

set_progress(0.2000);

ui_print("   'boot' partition is flashing...");
package_extract_file("boot.img", "/tmp/boot.img");
run_program("/sbin/dd", "if=/tmp/boot.img", "of=/dev/block/boot");

set_progress(0.3000);

ui_print("   dtb image is flashing...");
package_extract_file("dtbs.img", "/tmp/dtbs.img");
run_program("/sbin/dd", "if=/tmp/dtbs.img", "of=/dev/block/dtbs");

set_progress(0.4000);

ui_print("   'recovery' partition is flashing...");
package_extract_file("recovery.img", "/tmp/recovery.img");
run_program("/sbin/dd", "if=/tmp/recovery.img", "of=/dev/block/recovery");

set_progress(0.5000);

ui_print("   'vendor' partition is extracting...");
mount("ext4", "EMMC", "/dev/block/vendor", "/vendor");
package_extract_dir("vendor", "/vendor");

ui_print("   update the odm partition...");
mount("vfat", "EMMC", "/dev/block/odm", "/odm");

run_program("/sbin/cp", "/vendor/etc/env.ini.template", "/odm/.env.ini.update");
# parse env values from boot or env ini files and apply it to .env.ini.update
run_program("/sbin/chmod", "755", "/vendor/bin/update_ini.sh");
run_program("/sbin/chown", "root:shell", "/vendor/bin/update_ini.sh");
run_program("/vendor/bin/update_ini.sh", "/odm/boot.ini", "/odm/env.ini", "/odm/.env.ini.update");
run_program("/sbin/mv", "/odm/.env.ini.update", "/odm/env.ini");
run_program("/sbin/cp", "/vendor/etc/boot.ini.template", "/odm/boot.ini");

ui_print("   remove lowmemorykiller config files.");
run_program("/sbin/rm", "-rf", "/vendor/etc/lowmemorykiller*.txt");

set_progress(0.6000);

ui_print("   'system' partition is extracting...");
mount("ext4", "EMMC", "/dev/block/system", "/system");
package_extract_dir("system", "/system");

if
  sha1_check(read_file("/system/etc/g.prop")) != ""
then
  run_program("/sbin/rm", "-rf", "/system/priv-app/PackageInstaller/");
endif;

#afrd
run_program("/sbin/chmod", "755", "/vendor/bin/afrd");
run_program("/sbin/chown", "root:shell", "/vendor/bin/afrd");

set_progress(0.7500);
ui_print("   change permission for fw_setenv, fw_printenv");
run_program("/sbin/chmod", "755", "/system/bin/fw_setenv");
run_program("/sbin/chmod", "755", "/system/bin/fw_printenv");
run_program("/sbin/chmod", "755", "/system/bin/screencontrol");
run_program("/sbin/chown", "root:shell", "/system/bin/screencontrol");
run_program("/sbin/chmod", "751", "/system/xbin/su");

run_program("/system/bin/fw_setenv", "loadaddr", "0x1080000");
run_program("/system/bin/fw_setenv", "cramfsaddr", "0x20000000");
run_program("/system/bin/fw_setenv", "boot_recovery", "hdmitx edid; if test ${hdmimode} = custombuilt; then setenv cmode modeline=${modeline} customwidth=${customwidth} customheight=${customheight}; fi; if test ${hdmimode} == 2160p*; then setenv hdmimode 1080p60hz; fi; setenv bootargs ${initargs} logo=${display_layer},loaded,${fb_addr} vout=${hdmimode},enable hdmimode=${hdmimode} ${cmode} voutmode=${voutmode} cvbsmode=${cvbsmode} osd_reverse=${osd_reverse} video_reverse=${video_reverse} androidboot.selinux=permissive jtag=disable androidboot.hardware=odroidc4 recovery_part=recovery recovery_offset=0; movi read dtbs 0 ${cramfsaddr}; cramfsload ${dtb_mem_addr} meson64_odroidc4_android.dtb;if test ${variant} != c4; then cramfsload ${loadaddr} odroid${variant}-opp.dtbo;fdt addr ${dtb_mem_addr};fdt resize 8192;fdt apply ${loadaddr};fi;movi read recovery 0 ${loadaddr}; booti ${loadaddr} - ${dtb_mem_addr}; bootm ${loadaddr};");
run_program("/system/bin/fw_setenv", "boot_rawimage", "setenv bootargs ${initargs} logo=${display_layer},loaded,${fb_addr} vout=${outputmode},enable cvbsmode=${cvbsmode} hdmimode=${hdmimode} osd_reverse=${osd_reverse} video_reverse=${video_reverse} androidboot.selinux=permissive androidboot.firstboot=${firstboot} jtag=disable androidboot.hardware=odroidc4; movi read dtbs 0 ${cramfsaddr}; cramfsload ${dtb_mem_addr} meson64_odroidc4_android.dtb;if test ${variant} != c4; then cramfsload ${loadaddr} odroid${variant}-opp.dtbo;fdt addr ${dtb_mem_addr};fdt resize 8192;fdt apply ${loadaddr};fi;movi read boot 0 ${loadaddr}; booti ${loadaddr} - ${dtb_mem_addr}; bootm ${loadaddr};");

# odroidthings service
run_program("/sbin/chmod", "755", "/vendor/bin/hw/vendor.hardkernel.hardware.odroidthings@1.0-service");
run_program("/sbin/chown", "root:shell", "/vendor/bin/hw/vendor.hardkernel.hardware.odroidthings@1.0-service");

set_progress(0.800);

ui_print("   'product' partition is extracting...");
mount("ext4", "EMMC", "/dev/block/product", "/product");
package_extract_dir("product", "/product");

set_progress(0.8500);

ui_print("   local_bt_address.txt is copied to FAT partition");
mount("ext4", "EMMC", "/dev/block/vendor", "/vendor");

set_progress(0.9000);

ui_print("Android update is completed.\nHave fun with ODROID-C4!\n\n");
set_progress(1.0000);
