#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.1500);

ui_print("   Bootloader env is Clear...");
run_program("/sbin/dd", "if=/dev/zero", "of=/dev/block/env");

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");
run_program("/sbin/cp", "/vendor/etc/default.prop.ini.template", "/odm/default.prop");
run_program("/sbin/cp", "/vendor/etc/usb_modeswitch.conf.template", "/odm/usb_modeswitch.conf");

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");

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

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");

# 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("   Remove /cache/update.zip");
run_program("/sbin/rm", "-rf", "/cache/update.zip");

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