op_tvout: add ability to switch to other layer
[openpandora.oe.git] / recipes / pandora-system / pandora-scripts / op_tvout.sh
1 #!/bin/bash
2
3 # defaults
4 profiles=/etc/pandora/conf/tvout-profiles.conf
5 tv_type="pal"
6 conn_type="svideo"
7 layer=0
8 pal_size="658,520"
9 pal_pos="35,35"
10 ntsc_size="655,455"
11 ntsc_pos="40,15"
12
13 usage()
14 {
15   echo "usage: $0 [-d] [-t pal|ntsc] [-c composite|svideo] [-l 0|1|o] [-{p|n}s w,h] [-{p|n}p x,y]"
16   exit 1
17 }
18
19 setup_scaler()
20 {
21   # we must preallocate enough memory for the scaler layer
22   # since the app won't be able to change this
23   # the whole time TV-out is running..
24   ofbset -fb /dev/fb1 -mem $[3*1024*1024] -size 512 256 -en 0
25 }
26
27 enable_it()
28 {
29   size=$pal_size
30   pos=$pal_pos
31   if [ "$tv_type" = "ntsc" ]; then
32     size=$ntsc_size
33     pos=$ntsc_pos
34   fi
35   echo "${tv_type}, ${conn_type}, layer $layer, $pos $size"
36
37   cd /sys/devices/platform/omapdss
38   ovl0=`cat overlay0/enabled`
39   ovl1=`cat overlay1/enabled`
40   echo 0 > display1/enabled
41   echo 0 > overlay0/enabled
42   echo 0 > overlay1/enabled
43   echo 0 > overlay2/enabled
44   echo "" > /sys/class/graphics/fb2/overlays
45   echo "" > /sys/class/graphics/fb1/overlays
46   if [ $layer -eq 1 ]; then
47     setup_scaler
48     echo "0" > /sys/class/graphics/fb0/overlays
49     echo "1,2" > /sys/class/graphics/fb1/overlays
50   else
51     # assume layer 0 for now
52     echo "0,2" > /sys/class/graphics/fb0/overlays
53     echo "1" > /sys/class/graphics/fb1/overlays
54   fi
55   echo $conn_type > display1/venc_type
56   echo "tv" > overlay2/manager
57   echo $tv_type > display1/timings
58   echo $size > overlay2/output_size
59   echo $pos > overlay2/position 
60   echo $ovl0 > overlay0/enabled
61   echo $ovl1 > overlay1/enabled
62   echo 1 > overlay2/enabled
63   echo 1 > display1/enabled
64 }
65
66 disable_it()
67 {
68   cd /sys/devices/platform/omapdss
69   echo 0 > overlay0/enabled
70   echo 0 > overlay1/enabled
71   echo 0 > overlay2/enabled
72   echo 0 > display1/enabled
73   echo "" > /sys/class/graphics/fb2/overlays
74   echo "" > /sys/class/graphics/fb1/overlays
75   echo 0 > /sys/class/graphics/fb0/overlays
76   echo 1 > /sys/class/graphics/fb1/overlays
77   echo 2 > /sys/class/graphics/fb2/overlays
78   echo 1 > overlay0/enabled
79 }
80
81 layer_toggle()
82 {
83   tv_on=`cat /sys/devices/platform/omapdss/display1/enabled`
84   if [ "$tv_on" != "1" ]; then
85     echo "tv-out is off, not changing layers"
86     exit 1
87   fi
88   ovl1_on=`cat /sys/devices/platform/omapdss/overlay1/enabled`
89   if [ "$ovl1_on" != "1" ]; then
90     layer=0
91     return
92   fi
93
94   tmp=`cat /sys/class/graphics/fb0/overlays`
95   if [ "$tmp" == "0" ]; then
96     # tv was on overlay
97     layer=0
98   else
99     layer=1
100   fi
101 }
102
103 is_good_tv_type()
104 {
105   if [ "$1" == "pal" -o "$1" == "ntsc" ]; then
106     return 0
107   fi
108   echo "bad tv_type: $1"
109   false
110 }
111
112 is_good_conn_type()
113 {
114   if [ "$1" == "svideo" -o "$1" == "composite" ]; then
115     return 0
116   fi
117   echo "bad conn_type: $1"
118   false
119 }
120
121 is_good_layer()
122 {
123   if [ "$1" == "0" -o "$1" == "1" ]; then
124     return 0
125   fi
126   echo "bad layer: $1"
127   false
128 }
129
130 # read defaults from user profile
131 if test -f "$profiles"; then
132   defprofile=`grep -A1 '^Last written' "$profiles" | tail -n 1`
133   if test -n "$defprofile"; then
134     parse_profile()
135     {
136       # enabled
137       # encoding
138       is_good_tv_type $2 && tv_type=$2
139       # connection
140       is_good_conn_type $3 && conn_type=$3
141       # layer
142       is_good_layer $4 && layer=$4
143       # x,y
144       test -n "$5" -a -n "$6" && eval ${tv_type}_pos=$5,$6
145       # w,h
146       test -n "$7" -a -n "$8" && eval ${tv_type}_size=$7,$8
147     }
148
149     parse_profile $defprofile
150     echo "loaded defaults from last used profile"
151   fi
152 fi
153
154 # parse args
155 got_args=false
156 while true; do
157   case $1 in
158     "-d")
159       disable_it
160       exit 0
161       ;;
162     "-t")
163       shift
164       tv_type=$1
165       ;;
166     "-c")
167       shift
168       conn_type=$1
169       ;;
170     "-l")
171       shift
172       if [ "$1" == "o" ]; then
173         # "other layer" - switch to different layer
174         layer_toggle
175       else
176         layer=$1
177       fi
178       ;;
179     "-ps")
180       shift
181       if [ "$1" != "0,0" ]; then
182         pal_size=$1
183       else
184         echo "warning: ignored pal_size: $1"
185       fi
186       ;;
187     "-pp")
188       shift
189       pal_pos=$1
190       ;;
191     "-ns")
192       shift
193       if [ "$1" != "0,0" ]; then
194         ntsc_size=$1
195       else
196         echo "warning: ignored ntsc_size: $1"
197       fi
198       ;;
199     "-np")
200       shift
201       ntsc_pos=$1
202       ;;
203     "")
204       ;;
205     *)
206       usage
207       ;;
208   esac
209
210   if ! shift; then break; fi
211   got_args=true
212 done
213
214 if ! is_good_tv_type $tv_type; then
215   usage
216 fi
217
218 if ! is_good_conn_type $conn_type; then
219   usage
220 fi
221
222 if ! is_good_layer $layer; then
223   usage
224 fi
225
226
227 if $got_args; then
228   enable_it
229 else
230   # old zenity menu, to be removed
231   while mainsel=$(zenity --title="TV-Out Configuration" --width="420" --height="348" --list \
232     --column "id" --column "Please select" --hide-column=1 \
233     --text="This is a very simple TV Out Script. It will be enhanced." \
234     "pal" "Enable TV Out in PAL Mode (Composite)" \
235     "ntsc" "Enable TV Out in NTSC Mode (Composite)" \
236     "pal2" "Enable TV Out in PAL Mode, overlay (Composite)" \
237     "ntsc2" "Enable TV Out in NTSC Mode, overlay (Composite)" \
238     "pals" "Enable TV Out in PAL Mode (SVideo)" \
239     "ntscs" "Enable TV Out in NTSC Mode (SVideo)" \
240     "pal2s" "Enable TV Out in PAL Mode, overlay (SVideo)" \
241     "ntsc2s" "Enable TV Out in NTSC Mode, overlay (SVideo)" \
242     "disable" "Disable TV Out" \
243     )
244   do
245
246   case $mainsel in
247     "pal")
248     layer=0
249     tv_type="pal"
250     conn_type="composite"
251     enable_it
252     zenity --info --title="TV Out" --text "TV Out (PAL Mode) has been enabled." --timeout 6
253     ;;
254
255     "pal2")
256     layer=1
257     tv_type="pal"
258     conn_type="composite"
259     enable_it
260     zenity --info --title="TV Out" --text "TV Out (PAL Mode) has been enabled." --timeout 6
261     ;;
262
263     "ntsc")
264     layer=0
265     tv_type="ntsc"
266     conn_type="composite"
267     enable_it
268     zenity --info --title="TV Out" --text "TV Out (NTSC Mode) has been enabled." --timeout 6  
269     ;;
270
271     "ntsc2")
272     layer=1
273     tv_type="ntsc"
274     conn_type="composite"
275     enable_it
276     zenity --info --title="TV Out" --text "TV Out (NTSC Mode) has been enabled." --timeout 6  
277     ;;
278
279     "pals")
280     layer=0
281     tv_type="pal"
282     conn_type="svideo"
283     enable_it
284     zenity --info --title="TV Out" --text "TV Out (PAL Mode) has been enabled." --timeout 6
285     ;;
286
287     "pal2s")
288     layer=1
289     tv_type="pal"
290     conn_type="svideo"
291     enable_it
292     zenity --info --title="TV Out" --text "TV Out (PAL Mode) has been enabled." --timeout 6
293     ;;
294
295     "ntscs")
296     layer=0
297     tv_type="ntsc"
298     conn_type="svideo"
299     enable_it
300     zenity --info --title="TV Out" --text "TV Out (NTSC Mode) has been enabled." --timeout 6  
301     ;;
302
303     "ntsc2s")
304     layer=1
305     tv_type="ntsc"
306     conn_type="svideo"
307     enable_it
308     zenity --info --title="TV Out" --text "TV Out (NTSC Mode) has been enabled." --timeout 6  
309     ;;
310
311
312     "disable")
313     disable_it
314     zenity --info --title="TV Out" --text "TV Out has been disabled." --timeout 6
315     ;;    
316   esac
317   done
318 fi