slitaz-arm view rpi/tazberry @ rev 134

tazberry: add PiCam setup :-)
author Christophe Lincoln <pankso@slitaz.org>
date Sat Apr 26 04:03:04 2014 +0200 (2014-04-26)
parents 65b9b6991d94
children 8d2fe01fe16f
line source
1 #!/bin/sh
2 #
3 # TazBerry - SliTaz Raspberry Pi Config Tool
4 #
5 # Copyright (C) 2014 SliTaz ARM - BSD License
6 # Author: Christophe Lincoln <pankso@slitaz.org>
7 #
8 . /lib/libtaz.sh
10 title="{ TazBerry }"
11 config="/boot/config.txt"
12 tmpdir="/tmp/tazberry"
13 tmp="$tmpdir/$$"
14 height="20"
15 width="72"
17 # Use a tmp directory
18 mkdir -p ${tmpdir}
20 # Small built-in help
21 help() {
22 cat << EOT
24 $(boldify "$(gettext 'Usage:')") $(basename $0) [command|rpi_function]
26 $(boldify "$(gettext 'Commands:')")
27 oclock $(gettext 'Configure overclocking')
28 cam-setup $(gettext 'Configure your Pi to use the Camera')
29 ls-functions $(gettext 'List TazBerry functions')
30 rpi_ $(gettext 'Execute any tazberry_function')
31 testsuite $(gettext 'Run TazBerry testsuite')
33 EOT
34 }
36 #
37 # RPi functions
38 #
40 # This could move to /usr/bin/slitaz-??? or something since it's not
41 # ARM specific
42 rpi_stats() {
43 ip=$(ifconfig | fgrep -A 1 "encap:Ethernet" | fgrep "inet" | cut -d ":" -f 2)
44 mem_total=$(free -m | fgrep "Mem:" | awk '{print $2}')
45 mem_used=$(free -m | fgrep "Mem:" | awk '{print $3}')
46 mem_used_pct=$(( ( ${mem_used} * 100) / ${mem_total} ))
47 cat << EOT
48 $(gettext 'Kernel') : $(uname -snrm)
49 $(gettext 'Uptime') : $(uptime | awk '{print $3}' | sed s"/:/h /" | sed s"/,/min/")
50 $(gettext 'Network IP') : $(echo $ip | awk '{print $1}')
51 $(gettext 'CPU heat') : $(awk '{printf "%3.1f C\n", $1/1000}' /sys/class/thermal/thermal_zone0/temp)
52 $(gettext 'Processes') : $(ps | wc -l)
53 $(gettext 'Memory usage') : ${mem_used_pct}%
54 EOT
55 }
57 rpi_turbo() {
58 if ! fgrep -q 'force_turbo=1' ${config}; then
59 gettext "Enabling Raspberry Pi force turbo..."
60 echo "force_turbo=1" >> ${config}; status
61 else
62 gettext "Disabling Raspberry Pi force turbo..."
63 sed -i '/force_turbo=1/'d ${config}; status
64 fi
65 }
67 # RPi Overclocking
68 rpi_oclock() {
69 cat << EOT
70 none 700MHz ARM 250MHz core 400MHz SDRAM 0 overvolt
71 modest 800MHz ARM 300MHz core 400MHz SDRAM 0 overvolt
72 medium 900MHz ARM 333MHz core 450MHz SDRAM 2 overvolt
73 high 950MHz ARM 450MHz core 450MHz SDRAM 6 overvolt
74 turbo 1000MHz ARM 500MHz core 500MHz SDRAM 6 overvolt
75 EOT
76 }
78 # Unset overclocking
79 unset_oclock() {
80 debug "unset_oclock"
81 sed -i \
82 -e '/# Overclocking.*/'d \
83 -e '/arm_freq=/'d \
84 -e '/core_freq=/'d \
85 -e '/sdram_freq=/'d \
86 -e '/over_voltage=/'d ${config}
87 # Remove if 3 empty lines follows
88 sed -i '1N;N;/^\n\n$/d;P;D' ${config}
89 }
91 # Set overclocking: set_oclock [mode]
92 set_oclock() {
93 debug "set_oclock $1"
94 case "$1" in
95 none)
96 arm_freq=700
97 core_freq=250
98 sdram_freq=400
99 over_voltage=0 ;;
100 modest)
101 arm_freq=800
102 core_freq=300
103 sdram_freq=400
104 over_voltage=0 ;;
105 medium)
106 arm_freq=900
107 core_freq=333
108 sdram_freq=450
109 over_voltage=2 ;;
110 high)
111 arm_freq=950
112 core_freq=450
113 sdram_freq=450
114 over_voltage=6 ;;
115 turbo)
116 arm_freq=1000
117 core_freq=500
118 sdram_freq=500
119 over_voltage=6 ;;
120 esac
121 unset_oclock
122 cat >> ${config} << EOT
123 # Overclocking Settings
124 arm_freq=$arm_freq
125 core_freq=$core_freq
126 sdram_freq=$sdram_freq
127 over_voltage=$over_voltage
129 EOT
130 }
132 #
133 # GUI Functions
134 #
136 # Usage: msg_box "title" "message"
137 msg_box() {
138 dialog --title "{ $1 }" --cr-wrap \
139 --ok-label "TazBerry" --msgbox "\n$2" ${height} ${width}
140 }
142 # Usage: text_box "file"
143 text_box() {
144 local file="$1"
145 if [ -f "$file" ]; then
146 dialog --cr-wrap \
147 --title "{ $(gettext 'Viewing file:') $file }" \
148 --extra-button \
149 --extra-label "Edit file" \
150 --ok-label "TazBerry" \
151 --textbox ${file} ${height} ${width}
152 else
153 dialog --title "$title" \
154 --msgbox "\nERROR: $file does not exist" 10 ${width}
155 fi
156 # Handle options
157 case "$?" in
158 3) editor ${file} ;;
159 esac
160 }
162 # Usage: tail_box "file"
163 tail_box() {
164 dialog --title "{ $(gettext 'Watching file:') $2 }" \
165 --tailbox "$1" ${height} ${width}
166 }
168 # Packages info and spk-up button
169 pkgs_box() {
170 out="$tmpdir/spk-info.txt"
171 spk info --output=raw > ${out}
172 dialog --cr-wrap \
173 --title "{ $(gettext 'Packages') }" \
174 --extra-button \
175 --extra-label "$(gettext 'Upgrade')" \
176 --ok-label "TazBerry" \
177 --textbox "$out" ${height} ${width}
178 # Handle options
179 case "$?" in
180 3) spk-up && gettext "Press ENTER to go back to TazBerry"; read ;;
181 esac
182 }
184 # Overclocking info TODO: button to setup
185 oclock_box() {
186 mode=$(fgrep arm_freq ${config} | cut -d '=' -f 2)
187 case "$mode" in
188 700) mode="none" ;;
189 800) mode="modest" ;;
190 900) mode="medium" ;;
191 950) mode="high" ;;
192 1000) mode="turbo" ;;
193 esac
194 dialog \
195 --clear --colors \
196 --extra-button \
197 --title "{ Overclocking }" \
198 --ok-label "TazBerry" \
199 --extra-label "Set Overclock" \
200 --cancel-label "Unset Oclock" \
201 --menu "\nSet Raspberry Pi overclocking, current setting: \Zb\Z2$mode" \
202 ${height} ${width} 14 \
203 "none" "700MHz ARM 250MHz core 400MHz SDRAM 0 overvolt" \
204 "modest" "800MHz ARM 300MHz core 400MHz SDRAM 0 overvolt" \
205 "medium" "900MHz ARM 333MHz core 450MHz SDRAM 2 overvolt" \
206 "high" "950MHz ARM 450MHz core 450MHz SDRAM 6 overvolt" \
207 "turbo" "1000MHz ARM 500MHz core 500MHz SDRAM 6 overvolt" 2>${tmp}
208 retval="$?"
209 mode=$(cat $tmp)
210 case "$retval" in
211 0) continue ;;
212 1) unset_oclock ;;
213 3) set_oclock "$mode" ;;
214 255) rm -rf ${tmpdir} && exit 0 ;;
215 esac
216 }
218 gpu_mem_box() {
219 dialog \
220 --clear \
221 --title "$title" \
222 --ok-label "Set mem" \
223 --cancel-label "TazBerry" \
224 --menu "\nSet the memory allocated to the GPU (in MB)" \
225 ${height} ${width} 14 \
226 "16" "For server, NAS, base system without X" \
227 "32" "For very small TFT and TV display" \
228 "64" "Default value, fine for low latency desktop" \
229 "128" "For a faster desktop, using a video player" \
230 "256" "For media center, GL/3D applications" 2>${tmp}
231 mem=$(cat $tmp)
232 sed -i \
233 -e s"/#gpu_mem=.*/gpu_mem=$mem/" \
234 -e s"/gpu_mem=.*/gpu_mem=$mem/" /boot/config.txt
235 }
237 picam_setup() {
238 db="/var/lib/tazpkg/installed"
239 gpu_mem=128
240 pct="0"
241 {
242 # Needed packages
243 for pkg in raspberrypi-vc raspberrypi-boot-x
244 do
245 echo "XXX" && echo $((${pct} + 20))
246 echo -e "\nInstalling: $pkg"
247 echo "XXX"
248 #[ -d "$db/$pkg" ] || spk-add ${pkg} >/dev/null
249 sleep 1
250 done
252 echo "XXX" && echo 60
253 echo -e "\nSetting up: ${config}"
254 echo "XXX" && sleep 1
255 # 0 to disable camera, 1 to enable it
256 if ! grep -q "start_x=1" ${config}; then
257 cat >> ${config} << EOT
259 # Camera settings
260 start_x=1
262 EOT
263 fi
264 # In case it was commented ot disabled
265 sed -i s'/#start_x=.*/start_x=1/' ${config}
266 sed -i s'/start_x=.*/start_x=1/' ${config}
268 # PiCam need 128 MB of GPU memory
269 echo "XXX" && echo 80
270 echo -e "\nSetting GPU memory to: ${gpu_mem}"
271 echo "XXX" && sleep 1
273 sed -i "s/#gpu_mem=.*/gpu_mem=${gpu_mem}/" ${config}
274 sed -i "s/gpu_mem=.*/gpu_mem=${gpu_mem}/" ${config}
276 echo "XXX" && echo 100
277 echo -e "\nPiCam config done..."
278 echo "XXX" && sleep 1
280 } | dialog --title "{ PiCam Setup }" \
281 --gauge "" 8 ${width} 0
283 # Reboot ?
284 dialog --title "$title" \
285 --yesno "\n\
286 SliTaz is configured for the PiCam but you need a reboot to use it.\
287 \n\n
288 Do You wish to reboot now ?" \
289 ${height} ${width}
290 [ "$?" == 0 ] && echo reboot #####
291 }
293 # Main Dialog menu
294 main_box() {
295 dialog \
296 --clear \
297 --title "$title" \
298 --ok-label "Exec" \
299 --cancel-label "Quit" \
300 --menu "" ${height} ${width} 14 \
301 "rpi-stats" "$(gettext 'Show some RPi system stats')" \
302 "gpu-mem" "$(gettext 'Set memory split between ARM and GPU')" \
303 "cam-setup" "$(gettext 'Configure your Pi to use the Camera')" \
304 "act-led" "$(gettext 'Test the RPi onboard ACT green led')" \
305 "oclock" "$(gettext 'Overclocking configuration')" \
306 "rpi-turbo" "$(gettext 'Enable or disable RPi turbo on next boot')" \
307 "boot-cmdline" "$(gettext 'View boot args /boot/cmdline.txt')" \
308 "boot-config" "$(gettext 'View config file /boot/config.txt')" \
309 "packages" "$(gettext 'SliTaz packages manager') (spk)" \
310 "config" "$(gettext 'System config (lang, keyboard, wifi)')" \
311 "reboot" "$(gettext 'Reboot SliTaz system')" \
312 "halt" "$(gettext 'Halt the Raspberry Pi')" \
313 "quit" "$(gettext 'Exit TazBerry tool')" 2>${tmp}
315 # Handle options
316 case "$?" in
317 1|255) rm -rf ${tmpdir} && exit 0 ;;
318 esac
320 # Handle actions
321 action=$(cat $tmp)
322 case "$action" in
323 rpi-stats)
324 msg_box "RPi Stats" "$(rpi_stats)" ;;
325 gpu-mem)
326 gpu_mem_box ;;
327 cam-setup)
328 picam_setup ;;
329 act-led)
330 brightness="/sys/class/leds/led0/brightness"
331 (echo "1" > ${brightness}
332 sleep 3; echo "0" > ${brightness}) & ;;
333 oclock)
334 oclock_box ;;
335 rpi-turbo)
336 rpi_turbo && newline
337 gettext "Press ENTER to go back to TazBerry"; read ;;
338 boot-cmdline)
339 text_box /boot/cmdline.txt ;;
340 boot-config)
341 text_box ${config} ;;
342 packages)
343 spk-dialog ;;
344 config)
345 slitaz-config ;;
346 reboot)
347 reboot ;;
348 halt)
349 poweroff ;;
350 quit)
351 rm -rf ${tmpdir} && exit 0 ;;
352 esac
353 }
355 # Progress bar testsuite
356 gauge_box() {
357 { for i in $(seq 1 100); do
358 echo $i
359 sleep 0.01
360 done
361 echo 100; } | dialog --title "{ TazBerry }" \
362 --gauge "Work in progress..." 6 ${width} 0
363 }
365 #
366 # Handle commands
367 #
369 case "$1" in
370 oclock)
371 oclock_box ;;
373 cam-setup)
374 picam_setup ;;
376 ls-functions)
377 newline
378 boldify "$(gettext 'TazBerry functions list')"
379 separator
380 grep "^rpi_*" $0 | awk '{print " ", $1}'
381 newline ;;
383 testsuite)
384 gauge_box
385 msg_box "Testsuite" "Test message"
386 rpi_stats
387 newline ;;
389 rpi_*)
390 # Execute functions
391 $@ ;;
393 "")
394 # No args: display Ncurses dialog
395 while true; do
396 main_box
397 done ;;
399 *|*help|-h)
400 # Display help
401 help ;;
402 esac
404 # Clean exit
405 rm -rf ${tmpdir}
406 exit 0