From 6a46aadeb570033313cc0097013c3778435a09cb Mon Sep 17 00:00:00 2001 From: Alexey 'Cluster' Avdyukhin Date: Sat, 9 Dec 2017 19:03:48 +0300 Subject: Sync to madmonkey's hakchi --- mods/mod_hakchi/hakchi/config | 1 + mods/mod_hakchi/hakchi/init | 58 ++++--- mods/mod_hakchi/hakchi/rootfs/bin/chmenu | 4 +- .../hakchi/rootfs/bin/clover-canoe-shvc-wr | 11 +- .../hakchi/rootfs/bin/clover-kachikachi-wr | 16 +- mods/mod_hakchi/hakchi/rootfs/bin/hsqs | 3 +- mods/mod_hakchi/hakchi/rootfs/bin/remote-exec | 22 ++- mods/mod_hakchi/hakchi/rootfs/etc/hakchi.png | Bin 0 -> 4620 bytes mods/mod_hakchi/hakchi/rootfs/etc/init.d/S78clvcon | 4 +- .../hakchi/rootfs/etc/init.d/S82remote-exec | 4 +- mods/mod_hakchi/hakchi/rootfs/etc/inittab | 1 + mods/mod_hakchi/hakchi/rootfs/etc/preinit | 12 +- .../hakchi/rootfs/etc/preinit.d/b0000_defines | 20 --- .../hakchi/rootfs/etc/preinit.d/b0010_functions | 185 ++++++++++++++++----- .../hakchi/rootfs/etc/preinit.d/b0040_usb | 58 +++++++ .../hakchi/rootfs/etc/preinit.d/p0000_config | 4 + .../hakchi/rootfs/etc/preinit.d/p7000_preinit | 6 +- .../hakchi/rootfs/etc/preinit.d/p7010_bootlogo | 1 + .../hakchi/rootfs/etc/preinit.d/p7020_usb | 1 + .../hakchi/rootfs/etc/preinit.d/p7070_firmware | 9 +- .../hakchi/rootfs/etc/preinit.d/p7080_hmods | 2 + .../hakchi/rootfs/etc/preinit.d/pffff_config | 2 +- mods/mod_hakchi/hakchi/script/install | 22 ++- mods/mod_hakchi/hakchi/script/reflash | 26 +-- mods/mod_hakchi/hakchi/script/transfer | 4 +- mods/mod_hakchi/sbin/init | 2 +- 26 files changed, 329 insertions(+), 149 deletions(-) create mode 100644 mods/mod_hakchi/hakchi/rootfs/etc/hakchi.png create mode 100644 mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/b0040_usb create mode 100644 mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p0000_config create mode 100644 mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p7010_bootlogo create mode 100644 mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p7020_usb (limited to 'mods') diff --git a/mods/mod_hakchi/hakchi/config b/mods/mod_hakchi/hakchi/config index 4efc5ca1..6e90132e 100644 --- a/mods/mod_hakchi/hakchi/config +++ b/mods/mod_hakchi/hakchi/config @@ -2,3 +2,4 @@ local cf_backup_dummy='n' local cf_backup='n' local cf_backup_nandc='n' local cf_shutdown='n' +local cf_usb='y' diff --git a/mods/mod_hakchi/hakchi/init b/mods/mod_hakchi/hakchi/init index cd1ab8d2..50fc66a4 100644 --- a/mods/mod_hakchi/hakchi/init +++ b/mods/mod_hakchi/hakchi/init @@ -1,38 +1,36 @@ -init(){ -echo -/bin/busybox --install -s /bin/ +#!/bin/sh -local modname="hakchi" -local modpath="/$modname" -local mountpoint="/newroot" -local installpath="" -local firmwarepath="" -local rootfs="" -local squashfs="" -local preinit="" -local preinitpath="" -local sftype="" -local sfregion="" -local gamepath="" -local temppath="/tmp" +init(){ + echo + export modname="hakchi" + export modpath="/$modname" + export mountpoint="/newroot" + export temppath="/tmp" -mkdir -p "$temppath" + /bin/busybox --install -s /bin/ + mkdir -p "$temppath" + for dir in etc lib usr; do + [ -e "/$dir" ] || ln -s "$mountpoint/$dir" "/$dir" + done + export PATH="/sbin:$modpath/rootfs/bin:/bin:$mountpoint/sbin:/usr/sbin:$mountpoint/bin:/usr/bin" -source "$modpath/config" -source "$modpath/script/base" + source "$modpath/config" + source "$modpath/script/base" -if [ -d "$modpath/transfer" ]; then - source "$modpath/script/transfer" -else - mount_base -fi + if [ -d "$modpath/transfer" ]; then + export cf_usb='n' + source "$modpath/script/transfer" + else + mount_base + fi -if [ -f "$preinit" ]; then - source "$preinit" - preinit -else - umount_base -fi + if [ -f "$preinit" ]; then + PATH="$rootfs/sbin:$rootfs/usr/sbin:$rootfs/bin:$rootfs/usr/bin:$PATH" + "$rootfs/bin/busybox" sh -c "source "$preinit.d/b0000_defines" && source "$preinit" && preinit" + else + umount_base + fi } init +echo diff --git a/mods/mod_hakchi/hakchi/rootfs/bin/chmenu b/mods/mod_hakchi/hakchi/rootfs/bin/chmenu index 8d0a6fdd..3ad32b84 100755 --- a/mods/mod_hakchi/hakchi/rootfs/bin/chmenu +++ b/mods/mod_hakchi/hakchi/rootfs/bin/chmenu @@ -31,5 +31,5 @@ fi uistop overmount_games - -touch "/var/startmpc.flag" +sleep 1 +touch "/var/startmcp.flag" diff --git a/mods/mod_hakchi/hakchi/rootfs/bin/clover-canoe-shvc-wr b/mods/mod_hakchi/hakchi/rootfs/bin/clover-canoe-shvc-wr index c7cfb5b7..b3b2bc0f 100755 --- a/mods/mod_hakchi/hakchi/rootfs/bin/clover-canoe-shvc-wr +++ b/mods/mod_hakchi/hakchi/rootfs/bin/clover-canoe-shvc-wr @@ -20,10 +20,9 @@ while [ $# -gt 0 ] ; do mkdir -p "$tmppath" cd "$tmppath" tiny7zx x "$filename" - filename="$tmppath/$(ls)" - filename_str=${filename// /_} - mv "$filename" "$filename_str" - filename=$filename_str + filename="$(ls|head -n1)" + mv "$filename" "rom.${filename##*.}" + filename="$tmppath/rom.${filename##*.}" fi options="-rom $filename" shift @@ -34,4 +33,6 @@ while [ $# -gt 0 ] ; do done args="$options $cfg_snes_extra_args" -exec /usr/bin/clover-canoe-shvc $args + +[ -f "/bin/clover-canoe-shvc" ] && exec /bin/clover-canoe-shvc $args +[ -f "/usr/bin/clover-canoe-shvc" ] && exec /usr/bin/clover-canoe-shvc $args diff --git a/mods/mod_hakchi/hakchi/rootfs/bin/clover-kachikachi-wr b/mods/mod_hakchi/hakchi/rootfs/bin/clover-kachikachi-wr index 6316ddf4..0da3c122 100755 --- a/mods/mod_hakchi/hakchi/rootfs/bin/clover-kachikachi-wr +++ b/mods/mod_hakchi/hakchi/rootfs/bin/clover-kachikachi-wr @@ -16,20 +16,22 @@ if [ "$extension" == "7z" ]; then mkdir -p "$tmppath" cd "$tmppath" tiny7zx x "$filename" - filename="$tmppath/$(ls)" - filename_str=${filename// /_} - mv "$filename" "$filename_str" - filename=$filename_str + filename="$(ls|head -n1)" + mv "$filename" "rom.${filename##*.}" + filename="$tmppath/rom.${filename##*.}" fi if [ "$extension" == "gz" ]; then rm -rf "$tmppath" mkdir -p "$tmppath" - gunzip -c > "$tmppath/$filebase" - filename="$tmppath/$filebase" + filebase="$(basename "$filebase" ".gz")" + extension="${filebase##*.}" + filename="$tmppath/rom.$extension" + gunzip -c > "$filename" fi shift args="$filename $@ $cfg_nes_extra_args" [ "$cfg_disable_armet" == "y" ] && args="$(echo $args | sed 's/--enable-armet//g')" -exec /usr/bin/clover-kachikachi $args +[ -f "/bin/clover-kachikachi" ] && exec /bin/clover-kachikachi $args +[ -f "/usr/bin/clover-kachikachi" ] && exec /usr/bin/clover-kachikachi $args diff --git a/mods/mod_hakchi/hakchi/rootfs/bin/hsqs b/mods/mod_hakchi/hakchi/rootfs/bin/hsqs index 0b1d9d2d..800c4567 100755 --- a/mods/mod_hakchi/hakchi/rootfs/bin/hsqs +++ b/mods/mod_hakchi/hakchi/rootfs/bin/hsqs @@ -7,7 +7,8 @@ printSoftwareInfo firmware="$1" if [ "$firmware" != "_nand_" ]; then - firmware="$(readlink -f "$1")" + firmware="$(echo "$firmware" | sed -re 's/^\/usr\/share\/games\/(nes\/kachikachi\/)?/\/var\/games\//')" + firmware="$(readlink -f "$firmware")" checkFirmware "$firmware" || exit 1 fi diff --git a/mods/mod_hakchi/hakchi/rootfs/bin/remote-exec b/mods/mod_hakchi/hakchi/rootfs/bin/remote-exec index 32977e64..a7e62442 100755 --- a/mods/mod_hakchi/hakchi/rootfs/bin/remote-exec +++ b/mods/mod_hakchi/hakchi/rootfs/bin/remote-exec @@ -1,16 +1,20 @@ #!/bin/sh -mpc_flag="/var/startmpc.flag" + +mcp_flag="/var/startmcp.flag" +mcp_flag_compat="/var/startmpc.flag" exec_flag="/var/exec.flag" -while [ true ]; do - if [ -f "$mpc_flag" ]; then - echo Restart! - rm "$mpc_flag" - /etc/init.d/S81clover-mcp start + +while true; do + if [ -f "$mcp_flag" ] || [ -f "$mcp_flag_compat" ]; then + echo "Restart!" + uistart + usleep 100000 + rm -f "$mcp_flag" "$mcp_flag_compat" fi if [ -f "$exec_flag" ]; then - cmd="$(cat "$exec_flag")" - rm "$exec_flag" - $cmd + usleep 100000 + source "$exec_flag" + rm -f "$exec_flag" fi usleep 200000 done diff --git a/mods/mod_hakchi/hakchi/rootfs/etc/hakchi.png b/mods/mod_hakchi/hakchi/rootfs/etc/hakchi.png new file mode 100644 index 00000000..f18bc87f Binary files /dev/null and b/mods/mod_hakchi/hakchi/rootfs/etc/hakchi.png differ diff --git a/mods/mod_hakchi/hakchi/rootfs/etc/init.d/S78clvcon b/mods/mod_hakchi/hakchi/rootfs/etc/init.d/S78clvcon index 9b47abc4..355fc01a 100755 --- a/mods/mod_hakchi/hakchi/rootfs/etc/init.d/S78clvcon +++ b/mods/mod_hakchi/hakchi/rootfs/etc/init.d/S78clvcon @@ -1,6 +1,6 @@ #!/bin/sh -CLV_BOARD_NAME=$(cat /etc/clover/boardtype) +CLV_BOARD_NAME="$(cat "/etc/clover/boardtype")" MODULE="clvcon" [ -f "/lib/modules/$(uname -r)/extra/$MODULE.ko" ] || MODULE="clovercon" @@ -21,7 +21,7 @@ start() MODULE_PARAMS="1,-1,2,-1" ;; esac - modprobe "$MODULE" module_params=$MODULE_PARAMS + modprobe "$MODULE" "module_params=$MODULE_PARAMS" } stop() diff --git a/mods/mod_hakchi/hakchi/rootfs/etc/init.d/S82remote-exec b/mods/mod_hakchi/hakchi/rootfs/etc/init.d/S82remote-exec index 65395aaa..ab8cef16 100755 --- a/mods/mod_hakchi/hakchi/rootfs/etc/init.d/S82remote-exec +++ b/mods/mod_hakchi/hakchi/rootfs/etc/init.d/S82remote-exec @@ -1,7 +1,7 @@ -#!/bin/sh -e +#!/bin/sh start() { - remote-exec & + nice remote-exec & } stop() { diff --git a/mods/mod_hakchi/hakchi/rootfs/etc/inittab b/mods/mod_hakchi/hakchi/rootfs/etc/inittab index ee87e540..1de7da21 100644 --- a/mods/mod_hakchi/hakchi/rootfs/etc/inittab +++ b/mods/mod_hakchi/hakchi/rootfs/etc/inittab @@ -1,4 +1,5 @@ null::sysinit:/bin/mount -t proc proc /proc +null::sysinit:/bin/mount -t usbfs none /proc/bus/usb null::sysinit:/bin/mkdir -p /dev/pts /dev/shm null::sysinit:/bin/mount -a null::sysinit:/bin/mkdir -p /var/cache /var/lock /var/log /var/spool diff --git a/mods/mod_hakchi/hakchi/rootfs/etc/preinit b/mods/mod_hakchi/hakchi/rootfs/etc/preinit index 1a4eab63..731ab4a8 100644 --- a/mods/mod_hakchi/hakchi/rootfs/etc/preinit +++ b/mods/mod_hakchi/hakchi/rootfs/etc/preinit @@ -24,8 +24,8 @@ source_base(){ source_parts "$1/b????_*" return 0 fi - if [ -d "$preinitpath" ]; then - source_parts "$preinitpath/b????_*" + if [ -d "$preinit.d" ]; then + source_parts "$preinit.d/b????_*" return 0 fi if [ -d "$rootfs/etc/preinit.d" ]; then @@ -40,20 +40,20 @@ source_base(){ } source_config(){ - [ -f "$preinitpath/p0000_config" ] && source "$preinitpath/p0000_config" + [ -f "$preinit.d/p0000_config" ] && source "$preinit.d/p0000_config" } save_config(){ - [ -f "$preinitpath/pffff_config" ] && source "$preinitpath/pffff_config" + [ -f "$preinit.d/pffff_config" ] && source "$preinit.d/pffff_config" } script_init(){ source_base source_config + softwareCheck } preinit(){ - [ -z "$gamepath" ] && [ -d "/newroot" ] && /bin/busybox --install -s /bin/ && cp -a "$rootfs/bin/rsync" /bin/ source_base - source_parts "$preinitpath/p????_*" + source_parts "$preinit.d/p????_*" } diff --git a/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/b0000_defines b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/b0000_defines index 3aeee77c..684054df 100644 --- a/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/b0000_defines +++ b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/b0000_defines @@ -1,21 +1,3 @@ -setGamepath(){ - sftype="nes" - sfregion="usa" - [ "$(cat "$mountpoint/etc/clover/boardtype")" == "dp-shvc" ] && sftype="snes" - [ "$(cat "$mountpoint/etc/clover/REGION")" == "JPN" ] && sfregion="jpn" - - local feck="$mountpoint/var/lib/clover/profiles/0/home-menu/save/system-save.json" - if [ "$sftype" == "snes" ]; then - gamepath="/usr/share/games" - [ -f "$feck" ] && mv -f "$feck" "$feck.nes" - [ -d "$feck.snes" ] && rm -rf "$feck" && mv "$feck.snes" "$feck" - else - gamepath="/usr/share/games/nes/kachikachi" - [ -d "$feck" ] && rm -rf "$feck.snes" && mv "$feck" "$feck.snes" - [ -f "$feck.nes" ] && mv -f "$feck.nes" "$feck" - fi -} - modname="hakchi" modpath="/$modname" #mountpoint="/newroot" @@ -29,5 +11,3 @@ sftype="" sfregion="" gamepath="" temppath="/tmp" - -setGamepath diff --git a/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/b0010_functions b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/b0010_functions index ff726747..7ec99650 100644 --- a/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/b0010_functions +++ b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/b0010_functions @@ -37,37 +37,57 @@ remove_old(){ } mod_repair_etc(){ + [ -d "$rootfs" ] || return 0 remove_old "$rootfs" - rm -f "$modpath/rootfs/etc/preinit.d/p0000_config" - chown -R 0:0 "$modpath/" local etc="$temppath/etc" rm -rf "$etc" mkdir -p "$etc" copy "$mountpoint/etc/" "$etc/" if [ "$1" == "full" ]; then + rm -f "$modpath/rootfs/etc/preinit.d/p0000_config" copy "$modpath/rootfs/etc/" "$etc/" else copy "$rootfs/etc/inittab" "$etc/inittab" fi copy "$etc/" "$rootfs/etc/" + rm -rf "$etc" } mod_repair_modules(){ - restore "/lib/modules/$(uname -r)/" + [ -d "$mountpoint/lib/modules/$(uname -r)" ] && restore "/lib/modules/$(uname -r)/" +} + +mount_move(){ + local tmpmount="/$2" + if [ "$1" == "l" ]; then + mountpoint -q "$mountpoint$tmpmount" || return 1 + mkdir -p "$tmpmount" + mount --move "$mountpoint$tmpmount" "$tmpmount" + else + mountpoint -q "$tmpmount" || return 1 + mount --move "$tmpmount" "$mountpoint$tmpmount" + rmdir --ignore-fail-on-non-empty "$tmpmount" + fi } remount_root(){ - local tmpmount="/var" - mkdir -p "$tmpmount" - mount --move "$mountpoint/var" "$tmpmount" + mount_move l media + mount_move l var umount "$mountpoint" + local loopfile="/var${1##$mountpoint/var}" + [ -f "$loopfile" ] || loopfile="/media${1##$mountpoint/media}" + if ! mount -o loop,ro,noatime "$loopfile" "$mountpoint"; then + local preinitf="/${preinit##$mountpoint/}" + local preinit="$preinitf" + cfg_firmware="_nand_" + save_config + shutdown + fi - local loopfile="$tmpmount${1##$mountpoint/var}" - mount -o loop,ro,noatime "$loopfile" "$mountpoint" || shutdown - - mount --move "$tmpmount" "$mountpoint/var" + mount_move r var + mount_move r media } checkFirmware(){ @@ -82,18 +102,19 @@ currentFirmware(){ echo "$firmware" return 0 fi - if [ -b /dev/mapper/root-crypt ]; then + if [ -b "/dev/mapper/root-crypt" ]; then echo "_nand_" return 0 fi return 1 } -load_firmware(){ +loadFirmware(){ [ -z "$(mount | grep -F loop0)" ] || return 1 local firmware="$mountpoint$cfg_firmware" if ! checkFirmware "$firmware"; then + [ "$cfg_firmware" == "auto" ] || return 0 [ -d "$firmwarepath" ] || return 0 firmware="$(find "$firmwarepath" -type f -name "*.hsqs" | sort | head -n 1)" fi @@ -114,8 +135,7 @@ load_firmware(){ } shutdown(){ - echo "shutting down..." - echo + echo "The system is going down NOW!" sync umount -a -r 2>/dev/null poweroff -f @@ -123,8 +143,7 @@ shutdown(){ } reboot(){ - echo "rebooting..." - echo + echo "Restarting system." sync umount -a -r 2>/dev/null /bin/reboot -f @@ -185,48 +204,121 @@ containsGames(){ return 0 } +linkGames(){ + local games="$mountpoint/media/$modname/games${1##$rootfs$gamepath}" + [ -d "$games" ] || games="$installpath/games${1##$rootfs$gamepath}" + [ -d "$games" ] || games="$1" + games="${games##$mountpoint}" + rm -f "$mountpoint/var/games" + ln -s "$games" "$mountpoint/var/games" + return 0 +} + +softwareCheck(){ + sftype="nes" + sfregion="usa" + [ "$(cat "$mountpoint/etc/clover/boardtype")" == "dp-shvc" ] && sftype="snes" + [ "$(cat "$mountpoint/etc/clover/REGION")" == "JPN" ] && sfregion="jpn" + [ "$(cat "$mountpoint/etc/clover/REGION")" == "EUR" ] && sfregion="eur" + + local feck="$mountpoint/var/lib/clover/profiles/0/home-menu/save/system-save.json" + if [ "$sftype" == "snes" ]; then + gamepath="/usr/share/games" + [ -f "$feck" ] && mv -f "$feck" "$feck.nes" + [ -d "$feck.snes" ] && rm -rf "$feck" && mv "$feck.snes" "$feck" + else + gamepath="/usr/share/games/nes/kachikachi" + [ -d "$feck" ] && rm -rf "$feck.snes" && mv "$feck" "$feck.snes" + [ -f "$feck.nes" ] && mv -f "$feck.nes" "$feck" + fi + + rm -f "$mountpoint/var/saves" + ln -s "/var/lib/clover/profiles/0" "$mountpoint/var/saves" +} + +repair_fonts(){ + if [ "$sftype" == "nes" ]; then + mkdir -p "$1" || return 1 + [ ! -f "$1/title.fnt" ] && (cp $rootfs$gamepath/title.fnt "$1" || cp $squashfs$gamepath/title.fnt "$1") + [ ! -f "$1/copyright.fnt" ] && (cp $rootfs$gamepath/copyright.fnt "$1" || cp $squashfs$gamepath/copyright.fnt "$1") + fi +} + +repair_games(){ + [ -w "$1" ] || return 0 + local usesymlink='' + ln -s / "$1/symlinktest" && rm "$1/symlinktest" && usesymlink='y' + + ls -1 "$squashfs$gamepath" | grep CLV- | while read code + do + local gamedir="$1/$code" + local squashgamedir="$squashfs$gamepath/$code" + + [ -d "$gamedir" ] || continue + + if [ ! -f "$gamedir/$code.desktop" ]; then + cp "$squashgamedir/$code.desktop" "$gamedir/" + [ "$sftype" == "nes" ] && \ + sed -i -e 's#/usr/bin/clover-kachikachi#/bin/clover-kachikachi-wr#g' "$gamedir/$code.desktop" + [ "$sftype" == "snes" ] && \ + sed -i -e 's#/usr/bin/clover-canoe-shvc#/bin/clover-canoe-shvc-wr#g' "$gamedir/$code.desktop" + fi + + [ -d "$gamedir/autoplay/" ] && ([ "$(ls -A "$gamedir/autoplay/")" ] || rm -r "$gamedir/autoplay/") + [ -d "$gamedir/pixelart/" ] && ([ "$(ls -A "$gamedir/pixelart/")" ] || rm -r "$gamedir/pixelart/") + + find "$squashgamedir" -maxdepth 1 | sed -n '1!p' | while read squashfile + do + if [ "$usesymlink" == "y" ]; then + ln -s "${squashfile##$mountpoint}" "$gamedir/" > /dev/null 2>&1 + else + rsync -a --ignore-existing "$squashfile" "$gamedir/" > /dev/null 2>&1 + fi + done + done + sync + return 0 +} + overmount_games(){ local menu_code="000" [ -f "$installpath/menu" ] && menu_code="$(cat "$installpath/menu")" - [ -z "$menu_code" ] && menu_code="000" + containsGames "$rootfs$gamepath/$menu_code" || menu_code="" echo "menu code: $menu_code" - if [ "$menu_code" != "000" ]; then - if containsGames "$rootfs$gamepath/$menu_code"; then - overmount "$gamepath/$menu_code" "$gamepath" && return 0 - else - echo "no romz found at: $rootfs$gamepath/$menu_code" - fi - fi - if containsGames "$rootfs$gamepath"; then - overmount "$gamepath" && return 0 + if containsGames "$rootfs$gamepath/$menu_code"; then + overmount "$gamepath/$menu_code" "$gamepath" && repair_games "$rootfs$gamepath/$menu_code" && linkGames "$rootfs$gamepath/$menu_code" && return 0 + else + echo "no romz found at: $rootfs$gamepath/$menu_code" fi - echo "no romz found at: $rootfs$gamepath" + linkGames "$gamepath" return 1 } +uilist(){ + lsof -n | grep -F "/dev/fb0" | awk '{print $1}' | sort -u +} + +uikill(){ + [ -z "$1" ] && return 1 + uilist | xargs -r kill -s "$1" +} + uistop(){ - killall -9 clover-mcp - killall -9 ReedPlayer-Clover - killall kachikachi - killall canoe-shvc - killall retroarch + killall -s KILL clover-mcp 1>/dev/null 2>&1 + uikill TERM } uistart(){ - uistop 1>/dev/null 2>&1 - /etc/init.d/S81clover-mcp start + uistop + sh "/etc/init.d/S81clover-mcp" start } uipause(){ - lsof -n | grep /dev/fb0 | awk '{ print $1 }' | while read pid; do - kill -s SIGSTOP $pid - done + uikill STOP } uiresume(){ - lsof -n | grep /dev/fb0 | awk '{ print $1 }' | while read pid; do - kill -s SIGCONT $pid - done + uikill CONT } gameover(){ @@ -237,3 +329,16 @@ printSoftwareInfo(){ echo "software=$sftype" echo "region=$sfregion" } + +showImage(){ + image="$(eval echo "$1")" + [ -f "$image" ] || image="$rootfs$1" + [ -f "$image" ] || image="$squashfs$1" + [ -f "$image" ] || return 1 + decodepng "$image" > "/dev/fb0" & + return 0 +} + +hwmon(){ + cat "/sys/devices/virtual/hwmon/hwmon1/temp1_input" +} diff --git a/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/b0040_usb b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/b0040_usb new file mode 100644 index 00000000..06d7f798 --- /dev/null +++ b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/b0040_usb @@ -0,0 +1,58 @@ +checkUsbStorage(){ + local trigger="/sys/bus/platform/devices/sunxi_hcd_host0/otg_ed_test" + local disk="/dev/sda1" + + if [ -f "$trigger" ]; then + echo "1" > "$trigger" + local timeout=5 + while [ $timeout -gt 0 ] && ! [ -b "$disk" ]; do + echo "waiting for media $timeout" + let timeout=timeout-1 + sleep 1 + done + fi + + [ -b "$disk" ] || return 1 + + local ro="defaults,nosuid,nodev,noatime,ro" + local rw="defaults,nosuid,nodev,noatime,rw" + mount -o $ro "$disk" "$mountpoint/media" || return 1 + + local saves="$modname/saves" + + if [ -d "$mountpoint/media/$saves" ] || [ -d "$mountpoint/media/$modname/transfer" ] || [ "$cfg_usb_rw" == "y" ]; then + mount -o remount,$rw "$disk" + fi + [ -d "$mountpoint/media/$saves" ] && mount_bind "$mountpoint/media/$saves" "$mountpoint/var/lib/clover/profiles/0" + + local bootlogo0="boot.png" + local bootlogo1="$mountpoint/media/$modname/$bootlogo0" + local bootlogo2="$rootfs/etc/$bootlogo0" + if [ -f "$bootlogo1" ]; then + rsync -ac "$bootlogo1" "$bootlogo2" + showImage "$bootlogo2" + cfg_boot_logo='' + else + [ -f "$bootlogo2" ] && rm "$bootlogo2" && source "$preinit.d/p7010_bootlogo" + fi + + return 0 +} + +checkUsbGamepath(){ + local disk="/dev/sda1" + [ -b "$disk" ] || return 1 + + local games="$modname/games" + if containsGames "$mountpoint/media/$games"; then + if ! mkdir -p "$rootfs$gamepath"; then + rm -rf "$rootfs$gamepath" + mkdir -p "$rootfs$gamepath" || return 1 + fi + mount_bind "$mountpoint/media/$games" "$rootfs$gamepath" + return 0 + else + echo "no romz found at: $disk:/$games" + return 1 + fi +} diff --git a/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p0000_config b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p0000_config new file mode 100644 index 00000000..2130e4ea --- /dev/null +++ b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p0000_config @@ -0,0 +1,4 @@ +cfg_boot_stock='n' +cfg_disable_armet='y' +cfg_firmware='auto' +cfg_nes_extra_args='--ppu-palette 2' diff --git a/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p7000_preinit b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p7000_preinit index 18d36b22..ed85bfd2 100644 --- a/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p7000_preinit +++ b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p7000_preinit @@ -1,9 +1,9 @@ if [ "$cfg_boot_stock" == "y" ]; then # load firmware if needed/present - source_parts "$preinitpath/p????_*firmware*" + source_parts "$preinit.d/p????_*firmware*" # stop loading umount_base 2>/dev/null return 0 -else - echo "loading $modname" fi + +echo "loading $modname" diff --git a/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p7010_bootlogo b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p7010_bootlogo new file mode 100644 index 00000000..9675ad27 --- /dev/null +++ b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p7010_bootlogo @@ -0,0 +1 @@ +showImage "$cfg_boot_logo" || showImage "$rootfs/etc/boot.png" || showImage "$rootfs/etc/$modname.png" diff --git a/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p7020_usb b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p7020_usb new file mode 100644 index 00000000..5026a862 --- /dev/null +++ b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p7020_usb @@ -0,0 +1 @@ +[ "$cf_usb" == "n" ] || checkUsbStorage diff --git a/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p7070_firmware b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p7070_firmware index 28d28566..fbe018a4 100644 --- a/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p7070_firmware +++ b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p7070_firmware @@ -1,3 +1,8 @@ -[ "$cfg_firmware" == "_nand_" ] || load_firmware +[ "$cfg_firmware" == "_nand_" ] || loadFirmware mod_repair_etc -setGamepath + +softwareCheck +checkUsbGamepath + +# temporary +[ "$(uname -n)" == "madmonkey" ] && overmount "/lib/modules" diff --git a/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p7080_hmods b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p7080_hmods index ca3b93df..3bf788b0 100644 --- a/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p7080_hmods +++ b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p7080_hmods @@ -1,4 +1,6 @@ local transferpath="$installpath/transfer" +[ -d "$mountpoint/media/$modname/transfer" ] && transferpath="$mountpoint/media/$modname/transfer" + if [ -d "$transferpath" ]; then cd "$transferpath" [ -f "$transferpath/earlybird" ] && source "$transferpath/earlybird" diff --git a/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/pffff_config b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/pffff_config index 9defb135..8d238b1b 100644 --- a/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/pffff_config +++ b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/pffff_config @@ -1,3 +1,3 @@ local config=p0000_config set | grep -F cfg_ | sort > "$temppath/$config" -copy "$temppath/$config" "$preinitpath/$config" +copy "$temppath/$config" "$preinit.d/$config" diff --git a/mods/mod_hakchi/hakchi/script/install b/mods/mod_hakchi/hakchi/script/install index 9ca6806e..f5fb048c 100644 --- a/mods/mod_hakchi/hakchi/script/install +++ b/mods/mod_hakchi/hakchi/script/install @@ -6,19 +6,29 @@ mod_uninstall(){ } mod_repair(){ - mod_repair_etc full + local bin="$temppath/bin" + rm -rf "$bin" + mkdir -p "$bin" + copy "$mountpoint/bin/" "$bin/" + copy "/bin/" "$bin/" + copy "$modpath/rootfs/bin/" "$bin/" + copy "/sbin/cryptsetup" "$bin/cryptsetup" + copy "$bin/" "$modpath/rootfs/bin/" + rm -rf "$bin" + + copy "/key-file" "$modpath/rootfs/etc/key-file" + chown -R 0:0 "$modpath/" cd "$modpath/rootfs/bin" && chmod 755 * cd "$modpath/rootfs/etc/init.d" && chmod 755 * - cd / - copy "/bin/" "$rootfs/bin/" - copy "/sbin/cryptsetup" "$rootfs/bin/cryptsetup" + rm -f "$modpath/rootfs/etc/preinit.d/p0000_config" copy "$modpath/rootfs/" "$rootfs/" + + mod_repair_etc full + cd / } mod_install(){ echo "installing $modname..." rm -rf "$rootfs" - restore "/bin/" - restore "/etc/" mod_repair } diff --git a/mods/mod_hakchi/hakchi/script/reflash b/mods/mod_hakchi/hakchi/script/reflash index a7beaefb..258d263e 100644 --- a/mods/mod_hakchi/hakchi/script/reflash +++ b/mods/mod_hakchi/hakchi/script/reflash @@ -1,6 +1,7 @@ +umount_base + local firmware="$(find -type f -name "*.hsqs" | sort | head -n 1)" if [ -f "$firmware" ]; then - umount_base umount "$mountpoint" cryptsetup close root-crypt @@ -13,15 +14,18 @@ if [ -f "$firmware" ]; then cryptsetup open /dev/nandb root-crypt --readonly --type plain --cipher aes-xts-plain --key-file /key-file mount -o ro,noatime /dev/mapper/root-crypt "$mountpoint" +fi +unset firmware - local tmk="$(pwd)/mkfs.txz" - if [ -f "$tmk"]; then - cd / && tar xJf "$tmk" - mount_bind "$mountpoint/lib" "/lib" -# /sbin/mkfs.ext4 -L data -m 0 /dev/nandc - mkfs.ext2 -L data -m 0 /dev/nandc - umount "/lib" - fi - - mount_base +local tmk="$(pwd)/mkfs.txz" +if [ -f "$tmk"]; then + rm "/lib" + cd / && tar xJf "$tmk" + mount_bind "$mountpoint/lib" "/lib" +# /sbin/mkfs.ext4 -L data -m 0 /dev/nandc + mkfs.ext2 -L data -m 0 /dev/nandc + umount "/lib" fi +unset tmk + +mount_base diff --git a/mods/mod_hakchi/hakchi/script/transfer b/mods/mod_hakchi/hakchi/script/transfer index 237d2c42..6a27c7bf 100644 --- a/mods/mod_hakchi/hakchi/script/transfer +++ b/mods/mod_hakchi/hakchi/script/transfer @@ -1,15 +1,16 @@ +showImage "$modpath/rootfs/etc/$modname.fb" source "$modpath/script/install" backup_nandc mount_base backup +source "$modpath/rootfs/etc/preinit.d/p0000_config" source_config local transferpath="$modpath/transfer" cd "$transferpath" - [ -f "$transferpath/earlybird" ] && source "$transferpath/earlybird" rm -f "$transferpath/earlybird" @@ -29,6 +30,7 @@ if [ -d "$transferpath/firmware" ]; then find "$firmwarepath" -type f -not -name "$firmware_name" -delete echo "transferring firmware..." copy "$firmware" "$firmwarepath/" + cfg_firmware="auto" fi rm -rf "$transferpath/firmware" fi diff --git a/mods/mod_hakchi/sbin/init b/mods/mod_hakchi/sbin/init index 52cc5fa1..156c02ae 100755 --- a/mods/mod_hakchi/sbin/init +++ b/mods/mod_hakchi/sbin/init @@ -31,7 +31,7 @@ else /bin/mount -o "${MOUNT_OPTS}" ${ROOTFS} /newroot fi -. /hakchi/init +[ -f "/hakchi/init" ] && sh "/hakchi/init" /bin/mount --move /dev /newroot/dev /bin/umount /proc -- cgit v1.2.3