slitaz-arm view rpi/tazberry @ rev 137

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