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

mount("ext4", "EMMC", "/dev/block/system", "/system");

if
  file_getprop("/system/build.prop", "ro.build.version.incremental") == "20191028" || file_getprop("/system/build.prop", "ro.build.version.incremental") == "20191121" || file_getprop("/system/build.prop", "ro.build.version.incremental") == "20191204"
then
  mount("ext4", "EMMC", "/dev/block/vendor", "/vendor");
  ui_print("The firmwares released on 20191028, 20191121, 20191204 were included wrong updater. It will just update OdroidSettings and finish");
  package_extract_file("vendor/app/OdroidSettings/OdroidSettings.apk", "/vendor/app/OdroidSettings/OdroidSettings.apk");
  run_program("/sbin/sed", "-i", "s/^ro.build.version.incremental=.*/ro.build.version.incremental=20191025/g", "/system/build.prop");
  show_progress(1.0000, 0);
else

show_progress(1.0000, 0);

ui_print("\n\nHardkernel's ODROID-N2 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("   'logo' partition is flashing...");
package_extract_file("hardkernel-720.bmp.gz", "/tmp/hardkernel-720.bmp.gz");
run_program("/sbin/dd", "if=/tmp/hardkernel-720.bmp.gz", "of=/dev/block/logo");

set_progress(0.6000);

ui_print("   'vendor' partition is extracting...");
mount("ext4", "EMMC", "/dev/block/vendor", "/vendor");
package_extract_dir("vendor", "/vendor");
run_program("/sbin/ln", "-sf", "/vendor/lib/egl/libGLES_mali.so", "/vendor/lib/hw/vulkan.odroidn2.so");
run_program("/sbin/rm", "-rf", "/vendor/lib/modules/rtl8192c-common.ko");
run_program("/sbin/rm", "-rf", "/vendor/lib/modules/rtl8192cu.ko");
run_program("/sbin/rm", "-rf", "/vendor/lib/modules/rtl_usb.ko");
run_program("/sbin/rm", "-rf", "/vendor/lib/modules/rtlwifi.ko");

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.template", "/odm/default.prop");
run_program("/sbin/cp", "/vendor/etc/usb_modeswitch.conf.template", "/odm/usb_modeswitch.conf");
run_program("/sbin/cp", "/vendor/etc/hardkernel-720.bmp.gz", "/odm/boot-logo.bmp.gz");

#ui_print("   edit /odm/boot.ini...");
#mount("vfat", "EMMC", "/dev/block/odm", "/odm");
#run_program("/sbin/sed", "-i", "86isetenv prevent_sleep \"0\"", "/odm/boot.ini");
#run_program("/sbin/sed", "-i", "s/phy}\ usb/phy}\ prevent_sleep=${prevent_sleep}\ usb/g", "/odm/boot.ini");


ui_print("   change permission for makedefaultprop");
run_program("/sbin/chmod", "755", "/vendor/bin/makedefaultprop");
run_program("/sbin/chown", "root:shell", "/vendor/bin/makedefaultprop");

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

set_progress(0.7000);

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;

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

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

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

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-N2!\n\n");
set_progress(1.0000);

endif;
