diff options
Diffstat (limited to 'utils/ypr0tools/files/common/etc/safemode/smode')
-rwxr-xr-x | utils/ypr0tools/files/common/etc/safemode/smode | 250 |
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 | ||
16 | PLATFORM=0 | ||
17 | BUTTON_DEVICE="/dev/r0Btn" | ||
18 | PMK=$(echo -e -n "\x01") # same for both devices | ||
19 | STORAGES="/dev/stl3,/dev/stl2,/dev/mmcblk0" | ||
20 | |||
21 | MODE="normal" | ||
22 | |||
23 | if [ $# -eq 1 ] | ||
24 | then | ||
25 | MODE=$1 | ||
26 | fi | ||
27 | |||
28 | # rather simple but effective check | ||
29 | # different key codes to trigger safe mode | ||
30 | if [ -e "/usr/local/bin/r1" ] | ||
31 | then | ||
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" | ||
37 | else | ||
38 | BACK=$(echo -e -n "\x08") | ||
39 | PLATFORM=0 | ||
40 | BUTTON_DEVICE="/dev/r0Btn" | ||
41 | STORAGES="/dev/stl3,/dev/stl2,/dev/mmcblk0" | ||
42 | fi | ||
43 | |||
44 | power_pressed() | ||
45 | { | ||
46 | VAR=$(dd if=$BUTTON_DEVICE bs=4 count=1) | ||
47 | [[ "$VAR" = "$PMK" ]] | ||
48 | return $? | ||
49 | } | ||
50 | |||
51 | cable_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 | |||
63 | enable_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 | |||
71 | display_image() | ||
72 | { | ||
73 | cat $1 > "/dev/fb0" | ||
74 | } | ||
75 | |||
76 | if [ $MODE != "forced" ] | ||
77 | then | ||
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 | ||
83 | fi | ||
84 | |||
85 | # Here we entered safe mode, so first clean the display | ||
86 | # and turn on backlight at minimum level | ||
87 | enable_display | ||
88 | |||
89 | # there are different ROMs around... | ||
90 | if [ -e "/etc/safemode/safemode.raw" ] | ||
91 | then | ||
92 | DefIMG="/etc/safemode/safemode.raw" | ||
93 | else | ||
94 | DefIMG="/etc/mods/safe_mode.raw" | ||
95 | fi | ||
96 | RbtIMG="/etc/safemode/post_smode.raw" | ||
97 | PreIMG="/etc/safemode/pre_smode.raw" | ||
98 | |||
99 | NOUSB=true | ||
100 | |||
101 | if cable_disconnected | ||
102 | then | ||
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 | ||
140 | else | ||
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 | ||
157 | fi | ||
158 | |||
159 | display_image $DefIMG | ||
160 | |||
161 | echo "Enabling usb storage..." | ||
162 | lsmod | grep g_file_storage | ||
163 | if [ $? == 0 ] | ||
164 | then | ||
165 | umount /mnt/media1/dev/gadget | ||
166 | fi | ||
167 | |||
168 | umount /mnt/media1 | ||
169 | umount /mnt/media0 | ||
170 | |||
171 | lsmod | grep rfs | ||
172 | if [ $? == 0 ] | ||
173 | then | ||
174 | rmmod rfs | ||
175 | fi | ||
176 | |||
177 | lsmod | grep g_file_storage | ||
178 | if [ $? == 0 ] | ||
179 | then | ||
180 | rmmod gadgetfs | ||
181 | rmmod g_file_storage | ||
182 | rmmod arcotg_udc | ||
183 | fi | ||
184 | |||
185 | lsmod | grep g_serial | ||
186 | if [ $? == 0 ] | ||
187 | then | ||
188 | rmmod g_serial | ||
189 | fi | ||
190 | |||
191 | lsmod | grep g_file_storage | ||
192 | if [ $? != 0 ] | ||
193 | then | ||
194 | modprobe g-file-storage file=$STORAGES removable=1 | ||
195 | fi | ||
196 | |||
197 | SAFE=true | ||
198 | while $SAFE | ||
199 | do | ||
200 | if power_pressed | ||
201 | then | ||
202 | sleep 1 | ||
203 | if power_pressed | ||
204 | then | ||
205 | SAFE=false | ||
206 | fi | ||
207 | fi | ||
208 | done | ||
209 | |||
210 | echo "Removing loaded modules..." | ||
211 | rmmod g_file_storage | ||
212 | rmmod arcotg_udc | ||
213 | |||
214 | display_image $RbtIMG | ||
215 | |||
216 | USB=true | ||
217 | |||
218 | while $USB | ||
219 | do | ||
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 | ||
247 | done | ||
248 | |||
249 | #power key pressed for almost 2 sec and cable disconnected. Power off! | ||
250 | exit 1 | ||