e876f4df6d
This is the basic port to the new target Samsung YP-R1, which runs on a similar platform as YP-R0. Port is usable, although there are still some optimizations that have to be done. Change-Id: If83a8e386369e413581753780c159026d9e41f04
250 lines
5 KiB
Bash
Executable file
250 lines
5 KiB
Bash
Executable file
#!/bin/sh
|
|
|
|
######################################################################
|
|
# __________ __ ___.
|
|
# Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
|
# Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
|
# Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
|
# Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
|
# \/ \/ \/ \/ \/
|
|
#
|
|
# * Safe Mode for Samsung YP-R0 / YP-R1 *
|
|
# * Copyright (C) 2013 Lorenzo Miori and VanniX
|
|
######################################################################
|
|
|
|
# 0 = R0 ; 1 = R1
|
|
PLATFORM=0
|
|
BUTTON_DEVICE="/dev/r0Btn"
|
|
PMK=$(echo -e -n "\x01") # same for both devices
|
|
STORAGES="/dev/stl3,/dev/stl2,/dev/mmcblk0"
|
|
|
|
MODE="normal"
|
|
|
|
if [ $# -eq 1 ]
|
|
then
|
|
MODE=$1
|
|
fi
|
|
|
|
# rather simple but effective check
|
|
# different key codes to trigger safe mode
|
|
if [ -e "/usr/local/bin/r1" ]
|
|
then
|
|
# running on YP-R1 model
|
|
BACK=$(echo -e -n "\x03")
|
|
PLATFORM=1
|
|
BUTTON_DEVICE="/dev/r1Button"
|
|
STORAGES="/dev/stl3,/dev/stl2"
|
|
else
|
|
BACK=$(echo -e -n "\x08")
|
|
PLATFORM=0
|
|
BUTTON_DEVICE="/dev/r0Btn"
|
|
STORAGES="/dev/stl3,/dev/stl2,/dev/mmcblk0"
|
|
fi
|
|
|
|
power_pressed()
|
|
{
|
|
VAR=$(dd if=$BUTTON_DEVICE bs=4 count=1)
|
|
[[ "$VAR" = "$PMK" ]]
|
|
return $?
|
|
}
|
|
|
|
cable_disconnected()
|
|
{
|
|
if [ $PLATFORM -eq 0 ]
|
|
then
|
|
/usr/local/bin/minird 0x0a | grep -q 0x00
|
|
return $?
|
|
else
|
|
/etc/safemode/cable_detect
|
|
return $?
|
|
fi
|
|
}
|
|
|
|
enable_display()
|
|
{
|
|
echo -n "0" > /sys/devices/platform/afe.0/bli
|
|
echo -n "1" > /sys/class/graphics/fb0/blank
|
|
echo -n "0" >> /sys/class/graphics/fb0/blank
|
|
echo -n "1" > /sys/devices/platform/afe.0/bli
|
|
}
|
|
|
|
display_image()
|
|
{
|
|
cat $1 > "/dev/fb0"
|
|
}
|
|
|
|
if [ $MODE != "forced" ]
|
|
then
|
|
KEY=$(dd if=$BUTTON_DEVICE bs=4 count=1)
|
|
if [[ "$KEY" != "$BACK" ]]; then
|
|
# do not enter safe mode and continue normal boot
|
|
exit 0
|
|
fi
|
|
fi
|
|
|
|
# Here we entered safe mode, so first clean the display
|
|
# and turn on backlight at minimum level
|
|
enable_display
|
|
|
|
# there are different ROMs around...
|
|
if [ -e "/etc/safemode/safemode.raw" ]
|
|
then
|
|
DefIMG="/etc/safemode/safemode.raw"
|
|
else
|
|
DefIMG="/etc/mods/safe_mode.raw"
|
|
fi
|
|
RbtIMG="/etc/safemode/post_smode.raw"
|
|
PreIMG="/etc/safemode/pre_smode.raw"
|
|
|
|
NOUSB=true
|
|
|
|
if cable_disconnected
|
|
then
|
|
|
|
display_image $PreIMG
|
|
|
|
while $NOUSB
|
|
do
|
|
|
|
# User aborts safe mode before mounting anything, just exit
|
|
# and continue normal boot
|
|
if power_pressed
|
|
then
|
|
sleep 1
|
|
if power_pressed
|
|
then
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
if cable_disconnected
|
|
then
|
|
echo "USB not connected - Waiting"
|
|
else
|
|
sleep 1
|
|
if cable_disconnected
|
|
then
|
|
echo "USB first check OK - Waiting"
|
|
else
|
|
sleep 1
|
|
if cable_disconnected
|
|
then
|
|
echo "USB second check OK - Waiting"
|
|
else
|
|
NOUSB=false
|
|
USB=true
|
|
fi
|
|
fi
|
|
fi
|
|
done
|
|
else
|
|
while $NOUSB
|
|
do
|
|
if cable_disconnected
|
|
then
|
|
echo "USB not connected - Waiting"
|
|
else
|
|
sleep 1
|
|
if cable_disconnected
|
|
then
|
|
echo "USB first check OK - Waiting"
|
|
else
|
|
NOUSB=false
|
|
USB=true
|
|
fi
|
|
fi
|
|
done
|
|
fi
|
|
|
|
display_image $DefIMG
|
|
|
|
echo "Enabling usb storage..."
|
|
lsmod | grep g_file_storage
|
|
if [ $? == 0 ]
|
|
then
|
|
umount /mnt/media1/dev/gadget
|
|
fi
|
|
|
|
umount /mnt/media1
|
|
umount /mnt/media0
|
|
|
|
lsmod | grep rfs
|
|
if [ $? == 0 ]
|
|
then
|
|
rmmod rfs
|
|
fi
|
|
|
|
lsmod | grep g_file_storage
|
|
if [ $? == 0 ]
|
|
then
|
|
rmmod gadgetfs
|
|
rmmod g_file_storage
|
|
rmmod arcotg_udc
|
|
fi
|
|
|
|
lsmod | grep g_serial
|
|
if [ $? == 0 ]
|
|
then
|
|
rmmod g_serial
|
|
fi
|
|
|
|
lsmod | grep g_file_storage
|
|
if [ $? != 0 ]
|
|
then
|
|
modprobe g-file-storage file=$STORAGES removable=1
|
|
fi
|
|
|
|
SAFE=true
|
|
while $SAFE
|
|
do
|
|
if power_pressed
|
|
then
|
|
sleep 1
|
|
if power_pressed
|
|
then
|
|
SAFE=false
|
|
fi
|
|
fi
|
|
done
|
|
|
|
echo "Removing loaded modules..."
|
|
rmmod g_file_storage
|
|
rmmod arcotg_udc
|
|
|
|
display_image $RbtIMG
|
|
|
|
USB=true
|
|
|
|
while $USB
|
|
do
|
|
if cable_disconnected
|
|
then
|
|
sleep 1
|
|
if cable_disconnected
|
|
then
|
|
if cable_disconnected
|
|
then
|
|
sleep 1
|
|
if cable_disconnected
|
|
then
|
|
USB=false
|
|
else
|
|
echo "USB connected - Waiting"
|
|
USB=true
|
|
fi
|
|
else
|
|
echo "USB connected - Waiting"
|
|
USB=true
|
|
fi
|
|
else
|
|
echo "USB connected - Waiting"
|
|
USB=true
|
|
fi
|
|
else
|
|
echo "USB connected - Waiting"
|
|
USB=true
|
|
fi
|
|
done
|
|
|
|
#power key pressed for almost 2 sec and cable disconnected. Power off!
|
|
exit 1
|