summaryrefslogtreecommitdiff
path: root/utils/ypr0tools/files/common/etc/safemode/smode
diff options
context:
space:
mode:
Diffstat (limited to 'utils/ypr0tools/files/common/etc/safemode/smode')
-rwxr-xr-xutils/ypr0tools/files/common/etc/safemode/smode250
1 files changed, 250 insertions, 0 deletions
diff --git a/utils/ypr0tools/files/common/etc/safemode/smode b/utils/ypr0tools/files/common/etc/safemode/smode
new file mode 100755
index 0000000000..f94d09a26d
--- /dev/null
+++ b/utils/ypr0tools/files/common/etc/safemode/smode
@@ -0,0 +1,250 @@
1#!/bin/sh
2
3######################################################################
4# __________ __ ___.
5# Open \______ \ ____ ____ | | _\_ |__ _______ ___
6# Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
7# Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
8# Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
9# \/ \/ \/ \/ \/
10#
11# * Safe Mode for Samsung YP-R0 / YP-R1 *
12# * Copyright (C) 2013 Lorenzo Miori and VanniX
13######################################################################
14
15# 0 = R0 ; 1 = R1
16PLATFORM=0
17BUTTON_DEVICE="/dev/r0Btn"
18PMK=$(echo -e -n "\x01") # same for both devices
19STORAGES="/dev/stl3,/dev/stl2,/dev/mmcblk0"
20
21MODE="normal"
22
23if [ $# -eq 1 ]
24then
25 MODE=$1
26fi
27
28# rather simple but effective check
29# different key codes to trigger safe mode
30if [ -e "/usr/local/bin/r1" ]
31then
32 # running on YP-R1 model
33 BACK=$(echo -e -n "\x02")
34 PLATFORM=1
35 BUTTON_DEVICE="/dev/r1Button"
36 STORAGES="/dev/stl3,/dev/stl2"
37else
38 BACK=$(echo -e -n "\x08")
39 PLATFORM=0
40 BUTTON_DEVICE="/dev/r0Btn"
41 STORAGES="/dev/stl3,/dev/stl2,/dev/mmcblk0"
42fi
43
44power_pressed()
45{
46 VAR=$(dd if=$BUTTON_DEVICE bs=4 count=1)
47 [[ "$VAR" = "$PMK" ]]
48 return $?
49}
50
51cable_disconnected()
52{
53 if [ $PLATFORM -eq 0 ]
54 then
55 /usr/local/bin/minird 0x0a | grep -q 0x00
56 return $?
57 else
58 /etc/safemode/cable_detect
59 return $?
60 fi
61}
62
63enable_display()
64{
65 echo -n "0" > /sys/devices/platform/afe.0/bli
66 echo -n "1" > /sys/class/graphics/fb0/blank
67 echo -n "0" >> /sys/class/graphics/fb0/blank
68 echo -n "1" > /sys/devices/platform/afe.0/bli
69}
70
71display_image()
72{
73 cat $1 > "/dev/fb0"
74}
75
76if [ $MODE != "forced" ]
77then
78 KEY=$(dd if=$BUTTON_DEVICE bs=4 count=1)
79 if [[ "$KEY" != "$BACK" ]]; then
80 # do not enter safe mode and continue normal boot
81 exit 0
82 fi
83fi
84
85# Here we entered safe mode, so first clean the display
86# and turn on backlight at minimum level
87enable_display
88
89# there are different ROMs around...
90if [ -e "/etc/safemode/safemode.raw" ]
91then
92 DefIMG="/etc/safemode/safemode.raw"
93else
94 DefIMG="/etc/mods/safe_mode.raw"
95fi
96RbtIMG="/etc/safemode/post_smode.raw"
97PreIMG="/etc/safemode/pre_smode.raw"
98
99NOUSB=true
100
101if cable_disconnected
102then
103
104 display_image $PreIMG
105
106 while $NOUSB
107 do
108
109 # User aborts safe mode before mounting anything, just exit
110 # and continue normal boot
111 if power_pressed
112 then
113 sleep 1
114 if power_pressed
115 then
116 exit 1
117 fi
118 fi
119
120 if cable_disconnected
121 then
122 echo "USB not connected - Waiting"
123 else
124 sleep 1
125 if cable_disconnected
126 then
127 echo "USB first check OK - Waiting"
128 else
129 sleep 1
130 if cable_disconnected
131 then
132 echo "USB second check OK - Waiting"
133 else
134 NOUSB=false
135 USB=true
136 fi
137 fi
138 fi
139 done
140else
141 while $NOUSB
142 do
143 if cable_disconnected
144 then
145 echo "USB not connected - Waiting"
146 else
147 sleep 1
148 if cable_disconnected
149 then
150 echo "USB first check OK - Waiting"
151 else
152 NOUSB=false
153 USB=true
154 fi
155 fi
156 done
157fi
158
159display_image $DefIMG
160
161echo "Enabling usb storage..."
162lsmod | grep g_file_storage
163if [ $? == 0 ]
164then
165 umount /mnt/media1/dev/gadget
166fi
167
168umount /mnt/media1
169umount /mnt/media0
170
171lsmod | grep rfs
172if [ $? == 0 ]
173then
174 rmmod rfs
175fi
176
177lsmod | grep g_file_storage
178if [ $? == 0 ]
179then
180 rmmod gadgetfs
181 rmmod g_file_storage
182 rmmod arcotg_udc
183fi
184
185lsmod | grep g_serial
186if [ $? == 0 ]
187then
188 rmmod g_serial
189fi
190
191lsmod | grep g_file_storage
192if [ $? != 0 ]
193then
194 modprobe g-file-storage file=$STORAGES removable=1
195fi
196
197SAFE=true
198while $SAFE
199do
200 if power_pressed
201 then
202 sleep 1
203 if power_pressed
204 then
205 SAFE=false
206 fi
207 fi
208done
209
210echo "Removing loaded modules..."
211rmmod g_file_storage
212rmmod arcotg_udc
213
214display_image $RbtIMG
215
216USB=true
217
218while $USB
219do
220 if cable_disconnected
221 then
222 sleep 1
223 if cable_disconnected
224 then
225 if cable_disconnected
226 then
227 sleep 1
228 if cable_disconnected
229 then
230 USB=false
231 else
232 echo "USB connected - Waiting"
233 USB=true
234 fi
235 else
236 echo "USB connected - Waiting"
237 USB=true
238 fi
239 else
240 echo "USB connected - Waiting"
241 USB=true
242 fi
243 else
244 echo "USB connected - Waiting"
245 USB=true
246 fi
247done
248
249#power key pressed for almost 2 sec and cable disconnected. Power off!
250exit 1