Skip to content

Instantly share code, notes, and snippets.

@xythobuz
Created July 9, 2017 22:52
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save xythobuz/c14e99453f00fa1077a76c4ff42fb1c8 to your computer and use it in GitHub Desktop.
Save xythobuz/c14e99453f00fa1077a76c4ff42fb1c8 to your computer and use it in GitHub Desktop.
PS2 HDLoader hdl_dump 0.9.2 wrapper shell script
#!/bin/bash
TEMP_DATA_FILE=".ps2-hdl-state"
TEMP_INFO_FILE=".ps2-hdl-info"
# Determine which hdl_dump client to use
HDL=`which hdl_dump`
HDLSETTING="auto"
# Get PS2 IP from environment var or use default
if [ -z "$PS2HOSTNAME" ]; then
PS2HOSTNAME="192.168.0.10"
PS2IPSETTING="default"
else
PS2IPSETTING="env"
fi
# Defaults
COMMAND="help"
COMMANDARG=""
DMAPARAMS="*u4"
DMAPARAMSSETTING="auto"
NAME="default"
NAMESETTING="auto"
USEPING="yes"
function show_help {
echo "Usage:"
echo " $0 [OPTION [ARG]] [CMD]"
echo
echo "Options: (can use multiple)"
echo " -b arg - Set hdl_dump binary path"
echo " -i arg - Set PS2 IP or hostname"
echo " -x - Disable Ping connectivity check"
echo " -d arg - Set DMA param (only for upload!)"
echo " -n arg - Set ISO name (only for upload!)"
echo
echo "Commands: (use only one)"
echo " -h - Local: Show this help"
echo " -a arg - Local: Show ISO infos"
echo " -l - PS2: List the installed games"
echo " -u arg - PS2: Upload & install game ISO"
echo " -q - PS2: Shutoff / Powerdown"
}
# Handle command line arguments
OPTIND=1
while getopts "hlxqb:i:u:a:d:n:" opt; do
case $opt in
h)
show_help
exit 0
;;
b)
HDL=$OPTARG
HDLSETTING="user"
;;
i)
PS2HOSTNAME=$OPTARG
PS2IPSETTING="user"
;;
l)
COMMAND="list"
;;
u)
COMMAND="upload"
COMMANDARG=$OPTARG
;;
a)
COMMAND="analyze"
COMMANDARG=$OPTARG
;;
d)
DMAPARAMS=$OPTARG
DMAPARAMSSETTING="user"
;;
n)
NAME=$OPTARG
NAMESETTING="user"
;;
x)
USEPING="no"
;;
q)
COMMAND="shutdown"
;;
esac
done
if [ "$COMMAND" == "help" ]; then
show_help
exit 0
fi
echo "Using hdl_dump: $HDL ($HDLSETTING)"
echo "Using PS2 IPv4: $PS2HOSTNAME ($PS2IPSETTING)"
echo "-------------------------------------------------"
if [ "$COMMANDARG" != "" ]; then
echo "Executing \"$COMMAND\" with parameter \"$COMMANDARG\""
else
echo "Executing \"$COMMAND\"..."
fi
# Check if our hdl_dump binary is really executable
if [ ! -x $HDL ]; then
echo "Error: hdl_dump binary does not exist or is not executable!"
exit 1
fi
# Check if the PS2 is really reachable
if [ "$USEPING" == "yes" ]; then
ping -c 1 -t 1 "$PS2HOSTNAME" > /dev/null 2> /dev/null
if [ "$?" -ne "0" ]; then
echo "Error: PS2 does not seem to be reachable via ICMP pings!"
exit 2
fi
fi
echo "-------------------------------------------------"
MEDIUM_TYPE="unknown"
MEDIUM_SIZE="unknown"
MEDIUM_NAME="unknown"
MEDIUM_ID="unknown"
function do_analyze {
$HDL cdvd_info2 "$COMMANDARG" > "$TEMP_DATA_FILE"
if [ "$?" -ne "0" ]; then
echo "Error: Couldn't use hdl_dump to analyze an ISO!"
exit 3
fi
MEDIUM_TYPE=`cat "$TEMP_DATA_FILE" | awk -F ' ' '{print $1}'`
KB_SIZE=`cat "$TEMP_DATA_FILE" | awk -F ' ' '{print $2}'`
MEDIUM_NAME=`cat "$TEMP_DATA_FILE" | awk -F '"' '{print $2}'`
MEDIUM_ID=`cat "$TEMP_DATA_FILE" | awk -F '"' '{print $4}'`
SIZE=`echo $KB_SIZE | sed 's/[^0-9]*//g'`
MEDIUM_SIZE="`expr $SIZE / 1000`MB"
rm -rf "$TEMP_DATA_FILE"
}
function print_stats {
echo "Disc Type: $MEDIUM_TYPE"
echo "Disc Size: $MEDIUM_SIZE"
echo "Disc Name: $MEDIUM_NAME"
echo "Disc ID: $MEDIUM_ID"
}
function do_list {
$HDL toc "$PS2HOSTNAME"
if [ "$?" -ne "0" ]; then
echo "Error: Couldn't use hdl_dump to dump the TOC!"
exit 4
fi
}
function do_shutdown {
$HDL poweroff "$PS2HOSTNAME"
if [ "$?" -ne "0" ]; then
echo "Error: Couldn't use hdl_dump to turn off PS2!"
exit 5
fi
}
function do_upload {
if [ "$MEDIUM_TYPE" != "DVD" ]; then
if [ "$MEDIUM_TYPE" != "CD" ]; then
echo "Error: unknown disc type!"
exit 6
fi
fi
if [ "$MEDIUM_NAME" == "" ]; then
if [ "$NAMESETTING" == "auto" ]; then
echo "Error: no name set for upload!"
exit 7
fi
fi
echo "Using DMA Parameter: $DMAPARAMS ($DMAPARAMSSETTING)"
if [ "$NAMESETTING" == "auto" ]; then
echo "Using Game name from ISO: $MEDIUM_NAME ($NAMESETTING)"
NAME="$MEDIUM_NAME"
else
echo "Using Game name: $NAME ($NAMESETTING)"
fi
if [ "$MEDIUM_TYPE" == "DVD" ]; then
MEDIUM_TYPE="inject_dvd"
else
MEDIUM_TYPE="inject_cd"
fi
mv info.sys $TEMP_INFO_FILE 2> /dev/null
echo "Starting upload..."
$HDL $MEDIUM_TYPE "$PS2HOSTNAME" "$NAME" "$COMMANDARG" "$DMAPARAMS"
if [ "$?" -ne "0" ]; then
echo
echo "Error: Couldn't use hdl_dump to upload ISO!"
exit 8
fi
echo
echo "Upload finished!"
rm -rf info.sys 2> /dev/null
mv $TEMP_INFO_FILE info.sys 2> /dev/null
}
case $COMMAND in
analyze)
do_analyze
print_stats
;;
list)
do_list
;;
upload)
do_analyze
print_stats
do_upload
;;
shutdown)
do_shutdown
;;
esac
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment