summaryrefslogtreecommitdiffstats
path: root/abs/core-testing
diff options
context:
space:
mode:
Diffstat (limited to 'abs/core-testing')
-rwxr-xr-xabs/core-testing/LinHES-config/PKGBUILD2
-rwxr-xr-xabs/core-testing/LinHES-config/install_functions.sh7
-rwxr-xr-xabs/core-testing/LinHES-config/xconfig.sh4
-rw-r--r--abs/core-testing/LinHES-timezone/PKGBUILD4
-rw-r--r--abs/core-testing/LinHES-timezone/linhes_timezone.c14
-rw-r--r--abs/core-testing/ddcxinfo/PKGBUILD6
-rw-r--r--abs/core-testing/ddcxinfo/lrmi.patch18
-rw-r--r--abs/core-testing/directfb/PKGBUILD2
-rw-r--r--abs/core-testing/dvb-firmware/PKGBUILD6
-rw-r--r--abs/core-testing/dvb-firmware/xc3028-v27.fwbin0 -> 66220 bytes
-rw-r--r--abs/core-testing/expect/PKGBUILD4
-rw-r--r--abs/core-testing/faad2/ChangeLog12
-rw-r--r--abs/core-testing/faad2/LICENSE28
-rw-r--r--abs/core-testing/faad2/PKGBUILD41
-rw-r--r--abs/core-testing/fbsplash/PKGBUILD2
-rw-r--r--abs/core-testing/feh/PKGBUILD4
-rw-r--r--abs/core-testing/ffmpeg-svn/PKGBUILD59
-rw-r--r--abs/core-testing/ffmpeg/PKGBUILD48
-rw-r--r--abs/core-testing/ffmpeg/__changelog2
-rw-r--r--abs/core-testing/flac/PKGBUILD4
-rw-r--r--abs/core-testing/ghostscript/PKGBUILD7
-rw-r--r--abs/core-testing/gtk2/PKGBUILD2
-rw-r--r--abs/core-testing/hal/PKGBUILD2
-rw-r--r--abs/core-testing/imagemagick/PKGBUILD7
-rw-r--r--abs/core-testing/imlib2/PKGBUILD2
-rw-r--r--abs/core-testing/jasper/PKGBUILD2
-rw-r--r--abs/core-testing/kdelibs3/PKGBUILD5
-rw-r--r--abs/core-testing/lcms/PKGBUILD2
-rw-r--r--abs/core-testing/libcups/PKGBUILD4
-rw-r--r--abs/core-testing/libdv/PKGBUILD4
-rw-r--r--abs/core-testing/libjpeg/PKGBUILD18
-rw-r--r--abs/core-testing/libmng/PKGBUILD6
-rw-r--r--abs/core-testing/libtiff/ChangeLog8
-rw-r--r--abs/core-testing/libtiff/PKGBUILD52
-rw-r--r--abs/core-testing/libtiff/tiff-3.8.2-CVE-2008-2327.patch64
-rw-r--r--abs/core-testing/libwmf/PKGBUILD2
-rw-r--r--abs/core-testing/lighttpd/PKGBUILD5
-rw-r--r--abs/core-testing/lighttpd/lighttpd.conf1
-rw-r--r--abs/core-testing/linhes-scripts/PKGBUILD2
-rw-r--r--abs/core-testing/lirc/PKGBUILD15
-rw-r--r--abs/core-testing/lirc/dvicoIR.rules14
-rw-r--r--abs/core-testing/lirc/lirc.fdi11
-rw-r--r--abs/core-testing/mjpegtools/PKGBUILD2
-rw-r--r--abs/core-testing/mplayer-wrapper/PKGBUILD11
-rwxr-xr-xabs/core-testing/mplayer-wrapper/bin/mplayer-resumer.pl188
-rwxr-xr-xabs/core-testing/mplayer-wrapper/bin/mplayer-wrapper.pl110
-rw-r--r--abs/core-testing/mplayer-wrapper/mplayer-wrapper.install38
-rwxr-xr-xabs/core-testing/mplayer-wrapper/mplayer-wrapper.pl212
-rw-r--r--abs/core-testing/mplayer/PKGBUILD6
-rw-r--r--abs/core-testing/mythtv/stable/mythbrowser/PKGBUILD4
-rw-r--r--abs/core-testing/mythtv/stable/mythmusic/PKGBUILD2
-rw-r--r--abs/core-testing/mythtv/stable/mythtv/PKGBUILD10
-rw-r--r--abs/core-testing/mythtv/stable/mythtv/changeset-20877.patch5910
-rw-r--r--abs/core-testing/mythtv/stable/mythvideo/PKGBUILD9
-rw-r--r--abs/core-testing/mythtv/stable/mythvideo/mythvideo-6338-use_tmdb_in_fixes.patch151
-rw-r--r--abs/core-testing/mythtv/stable/mythweb/PKGBUILD5
-rw-r--r--abs/core-testing/mythtv/stable/mythweb/transcoders.patch23
-rwxr-xr-xabs/core-testing/mythtv/trunk/clean_all.sh22
-rw-r--r--abs/core-testing/mythtv/trunk/morethemes/PKGBUILD2
-rwxr-xr-xabs/core-testing/mythtv/trunk/mp_all.sh12
-rw-r--r--abs/core-testing/mythtv/trunk/mytharchive/PKGBUILD2
-rw-r--r--abs/core-testing/mythtv/trunk/mythbrowser/PKGBUILD2
-rw-r--r--abs/core-testing/mythtv/trunk/mythflix/PKGBUILD2
-rw-r--r--abs/core-testing/mythtv/trunk/mythgallery/PKGBUILD2
-rw-r--r--abs/core-testing/mythtv/trunk/mythgame/PKGBUILD2
-rw-r--r--abs/core-testing/mythtv/trunk/mythmovies/PKGBUILD2
-rw-r--r--abs/core-testing/mythtv/trunk/mythmusic/PKGBUILD4
-rw-r--r--abs/core-testing/mythtv/trunk/mythmusic/aacdecoder.cpp.patch12
-rw-r--r--abs/core-testing/mythtv/trunk/mythnews/PKGBUILD2
-rwxr-xr-xabs/core-testing/mythtv/trunk/myththemes/PKGBUILD2
-rwxr-xr-xabs/core-testing/mythtv/trunk/mythtv/PKGBUILD8
-rw-r--r--abs/core-testing/mythtv/trunk/mythvideo/PKGBUILD2
-rw-r--r--abs/core-testing/mythtv/trunk/mythweather/PKGBUILD2
-rw-r--r--abs/core-testing/mythtv/trunk/mythweb/PKGBUILD2
-rw-r--r--abs/core-testing/mythtv/trunk/mythzoneminder/PKGBUILD2
-rwxr-xr-xabs/core-testing/nuvexport/MP4.pm316
-rw-r--r--abs/core-testing/nuvexport/PKGBUILD6
-rwxr-xr-xabs/core-testing/nuvexport/XviD.pm197
-rw-r--r--abs/core-testing/nvidia-71xx/PKGBUILD4
-rw-r--r--abs/core-testing/nvidia-96xx/PKGBUILD4
-rw-r--r--abs/core-testing/nvidia/PKGBUILD4
-rw-r--r--abs/core-testing/perl_modules/perl-tk/PKGBUILD2
-rw-r--r--abs/core-testing/php/PKGBUILD10
-rw-r--r--abs/core-testing/php/php.ini2
-rw-r--r--abs/core-testing/pil/PKGBUILD2
-rw-r--r--abs/core-testing/qt/PKGBUILD66
-rw-r--r--abs/core-testing/qt/qdoc3.patch19
-rw-r--r--abs/core-testing/qt3/PKGBUILD2
-rwxr-xr-xabs/core-testing/runit-scripts/PKGBUILD4
-rwxr-xr-xabs/core-testing/runit-scripts/runitscripts/halt-runit1
-rwxr-xr-xabs/core-testing/runit-scripts/runitscripts/reboot-runit1
-rwxr-xr-xabs/core-testing/runit-scripts/runitscripts/services/lircd/run128
-rw-r--r--abs/core-testing/sqlite3/PKGBUILD8
-rwxr-xr-xabs/core-testing/system-templates/PKGBUILD2
-rw-r--r--abs/core-testing/system-templates/templates/remotes/AOpen-EA65/lircd.conf.ea65 (renamed from abs/core-testing/system-templates/templates/remotes/ea65/lircd.conf.ea65)0
-rw-r--r--abs/core-testing/system-templates/templates/remotes/AOpen-EA65/lircrc.ea65 (renamed from abs/core-testing/system-templates/templates/remotes/ea65/lircrc.ea65)0
-rw-r--r--abs/core-testing/system-templates/templates/remotes/AOpen-EA65/preview.jpgbin0 -> 76036 bytes
-rw-r--r--abs/core-testing/system-templates/templates/remotes/ASUS-DiGiMatrix/lircd.conf.asus (renamed from abs/core-testing/system-templates/templates/remotes/asus-digitmatrix/lircd.conf.asus)0
-rw-r--r--abs/core-testing/system-templates/templates/remotes/ASUS-DiGiMatrix/lircd.conf.digimatrix (renamed from abs/core-testing/system-templates/templates/remotes/asus-digitmatrix/lircd.conf.digimatrix)0
-rw-r--r--abs/core-testing/system-templates/templates/remotes/ASUS-DiGiMatrix/preview.jpgbin0 -> 28706 bytes
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/Avermedia_77x/lircd-avermedia77x.conf66
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/Avermedia_77x/lircrc-avermedia771.txt475
-rw-r--r--abs/core-testing/system-templates/templates/remotes/Avermedia_77x/preview.jpg (renamed from abs/core-testing/system-templates/templates/remotes/ea65/preview.jpg)bin1587 -> 1587 bytes
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/Avermedia_98/lircd-avermedia98.conf97
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/Avermedia_98/lircrc-avermedia98.txt477
-rw-r--r--abs/core-testing/system-templates/templates/remotes/Avermedia_98/preview.jpgbin0 -> 12175 bytes
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/Avertv_USB/lircd-avertvusb.conf65
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/Avertv_USB/lircrc-avertvusb.txt482
-rw-r--r--abs/core-testing/system-templates/templates/remotes/Avertv_USB/preview.jpg (renamed from abs/core-testing/system-templates/templates/remotes/asus-digitmatrix/preview.jpg)bin1587 -> 1587 bytes
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/Cinergy/lircd-cinergy400600.conf67
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/Cinergy/lircrc-cinergy400600.txt474
-rw-r--r--abs/core-testing/system-templates/templates/remotes/Cinergy/preview.jpgbin0 -> 1587 bytes
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/Cinergy_1400/lircd-cinergy1400.conf71
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/Cinergy_1400/lircrc-cinergy1400.txt474
-rw-r--r--abs/core-testing/system-templates/templates/remotes/Cinergy_1400/preview.jpgbin0 -> 14916 bytes
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/Cinergy_T2/lircd-cinergyT2.conf72
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/Cinergy_T2/lircrc-cinergyT2.txt474
-rw-r--r--abs/core-testing/system-templates/templates/remotes/Cinergy_T2/preview.jpgbin0 -> 14916 bytes
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/Compro/lircd-compro.conf364
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/Compro/lircrc-compro.txt487
-rw-r--r--abs/core-testing/system-templates/templates/remotes/Compro/preview.jpgbin0 -> 1587 bytes
-rw-r--r--abs/core-testing/system-templates/templates/remotes/Dvico-Dual-Digital4-rev2/lircd.conf.dvico-dual-digital481
-rw-r--r--abs/core-testing/system-templates/templates/remotes/Dvico-Dual-Digital4-rev2/lircrc.dvico-dual-digital4430
-rw-r--r--abs/core-testing/system-templates/templates/remotes/Dvico-Dual-Digital4-rev2/preview.jpgbin0 -> 34354 bytes
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/Flyvideo_2000/lircd-flyvideo2000.conf57
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/Flyvideo_2000/lircrc-flyvideo2000.txt474
-rw-r--r--abs/core-testing/system-templates/templates/remotes/Flyvideo_2000/preview.jpgbin0 -> 1587 bytes
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/Flyvideo_3000/lircd-flyvideo3000.conf47
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/Flyvideo_3000/lircrc-flyvideo3000.txt474
-rw-r--r--abs/core-testing/system-templates/templates/remotes/Flyvideo_3000/preview.jpgbin0 -> 1587 bytes
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/Hercules/lircd-hercules.conf61
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/Hercules/lircrc-hercules.txt475
-rw-r--r--abs/core-testing/system-templates/templates/remotes/Hercules/preview.jpgbin0 -> 13313 bytes
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/Kworld_110/lircd-kworld110.conf84
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/Kworld_110/lircrc-kworld110.txt482
-rw-r--r--abs/core-testing/system-templates/templates/remotes/Kworld_110/preview.jpgbin0 -> 16642 bytes
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/Kworld_220/lircd-kworld220.conf80
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/Kworld_220/lircrc-kworld220.txt482
-rw-r--r--abs/core-testing/system-templates/templates/remotes/Kworld_220/preview.jpgbin0 -> 1587 bytes
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/Kworld_310/lircd-kworld310.conf80
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/Kworld_310/lircrc-kworld310.txt482
-rw-r--r--abs/core-testing/system-templates/templates/remotes/Kworld_310/preview.jpgbin0 -> 25987 bytes
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/Kworld_DVBT/lircd-kworlddvbt.conf71
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/Kworld_DVBT/lircrc-kworlddvbt.txt474
-rw-r--r--abs/core-testing/system-templates/templates/remotes/Kworld_DVBT/preview.jpgbin0 -> 1587 bytes
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/Kworld_tv878/lircd-kworldtv878.conf70
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/Kworld_tv878/lircrc-kworldv878.txt482
-rw-r--r--abs/core-testing/system-templates/templates/remotes/Kworld_tv878/preview.jpgbin0 -> 1587 bytes
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/Leadtek_2000XP/lircd-leadtek2000xp.conf77
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/Leadtek_2000XP/lircrc-leadtek2000xp.txt474
-rw-r--r--abs/core-testing/system-templates/templates/remotes/Leadtek_2000XP/preview.jpgbin0 -> 16424 bytes
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/Leadtek_PVR/lircd-leadtekPVR.conf82
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/Leadtek_PVR/lircrc-leadtekPVR.txt474
-rw-r--r--abs/core-testing/system-templates/templates/remotes/Leadtek_PVR/preview.jpgbin0 -> 1587 bytes
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/Lifeview/lircd-lifeview.conf48
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/Lifeview/lircrc-lifeview.txt474
-rw-r--r--abs/core-testing/system-templates/templates/remotes/Lifeview/preview.jpgbin0 -> 1587 bytes
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/Medion_RF/lircd-medion-rf.conf82
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/Medion_RF/lircrc-medion-rf.txt474
-rw-r--r--abs/core-testing/system-templates/templates/remotes/Medion_RF/preview.jpgbin0 -> 1587 bytes
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/Medion_X10_8080/lircd-medionx10-8080.conf68
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/Medion_X10_8080/lircrc-medionx10-8080.txt474
-rw-r--r--abs/core-testing/system-templates/templates/remotes/Medion_X10_8080/preview.jpgbin0 -> 1587 bytes
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/Medion_X10_8802/lircd-medionx10-8802.conf126
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/Medion_X10_8802/lircrc-medionx10-8802.txt487
-rw-r--r--abs/core-testing/system-templates/templates/remotes/Medion_X10_8802/preview.jpgbin0 -> 1587 bytes
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/Nebula/lircd-nebula.conf88
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/Nebula/lircrc-nebula.txt402
-rw-r--r--abs/core-testing/system-templates/templates/remotes/Nebula/preview.jpgbin0 -> 1587 bytes
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/Nexus/lircd-nexus.conf73
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/Nexus/lircrc-nexus.txt459
-rw-r--r--abs/core-testing/system-templates/templates/remotes/Nexus/preview.jpgbin0 -> 1587 bytes
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/Nova_500/lircd-nova500.conf69
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/Nova_500/lircrc-nova500.txt559
-rw-r--r--abs/core-testing/system-templates/templates/remotes/Nova_500/preview.jpgbin0 -> 1587 bytes
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/Nova_T/lircd-novat.conf60
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/Nova_T/lircrc-novat.txt474
-rw-r--r--abs/core-testing/system-templates/templates/remotes/Nova_T/preview.jpgbin0 -> 1587 bytes
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/Nova_T_USB2/lircd-novatusb2.conf77
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/Nova_T_USB2/lircrc-novatusb2.txt474
-rw-r--r--abs/core-testing/system-templates/templates/remotes/Nova_T_USB2/preview.jpgbin0 -> 1587 bytes
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/Nvidia/lircd-nvidia.conf62
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/Nvidia/lircrc-nvidia.txt474
-rw-r--r--abs/core-testing/system-templates/templates/remotes/Nvidia/preview.jpgbin0 -> 1587 bytes
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/Nvidia_X10/lircd-nvidiax10.conf71
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/Nvidia_X10/lircrc-nvidiax10.txt474
-rw-r--r--abs/core-testing/system-templates/templates/remotes/Nvidia_X10/preview.jpgbin0 -> 1587 bytes
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/One4All/lircd-one4all.conf111
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/One4All/lircrc-one4all.txt730
-rw-r--r--abs/core-testing/system-templates/templates/remotes/One4All/preview.jpgbin0 -> 7432 bytes
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/One4All_6131/lircd-one4all6131.conf31
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/One4All_6131/lircrc-one4all6131.txt474
-rw-r--r--abs/core-testing/system-templates/templates/remotes/One4All_6131/preview.jpgbin0 -> 10324 bytes
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/One4All_7544/lircd-one4all7544.conf49
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/One4All_7544/lircrc-one4all7544.txt474
-rw-r--r--abs/core-testing/system-templates/templates/remotes/One4All_7544/preview.jpgbin0 -> 14880 bytes
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/One4All_9910/lircd-one4all9910.conf53
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/One4All_9910/lircrc-one4all9910.txt474
-rw-r--r--abs/core-testing/system-templates/templates/remotes/One4All_9910/preview.jpgbin0 -> 18720 bytes
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/Packard_bell/lircd-packard.conf92
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/Packard_bell/lircrc-packard.txt474
-rw-r--r--abs/core-testing/system-templates/templates/remotes/Packard_bell/preview.jpgbin0 -> 21260 bytes
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/Pinnacle/lircd-pinnacle.conf97
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/Pinnacle/lircrc-pinnacle.txt474
-rw-r--r--abs/core-testing/system-templates/templates/remotes/Pinnacle/preview.jpgbin0 -> 11124 bytes
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/Provideo/lircd-provideo.conf52
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/Provideo/lircrc-provideo.txt474
-rw-r--r--abs/core-testing/system-templates/templates/remotes/Provideo/preview.jpgbin0 -> 1587 bytes
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/Sasem/lircd-sasem.conf81
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/Sasem/lircrc-sasem.txt474
-rw-r--r--abs/core-testing/system-templates/templates/remotes/Sasem/preview.jpgbin0 -> 15114 bytes
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/Technisat/lircd-technisat.conf68
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/Technisat/lircrc-technisat.txt347
-rw-r--r--abs/core-testing/system-templates/templates/remotes/Technisat/preview.jpgbin0 -> 11111 bytes
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/Tekram/lircd-tekram.conf48
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/Tekram/lircrc-tekram.txt474
-rw-r--r--abs/core-testing/system-templates/templates/remotes/Tekram/preview.jpgbin0 -> 1587 bytes
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/Twinham/lircd-twinhan.conf44
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/Twinham/lircrc-twinhan.txt474
-rw-r--r--abs/core-testing/system-templates/templates/remotes/Twinham/preview.jpgbin0 -> 1587 bytes
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/X10_Lola/lircd-x10lola.conf78
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/X10_Lola/lircrc-x10lola.txt334
-rw-r--r--abs/core-testing/system-templates/templates/remotes/X10_Lola/preview.jpgbin0 -> 11610 bytes
-rw-r--r--abs/core-testing/system-templates/templates/remotes/imon-pad/preview.jpgbin1587 -> 35870 bytes
-rw-r--r--abs/core-testing/system-templates/templates/remotes/imon/preview.jpgbin1587 -> 25799 bytes
-rw-r--r--abs/core-testing/system-templates/templates/remotes/mceusb/lircd-mceusb.conf88
-rw-r--r--abs/core-testing/system-templates/templates/remotes/mceusb/lircd.conf.mceusb203
-rw-r--r--abs/core-testing/system-templates/templates/remotes/mceusb/lircrc-mceusb922
-rw-r--r--abs/core-testing/system-templates/templates/remotes/receiver_usb.id2
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/snapstream_mini/lircd-snapstreammini.conf70
-rwxr-xr-xabs/core-testing/system-templates/templates/remotes/snapstream_mini/lircrc-snapstreammini.txt474
-rw-r--r--abs/core-testing/system-templates/templates/remotes/snapstream_mini/preview.jpgbin0 -> 17713 bytes
-rw-r--r--abs/core-testing/transcode/PKGBUILD2
-rw-r--r--abs/core-testing/tweaker/PKGBUILD14
-rwxr-xr-xabs/core-testing/tweaker/bin/twk_audio.pl12
-rwxr-xr-xabs/core-testing/tweaker/bin/twk_cpu.pl31
-rwxr-xr-xabs/core-testing/tweaker/bin/twk_general.pl19
-rwxr-xr-xabs/core-testing/tweaker/bin/twk_tuners.pl40
-rw-r--r--abs/core-testing/tweaker/fs/home/mythtv/.config/smplayer/smplayer.ini2
-rw-r--r--abs/core-testing/v4l-dvb/PKGBUILD2
-rw-r--r--abs/core-testing/vdpinfo-71xx/PKGBUILD25
-rwxr-xr-xabs/core-testing/vdpinfo-71xx/vdpinfo2
-rw-r--r--abs/core-testing/vdpinfo-96xx/PKGBUILD25
-rwxr-xr-xabs/core-testing/vdpinfo-96xx/vdpinfo2
-rw-r--r--abs/core-testing/vdpinfo/PKGBUILD35
-rw-r--r--abs/core-testing/x264/PKGBUILD6
-rw-r--r--abs/core-testing/zoneminder/PKGBUILD4
-rw-r--r--abs/core-testing/zoneminder/zmupdate.patch12
248 files changed, 31657 insertions, 1048 deletions
diff --git a/abs/core-testing/LinHES-config/PKGBUILD b/abs/core-testing/LinHES-config/PKGBUILD
index ba324ee..75439cc 100755
--- a/abs/core-testing/LinHES-config/PKGBUILD
+++ b/abs/core-testing/LinHES-config/PKGBUILD
@@ -1,6 +1,6 @@
pkgname=LinHES-config
pkgver=2.0
-pkgrel=62
+pkgrel=65
conflicts=(MythVantage-config MythVantage-config-dev LinHES-config-dev )
pkgdesc="Install and configure your system"
depends=(bc libstatgrab mysql-python expect curl dnsutils parted sg3_utils nmbscan system-templates rsync python-parted ddcxinfo python-pexpect python-netifaces LinHES-timezone python-iplib)
diff --git a/abs/core-testing/LinHES-config/install_functions.sh b/abs/core-testing/LinHES-config/install_functions.sh
index a5f4122..0bc0591 100755
--- a/abs/core-testing/LinHES-config/install_functions.sh
+++ b/abs/core-testing/LinHES-config/install_functions.sh
@@ -74,9 +74,12 @@ function setupremote {
printhl "Starting with support for $Remotetype"
if [ "$Remotetype" == "dvico" ]
then
- /usr/sbin/lircd -d /dev/usb/hiddev0
+ /usr/sbin/lircd -d /dev/usb/hiddev0 --driver=dvico
+ elif [ "$Remotetype" == "Dvico-Dual-Digital4-rev2" ]
+ then
+ /usr/sbin/lircd -d /dev/input/irremote --driver=devinput
else
- /usr/sbin/lircd -d /dev/lirc0
+ /usr/sbin/lircd -d /dev/lirc0
fi
[ -e /root/.mythtv ] || mkdir /root/.mythtv 2>/dev/null
ln -s /etc/lircrc /root/.mythtv/lircrc 2>/dev/null
diff --git a/abs/core-testing/LinHES-config/xconfig.sh b/abs/core-testing/LinHES-config/xconfig.sh
index 4f5fc62..f90a60e 100755
--- a/abs/core-testing/LinHES-config/xconfig.sh
+++ b/abs/core-testing/LinHES-config/xconfig.sh
@@ -3,7 +3,7 @@
#SET DISPLAYRES to force Xres, ENV takes precendent over cmdline
#displayres=cmdline
#NVPKGS="ati-dri xf86-video-ati xf86-video-radeonhd intel-dri xf86-video-intel unichrome-dri xf86-video-unichrome xf86-video-mga xf86-video-savage xf86-video-trident"
-NVPKGS="ati-dri xf86-video-ati xf86-video-radeonhd intel-dri xf86-video-intel xf86-video-mga xf86-video-savage xf86-video-trident"
+NVPKGS="ati-dri xf86-video-ati xf86-video-radeonhd intel-dri xf86-video-intel xf86-video-mga xf86-video-savage xf86-video-trident unichrome-dri xf86-video-openchrome"
BASE=""
. /etc/profile
NVIDIA_96XX="$TEMPLATES/xorg/96xx_supported.txt"
@@ -202,11 +202,13 @@ function setupX {
then
#install 96xx drivers
echo "installing nvidia 96xx drivers"
+ pacman --noconfirm -Rd libgl > /dev/null 2>&1
pacman --noconfirm -R $NVPKGS > /dev/null 2>&1
pacman --noconfirm -S nvidia-96xx nvidia-96xx-utils > /dev/null 2>&1
else
#install latest drivers
echo "installing current nvidia drivers"
+ pacman --noconfirm -Rd libgl > /dev/null 2>&1
pacman --noconfirm -R $NVPKGS > /dev/null 2>&1
pacman --noconfirm -S nvidia nvidia-utils > /dev/null 2>&1
fi
diff --git a/abs/core-testing/LinHES-timezone/PKGBUILD b/abs/core-testing/LinHES-timezone/PKGBUILD
index 0b0d2ad..eedc364 100644
--- a/abs/core-testing/LinHES-timezone/PKGBUILD
+++ b/abs/core-testing/LinHES-timezone/PKGBUILD
@@ -2,7 +2,7 @@
# Maintainer: Greg Frost <gregfrost1@bigpond.com>
pkgname=LinHES-timezone
pkgver=1
-pkgrel=6
+pkgrel=7
pkgdesc="GUI timezone selector used by LinHES-config."
arch=i686
depends=()
@@ -27,4 +27,4 @@ md5sums=('53976e51e938c555f84b43c933339051'
'0d9e51af5f650dd329edce4531c42a58'
'c01e2335603d8395004e32bae9060fde'
'b20bd68272644f607fbfe7d50e7be42a'
- '448ffca8f38b2dcd989e599ff2057399')
+ '8629268a4f2ca8391e4d1087a9734088')
diff --git a/abs/core-testing/LinHES-timezone/linhes_timezone.c b/abs/core-testing/LinHES-timezone/linhes_timezone.c
index ff75549..d295091 100644
--- a/abs/core-testing/LinHES-timezone/linhes_timezone.c
+++ b/abs/core-testing/LinHES-timezone/linhes_timezone.c
@@ -750,6 +750,17 @@ void remove_titlebar_and_borders ()
(char *) &mwm_hints, 5);
}
+void set_window_position (int x, int y)
+{
+ XSizeHints hints;
+
+ hints.flags = USPosition | PPosition;
+ hints.x = x;
+ hints.y = y;
+
+ XSetWMNormalHints(display, window, &hints);
+}
+
int main (int argc, char *argv[])
{
XEvent xevent;
@@ -851,12 +862,13 @@ int main (int argc, char *argv[])
radius = height;
radius = 0.96 * radius / 2;
-
+
window = XCreateSimpleWindow (display,
DefaultRootWindow(display), x, y, width, height, 0,
land[0].pixel, ocean.pixel);
remove_titlebar_and_borders ();
+ set_window_position (x, y);
if (!window)
{
diff --git a/abs/core-testing/ddcxinfo/PKGBUILD b/abs/core-testing/ddcxinfo/PKGBUILD
index 94707ef..b358c0c 100644
--- a/abs/core-testing/ddcxinfo/PKGBUILD
+++ b/abs/core-testing/ddcxinfo/PKGBUILD
@@ -1,6 +1,6 @@
pkgname=ddcxinfo
pkgver=0.6.19
-pkgrel=2
+pkgrel=3
pkgdesc="DDC readout using the VESA BIOS extension"
url="http://www.t2-project.org/packages/ddcxinfo.html"
license="GPL"
@@ -11,12 +11,14 @@ replaces=()
backup=()
arch=('i686')
install=
-source=(http://www.kanotix.com/files/debian/pool/main/d/ddcxinfo-kanotix/$pkgname-kanotix_$pkgver.tar.gz)
+source=(http://www.kanotix.com/files/debian/pool/main/d/ddcxinfo-kanotix/$pkgname-kanotix_$pkgver.tar.gz
+ lrmi.patch)
build() {
cd $startdir/src/$pkgname-kanotix-$pkgver
mkdir -p $startdir/pkg/usr/sbin
+ patch -p1 < $startdir/src/lrmi.patch
make DESTDIR=$startdir/pkg install
cp svgamodes $startdir/pkg/usr/sbin/
chmod +s $startdir/pkg/usr/sbin/ddcprobe
diff --git a/abs/core-testing/ddcxinfo/lrmi.patch b/abs/core-testing/ddcxinfo/lrmi.patch
new file mode 100644
index 0000000..ca735fa
--- /dev/null
+++ b/abs/core-testing/ddcxinfo/lrmi.patch
@@ -0,0 +1,18 @@
+Common subdirectories: ddcxinfo-kanotix-0.6.19-orig/debian and ddcxinfo-kanotix-0.6.19/debian
+diff -u ddcxinfo-kanotix-0.6.19-orig/lrmi.c ddcxinfo-kanotix-0.6.19/lrmi.c
+--- ddcxinfo-kanotix-0.6.19-orig/lrmi.c 2009-07-25 06:15:09.000000000 +0000
++++ ddcxinfo-kanotix-0.6.19/lrmi.c 2009-07-25 06:17:22.000000000 +0000
+@@ -170,6 +170,13 @@
+ }
+ }
+
++#ifndef TF_MASK
++#define TF_MASK X86_EFLAGS_TF
++#define IF_MASK X86_EFLAGS_IF
++#define IOPL_MASK X86_EFLAGS_IOPL
++#define VIF_MASK X86_EFLAGS_VIF
++#define VIP_MASK X86_EFLAGS_VIP
++#endif
+
+ #define DEFAULT_VM86_FLAGS (IF_MASK | IOPL_MASK)
+ #define DEFAULT_STACK_SIZE 0x1000
diff --git a/abs/core-testing/directfb/PKGBUILD b/abs/core-testing/directfb/PKGBUILD
index 87ab961..89d322a 100644
--- a/abs/core-testing/directfb/PKGBUILD
+++ b/abs/core-testing/directfb/PKGBUILD
@@ -4,7 +4,7 @@
pkgname=directfb
pkgver=1.2.0
-pkgrel=1
+pkgrel=2
pkgdesc="A thin library that provides hardware graphics acceleration, input device handling and abstraction, integrated windowing system on top of the Linux Framebuffer Device"
arch=('i686' 'x86_64')
url="http://www.directfb.org"
diff --git a/abs/core-testing/dvb-firmware/PKGBUILD b/abs/core-testing/dvb-firmware/PKGBUILD
index bbcf1cf..8504d90 100644
--- a/abs/core-testing/dvb-firmware/PKGBUILD
+++ b/abs/core-testing/dvb-firmware/PKGBUILD
@@ -3,16 +3,18 @@
pkgname=dvb-firmware
pkgver=1
-pkgrel=5
+pkgrel=6
pkgdesc="Firmware for DVB cards"
arch=('i586' 'i686' 'x86_64')
license=('GPL2')
url="http://linuxtv.org/"
-source=(ftp://ftp.knoppmyth.net/R6/sources/dvb-firmware.tar.bz2)
+source=(ftp://ftp.knoppmyth.net/R6/sources/dvb-firmware.tar.bz2
+ xc3028-v27.fw)
md5sums=('6932d0b4f763424e35b7fa3a6cc82a2e')
build() {
cd $startdir/src/
mkdir -p $startdir/pkg/lib/firmware
cp -a dvb-fw/* $startdir/pkg/lib/firmware
+ cp $startdir/src/xc3028-v27.fw $startdir/pkg/lib/firmware
}
diff --git a/abs/core-testing/dvb-firmware/xc3028-v27.fw b/abs/core-testing/dvb-firmware/xc3028-v27.fw
new file mode 100644
index 0000000..76f46ab
--- /dev/null
+++ b/abs/core-testing/dvb-firmware/xc3028-v27.fw
Binary files differ
diff --git a/abs/core-testing/expect/PKGBUILD b/abs/core-testing/expect/PKGBUILD
index c8705c6..0f2f46b 100644
--- a/abs/core-testing/expect/PKGBUILD
+++ b/abs/core-testing/expect/PKGBUILD
@@ -3,10 +3,10 @@
pkgname=expect
pkgver=5.44.1.4
-pkgrel=1
+pkgrel=2
pkgdesc="A tool for automating interactive applications"
arch=(i686 x86_64)
-depends=('tcl>=8.5.0')
+depends=('tcl>=8.5.0' 'tk>=8.5.0')
makedepends=('tk>=8.5.0')
tcltkver=8.5.0
source=(ftp://ftp.archlinux.org/other/expect/expect-$pkgver.tar.bz2
diff --git a/abs/core-testing/faad2/ChangeLog b/abs/core-testing/faad2/ChangeLog
index b4073ba..ed5548b 100644
--- a/abs/core-testing/faad2/ChangeLog
+++ b/abs/core-testing/faad2/ChangeLog
@@ -1,3 +1,15 @@
+2009-02-16 Eric Belanger <eric@archlinux.org>
+
+ * faad2 2.7-1
+ * Upstream update
+ * Updated LICENSE file
+ * Compiled with -fPIC option
+
+2009-01-05 Eric Belanger <eric@archlinux.org>
+
+ * faad2 2.6.1-2
+ * Applied security patch
+
2008-07-19 Eric Belanger <eric@archlinux.org>
* faad2 2.6.1-1
diff --git a/abs/core-testing/faad2/LICENSE b/abs/core-testing/faad2/LICENSE
index ecb2c75..a16abf6 100644
--- a/abs/core-testing/faad2/LICENSE
+++ b/abs/core-testing/faad2/LICENSE
@@ -1,19 +1,24 @@
-/*
+__________
+COPYRIGHTS
+
+For FAAD2 the following license applies:
+
+******************************************************************************
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
-**
+**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation; either version 2 of the License, or
** (at your option) any later version.
-**
+**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
-**
+**
** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
+** along with this program; if not, write to the Free Software
** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
**
** Any non-GPL usage of this software or parts of this software is strictly
@@ -24,5 +29,14 @@
**
** Commercial non-GPL licensing of this software is possible.
** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
-**
-*/
+******************************************************************************
+
+
+Please note that the use of this software may require the payment of
+patent royalties. You need to consider this issue before you start
+building derivative works. We are not warranting or indemnifying you in
+any way for patent royalities! YOU ARE SOLELY RESPONSIBLE FOR YOUR OWN
+ACTIONS!
+
+
+______
diff --git a/abs/core-testing/faad2/PKGBUILD b/abs/core-testing/faad2/PKGBUILD
index 227cc3b..729d69b 100644
--- a/abs/core-testing/faad2/PKGBUILD
+++ b/abs/core-testing/faad2/PKGBUILD
@@ -1,45 +1,26 @@
-# $Id: PKGBUILD 5668 2008-07-20 05:06:05Z eric $
+# $Id: PKGBUILD 27494 2009-02-22 04:26:47Z eric $
# Maintainer: Eric Belanger <eric@archlinux.org>
# Contributor: Sarah Hay <sarah@archlinux.org>
pkgname=faad2
-pkgver=2.6.1
+pkgver=2.7
pkgrel=1
pkgdesc="ISO AAC audio decoder"
arch=('i686' 'x86_64')
url="http://www.audiocoding.com/"
license=('custom:GPL')
depends=('glibc')
-options=('!libtool')
-source=(http://downloads.sourceforge.net/sourceforge/faac/${pkgname}-${pkgver}.tar.gz
- faad2-2.6.1-libtool22.patch
- faad2-2.6.1-broken-pipe.patch
- faad2-2.6.1-implicitdeclar.patch
- faad2-2.6.1-abi_has_changed.patch
- LICENSE)
-md5sums=('74e92df40c270f216a8305fc87603c8a' 'ca9515b6617d7fd060d0d172616eb192'\
- 'bb6a345dd2e6c4df6609e6a374134066' 'bc43fd3f8cd582a8bc092b9b5e611865'\
- '06e83633c609d20436794b62a382b3dc' 'b6a1c72534807b8a038b71e784f57e32')
-sha1sums=('b4ad33d3c4dfa6dbf3011a3da34c631926cabfad'
- 'ca4ee04aa1757b8f9deeef52b5bf35dc823da844'
- '0b03728f40d00e552f738900e2f6215177af5417'
- 'd4ab5d38c9b75ed6417529c4d1a7ca204293c224'
- 'f7e9d89fc551e0b61a7b7555749ed7a3129a4ce8'
- '6225fd997671206f5222c4a86d9e092359552c43')
+options=('!libtool' '!makeflags')
+source=(http://downloads.sourceforge.net/sourceforge/faac/${pkgname}-${pkgver}.tar.bz2 LICENSE)
+md5sums=('4c332fa23febc0e4648064685a3d4332' 'ec95f38142e14fb46c849503897a37a0')
+sha1sums=('b0e80481d27ae9faf9e46c8c8dfb617a0adb91b5' '00edd9b30d8d5098b5e91c03c595d96a3bbe56fd')
build() {
- cd ${srcdir}/${pkgname}
- patch -p1 < ../faad2-2.6.1-libtool22.patch || return 1
- patch -p1 < ../faad2-2.6.1-broken-pipe.patch || return 1
- patch -p1 < ../faad2-2.6.1-implicitdeclar.patch || return 1
- patch -p1 < ../faad2-2.6.1-abi_has_changed.patch || return 1
-
- autoreconf -vif || return 1
+ cd ${srcdir}/${pkgname}-${pkgver}
./configure --prefix=/usr || return 1
- make || return 1
- make DESTDIR=${pkgdir} install || return 1
- install -m644 ${srcdir}/${pkgname}/common/mp4ff/mp4ff.h ${pkgdir}/usr/include/ || return 1
- install -m644 ${srcdir}/${pkgname}/common/mp4ff/mp4ff_int_types.h ${pkgdir}/usr/include/ || return 1
- install -m644 ${srcdir}/${pkgname}/common/mp4ff/.libs/*.a ${pkgdir}/usr/lib/ || return 1
+ make CFLAGS="${CFLAGS} -fPIC" || return 1
+ make DESTDIR=${pkgdir} manmdir=/usr/share/man/man1 install || return 1
+ install -m644 common/mp4ff/mp4ff_int_types.h ${pkgdir}/usr/include/mp4ff_int_types.h || return 1
install -D -m644 ${srcdir}/LICENSE ${pkgdir}/usr/share/licenses/${pkgname}/LICENSE || return 1
+ mv ${pkgdir}/usr/share/man/man1/faad.man ${pkgdir}/usr/share/man/man1/faad.1
}
diff --git a/abs/core-testing/fbsplash/PKGBUILD b/abs/core-testing/fbsplash/PKGBUILD
index 5d42484..736da1f 100644
--- a/abs/core-testing/fbsplash/PKGBUILD
+++ b/abs/core-testing/fbsplash/PKGBUILD
@@ -2,7 +2,7 @@
pkgname=fbsplash
pkgver=1.5.4.3
-pkgrel=14
+pkgrel=15
pkgdesc="A userspace implementation of a splash screen for Linux (formerly known as gensplash)"
arch=('i686' 'x86_64')
url="http://fbsplash.berlios.de"
diff --git a/abs/core-testing/feh/PKGBUILD b/abs/core-testing/feh/PKGBUILD
index 23a2627..ad38f8f 100644
--- a/abs/core-testing/feh/PKGBUILD
+++ b/abs/core-testing/feh/PKGBUILD
@@ -1,9 +1,9 @@
pkgname=feh
pkgver=1.3.4
-pkgrel=3
+pkgrel=4
pkgdesc="feh is a fast, lightweight image viewer which uses imlib2"
-depends=('libpng' 'libxinerama' 'giblib')
+depends=('libjpeg' 'libpng' 'libxinerama' 'giblib')
#source=(http://linuxbrit.co.uk/downloads/$pkgname-$pkgver.tar.gz)
source=(http://ftp.gva.es/mirror/debian/pool/main/f/feh/feh_1.3.4.orig.tar.gz)
url="http://www.linuxbrit.co.uk/feh/"
diff --git a/abs/core-testing/ffmpeg-svn/PKGBUILD b/abs/core-testing/ffmpeg-svn/PKGBUILD
new file mode 100644
index 0000000..0eafb3f
--- /dev/null
+++ b/abs/core-testing/ffmpeg-svn/PKGBUILD
@@ -0,0 +1,59 @@
+# Contributor: raubkopierer <mail[dot]sensenmann[at]googlemail[dot]com>
+
+pkgname=ffmpeg-svn
+pkgver=19483
+pkgrel=1
+pkgdesc="Complete and free Internet live audio and video broadcasting solution for Linux/Unix"
+arch=('i686' 'x86_64')
+url="http://ffmpeg.mplayerhq.hu/"
+license=('GPL')
+depends=('lame' 'sdl' 'faad2' 'faac' 'zlib' 'imlib2' 'x264' 'libtheora')
+makedepends=('subversion')
+provides=("ffmpeg=`date +%Y%m%d`")
+conflicts=('ffmpeg')
+source=()
+md5sums=()
+
+_svntrunk=svn://svn.ffmpeg.org/ffmpeg/trunk
+_svnmod=ffmpeg
+
+build() {
+ cd "$srcdir"
+
+ if [ -d $_svnmod/.svn ]; then
+ (cd $_svnmod && svn up -r $pkgver)
+ else
+ svn co $_svntrunk --config-dir ./ -r $pkgver $_svnmod
+ fi
+
+ msg "SVN checkout done or server timeout"
+ msg "Starting make..."
+
+ rm -rf "$_svnmod-build"
+ mkdir "$_svnmod-build"
+ cd "$_svnmod-build"
+
+ "$srcdir/$_svnmod/configure" \
+ --prefix=/usr \
+ --enable-gpl \
+ --enable-nonfree \
+ --enable-libmp3lame \
+ --enable-libfaac \
+ --enable-libfaad \
+ --enable-libx264 \
+ --enable-libtheora \
+ --enable-postproc \
+ --enable-shared \
+ --enable-pthreads \
+ --enable-x11grab \
+ --arch=`uname -m` \
+ --enable-libxvid \
+ || return 1
+
+ make || return 1
+ make doc/ff{mpeg,play,server}.1 || return 1
+
+ make DESTDIR="$pkgdir" install || return 1
+ make DESTDIR="$pkgdir" install-man || return 1
+
+}
diff --git a/abs/core-testing/ffmpeg/PKGBUILD b/abs/core-testing/ffmpeg/PKGBUILD
deleted file mode 100644
index 2b63545..0000000
--- a/abs/core-testing/ffmpeg/PKGBUILD
+++ /dev/null
@@ -1,48 +0,0 @@
-# $Id: PKGBUILD 24006 2009-01-11 23:04:11Z eric $
-# Contributor: Tom Newsom <Jeepster@gmx.co.uk>
-# Maintainer: Paul Mattal <paul@archlinux.org>
-
-pkgname=ffmpeg
-pkgver=20081220
-pkgrel=3
-pkgdesc="Complete and free Internet live audio and video broadcasting solution for Linux/Unix"
-arch=(i686 x86_64)
-url="http://ffmpeg.mplayerhq.hu/"
-license=('LGPL')
-depends=('lame' 'sdl' 'libvorbis' 'faad2>=2.6.1' 'faac' 'xvidcore' 'zlib' 'imlib2' 'x264>=20090108' 'libtheora')
-#remake snapshot with: svn export svn://svn.mplayerhq.hu/ffmpeg/trunk@14236
-source=(ftp://ftp.archlinux.org/other/ffmpeg/ffmpeg-${pkgver}-16503.tar.bz2)
-md5sums=('3df85782e9fbbb4a40c6b807baaf6808')
-
-build() {
- cd "$srcdir/$pkgname" || return 1
-
- ./configure \
- --prefix=/usr \
- --enable-gpl \
- --enable-libmp3lame \
- --enable-libvorbis \
- --enable-libfaac \
- --enable-libfaad \
- --enable-libxvid \
- --enable-libx264 \
- --enable-libtheora \
- --enable-postproc \
- --enable-shared \
- --enable-pthreads \
- --enable-x11grab \
- --enable-swscale \
- || return 1
-
- make || return 1
- make doc/ff{mpeg,play,server}.1 || return 1
-
- make DESTDIR="$pkgdir" install install-man || return 1
-
- # since makepkg currently declines to strip .a files, do this for now
- strip --strip-debug $startdir/pkg/usr/lib/*.a || return 1
- mkdir $startdir/pkg/usr/share/ffmpeg
- cp $startdir/src/ffmpeg/ffpresets/* $startdir/pkg/usr/share/ffmpeg
-}
-
-# vim:set ts=2 sw=2 et:
diff --git a/abs/core-testing/ffmpeg/__changelog b/abs/core-testing/ffmpeg/__changelog
deleted file mode 100644
index b27f318..0000000
--- a/abs/core-testing/ffmpeg/__changelog
+++ /dev/null
@@ -1,2 +0,0 @@
-CHW 5/25/09
-Added ffpresets to package.
diff --git a/abs/core-testing/flac/PKGBUILD b/abs/core-testing/flac/PKGBUILD
index ce31e8b..f28b964 100644
--- a/abs/core-testing/flac/PKGBUILD
+++ b/abs/core-testing/flac/PKGBUILD
@@ -3,13 +3,13 @@
# Contributor: Tom Newsom <Jeepster@gmx.co.uk>
pkgname=flac
pkgver=1.2.1
-pkgrel=1
+pkgrel=2
pkgdesc="Free Lossless Audio Codec"
license=('custom:Xiph' 'LGPL' 'GPL' 'FDL')
url="http://flac.sourceforge.net/"
arch=(i686 x86_64)
options=('!libtool')
-depends=('glibc' 'libogg')
+depends=('glibc' 'libogg' 'xmms')
makedepends=('nasm' 'xmms')
source=(http://downloads.sf.net/sourceforge/$pkgname/$pkgname-$pkgver.tar.gz \
flac-1.2.1-gcc43.patch)
diff --git a/abs/core-testing/ghostscript/PKGBUILD b/abs/core-testing/ghostscript/PKGBUILD
index 8edc722..5a7aa2a 100644
--- a/abs/core-testing/ghostscript/PKGBUILD
+++ b/abs/core-testing/ghostscript/PKGBUILD
@@ -3,17 +3,18 @@
pkgname=ghostscript
pkgver=8.63
-pkgrel=4
+pkgrel=5
pkgdesc="An interpreter for the PostScript language"
arch=(i686 x86_64)
license=('GPL' 'custom')
-depends=('libxext' 'libxt' 'libcups>=1.3.8-2' 'fontconfig>=2.6.0' 'gtk2>=2.12.11' 'gnutls>=2.4.1')
+depends=('libjpeg' 'libxext' 'libxt' 'libcups>=1.3.8-2' 'fontconfig>=2.6.0' 'gtk2>=2.12.11' 'gnutls>=2.4.1')
makedepends=('automake' 'autoconf')
optdepends=('texlive-core: dvipdf')
replaces=('ghostscript-lrpng')
provides=('ghostscript-lprng')
url="http://www.cs.wisc.edu/~ghost/"
-source=(ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/GPL/gs863/ghostscript-${pkgver}.tar.bz2
+source=(http://ghostscript.com/releases/ghostscript-${pkgver}.tar.bz2
+ #ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/GPL/gs863/ghostscript-${pkgver}.tar.bz2
ghostscript-fPIC.patch)
options=('!libtool' '!makeflags')
md5sums=('c770eedfdd846a53e211e3ba5339de21'
diff --git a/abs/core-testing/gtk2/PKGBUILD b/abs/core-testing/gtk2/PKGBUILD
index 319aed3..4279aee 100644
--- a/abs/core-testing/gtk2/PKGBUILD
+++ b/abs/core-testing/gtk2/PKGBUILD
@@ -3,7 +3,7 @@
pkgname=gtk2
pkgver=2.16.1
-pkgrel=2
+pkgrel=5
pkgdesc="The GTK+ Toolkit (v2)"
arch=(i686 x86_64)
url="http://www.gtk.org/"
diff --git a/abs/core-testing/hal/PKGBUILD b/abs/core-testing/hal/PKGBUILD
index 4bad72d..f3e48cc 100644
--- a/abs/core-testing/hal/PKGBUILD
+++ b/abs/core-testing/hal/PKGBUILD
@@ -4,7 +4,7 @@
pkgname=hal
pkgver=0.5.11
-pkgrel=4
+pkgrel=5
pkgdesc="Hardware Abstraction Layer"
arch=(i686 x86_64)
license=('GPL' 'custom')
diff --git a/abs/core-testing/imagemagick/PKGBUILD b/abs/core-testing/imagemagick/PKGBUILD
index b14f914..342fe87 100644
--- a/abs/core-testing/imagemagick/PKGBUILD
+++ b/abs/core-testing/imagemagick/PKGBUILD
@@ -9,15 +9,16 @@
pkgname=imagemagick
pkgver=6.4.9.10
-pkgrel=4
+pkgrel=5
pkgdesc="An image viewing/manipulation program"
arch=('i686' 'x86_64')
url="http://www.imagemagick.org/"
license=('custom')
-depends=('lcms' 'libwmf' 'librsvg' 'libxt' 'gcc-libs' 'ghostscript' 'openexr>=1.6.1' 'libtool>=2.2' 'heimdal>=1.2.1' 'bzip2' 'libxml2' 'jasper')
+depends=('libjpeg' 'lcms' 'libwmf' 'librsvg' 'libxt' 'gcc-libs' 'ghostscript' 'openexr>=1.6.1' 'libtool>=2.2' 'heimdal>=1.2.1' 'bzip2' 'libxml2' 'jasper')
#makedepends=('ghostscript' 'openexr')
options=('!makeflags' '!docs')
-source=(ftp://ftp.imagemagick.org/pub/ImageMagick/ImageMagick-${pkgver%.*}-${pkgver##*.}.tar.bz2 \
+source=(ftp://ftp.fifi.org/pub/ImageMagick/legacy/ImageMagick-${pkgver%.*}-${pkgver##*.}.tar.bz2
+ #ftp://ftp.imagemagick.org/pub/ImageMagick/ImageMagick-${pkgver%.*}-${pkgver##*.}.tar.bz2 \
libpng_mmx_patch_x86_64.patch add_delegate.patch)
build() {
diff --git a/abs/core-testing/imlib2/PKGBUILD b/abs/core-testing/imlib2/PKGBUILD
index 1fd9f74..b465ca2 100644
--- a/abs/core-testing/imlib2/PKGBUILD
+++ b/abs/core-testing/imlib2/PKGBUILD
@@ -3,7 +3,7 @@
# Contributor: Tom Newsom <Jeepster@gmx.co.uk>
pkgname=imlib2
pkgver=1.4.1
-pkgrel=1
+pkgrel=2
pkgdesc="Imlib2 is the successor to Imlib. It is NOT a newer version -- Imlib 2 can be installed alongside Imlib 1.x"
arch=(i686 x86_64)
url="http://sourceforge.net/projects/enlightenment"
diff --git a/abs/core-testing/jasper/PKGBUILD b/abs/core-testing/jasper/PKGBUILD
index ee60693..b841057 100644
--- a/abs/core-testing/jasper/PKGBUILD
+++ b/abs/core-testing/jasper/PKGBUILD
@@ -3,7 +3,7 @@
pkgname=jasper
pkgver=1.900.1
-pkgrel=1
+pkgrel=2
pkgdesc="a software-based implementation of the codec specified in the emerging JPEG-2000 Part-1 standard"
arch=(i686 x86_64)
url="http://www.ece.uvic.ca/~mdadams/jasper/"
diff --git a/abs/core-testing/kdelibs3/PKGBUILD b/abs/core-testing/kdelibs3/PKGBUILD
index 9e1e5d3..5331af0 100644
--- a/abs/core-testing/kdelibs3/PKGBUILD
+++ b/abs/core-testing/kdelibs3/PKGBUILD
@@ -4,14 +4,15 @@
pkgname=kdelibs3
pkgver=3.5.10
-pkgrel=2
+pkgrel=3
pkgdesc="KDE3 Core Libraries"
arch=('i686' 'x86_64')
url="http://www.kde.org"
license=('GPL' 'LGPL')
depends=('libxslt' 'pcre' 'libart-lgpl' 'alsa-lib'
'jasper' 'bzip2' 'openssl' 'libidn' 'libxrender'
- 'aspell' 'heimdal' 'acl' 'libtiff' 'qt3' 'ca-certificates')
+ 'aspell' 'heimdal' 'acl' 'libtiff' 'qt3' 'ca-certificates'
+ 'libjpeg')
makedepends=('pkgconfig' )
options=('libtool')
install='kdelibs3.install'
diff --git a/abs/core-testing/lcms/PKGBUILD b/abs/core-testing/lcms/PKGBUILD
index 7e40429..3cd6add 100644
--- a/abs/core-testing/lcms/PKGBUILD
+++ b/abs/core-testing/lcms/PKGBUILD
@@ -4,7 +4,7 @@
pkgname=lcms
pkgver=1.17
-pkgrel=2
+pkgrel=3
pkgdesc="Lightweight color management development library/engine"
arch=(i686 x86_64)
license=('CUSTOM')
diff --git a/abs/core-testing/libcups/PKGBUILD b/abs/core-testing/libcups/PKGBUILD
index d2a9d5a..9b31bd0 100644
--- a/abs/core-testing/libcups/PKGBUILD
+++ b/abs/core-testing/libcups/PKGBUILD
@@ -3,14 +3,14 @@
pkgname=libcups
pkgver=1.3.9
-pkgrel=3
+pkgrel=4
pkgdesc="The CUPS Printing System"
arch=('i686' 'x86_64')
license=('GPL')
url="http://www.cups.org/"
depends=('gnutls>=2.4.1' 'libtiff' 'libpng' 'heimdal>=1.2')
source=(ftp://ftp.easysw.com/pub/cups/${pkgver}/cups-${pkgver}-source.tar.bz2)
-md5sums=('cf63f451c356e6cabb08972d4d11c365')
+md5sums=('72430b36094cf587cf2e0087047d5643')
build() {
cd ${srcdir}/cups-${pkgver}
diff --git a/abs/core-testing/libdv/PKGBUILD b/abs/core-testing/libdv/PKGBUILD
index c535c2c..bd54a0d 100644
--- a/abs/core-testing/libdv/PKGBUILD
+++ b/abs/core-testing/libdv/PKGBUILD
@@ -4,10 +4,10 @@
pkgname=libdv
pkgver=1.0.0
-pkgrel=1
+pkgrel=2
pkgdesc="The Quasar DV codec (libdv) is a software codec for DV video"
arch=('i686' 'x86_64')
-depends=('popt')
+depends=('popt' 'gtk')
makedepends=('pkgconfig' 'gtk')
source=(http://downloads.sourceforge.net/$pkgname/$pkgname-$pkgver.tar.gz)
md5sums=('f895162161cfa4bb4a94c070a7caa6c7')
diff --git a/abs/core-testing/libjpeg/PKGBUILD b/abs/core-testing/libjpeg/PKGBUILD
index baedcd4..3f671b4 100644
--- a/abs/core-testing/libjpeg/PKGBUILD
+++ b/abs/core-testing/libjpeg/PKGBUILD
@@ -1,10 +1,10 @@
# $Id$
# Maintainer: Allan McRae <allan@archlinux.org>
-# Committer: Judd Vinet <jvinet@zeroflux.org>
+# Contributor: Judd Vinet <jvinet@zeroflux.org>
pkgname=libjpeg
-pkgver=6b
-pkgrel=6
+pkgver=7
+pkgrel=1
pkgdesc="Library of JPEG support functions"
arch=('i686' 'x86_64')
url="http://www.ijg.org/"
@@ -12,17 +12,17 @@ license=('custom')
depends=('glibc')
makedepends=('libtool')
options=(!libtool)
-source=(ftp://ftp.uu.net/graphics/jpeg/jpegsrc.v$pkgver.tar.gz)
-md5sums=('dbd5f3b47ed13132f04c685d608a7547')
+source=(http://www.ijg.org/files/jpegsrc.v7.tar.gz)
+md5sums=('382ef33b339c299b56baf1296cda9785')
build() {
cd $srcdir/jpeg-$pkgver
- cp /usr/share/libtool/config/config.{guess,sub} .
- sed -i "s#./libtool#libtool#" configure
./configure --prefix=/usr --enable-shared --enable-static
make || return 1
- mkdir -p $pkgdir/usr/{bin,lib,include,share/man/man1}
- make prefix=$pkgdir/usr mandir=$pkgdir/usr/share/man/man1 install
+ make prefix=$pkgdir/usr mandir=$pkgdir/usr/share/man install
+
+ # See FS#11116 - re-assess need with v7 release sometime...
install -m644 jpegint.h $pkgdir/usr/include
+
install -Dm644 README $pkgdir/usr/share/licenses/libjpeg/README
}
diff --git a/abs/core-testing/libmng/PKGBUILD b/abs/core-testing/libmng/PKGBUILD
index d0fd215..dc3958a 100644
--- a/abs/core-testing/libmng/PKGBUILD
+++ b/abs/core-testing/libmng/PKGBUILD
@@ -1,14 +1,14 @@
-# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# $Id$
# Contributor: Tom Newsom <Jeepster@gmx.co.uk>
# Maintainer: judd <jvinet@zeroflux.org>
pkgname=libmng
pkgver=1.0.10
-pkgrel=1
+pkgrel=3
pkgdesc="A collection of routines used to create and manipulate MNG format graphics files"
arch=('i686' 'x86_64')
url="http://www.libmng.com/"
license=('custom')
-depends=('zlib' 'libjpeg')
+depends=('zlib' 'libjpeg>=7')
options=(!libtool)
source=(http://dl.sourceforge.net/sourceforge/$pkgname/$pkgname-$pkgver.tar.gz)
md5sums=('a464ae7d679781beebdf7440d144b7bd')
diff --git a/abs/core-testing/libtiff/ChangeLog b/abs/core-testing/libtiff/ChangeLog
new file mode 100644
index 0000000..1a1c85b
--- /dev/null
+++ b/abs/core-testing/libtiff/ChangeLog
@@ -0,0 +1,8 @@
+2008-09-05 Eric Belanger <eric@archlinux.org>
+
+ * libtiff 3.8.2-4
+ * Applied patch to fix buffer underflow in LZW decoding (tiff-3.8.2-CVE-2008-2327.patch)
+ * Added license
+ * Added freeglut optdepends
+ * FHS man pages
+ * Added ChangeLog
diff --git a/abs/core-testing/libtiff/PKGBUILD b/abs/core-testing/libtiff/PKGBUILD
index 67cb689..51e106c 100644
--- a/abs/core-testing/libtiff/PKGBUILD
+++ b/abs/core-testing/libtiff/PKGBUILD
@@ -1,31 +1,43 @@
-# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
-# Maintainer: dorphell <dorphell@archlinux.org>
+# $Id$
+# Maintainer: Eric Belanger <eric@archlinux.org>
+# Contributor: dorphell <dorphell@archlinux.org>
pkgname=libtiff
pkgver=3.8.2
-pkgrel=3
+pkgrel=5
pkgdesc="Library for manipulation of TIFF images"
-arch=(i686 x86_64)
-depends=(libjpeg zlib)
-makedepends=(libgl freeglut libxmu libxi)
-options=(!libtool)
+arch=('i686' 'x86_64')
url="http://www.libtiff.org/"
-source=(ftp://ftp.remotesensing.org/pub/libtiff/tiff-${pkgver}.tar.gz
- tiff2pdf-octal-printf.patch
- tiffsplit-fname-overflow.patch
- CVE-2006-3459-3465.patch
- tiff2pdf-compression.patch)
+license=('custom')
+depends=('libjpeg>=7' 'zlib')
+makedepends=('libgl' 'freeglut' 'libxmu' 'libxi')
+optdepends=('freeglut: for using tiffgt')
+options=('!libtool')
+source=(ftp://ftp.remotesensing.org/pub/libtiff/tiff-${pkgver}.tar.gz \
+ tiff2pdf-octal-printf.patch \
+ tiffsplit-fname-overflow.patch \
+ CVE-2006-3459-3465.patch \
+ tiff2pdf-compression.patch \
+ tiff-3.8.2-CVE-2008-2327.patch)
md5sums=('fbb6f446ea4ed18955e2714934e5b698' 'd54368687d2645ffbbe6c2df384b11bf'\
'323352fd60a7bd3ffac8724c3c031669' '624d3067e6a4c0680767eb62253ea980'\
- 'b443ffca9d498bb3a88c17da0200025b')
+ 'b443ffca9d498bb3a88c17da0200025b' 'c2c2e22557d9c63011df5777dda6a86b')
+sha1sums=('549e67b6a15b42bfcd72fe17cda7c9a198a393eb'
+ 'c79245249634a121bfaff6cfecb763f72fe7f8eb'
+ 'dc86bb68c7831ff70ff01d952d553be9f986be46'
+ '85dc50a60a10025757e249d869dab7eb73ba6e3c'
+ '508751f55131356ea8a7e7c4994ffbc9bd881769'
+ '1da2ec6a47c0666cad9d07fb8427c1c75ca27b10')
build() {
- cd ${startdir}/src/tiff-${pkgver}
- patch -Np1 -i ${startdir}/src/tiff2pdf-octal-printf.patch || return 1
- patch -Np1 -i ${startdir}/src/tiffsplit-fname-overflow.patch || return 1
- patch -Np1 -i ${startdir}/src/CVE-2006-3459-3465.patch || return 1
- patch -Np1 -i ${startdir}/src/tiff2pdf-compression.patch || return 1
- ./configure --prefix=/usr --sysconfdir=/etc
+ cd ${srcdir}/tiff-${pkgver}
+ patch -Np1 -i ${srcdir}/tiff2pdf-octal-printf.patch || return 1
+ patch -Np1 -i ${srcdir}/tiffsplit-fname-overflow.patch || return 1
+ patch -Np1 -i ${srcdir}/CVE-2006-3459-3465.patch || return 1
+ patch -Np1 -i ${srcdir}/tiff2pdf-compression.patch || return 1
+ patch -Np1 -i ${srcdir}/tiff-3.8.2-CVE-2008-2327.patch || return 1
+ ./configure --prefix=/usr --sysconfdir=/etc --mandir=/usr/share/man || return 1
make || return 1
- make DESTDIR=${startdir}/pkg install
+ make DESTDIR=${pkgdir} install || return 1
+ install -D -m644 COPYRIGHT ${pkgdir}/usr/share/licenses/${pkgname}/LICENSE || return 1
}
diff --git a/abs/core-testing/libtiff/tiff-3.8.2-CVE-2008-2327.patch b/abs/core-testing/libtiff/tiff-3.8.2-CVE-2008-2327.patch
new file mode 100644
index 0000000..e6d74a6
--- /dev/null
+++ b/abs/core-testing/libtiff/tiff-3.8.2-CVE-2008-2327.patch
@@ -0,0 +1,64 @@
+Fixes security issues in libTIFF's handling of LZW-encoded
+images. The use of uninitialized data could lead to a buffer
+underflow and a crash or arbitrary code execution.
+
+CVE-ID: CVE-2008-2327
+Security bug: https://bugs.gentoo.org/show_bug.cgi?id=234080
+
+Index: tiff-3.8.2/libtiff/tif_lzw.c
+===================================================================
+--- tiff-3.8.2.orig/libtiff/tif_lzw.c
++++ tiff-3.8.2/libtiff/tif_lzw.c
+@@ -237,6 +237,12 @@ LZWSetupDecode(TIFF* tif)
+ sp->dec_codetab[code].length = 1;
+ sp->dec_codetab[code].next = NULL;
+ } while (code--);
++ /*
++ * Zero-out the unused entries
++ */
++ _TIFFmemset(&sp->dec_codetab[CODE_CLEAR], 0,
++ (CODE_FIRST-CODE_CLEAR)*sizeof (code_t));
++
+ }
+ return (1);
+ }
+@@ -408,12 +414,19 @@ LZWDecode(TIFF* tif, tidata_t op0, tsize
+ break;
+ if (code == CODE_CLEAR) {
+ free_entp = sp->dec_codetab + CODE_FIRST;
++ _TIFFmemset(free_entp, 0, (CSIZE-CODE_FIRST)*sizeof (code_t));
+ nbits = BITS_MIN;
+ nbitsmask = MAXCODE(BITS_MIN);
+ maxcodep = sp->dec_codetab + nbitsmask-1;
+ NextCode(tif, sp, bp, code, GetNextCode);
+ if (code == CODE_EOI)
+ break;
++ if (code == CODE_CLEAR) {
++ TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
++ "LZWDecode: Corrupted LZW table at scanline %d",
++ tif->tif_row);
++ return (0);
++ }
+ *op++ = (char)code, occ--;
+ oldcodep = sp->dec_codetab + code;
+ continue;
+@@ -604,12 +617,19 @@ LZWDecodeCompat(TIFF* tif, tidata_t op0,
+ break;
+ if (code == CODE_CLEAR) {
+ free_entp = sp->dec_codetab + CODE_FIRST;
++ _TIFFmemset(free_entp, 0, (CSIZE-CODE_FIRST)*sizeof (code_t));
+ nbits = BITS_MIN;
+ nbitsmask = MAXCODE(BITS_MIN);
+ maxcodep = sp->dec_codetab + nbitsmask;
+ NextCode(tif, sp, bp, code, GetNextCodeCompat);
+ if (code == CODE_EOI)
+ break;
++ if (code == CODE_CLEAR) {
++ TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
++ "LZWDecode: Corrupted LZW table at scanline %d",
++ tif->tif_row);
++ return (0);
++ }
+ *op++ = code, occ--;
+ oldcodep = sp->dec_codetab + code;
+ continue;
diff --git a/abs/core-testing/libwmf/PKGBUILD b/abs/core-testing/libwmf/PKGBUILD
index f1c3d17..4ec415d 100644
--- a/abs/core-testing/libwmf/PKGBUILD
+++ b/abs/core-testing/libwmf/PKGBUILD
@@ -3,7 +3,7 @@
# Contributor: FJ <joostef@gmail.com>
pkgname=libwmf
pkgver=0.2.8.4
-pkgrel=4
+pkgrel=5
pkgdesc="A library for reading vector images in Microsoft's native Windows Metafile Format (WMF)."
arch=(i686 x86_64)
url="http://wvware.sourceforge.net/libwmf.html"
diff --git a/abs/core-testing/lighttpd/PKGBUILD b/abs/core-testing/lighttpd/PKGBUILD
index ae192bb..d0811ae 100644
--- a/abs/core-testing/lighttpd/PKGBUILD
+++ b/abs/core-testing/lighttpd/PKGBUILD
@@ -3,16 +3,15 @@
pkgname=lighttpd
pkgver=1.4.20
-pkgrel=33
+pkgrel=35
pkgdesc='a secure, fast, compliant and very flexible web-server'
license=('custom')
arch=('i686' 'x86_64')
url="http://www.lighttpd.net/"
-depends=('pcre' 'openssl' 'zlib' 'bzip2' 'attr' 'libldap')
+depends=('pcre' 'openssl' 'zlib' 'bzip2' 'attr' 'libldap' 'lua')
makedepends=('fcgi' 'libmysqlclient' 'lua' 'libxml2' 'e2fsprogs' 'sqlite3' 'gdbm' 'pkgconfig')
optdepends=('libxml2: mod_webdav' \
'e2fsprogs: mod_webdav' \
- 'lua: mod_cml/mod_magnet' \
'libmysqlclient: mod_mysql_vhost' \
'sqlite3: mod_webdav' \
'gdbm: mod_trigger_b4_dl' \
diff --git a/abs/core-testing/lighttpd/lighttpd.conf b/abs/core-testing/lighttpd/lighttpd.conf
index e2c60da..7305133 100644
--- a/abs/core-testing/lighttpd/lighttpd.conf
+++ b/abs/core-testing/lighttpd/lighttpd.conf
@@ -94,6 +94,7 @@ mimetype.assign = (
".xml" => "text/xml",
".mpeg" => "video/mpeg",
".mpg" => "video/mpeg",
+ ".mp4" => "video/quicktime",
".mov" => "video/quicktime",
".qt" => "video/quicktime",
".avi" => "video/x-msvideo",
diff --git a/abs/core-testing/linhes-scripts/PKGBUILD b/abs/core-testing/linhes-scripts/PKGBUILD
index e939079..98a133c 100644
--- a/abs/core-testing/linhes-scripts/PKGBUILD
+++ b/abs/core-testing/linhes-scripts/PKGBUILD
@@ -3,7 +3,7 @@
pkgname=linhes-scripts
pkgver=1
-pkgrel=16
+pkgrel=17
pkgdesc="Various scripts that help to make LinHES, LinHES."
arch=('i686' 'x86_64')
license=('GPL2')
diff --git a/abs/core-testing/lirc/PKGBUILD b/abs/core-testing/lirc/PKGBUILD
index 30c5052..5406783 100644
--- a/abs/core-testing/lirc/PKGBUILD
+++ b/abs/core-testing/lirc/PKGBUILD
@@ -3,14 +3,14 @@
pkgname=lirc
pkgver=0.8.5CVS
-pkgrel=12
+pkgrel=14
_kernver=2.6.28-LinHES
pkgdesc="Linux Infrared Remote Control kernel modules for stock arch kernel"
arch=(i686 x86_64)
url="http://www.lirc.org/"
license=('GPL')
depends=('lirc-utils=0.8.5CVS' 'kernel26>=2.6.27' 'kernel26<2.6.29' 'iguanaIR')
-#makedepends=('help2man')
+makedepends=('python')
replaces=('lirc+pctv')
options=('!makeflags')
install=$pkgname.install
@@ -22,7 +22,8 @@ source=(http://www.blushingpenguin.com/mark/lmilk/lirc-0.8.5-CVS-pvr150.tar.bz2
lirc_mod_mce.patch
hw_commandir.c
hw_commandir.h
- dvicoIR.rules)
+ dvicoIR.rules
+ lirc.fdi)
build() {
# configure
@@ -67,8 +68,11 @@ build() {
rm $startdir/pkg/lib/modules/$_kernver/kernel/drivers/misc/commandir.ko
# Add a udev rule for the DVICO remote so that if there is more than
- # one hiddev device, the systm cant get confused.
+ # one hiddev device, the system cant get confused.
install -D -m644 $srcdir/dvicoIR.rules $pkgdir/etc/udev/rules.d/dvicoIR.rules
+
+ # Add the fdi file to prevent the Dvico dual 4 remotes from screwing up keyboard interaction.
+ install -D -m644 $srcdir/lirc.fdi $pkgdir/usr/share/hal/fdi/preprobe/20thirdparty/lirc.fdi
}
md5sums=('b96dae91b566143b3af433fa2714ec9a'
'1753acd774f50b638e6173d364de53fd'
@@ -78,4 +82,5 @@ md5sums=('b96dae91b566143b3af433fa2714ec9a'
'd299b696b007fc9b663a73cc1758a1ef'
'f059f4030afc682c9539a03bf837c1cf'
'4e698654cc44fc6c4163814acda5a7ee'
- 'd79400e2e3069b14039ca07d3317965c')
+ '9a3a6dc03647ee6674a166dfb884ddd6'
+ '664fb04b51396628300daf8befd0db77')
diff --git a/abs/core-testing/lirc/dvicoIR.rules b/abs/core-testing/lirc/dvicoIR.rules
index 5d6d066..ada5466 100644
--- a/abs/core-testing/lirc/dvicoIR.rules
+++ b/abs/core-testing/lirc/dvicoIR.rules
@@ -1,5 +1,15 @@
-# Added to get DVICO remote to be consistant device
+# This rule is for the Dvico Dual Digital 4 Rev 2. It has 2 IR modules
+# identified, only the first of which is connected to the receiver.
+# The KERNELS=="*-1" part of this rule makes sure that the first
+# device is the one that gets the symlink.
+KERNEL=="event*", \
+ KERNELS=="*-1", \
+ ATTRS{manufacturer}=="Dvico", \
+ ATTRS{idVendor}=="0fe9", \
+ ATTRS{idProduct}=="db98", \
+ SYMLINK="input/irremote"
+
+# This rule is for the older style USB DVICO remote dongles.
SUBSYSTEMS=="usb", KERNEL=="hiddev*", \
ATTRS{product}=="DVICO USB HID Remocon V1.00", \
SYMLINK+="usb/dvicoIR"
-
diff --git a/abs/core-testing/lirc/lirc.fdi b/abs/core-testing/lirc/lirc.fdi
new file mode 100644
index 0000000..7a8c8ad
--- /dev/null
+++ b/abs/core-testing/lirc/lirc.fdi
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<deviceinfo version="0.2">
+ <device>
+ <!-- This rule prevents the Dvico dual digital4 rev 2
+ remote input device from making your keyboard act wierd>
+ <match key="info.product" contains_ncase="IR-receiver inside an USB DVB receiver">
+ <merge key="info.ignore" type="bool">true</merge>
+ </match>
+ </device>
+</deviceinfo>
diff --git a/abs/core-testing/mjpegtools/PKGBUILD b/abs/core-testing/mjpegtools/PKGBUILD
index 4b85e30..425fa35 100644
--- a/abs/core-testing/mjpegtools/PKGBUILD
+++ b/abs/core-testing/mjpegtools/PKGBUILD
@@ -4,7 +4,7 @@
pkgname=mjpegtools
pkgver=1.9.0
-pkgrel=3
+pkgrel=4
pkgdesc="The mjpeg programs are a set of tools that can do recording of videos and playback, simple cut-and-paste editing and the MPEG compression of audio and video under Linux. "
arch=(i686 x86_64)
license=('GPL')
diff --git a/abs/core-testing/mplayer-wrapper/PKGBUILD b/abs/core-testing/mplayer-wrapper/PKGBUILD
index 82f1082..c64875d 100644
--- a/abs/core-testing/mplayer-wrapper/PKGBUILD
+++ b/abs/core-testing/mplayer-wrapper/PKGBUILD
@@ -1,6 +1,6 @@
pkgname=mplayer-wrapper
-pkgver=1
-pkgrel=1
+pkgver=1
+pkgrel=9
pkgdesc="wrapper for mplayer and mplayer derivatives"
arch=('i686' 'x86_64')
@@ -10,7 +10,12 @@ source=(mplayer-wrapper.pl)
license=('GPL2')
+install=mplayer-wrapper.install
build() {
+ LH_ROOT=/usr/LH
+ mkdir -p $startdir/pkg/$LH_ROOT/bin/
+
cd $startdir
- install -m0777 -D bin/* $startdir/pkg/usr/LH/bin/
+ # executables
+ install -m0755 -D *.pl $startdir/pkg/$LH_ROOT/bin/
}
diff --git a/abs/core-testing/mplayer-wrapper/bin/mplayer-resumer.pl b/abs/core-testing/mplayer-wrapper/bin/mplayer-resumer.pl
deleted file mode 100755
index c785a25..0000000
--- a/abs/core-testing/mplayer-wrapper/bin/mplayer-resumer.pl
+++ /dev/null
@@ -1,188 +0,0 @@
-#!/usr/bin/perl
-
-use Shell;
-use strict;
-use POSIX qw(floor);
-
-# Written by Bob Igo from the MythTV Store at http://MythiC.TV
-# Email: bob@stormlogic.com
-#
-# If you run into problems with this script, please send me email
-
-# PURPOSE:
-# --------------------------
-# This is a wrapper script to prove the concept of having MythTV
-# resume playback of previously-stopped video where you left off.
-# It's likely that a good solution will look different than this
-# initial code.
-
-# RATIONALE:
-# --------------------------
-# Watching 90% of a video and stopping causes you to return to the
-# beginning again the next time you watch it. Remembering where
-# you were in the video and resuming at that position is a much nicer
-# behavior for the user.
-#
-# By default, mplayer spits out timecode information that tells you
-# where you are in the video, to the tenth of a second. Mplayer also
-# supports a seek feature on the command-line. We can make use of these
-# features to write an mplayer wrapper that will remember the last
-# position in a video file and resume to it on playback.
-
-# PARAMETERS:
-# --------------------------
-# see print_usage() below
-
-# FILES:
-# --------------------------
-# $infile, the video to play
-# $resumefile, the video's resume file (see get_resume_filename() below)
-
-# KNOWN ISSUES:
-# --------------------------
-# Mplayer misreports the timecodes on .nuv MPEG-2 files. Currently, anything
-# captured via an HDTV tuner card and put into your /myth/video directory
-# will fail with this resumer.
-#
-# Current theories include the timecode having to do with the show's broadcast
-# time, recording time, or perhaps its upload time to the station that
-# broadcast it.
-
-# DESIGN LIMITATION:
-# -------------------------
-# If the video file to be played is on a read-only filesystem, or otherwise
-# lives in a location that cannot be written to, resume will fail. This is
-# because the current implementation uses a file parallel to the video file
-# to store the timecode.
-#
-
-# CHANGE LOG:
-# 5/3/2006
-# Added last time started checking.
-# If this script is restarted within $tdiff (default 5 seconds)
-# then it will delete the file used to keep track of the videos
-# resume position.
-
-
-my $infile;
-my $resumefile;
-my $mplayer_parameters;
-my $fudge_factor=2; # number of additional seconds to skip back before playback
-my $tnow; # Time now.
-my $tprev; # Time the prog was last started.
- # Returned from the modification time of the xx.resume file.
-my $tdiff=5; # How many seconds before we should start from
- # the beginning of the movie
-#DEBUG
-#open(DEBUG,">/tmp/debug") || die "unable to open debug file";
-
-sub init () {
- $tnow = time();
- $infile = @ARGV[$#ARGV];
-
- $resumefile = &get_resume_filename($infile);
- # This returns the 9th element of the 13 element array
- # created by the stat function.
- $tprev = (stat ($resumefile))[9];
- # if this file is restarted in less than 5 seconds then
- # remove the .resume file
- if ( ($tnow - $tprev) < $tdiff ) {
- unlink($resumefile);
- }
-
- $mplayer_parameters = join(' ',@ARGV[0..$#ARGV-1]);
-}
-
-&init();
-&save_time_offset(&mplayer($mplayer_parameters,$infile), $resumefile);
-
-#close(DEBUG);
-
-# For $pathname, return $path.$filename.resume
-sub get_resume_filename () {
- my($pathname)=@_;
-
- my $idx = rindex($pathname,"/");
-
- if ($idx == -1) { # There was no "/" in $pathname
- return ".".$pathname.".resume";
- } else {
- # Now we need to split out the path from the filename.
- my $path = substr($pathname,0,$idx+1);
- my $filename = substr($pathname,$idx+1);
- return "$path.$filename.resume";
- }
-}
-
-# Calls mplayer and returns the last known video position
-sub mplayer () {
- my($parameters,$infile)=@_;
- my $seconds=0;
- my $timecode=&get_time_offset($infile);
- my $command = "mplayer $parameters -ss $timecode \"$infile\" 2>&1 2>/dev/null |";
-
- open(SHELL, $command);
- # The kind of line we care about looks like this example:
- # A:1215.2 V:1215.2 A-V: 0.006 ct: 0.210 207/201 13% 0% 1.9% 0 0 68%
- # But all we care to look at is the first number.
-
- while (<SHELL>) {
- #print DEBUG $_;
- if (m/A: *[0-9]+\.[0-9]/) { # See if this line has timecodes on it
- my $last_timecode_line = &extract_last_timecode_line($_);
- if ($last_timecode_line =~ m/ *([0-9]+\.[0-9]) V/) {
- $seconds=$1;
- }
- }
- }
- close(SHELL);
-
- return $seconds;
-
- sub extract_last_timecode_line () {
- my ($line)=@_;
- my @lines=split('A:',$line);
- return @lines[$#lines-1];
- }
-}
-
-# Save the last known video position
-sub save_time_offset () {
- my($seconds, $resumefile)=@_;
-
- open(RESUMEFILE, ">$resumefile") || die "Unable to open $resumefile for writing";
- print RESUMEFILE "$seconds";
- close(RESUMEFILE);
-}
-
-# returns the number of seconds corresponding to the last known video position,
-# in hh:mm:ss format, compatible with the "-ss" parameter to mplayer
-sub get_time_offset () {
- my($videofile)=@_;
- my($resumefile) = &get_resume_filename($videofile);
- my $seconds=0;
- my $timecode;
-
- open(RESUMEFILE, "<$resumefile") || return "00:00:00";
- while(<RESUMEFILE>) {
- $seconds=$_;
- }
- close(RESUMEFILE);
-
- my $hours = floor($seconds/3600);
- $seconds = $seconds - $hours*3600;
-
- my $minutes = floor($seconds/60);
- $seconds = int($seconds - $minutes*60) - $fudge_factor;
-
- $timecode = sprintf "%02d:%02d:%02d",$hours,$minutes,$seconds;
-# print "TIMECODE: $timecode\n";
- return $timecode;
-}
-
-sub print_usage () {
- print "USAGE:\n";
- print "\t",$ARGV[0], "[mplayer parameters] video_file\n";
- print "\t","e.g. ",$ARGV[0], "-fs -zoom my.mpg\n";
- print "\t","Version 5/3/2006\n";
-}
diff --git a/abs/core-testing/mplayer-wrapper/bin/mplayer-wrapper.pl b/abs/core-testing/mplayer-wrapper/bin/mplayer-wrapper.pl
deleted file mode 100755
index 583786d..0000000
--- a/abs/core-testing/mplayer-wrapper/bin/mplayer-wrapper.pl
+++ /dev/null
@@ -1,110 +0,0 @@
-#!/usr/bin/perl
-
-use Shell;
-use strict;
-use POSIX qw(floor);
-
-# Written by Bob Igo from the MythTV Store at http://MythiC.TV
-# including some original code and contributions from Nick C.
-# and graysky.
-# Email: bob@stormlogic.com
-#
-# If you run into problems with this script, please send me email
-
-# PURPOSE:
-# --------------------------
-# This is a wrapper script that tries to find the best parameters
-# for calling an underlying video player. The outer layer determines
-# the best playback parameters, while the inner layer picks the best
-# player to call.
-
-# RATIONALE:
-# --------------------------
-# Default video playback options are not optimal on all hardware or
-# for all video types. In addition, common video players do not
-# offer to bookmark video so that you can resume where you left off.
-# Both of these problems can be addressed by this wrapper.
-
-# PARAMETERS:
-# --------------------------
-# The same parameters you'd use for mplayer, some of which may be
-# translated automatically for use with smplayer.
-
-# FILES:
-# --------------------------
-# $mediafile, the file to play
-
-sub run () {
- my $mediafile = @ARGV[$#ARGV];
- my $player = &pick_player();
-
- my $player_parameters = join(' ',
- &translate_parameters($player,@ARGV[0..$#ARGV-1]),
- &dynamic_parameters($mediafile));
- &player($player,$player_parameters,$mediafile);
-}
-
-&run();
-
-# Translates any parameters into ones that will be compatible with the given player.
-sub translate_parameters() {
- my($player,@parameters)=@_;
-
- if ($player eq "smplayer") {
- # Stupidly, smplayer uses a different set of command-line parameters than generic
- # mplayer, so we need to translate mplayer-centric ones into the few that are
- # available in smplayer-ese.
- my %smplayer_parameter_translation_array = (
- "-fs" => "-fullscreen",
- "-zoom" => " "
- );
-
- sub translate() {
- my($flag)=@_;
- return $smplayer_parameter_translation_array{$flag};
- }
-
- return map(&translate($_), @parameters);
- } else {
- return @parameters;
- }
-}
-
-# Returns an array of dynamic parameters based in part on the media.
-sub dynamic_parameters () {
- my($mediafile)=@_;
- return(); # ??? empty for now; further development required
-}
-
-# Find the best player for use on this system. The script prefers smplayer,
-# which has built-in bookmarking, falling back to mplayer-resumer.pl, which
-# implements bookmarking as an mplayer wrapper, if smplayer cannot be found.
-# Finally, if no bookmarking players can be found, a barebones mplayer is used.
-sub pick_player () {
- my @possible_players = ("smplayer", "mplayer-resumer.pl", "mplayer");
- my $command;
- my $candidate_player;
- foreach (@possible_players) {
- $candidate_player = $_;
- $command = "which $candidate_player |";
- open(SHELL, $command);
- if (<SHELL>) {
- #print "player $candidate_player : $_\n";
- return $candidate_player;
- }
- close(SHELL);
- }
-}
-
-# Calls player
-sub player () {
- my($player,$parameters,$mediafile)=@_;
- my $command = "$player $parameters \"$mediafile\" 2>&1 2>/dev/null |";
-
- #print "DEBUG: command is:\n$command\n";
- open(SHELL, $command);
- while (<SHELL>) {
- print $_;
- }
- close(SHELL);
-}
diff --git a/abs/core-testing/mplayer-wrapper/mplayer-wrapper.install b/abs/core-testing/mplayer-wrapper/mplayer-wrapper.install
new file mode 100644
index 0000000..18f1b75
--- /dev/null
+++ b/abs/core-testing/mplayer-wrapper/mplayer-wrapper.install
@@ -0,0 +1,38 @@
+# This is a default template for a post-install scriptlet. You can
+# remove any functions you don't need (and this header).
+
+# arg 1: the new package version
+pre_install() {
+/bin/true
+}
+
+# arg 1: the new package version
+post_install() {
+/bin/true
+}
+
+# arg 1: the new package version
+# arg 2: the old package version
+pre_upgrade() {
+ /bin/true
+}
+
+# arg 1: the new package version
+# arg 2: the old package version
+post_upgrade() {
+ /bin/true
+}
+
+# arg 1: the old package version
+pre_remove() {
+ /bin/true
+}
+
+# arg 1: the old package version
+post_remove() {
+ /bin/true
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core-testing/mplayer-wrapper/mplayer-wrapper.pl b/abs/core-testing/mplayer-wrapper/mplayer-wrapper.pl
new file mode 100755
index 0000000..da0e838
--- /dev/null
+++ b/abs/core-testing/mplayer-wrapper/mplayer-wrapper.pl
@@ -0,0 +1,212 @@
+#!/usr/bin/perl
+
+use Shell;
+use strict;
+use POSIX qw(floor);
+
+# Written by Bob Igo from the MythTV Store at http://MythiC.TV
+# including some original code and contributions from Nick C.
+# and graysky.
+# Email: bob@stormlogic.com
+#
+# If you run into problems with this script, please send me email
+
+# PURPOSE:
+# --------------------------
+# This is a wrapper script that tries to find the best parameters
+# for calling an underlying video player. The outer layer determines
+# the best playback parameters, while the inner layer picks the best
+# player to call.
+
+# RATIONALE:
+# --------------------------
+# Default video playback options are not optimal on all hardware or
+# for all video types. In addition, common video players do not
+# offer to bookmark video so that you can resume where you left off.
+# Both of these problems can be addressed by this wrapper.
+
+# PARAMETERS:
+# --------------------------
+# The same parameters you'd use for mplayer, some of which may be
+# translated automatically for use with smplayer.
+
+# FILES:
+# --------------------------
+# $mediafile, the file to play
+
+sub run () {
+ my $mediafile = @ARGV[$#ARGV];
+ my $player = &pick_player();
+
+ # mplayer evaluates configuration options in the following order, with
+ # later-evaluated options overriding earlier-evaluated ones, both within
+ # a given configuration location and between them:
+ # 1) system-wide configuration/profiles, /etc/mplayer/mplayer.conf
+ # 2) user-specific configuration/profiles, ~/.mplayer/config
+ # 3) commandline configuration parameters
+ # 4) file-specific configuration, ~/.mplayer/[filename].conf
+ # 5) any nonstandard configuration file, included via "-include" parameter
+ #
+ # This script's dynamic configuration options fall in at 2.5 above,
+ # so commandline options, file-specific configuration options,
+ # or a nonstandard configuration file will override the options that
+ # the script creates, but system-wide and user-specific configuration
+ # will be overridden by the dynamic configuration options.
+ #
+ # This is sub-optimal, as the easiest way for a user to compensate for
+ # a misfiring configuration rule would be to override it in a configuration
+ # file. Instead, they will have to change the way they run this script.
+
+ my $player_parameters = join(' ',
+ &dynamic_parameters($mediafile),
+ &translate_parameters($player,@ARGV[0..$#ARGV-1]));
+ &player($player,$player_parameters,$mediafile);
+}
+
+&run();
+
+# Translates any parameters into ones that will be compatible with the given player.
+sub translate_parameters() {
+ my($player,@parameters)=@_;
+
+ if ($player eq "smplayer") {
+ # Stupidly, smplayer uses a different set of command-line parameters than generic
+ # mplayer, so we need to translate mplayer-centric ones into the few that are
+ # available in smplayer-ese.
+ my %smplayer_parameter_translation_array = (
+ "-fs" => "-fullscreen",
+ "-zoom" => " "
+ );
+
+ sub translate() {
+ my($flag)=@_;
+ return $smplayer_parameter_translation_array{$flag};
+ }
+
+ return map(&translate($_), @parameters);
+ } else {
+ # currently, all other players used by this wrapper work with mplayer parameters
+ return @parameters;
+ }
+}
+
+# Returns an array of dynamic parameters based on the media type,
+# the presence of special playback decoding hardware, and the
+# general capability of the CPU.
+sub dynamic_parameters () {
+ my($mediafile)=@_;
+ my @parameters = ();
+ my $codec="";
+ my %vdpau_supported_modes=();
+
+ # See if the GPU and driver support vdpau for GPU-based accelerated decoding
+ my $command="vdpinfo |";
+ # On supported hardware, vdpinfo produces relevant results that look something like this (see
+ # http://www.phoronix.com/forums/showthread.php?t=14493 for additional details, or run
+ # vdpinfo on vdpau-capable hardware yourself):
+ #
+ #MPEG1 0 2 4096 4096
+ #MPEG2_SIMPLE 3 2 4096 4096
+ #MPEG2_MAIN 3 2 4096 4096
+ #H264_MAIN 41 4 4096 4096
+ #H264_HIGH 41 4 4096 4096
+
+ my $grabbing_modes=0;
+ open(SHELL, $command);
+ while (<SHELL>) {
+ chop;
+ if (m/Decoder Capabilities/gi) {
+ $grabbing_modes=1;
+ #print "*** MODES START NOW"
+ } elsif (m/Output Surface/gi) {
+ $grabbing_modes=0;
+ } elsif ($grabbing_modes) {
+ if (m/[A-Z]+[0-9]+/g) {
+ s/(_.*)//g;
+ #print "*** GRABBED MODE $_\n";
+ $vdpau_supported_modes{$_} = 1;
+ }
+ }
+ }
+ close(SHELL);
+
+ # figure out what codec the video uses
+ my $command="mplayer -identify -frames 0 \"$mediafile\" | grep ID_VIDEO_CODEC | cut -c 16- |";
+ open(SHELL, $command);
+ while (<SHELL>) {
+ chop;
+ $codec = $_;
+ #print "DEBUG: codec is $codec\n";
+ }
+ close(SHELL);
+
+ # We should use vdpau if it's available and helps with the codec we need to decode.
+ if ($codec eq "ffh264") { # h.264
+ if ($vdpau_supported_modes{"H264"}) {
+ push(@parameters, "-vo vdpau");
+ push(@parameters, "-vc ffh264vdpau");
+ }
+ } elsif ($codec eq "ffmpeg2") { # MPEG2
+ if ($vdpau_supported_modes{"MPEG2"}) {
+ push(@parameters, "-vo vdpau");
+ push(@parameters, "-vc ffmpeg12vdpau");
+ }
+
+ # ??? although MPEG1 is rare, it seems as if it should work with -vc ffmpeg12vdpau as well
+
+ # problems have been reported with WMV3 support
+
+# } elsif ($codec eq "ffwmv3") { # WMV3
+# if ($vdpau_supported) {
+# push(@parameters, "-vo vdpau");
+# push(@parameters, "-vc ffwmv3vdpau");
+# }
+ # problems have been reported with WVC1 support
+
+# } elsif ($codec eq "ffvc1") { # WVC1
+# if ($vdpau_supported) {
+# push(@parameters, "-vo vdpau");
+# push(@parameters, "-vc ffvc1vdpau");
+# }
+
+ } else {
+ push(@parameters, "-vo xv,x11,");
+ push(@parameters, "-vc ,");
+ push(@parameters, "-vf pp=lb,"); # doesn't actually work with vdpau, but doesn't break anything
+ }
+ return(@parameters);
+}
+
+# Find the best player for use on this system. The script prefers smplayer,
+# which has built-in bookmarking, falling back to mplayer-resumer.pl, which
+# implements bookmarking as an mplayer wrapper, if smplayer cannot be found.
+# Finally, if no bookmarking players can be found, a barebones mplayer is used.
+sub pick_player () {
+ #my @possible_players = ("smplayer", "mplayer-resumer.pl", "mplayer");
+ my @possible_players = ("mplayer-resumer.pl", "mplayer");
+ my $command;
+ my $candidate_player;
+ foreach (@possible_players) {
+ $candidate_player = $_;
+ $command = "which $candidate_player |";
+ open(SHELL, $command);
+ if (<SHELL>) {
+ #print "player $candidate_player : $_\n";
+ return $candidate_player;
+ }
+ close(SHELL);
+ }
+}
+
+# Calls player
+sub player () {
+ my($player,$parameters,$mediafile)=@_;
+ my $command = "$player $parameters \"$mediafile\" 2>&1 |";
+
+ print "DEBUG: $0's player command is: *** $command ***\n";
+ open(SHELL, $command);
+ while (<SHELL>) {
+ print $_;
+ }
+ close(SHELL);
+}
diff --git a/abs/core-testing/mplayer/PKGBUILD b/abs/core-testing/mplayer/PKGBUILD
index ad7915e..0b670c1 100644
--- a/abs/core-testing/mplayer/PKGBUILD
+++ b/abs/core-testing/mplayer/PKGBUILD
@@ -1,6 +1,6 @@
pkgname=mplayer
-pkgver=29134
-pkgrel=13
+pkgver=29438
+pkgrel=1
pkgdesc="Famous multimedia player, dev. version, without its GUI"
arch=('i686' 'x86_64')
url="http://www.mplayerhq.hu/"
@@ -8,7 +8,7 @@ license=('GPL')
depends=('libxxf86dga' 'libxv' 'libmad' 'giflib' 'cdparanoia' 'gtk2'
'sdl' 'lame' 'libtheora' 'xvidcore' 'zlib' 'libmng' 'libxss'
'libgl' 'smbclient' 'aalib' 'x264>=20090108' 'faac' 'lirc-utils'
- 'ttf-dejavu' 'fribidi' 'libmng' 'libxfont')
+ 'ttf-dejavu' 'fribidi' 'libmng' 'libxfont' 'libjpeg')
license=('GPL')
makedepends=('libcaca' 'unzip' 'live-media' 'libdca' 'subversion' 'nvidia-utils')
diff --git a/abs/core-testing/mythtv/stable/mythbrowser/PKGBUILD b/abs/core-testing/mythtv/stable/mythbrowser/PKGBUILD
index 04d3293..51a27d2 100644
--- a/abs/core-testing/mythtv/stable/mythbrowser/PKGBUILD
+++ b/abs/core-testing/mythtv/stable/mythbrowser/PKGBUILD
@@ -4,12 +4,12 @@
pkgname=mythbrowser
pkgver=0.21
-pkgrel=5
+pkgrel=6
pkgdesc="Mini web browser for MythTV"
arch=('i686' 'x86_64')
url="http://www.mythtv.org"
license=('GPL')
-depends=("mythtv>=${pkgver}" 'wget' 'libxvmc' 'kdelibs3')
+depends=("mythtv>=${pkgver}" 'wget' 'libxvmc' 'kdelibs3' 'qt3')
groups=('mythtv-extras')
options=('!makeflags')
source=("ftp://ftp.knoppmyth.net/R6/sources/mythplugins-$pkgver-fixes.tar.bz2")
diff --git a/abs/core-testing/mythtv/stable/mythmusic/PKGBUILD b/abs/core-testing/mythtv/stable/mythmusic/PKGBUILD
index c051a3b..b422f34 100644
--- a/abs/core-testing/mythtv/stable/mythmusic/PKGBUILD
+++ b/abs/core-testing/mythtv/stable/mythmusic/PKGBUILD
@@ -4,7 +4,7 @@
pkgname=mythmusic
pkgver=0.21
-pkgrel=11
+pkgrel=12
pkgdesc="Music playing plugin for MythTV"
arch=('i686' 'x86_64')
url="http://www.mythtv.org"
diff --git a/abs/core-testing/mythtv/stable/mythtv/PKGBUILD b/abs/core-testing/mythtv/stable/mythtv/PKGBUILD
index e6a84ac..cfbba49 100644
--- a/abs/core-testing/mythtv/stable/mythtv/PKGBUILD
+++ b/abs/core-testing/mythtv/stable/mythtv/PKGBUILD
@@ -1,13 +1,15 @@
pkgname=mythtv
pkgver=0.21
-pkgrel=73
+pkgrel=76
pkgdesc="A Homebrew PVR project"
arch=('i686' 'x86_64')
depends=('bash' 'mysql-clients>=5.0' 'qt3' 'lame' 'lirc-utils' 'ffmpeg' \
'libxvmc' 'libavc1394' 'libdc1394' 'libiec61883' 'perl-net-upnp' 'perl-time-format')
backup=(etc/mythtv/mythbackend.conf etc/mythtv/mysql.txt usr/share/mythtv/is.xmlusr/share/mythtv/media_settings.xml )
source=(ftp://ftp.knoppmyth.net/R6/sources/${pkgname}-${pkgver}-fixes.tar.bz2 \
- mythbackend myththemedmenu.cpp.patch myththemedmenu.h.patch smolt_jump.patch pretty gnome_screensaver.patch mpegpspatch mythbackend.lr mythfrontend.lr)
+ mythbackend myththemedmenu.cpp.patch myththemedmenu.h.patch smolt_jump.patch pretty gnome_screensaver.patch mpegpspatch mythbackend.lr mythfrontend.lr
+ changeset-20877.patch)
+
#md5sums=('e316ed18d7ac837cf8c4af54b1478793' '7ef6de58240e7aad389a0b13d91b1cf6'\
# 'a0ecb7f476cb71c0c1ac90d349fc7695')
@@ -33,6 +35,10 @@ build() {
# cd libs/libavformat
# patch -p0 < $startdir/src/mpegpspatch
# cd -
+
+# Remove the hdhomerun changeset 20877 that prevents things from compiling.
+ patch -p3 < ../changeset-20877.patch
+
. /etc/profile.d/qt3.sh
# use QT3 qmake
diff --git a/abs/core-testing/mythtv/stable/mythtv/changeset-20877.patch b/abs/core-testing/mythtv/stable/mythtv/changeset-20877.patch
new file mode 100644
index 0000000..b92f0c1
--- /dev/null
+++ b/abs/core-testing/mythtv/stable/mythtv/changeset-20877.patch
@@ -0,0 +1,5910 @@
+diff -aur branches/release-0-21-fixes/mythtv/libs/libmythtv/hdhomerun/Makefile src/mythtv-0.21/libs/libmythtv/hdhomerun/Makefile
+--- branches/release-0-21-fixes/mythtv/libs/libmythtv/hdhomerun/Makefile 2009-07-13 15:44:12.000000000 +0930
++++ src/mythtv-0.21/libs/libmythtv/hdhomerun/Makefile 2009-01-09 13:14:56.000000000 +1030
+@@ -1,52 +1,21 @@
+-LIBSRCS += hdhomerun_pkt.c
+-LIBSRCS += hdhomerun_debug.c
+-LIBSRCS += hdhomerun_discover.c
+-LIBSRCS += hdhomerun_channels.c
+-LIBSRCS += hdhomerun_channelscan.c
+-LIBSRCS += hdhomerun_control.c
+-LIBSRCS += hdhomerun_video.c
+-LIBSRCS += hdhomerun_device.c
+-LIBSRCS += hdhomerun_device_selector.c
+
+-CC := $(CROSS_COMPILE)gcc
+-STRIP := $(CROSS_COMPILE)strip
++SRCS += hdhomerun_pkt.c
++SRCS += hdhomerun_discover.c
++SRCS += hdhomerun_control.c
++SRCS += hdhomerun_video.c
++SRCS += hdhomerun_device.c
++SRCS += hdhomerun_config.c
+
+ CFLAGS += -Wall -O2 -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wpointer-arith
+-LDFLAGS += -lpthread
+-SHARED = -shared -Wl,-soname,libhdhomerun$(LIBEXT)
+
+-ifeq ($(OS),Windows_NT)
+- BINEXT := .exe
+- LIBEXT := .dll
+- LDFLAGS += -liphlpapi
+-else
+- LIBEXT := .so
+- ifneq ($(findstring solaris,$(shell echo $$OSTYPE)),)
+- LDFLAGS += -lns -lsocket
+- endif
+- ifneq ($(findstring darwin,$(shell echo $$OSTYPE)),)
+- CFLAGS += -arch i386 -arch ppc
+- LIBEXT := .dylib
+- SHARED := -dynamiclib -install_name libhdhomerun$(LIBEXT)
+- endif
+-endif
+-
+-all : hdhomerun_config$(BINEXT) libhdhomerun$(LIBEXT)
+-
+-hdhomerun_config$(BINEXT) : hdhomerun_config.c $(LIBSRCS)
+- $(CC) $(CFLAGS) $+ $(LDFLAGS) -o $@
+- $(STRIP) $@
+-
+-libhdhomerun$(LIBEXT) : $(LIBSRCS)
+- $(CC) $(CFLAGS) -fPIC -DDLL_EXPORT $(SHARED) $+ $(LDFLAGS) -o $@
++hdhomerun_config : $(SRCS)
++ gcc $(CFLAGS) $(SRCS) -lpthread -o $@
++ strip $@
++
++hdhomerun_config.exe : $(SRCS)
++ gcc $(CFLAGS) $(SRCS) -lpthread -liphlpapi -o $@
++ strip $@
+
+ clean :
+- -rm -f hdhomerun_config$(BINEXT)
+- -rm -f libhdhomerun$(LIBEXT)
+-
+-distclean : clean
+-
+-%:
+- @echo "(ignoring request to make $@)"
+-
+-.PHONY: all list clean distclean
++ rm -f hdhomerun_config
++ rm -f hdhomerun_config.exe
+diff -aur branches/release-0-21-fixes/mythtv/libs/libmythtv/hdhomerun/hdhomerun.h src/mythtv-0.21/libs/libmythtv/hdhomerun/hdhomerun.h
+--- branches/release-0-21-fixes/mythtv/libs/libmythtv/hdhomerun/hdhomerun.h 2009-07-13 15:44:12.000000000 +0930
++++ src/mythtv-0.21/libs/libmythtv/hdhomerun/hdhomerun.h 2009-01-09 13:14:56.000000000 +1030
+@@ -1,14 +1,12 @@
+-#ifndef __HDHOMERUN_INCLUDES__
+-#define __HDHOMERUN_INCLUDES__
+ /*
+- * hdhomerun.h
++ * hdhomerun_device.h
+ *
+- * Copyright © 2006-2008 Silicondust USA Inc. <www.silicondust.com>.
++ * Copyright © 2006 Silicondust Engineering Ltd. <www.silicondust.com>.
+ *
+- * This library is free software; you can redistribute it and/or
++ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+- * version 3 of the License, or (at your option) any later version.
++ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+@@ -16,33 +14,13 @@
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+- *
+- * As a special exception to the GNU Lesser General Public License,
+- * you may link, statically or dynamically, an application with a
+- * publicly distributed version of the Library to produce an
+- * executable file containing portions of the Library, and
+- * distribute that executable file under terms of your choice,
+- * without any of the additional requirements listed in clause 4 of
+- * the GNU Lesser General Public License.
+- *
+- * By "a publicly distributed version of the Library", we mean
+- * either the unmodified Library as distributed by Silicondust, or a
+- * modified version of the Library that is distributed under the
+- * conditions defined in the GNU Lesser General Public License.
++ * License along with this library; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+ #include "hdhomerun_os.h"
+-#include "hdhomerun_types.h"
+ #include "hdhomerun_pkt.h"
+-#include "hdhomerun_debug.h"
+ #include "hdhomerun_discover.h"
+ #include "hdhomerun_control.h"
+ #include "hdhomerun_video.h"
+-#include "hdhomerun_channels.h"
+-#include "hdhomerun_channelscan.h"
+ #include "hdhomerun_device.h"
+-#include "hdhomerun_device_selector.h"
+-
+-#endif /* __HDHOMERUN_INCLUDES__ */
+-
+Only in branches/release-0-21-fixes/mythtv/libs/libmythtv/hdhomerun: hdhomerun_channels.c
+Only in branches/release-0-21-fixes/mythtv/libs/libmythtv/hdhomerun: hdhomerun_channels.h
+Only in branches/release-0-21-fixes/mythtv/libs/libmythtv/hdhomerun: hdhomerun_channelscan.c
+Only in branches/release-0-21-fixes/mythtv/libs/libmythtv/hdhomerun: hdhomerun_channelscan.h
+diff -aur branches/release-0-21-fixes/mythtv/libs/libmythtv/hdhomerun/hdhomerun_config.c src/mythtv-0.21/libs/libmythtv/hdhomerun/hdhomerun_config.c
+--- branches/release-0-21-fixes/mythtv/libs/libmythtv/hdhomerun/hdhomerun_config.c 2009-07-13 15:44:12.000000000 +0930
++++ src/mythtv-0.21/libs/libmythtv/hdhomerun/hdhomerun_config.c 2009-01-09 13:14:56.000000000 +1030
+@@ -1,12 +1,12 @@
+ /*
+ * hdhomerun_config.c
+ *
+- * Copyright © 2006-2008 Silicondust USA Inc. <www.silicondust.com>.
++ * Copyright © 2006 Silicondust Engineering Ltd. <www.silicondust.com>.
+ *
+- * This library is free software; you can redistribute it and/or
++ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+- * version 3 of the License, or (at your option) any later version.
++ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+@@ -14,34 +14,12 @@
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+- *
+- * As a special exception to the GNU Lesser General Public License,
+- * you may link, statically or dynamically, an application with a
+- * publicly distributed version of the Library to produce an
+- * executable file containing portions of the Library, and
+- * distribute that executable file under terms of your choice,
+- * without any of the additional requirements listed in clause 4 of
+- * the GNU Lesser General Public License.
+- *
+- * By "a publicly distributed version of the Library", we mean
+- * either the unmodified Library as distributed by Silicondust, or a
+- * modified version of the Library that is distributed under the
+- * conditions defined in the GNU Lesser General Public License.
++ * License along with this library; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+ #include "hdhomerun.h"
+
+-/*
+- * The console output format should be set to UTF-8, however in XP and Vista this breaks batch file processing.
+- * Attempting to restore on exit fails to restore if the program is terminated by the user.
+- * Solution - set the output format each printf.
+- */
+-#if defined(__WINDOWS__)
+-#define printf console_printf
+-#define vprintf console_vprintf
+-#endif
+-
+ static const char *appname;
+
+ struct hdhomerun_device_t *hd;
+@@ -53,8 +31,7 @@
+ printf("\t%s <id> get help\n", appname);
+ printf("\t%s <id> get <item>\n", appname);
+ printf("\t%s <id> set <item> <value>\n", appname);
+- printf("\t%s <id> scan <tuner> [<filename>]\n", appname);
+- printf("\t%s <id> save <tuner> <filename>\n", appname);
++ printf("\t%s <id> scan <tuner> <starting channel>\n", appname);
+ printf("\t%s <id> upgrade <filename>\n", appname);
+ return -1;
+ }
+@@ -91,29 +68,10 @@
+ return FALSE;
+ }
+
+-static uint32_t parse_ip_addr(const char *str)
+-{
+- unsigned long a[4];
+- if (sscanf(str, "%lu.%lu.%lu.%lu", &a[0], &a[1], &a[2], &a[3]) != 4) {
+- return 0;
+- }
+-
+- return (uint32_t)((a[0] << 24) | (a[1] << 16) | (a[2] << 8) | (a[3] << 0));
+-}
+-
+-static int discover_print(char *target_ip_str)
++static int discover_print(void)
+ {
+- uint32_t target_ip = 0;
+- if (target_ip_str) {
+- target_ip = parse_ip_addr(target_ip_str);
+- if (target_ip == 0) {
+- fprintf(stderr, "invalid ip address: %s\n", target_ip_str);
+- return -1;
+- }
+- }
+-
+ struct hdhomerun_discover_device_t result_list[64];
+- int count = hdhomerun_discover_find_devices_custom(target_ip, HDHOMERUN_DEVICE_TYPE_TUNER, HDHOMERUN_DEVICE_ID_WILDCARD, result_list, 64);
++ int count = hdhomerun_discover_find_devices(HDHOMERUN_DEVICE_TYPE_TUNER, result_list, 64);
+ if (count < 0) {
+ fprintf(stderr, "error sending discover request\n");
+ return -1;
+@@ -136,6 +94,32 @@
+ return count;
+ }
+
++static bool_t parse_device_id_str(const char *s, uint32_t *pdevice_id, uint32_t *pdevice_ip)
++{
++ unsigned long a[4];
++ if (sscanf(s, "%lu.%lu.%lu.%lu", &a[0], &a[1], &a[2], &a[3]) == 4) {
++ *pdevice_id = HDHOMERUN_DEVICE_ID_WILDCARD;
++ *pdevice_ip = (uint32_t)((a[0] << 24) | (a[1] << 16) | (a[2] << 8) | (a[3] << 0));
++ return TRUE;
++ }
++
++ unsigned long device_id_raw;
++ if (sscanf(s, "%lx", &device_id_raw) != 1) {
++ fprintf(stderr, "invalid device id: %s\n", s);
++ return FALSE;
++ }
++
++ uint32_t device_id = (uint32_t)device_id_raw;
++ if (!hdhomerun_discover_validate_device_id(device_id)) {
++ fprintf(stderr, "invalid device id: %s\n", s);
++ return FALSE;
++ }
++
++ *pdevice_id = device_id;
++ *pdevice_ip = 0;
++ return TRUE;
++}
++
+ static int cmd_get(const char *item)
+ {
+ char *ret_value;
+@@ -154,7 +138,7 @@
+ return 1;
+ }
+
+-static int cmd_set_internal(const char *item, const char *value)
++static int cmd_set(const char *item, const char *value)
+ {
+ char *ret_error;
+ if (hdhomerun_device_set_var(hd, item, value, NULL, &ret_error) < 0) {
+@@ -170,260 +154,118 @@
+ return 1;
+ }
+
+-static int cmd_set(const char *item, const char *value)
++static int cmd_streaminfo(const char *tuner_str)
+ {
+- if (strcmp(value, "-") == 0) {
+- char *buffer = NULL;
+- size_t pos = 0;
+-
+- while (1) {
+- buffer = (char *)realloc(buffer, pos + 1024);
+- if (!buffer) {
+- fprintf(stderr, "out of memory\n");
+- return -1;
+- }
+-
+- size_t size = fread(buffer + pos, 1, 1024, stdin);
+- pos += size;
+-
+- if (size < 1024) {
+- break;
+- }
+- }
+-
+- buffer[pos] = 0;
+-
+- int ret = cmd_set_internal(item, buffer);
+-
+- free(buffer);
+- return ret;
+- }
+-
+- return cmd_set_internal(item, value);
+-}
+-
+-static bool_t sigabort = FALSE;
+-
+-static void signal_abort(int arg)
+-{
+- sigabort = TRUE;
+-}
+-
+-static void cmd_scan_printf(FILE *fp, const char *fmt, ...)
+-{
+- va_list ap;
+- va_start(ap, fmt);
+-
+- if (fp) {
+- va_list apc;
+- va_copy(apc, ap);
+-
+- vfprintf(fp, fmt, apc);
+- fflush(fp);
+-
+- va_end(apc);
+- }
+-
+- vprintf(fmt, ap);
+- fflush(stdout);
+-
+- va_end(ap);
++ fprintf(stderr, "streaminfo: use \"get /tuner<n>/streaminfo\"\n");
++ return -1;
+ }
+
+-static int cmd_scan(const char *tuner_str, const char *filename)
++static int cmd_scan(const char *tuner_str, const char *start_value)
+ {
+- if (hdhomerun_device_set_tuner_from_str(hd, tuner_str) <= 0) {
++ unsigned int tuner;
++ if (sscanf(tuner_str, "%u", &tuner) != 1) {
+ fprintf(stderr, "invalid tuner number\n");
+ return -1;
+ }
+
+- char *ret_error;
+- if (hdhomerun_device_tuner_lockkey_request(hd, &ret_error) <= 0) {
+- fprintf(stderr, "failed to lock tuner\n");
+- if (ret_error) {
+- fprintf(stderr, "%s\n", ret_error);
+- }
+- return -1;
+- }
++ hdhomerun_device_set_tuner(hd, tuner);
+
+- hdhomerun_device_set_tuner_target(hd, "none");
+-
+- char *channelmap;
+- if (hdhomerun_device_get_tuner_channelmap(hd, &channelmap) <= 0) {
+- fprintf(stderr, "failed to query channelmap from device\n");
+- return -1;
++ char channel_str[64];
++ strncpy(channel_str, start_value, sizeof(channel_str));
++ channel_str[sizeof(channel_str) - 8] = 0;
++
++ char *channel_number_ptr = strrchr(channel_str, ':');
++ if (!channel_number_ptr) {
++ channel_number_ptr = channel_str;
++ } else {
++ channel_number_ptr++;
+ }
+
+- const char *channelmap_scan_group = hdhomerun_channelmap_get_channelmap_scan_group(channelmap);
+- if (!channelmap_scan_group) {
+- fprintf(stderr, "unknown channelmap '%s'\n", channelmap);
++ unsigned int channel_number = atol(channel_number_ptr);
++ if (channel_number == 0) {
++ fprintf(stderr, "invalid starting channel\n");
+ return -1;
+ }
+
+- if (hdhomerun_device_channelscan_init(hd, channelmap_scan_group) <= 0) {
+- fprintf(stderr, "failed to initialize channel scan\n");
++ /* Test starting channel. */
++ int ret = hdhomerun_device_set_tuner_channel(hd, channel_str);
++ if (ret < 0) {
++ fprintf(stderr, "communication error sending request to hdhomerun device\n");
+ return -1;
+ }
+-
+- FILE *fp = NULL;
+- if (filename) {
+- fp = fopen(filename, "w");
+- if (!fp) {
+- fprintf(stderr, "unable to create file: %s\n", filename);
+- return -1;
+- }
++ if (ret == 0) {
++ fprintf(stderr, "invalid starting channel\n");
++ return -1;
+ }
+
+- signal(SIGINT, signal_abort);
+- signal(SIGPIPE, signal_abort);
++ while (1) {
++ /* Update channel value */
++ sprintf(channel_number_ptr, "%u", channel_number);
+
+- int ret = 0;
+- while (!sigabort) {
+- struct hdhomerun_channelscan_result_t result;
+- ret = hdhomerun_device_channelscan_advance(hd, &result);
+- if (ret <= 0) {
+- break;
++ /* Set channel. */
++ ret = hdhomerun_device_set_tuner_channel(hd, channel_str);
++ if (ret < 0) {
++ fprintf(stderr, "communication error sending request to hdhomerun device\n");
++ return -1;
+ }
+-
+- cmd_scan_printf(fp, "SCANNING: %lu (%s)\n",
+- result.frequency, result.channel_str
+- );
+-
+- ret = hdhomerun_device_channelscan_detect(hd, &result);
+- if (ret <= 0) {
+- break;
++ if (ret == 0) {
++ return 0;
+ }
+
+- cmd_scan_printf(fp, "LOCK: %s (ss=%u snq=%u seq=%u)\n",
+- result.status.lock_str, result.status.signal_strength,
+- result.status.signal_to_noise_quality, result.status.symbol_error_quality
+- );
++ /* Wait 1.5s for lock (qam auto is the slowest to lock). */
++ usleep(HDHOMERUN_DEVICE_MAX_TUNE_TO_LOCK_TIME * 1000);
+
+- if (result.transport_stream_id_detected) {
+- cmd_scan_printf(fp, "TSID: 0x%04X\n", result.transport_stream_id);
++ /* Get status to check for signal. Quality numbers will not be valid yet. */
++ struct hdhomerun_tuner_status_t status;
++ if (hdhomerun_device_get_tuner_status(hd, &status) < 0) {
++ fprintf(stderr, "communication error sending request to hdhomerun device\n");
++ return -1;
+ }
+
+- int i;
+- for (i = 0; i < result.program_count; i++) {
+- struct hdhomerun_channelscan_program_t *program = &result.programs[i];
+- cmd_scan_printf(fp, "PROGRAM %s\n", program->program_str);
++ /* If no signal then advance to next channel. */
++ if (status.signal_strength == 0) {
++ printf("%s: no signal\n", channel_str);
++ channel_number++;
++ continue;
+ }
+- }
+-
+- hdhomerun_device_tuner_lockkey_release(hd);
+
+- if (fp) {
+- fclose(fp);
+- }
+- if (ret < 0) {
+- fprintf(stderr, "communication error sending request to hdhomerun device\n");
+- }
+- return ret;
+-}
+-
+-static int cmd_save(const char *tuner_str, const char *filename)
+-{
+- if (hdhomerun_device_set_tuner_from_str(hd, tuner_str) <= 0) {
+- fprintf(stderr, "invalid tuner number\n");
+- return -1;
+- }
++ /* Wait for 2s. */
++ usleep(HDHOMERUN_DEVICE_MAX_LOCK_TO_DATA_TIME * 1000);
+
+- FILE *fp;
+- if (strcmp(filename, "null") == 0) {
+- fp = NULL;
+- } else if (strcmp(filename, "-") == 0) {
+- fp = stdout;
+- } else {
+- fp = fopen(filename, "wb");
+- if (!fp) {
+- fprintf(stderr, "unable to create file %s\n", filename);
++ /* Get status to check quality numbers. */
++ if (hdhomerun_device_get_tuner_status(hd, &status) < 0) {
++ fprintf(stderr, "communication error sending request to hdhomerun device\n");
+ return -1;
+ }
+- }
+-
+- int ret = hdhomerun_device_stream_start(hd);
+- if (ret <= 0) {
+- fprintf(stderr, "unable to start stream\n");
+- if (fp && fp != stdout) {
+- fclose(fp);
+- }
+- return ret;
+- }
+-
+- signal(SIGINT, signal_abort);
+- signal(SIGPIPE, signal_abort);
+-
+- struct hdhomerun_video_stats_t stats_old, stats_cur;
+- hdhomerun_device_get_video_stats(hd, &stats_old);
+-
+- uint64_t next_progress = getcurrenttime() + 1000;
+-
+- while (!sigabort) {
+- uint64_t loop_start_time = getcurrenttime();
+-
+- size_t actual_size;
+- uint8_t *ptr = hdhomerun_device_stream_recv(hd, VIDEO_DATA_BUFFER_SIZE_1S, &actual_size);
+- if (!ptr) {
+- msleep(64);
++ if (status.signal_strength == 0) {
++ printf("%s: no signal\n", channel_str);
++ channel_number++;
+ continue;
+ }
++ printf("%s: ss=%u snq=%u seq=%u\n", channel_str, status.signal_strength, status.signal_to_noise_quality, status.symbol_error_quality);
+
+- if (fp) {
+- if (fwrite(ptr, 1, actual_size, fp) != actual_size) {
+- fprintf(stderr, "error writing output\n");
+- return -1;
+- }
++ /* Detect sub channels. */
++ usleep(4 * 1000000);
++ char *streaminfo;
++ if (hdhomerun_device_get_tuner_streaminfo(hd, &streaminfo) <= 0) {
++ channel_number++;
++ continue;
+ }
+-
+- if (loop_start_time >= next_progress) {
+- next_progress += 1000;
+- if (loop_start_time >= next_progress) {
+- next_progress = loop_start_time + 1000;
+- }
+-
+- hdhomerun_device_get_video_stats(hd, &stats_cur);
+-
+- if (stats_cur.overflow_error_count > stats_old.overflow_error_count) {
+- fprintf(stderr, "o");
+- } else if (stats_cur.network_error_count > stats_old.network_error_count) {
+- fprintf(stderr, "n");
+- } else if (stats_cur.transport_error_count > stats_old.transport_error_count) {
+- fprintf(stderr, "t");
+- } else if (stats_cur.sequence_error_count > stats_old.sequence_error_count) {
+- fprintf(stderr, "s");
+- } else {
+- fprintf(stderr, ".");
++ while (1) {
++ char *end = strchr(streaminfo, '\n');
++ if (!end) {
++ break;
+ }
+
+- stats_old = stats_cur;
+- fflush(stderr);
+- }
++ *end++ = 0;
++ printf("program %s\n", streaminfo);
+
+- int32_t delay = 64 - (int32_t)(getcurrenttime() - loop_start_time);
+- if (delay <= 0) {
+- continue;
++ streaminfo = end;
+ }
+
+- msleep(delay);
+- }
+-
+- if (fp) {
+- fclose(fp);
++ /* Advance to next channel. */
++ channel_number++;
+ }
+-
+- hdhomerun_device_stream_stop(hd);
+- hdhomerun_device_get_video_stats(hd, &stats_cur);
+-
+- fprintf(stderr, "\n");
+- fprintf(stderr, "-- Video statistics --\n");
+- fprintf(stderr, "%u packets received, %u overflow errors, %u network errors, %u transport errors, %u sequence errors\n",
+- (unsigned int)stats_cur.packet_count,
+- (unsigned int)stats_cur.overflow_error_count,
+- (unsigned int)stats_cur.network_error_count,
+- (unsigned int)stats_cur.transport_error_count,
+- (unsigned int)stats_cur.sequence_error_count);
+-
+- return 0;
+ }
+
+ static int cmd_upgrade(const char *filename)
+@@ -434,98 +276,16 @@
+ return -1;
+ }
+
+- printf("uploading firmware...\n");
+ if (hdhomerun_device_upgrade(hd, fp) <= 0) {
+ fprintf(stderr, "error sending upgrade file to hdhomerun device\n");
+ fclose(fp);
+ return -1;
+ }
+- sleep(2);
+-
+- printf("upgrading firmware...\n");
+- sleep(8);
+-
+- printf("rebooting...\n");
+- int count = 0;
+- char *version_str;
+- while (1) {
+- if (hdhomerun_device_get_version(hd, &version_str, NULL) >= 0) {
+- break;
+- }
+-
+- count++;
+- if (count > 30) {
+- fprintf(stderr, "error finding device after firmware upgrade\n");
+- fclose(fp);
+- return -1;
+- }
+
+- sleep(1);
+- }
+-
+- printf("upgrade complete - now running firmware %s\n", version_str);
++ printf("upgrade complete\n");
+ return 0;
+ }
+
+-static int cmd_execute(void)
+-{
+- char *ret_value;
+- char *ret_error;
+- if (hdhomerun_device_get_var(hd, "/sys/boot", &ret_value, &ret_error) < 0) {
+- fprintf(stderr, "communication error sending request to hdhomerun device\n");
+- return -1;
+- }
+-
+- if (ret_error) {
+- printf("%s\n", ret_error);
+- return 0;
+- }
+-
+- char *end = ret_value + strlen(ret_value);
+- char *pos = ret_value;
+-
+- while (1) {
+- if (pos >= end) {
+- break;
+- }
+-
+- char *eol_r = strchr(pos, '\r');
+- if (!eol_r) {
+- eol_r = end;
+- }
+-
+- char *eol_n = strchr(pos, '\n');
+- if (!eol_n) {
+- eol_n = end;
+- }
+-
+- char *eol = eol_r;
+- if (eol_n < eol) {
+- eol = eol_n;
+- }
+-
+- char *sep = strchr(pos, ' ');
+- if (!sep || sep > eol) {
+- pos = eol + 1;
+- continue;
+- }
+-
+- *sep = 0;
+- *eol = 0;
+-
+- char *item = pos;
+- char *value = sep + 1;
+-
+- printf("set %s \"%s\"\n", item, value);
+-
+- cmd_set_internal(item, value);
+-
+- pos = eol + 1;
+- }
+-
+- return 1;
+-}
+-
+ static int main_cmd(int argc, char *argv[])
+ {
+ if (argc < 1) {
+@@ -534,17 +294,6 @@
+
+ char *cmd = *argv++; argc--;
+
+- if (contains(cmd, "key")) {
+- if (argc < 2) {
+- return help();
+- }
+- uint32_t lockkey = strtoul(argv[0], NULL, 0);
+- hdhomerun_device_tuner_lockkey_use_value(hd, lockkey);
+-
+- cmd = argv[1];
+- argv+=2; argc-=2;
+- }
+-
+ if (contains(cmd, "get")) {
+ if (argc < 1) {
+ return help();
+@@ -559,22 +308,18 @@
+ return cmd_set(argv[0], argv[1]);
+ }
+
+- if (contains(cmd, "scan")) {
++ if (contains(cmd, "streaminfo")) {
+ if (argc < 1) {
+ return help();
+ }
+- if (argc < 2) {
+- return cmd_scan(argv[0], NULL);
+- } else {
+- return cmd_scan(argv[0], argv[1]);
+- }
++ return cmd_streaminfo(argv[0]);
+ }
+
+- if (contains(cmd, "save")) {
++ if (contains(cmd, "scan")) {
+ if (argc < 2) {
+ return help();
+ }
+- return cmd_save(argv[0], argv[1]);
++ return cmd_scan(argv[0], argv[1]);
+ }
+
+ if (contains(cmd, "upgrade")) {
+@@ -584,17 +329,16 @@
+ return cmd_upgrade(argv[0]);
+ }
+
+- if (contains(cmd, "execute")) {
+- return cmd_execute();
+- }
+-
+ return help();
+ }
+
+ static int main_internal(int argc, char *argv[])
+ {
+ #if defined(__WINDOWS__)
+- /* Initialize network socket support. */
++ //Start pthreads
++ pthread_win32_process_attach_np();
++
++ // Start WinSock
+ WORD wVersionRequested = MAKEWORD(2, 0);
+ WSADATA wsaData;
+ WSAStartup(wVersionRequested, &wsaData);
+@@ -613,36 +357,35 @@
+ return help();
+ }
+ if (contains(id_str, "discover")) {
+- if (argc < 1) {
+- return discover_print(NULL);
+- } else {
+- return discover_print(argv[0]);
+- }
++ return discover_print();
+ }
+
+- /* Device object. */
+- hd = hdhomerun_device_create_from_str(id_str, NULL);
+- if (!hd) {
+- fprintf(stderr, "invalid device id: %s\n", id_str);
++ /* Device ID. */
++ uint32_t device_id, device_ip;
++ if (!parse_device_id_str(id_str, &device_id, &device_ip)) {
+ return -1;
+ }
+
+- /* Device ID check. */
+- uint32_t device_id_requested = hdhomerun_device_get_device_id_requested(hd);
+- if (!hdhomerun_discover_validate_device_id(device_id_requested)) {
+- fprintf(stderr, "invalid device id: %08lX\n", (unsigned long)device_id_requested);
++ /* Device object. */
++ hd = hdhomerun_device_create(device_id, device_ip, 0);
++ if (!hd) {
++ fprintf(stderr, "unable to create device\n");
++ return -1;
+ }
+
+- /* Connect to device and check model. */
+- const char *model = hdhomerun_device_get_model_str(hd);
+- if (!model) {
++ /* Connect to device and check firmware version. */
++ int ret = hdhomerun_device_firmware_version_check(hd, 0);
++ if (ret < 0) {
+ fprintf(stderr, "unable to connect to device\n");
+ hdhomerun_device_destroy(hd);
+ return -1;
+ }
++ if (ret == 0) {
++ fprintf(stderr, "WARNING: firmware upgrade needed for all operations to function\n");
++ }
+
+ /* Command. */
+- int ret = main_cmd(argc, argv);
++ ret = main_cmd(argc, argv);
+
+ /* Cleanup. */
+ hdhomerun_device_destroy(hd);
+diff -aur branches/release-0-21-fixes/mythtv/libs/libmythtv/hdhomerun/hdhomerun_control.c src/mythtv-0.21/libs/libmythtv/hdhomerun/hdhomerun_control.c
+--- branches/release-0-21-fixes/mythtv/libs/libmythtv/hdhomerun/hdhomerun_control.c 2009-07-13 15:44:12.000000000 +0930
++++ src/mythtv-0.21/libs/libmythtv/hdhomerun/hdhomerun_control.c 2009-01-09 13:14:56.000000000 +1030
+@@ -1,12 +1,12 @@
+ /*
+ * hdhomerun_control.c
+ *
+- * Copyright © 2006 Silicondust USA Inc. <www.silicondust.com>.
++ * Copyright © 2006 Silicondust Engineering Ltd. <www.silicondust.com>.
+ *
+- * This library is free software; you can redistribute it and/or
++ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+- * version 3 of the License, or (at your option) any later version.
++ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+@@ -14,119 +14,83 @@
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+- *
+- * As a special exception to the GNU Lesser General Public License,
+- * you may link, statically or dynamically, an application with a
+- * publicly distributed version of the Library to produce an
+- * executable file containing portions of the Library, and
+- * distribute that executable file under terms of your choice,
+- * without any of the additional requirements listed in clause 4 of
+- * the GNU Lesser General Public License.
+- *
+- * By "a publicly distributed version of the Library", we mean
+- * either the unmodified Library as distributed by Silicondust, or a
+- * modified version of the Library that is distributed under the
+- * conditions defined in the GNU Lesser General Public License.
++ * License along with this library; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+-#include "hdhomerun.h"
+-
+-#define HDHOMERUN_CONTROL_SEND_TIMEOUT 5000
+-#define HDHOMERUN_CONTROL_RECV_TIMEOUT 5000
+-#define HDHOMERUN_CONTROL_UPGRADE_TIMEOUT 20000
++#include "hdhomerun_os.h"
++#include "hdhomerun_pkt.h"
++#include "hdhomerun_discover.h"
++#include "hdhomerun_control.h"
+
+ struct hdhomerun_control_sock_t {
+- uint32_t desired_device_id;
+- uint32_t desired_device_ip;
+- uint32_t actual_device_id;
+- uint32_t actual_device_ip;
++ uint32_t device_id;
++ uint32_t device_ip;
+ int sock;
+- struct hdhomerun_debug_t *dbg;
+- struct hdhomerun_pkt_t tx_pkt;
+- struct hdhomerun_pkt_t rx_pkt;
++ uint8_t buffer[16384];
+ };
+
+-static void hdhomerun_control_close_sock(struct hdhomerun_control_sock_t *cs)
+-{
+- if (cs->sock == -1) {
+- return;
+- }
+-
+- close(cs->sock);
+- cs->sock = -1;
+-}
+-
+-void hdhomerun_control_set_device(struct hdhomerun_control_sock_t *cs, uint32_t device_id, uint32_t device_ip)
+-{
+- hdhomerun_control_close_sock(cs);
+-
+- cs->desired_device_id = device_id;
+- cs->desired_device_ip = device_ip;
+- cs->actual_device_id = 0;
+- cs->actual_device_ip = 0;
+-}
+-
+-struct hdhomerun_control_sock_t *hdhomerun_control_create(uint32_t device_id, uint32_t device_ip, struct hdhomerun_debug_t *dbg)
++struct hdhomerun_control_sock_t *hdhomerun_control_create(uint32_t device_id, uint32_t device_ip)
+ {
+- struct hdhomerun_control_sock_t *cs = (struct hdhomerun_control_sock_t *)calloc(1, sizeof(struct hdhomerun_control_sock_t));
++ struct hdhomerun_control_sock_t *cs = (struct hdhomerun_control_sock_t *)malloc(sizeof(struct hdhomerun_control_sock_t));
+ if (!cs) {
+- hdhomerun_debug_printf(dbg, "hdhomerun_control_create: failed to allocate control object\n");
+ return NULL;
+ }
+-
+- cs->dbg = dbg;
++
++ cs->device_id = device_id;
++ cs->device_ip = device_ip;
+ cs->sock = -1;
+- hdhomerun_control_set_device(cs, device_id, device_ip);
+
+ return cs;
+ }
+
+ void hdhomerun_control_destroy(struct hdhomerun_control_sock_t *cs)
+ {
+- hdhomerun_control_close_sock(cs);
++ if (cs->sock != -1) {
++ close(cs->sock);
++ }
+ free(cs);
+ }
+
++static void hdhomerun_control_close_sock(struct hdhomerun_control_sock_t *cs)
++{
++ close(cs->sock);
++ cs->sock = -1;
++}
++
+ static bool_t hdhomerun_control_connect_sock(struct hdhomerun_control_sock_t *cs)
+ {
+ if (cs->sock != -1) {
+ return TRUE;
+ }
+
+- if ((cs->desired_device_id == 0) && (cs->desired_device_ip == 0)) {
+- hdhomerun_debug_printf(cs->dbg, "hdhomerun_control_connect_sock: no device specified\n");
+- return FALSE;
+- }
+-
+- /* Find device. */
+- struct hdhomerun_discover_device_t result;
+- if (hdhomerun_discover_find_devices_custom(cs->desired_device_ip, HDHOMERUN_DEVICE_TYPE_WILDCARD, cs->desired_device_id, &result, 1) <= 0) {
+- hdhomerun_debug_printf(cs->dbg, "hdhomerun_control_connect_sock: device not found\n");
+- return FALSE;
++ /* Find ip address. */
++ uint32_t device_ip = cs->device_ip;
++ if (device_ip == 0) {
++ struct hdhomerun_discover_device_t result;
++ if (hdhomerun_discover_find_device(cs->device_id, &result) <= 0) {
++ return FALSE;
++ }
++ device_ip = result.ip_addr;
+ }
+- cs->actual_device_ip = result.ip_addr;
+- cs->actual_device_id = result.device_id;
+
+ /* Create socket. */
+ cs->sock = (int)socket(AF_INET, SOCK_STREAM, 0);
+ if (cs->sock == -1) {
+- hdhomerun_debug_printf(cs->dbg, "hdhomerun_control_connect_sock: failed to create socket (%d)\n", sock_getlasterror);
+ return FALSE;
+ }
+
+ /* Set timeouts. */
+- setsocktimeout(cs->sock, SOL_SOCKET, SO_SNDTIMEO, HDHOMERUN_CONTROL_SEND_TIMEOUT);
+- setsocktimeout(cs->sock, SOL_SOCKET, SO_RCVTIMEO, HDHOMERUN_CONTROL_RECV_TIMEOUT);
++ setsocktimeout(cs->sock, SOL_SOCKET, SO_SNDTIMEO, 1000);
++ setsocktimeout(cs->sock, SOL_SOCKET, SO_RCVTIMEO, 1000);
+
+ /* Initiate connection. */
+ struct sockaddr_in sock_addr;
+ memset(&sock_addr, 0, sizeof(sock_addr));
+ sock_addr.sin_family = AF_INET;
+- sock_addr.sin_addr.s_addr = htonl(cs->actual_device_ip);
++ sock_addr.sin_addr.s_addr = htonl(device_ip);
+ sock_addr.sin_port = htons(HDHOMERUN_CONTROL_TCP_PORT);
+ if (connect(cs->sock, (struct sockaddr *)&sock_addr, sizeof(sock_addr)) != 0) {
+- hdhomerun_debug_printf(cs->dbg, "hdhomerun_control_connect_sock: failed to connect (%d)\n", sock_getlasterror);
+ hdhomerun_control_close_sock(cs);
+ return FALSE;
+ }
+@@ -135,215 +99,125 @@
+ return TRUE;
+ }
+
+-uint32_t hdhomerun_control_get_device_id(struct hdhomerun_control_sock_t *cs)
+-{
+- if (!hdhomerun_control_connect_sock(cs)) {
+- hdhomerun_debug_printf(cs->dbg, "hdhomerun_control_get_device_id: connect failed\n");
+- return 0;
+- }
+-
+- return cs->actual_device_id;
+-}
+-
+-uint32_t hdhomerun_control_get_device_ip(struct hdhomerun_control_sock_t *cs)
+-{
+- if (!hdhomerun_control_connect_sock(cs)) {
+- hdhomerun_debug_printf(cs->dbg, "hdhomerun_control_get_device_ip: connect failed\n");
+- return 0;
+- }
+-
+- return cs->actual_device_ip;
+-}
+-
+-uint32_t hdhomerun_control_get_device_id_requested(struct hdhomerun_control_sock_t *cs)
+-{
+- return cs->desired_device_id;
+-}
+-
+-uint32_t hdhomerun_control_get_device_ip_requested(struct hdhomerun_control_sock_t *cs)
+-{
+- return cs->desired_device_ip;
+-}
+-
+ uint32_t hdhomerun_control_get_local_addr(struct hdhomerun_control_sock_t *cs)
+ {
+ if (!hdhomerun_control_connect_sock(cs)) {
+- hdhomerun_debug_printf(cs->dbg, "hdhomerun_control_get_local_addr: connect failed\n");
+ return 0;
+ }
+
+ struct sockaddr_in sock_addr;
+ socklen_t sockaddr_size = sizeof(sock_addr);
+ if (getsockname(cs->sock, (struct sockaddr*)&sock_addr, &sockaddr_size) != 0) {
+- hdhomerun_debug_printf(cs->dbg, "hdhomerun_control_get_local_addr: getsockname failed (%d)\n", sock_getlasterror);
+ return 0;
+ }
+
+ return ntohl(sock_addr.sin_addr.s_addr);
+ }
+
+-static int hdhomerun_control_send_sock(struct hdhomerun_control_sock_t *cs, struct hdhomerun_pkt_t *tx_pkt)
++static int hdhomerun_control_send(struct hdhomerun_control_sock_t *cs, uint8_t *start, uint8_t *end)
+ {
+- int length = (int)(tx_pkt->end - tx_pkt->start);
+- if (send(cs->sock, (char *)tx_pkt->start, (int)length, 0) != length) {
+- hdhomerun_debug_printf(cs->dbg, "hdhomerun_control_send_sock: send failed (%d)\n", sock_getlasterror);
+- hdhomerun_control_close_sock(cs);
++ int length = (int)(end - start);
++ if (send(cs->sock, (char *)start, (int)length, 0) != length) {
+ return -1;
+ }
+
+- return 1;
++ return length;
+ }
+
+-static int hdhomerun_control_recv_sock(struct hdhomerun_control_sock_t *cs, struct hdhomerun_pkt_t *rx_pkt, uint16_t *ptype, uint64_t recv_timeout)
++static int hdhomerun_control_recv_sock(struct hdhomerun_control_sock_t *cs, uint8_t *buffer, uint8_t *limit)
+ {
+- uint64_t stop_time = getcurrenttime() + recv_timeout;
+- hdhomerun_pkt_reset(rx_pkt);
++ struct timeval t;
++ t.tv_sec = 0;
++ t.tv_usec = 250000;
+
+- while (getcurrenttime() < stop_time) {
+- struct timeval t;
+- t.tv_sec = 0;
+- t.tv_usec = 250000;
+-
+- fd_set readfds;
+- FD_ZERO(&readfds);
+- FD_SET(cs->sock, &readfds);
+-
+- if (select(cs->sock+1, &readfds, NULL, NULL, &t) < 0) {
+- hdhomerun_debug_printf(cs->dbg, "hdhomerun_control_recv_sock: select failed (%d)\n", sock_getlasterror);
+- hdhomerun_control_close_sock(cs);
+- return -1;
+- }
+-
+- if (!FD_ISSET(cs->sock, &readfds)) {
+- continue;
+- }
+-
+- int rx_length = recv(cs->sock, (char *)rx_pkt->end, (int)(rx_pkt->limit - rx_pkt->end), 0);
+- if (rx_length <= 0) {
+- hdhomerun_debug_printf(cs->dbg, "hdhomerun_control_recv_sock: recv failed (%d)\n", sock_getlasterror);
+- hdhomerun_control_close_sock(cs);
+- return -1;
+- }
+- rx_pkt->end += rx_length;
++ fd_set readfds;
++ FD_ZERO(&readfds);
++ FD_SET(cs->sock, &readfds);
+
+- int ret = hdhomerun_pkt_open_frame(rx_pkt, ptype);
+- if (ret < 0) {
+- hdhomerun_debug_printf(cs->dbg, "hdhomerun_control_recv_sock: frame error\n");
+- hdhomerun_control_close_sock(cs);
+- return -1;
+- }
+- if (ret == 0) {
+- continue;
+- }
++ if (select(cs->sock+1, &readfds, NULL, NULL, &t) < 0) {
++ return -1;
++ }
+
+- return 1;
++ if (!FD_ISSET(cs->sock, &readfds)) {
++ return 0;
+ }
+
+- hdhomerun_debug_printf(cs->dbg, "hdhomerun_control_recv_sock: timeout\n");
+- hdhomerun_control_close_sock(cs);
+- return -1;
++ int length = recv(cs->sock, (char *)buffer, (int)(limit - buffer), 0);
++ if (length <= 0) {
++ return -1;
++ }
++
++ return length;
+ }
+
+-static int hdhomerun_control_send_recv_internal(struct hdhomerun_control_sock_t *cs, struct hdhomerun_pkt_t *tx_pkt, struct hdhomerun_pkt_t *rx_pkt, uint16_t type, uint64_t recv_timeout)
++static int hdhomerun_control_recv(struct hdhomerun_control_sock_t *cs, uint8_t *buffer, uint8_t *limit)
+ {
+- hdhomerun_pkt_seal_frame(tx_pkt, type);
++ uint64_t timeout = getcurrenttime() + 1000;
++ uint8_t *ptr = buffer;
+
+- int i;
+- for (i = 0; i < 2; i++) {
+- if (cs->sock == -1) {
+- if (!hdhomerun_control_connect_sock(cs)) {
+- hdhomerun_debug_printf(cs->dbg, "hdhomerun_control_send_recv: connect failed\n");
+- return -1;
+- }
++ while (getcurrenttime() < timeout) {
++ int length = hdhomerun_control_recv_sock(cs, ptr, limit);
++ if (length < 0) {
++ return -1;
+ }
+-
+- if (hdhomerun_control_send_sock(cs, tx_pkt) < 0) {
++ if (length == 0) {
+ continue;
+ }
+- if (!rx_pkt) {
+- return 1;
+- }
++ ptr += length;
+
+- uint16_t rsp_type;
+- if (hdhomerun_control_recv_sock(cs, rx_pkt, &rsp_type, recv_timeout) < 0) {
++ if (buffer + HDHOMERUN_MIN_PEEK_LENGTH > limit) {
+ continue;
+ }
+- if (rsp_type != type + 1) {
+- hdhomerun_debug_printf(cs->dbg, "hdhomerun_control_send_recv: unexpected frame type\n");
+- hdhomerun_control_close_sock(cs);
++
++ length = (int)hdhomerun_peek_packet_length(buffer);
++ if (buffer + length > limit) {
+ continue;
+ }
+
+- return 1;
++ return length;
+ }
+
+- hdhomerun_debug_printf(cs->dbg, "hdhomerun_control_send_recv: failed\n");
+ return -1;
+ }
+
+-int hdhomerun_control_send_recv(struct hdhomerun_control_sock_t *cs, struct hdhomerun_pkt_t *tx_pkt, struct hdhomerun_pkt_t *rx_pkt, uint16_t type)
++static int hdhomerun_control_get_set(struct hdhomerun_control_sock_t *cs, const char *name, const char *value, char **pvalue, char **perror)
+ {
+- return hdhomerun_control_send_recv_internal(cs, tx_pkt, rx_pkt, type, HDHOMERUN_CONTROL_RECV_TIMEOUT);
+-}
+-
+-static int hdhomerun_control_get_set(struct hdhomerun_control_sock_t *cs, const char *name, const char *value, uint32_t lockkey, char **pvalue, char **perror)
+-{
+- struct hdhomerun_pkt_t *tx_pkt = &cs->tx_pkt;
+- struct hdhomerun_pkt_t *rx_pkt = &cs->rx_pkt;
+-
+- /* Request. */
+- hdhomerun_pkt_reset(tx_pkt);
+-
+- int name_len = (int)strlen(name) + 1;
+- if (tx_pkt->end + 3 + name_len > tx_pkt->limit) {
+- hdhomerun_debug_printf(cs->dbg, "hdhomerun_control_get_set: request too long\n");
++ /* Send request. */
++ uint8_t *ptr = cs->buffer;
++ hdhomerun_write_get_set_request(&ptr, name, value);
++ if (hdhomerun_control_send(cs, cs->buffer, ptr) < 0) {
+ return -1;
+ }
+- hdhomerun_pkt_write_u8(tx_pkt, HDHOMERUN_TAG_GETSET_NAME);
+- hdhomerun_pkt_write_var_length(tx_pkt, name_len);
+- hdhomerun_pkt_write_mem(tx_pkt, (void *)name, name_len);
+
+- if (value) {
+- int value_len = (int)strlen(value) + 1;
+- if (tx_pkt->end + 3 + value_len > tx_pkt->limit) {
+- hdhomerun_debug_printf(cs->dbg, "hdhomerun_control_get_set: request too long\n");
+- return -1;
+- }
+- hdhomerun_pkt_write_u8(tx_pkt, HDHOMERUN_TAG_GETSET_VALUE);
+- hdhomerun_pkt_write_var_length(tx_pkt, value_len);
+- hdhomerun_pkt_write_mem(tx_pkt, (void *)value, value_len);
++ /* Receive response. */
++ int length = hdhomerun_control_recv(cs, cs->buffer, cs->buffer + sizeof(cs->buffer));
++ if (length <= 0) {
++ return -1;
+ }
+
+- if (lockkey != 0) {
+- if (tx_pkt->end + 6 > tx_pkt->limit) {
+- hdhomerun_debug_printf(cs->dbg, "hdhomerun_control_get_set: request too long\n");
+- return -1;
+- }
+- hdhomerun_pkt_write_u8(tx_pkt, HDHOMERUN_TAG_GETSET_LOCKKEY);
+- hdhomerun_pkt_write_var_length(tx_pkt, 4);
+- hdhomerun_pkt_write_u32(tx_pkt, lockkey);
++ /* Parse response. */
++ ptr = cs->buffer;
++ uint8_t *end = ptr + length;
++ int type = hdhomerun_process_packet(&ptr, &end);
++ if (type < 0) {
++ return -1;
+ }
+-
+- /* Send/Recv. */
+- if (hdhomerun_control_send_recv_internal(cs, tx_pkt, rx_pkt, HDHOMERUN_TYPE_GETSET_REQ, HDHOMERUN_CONTROL_RECV_TIMEOUT) < 0) {
+- hdhomerun_debug_printf(cs->dbg, "hdhomerun_control_get_set: send/recv error\n");
++ if (type != HDHOMERUN_TYPE_GETSET_RPY) {
+ return -1;
+ }
+
+- /* Response. */
+- while (1) {
++ while (ptr < end) {
+ uint8_t tag;
+ size_t len;
+- uint8_t *next = hdhomerun_pkt_read_tlv(rx_pkt, &tag, &len);
+- if (!next) {
++ uint8_t *val;
++ if (hdhomerun_read_tlv(&ptr, end, &tag, &len, &val) < 0) {
+ break;
+ }
+-
+ switch (tag) {
+ case HDHOMERUN_TAG_GETSET_VALUE:
+ if (pvalue) {
+- *pvalue = (char *)rx_pkt->pos;
+- rx_pkt->pos[len] = 0;
++ *pvalue = (char *)val;
++ val[len] = 0;
+ }
+ if (perror) {
+ *perror = NULL;
+@@ -351,48 +225,59 @@
+ return 1;
+
+ case HDHOMERUN_TAG_ERROR_MESSAGE:
+- rx_pkt->pos[len] = 0;
+- hdhomerun_debug_printf(cs->dbg, "hdhomerun_control_get_set: %s\n", rx_pkt->pos);
+-
+ if (pvalue) {
+ *pvalue = NULL;
+ }
+ if (perror) {
+- *perror = (char *)rx_pkt->pos;
++ *perror = (char *)val;
++ val[len] = 0;
+ }
+-
+ return 0;
+ }
+-
+- rx_pkt->pos = next;
+ }
+
+- hdhomerun_debug_printf(cs->dbg, "hdhomerun_control_get_set: missing response tags\n");
+ return -1;
+ }
+
+ int hdhomerun_control_get(struct hdhomerun_control_sock_t *cs, const char *name, char **pvalue, char **perror)
+ {
+- return hdhomerun_control_get_set(cs, name, NULL, 0, pvalue, perror);
++ if (!hdhomerun_control_connect_sock(cs)) {
++ return -1;
++ }
++
++ int ret = hdhomerun_control_get_set(cs, name, NULL, pvalue, perror);
++ if (ret < 0) {
++ hdhomerun_control_close_sock(cs);
++ return -1;
++ }
++
++ return ret;
+ }
+
+ int hdhomerun_control_set(struct hdhomerun_control_sock_t *cs, const char *name, const char *value, char **pvalue, char **perror)
+ {
+- return hdhomerun_control_get_set(cs, name, value, 0, pvalue, perror);
+-}
++ if (!hdhomerun_control_connect_sock(cs)) {
++ return -1;
++ }
+
+-int hdhomerun_control_set_with_lockkey(struct hdhomerun_control_sock_t *cs, const char *name, const char *value, uint32_t lockkey, char **pvalue, char **perror)
+-{
+- return hdhomerun_control_get_set(cs, name, value, lockkey, pvalue, perror);
++ int ret = hdhomerun_control_get_set(cs, name, value, pvalue, perror);
++ if (ret < 0) {
++ hdhomerun_control_close_sock(cs);
++ return -1;
++ }
++
++ return ret;
+ }
+
+ int hdhomerun_control_upgrade(struct hdhomerun_control_sock_t *cs, FILE *upgrade_file)
+ {
+- struct hdhomerun_pkt_t *tx_pkt = &cs->tx_pkt;
+- struct hdhomerun_pkt_t *rx_pkt = &cs->rx_pkt;
++ if (!hdhomerun_control_connect_sock(cs)) {
++ return -1;
++ }
++
+ uint32_t sequence = 0;
++ uint8_t *ptr;
+
+- /* Upload. */
+ while (1) {
+ uint8_t data[256];
+ size_t length = fread(data, 1, 256, upgrade_file);
+@@ -400,12 +285,10 @@
+ break;
+ }
+
+- hdhomerun_pkt_reset(tx_pkt);
+- hdhomerun_pkt_write_u32(tx_pkt, sequence);
+- hdhomerun_pkt_write_mem(tx_pkt, data, length);
+-
+- if (hdhomerun_control_send_recv_internal(cs, tx_pkt, NULL, HDHOMERUN_TYPE_UPGRADE_REQ, 0) < 0) {
+- hdhomerun_debug_printf(cs->dbg, "hdhomerun_control_upgrade: send/recv failed\n");
++ ptr = cs->buffer;
++ hdhomerun_write_upgrade_request(&ptr, sequence, data, length);
++ if (hdhomerun_control_send(cs, cs->buffer, ptr) < 0) {
++ hdhomerun_control_close_sock(cs);
+ return -1;
+ }
+
+@@ -414,40 +297,15 @@
+
+ if (sequence == 0) {
+ /* No data in file. Error, but no need to close connection. */
+- hdhomerun_debug_printf(cs->dbg, "hdhomerun_control_upgrade: zero length file\n");
+ return 0;
+ }
+
+- /* Execute upgrade. */
+- hdhomerun_pkt_reset(tx_pkt);
+- hdhomerun_pkt_write_u32(tx_pkt, 0xFFFFFFFF);
+-
+- if (hdhomerun_control_send_recv_internal(cs, tx_pkt, rx_pkt, HDHOMERUN_TYPE_UPGRADE_REQ, HDHOMERUN_CONTROL_UPGRADE_TIMEOUT) < 0) {
+- hdhomerun_debug_printf(cs->dbg, "hdhomerun_control_upgrade: send/recv failed\n");
++ ptr = cs->buffer;
++ hdhomerun_write_upgrade_request(&ptr, 0xFFFFFFFF, NULL, 0);
++ if (hdhomerun_control_send(cs, cs->buffer, ptr) < 0) {
++ hdhomerun_control_close_sock(cs);
+ return -1;
+ }
+
+- /* Check response. */
+- while (1) {
+- uint8_t tag;
+- size_t len;
+- uint8_t *next = hdhomerun_pkt_read_tlv(rx_pkt, &tag, &len);
+- if (!next) {
+- break;
+- }
+-
+- switch (tag) {
+- case HDHOMERUN_TAG_ERROR_MESSAGE:
+- rx_pkt->pos[len] = 0;
+- hdhomerun_debug_printf(cs->dbg, "hdhomerun_control_upgrade: %s\n", (char *)rx_pkt->pos);
+- return 0;
+-
+- default:
+- break;
+- }
+-
+- rx_pkt->pos = next;
+- }
+-
+ return 1;
+ }
+diff -aur branches/release-0-21-fixes/mythtv/libs/libmythtv/hdhomerun/hdhomerun_control.h src/mythtv-0.21/libs/libmythtv/hdhomerun/hdhomerun_control.h
+--- branches/release-0-21-fixes/mythtv/libs/libmythtv/hdhomerun/hdhomerun_control.h 2009-07-13 15:44:12.000000000 +0930
++++ src/mythtv-0.21/libs/libmythtv/hdhomerun/hdhomerun_control.h 2009-01-09 13:14:56.000000000 +1030
+@@ -1,12 +1,12 @@
+ /*
+ * hdhomerun_control.h
+ *
+- * Copyright © 2006 Silicondust USA Inc. <www.silicondust.com>.
++ * Copyright © 2006 Silicondust Engineering Ltd. <www.silicondust.com>.
+ *
+- * This library is free software; you can redistribute it and/or
++ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+- * version 3 of the License, or (at your option) any later version.
++ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+@@ -14,20 +14,8 @@
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+- *
+- * As a special exception to the GNU Lesser General Public License,
+- * you may link, statically or dynamically, an application with a
+- * publicly distributed version of the Library to produce an
+- * executable file containing portions of the Library, and
+- * distribute that executable file under terms of your choice,
+- * without any of the additional requirements listed in clause 4 of
+- * the GNU Lesser General Public License.
+- *
+- * By "a publicly distributed version of the Library", we mean
+- * either the unmodified Library as distributed by Silicondust, or a
+- * modified version of the Library that is distributed under the
+- * conditions defined in the GNU Lesser General Public License.
++ * License along with this library; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+ #ifdef __cplusplus
+ extern "C" {
+@@ -43,26 +31,13 @@
+ *
+ * uint32_t device_id = 32-bit device id of device. Set to HDHOMERUN_DEVICE_ID_WILDCARD to match any device ID.
+ * uint32_t device_ip = IP address of device. Set to 0 to auto-detect.
+- * struct hdhomerun_debug_t *dbg: Pointer to debug logging object. May be NULL.
+ *
+ * Returns a pointer to the newly created control socket.
+ *
+ * When no longer needed, the socket should be destroyed by calling hdhomerun_control_destroy.
+ */
+-extern LIBTYPE struct hdhomerun_control_sock_t *hdhomerun_control_create(uint32_t device_id, uint32_t device_ip, struct hdhomerun_debug_t *dbg);
+-extern LIBTYPE void hdhomerun_control_destroy(struct hdhomerun_control_sock_t *cs);
+-
+-/*
+- * Get the actual device id or ip of the device.
+- *
+- * Returns 0 if the device id cannot be determined.
+- */
+-extern LIBTYPE uint32_t hdhomerun_control_get_device_id(struct hdhomerun_control_sock_t *cs);
+-extern LIBTYPE uint32_t hdhomerun_control_get_device_ip(struct hdhomerun_control_sock_t *cs);
+-extern LIBTYPE uint32_t hdhomerun_control_get_device_id_requested(struct hdhomerun_control_sock_t *cs);
+-extern LIBTYPE uint32_t hdhomerun_control_get_device_ip_requested(struct hdhomerun_control_sock_t *cs);
+-
+-extern LIBTYPE void hdhomerun_control_set_device(struct hdhomerun_control_sock_t *cs, uint32_t device_id, uint32_t device_ip);
++extern struct hdhomerun_control_sock_t *hdhomerun_control_create(uint32_t device_id, uint32_t device_ip);
++extern void hdhomerun_control_destroy(struct hdhomerun_control_sock_t *cs);
+
+ /*
+ * Get the local machine IP address used when communicating with the device.
+@@ -71,12 +46,7 @@
+ *
+ * Returns 32-bit IP address with native endianness, or 0 on error.
+ */
+-extern LIBTYPE uint32_t hdhomerun_control_get_local_addr(struct hdhomerun_control_sock_t *cs);
+-
+-/*
+- * Low-level communication.
+- */
+-extern LIBTYPE int hdhomerun_control_send_recv(struct hdhomerun_control_sock_t *cs, struct hdhomerun_pkt_t *tx_pkt, struct hdhomerun_pkt_t *rx_pkt, uint16_t type);
++extern uint32_t hdhomerun_control_get_local_addr(struct hdhomerun_control_sock_t *cs);
+
+ /*
+ * Get/set a control variable on the device.
+@@ -95,9 +65,8 @@
+ * Returns 0 if the operation was rejected (pvalue NULL, perror set).
+ * Returns -1 if a communication error occurs.
+ */
+-extern LIBTYPE int hdhomerun_control_get(struct hdhomerun_control_sock_t *cs, const char *name, char **pvalue, char **perror);
+-extern LIBTYPE int hdhomerun_control_set(struct hdhomerun_control_sock_t *cs, const char *name, const char *value, char **pvalue, char **perror);
+-extern LIBTYPE int hdhomerun_control_set_with_lockkey(struct hdhomerun_control_sock_t *cs, const char *name, const char *value, uint32_t lockkey, char **pvalue, char **perror);
++extern int hdhomerun_control_get(struct hdhomerun_control_sock_t *cs, const char *name, char **pvalue, char **perror);
++extern int hdhomerun_control_set(struct hdhomerun_control_sock_t *cs, const char *name, const char *value, char **pvalue, char **perror);
+
+ /*
+ * Upload new firmware to the device.
+@@ -108,7 +77,7 @@
+ * Returns 0 if the upload was rejected.
+ * Returns -1 if an error occurs.
+ */
+-extern LIBTYPE int hdhomerun_control_upgrade(struct hdhomerun_control_sock_t *cs, FILE *upgrade_file);
++extern int hdhomerun_control_upgrade(struct hdhomerun_control_sock_t *cs, FILE *upgrade_file);
+
+ #ifdef __cplusplus
+ }
+Only in branches/release-0-21-fixes/mythtv/libs/libmythtv/hdhomerun: hdhomerun_debug.c
+Only in branches/release-0-21-fixes/mythtv/libs/libmythtv/hdhomerun: hdhomerun_debug.h
+diff -aur branches/release-0-21-fixes/mythtv/libs/libmythtv/hdhomerun/hdhomerun_device.c src/mythtv-0.21/libs/libmythtv/hdhomerun/hdhomerun_device.c
+--- branches/release-0-21-fixes/mythtv/libs/libmythtv/hdhomerun/hdhomerun_device.c 2009-07-13 15:44:12.000000000 +0930
++++ src/mythtv-0.21/libs/libmythtv/hdhomerun/hdhomerun_device.c 2009-01-09 13:14:56.000000000 +1030
+@@ -1,12 +1,12 @@
+ /*
+- * hdhomerun_device.c
++ * hdhomerun_record.c
+ *
+- * Copyright © 2006-2008 Silicondust USA Inc. <www.silicondust.com>.
++ * Copyright © 2006 Silicondust Engineering Ltd. <www.silicondust.com>.
+ *
+- * This library is free software; you can redistribute it and/or
++ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+- * version 3 of the License, or (at your option) any later version.
++ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+@@ -14,92 +14,43 @@
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+- *
+- * As a special exception to the GNU Lesser General Public License,
+- * you may link, statically or dynamically, an application with a
+- * publicly distributed version of the Library to produce an
+- * executable file containing portions of the Library, and
+- * distribute that executable file under terms of your choice,
+- * without any of the additional requirements listed in clause 4 of
+- * the GNU Lesser General Public License.
+- *
+- * By "a publicly distributed version of the Library", we mean
+- * either the unmodified Library as distributed by Silicondust, or a
+- * modified version of the Library that is distributed under the
+- * conditions defined in the GNU Lesser General Public License.
++ * License along with this library; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+-#include "hdhomerun.h"
++#include "hdhomerun_os.h"
++#include "hdhomerun_pkt.h"
++#include "hdhomerun_control.h"
++#include "hdhomerun_video.h"
++#include "hdhomerun_device.h"
+
+ struct hdhomerun_device_t {
+ struct hdhomerun_control_sock_t *cs;
+ struct hdhomerun_video_sock_t *vs;
+- struct hdhomerun_debug_t *dbg;
+- struct hdhomerun_channelscan_t *scan;
+- uint32_t device_id;
+ unsigned int tuner;
+- uint32_t lockkey;
+- char name[32];
+- char model[32];
++ char result_buffer[1024];
+ };
+
+-static void hdhomerun_device_set_update(struct hdhomerun_device_t *hd)
+-{
+- /* Clear cached information. */
+- *hd->model = 0;
+-
+- /* New name. */
+- sprintf(hd->name, "%08lX-%u", (unsigned long)hd->device_id, hd->tuner);
+-}
+-
+-void hdhomerun_device_set_device(struct hdhomerun_device_t *hd, uint32_t device_id, uint32_t device_ip)
+-{
+- hdhomerun_control_set_device(hd->cs, device_id, device_ip);
+-
+- if ((device_id == 0) || (device_id == HDHOMERUN_DEVICE_ID_WILDCARD)) {
+- device_id = hdhomerun_control_get_device_id(hd->cs);
+- }
+-
+- hd->device_id = device_id;
+- hdhomerun_device_set_update(hd);
+-}
+-
+-void hdhomerun_device_set_tuner(struct hdhomerun_device_t *hd, unsigned int tuner)
+-{
+- hd->tuner = tuner;
+- hdhomerun_device_set_update(hd);
+-}
+-
+-struct hdhomerun_device_t *hdhomerun_device_create(uint32_t device_id, uint32_t device_ip, unsigned int tuner, struct hdhomerun_debug_t *dbg)
++struct hdhomerun_device_t *hdhomerun_device_create(uint32_t device_id, uint32_t device_ip, unsigned int tuner)
+ {
+ struct hdhomerun_device_t *hd = (struct hdhomerun_device_t *)calloc(1, sizeof(struct hdhomerun_device_t));
+ if (!hd) {
+- hdhomerun_debug_printf(dbg, "hdhomerun_device_create: failed to allocate device object\n");
+ return NULL;
+ }
+
+- hd->dbg = dbg;
++ hd->tuner = tuner;
+
+- hd->cs = hdhomerun_control_create(0, 0, hd->dbg);
++ hd->cs = hdhomerun_control_create(device_id, device_ip);
+ if (!hd->cs) {
+- hdhomerun_debug_printf(hd->dbg, "hdhomerun_device_create: failed to create control object\n");
+ free(hd);
+ return NULL;
+ }
+
+- hdhomerun_device_set_device(hd, device_id, device_ip);
+- hdhomerun_device_set_tuner(hd, tuner);
+-
+ return hd;
+ }
+
+ void hdhomerun_device_destroy(struct hdhomerun_device_t *hd)
+ {
+- if (hd->scan) {
+- channelscan_destroy(hd->scan);
+- }
+-
+ if (hd->vs) {
+ hdhomerun_video_destroy(hd->vs);
+ }
+@@ -109,152 +60,9 @@
+ free(hd);
+ }
+
+-static bool_t is_hex_char(char c)
+-{
+- if ((c >= '0') && (c <= '9')) {
+- return TRUE;
+- }
+- if ((c >= 'A') && (c <= 'F')) {
+- return TRUE;
+- }
+- if ((c >= 'a') && (c <= 'f')) {
+- return TRUE;
+- }
+- return FALSE;
+-}
+-
+-static struct hdhomerun_device_t *hdhomerun_device_create_from_str_device_id(const char *device_str, struct hdhomerun_debug_t *dbg)
+-{
+- int i;
+- const char *ptr = device_str;
+- for (i = 0; i < 8; i++) {
+- if (!is_hex_char(*ptr++)) {
+- return NULL;
+- }
+- }
+-
+- if (*ptr == 0) {
+- unsigned long device_id;
+- if (sscanf(device_str, "%lx", &device_id) != 1) {
+- return NULL;
+- }
+- return hdhomerun_device_create((uint32_t)device_id, 0, 0, dbg);
+- }
+-
+- if (*ptr == '-') {
+- unsigned long device_id;
+- unsigned int tuner;
+- if (sscanf(device_str, "%lx-%u", &device_id, &tuner) != 2) {
+- return NULL;
+- }
+- return hdhomerun_device_create((uint32_t)device_id, 0, tuner, dbg);
+- }
+-
+- return NULL;
+-}
+-
+-static struct hdhomerun_device_t *hdhomerun_device_create_from_str_ip(const char *device_str, struct hdhomerun_debug_t *dbg)
+-{
+- unsigned long a[4];
+- if (sscanf(device_str, "%lu.%lu.%lu.%lu", &a[0], &a[1], &a[2], &a[3]) != 4) {
+- return NULL;
+- }
+-
+- unsigned long device_ip = (a[0] << 24) | (a[1] << 16) | (a[2] << 8) | (a[3] << 0);
+- return hdhomerun_device_create(HDHOMERUN_DEVICE_ID_WILDCARD, (uint32_t)device_ip, 0, dbg);
+-}
+-
+-static struct hdhomerun_device_t *hdhomerun_device_create_from_str_dns(const char *device_str, struct hdhomerun_debug_t *dbg)
+-{
+-#if defined(__CYGWIN__)
+- return NULL;
+-#else
+- struct addrinfo hints;
+- memset(&hints, 0, sizeof(hints));
+- hints.ai_family = AF_INET;
+- hints.ai_socktype = SOCK_STREAM;
+- hints.ai_protocol = IPPROTO_TCP;
+-
+- struct addrinfo *sock_info;
+- if (getaddrinfo(device_str, "65001", &hints, &sock_info) != 0) {
+- return NULL;
+- }
+-
+- struct sockaddr_in *sock_addr = (struct sockaddr_in *)sock_info->ai_addr;
+- uint32_t device_ip = ntohl(sock_addr->sin_addr.s_addr);
+- freeaddrinfo(sock_info);
+-
+- if (device_ip == 0) {
+- return NULL;
+- }
+-
+- return hdhomerun_device_create(HDHOMERUN_DEVICE_ID_WILDCARD, (uint32_t)device_ip, 0, dbg);
+-#endif
+-}
+-
+-struct hdhomerun_device_t *hdhomerun_device_create_from_str(const char *device_str, struct hdhomerun_debug_t *dbg)
+-{
+- struct hdhomerun_device_t *device = hdhomerun_device_create_from_str_device_id(device_str, dbg);
+- if (device) {
+- return device;
+- }
+-
+- device = hdhomerun_device_create_from_str_ip(device_str, dbg);
+- if (device) {
+- return device;
+- }
+-
+- device = hdhomerun_device_create_from_str_dns(device_str, dbg);
+- if (device) {
+- return device;
+- }
+-
+- return NULL;
+-}
+-
+-int hdhomerun_device_set_tuner_from_str(struct hdhomerun_device_t *hd, const char *tuner_str)
+-{
+- unsigned int tuner;
+- if (sscanf(tuner_str, "%u", &tuner) == 1) {
+- hdhomerun_device_set_tuner(hd, tuner);
+- return 1;
+- }
+- if (sscanf(tuner_str, "/tuner%u", &tuner) == 1) {
+- hdhomerun_device_set_tuner(hd, tuner);
+- return 1;
+- }
+-
+- return -1;
+-}
+-
+-const char *hdhomerun_device_get_name(struct hdhomerun_device_t *hd)
+-{
+- return hd->name;
+-}
+-
+-uint32_t hdhomerun_device_get_device_id(struct hdhomerun_device_t *hd)
+-{
+- return hdhomerun_control_get_device_id(hd->cs);
+-}
+-
+-uint32_t hdhomerun_device_get_device_ip(struct hdhomerun_device_t *hd)
+-{
+- return hdhomerun_control_get_device_ip(hd->cs);
+-}
+-
+-uint32_t hdhomerun_device_get_device_id_requested(struct hdhomerun_device_t *hd)
+-{
+- return hdhomerun_control_get_device_id_requested(hd->cs);
+-}
+-
+-uint32_t hdhomerun_device_get_device_ip_requested(struct hdhomerun_device_t *hd)
+-{
+- return hdhomerun_control_get_device_ip_requested(hd->cs);
+-}
+-
+-unsigned int hdhomerun_device_get_tuner(struct hdhomerun_device_t *hd)
++void hdhomerun_device_set_tuner(struct hdhomerun_device_t *hd, unsigned int tuner)
+ {
+- return hd->tuner;
++ hd->tuner = tuner;
+ }
+
+ struct hdhomerun_control_sock_t *hdhomerun_device_get_control_sock(struct hdhomerun_device_t *hd)
+@@ -264,16 +72,9 @@
+
+ struct hdhomerun_video_sock_t *hdhomerun_device_get_video_sock(struct hdhomerun_device_t *hd)
+ {
+- if (hd->vs) {
+- return hd->vs;
+- }
+-
+- hd->vs = hdhomerun_video_create(0, VIDEO_DATA_BUFFER_SIZE_1S * 2, hd->dbg);
+ if (!hd->vs) {
+- hdhomerun_debug_printf(hd->dbg, "hdhomerun_device_get_video_sock: failed to create video object\n");
+- return NULL;
++ hd->vs = hdhomerun_video_create(0, VIDEO_DATA_BUFFER_SIZE_1S);
+ }
+-
+ return hd->vs;
+ }
+
+@@ -295,73 +96,7 @@
+ return (uint32_t)value;
+ }
+
+-static bool_t hdhomerun_device_get_tuner_status_lock_is_bcast(struct hdhomerun_tuner_status_t *status)
+-{
+- if (strcmp(status->lock_str, "8vsb") == 0) {
+- return TRUE;
+- }
+- if (strncmp(status->lock_str, "t8", 2) == 0) {
+- return TRUE;
+- }
+- if (strncmp(status->lock_str, "t7", 2) == 0) {
+- return TRUE;
+- }
+- if (strncmp(status->lock_str, "t6", 2) == 0) {
+- return TRUE;
+- }
+-
+- return FALSE;
+-}
+-
+-uint32_t hdhomerun_device_get_tuner_status_ss_color(struct hdhomerun_tuner_status_t *status)
+-{
+- unsigned int ss_yellow_min;
+- unsigned int ss_green_min;
+-
+- if (!status->lock_supported) {
+- return HDHOMERUN_STATUS_COLOR_NEUTRAL;
+- }
+-
+- if (hdhomerun_device_get_tuner_status_lock_is_bcast(status)) {
+- ss_yellow_min = 50; /* -30dBmV */
+- ss_green_min = 75; /* -15dBmV */
+- } else {
+- ss_yellow_min = 80; /* -12dBmV */
+- ss_green_min = 90; /* -6dBmV */
+- }
+-
+- if (status->signal_strength >= ss_green_min) {
+- return HDHOMERUN_STATUS_COLOR_GREEN;
+- }
+- if (status->signal_strength >= ss_yellow_min) {
+- return HDHOMERUN_STATUS_COLOR_YELLOW;
+- }
+-
+- return HDHOMERUN_STATUS_COLOR_RED;
+-}
+-
+-uint32_t hdhomerun_device_get_tuner_status_snq_color(struct hdhomerun_tuner_status_t *status)
+-{
+- if (status->signal_to_noise_quality >= 70) {
+- return HDHOMERUN_STATUS_COLOR_GREEN;
+- }
+- if (status->signal_to_noise_quality >= 50) {
+- return HDHOMERUN_STATUS_COLOR_YELLOW;
+- }
+-
+- return HDHOMERUN_STATUS_COLOR_RED;
+-}
+-
+-uint32_t hdhomerun_device_get_tuner_status_seq_color(struct hdhomerun_tuner_status_t *status)
+-{
+- if (status->symbol_error_quality >= 100) {
+- return HDHOMERUN_STATUS_COLOR_GREEN;
+- }
+-
+- return HDHOMERUN_STATUS_COLOR_RED;
+-}
+-
+-int hdhomerun_device_get_tuner_status(struct hdhomerun_device_t *hd, char **pstatus_str, struct hdhomerun_tuner_status_t *status)
++int hdhomerun_device_get_tuner_status(struct hdhomerun_device_t *hd, struct hdhomerun_tuner_status_t *status)
+ {
+ memset(status, 0, sizeof(struct hdhomerun_tuner_status_t));
+
+@@ -374,18 +109,9 @@
+ return ret;
+ }
+
+- if (pstatus_str) {
+- *pstatus_str = status_str;
+- }
+-
+ char *channel = strstr(status_str, "ch=");
+ if (channel) {
+- sscanf(channel + 3, "%31s", status->channel);
+- }
+-
+- char *lock = strstr(status_str, "lock=");
+- if (lock) {
+- sscanf(lock + 5, "%31s", status->lock_str);
++ sscanf(channel + 3, "%s", status->channel);
+ }
+
+ status->signal_strength = (unsigned int)hdhomerun_device_get_status_parse(status_str, "ss=");
+@@ -394,16 +120,6 @@
+ status->raw_bits_per_second = hdhomerun_device_get_status_parse(status_str, "bps=");
+ status->packets_per_second = hdhomerun_device_get_status_parse(status_str, "pps=");
+
+- status->signal_present = status->signal_strength >= 45;
+-
+- if (strcmp(status->lock_str, "none") != 0) {
+- if (status->lock_str[0] == '(') {
+- status->lock_unsupported = TRUE;
+- } else {
+- status->lock_supported = TRUE;
+- }
+- }
+-
+ return 1;
+ }
+
+@@ -435,74 +151,26 @@
+ return hdhomerun_control_get(hd->cs, name, pfilter, NULL);
+ }
+
+-int hdhomerun_device_get_tuner_program(struct hdhomerun_device_t *hd, char **pprogram)
++int hdhomerun_device_get_tuner_program(struct hdhomerun_device_t *hd, uint16_t *pprogram_number)
+ {
+ char name[32];
+ sprintf(name, "/tuner%u/program", hd->tuner);
+- return hdhomerun_control_get(hd->cs, name, pprogram, NULL);
+-}
+-
+-int hdhomerun_device_get_tuner_target(struct hdhomerun_device_t *hd, char **ptarget)
+-{
+- char name[32];
+- sprintf(name, "/tuner%u/target", hd->tuner);
+- return hdhomerun_control_get(hd->cs, name, ptarget, NULL);
+-}
+-
+-int hdhomerun_device_get_tuner_plotsample(struct hdhomerun_device_t *hd, struct hdhomerun_plotsample_t **psamples, size_t *pcount)
+-{
+- char name[32];
+- sprintf(name, "/tuner%u/plotsample", hd->tuner);
+
+- char *result;
+- int ret = hdhomerun_control_get(hd->cs, name, &result, NULL);
++ char *program_str;
++ int ret = hdhomerun_control_get(hd->cs, name, &program_str, NULL);
+ if (ret <= 0) {
+ return ret;
+ }
+
+- struct hdhomerun_plotsample_t *samples = (struct hdhomerun_plotsample_t *)result;
+- *psamples = samples;
+- size_t count = 0;
+-
+- while (1) {
+- char *ptr = strchr(result, ' ');
+- if (!ptr) {
+- break;
+- }
+- *ptr++ = 0;
+-
+- unsigned long raw;
+- if (sscanf(result, "%lx", &raw) != 1) {
+- break;
+- }
+-
+- uint16_t real = (raw >> 12) & 0x0FFF;
+- if (real & 0x0800) {
+- real |= 0xF000;
+- }
+-
+- uint16_t imag = (raw >> 0) & 0x0FFF;
+- if (imag & 0x0800) {
+- imag |= 0xF000;
+- }
+-
+- samples->real = (int16_t)real;
+- samples->imag = (int16_t)imag;
+- samples++;
+- count++;
+-
+- result = ptr;
+- }
+-
+- *pcount = count;
++ *pprogram_number = (uint16_t)atol(program_str);
+ return 1;
+ }
+
+-int hdhomerun_device_get_tuner_lockkey_owner(struct hdhomerun_device_t *hd, char **powner)
++int hdhomerun_device_get_tuner_target(struct hdhomerun_device_t *hd, char **ptarget)
+ {
+ char name[32];
+- sprintf(name, "/tuner%u/lockkey", hd->tuner);
+- return hdhomerun_control_get(hd->cs, name, powner, NULL);
++ sprintf(name, "/tuner%u/target", hd->tuner);
++ return hdhomerun_control_get(hd->cs, name, ptarget, NULL);
+ }
+
+ int hdhomerun_device_get_ir_target(struct hdhomerun_device_t *hd, char **ptarget)
+@@ -510,11 +178,6 @@
+ return hdhomerun_control_get(hd->cs, "/ir/target", ptarget, NULL);
+ }
+
+-int hdhomerun_device_get_lineup_location(struct hdhomerun_device_t *hd, char **plocation)
+-{
+- return hdhomerun_control_get(hd->cs, "/lineup/location", plocation, NULL);
+-}
+-
+ int hdhomerun_device_get_version(struct hdhomerun_device_t *hd, char **pversion_str, uint32_t *pversion_num)
+ {
+ char *version_str;
+@@ -543,119 +206,44 @@
+ {
+ char name[32];
+ sprintf(name, "/tuner%u/channel", hd->tuner);
+- return hdhomerun_control_set_with_lockkey(hd->cs, name, channel, hd->lockkey, NULL, NULL);
++ return hdhomerun_control_set(hd->cs, name, channel, NULL, NULL);
+ }
+
+ int hdhomerun_device_set_tuner_channelmap(struct hdhomerun_device_t *hd, const char *channelmap)
+ {
+ char name[32];
+ sprintf(name, "/tuner%u/channelmap", hd->tuner);
+- return hdhomerun_control_set_with_lockkey(hd->cs, name, channelmap, hd->lockkey, NULL, NULL);
++ return hdhomerun_control_set(hd->cs, name, channelmap, NULL, NULL);
+ }
+
+ int hdhomerun_device_set_tuner_filter(struct hdhomerun_device_t *hd, const char *filter)
+ {
+ char name[32];
+ sprintf(name, "/tuner%u/filter", hd->tuner);
+- return hdhomerun_control_set_with_lockkey(hd->cs, name, filter, hd->lockkey, NULL, NULL);
+-}
+-
+-static int hdhomerun_device_set_tuner_filter_by_array_append(char **pptr, char *end, uint16_t range_begin, uint16_t range_end)
+-{
+- char *ptr = *pptr;
+-
+- size_t available = end - ptr;
+- size_t required;
+-
+- if (range_begin == range_end) {
+- required = snprintf(ptr, available, "0x%04x ", range_begin) + 1;
+- } else {
+- required = snprintf(ptr, available, "0x%04x-0x%04x ", range_begin, range_end) + 1;
+- }
+-
+- if (required > available) {
+- return FALSE;
+- }
+-
+- *pptr = strchr(ptr, 0);
+- return TRUE;
+-}
+-
+-int hdhomerun_device_set_tuner_filter_by_array(struct hdhomerun_device_t *hd, unsigned char filter_array[0x2000])
+-{
+- char filter[1024];
+- char *ptr = filter;
+- char *end = filter + sizeof(filter);
+-
+- uint16_t range_begin = 0xFFFF;
+- uint16_t range_end = 0xFFFF;
+-
+- uint16_t i;
+- for (i = 0; i <= 0x1FFF; i++) {
+- if (!filter_array[i]) {
+- if (range_begin == 0xFFFF) {
+- continue;
+- }
+- if (!hdhomerun_device_set_tuner_filter_by_array_append(&ptr, end, range_begin, range_end)) {
+- return 0;
+- }
+- range_begin = 0xFFFF;
+- range_end = 0xFFFF;
+- continue;
+- }
+-
+- if (range_begin == 0xFFFF) {
+- range_begin = i;
+- range_end = i;
+- continue;
+- }
+-
+- range_end = i;
+- }
+-
+- if (range_begin != 0xFFFF) {
+- if (!hdhomerun_device_set_tuner_filter_by_array_append(&ptr, end, range_begin, range_end)) {
+- return 0;
+- }
+- }
+-
+- /* Remove trailing space. */
+- if (ptr > filter) {
+- ptr--;
+- }
+- *ptr = 0;
+-
+- return hdhomerun_device_set_tuner_filter(hd, filter);
++ return hdhomerun_control_set(hd->cs, name, filter, NULL, NULL);
+ }
+
+-int hdhomerun_device_set_tuner_program(struct hdhomerun_device_t *hd, const char *program)
++int hdhomerun_device_set_tuner_program(struct hdhomerun_device_t *hd, uint16_t program_number)
+ {
+- char name[32];
++ char name[32], value[32];
+ sprintf(name, "/tuner%u/program", hd->tuner);
+- return hdhomerun_control_set_with_lockkey(hd->cs, name, program, hd->lockkey, NULL, NULL);
++ sprintf(value, "%u", program_number);
++ return hdhomerun_control_set(hd->cs, name, value, NULL, NULL);
+ }
+
+-int hdhomerun_device_set_tuner_target(struct hdhomerun_device_t *hd, const char *target)
++int hdhomerun_device_set_tuner_target(struct hdhomerun_device_t *hd, char *target)
+ {
+ char name[32];
+ sprintf(name, "/tuner%u/target", hd->tuner);
+- return hdhomerun_control_set_with_lockkey(hd->cs, name, target, hd->lockkey, NULL, NULL);
++ return hdhomerun_control_set(hd->cs, name, target, NULL, NULL);
+ }
+
+-int hdhomerun_device_set_tuner_target_to_local_protocol(struct hdhomerun_device_t *hd, const char *protocol)
++static int hdhomerun_device_set_tuner_target_to_local(struct hdhomerun_device_t *hd)
+ {
+- /* Create video socket. */
+- hdhomerun_device_get_video_sock(hd);
+- if (!hd->vs) {
+- return -1;
+- }
+-
+- /* Set target. */
+ char target[64];
+ uint32_t local_ip = hdhomerun_control_get_local_addr(hd->cs);
+ uint16_t local_port = hdhomerun_video_get_local_port(hd->vs);
+- sprintf(target, "%s://%u.%u.%u.%u:%u",
+- protocol,
++ sprintf(target, "%u.%u.%u.%u:%u",
+ (unsigned int)(local_ip >> 24) & 0xFF, (unsigned int)(local_ip >> 16) & 0xFF,
+ (unsigned int)(local_ip >> 8) & 0xFF, (unsigned int)(local_ip >> 0) & 0xFF,
+ (unsigned int)local_port
+@@ -664,21 +252,11 @@
+ return hdhomerun_device_set_tuner_target(hd, target);
+ }
+
+-int hdhomerun_device_set_tuner_target_to_local(struct hdhomerun_device_t *hd)
+-{
+- return hdhomerun_device_set_tuner_target_to_local_protocol(hd, HDHOMERUN_TARGET_PROTOCOL_UDP);
+-}
+-
+ int hdhomerun_device_set_ir_target(struct hdhomerun_device_t *hd, const char *target)
+ {
+ return hdhomerun_control_set(hd->cs, "/ir/target", target, NULL, NULL);
+ }
+
+-int hdhomerun_device_set_lineup_location(struct hdhomerun_device_t *hd, const char *location)
+-{
+- return hdhomerun_control_set(hd->cs, "/lineup/location", location, NULL, NULL);
+-}
+-
+ int hdhomerun_device_get_var(struct hdhomerun_device_t *hd, const char *name, char **pvalue, char **perror)
+ {
+ return hdhomerun_control_get(hd->cs, name, pvalue, perror);
+@@ -686,183 +264,41 @@
+
+ int hdhomerun_device_set_var(struct hdhomerun_device_t *hd, const char *name, const char *value, char **pvalue, char **perror)
+ {
+- return hdhomerun_control_set_with_lockkey(hd->cs, name, value, hd->lockkey, pvalue, perror);
+-}
+-
+-int hdhomerun_device_tuner_lockkey_request(struct hdhomerun_device_t *hd, char **perror)
+-{
+- uint32_t new_lockkey = (uint32_t)getcurrenttime();
+-
+- char name[32];
+- sprintf(name, "/tuner%u/lockkey", hd->tuner);
+-
+- char new_lockkey_str[64];
+- sprintf(new_lockkey_str, "%u", (unsigned int)new_lockkey);
+-
+- int ret = hdhomerun_control_set_with_lockkey(hd->cs, name, new_lockkey_str, hd->lockkey, NULL, perror);
+- if (ret <= 0) {
+- hd->lockkey = 0;
+- return ret;
+- }
+-
+- hd->lockkey = new_lockkey;
+- return ret;
+-}
+-
+-int hdhomerun_device_tuner_lockkey_release(struct hdhomerun_device_t *hd)
+-{
+- if (hd->lockkey == 0) {
+- return 1;
+- }
+-
+- char name[32];
+- sprintf(name, "/tuner%u/lockkey", hd->tuner);
+- int ret = hdhomerun_control_set_with_lockkey(hd->cs, name, "none", hd->lockkey, NULL, NULL);
+-
+- hd->lockkey = 0;
+- return ret;
+-}
+-
+-int hdhomerun_device_tuner_lockkey_force(struct hdhomerun_device_t *hd)
+-{
+- char name[32];
+- sprintf(name, "/tuner%u/lockkey", hd->tuner);
+- int ret = hdhomerun_control_set(hd->cs, name, "force", NULL, NULL);
+-
+- hd->lockkey = 0;
+- return ret;
+-}
+-
+-void hdhomerun_device_tuner_lockkey_use_value(struct hdhomerun_device_t *hd, uint32_t lockkey)
+-{
+- hd->lockkey = lockkey;
++ return hdhomerun_control_set(hd->cs, name, value, pvalue, perror);
+ }
+
+-int hdhomerun_device_wait_for_lock(struct hdhomerun_device_t *hd, struct hdhomerun_tuner_status_t *status)
++int hdhomerun_device_stream_start(struct hdhomerun_device_t *hd)
+ {
+- /* Delay for SS reading to be valid (signal present). */
+- msleep(250);
+-
+- /* Wait for up to 2.5 seconds for lock. */
+- uint64_t timeout = getcurrenttime() + 2500;
+- while (1) {
+- /* Get status to check for lock. Quality numbers will not be valid yet. */
+- int ret = hdhomerun_device_get_tuner_status(hd, NULL, status);
+- if (ret <= 0) {
+- return ret;
+- }
+-
+- if (!status->signal_present) {
+- return 1;
+- }
+- if (status->lock_supported || status->lock_unsupported) {
+- return 1;
+- }
+-
+- if (getcurrenttime() >= timeout) {
+- return 1;
+- }
+-
+- msleep(250);
++ /* Create video socket. */
++ hdhomerun_device_get_video_sock(hd);
++ if (!hd->vs) {
++ return -1;
+ }
+-}
+
+-int hdhomerun_device_stream_start(struct hdhomerun_device_t *hd)
+-{
+ /* Set target. */
+- int ret = hdhomerun_device_stream_refresh_target(hd);
++ int ret = hdhomerun_device_set_tuner_target_to_local(hd);
+ if (ret <= 0) {
+ return ret;
+ }
+
+ /* Flush video buffer. */
+- msleep(64);
++ usleep(64000);
+ hdhomerun_video_flush(hd->vs);
+
+ /* Success. */
+ return 1;
+ }
+
+-int hdhomerun_device_stream_refresh_target(struct hdhomerun_device_t *hd)
+-{
+- int ret = hdhomerun_device_set_tuner_target_to_local_protocol(hd, HDHOMERUN_TARGET_PROTOCOL_RTP);
+- if (ret == 0) {
+- ret = hdhomerun_device_set_tuner_target_to_local_protocol(hd, HDHOMERUN_TARGET_PROTOCOL_UDP);
+- }
+- return ret;
+-}
+-
+ uint8_t *hdhomerun_device_stream_recv(struct hdhomerun_device_t *hd, size_t max_size, size_t *pactual_size)
+ {
+- if (!hd->vs) {
+- return NULL;
+- }
+ return hdhomerun_video_recv(hd->vs, max_size, pactual_size);
+ }
+
+-void hdhomerun_device_stream_flush(struct hdhomerun_device_t *hd)
+-{
+- hdhomerun_video_flush(hd->vs);
+-}
+-
+ void hdhomerun_device_stream_stop(struct hdhomerun_device_t *hd)
+ {
+ hdhomerun_device_set_tuner_target(hd, "none");
+ }
+
+-int hdhomerun_device_channelscan_init(struct hdhomerun_device_t *hd, const char *channelmap)
+-{
+- if (hd->scan) {
+- channelscan_destroy(hd->scan);
+- }
+-
+- hd->scan = channelscan_create(hd, channelmap);
+- if (!hd->scan) {
+- return -1;
+- }
+-
+- return 1;
+-}
+-
+-int hdhomerun_device_channelscan_advance(struct hdhomerun_device_t *hd, struct hdhomerun_channelscan_result_t *result)
+-{
+- if (!hd->scan) {
+- return 0;
+- }
+-
+- int ret = channelscan_advance(hd->scan, result);
+- if (ret <= 0) {
+- channelscan_destroy(hd->scan);
+- hd->scan = NULL;
+- }
+-
+- return ret;
+-}
+-
+-int hdhomerun_device_channelscan_detect(struct hdhomerun_device_t *hd, struct hdhomerun_channelscan_result_t *result)
+-{
+- if (!hd->scan) {
+- return 0;
+- }
+-
+- int ret = channelscan_detect(hd->scan, result);
+- if (ret <= 0) {
+- channelscan_destroy(hd->scan);
+- hd->scan = NULL;
+- }
+-
+- return ret;
+-}
+-
+-uint8_t hdhomerun_device_channelscan_get_progress(struct hdhomerun_device_t *hd)
+-{
+- if (!hd->scan) {
+- return 0;
+- }
+-
+- return channelscan_get_progress(hd->scan);
+-}
+-
+ int hdhomerun_device_firmware_version_check(struct hdhomerun_device_t *hd, uint32_t features)
+ {
+ uint32_t version;
+@@ -870,74 +306,16 @@
+ return -1;
+ }
+
+- if (version < 20070219) {
+- return 0;
++ if (version >= 20061213) {
++ return 1;
+ }
+
+- return 1;
+-}
+-
+-const char *hdhomerun_device_get_model_str(struct hdhomerun_device_t *hd)
+-{
+- if (*hd->model) {
+- return hd->model;
+- }
+-
+- char *model_str;
+- int ret = hdhomerun_control_get(hd->cs, "/sys/model", &model_str, NULL);
+- if (ret < 0) {
+- return NULL;
+- }
+- if (ret == 0) {
+- model_str = "hdhomerun_atsc";
+- }
+-
+- strncpy(hd->model, model_str, sizeof(hd->model) - 1);
+- hd->model[sizeof(hd->model) - 1] = 0;
+-
+- return hd->model;
++ return 0;
+ }
+
+ int hdhomerun_device_upgrade(struct hdhomerun_device_t *hd, FILE *upgrade_file)
+ {
+- hdhomerun_control_set(hd->cs, "/tuner0/lockkey", "force", NULL, NULL);
+ hdhomerun_control_set(hd->cs, "/tuner0/channel", "none", NULL, NULL);
+-
+- hdhomerun_control_set(hd->cs, "/tuner1/lockkey", "force", NULL, NULL);
+ hdhomerun_control_set(hd->cs, "/tuner1/channel", "none", NULL, NULL);
+-
+ return hdhomerun_control_upgrade(hd->cs, upgrade_file);
+ }
+-
+-void hdhomerun_device_debug_print_video_stats(struct hdhomerun_device_t *hd)
+-{
+- if (!hdhomerun_debug_enabled(hd->dbg)) {
+- return;
+- }
+-
+- char name[32];
+- sprintf(name, "/tuner%u/debug", hd->tuner);
+-
+- char *debug_str;
+- char *error_str;
+- int ret = hdhomerun_control_get(hd->cs, name, &debug_str, &error_str);
+- if (ret < 0) {
+- hdhomerun_debug_printf(hd->dbg, "video dev: communication error getting debug stats\n");
+- return;
+- }
+-
+- if (error_str) {
+- hdhomerun_debug_printf(hd->dbg, "video dev: %s\n", error_str);
+- } else {
+- hdhomerun_debug_printf(hd->dbg, "video dev: %s\n", debug_str);
+- }
+-
+- if (hd->vs) {
+- hdhomerun_video_debug_print_stats(hd->vs);
+- }
+-}
+-
+-void hdhomerun_device_get_video_stats(struct hdhomerun_device_t *hd, struct hdhomerun_video_stats_t *stats)
+-{
+- hdhomerun_video_get_stats(hd->vs, stats);
+-}
+diff -aur branches/release-0-21-fixes/mythtv/libs/libmythtv/hdhomerun/hdhomerun_device.h src/mythtv-0.21/libs/libmythtv/hdhomerun/hdhomerun_device.h
+--- branches/release-0-21-fixes/mythtv/libs/libmythtv/hdhomerun/hdhomerun_device.h 2009-07-13 15:44:12.000000000 +0930
++++ src/mythtv-0.21/libs/libmythtv/hdhomerun/hdhomerun_device.h 2009-01-09 13:14:56.000000000 +1030
+@@ -1,12 +1,12 @@
+ /*
+ * hdhomerun_device.h
+ *
+- * Copyright © 2006-2008 Silicondust USA Inc. <www.silicondust.com>.
++ * Copyright © 2006 Silicondust Engineering Ltd. <www.silicondust.com>.
+ *
+- * This library is free software; you can redistribute it and/or
++ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+- * version 3 of the License, or (at your option) any later version.
++ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+@@ -14,20 +14,8 @@
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+- *
+- * As a special exception to the GNU Lesser General Public License,
+- * you may link, statically or dynamically, an application with a
+- * publicly distributed version of the Library to produce an
+- * executable file containing portions of the Library, and
+- * distribute that executable file under terms of your choice,
+- * without any of the additional requirements listed in clause 4 of
+- * the GNU Lesser General Public License.
+- *
+- * By "a publicly distributed version of the Library", we mean
+- * either the unmodified Library as distributed by Silicondust, or a
+- * modified version of the Library that is distributed under the
+- * conditions defined in the GNU Lesser General Public License.
++ * License along with this library; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+ #ifdef __cplusplus
+@@ -38,8 +26,16 @@
+ #define HDHOMERUN_DEVICE_MAX_LOCK_TO_DATA_TIME 2000
+ #define HDHOMERUN_DEVICE_MAX_TUNE_TO_DATA_TIME (HDHOMERUN_DEVICE_MAX_TUNE_TO_LOCK_TIME + HDHOMERUN_DEVICE_MAX_LOCK_TO_DATA_TIME)
+
+-#define HDHOMERUN_TARGET_PROTOCOL_UDP "udp"
+-#define HDHOMERUN_TARGET_PROTOCOL_RTP "rtp"
++struct hdhomerun_device_t;
++
++struct hdhomerun_tuner_status_t {
++ char channel[32];
++ unsigned int signal_strength;
++ unsigned int signal_to_noise_quality;
++ unsigned int symbol_error_quality;
++ uint32_t raw_bits_per_second;
++ uint32_t packets_per_second;
++};
+
+ /*
+ * Create a device object.
+@@ -49,49 +45,22 @@
+ *
+ * For example, a threaded application that streams video from 4 tuners (2 HDHomeRun devices) and has
+ * GUI feedback to the user of the selected tuner might use 5 device objects: 4 for streaming video
+- * (one per thread) and one for the GUI display that can switch between tuners.
++ * (one per thread) and one for the GUI display that can just between tuners.
+ *
+- * This function will not attempt to connect to the device. The connection will be established when first used.
++ * This function will not attempt to connect to the device.
++ * The connection will be established when first used.
+ *
+ * uint32_t device_id = 32-bit device id of device. Set to HDHOMERUN_DEVICE_ID_WILDCARD to match any device ID.
+ * uint32_t device_ip = IP address of device. Set to 0 to auto-detect.
+ * unsigned int tuner = tuner index (0 or 1). Can be changed later by calling hdhomerun_device_set_tuner.
+- * struct hdhomerun_debug_t *dbg: Pointer to debug logging object. May be NULL.
+ *
+ * Returns a pointer to the newly created device object.
+ *
+ * When no longer needed, the socket should be destroyed by calling hdhomerun_device_destroy.
+- *
+- * The hdhomerun_device_create_from_str function creates a device object from the given device_str.
+- * The device_str parameter can be any of the following forms:
+- * <device id>
+- * <device id>-<tuner index>
+- * <ip address>
+- * If the tuner index is not included in the device_str then it is set to zero. Use hdhomerun_device_set_tuner
+- * or hdhomerun_device_set_tuner_from_str to set the tuner.
+- *
+- * The hdhomerun_device_set_tuner_from_str function sets the tuner from the given tuner_str.
+- * The tuner_str parameter can be any of the following forms:
+- * <tuner index>
+- * /tuner<tuner index>
+ */
+-extern LIBTYPE struct hdhomerun_device_t *hdhomerun_device_create(uint32_t device_id, uint32_t device_ip, unsigned int tuner, struct hdhomerun_debug_t *dbg);
+-extern LIBTYPE struct hdhomerun_device_t *hdhomerun_device_create_from_str(const char *device_str, struct hdhomerun_debug_t *dbg);
+-extern LIBTYPE void hdhomerun_device_destroy(struct hdhomerun_device_t *hd);
+-
+-/*
+- * Get the device id, ip, or tuner of the device instance.
+- */
+-extern LIBTYPE const char *hdhomerun_device_get_name(struct hdhomerun_device_t *hd);
+-extern LIBTYPE uint32_t hdhomerun_device_get_device_id(struct hdhomerun_device_t *hd);
+-extern LIBTYPE uint32_t hdhomerun_device_get_device_ip(struct hdhomerun_device_t *hd);
+-extern LIBTYPE uint32_t hdhomerun_device_get_device_id_requested(struct hdhomerun_device_t *hd);
+-extern LIBTYPE uint32_t hdhomerun_device_get_device_ip_requested(struct hdhomerun_device_t *hd);
+-extern LIBTYPE unsigned int hdhomerun_device_get_tuner(struct hdhomerun_device_t *hd);
+-
+-extern LIBTYPE void hdhomerun_device_set_device(struct hdhomerun_device_t *hd, uint32_t device_id, uint32_t device_ip);
+-extern LIBTYPE void hdhomerun_device_set_tuner(struct hdhomerun_device_t *hd, unsigned int tuner);
+-extern LIBTYPE int hdhomerun_device_set_tuner_from_str(struct hdhomerun_device_t *hd, const char *tuner_str);
++extern struct hdhomerun_device_t *hdhomerun_device_create(uint32_t device_id, uint32_t device_ip, unsigned int tuner);
++extern void hdhomerun_device_destroy(struct hdhomerun_device_t *hd);
++extern void hdhomerun_device_set_tuner(struct hdhomerun_device_t *hd, unsigned int tuner);
+
+ /*
+ * Get the local machine IP address used when communicating with the device.
+@@ -100,7 +69,7 @@
+ *
+ * Returns 32-bit IP address with native endianness, or 0 on error.
+ */
+-extern LIBTYPE uint32_t hdhomerun_device_get_local_machine_addr(struct hdhomerun_device_t *hd);
++extern uint32_t hdhomerun_device_get_local_machine_addr(struct hdhomerun_device_t *hd);
+
+ /*
+ * Get operations.
+@@ -113,24 +82,15 @@
+ * Returns 0 if the operation was rejected.
+ * Returns -1 if a communication error occurred.
+ */
+-extern LIBTYPE int hdhomerun_device_get_tuner_status(struct hdhomerun_device_t *hd, char **pstatus_str, struct hdhomerun_tuner_status_t *status);
+-extern LIBTYPE int hdhomerun_device_get_tuner_streaminfo(struct hdhomerun_device_t *hd, char **pstreaminfo);
+-extern LIBTYPE int hdhomerun_device_get_tuner_channel(struct hdhomerun_device_t *hd, char **pchannel);
+-extern LIBTYPE int hdhomerun_device_get_tuner_channelmap(struct hdhomerun_device_t *hd, char **pchannelmap);
+-extern LIBTYPE int hdhomerun_device_get_tuner_filter(struct hdhomerun_device_t *hd, char **pfilter);
+-extern LIBTYPE int hdhomerun_device_get_tuner_program(struct hdhomerun_device_t *hd, char **pprogram);
+-extern LIBTYPE int hdhomerun_device_get_tuner_target(struct hdhomerun_device_t *hd, char **ptarget);
+-extern LIBTYPE int hdhomerun_device_get_tuner_plotsample(struct hdhomerun_device_t *hd, struct hdhomerun_plotsample_t **psamples, size_t *pcount);
+-extern LIBTYPE int hdhomerun_device_get_tuner_lockkey_owner(struct hdhomerun_device_t *hd, char **powner);
+-extern LIBTYPE int hdhomerun_device_get_ir_target(struct hdhomerun_device_t *hd, char **ptarget);
+-extern LIBTYPE int hdhomerun_device_get_lineup_location(struct hdhomerun_device_t *hd, char **plocation);
+-extern LIBTYPE int hdhomerun_device_get_version(struct hdhomerun_device_t *hd, char **pversion_str, uint32_t *pversion_num);
+-
+-extern LIBTYPE uint32_t hdhomerun_device_get_tuner_status_ss_color(struct hdhomerun_tuner_status_t *status);
+-extern LIBTYPE uint32_t hdhomerun_device_get_tuner_status_snq_color(struct hdhomerun_tuner_status_t *status);
+-extern LIBTYPE uint32_t hdhomerun_device_get_tuner_status_seq_color(struct hdhomerun_tuner_status_t *status);
+-
+-extern LIBTYPE const char *hdhomerun_device_get_model_str(struct hdhomerun_device_t *hd);
++extern int hdhomerun_device_get_tuner_status(struct hdhomerun_device_t *hd, struct hdhomerun_tuner_status_t *status);
++extern int hdhomerun_device_get_tuner_streaminfo(struct hdhomerun_device_t *hd, char **pstreaminfo);
++extern int hdhomerun_device_get_tuner_channel(struct hdhomerun_device_t *hd, char **pchannel);
++extern int hdhomerun_device_get_tuner_channelmap(struct hdhomerun_device_t *hd, char **pchannelmap);
++extern int hdhomerun_device_get_tuner_filter(struct hdhomerun_device_t *hd, char **pfilter);
++extern int hdhomerun_device_get_tuner_program(struct hdhomerun_device_t *hd, uint16_t *pprogram_number);
++extern int hdhomerun_device_get_tuner_target(struct hdhomerun_device_t *hd, char **ptarget);
++extern int hdhomerun_device_get_ir_target(struct hdhomerun_device_t *hd, char **ptarget);
++extern int hdhomerun_device_get_version(struct hdhomerun_device_t *hd, char **pversion_str, uint32_t *pversion_num);
+
+ /*
+ * Set operations.
+@@ -141,16 +101,12 @@
+ * Returns 0 if the operation was rejected.
+ * Returns -1 if a communication error occurred.
+ */
+-extern LIBTYPE int hdhomerun_device_set_tuner_channel(struct hdhomerun_device_t *hd, const char *channel);
+-extern LIBTYPE int hdhomerun_device_set_tuner_channelmap(struct hdhomerun_device_t *hd, const char *channelmap);
+-extern LIBTYPE int hdhomerun_device_set_tuner_filter(struct hdhomerun_device_t *hd, const char *filter);
+-extern LIBTYPE int hdhomerun_device_set_tuner_filter_by_array(struct hdhomerun_device_t *hd, unsigned char filter_array[0x2000]);
+-extern LIBTYPE int hdhomerun_device_set_tuner_program(struct hdhomerun_device_t *hd, const char *program);
+-extern LIBTYPE int hdhomerun_device_set_tuner_target(struct hdhomerun_device_t *hd, const char *target);
+-extern LIBTYPE int hdhomerun_device_set_tuner_target_to_local_protocol(struct hdhomerun_device_t *hd, const char *protocol);
+-extern LIBTYPE int hdhomerun_device_set_tuner_target_to_local(struct hdhomerun_device_t *hd);
+-extern LIBTYPE int hdhomerun_device_set_ir_target(struct hdhomerun_device_t *hd, const char *target);
+-extern LIBTYPE int hdhomerun_device_set_lineup_location(struct hdhomerun_device_t *hd, const char *location);
++extern int hdhomerun_device_set_tuner_channel(struct hdhomerun_device_t *hd, const char *channel);
++extern int hdhomerun_device_set_tuner_channelmap(struct hdhomerun_device_t *hd, const char *channelmap);
++extern int hdhomerun_device_set_tuner_filter(struct hdhomerun_device_t *hd, const char *filter);
++extern int hdhomerun_device_set_tuner_program(struct hdhomerun_device_t *hd, uint16_t program_number);
++extern int hdhomerun_device_set_tuner_target(struct hdhomerun_device_t *hd, char *target);
++extern int hdhomerun_device_set_ir_target(struct hdhomerun_device_t *hd, const char *target);
+
+ /*
+ * Get/set a named control variable on the device.
+@@ -169,42 +125,8 @@
+ * Returns 0 if the operation was rejected (pvalue NULL, perror set).
+ * Returns -1 if a communication error occurs.
+ */
+-extern LIBTYPE int hdhomerun_device_get_var(struct hdhomerun_device_t *hd, const char *name, char **pvalue, char **perror);
+-extern LIBTYPE int hdhomerun_device_set_var(struct hdhomerun_device_t *hd, const char *name, const char *value, char **pvalue, char **perror);
+-
+-/*
+- * Tuner locking.
+- *
+- * The hdhomerun_device_tuner_lockkey_request function is used to obtain a lock
+- * or to verify that the hdhomerun_device object still holds the lock.
+- * Returns 1 if the lock request was successful and the lock was obtained.
+- * Returns 0 if the lock request was rejected.
+- * Returns -1 if a communication error occurs.
+- *
+- * The hdhomerun_device_tuner_lockkey_release function is used to release a
+- * previously held lock. If locking is used then this function must be called
+- * before destroying the hdhomerun_device object.
+- */
+-extern LIBTYPE int hdhomerun_device_tuner_lockkey_request(struct hdhomerun_device_t *hd, char **perror);
+-extern LIBTYPE int hdhomerun_device_tuner_lockkey_release(struct hdhomerun_device_t *hd);
+-extern LIBTYPE int hdhomerun_device_tuner_lockkey_force(struct hdhomerun_device_t *hd);
+-
+-/*
+- * Intended only for non persistent connections; eg, hdhomerun_config.
+- */
+-extern LIBTYPE void hdhomerun_device_tuner_lockkey_use_value(struct hdhomerun_device_t *hd, uint32_t lockkey);
+-
+-/*
+- * Wait for tuner lock after channel change.
+- *
+- * The hdhomerun_device_wait_for_lock function is used to detect/wait for a lock vs no lock indication
+- * after a channel change.
+- *
+- * It will return quickly if a lock is aquired.
+- * It will return quickly if there is no signal detected.
+- * Worst case it will time out after 1.5 seconds - the case where there is signal but no lock.
+- */
+-extern LIBTYPE int hdhomerun_device_wait_for_lock(struct hdhomerun_device_t *hd, struct hdhomerun_tuner_status_t *status);
++extern int hdhomerun_device_get_var(struct hdhomerun_device_t *hd, const char *name, char **pvalue, char **perror);
++extern int hdhomerun_device_set_var(struct hdhomerun_device_t *hd, const char *name, const char *value, char **pvalue, char **perror);
+
+ /*
+ * Stream a filtered program or the unfiltered stream.
+@@ -222,19 +144,9 @@
+ *
+ * The hdhomerun_device_stream_stop function tells the device to stop streaming data.
+ */
+-extern LIBTYPE int hdhomerun_device_stream_start(struct hdhomerun_device_t *hd);
+-extern LIBTYPE int hdhomerun_device_stream_refresh_target(struct hdhomerun_device_t *hd);
+-extern LIBTYPE uint8_t *hdhomerun_device_stream_recv(struct hdhomerun_device_t *hd, size_t max_size, size_t *pactual_size);
+-extern LIBTYPE void hdhomerun_device_stream_flush(struct hdhomerun_device_t *hd);
+-extern LIBTYPE void hdhomerun_device_stream_stop(struct hdhomerun_device_t *hd);
+-
+-/*
+- * Channel scan API.
+- */
+-extern LIBTYPE int hdhomerun_device_channelscan_init(struct hdhomerun_device_t *hd, const char *channelmap);
+-extern LIBTYPE int hdhomerun_device_channelscan_advance(struct hdhomerun_device_t *hd, struct hdhomerun_channelscan_result_t *result);
+-extern LIBTYPE int hdhomerun_device_channelscan_detect(struct hdhomerun_device_t *hd, struct hdhomerun_channelscan_result_t *result);
+-extern LIBTYPE uint8_t hdhomerun_device_channelscan_get_progress(struct hdhomerun_device_t *hd);
++extern int hdhomerun_device_stream_start(struct hdhomerun_device_t *hd);
++extern uint8_t *hdhomerun_device_stream_recv(struct hdhomerun_device_t *hd, size_t max_size, size_t *pactual_size);
++extern void hdhomerun_device_stream_stop(struct hdhomerun_device_t *hd);
+
+ /*
+ * Check that the device is running the recommended firmware.
+@@ -245,7 +157,7 @@
+ * Returns 0 if th firmware does not meet the minimum requriements for all operations.
+ * Returns -1 if an error occurs.
+ */
+-extern LIBTYPE int hdhomerun_device_firmware_version_check(struct hdhomerun_device_t *hd, uint32_t features);
++extern int hdhomerun_device_firmware_version_check(struct hdhomerun_device_t *hd, uint32_t features);
+
+ /*
+ * Upload new firmware to the device.
+@@ -256,19 +168,13 @@
+ * Returns 0 if the upload was rejected.
+ * Returns -1 if an error occurs.
+ */
+-extern LIBTYPE int hdhomerun_device_upgrade(struct hdhomerun_device_t *hd, FILE *upgrade_file);
++extern int hdhomerun_device_upgrade(struct hdhomerun_device_t *hd, FILE *upgrade_file);
+
+ /*
+ * Low level accessor functions.
+ */
+-extern LIBTYPE struct hdhomerun_control_sock_t *hdhomerun_device_get_control_sock(struct hdhomerun_device_t *hd);
+-extern LIBTYPE struct hdhomerun_video_sock_t *hdhomerun_device_get_video_sock(struct hdhomerun_device_t *hd);
+-
+-/*
+- * Debug print internal stats.
+- */
+-extern LIBTYPE void hdhomerun_device_debug_print_video_stats(struct hdhomerun_device_t *hd);
+-extern LIBTYPE void hdhomerun_device_get_video_stats(struct hdhomerun_device_t *hd, struct hdhomerun_video_stats_t *stats);
++extern struct hdhomerun_control_sock_t *hdhomerun_device_get_control_sock(struct hdhomerun_device_t *hd);
++extern struct hdhomerun_video_sock_t *hdhomerun_device_get_video_sock(struct hdhomerun_device_t *hd);
+
+ #ifdef __cplusplus
+ }
+Only in branches/release-0-21-fixes/mythtv/libs/libmythtv/hdhomerun: hdhomerun_device_selector.c
+Only in branches/release-0-21-fixes/mythtv/libs/libmythtv/hdhomerun: hdhomerun_device_selector.h
+Only in branches/release-0-21-fixes/mythtv/libs/libmythtv/hdhomerun: hdhomerun_dhcp.c
+Only in branches/release-0-21-fixes/mythtv/libs/libmythtv/hdhomerun: hdhomerun_dhcp.h
+diff -aur branches/release-0-21-fixes/mythtv/libs/libmythtv/hdhomerun/hdhomerun_discover.c src/mythtv-0.21/libs/libmythtv/hdhomerun/hdhomerun_discover.c
+--- branches/release-0-21-fixes/mythtv/libs/libmythtv/hdhomerun/hdhomerun_discover.c 2009-07-13 15:44:12.000000000 +0930
++++ src/mythtv-0.21/libs/libmythtv/hdhomerun/hdhomerun_discover.c 2009-01-09 13:14:56.000000000 +1030
+@@ -1,12 +1,12 @@
+ /*
+ * hdhomerun_discover.c
+ *
+- * Copyright © 2006-2007 Silicondust USA Inc. <www.silicondust.com>.
++ * Copyright © 2006 Silicondust Engineering Ltd. <www.silicondust.com>.
+ *
+- * This library is free software; you can redistribute it and/or
++ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+- * version 3 of the License, or (at your option) any later version.
++ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+@@ -14,93 +14,206 @@
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+- *
+- * As a special exception to the GNU Lesser General Public License,
+- * you may link, statically or dynamically, an application with a
+- * publicly distributed version of the Library to produce an
+- * executable file containing portions of the Library, and
+- * distribute that executable file under terms of your choice,
+- * without any of the additional requirements listed in clause 4 of
+- * the GNU Lesser General Public License.
+- *
+- * By "a publicly distributed version of the Library", we mean
+- * either the unmodified Library as distributed by Silicondust, or a
+- * modified version of the Library that is distributed under the
+- * conditions defined in the GNU Lesser General Public License.
++ * License along with this library; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+-#include "hdhomerun.h"
++#include "hdhomerun_os.h"
++#include "hdhomerun_pkt.h"
++#include "hdhomerun_discover.h"
+
+ #if defined(__CYGWIN__) || defined(__WINDOWS__)
+ #include <windows.h>
++#include <iptypes.h>
+ #include <iphlpapi.h>
+-#define USE_IPHLPAPI 1
+-#else
+-#include <net/if.h>
+-#include <sys/ioctl.h>
+-#ifndef _SIZEOF_ADDR_IFREQ
+-#define _SIZEOF_ADDR_IFREQ(x) sizeof(x)
+-#endif
+ #endif
+
+-#define HDHOMERUN_DISOCVER_MAX_SOCK_COUNT 16
++// for OSX
++#include <unistd.h> // execl, pipe, sysconf
++#include <sys/types.h> // waitpid
++#include <sys/wait.h> // waitpid
+
+ struct hdhomerun_discover_sock_t {
+ int sock;
+- uint32_t local_ip;
+- uint32_t subnet_mask;
+ };
+
+-struct hdhomerun_discover_t {
+- struct hdhomerun_discover_sock_t socks[HDHOMERUN_DISOCVER_MAX_SOCK_COUNT];
+- unsigned int sock_count;
+- struct hdhomerun_pkt_t tx_pkt;
+- struct hdhomerun_pkt_t rx_pkt;
+-};
+-
+-static bool_t hdhomerun_discover_sock_create(struct hdhomerun_discover_t *ds, uint32_t local_ip, uint32_t subnet_mask)
++static struct hdhomerun_discover_sock_t *hdhomerun_discover_create(void)
+ {
+- if (ds->sock_count >= HDHOMERUN_DISOCVER_MAX_SOCK_COUNT) {
+- return FALSE;
++ struct hdhomerun_discover_sock_t *ds = (struct hdhomerun_discover_sock_t *)malloc(sizeof(struct hdhomerun_discover_sock_t));
++ if (!ds) {
++ return NULL;
+ }
+-
++
+ /* Create socket. */
+- int sock = (int)socket(AF_INET, SOCK_DGRAM, 0);
+- if (sock == -1) {
+- return FALSE;
++ ds->sock = (int)socket(AF_INET, SOCK_DGRAM, 0);
++ if (ds->sock == -1) {
++ free(ds);
++ return NULL;
+ }
+
+ /* Set timeouts. */
+- setsocktimeout(sock, SOL_SOCKET, SO_SNDTIMEO, 1000);
+- setsocktimeout(sock, SOL_SOCKET, SO_RCVTIMEO, 1000);
++ setsocktimeout(ds->sock, SOL_SOCKET, SO_SNDTIMEO, 1000);
++ setsocktimeout(ds->sock, SOL_SOCKET, SO_RCVTIMEO, 1000);
+
+ /* Allow broadcast. */
+ int sock_opt = 1;
+- setsockopt(sock, SOL_SOCKET, SO_BROADCAST, (char *)&sock_opt, sizeof(sock_opt));
++ setsockopt(ds->sock, SOL_SOCKET, SO_BROADCAST, (char *)&sock_opt, sizeof(sock_opt));
+
+ /* Bind socket. */
+ struct sockaddr_in sock_addr;
+ memset(&sock_addr, 0, sizeof(sock_addr));
+ sock_addr.sin_family = AF_INET;
+- sock_addr.sin_addr.s_addr = htonl(local_ip);
++ sock_addr.sin_addr.s_addr = htonl(INADDR_ANY);
+ sock_addr.sin_port = htons(0);
+- if (bind(sock, (struct sockaddr *)&sock_addr, sizeof(sock_addr)) != 0) {
+- close(sock);
+- return FALSE;
++ if (bind(ds->sock, (struct sockaddr *)&sock_addr, sizeof(sock_addr)) != 0) {
++ close(ds->sock);
++ free(ds);
++ return NULL;
+ }
+
+- /* Write sock entry. */
+- struct hdhomerun_discover_sock_t *dss = &ds->socks[ds->sock_count++];
+- dss->sock = sock;
+- dss->local_ip = local_ip;
+- dss->subnet_mask = subnet_mask;
++ /* Success. */
++ return ds;
++}
+
+- return TRUE;
++static void hdhomerun_discover_destroy(struct hdhomerun_discover_sock_t *ds)
++{
++ close(ds->sock);
++ free(ds);
+ }
+
+-#if defined(USE_IPHLPAPI)
+-static void hdhomerun_discover_sock_detect(struct hdhomerun_discover_t *ds)
++static int hdhomerun_discover_send_packet(struct hdhomerun_discover_sock_t *ds, uint32_t ip_addr, uint32_t device_type, uint32_t device_id)
++{
++ uint8_t buffer[1024];
++ uint8_t *ptr = buffer;
++ hdhomerun_write_discover_request(&ptr, device_type, device_id);
++
++ struct sockaddr_in sock_addr;
++ memset(&sock_addr, 0, sizeof(sock_addr));
++ sock_addr.sin_family = AF_INET;
++ sock_addr.sin_addr.s_addr = htonl(ip_addr);
++ sock_addr.sin_port = htons(HDHOMERUN_DISCOVER_UDP_PORT);
++
++ int length = (int)(ptr - buffer);
++ if (sendto(ds->sock, (char *)buffer, (int)length, 0, (struct sockaddr *)&sock_addr, sizeof(sock_addr)) != length) {
++ return -1;
++ }
++
++ return 0;
++}
++
++#if defined(__APPLE__)
++static int hdhomerun_discover_send_internal(struct hdhomerun_discover_sock_t *ds, unsigned long device_type, unsigned long device_id)
++{
++ /* printf("Looking for 0x%lx with id 0x%lx\n", device_type, device_id); */
++ int fds[2];
++ if (pipe(fds) < 0)
++ {
++ printf("Pipe Failed\n");
++ return -1;
++ }
++
++ pid_t child = fork();
++ if (child < 0)
++ {
++ printf("Fork Failed\n");
++ return -1;
++ }
++ else if (child == 0)
++ {
++ /* Child */
++ int i = 0;
++
++ /* Attach stdout to pipe */
++ close(1);
++ dup2(fds[1], 1);
++
++ /* Close all open file descriptors except stdout/stderr */
++ for (i = sysconf(_SC_OPEN_MAX) - 1; i > 2; i--)
++ close(i);
++
++ /* Run command */
++ execl("/bin/sh", "sh", "-c", "ifconfig", NULL);
++
++ /* Failed to exec */
++ _exit(1); /* this exit is ok */
++ }
++ else
++ {
++ /* Parent */
++ int send_count = 0;
++ int status;
++ FILE *fp;
++ char line[1024];
++ char adaptor[1024];
++
++ close(fds[1]);
++
++ if (waitpid(child, &status, 0) < 0)
++ return -1;
++
++ if (WEXITSTATUS(status))
++ return -1;
++
++ fp = fdopen(fds[0], "r");
++ while (1)
++ {
++ char *ptr = NULL;
++ int netmask, broadcast;
++ int a,b,c,d;
++
++ if (!fgets(line, sizeof(line) - 1, fp))
++ {
++ break;
++ }
++
++ line[1023] = 0;
++
++ /* find ": flags" */
++ ptr = strnstr(line, ": flags", 1024 - 1);
++ if (ptr >= line)
++ {
++ /* grab adaptor before that */
++ strncpy(adaptor, line, ptr-line);
++ adaptor[ptr-line] = 0;
++ }
++
++ /* find "netmask " */
++ ptr = strnstr(line, "netmask ", 1024 - 1);
++ if (ptr <= line)
++ continue;
++ ptr += strlen("netmask ");
++ sscanf(ptr, "%x", &netmask);
++
++ /* find "broadcast " */
++ ptr = strnstr(ptr, "broadcast ", 1024 - 1);
++ if (ptr <= line)
++ continue;
++ ptr += strlen("broadcast ");
++ sscanf(ptr, "%i.%i.%i.%i", &a, &b, &c, &d);
++ broadcast = a<<24 | b<<16 | c<<8 | d;
++ /*
++ printf("Adaptor: '%s' 0x%08x %i.%i.%i.%i\n",
++ adaptor, broadcast, a,b,c,d);
++ */
++
++ /* send discover packet this adaptor */
++ if (hdhomerun_discover_send_packet(
++ ds, broadcast, device_type, device_id) >= 0)
++ {
++ send_count++;
++ }
++ }
++
++ fclose(fp); /* this closes fds[0] as well */
++
++ /* printf("send_count: %i\n\n", send_count); */
++ return (send_count == 0) ? -1 : 0;
++ }
++}
++
++#elif defined(__CYGWIN__) || defined(__WINDOWS__)
++
++static int hdhomerun_discover_send_internal(struct hdhomerun_discover_sock_t *ds, uint32_t device_type, uint32_t device_id)
+ {
+ PIP_ADAPTER_INFO pAdapterInfo = (IP_ADAPTER_INFO *)malloc(sizeof(IP_ADAPTER_INFO));
+ ULONG ulOutBufLen = sizeof(IP_ADAPTER_INFO);
+@@ -109,29 +222,37 @@
+ if (Ret != NO_ERROR) {
+ free(pAdapterInfo);
+ if (Ret != ERROR_BUFFER_OVERFLOW) {
+- return;
++ return -1;
+ }
+ pAdapterInfo = (IP_ADAPTER_INFO *)malloc(ulOutBufLen);
+ Ret = GetAdaptersInfo(pAdapterInfo, &ulOutBufLen);
+ if (Ret != NO_ERROR) {
+ free(pAdapterInfo);
+- return;
++ return -1;
+ }
+ }
+
++ unsigned int send_count = 0;
+ PIP_ADAPTER_INFO pAdapter = pAdapterInfo;
+ while (pAdapter) {
+ IP_ADDR_STRING *pIPAddr = &pAdapter->IpAddressList;
+ while (pIPAddr) {
+- uint32_t local_ip = ntohl(inet_addr(pIPAddr->IpAddress.String));
++ uint32_t addr = ntohl(inet_addr(pIPAddr->IpAddress.String));
+ uint32_t mask = ntohl(inet_addr(pIPAddr->IpMask.String));
++
++ uint32_t broadcast = addr | ~mask;
++ if ((broadcast == 0x00000000) || (broadcast == 0xFFFFFFFF)) {
++ pIPAddr = pIPAddr->Next;
++ continue;
++ }
+
+- if (local_ip == 0) {
++ if (hdhomerun_discover_send_packet(ds, broadcast, device_type, device_id) < 0) {
+ pIPAddr = pIPAddr->Next;
+ continue;
+ }
+
+- hdhomerun_discover_sock_create(ds, local_ip, mask);
++ send_count++;
++
+ pIPAddr = pIPAddr->Next;
+ }
+
+@@ -139,198 +260,111 @@
+ }
+
+ free(pAdapterInfo);
+-}
+-
+-#else
+
+-static void hdhomerun_discover_sock_detect(struct hdhomerun_discover_t *ds)
+-{
+- int fd = socket(AF_INET, SOCK_DGRAM, 0);
+- if (fd == -1) {
+- return;
++ if (send_count == 0) {
++ return -1;
+ }
++ return 0;
++}
+
+- struct ifconf ifc;
+- uint8_t buf[8192];
+- ifc.ifc_len = sizeof(buf);
+- ifc.ifc_buf = (char *)buf;
+-
+- memset(buf, 0, sizeof(buf));
++#elif defined(__linux__)
+
+- if (ioctl(fd, SIOCGIFCONF, &ifc) != 0) {
+- close(fd);
+- return;
++static int hdhomerun_discover_send_internal(struct hdhomerun_discover_sock_t *ds, uint32_t device_type, uint32_t device_id)
++{
++ FILE *fp = fopen("/proc/net/route", "r");
++ if (!fp) {
++ return -1;
+ }
+
+- uint8_t *ptr = (uint8_t *)ifc.ifc_req;
+- uint8_t *end = (uint8_t *)&ifc.ifc_buf[ifc.ifc_len];
+-
+- while (ptr <= end) {
+- struct ifreq *ifr = (struct ifreq *)ptr;
+- ptr += _SIZEOF_ADDR_IFREQ(*ifr);
++ unsigned int send_count = 0;
++ while (1) {
++ char line[256];
++ if (!fgets(line, sizeof(line), fp)) {
++ break;
++ }
++ line[255] = 0;
+
+- if (ioctl(fd, SIOCGIFADDR, ifr) != 0) {
++ uint32_t dest;
++ uint32_t mask;
++ if (sscanf(line, "%*s %x %*x %*x %*d %*d %*d %x", &dest, &mask) != 2) {
+ continue;
+ }
+- struct sockaddr_in *addr_in = (struct sockaddr_in *)&(ifr->ifr_addr);
+- uint32_t local_ip = ntohl(addr_in->sin_addr.s_addr);
+- if (local_ip == 0) {
++ dest = ntohl(dest);
++ mask = ntohl(mask);
++
++ uint32_t broadcast = dest | ~mask;
++
++ if ((broadcast == 0x00000000) || (broadcast == 0xFFFFFFFF)) {
+ continue;
+ }
+
+- if (ioctl(fd, SIOCGIFNETMASK, ifr) != 0) {
++ if (hdhomerun_discover_send_packet(ds, broadcast, device_type, device_id) < 0) {
+ continue;
+ }
+- struct sockaddr_in *mask_in = (struct sockaddr_in *)&(ifr->ifr_addr);
+- uint32_t mask = ntohl(mask_in->sin_addr.s_addr);
+
+- hdhomerun_discover_sock_create(ds, local_ip, mask);
++ send_count++;
+ }
+-}
+-#endif
+
+-static struct hdhomerun_discover_t *hdhomerun_discover_create(void)
+-{
+- struct hdhomerun_discover_t *ds = (struct hdhomerun_discover_t *)calloc(1, sizeof(struct hdhomerun_discover_t));
+- if (!ds) {
+- return NULL;
+- }
+-
+- /* Create a routable socket. */
+- if (!hdhomerun_discover_sock_create(ds, 0, 0)) {
+- free(ds);
+- return NULL;
++ fclose(fp);
++ if (send_count == 0) {
++ return -1;
+ }
+-
+- /* Detect & create local sockets. */
+- hdhomerun_discover_sock_detect(ds);
+-
+- /* Success. */
+- return ds;
++ return 0;
+ }
+
+-static void hdhomerun_discover_destroy(struct hdhomerun_discover_t *ds)
+-{
+- unsigned int i;
+- for (i = 0; i < ds->sock_count; i++) {
+- struct hdhomerun_discover_sock_t *dss = &ds->socks[i];
+- close(dss->sock);
+- }
+-
+- free(ds);
+-}
++#else
+
+-static bool_t hdhomerun_discover_send_internal(struct hdhomerun_discover_t *ds, struct hdhomerun_discover_sock_t *dss, uint32_t target_ip, uint32_t device_type, uint32_t device_id)
++static int hdhomerun_discover_send_internal(struct hdhomerun_discover_sock_t *ds, uint32_t device_type, uint32_t device_id)
+ {
+- struct hdhomerun_pkt_t *tx_pkt = &ds->tx_pkt;
+- hdhomerun_pkt_reset(tx_pkt);
+-
+- hdhomerun_pkt_write_u8(tx_pkt, HDHOMERUN_TAG_DEVICE_TYPE);
+- hdhomerun_pkt_write_var_length(tx_pkt, 4);
+- hdhomerun_pkt_write_u32(tx_pkt, device_type);
+- hdhomerun_pkt_write_u8(tx_pkt, HDHOMERUN_TAG_DEVICE_ID);
+- hdhomerun_pkt_write_var_length(tx_pkt, 4);
+- hdhomerun_pkt_write_u32(tx_pkt, device_id);
+- hdhomerun_pkt_seal_frame(tx_pkt, HDHOMERUN_TYPE_DISCOVER_REQ);
+-
+- struct sockaddr_in sock_addr;
+- memset(&sock_addr, 0, sizeof(sock_addr));
+- sock_addr.sin_family = AF_INET;
+- sock_addr.sin_addr.s_addr = htonl(target_ip);
+- sock_addr.sin_port = htons(HDHOMERUN_DISCOVER_UDP_PORT);
+-
+- int length = (int)(tx_pkt->end - tx_pkt->start);
+- if (sendto(dss->sock, (char *)tx_pkt->start, length, 0, (struct sockaddr *)&sock_addr, sizeof(sock_addr)) != length) {
+- return FALSE;
+- }
+-
+- return TRUE;
++ return -1;
+ }
++#endif
+
+-static bool_t hdhomerun_discover_send_wildcard_ip(struct hdhomerun_discover_t *ds, uint32_t device_type, uint32_t device_id)
++static int hdhomerun_discover_send(struct hdhomerun_discover_sock_t *ds, uint32_t device_type, uint32_t device_id)
+ {
+- bool_t result = FALSE;
+-
+- /*
+- * Send subnet broadcast using each local ip socket.
+- * This will work with multiple separate 169.254.x.x interfaces.
+- */
+- unsigned int i;
+- for (i = 1; i < ds->sock_count; i++) {
+- struct hdhomerun_discover_sock_t *dss = &ds->socks[i];
+- uint32_t target_ip = dss->local_ip | ~dss->subnet_mask;
+- result |= hdhomerun_discover_send_internal(ds, dss, target_ip, device_type, device_id);
+- }
+-
+- /*
+- * If no local ip sockets then fall back to sending a global broadcast letting the OS choose the interface.
+- */
+- if (!result) {
+- struct hdhomerun_discover_sock_t *dss = &ds->socks[0];
+- result = hdhomerun_discover_send_internal(ds, dss, 0xFFFFFFFF, device_type, device_id);
++ if (hdhomerun_discover_send_internal(ds, device_type, device_id) < 0) {
++ return hdhomerun_discover_send_packet(ds, 0xFFFFFFFF, device_type, device_id);
+ }
+-
+- return result;
++ return 0;
+ }
+
+-static bool_t hdhomerun_discover_send_target_ip(struct hdhomerun_discover_t *ds, uint32_t target_ip, uint32_t device_type, uint32_t device_id)
++static int hdhomerun_discover_recv(struct hdhomerun_discover_sock_t *ds, struct hdhomerun_discover_device_t *result)
+ {
+- bool_t result = FALSE;
+-
+- /*
+- * Send targeted packet from any local ip that is in the same subnet.
+- * This will work with multiple separate 169.254.x.x interfaces.
+- */
+- unsigned int i;
+- for (i = 1; i < ds->sock_count; i++) {
+- struct hdhomerun_discover_sock_t *dss = &ds->socks[i];
+- if ((target_ip & dss->subnet_mask) != (dss->local_ip & dss->subnet_mask)) {
+- continue;
+- }
++ struct timeval t;
++ t.tv_sec = 0;
++ t.tv_usec = 250000;
+
+- result |= hdhomerun_discover_send_internal(ds, dss, target_ip, device_type, device_id);
+- }
++ fd_set readfds;
++ FD_ZERO(&readfds);
++ FD_SET(ds->sock, &readfds);
+
+- /*
+- * If target IP does not match a local subnet then fall back to letting the OS choose the gateway interface.
+- */
+- if (!result) {
+- struct hdhomerun_discover_sock_t *dss = &ds->socks[0];
+- result = hdhomerun_discover_send_internal(ds, dss, target_ip, device_type, device_id);
++ if (select(ds->sock+1, &readfds, NULL, NULL, &t) < 0) {
++ return -1;
+ }
+-
+- return result;
+-}
+-
+-static bool_t hdhomerun_discover_send(struct hdhomerun_discover_t *ds, uint32_t target_ip, uint32_t device_type, uint32_t device_id)
+-{
+- if (target_ip != 0) {
+- return hdhomerun_discover_send_target_ip(ds, target_ip, device_type, device_id);
++ if (!FD_ISSET(ds->sock, &readfds)) {
++ return 0;
+ }
+
+- return hdhomerun_discover_send_wildcard_ip(ds, device_type, device_id);
+-}
+-
+-static int hdhomerun_discover_recv_internal(struct hdhomerun_discover_t *ds, struct hdhomerun_discover_sock_t *dss, struct hdhomerun_discover_device_t *result)
+-{
+- struct hdhomerun_pkt_t *rx_pkt = &ds->rx_pkt;
+- hdhomerun_pkt_reset(rx_pkt);
+-
++ uint8_t buffer[1024];
+ struct sockaddr_in sock_addr;
+- memset(&sock_addr, 0, sizeof(sock_addr));
+ socklen_t sockaddr_size = sizeof(sock_addr);
+-
+- int rx_length = recvfrom(dss->sock, (char *)rx_pkt->end, (int)(rx_pkt->limit - rx_pkt->end), 0, (struct sockaddr *)&sock_addr, &sockaddr_size);
++ int rx_length = recvfrom(ds->sock, (char *)buffer, sizeof(buffer), 0, (struct sockaddr *)&sock_addr, &sockaddr_size);
+ if (rx_length <= 0) {
+ /* Don't return error - windows machine on VPN can sometimes cause a sock error here but otherwise works. */
+ return 0;
+ }
+- rx_pkt->end += rx_length;
++ if (rx_length < HDHOMERUN_MIN_PEEK_LENGTH) {
++ return 0;
++ }
+
+- uint16_t type;
+- if (hdhomerun_pkt_open_frame(rx_pkt, &type) <= 0) {
++ size_t length = hdhomerun_peek_packet_length(buffer);
++ if (length > (size_t)rx_length) {
+ return 0;
+ }
++
++ uint8_t *ptr = buffer;
++ uint8_t *end = buffer + length;
++ int type = hdhomerun_process_packet(&ptr, &end);
+ if (type != HDHOMERUN_TYPE_DISCOVER_RPY) {
+ return 0;
+ }
+@@ -338,12 +372,11 @@
+ result->ip_addr = ntohl(sock_addr.sin_addr.s_addr);
+ result->device_type = 0;
+ result->device_id = 0;
+-
+ while (1) {
+ uint8_t tag;
+ size_t len;
+- uint8_t *next = hdhomerun_pkt_read_tlv(rx_pkt, &tag, &len);
+- if (!next) {
++ uint8_t *value;
++ if (hdhomerun_read_tlv(&ptr, end, &tag, &len, &value) < 0) {
+ break;
+ }
+
+@@ -352,71 +385,28 @@
+ if (len != 4) {
+ break;
+ }
+- result->device_type = hdhomerun_pkt_read_u32(rx_pkt);
++ result->device_type = hdhomerun_read_u32(&value);
+ break;
+-
+ case HDHOMERUN_TAG_DEVICE_ID:
+ if (len != 4) {
+ break;
+ }
+- result->device_id = hdhomerun_pkt_read_u32(rx_pkt);
++ result->device_id = hdhomerun_read_u32(&value);
+ break;
+-
+ default:
+ break;
+ }
+-
+- rx_pkt->pos = next;
+ }
+
+ return 1;
+ }
+
+-static int hdhomerun_discover_recv(struct hdhomerun_discover_t *ds, struct hdhomerun_discover_device_t *result)
+-{
+- struct timeval t;
+- t.tv_sec = 0;
+- t.tv_usec = 250000;
+-
+- fd_set readfds;
+- FD_ZERO(&readfds);
+- int max_sock = -1;
+-
+- unsigned int i;
+- for (i = 0; i < ds->sock_count; i++) {
+- struct hdhomerun_discover_sock_t *dss = &ds->socks[i];
+- FD_SET(dss->sock, &readfds);
+- if (dss->sock > max_sock) {
+- max_sock = dss->sock;
+- }
+- }
+-
+- if (select(max_sock+1, &readfds, NULL, NULL, &t) < 0) {
+- return -1;
+- }
+-
+- for (i = 0; i < ds->sock_count; i++) {
+- struct hdhomerun_discover_sock_t *dss = &ds->socks[i];
+- if (!FD_ISSET(dss->sock, &readfds)) {
+- continue;
+- }
+-
+- if (hdhomerun_discover_recv_internal(ds, dss, result) <= 0) {
+- continue;
+- }
+-
+- return 1;
+- }
+-
+- return 0;
+-}
+-
+-static struct hdhomerun_discover_device_t *hdhomerun_discover_find_in_list(struct hdhomerun_discover_device_t result_list[], int count, uint32_t ip_addr)
++static struct hdhomerun_discover_device_t *hdhomerun_discover_find_in_list(struct hdhomerun_discover_device_t result_list[], int count, uint32_t device_id)
+ {
+ int index;
+ for (index = 0; index < count; index++) {
+ struct hdhomerun_discover_device_t *result = &result_list[index];
+- if (result->ip_addr == ip_addr) {
++ if (result->device_id == device_id) {
+ return result;
+ }
+ }
+@@ -424,12 +414,13 @@
+ return NULL;
+ }
+
+-static int hdhomerun_discover_find_devices_internal(struct hdhomerun_discover_t *ds, uint32_t target_ip, uint32_t device_type, uint32_t device_id, struct hdhomerun_discover_device_t result_list[], int max_count)
++static int hdhomerun_discover_find_devices_internal(struct hdhomerun_discover_sock_t *ds, uint32_t device_type, uint32_t device_id, struct hdhomerun_discover_device_t result_list[], int max_count)
+ {
+ int count = 0;
++
+ int attempt;
+ for (attempt = 0; attempt < 4; attempt++) {
+- if (!hdhomerun_discover_send(ds, target_ip, device_type, device_id)) {
++ if (hdhomerun_discover_send(ds, device_type, device_id) < 0) {
+ return -1;
+ }
+
+@@ -442,7 +433,7 @@
+ return -1;
+ }
+ if (ret == 0) {
+- continue;
++ break;
+ }
+
+ /* Filter. */
+@@ -458,7 +449,7 @@
+ }
+
+ /* Ensure not already in list. */
+- if (hdhomerun_discover_find_in_list(result_list, count, result->ip_addr)) {
++ if (hdhomerun_discover_find_in_list(result_list, count, result->device_id)) {
+ continue;
+ }
+
+@@ -473,14 +464,27 @@
+ return count;
+ }
+
+-int hdhomerun_discover_find_devices_custom(uint32_t target_ip, uint32_t device_type, uint32_t device_id, struct hdhomerun_discover_device_t result_list[], int max_count)
++int hdhomerun_discover_find_device(uint32_t device_id, struct hdhomerun_discover_device_t *result)
++{
++ struct hdhomerun_discover_sock_t *ds = hdhomerun_discover_create();
++ if (!ds) {
++ return -1;
++ }
++
++ int ret = hdhomerun_discover_find_devices_internal(ds, HDHOMERUN_DEVICE_TYPE_WILDCARD, device_id, result, 1);
++
++ hdhomerun_discover_destroy(ds);
++ return ret;
++}
++
++int hdhomerun_discover_find_devices(uint32_t device_type, struct hdhomerun_discover_device_t result_list[], int max_count)
+ {
+- struct hdhomerun_discover_t *ds = hdhomerun_discover_create();
++ struct hdhomerun_discover_sock_t *ds = hdhomerun_discover_create();
+ if (!ds) {
+ return -1;
+ }
+
+- int ret = hdhomerun_discover_find_devices_internal(ds, target_ip, device_type, device_id, result_list, max_count);
++ int ret = hdhomerun_discover_find_devices_internal(ds, device_type, HDHOMERUN_DEVICE_ID_WILDCARD, result_list, max_count);
+
+ hdhomerun_discover_destroy(ds);
+ return ret;
+diff -aur branches/release-0-21-fixes/mythtv/libs/libmythtv/hdhomerun/hdhomerun_discover.h src/mythtv-0.21/libs/libmythtv/hdhomerun/hdhomerun_discover.h
+--- branches/release-0-21-fixes/mythtv/libs/libmythtv/hdhomerun/hdhomerun_discover.h 2009-07-13 15:44:12.000000000 +0930
++++ src/mythtv-0.21/libs/libmythtv/hdhomerun/hdhomerun_discover.h 2009-01-09 13:14:56.000000000 +1030
+@@ -1,12 +1,12 @@
+ /*
+ * hdhomerun_discover.h
+ *
+- * Copyright © 2006-2007 Silicondust USA Inc. <www.silicondust.com>.
++ * Copyright © 2006 Silicondust Engineering Ltd. <www.silicondust.com>.
+ *
+- * This library is free software; you can redistribute it and/or
++ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+- * version 3 of the License, or (at your option) any later version.
++ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+@@ -14,20 +14,8 @@
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+- *
+- * As a special exception to the GNU Lesser General Public License,
+- * you may link, statically or dynamically, an application with a
+- * publicly distributed version of the Library to produce an
+- * executable file containing portions of the Library, and
+- * distribute that executable file under terms of your choice,
+- * without any of the additional requirements listed in clause 4 of
+- * the GNU Lesser General Public License.
+- *
+- * By "a publicly distributed version of the Library", we mean
+- * either the unmodified Library as distributed by Silicondust, or a
+- * modified version of the Library that is distributed under the
+- * conditions defined in the GNU Lesser General Public License.
++ * License along with this library; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+ #ifdef __cplusplus
+ extern "C" {
+@@ -40,18 +28,29 @@
+ };
+
+ /*
+- * Find devices.
++ * Find a device by device ID.
++ *
++ * The device information is stored in caller-supplied hdhomerun_discover_device_t var.
++ * Multiple attempts are made to find the device.
++ * Worst-case execution time is 1 second.
++ *
++ * Returns 1 on success.
++ * Returns 0 if not found.
++ * Retruns -1 on error.
++ */
++extern int hdhomerun_discover_find_device(uint32_t device_id, struct hdhomerun_discover_device_t *result);
++
++/*
++ * Find all devices of a given type.
+ *
+ * The device information is stored in caller-supplied array of hdhomerun_discover_device_t vars.
+ * Multiple attempts are made to find devices.
+ * Execution time is 1 second.
+ *
+- * Set target_ip to zero to auto-detect IP address.
+- *
+ * Returns the number of devices found.
+ * Retruns -1 on error.
+ */
+-extern LIBTYPE int hdhomerun_discover_find_devices_custom(uint32_t target_ip, uint32_t device_type, uint32_t device_id, struct hdhomerun_discover_device_t result_list[], int max_count);
++extern int hdhomerun_discover_find_devices(uint32_t device_type, struct hdhomerun_discover_device_t result_list[], int max_count);
+
+ /*
+ * Verify that the device ID given is valid.
+@@ -62,7 +61,7 @@
+ * Returns TRUE if valid.
+ * Returns FALSE if not valid.
+ */
+-extern LIBTYPE bool_t hdhomerun_discover_validate_device_id(uint32_t device_id);
++extern bool_t hdhomerun_discover_validate_device_id(uint32_t device_id);
+
+ #ifdef __cplusplus
+ }
+diff -aur branches/release-0-21-fixes/mythtv/libs/libmythtv/hdhomerun/hdhomerun_os.h src/mythtv-0.21/libs/libmythtv/hdhomerun/hdhomerun_os.h
+--- branches/release-0-21-fixes/mythtv/libs/libmythtv/hdhomerun/hdhomerun_os.h 2009-07-13 15:44:12.000000000 +0930
++++ src/mythtv-0.21/libs/libmythtv/hdhomerun/hdhomerun_os.h 2009-01-09 13:14:56.000000000 +1030
+@@ -1,12 +1,12 @@
+ /*
+ * hdhomerun_os.h
+ *
+- * Copyright © 2006-2008 Silicondust USA Inc. <www.silicondust.com>.
++ * Copyright © 2006 Silicondust Engineering Ltd. <www.silicondust.com>.
+ *
+- * This library is free software; you can redistribute it and/or
++ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+- * version 3 of the License, or (at your option) any later version.
++ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+@@ -14,36 +14,97 @@
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+- *
+- * As a special exception to the GNU Lesser General Public License,
+- * you may link, statically or dynamically, an application with a
+- * publicly distributed version of the Library to produce an
+- * executable file containing portions of the Library, and
+- * distribute that executable file under terms of your choice,
+- * without any of the additional requirements listed in clause 4 of
+- * the GNU Lesser General Public License.
+- *
+- * By "a publicly distributed version of the Library", we mean
+- * either the unmodified Library as distributed by Silicondust, or a
+- * modified version of the Library that is distributed under the
+- * conditions defined in the GNU Lesser General Public License.
++ * License along with this library; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+-#if defined(_WIN32) || defined(_WIN64)
++#include <stdlib.h>
++#include <stdio.h>
++#include <string.h>
++
++#if defined(WIN32)
+ #define __WINDOWS__
+ #endif
+
+ #if defined(__WINDOWS__)
+-#include "hdhomerun_os_windows.h"
++#include <windows.h>
++#include <sys/types.h>
++#include <sys/timeb.h>
+ #else
+-#include "hdhomerun_os_posix.h"
++#include <unistd.h>
++#include <errno.h>
++#include <sys/types.h>
++#include <sys/socket.h>
++#include <netinet/in.h>
++#include <arpa/inet.h>
++#include <netdb.h>
++#include <sys/time.h>
++#include <sys/timeb.h>
++#include <fcntl.h>
+ #endif
+
++#include <pthread.h>
++
+ #if !defined(TRUE)
+ #define TRUE 1
+ #endif
+-
+ #if !defined(FALSE)
+ #define FALSE 0
+ #endif
++
++#if defined(__WINDOWS__)
++
++typedef int bool_t;
++typedef unsigned __int8 uint8_t;
++typedef unsigned __int16 uint16_t;
++typedef unsigned __int32 uint32_t;
++typedef unsigned __int64 uint64_t;
++
++#define socklen_t int
++#define close closesocket
++#define sock_getlasterror WSAGetLastError()
++#define sock_getlasterror_socktimeout (WSAGetLastError() == WSAETIMEDOUT)
++#define atoll _atoi64
++#define strcasecmp _stricmp
++#define fseeko _fseeki64
++#define ftello _ftelli64
++#define usleep(us) Sleep((us)/1000)
++#define sleep(sec) Sleep((sec)*1000)
++
++static inline uint64_t getcurrenttime(void)
++{
++ struct timeb tb;
++ ftime(&tb);
++ return ((uint64_t)tb.time * 1000) + tb.millitm;
++}
++
++static inline int setsocktimeout(int s, int level, int optname, uint64_t timeout)
++{
++ int t = (int)timeout;
++ return setsockopt(s, level, optname, (char *)&t, sizeof(t));
++}
++
++#else
++
++typedef int bool_t;
++
++#define sock_getlasterror errno
++#define sock_getlasterror_socktimeout (errno == EAGAIN)
++
++static inline uint64_t getcurrenttime(void)
++{
++ struct timeval t;
++ gettimeofday(&t, NULL);
++ return ((uint64_t)t.tv_sec * 1000) + (t.tv_usec / 1000);
++}
++
++static inline int setsocktimeout(int s, int level, int optname, uint64_t timeout)
++{
++ struct timeval t;
++ t.tv_sec = timeout / 1000;
++ t.tv_usec = (timeout % 1000) * 1000;
++ return setsockopt(s, level, optname, (char *)&t, sizeof(t));
++}
++
++#endif
++
+Only in branches/release-0-21-fixes/mythtv/libs/libmythtv/hdhomerun: hdhomerun_os_posix.h
+Only in branches/release-0-21-fixes/mythtv/libs/libmythtv/hdhomerun: hdhomerun_os_windows.h
+diff -aur branches/release-0-21-fixes/mythtv/libs/libmythtv/hdhomerun/hdhomerun_pkt.c src/mythtv-0.21/libs/libmythtv/hdhomerun/hdhomerun_pkt.c
+--- branches/release-0-21-fixes/mythtv/libs/libmythtv/hdhomerun/hdhomerun_pkt.c 2009-07-13 15:44:12.000000000 +0930
++++ src/mythtv-0.21/libs/libmythtv/hdhomerun/hdhomerun_pkt.c 2009-01-09 13:14:56.000000000 +1030
+@@ -1,12 +1,12 @@
+ /*
+ * hdhomerun_pkt.c
+ *
+- * Copyright © 2005-2006 Silicondust USA Inc. <www.silicondust.com>.
++ * Copyright © 2005-2006 Silicondust Engineering Ltd. <www.silicondust.com>.
+ *
+- * This library is free software; you can redistribute it and/or
++ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+- * version 3 of the License, or (at your option) any later version.
++ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+@@ -14,232 +14,255 @@
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+- *
+- * As a special exception to the GNU Lesser General Public License,
+- * you may link, statically or dynamically, an application with a
+- * publicly distributed version of the Library to produce an
+- * executable file containing portions of the Library, and
+- * distribute that executable file under terms of your choice,
+- * without any of the additional requirements listed in clause 4 of
+- * the GNU Lesser General Public License.
+- *
+- * By "a publicly distributed version of the Library", we mean
+- * either the unmodified Library as distributed by Silicondust, or a
+- * modified version of the Library that is distributed under the
+- * conditions defined in the GNU Lesser General Public License.
++ * License along with this library; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+-#include "hdhomerun.h"
++#include "hdhomerun_os.h"
++#include "hdhomerun_pkt.h"
+
+-struct hdhomerun_pkt_t *hdhomerun_pkt_create(void)
++uint8_t hdhomerun_read_u8(uint8_t **pptr)
+ {
+- struct hdhomerun_pkt_t *pkt = (struct hdhomerun_pkt_t *)calloc(1, sizeof(struct hdhomerun_pkt_t));
+- if (!pkt) {
+- return NULL;
+- }
+-
+- hdhomerun_pkt_reset(pkt);
+-
+- return pkt;
+-}
+-
+-void hdhomerun_pkt_destroy(struct hdhomerun_pkt_t *pkt)
+-{
+- free(pkt);
+-}
+-
+-void hdhomerun_pkt_reset(struct hdhomerun_pkt_t *pkt)
+-{
+- pkt->limit = pkt->buffer + sizeof(pkt->buffer) - 4;
+- pkt->start = pkt->buffer + 1024;
+- pkt->end = pkt->start;
+- pkt->pos = pkt->start;
+-}
+-
+-static uint32_t hdhomerun_pkt_calc_crc(uint8_t *start, uint8_t *end)
+-{
+- uint8_t *pos = start;
+- uint32_t crc = 0xFFFFFFFF;
+- while (pos < end) {
+- uint8_t x = (uint8_t)(crc) ^ *pos++;
+- crc >>= 8;
+- if (x & 0x01) crc ^= 0x77073096;
+- if (x & 0x02) crc ^= 0xEE0E612C;
+- if (x & 0x04) crc ^= 0x076DC419;
+- if (x & 0x08) crc ^= 0x0EDB8832;
+- if (x & 0x10) crc ^= 0x1DB71064;
+- if (x & 0x20) crc ^= 0x3B6E20C8;
+- if (x & 0x40) crc ^= 0x76DC4190;
+- if (x & 0x80) crc ^= 0xEDB88320;
+- }
+- return crc ^ 0xFFFFFFFF;
+-}
+-
+-uint8_t hdhomerun_pkt_read_u8(struct hdhomerun_pkt_t *pkt)
+-{
+- uint8_t v = *pkt->pos++;
++ uint8_t *ptr = *pptr;
++ uint8_t v = *ptr++;
++ *pptr = ptr;
+ return v;
+ }
+
+-uint16_t hdhomerun_pkt_read_u16(struct hdhomerun_pkt_t *pkt)
++uint16_t hdhomerun_read_u16(uint8_t **pptr)
+ {
++ uint8_t *ptr = *pptr;
+ uint16_t v;
+- v = (uint16_t)*pkt->pos++ << 8;
+- v |= (uint16_t)*pkt->pos++ << 0;
++ v = (uint16_t)*ptr++ << 8;
++ v |= (uint16_t)*ptr++ << 0;
++ *pptr = ptr;
+ return v;
+ }
+
+-uint32_t hdhomerun_pkt_read_u32(struct hdhomerun_pkt_t *pkt)
++uint32_t hdhomerun_read_u32(uint8_t **pptr)
+ {
++ uint8_t *ptr = *pptr;
+ uint32_t v;
+- v = (uint32_t)*pkt->pos++ << 24;
+- v |= (uint32_t)*pkt->pos++ << 16;
+- v |= (uint32_t)*pkt->pos++ << 8;
+- v |= (uint32_t)*pkt->pos++ << 0;
++ v = (uint32_t)*ptr++ << 24;
++ v |= (uint32_t)*ptr++ << 16;
++ v |= (uint32_t)*ptr++ << 8;
++ v |= (uint32_t)*ptr++ << 0;
++ *pptr = ptr;
+ return v;
+ }
+
+-size_t hdhomerun_pkt_read_var_length(struct hdhomerun_pkt_t *pkt)
++size_t hdhomerun_read_var_length(uint8_t **pptr, uint8_t *end)
+ {
++ uint8_t *ptr = *pptr;
+ size_t length;
+
+- if (pkt->pos + 1 > pkt->end) {
+- return (size_t)-1;
++ if (ptr + 1 > end) {
++ return -1;
+ }
+
+- length = (size_t)*pkt->pos++;
++ length = (size_t)*ptr++;
+ if (length & 0x0080) {
+- if (pkt->pos + 1 > pkt->end) {
+- return (size_t)-1;
++ if (ptr + 1 > end) {
++ return -1;
+ }
+
+ length &= 0x007F;
+- length |= (size_t)*pkt->pos++ << 7;
++ length |= (size_t)*ptr++ << 7;
+ }
+
++ *pptr = ptr;
+ return length;
+ }
+
+-uint8_t *hdhomerun_pkt_read_tlv(struct hdhomerun_pkt_t *pkt, uint8_t *ptag, size_t *plength)
++int hdhomerun_read_tlv(uint8_t **pptr, uint8_t *end, uint8_t *ptag, size_t *plength, uint8_t **pvalue)
+ {
+- if (pkt->pos + 2 > pkt->end) {
+- return NULL;
++ if (end - *pptr < 2) {
++ return -1;
+ }
+
+- *ptag = hdhomerun_pkt_read_u8(pkt);
+- *plength = hdhomerun_pkt_read_var_length(pkt);
+-
+- if (pkt->pos + *plength > pkt->end) {
+- return NULL;
++ *ptag = hdhomerun_read_u8(pptr);
++ *plength = hdhomerun_read_var_length(pptr, end);
++ *pvalue = *pptr;
++
++ if ((size_t)(end - *pptr) < *plength) {
++ return -1;
+ }
+
+- return pkt->pos + *plength;
++ *pptr += *plength;
++ return 0;
+ }
+
+-void hdhomerun_pkt_write_u8(struct hdhomerun_pkt_t *pkt, uint8_t v)
++void hdhomerun_write_u8(uint8_t **pptr, uint8_t v)
+ {
+- *pkt->pos++ = v;
++ uint8_t *ptr = *pptr;
++ *ptr++ = v;
++ *pptr = ptr;
++}
+
+- if (pkt->pos > pkt->end) {
+- pkt->end = pkt->pos;
+- }
++void hdhomerun_write_u16(uint8_t **pptr, uint16_t v)
++{
++ uint8_t *ptr = *pptr;
++ *ptr++ = (uint8_t)(v >> 8);
++ *ptr++ = (uint8_t)(v >> 0);
++ *pptr = ptr;
+ }
+
+-void hdhomerun_pkt_write_u16(struct hdhomerun_pkt_t *pkt, uint16_t v)
++void hdhomerun_write_u32(uint8_t **pptr, uint32_t v)
+ {
+- *pkt->pos++ = (uint8_t)(v >> 8);
+- *pkt->pos++ = (uint8_t)(v >> 0);
++ uint8_t *ptr = *pptr;
++ *ptr++ = (uint8_t)(v >> 24);
++ *ptr++ = (uint8_t)(v >> 16);
++ *ptr++ = (uint8_t)(v >> 8);
++ *ptr++ = (uint8_t)(v >> 0);
++ *pptr = ptr;
++}
+
+- if (pkt->pos > pkt->end) {
+- pkt->end = pkt->pos;
++void hdhomerun_write_var_length(uint8_t **pptr, size_t v)
++{
++ uint8_t *ptr = *pptr;
++ if (v <= 127) {
++ *ptr++ = (uint8_t)v;
++ } else {
++ *ptr++ = (uint8_t)(v | 0x80);
++ *ptr++ = (uint8_t)(v >> 7);
+ }
++ *pptr = ptr;
+ }
+
+-void hdhomerun_pkt_write_u32(struct hdhomerun_pkt_t *pkt, uint32_t v)
++static void hdhomerun_write_mem(uint8_t **pptr, void *mem, size_t length)
+ {
+- *pkt->pos++ = (uint8_t)(v >> 24);
+- *pkt->pos++ = (uint8_t)(v >> 16);
+- *pkt->pos++ = (uint8_t)(v >> 8);
+- *pkt->pos++ = (uint8_t)(v >> 0);
++ uint8_t *ptr = *pptr;
++ memcpy(ptr, mem, length);
++ ptr += length;
++ *pptr = ptr;
++}
+
+- if (pkt->pos > pkt->end) {
+- pkt->end = pkt->pos;
++static uint32_t hdhomerun_calc_crc(uint8_t *start, uint8_t *end)
++{
++ uint8_t *ptr = start;
++ uint32_t crc = 0xFFFFFFFF;
++ while (ptr < end) {
++ uint8_t x = (uint8_t)(crc) ^ *ptr++;
++ crc >>= 8;
++ if (x & 0x01) crc ^= 0x77073096;
++ if (x & 0x02) crc ^= 0xEE0E612C;
++ if (x & 0x04) crc ^= 0x076DC419;
++ if (x & 0x08) crc ^= 0x0EDB8832;
++ if (x & 0x10) crc ^= 0x1DB71064;
++ if (x & 0x20) crc ^= 0x3B6E20C8;
++ if (x & 0x40) crc ^= 0x76DC4190;
++ if (x & 0x80) crc ^= 0xEDB88320;
+ }
++ return crc ^ 0xFFFFFFFF;
+ }
+
+-void hdhomerun_pkt_write_var_length(struct hdhomerun_pkt_t *pkt, size_t v)
++static int hdhomerun_check_crc(uint8_t *start, uint8_t *end)
+ {
+- if (v <= 127) {
+- *pkt->pos++ = (uint8_t)v;
+- } else {
+- *pkt->pos++ = (uint8_t)(v | 0x80);
+- *pkt->pos++ = (uint8_t)(v >> 7);
++ if (end - start < 8) {
++ return -1;
+ }
+-
+- if (pkt->pos > pkt->end) {
+- pkt->end = pkt->pos;
++ uint8_t *ptr = end -= 4;
++ uint32_t actual_crc = hdhomerun_calc_crc(start, ptr);
++ uint32_t packet_crc;
++ packet_crc = (uint32_t)*ptr++ << 0;
++ packet_crc |= (uint32_t)*ptr++ << 8;
++ packet_crc |= (uint32_t)*ptr++ << 16;
++ packet_crc |= (uint32_t)*ptr++ << 24;
++ if (actual_crc != packet_crc) {
++ return -1;
+ }
++ return 0;
+ }
+
+-void hdhomerun_pkt_write_mem(struct hdhomerun_pkt_t *pkt, const void *mem, size_t length)
++static void hdhomerun_write_header_length(uint8_t *ptr, size_t length)
+ {
+- memcpy(pkt->pos, mem, length);
+- pkt->pos += length;
++ hdhomerun_write_u16(&ptr, (uint16_t)length);
++}
+
+- if (pkt->pos > pkt->end) {
+- pkt->end = pkt->pos;
+- }
++void hdhomerun_write_crc(uint8_t **pptr, uint8_t *start)
++{
++ uint8_t *ptr = *pptr;
++ uint32_t crc = hdhomerun_calc_crc(start, ptr);
++ *ptr++ = (uint8_t)(crc >> 0);
++ *ptr++ = (uint8_t)(crc >> 8);
++ *ptr++ = (uint8_t)(crc >> 16);
++ *ptr++ = (uint8_t)(crc >> 24);
++ *pptr = ptr;
+ }
+
+-int hdhomerun_pkt_open_frame(struct hdhomerun_pkt_t *pkt, uint16_t *ptype)
++void hdhomerun_write_discover_request(uint8_t **pptr, uint32_t device_type, uint32_t device_id)
+ {
+- pkt->pos = pkt->start;
++ uint8_t *start = *pptr;
++ hdhomerun_write_u16(pptr, HDHOMERUN_TYPE_DISCOVER_REQ);
++ hdhomerun_write_u16(pptr, 0);
+
+- if (pkt->pos + 4 > pkt->end) {
+- return 0;
+- }
++ hdhomerun_write_u8(pptr, HDHOMERUN_TAG_DEVICE_TYPE);
++ hdhomerun_write_var_length(pptr, 4);
++ hdhomerun_write_u32(pptr, device_type);
++ hdhomerun_write_u8(pptr, HDHOMERUN_TAG_DEVICE_ID);
++ hdhomerun_write_var_length(pptr, 4);
++ hdhomerun_write_u32(pptr, device_id);
+
+- *ptype = hdhomerun_pkt_read_u16(pkt);
+- size_t length = hdhomerun_pkt_read_u16(pkt);
+- pkt->pos += length;
++ hdhomerun_write_header_length(start + 2, (int)(*pptr - start - 4));
++ hdhomerun_write_crc(pptr, start);
++}
+
+- if (pkt->pos + 4 > pkt->end) {
+- pkt->pos = pkt->start;
+- return 0;
+- }
++void hdhomerun_write_get_set_request(uint8_t **pptr, const char *name, const char *value)
++{
++ uint8_t *start = *pptr;
++ hdhomerun_write_u16(pptr, HDHOMERUN_TYPE_GETSET_REQ);
++ hdhomerun_write_u16(pptr, 0);
+
+- uint32_t calc_crc = hdhomerun_pkt_calc_crc(pkt->start, pkt->pos);
++ int name_len = (int)strlen(name) + 1;
++ hdhomerun_write_u8(pptr, HDHOMERUN_TAG_GETSET_NAME);
++ hdhomerun_write_var_length(pptr, name_len);
++ hdhomerun_write_mem(pptr, (void *)name, name_len);
+
+- uint32_t packet_crc;
+- packet_crc = (uint32_t)*pkt->pos++ << 0;
+- packet_crc |= (uint32_t)*pkt->pos++ << 8;
+- packet_crc |= (uint32_t)*pkt->pos++ << 16;
+- packet_crc |= (uint32_t)*pkt->pos++ << 24;
+- if (calc_crc != packet_crc) {
+- return -1;
++ if (value) {
++ int value_len = (int)strlen(value) + 1;
++ hdhomerun_write_u8(pptr, HDHOMERUN_TAG_GETSET_VALUE);
++ hdhomerun_write_var_length(pptr, value_len);
++ hdhomerun_write_mem(pptr, (void *)value, value_len);
+ }
+
+- pkt->start += 4;
+- pkt->end = pkt->start + length;
+- pkt->pos = pkt->start;
+- return 1;
++ hdhomerun_write_header_length(start + 2, (int)(*pptr - start - 4));
++ hdhomerun_write_crc(pptr, start);
+ }
+
+-void hdhomerun_pkt_seal_frame(struct hdhomerun_pkt_t *pkt, uint16_t frame_type)
++void hdhomerun_write_upgrade_request(uint8_t **pptr, uint32_t sequence, void *data, size_t length)
+ {
+- size_t length = pkt->end - pkt->start;
++ uint8_t *start = *pptr;
++ hdhomerun_write_u16(pptr, HDHOMERUN_TYPE_UPGRADE_REQ);
++ hdhomerun_write_u16(pptr, 0);
+
+- pkt->start -= 4;
+- pkt->pos = pkt->start;
+- hdhomerun_pkt_write_u16(pkt, frame_type);
+- hdhomerun_pkt_write_u16(pkt, (uint16_t)length);
++ hdhomerun_write_u32(pptr, sequence);
++ if (length > 0) {
++ hdhomerun_write_mem(pptr, data, length);
++ }
+
+- uint32_t crc = hdhomerun_pkt_calc_crc(pkt->start, pkt->end);
+- *pkt->end++ = (uint8_t)(crc >> 0);
+- *pkt->end++ = (uint8_t)(crc >> 8);
+- *pkt->end++ = (uint8_t)(crc >> 16);
+- *pkt->end++ = (uint8_t)(crc >> 24);
++ hdhomerun_write_header_length(start + 2, *pptr - start - 4);
++ hdhomerun_write_crc(pptr, start);
++}
+
+- pkt->pos = pkt->start;
++size_t hdhomerun_peek_packet_length(uint8_t *ptr)
++{
++ ptr += 2;
++ return (size_t)hdhomerun_read_u16(&ptr) + 8;
+ }
++
++int hdhomerun_process_packet(uint8_t **pptr, uint8_t **pend)
++{
++ if (hdhomerun_check_crc(*pptr, *pend) < 0) {
++ return -1;
++ }
++ *pend -= 4;
++
++ uint16_t type = hdhomerun_read_u16(pptr);
++ uint16_t length = hdhomerun_read_u16(pptr);
++ if ((*pend - *pptr) < length) {
++ return -1;
++ }
++ *pend = *pptr + length;
++ return (int)type;
++}
++
+diff -aur branches/release-0-21-fixes/mythtv/libs/libmythtv/hdhomerun/hdhomerun_pkt.h src/mythtv-0.21/libs/libmythtv/hdhomerun/hdhomerun_pkt.h
+--- branches/release-0-21-fixes/mythtv/libs/libmythtv/hdhomerun/hdhomerun_pkt.h 2009-07-13 15:44:12.000000000 +0930
++++ src/mythtv-0.21/libs/libmythtv/hdhomerun/hdhomerun_pkt.h 2009-01-09 13:14:56.000000000 +1030
+@@ -1,12 +1,12 @@
+ /*
+ * hdhomerun_pkt.h
+ *
+- * Copyright © 2005-2006 Silicondust USA Inc. <www.silicondust.com>.
++ * Copyright © 2005-2006 Silicondust Engineering Ltd. <www.silicondust.com>.
+ *
+- * This library is free software; you can redistribute it and/or
++ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+- * version 3 of the License, or (at your option) any later version.
++ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+@@ -14,20 +14,8 @@
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+- *
+- * As a special exception to the GNU Lesser General Public License,
+- * you may link, statically or dynamically, an application with a
+- * publicly distributed version of the Library to produce an
+- * executable file containing portions of the Library, and
+- * distribute that executable file under terms of your choice,
+- * without any of the additional requirements listed in clause 4 of
+- * the GNU Lesser General Public License.
+- *
+- * By "a publicly distributed version of the Library", we mean
+- * either the unmodified Library as distributed by Silicondust, or a
+- * modified version of the Library that is distributed under the
+- * conditions defined in the GNU Lesser General Public License.
++ * License along with this library; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+ #ifdef __cplusplus
+ extern "C" {
+@@ -122,9 +110,6 @@
+ #define HDHOMERUN_DISCOVER_UDP_PORT 65001
+ #define HDHOMERUN_CONTROL_TCP_PORT 65001
+
+-#define HDHOMERUN_MAX_PACKET_SIZE 1460
+-#define HDHOMERUN_MAX_PAYLOAD_SIZE 1452
+-
+ #define HDHOMERUN_TYPE_DISCOVER_REQ 0x0002
+ #define HDHOMERUN_TYPE_DISCOVER_RPY 0x0003
+ #define HDHOMERUN_TYPE_GETSET_REQ 0x0004
+@@ -136,7 +121,6 @@
+ #define HDHOMERUN_TAG_DEVICE_ID 0x02
+ #define HDHOMERUN_TAG_GETSET_NAME 0x03
+ #define HDHOMERUN_TAG_GETSET_VALUE 0x04
+-#define HDHOMERUN_TAG_GETSET_LOCKKEY 0x15
+ #define HDHOMERUN_TAG_ERROR_MESSAGE 0x05
+
+ #define HDHOMERUN_DEVICE_TYPE_WILDCARD 0xFFFFFFFF
+@@ -145,33 +129,25 @@
+
+ #define HDHOMERUN_MIN_PEEK_LENGTH 4
+
+-struct hdhomerun_pkt_t {
+- uint8_t *pos;
+- uint8_t *start;
+- uint8_t *end;
+- uint8_t *limit;
+- uint8_t buffer[3074];
+-};
+-
+-extern LIBTYPE struct hdhomerun_pkt_t *hdhomerun_pkt_create(void);
+-extern LIBTYPE void hdhomerun_pkt_destroy(struct hdhomerun_pkt_t *pkt);
+-extern LIBTYPE void hdhomerun_pkt_reset(struct hdhomerun_pkt_t *pkt);
+-
+-extern LIBTYPE uint8_t hdhomerun_pkt_read_u8(struct hdhomerun_pkt_t *pkt);
+-extern LIBTYPE uint16_t hdhomerun_pkt_read_u16(struct hdhomerun_pkt_t *pkt);
+-extern LIBTYPE uint32_t hdhomerun_pkt_read_u32(struct hdhomerun_pkt_t *pkt);
+-extern LIBTYPE size_t hdhomerun_pkt_read_var_length(struct hdhomerun_pkt_t *pkt);
+-extern LIBTYPE uint8_t *hdhomerun_pkt_read_tlv(struct hdhomerun_pkt_t *pkt, uint8_t *ptag, size_t *plength);
+-
+-extern LIBTYPE void hdhomerun_pkt_write_u8(struct hdhomerun_pkt_t *pkt, uint8_t v);
+-extern LIBTYPE void hdhomerun_pkt_write_u16(struct hdhomerun_pkt_t *pkt, uint16_t v);
+-extern LIBTYPE void hdhomerun_pkt_write_u32(struct hdhomerun_pkt_t *pkt, uint32_t v);
+-extern LIBTYPE void hdhomerun_pkt_write_var_length(struct hdhomerun_pkt_t *pkt, size_t v);
+-extern LIBTYPE void hdhomerun_pkt_write_mem(struct hdhomerun_pkt_t *pkt, const void *mem, size_t length);
+-
+-extern LIBTYPE bool_t hdhomerun_pkt_open_frame(struct hdhomerun_pkt_t *pkt, uint16_t *ptype);
+-extern LIBTYPE void hdhomerun_pkt_seal_frame(struct hdhomerun_pkt_t *pkt, uint16_t frame_type);
++extern uint8_t hdhomerun_read_u8(uint8_t **pptr);
++extern uint16_t hdhomerun_read_u16(uint8_t **pptr);
++extern uint32_t hdhomerun_read_u32(uint8_t **pptr);
++extern size_t hdhomerun_read_var_length(uint8_t **pptr, uint8_t *end);
++extern void hdhomerun_write_u8(uint8_t **pptr, uint8_t v);
++extern void hdhomerun_write_u16(uint8_t **pptr, uint16_t v);
++extern void hdhomerun_write_u32(uint8_t **pptr, uint32_t v);
++extern void hdhomerun_write_var_length(uint8_t **pptr, size_t v);
++extern void hdhomerun_write_crc(uint8_t **pptr, uint8_t *start);
++
++extern size_t hdhomerun_peek_packet_length(uint8_t *ptr);
++extern int hdhomerun_process_packet(uint8_t **pptr, uint8_t **pend);
++extern int hdhomerun_read_tlv(uint8_t **pptr, uint8_t *end, uint8_t *ptag, size_t *plength, uint8_t **pvalue);
++
++extern void hdhomerun_write_discover_request(uint8_t **pptr, uint32_t device_type, uint32_t device_id);
++extern void hdhomerun_write_get_set_request(uint8_t **pptr, const char *name, const char *value);
++extern void hdhomerun_write_upgrade_request(uint8_t **pptr, uint32_t sequence, void *data, size_t length);
+
+ #ifdef __cplusplus
+ }
+ #endif
++
+Only in branches/release-0-21-fixes/mythtv/libs/libmythtv/hdhomerun: hdhomerun_types.h
+diff -aur branches/release-0-21-fixes/mythtv/libs/libmythtv/hdhomerun/hdhomerun_video.c src/mythtv-0.21/libs/libmythtv/hdhomerun/hdhomerun_video.c
+--- branches/release-0-21-fixes/mythtv/libs/libmythtv/hdhomerun/hdhomerun_video.c 2009-07-13 15:44:12.000000000 +0930
++++ src/mythtv-0.21/libs/libmythtv/hdhomerun/hdhomerun_video.c 2009-01-09 13:14:56.000000000 +1030
+@@ -1,12 +1,12 @@
+ /*
+ * hdhomerun_video.c
+ *
+- * Copyright © 2006 Silicondust USA Inc. <www.silicondust.com>.
++ * Copyright © 2006 Silicondust Engineering Ltd. <www.silicondust.com>.
+ *
+- * This library is free software; you can redistribute it and/or
++ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+- * version 3 of the License, or (at your option) any later version.
++ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+@@ -14,82 +14,93 @@
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+- *
+- * As a special exception to the GNU Lesser General Public License,
+- * you may link, statically or dynamically, an application with a
+- * publicly distributed version of the Library to produce an
+- * executable file containing portions of the Library, and
+- * distribute that executable file under terms of your choice,
+- * without any of the additional requirements listed in clause 4 of
+- * the GNU Lesser General Public License.
+- *
+- * By "a publicly distributed version of the Library", we mean
+- * either the unmodified Library as distributed by Silicondust, or a
+- * modified version of the Library that is distributed under the
+- * conditions defined in the GNU Lesser General Public License.
++ * License along with this library; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+-#include "hdhomerun.h"
++#include "hdhomerun_os.h"
++#include "hdhomerun_pkt.h"
++#include "hdhomerun_video.h"
+
+ struct hdhomerun_video_sock_t {
+- pthread_mutex_t lock;
+ uint8_t *buffer;
+ size_t buffer_size;
+ volatile size_t head;
+ volatile size_t tail;
+ size_t advance;
++ volatile bool_t running;
+ volatile bool_t terminate;
+ pthread_t thread;
+ int sock;
+- uint32_t rtp_sequence;
+- struct hdhomerun_debug_t *dbg;
+- volatile uint32_t packet_count;
+- volatile uint32_t transport_error_count;
+- volatile uint32_t network_error_count;
+- volatile uint32_t sequence_error_count;
+- volatile uint32_t overflow_error_count;
+- volatile uint8_t sequence[0x2000];
+ };
+
+-static THREAD_FUNC_PREFIX hdhomerun_video_thread_execute(void *arg);
++static void *hdhomerun_video_thread(void *arg);
+
+-struct hdhomerun_video_sock_t *hdhomerun_video_create(uint16_t listen_port, size_t buffer_size, struct hdhomerun_debug_t *dbg)
++static bool_t hdhomerun_video_bind_sock_internal(struct hdhomerun_video_sock_t *vs, uint16_t listen_port)
++{
++ struct sockaddr_in sock_addr;
++ memset(&sock_addr, 0, sizeof(sock_addr));
++ sock_addr.sin_family = AF_INET;
++ sock_addr.sin_addr.s_addr = htonl(INADDR_ANY);
++ sock_addr.sin_port = htons(listen_port);
++ if (bind(vs->sock, (struct sockaddr *)&sock_addr, sizeof(sock_addr)) != 0) {
++ return FALSE;
++ }
++ return TRUE;
++}
++
++static bool_t hdhomerun_video_bind_sock(struct hdhomerun_video_sock_t *vs, uint16_t listen_port)
++{
++ if (listen_port != 0) {
++ return hdhomerun_video_bind_sock_internal(vs, listen_port);
++ }
++
++#if defined(__CYGWIN__) || defined(__WINDOWS__)
++ /* Windows firewall silently blocks a listening port if the port number is not explicitly given. */
++ /* Workaround - pick a random port number. The port may already be in use to try multiple port numbers. */
++ srand((int)getcurrenttime());
++ int retry;
++ for (retry = 8; retry > 0; retry--) {
++ uint16_t listen_port = (uint16_t)((rand() % 32768) + 32768);
++ if (hdhomerun_video_bind_sock_internal(vs, listen_port)) {
++ return TRUE;
++ }
++ }
++ return FALSE;
++#else
++ return hdhomerun_video_bind_sock_internal(vs, listen_port);
++#endif
++}
++
++struct hdhomerun_video_sock_t *hdhomerun_video_create(uint16_t listen_port, size_t buffer_size)
+ {
+ /* Create object. */
+ struct hdhomerun_video_sock_t *vs = (struct hdhomerun_video_sock_t *)calloc(1, sizeof(struct hdhomerun_video_sock_t));
+ if (!vs) {
+- hdhomerun_debug_printf(dbg, "hdhomerun_video_create: failed to allocate video object\n");
+ return NULL;
+ }
+
+- vs->dbg = dbg;
+- vs->sock = -1;
+- pthread_mutex_init(&vs->lock, NULL);
+-
+- /* Reset sequence tracking. */
+- hdhomerun_video_flush(vs);
+-
+ /* Buffer size. */
+ vs->buffer_size = (buffer_size / VIDEO_DATA_PACKET_SIZE) * VIDEO_DATA_PACKET_SIZE;
+ if (vs->buffer_size == 0) {
+- hdhomerun_debug_printf(dbg, "hdhomerun_video_create: invalid buffer size (%lu bytes)\n", (unsigned long)buffer_size);
+- goto error;
++ free(vs);
++ return NULL;
+ }
+ vs->buffer_size += VIDEO_DATA_PACKET_SIZE;
+
+ /* Create buffer. */
+ vs->buffer = (uint8_t *)malloc(vs->buffer_size);
+ if (!vs->buffer) {
+- hdhomerun_debug_printf(dbg, "hdhomerun_video_create: failed to allocate buffer (%lu bytes)\n", (unsigned long)vs->buffer_size);
+- goto error;
++ free(vs);
++ return NULL;
+ }
+
+ /* Create socket. */
+ vs->sock = (int)socket(AF_INET, SOCK_DGRAM, 0);
+ if (vs->sock == -1) {
+- hdhomerun_debug_printf(dbg, "hdhomerun_video_create: failed to allocate socket\n");
+- goto error;
++ free(vs->buffer);
++ free(vs);
++ return NULL;
+ }
+
+ /* Expand socket buffer size. */
+@@ -101,44 +112,30 @@
+ setsocktimeout(vs->sock, SOL_SOCKET, SO_RCVTIMEO, 1000);
+
+ /* Bind socket. */
+- struct sockaddr_in sock_addr;
+- memset(&sock_addr, 0, sizeof(sock_addr));
+- sock_addr.sin_family = AF_INET;
+- sock_addr.sin_addr.s_addr = htonl(INADDR_ANY);
+- sock_addr.sin_port = htons(listen_port);
+- if (bind(vs->sock, (struct sockaddr *)&sock_addr, sizeof(sock_addr)) != 0) {
+- hdhomerun_debug_printf(dbg, "hdhomerun_video_create: failed to bind socket (port %u)\n", listen_port);
+- goto error;
++ if (!hdhomerun_video_bind_sock(vs, listen_port)) {
++ hdhomerun_video_destroy(vs);
++ return NULL;
+ }
+
+ /* Start thread. */
+- if (pthread_create(&vs->thread, NULL, &hdhomerun_video_thread_execute, vs) != 0) {
+- hdhomerun_debug_printf(dbg, "hdhomerun_video_create: failed to start thread\n");
+- goto error;
++ if (pthread_create(&vs->thread, NULL, &hdhomerun_video_thread, vs) != 0) {
++ hdhomerun_video_destroy(vs);
++ return NULL;
+ }
++ vs->running = 1;
+
+ /* Success. */
+ return vs;
+-
+-error:
+- if (vs->sock != -1) {
+- close(vs->sock);
+- }
+- if (vs->buffer) {
+- free(vs->buffer);
+- }
+- free(vs);
+- return NULL;
+ }
+
+ void hdhomerun_video_destroy(struct hdhomerun_video_sock_t *vs)
+ {
+- vs->terminate = TRUE;
+- pthread_join(vs->thread, NULL);
+-
++ if (vs->running) {
++ vs->terminate = 1;
++ pthread_join(vs->thread, NULL);
++ }
+ close(vs->sock);
+ free(vs->buffer);
+-
+ free(vs);
+ }
+
+@@ -147,85 +144,25 @@
+ struct sockaddr_in sock_addr;
+ socklen_t sockaddr_size = sizeof(sock_addr);
+ if (getsockname(vs->sock, (struct sockaddr*)&sock_addr, &sockaddr_size) != 0) {
+- hdhomerun_debug_printf(vs->dbg, "hdhomerun_video_get_local_port: getsockname failed (%d)\n", sock_getlasterror);
+ return 0;
+ }
+-
+ return ntohs(sock_addr.sin_port);
+ }
+
+-static void hdhomerun_video_stats_ts_pkt(struct hdhomerun_video_sock_t *vs, uint8_t *ptr)
+-{
+- uint16_t packet_identifier = ((uint16_t)(ptr[1] & 0x1F) << 8) | (uint16_t)ptr[2];
+- if (packet_identifier == 0x1FFF) {
+- return;
+- }
+-
+- bool_t transport_error = ptr[1] >> 7;
+- if (transport_error) {
+- vs->transport_error_count++;
+- vs->sequence[packet_identifier] = 0xFF;
+- return;
+- }
+-
+- uint8_t continuity_counter = ptr[3] & 0x0F;
+- uint8_t previous_sequence = vs->sequence[packet_identifier];
+-
+- if (continuity_counter == ((previous_sequence + 1) & 0x0F)) {
+- vs->sequence[packet_identifier] = continuity_counter;
+- return;
+- }
+- if (previous_sequence == 0xFF) {
+- vs->sequence[packet_identifier] = continuity_counter;
+- return;
+- }
+- if (continuity_counter == previous_sequence) {
+- return;
+- }
+-
+- vs->sequence_error_count++;
+- vs->sequence[packet_identifier] = continuity_counter;
+-}
+-
+-static void hdhomerun_video_parse_rtp(struct hdhomerun_video_sock_t *vs, struct hdhomerun_pkt_t *pkt)
++int hdhomerun_video_get_sock(struct hdhomerun_video_sock_t *vs)
+ {
+- pkt->pos += 2;
+- uint32_t rtp_sequence = hdhomerun_pkt_read_u16(pkt);
+- pkt->pos += 8;
+-
+- if (rtp_sequence != ((vs->rtp_sequence + 1) & 0xFFFF)) {
+- if (vs->rtp_sequence != 0xFFFFFFFF) {
+- vs->network_error_count++;
+-
+- /* restart pid sequence check */
+- /* can't use memset bcs sequence is volatile */
+- int i;
+- for (i = 0; i < sizeof(vs->sequence) / sizeof(uint8_t) ; i++)
+- vs->sequence[i] = 0xFF;
+- }
+- }
+-
+- vs->rtp_sequence = rtp_sequence;
++ return vs->sock;
+ }
+
+-static THREAD_FUNC_PREFIX hdhomerun_video_thread_execute(void *arg)
++static void *hdhomerun_video_thread(void *arg)
+ {
+ struct hdhomerun_video_sock_t *vs = (struct hdhomerun_video_sock_t *)arg;
+- struct hdhomerun_pkt_t pkt_inst;
+
+ while (!vs->terminate) {
+- struct hdhomerun_pkt_t *pkt = &pkt_inst;
+- hdhomerun_pkt_reset(pkt);
++ size_t head = vs->head;
+
+ /* Receive. */
+- int length = recv(vs->sock, (char *)pkt->end, VIDEO_RTP_DATA_PACKET_SIZE, 0);
+- pkt->end += length;
+-
+- if (length == VIDEO_RTP_DATA_PACKET_SIZE) {
+- hdhomerun_video_parse_rtp(vs, pkt);
+- length = (int)(pkt->end - pkt->pos);
+- }
+-
++ int length = recv(vs->sock, (char *)vs->buffer + head, VIDEO_DATA_PACKET_SIZE, 0);
+ if (length != VIDEO_DATA_PACKET_SIZE) {
+ if (length > 0) {
+ /* Data received but not valid - ignore. */
+@@ -235,27 +172,10 @@
+ /* Wait for more data. */
+ continue;
+ }
+- vs->terminate = TRUE;
++ vs->terminate = 1;
+ return NULL;
+ }
+
+- pthread_mutex_lock(&vs->lock);
+-
+- /* Store in ring buffer. */
+- size_t head = vs->head;
+- uint8_t *ptr = vs->buffer + head;
+- memcpy(ptr, pkt->pos, length);
+-
+- /* Stats. */
+- vs->packet_count++;
+- hdhomerun_video_stats_ts_pkt(vs, ptr + TS_PACKET_SIZE * 0);
+- hdhomerun_video_stats_ts_pkt(vs, ptr + TS_PACKET_SIZE * 1);
+- hdhomerun_video_stats_ts_pkt(vs, ptr + TS_PACKET_SIZE * 2);
+- hdhomerun_video_stats_ts_pkt(vs, ptr + TS_PACKET_SIZE * 3);
+- hdhomerun_video_stats_ts_pkt(vs, ptr + TS_PACKET_SIZE * 4);
+- hdhomerun_video_stats_ts_pkt(vs, ptr + TS_PACKET_SIZE * 5);
+- hdhomerun_video_stats_ts_pkt(vs, ptr + TS_PACKET_SIZE * 6);
+-
+ /* Calculate new head. */
+ head += length;
+ if (head >= vs->buffer_size) {
+@@ -264,15 +184,11 @@
+
+ /* Check for buffer overflow. */
+ if (head == vs->tail) {
+- vs->overflow_error_count++;
+- pthread_mutex_unlock(&vs->lock);
+ continue;
+ }
+
+ /* Atomic update. */
+ vs->head = head;
+-
+- pthread_mutex_unlock(&vs->lock);
+ }
+
+ return NULL;
+@@ -280,8 +196,6 @@
+
+ uint8_t *hdhomerun_video_recv(struct hdhomerun_video_sock_t *vs, size_t max_size, size_t *pactual_size)
+ {
+- pthread_mutex_lock(&vs->lock);
+-
+ size_t head = vs->head;
+ size_t tail = vs->tail;
+
+@@ -298,7 +212,6 @@
+ if (head == tail) {
+ vs->advance = 0;
+ *pactual_size = 0;
+- pthread_mutex_unlock(&vs->lock);
+ return NULL;
+ }
+
+@@ -306,7 +219,6 @@
+ if (size == 0) {
+ vs->advance = 0;
+ *pactual_size = 0;
+- pthread_mutex_unlock(&vs->lock);
+ return NULL;
+ }
+
+@@ -321,58 +233,13 @@
+ }
+ vs->advance = size;
+ *pactual_size = size;
+- uint8_t *result = vs->buffer + tail;
+-
+- pthread_mutex_unlock(&vs->lock);
+- return result;
++ return vs->buffer + tail;
+ }
+
+ void hdhomerun_video_flush(struct hdhomerun_video_sock_t *vs)
+ {
+- pthread_mutex_lock(&vs->lock);
+-
++ /* Atomic update of tail. */
+ vs->tail = vs->head;
+ vs->advance = 0;
+-
+- /* can't use memset bcs sequence is volatile */
+- int i;
+- for (i = 0; i < sizeof(vs->sequence) / sizeof(uint8_t) ; i++)
+- vs->sequence[i] = 0xFF;
+-
+- vs->rtp_sequence = 0xFFFFFFFF;
+-
+- vs->packet_count = 0;
+- vs->transport_error_count = 0;
+- vs->network_error_count = 0;
+- vs->sequence_error_count = 0;
+- vs->overflow_error_count = 0;
+-
+- pthread_mutex_unlock(&vs->lock);
+ }
+
+-void hdhomerun_video_debug_print_stats(struct hdhomerun_video_sock_t *vs)
+-{
+- struct hdhomerun_video_stats_t stats;
+- hdhomerun_video_get_stats(vs, &stats);
+-
+- hdhomerun_debug_printf(vs->dbg, "video sock: pkt=%ld net=%ld te=%ld miss=%ld drop=%ld\n",
+- stats.packet_count, stats.network_error_count,
+- stats.transport_error_count, stats.sequence_error_count,
+- stats.overflow_error_count
+- );
+-}
+-
+-void hdhomerun_video_get_stats(struct hdhomerun_video_sock_t *vs, struct hdhomerun_video_stats_t *stats)
+-{
+- memset(stats, 0, sizeof(struct hdhomerun_video_stats_t));
+-
+- pthread_mutex_lock(&vs->lock);
+-
+- stats->packet_count = vs->packet_count;
+- stats->network_error_count = vs->network_error_count;
+- stats->transport_error_count = vs->transport_error_count;
+- stats->sequence_error_count = vs->sequence_error_count;
+- stats->overflow_error_count = vs->overflow_error_count;
+-
+- pthread_mutex_unlock(&vs->lock);
+-}
+diff -aur branches/release-0-21-fixes/mythtv/libs/libmythtv/hdhomerun/hdhomerun_video.h src/mythtv-0.21/libs/libmythtv/hdhomerun/hdhomerun_video.h
+--- branches/release-0-21-fixes/mythtv/libs/libmythtv/hdhomerun/hdhomerun_video.h 2009-07-13 15:44:12.000000000 +0930
++++ src/mythtv-0.21/libs/libmythtv/hdhomerun/hdhomerun_video.h 2009-01-09 13:14:56.000000000 +1030
+@@ -1,12 +1,12 @@
+ /*
+ * hdhomerun_video.h
+ *
+- * Copyright © 2006 Silicondust USA Inc. <www.silicondust.com>.
++ * Copyright © 2006 Silicondust Engineering Ltd. <www.silicondust.com>.
+ *
+- * This library is free software; you can redistribute it and/or
++ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+- * version 3 of the License, or (at your option) any later version.
++ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+@@ -14,20 +14,8 @@
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+- *
+- * As a special exception to the GNU Lesser General Public License,
+- * you may link, statically or dynamically, an application with a
+- * publicly distributed version of the Library to produce an
+- * executable file containing portions of the Library, and
+- * distribute that executable file under terms of your choice,
+- * without any of the additional requirements listed in clause 4 of
+- * the GNU Lesser General Public License.
+- *
+- * By "a publicly distributed version of the Library", we mean
+- * either the unmodified Library as distributed by Silicondust, or a
+- * modified version of the Library that is distributed under the
+- * conditions defined in the GNU Lesser General Public License.
++ * License along with this library; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+ #ifdef __cplusplus
+ extern "C" {
+@@ -35,40 +23,34 @@
+
+ struct hdhomerun_video_sock_t;
+
+-struct hdhomerun_video_stats_t {
+- uint32_t packet_count;
+- uint32_t network_error_count;
+- uint32_t transport_error_count;
+- uint32_t sequence_error_count;
+- uint32_t overflow_error_count;
+-};
+-
+ #define TS_PACKET_SIZE 188
+ #define VIDEO_DATA_PACKET_SIZE (188 * 7)
+ #define VIDEO_DATA_BUFFER_SIZE_1S (20000000 / 8)
+
+-#define VIDEO_RTP_DATA_PACKET_SIZE ((188 * 7) + 12)
+-
+ /*
+ * Create a video/data socket.
+ *
+ * uint16_t listen_port: Port number to listen on. Set to 0 to auto-select.
+ * size_t buffer_size: Size of receive buffer. For 1 second of buffer use VIDEO_DATA_BUFFER_SIZE_1S.
+- * struct hdhomerun_debug_t *dbg: Pointer to debug logging object. May be NULL.
+ *
+ * Returns a pointer to the newly created control socket.
+ *
+ * When no longer needed, the socket should be destroyed by calling hdhomerun_control_destroy.
+ */
+-extern LIBTYPE struct hdhomerun_video_sock_t *hdhomerun_video_create(uint16_t listen_port, size_t buffer_size, struct hdhomerun_debug_t *dbg);
+-extern LIBTYPE void hdhomerun_video_destroy(struct hdhomerun_video_sock_t *vs);
++extern struct hdhomerun_video_sock_t *hdhomerun_video_create(uint16_t listen_port, size_t buffer_size);
++extern void hdhomerun_video_destroy(struct hdhomerun_video_sock_t *vs);
+
+ /*
+ * Get the port the socket is listening on.
+ *
+ * Returns 16-bit port with native endianness, or 0 on error.
+ */
+-extern LIBTYPE uint16_t hdhomerun_video_get_local_port(struct hdhomerun_video_sock_t *vs);
++extern uint16_t hdhomerun_video_get_local_port(struct hdhomerun_video_sock_t *vs);
++
++/*
++ * Get the low-level socket handle.
++ */
++extern int hdhomerun_video_get_sock(struct hdhomerun_video_sock_t *vs);
+
+ /*
+ * Read data from buffer.
+@@ -87,18 +69,12 @@
+ * The buffer is implemented as a ring buffer. It is possible for this function to return a small
+ * amount of data when more is available due to the wrap-around case.
+ */
+-extern LIBTYPE uint8_t *hdhomerun_video_recv(struct hdhomerun_video_sock_t *vs, size_t max_size, size_t *pactual_size);
++extern uint8_t *hdhomerun_video_recv(struct hdhomerun_video_sock_t *vs, size_t max_size, size_t *pactual_size);
+
+ /*
+ * Flush the buffer.
+ */
+-extern LIBTYPE void hdhomerun_video_flush(struct hdhomerun_video_sock_t *vs);
+-
+-/*
+- * Debug print internal stats.
+- */
+-extern LIBTYPE void hdhomerun_video_debug_print_stats(struct hdhomerun_video_sock_t *vs);
+-extern LIBTYPE void hdhomerun_video_get_stats(struct hdhomerun_video_sock_t *vs, struct hdhomerun_video_stats_t *stats);
++extern void hdhomerun_video_flush(struct hdhomerun_video_sock_t *vs);
+
+ #ifdef __cplusplus
+ }
+diff -aur branches/release-0-21-fixes/mythtv/libs/libmythtv/hdhomerun/lgpl.txt src/mythtv-0.21/libs/libmythtv/hdhomerun/lgpl.txt
+--- branches/release-0-21-fixes/mythtv/libs/libmythtv/hdhomerun/lgpl.txt 2009-07-13 15:44:12.000000000 +0930
++++ src/mythtv-0.21/libs/libmythtv/hdhomerun/lgpl.txt 2009-01-09 13:14:56.000000000 +1030
+@@ -1,165 +1,504 @@
+- GNU LESSER GENERAL PUBLIC LICENSE
+- Version 3, 29 June 2007
++ GNU LESSER GENERAL PUBLIC LICENSE
++ Version 2.1, February 1999
+
+- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
++ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
++ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+-
+- This version of the GNU Lesser General Public License incorporates
+-the terms and conditions of version 3 of the GNU General Public
+-License, supplemented by the additional permissions listed below.
+-
+- 0. Additional Definitions.
+-
+- As used herein, "this License" refers to version 3 of the GNU Lesser
+-General Public License, and the "GNU GPL" refers to version 3 of the GNU
+-General Public License.
+-
+- "The Library" refers to a covered work governed by this License,
+-other than an Application or a Combined Work as defined below.
+-
+- An "Application" is any work that makes use of an interface provided
+-by the Library, but which is not otherwise based on the Library.
+-Defining a subclass of a class defined by the Library is deemed a mode
+-of using an interface provided by the Library.
+-
+- A "Combined Work" is a work produced by combining or linking an
+-Application with the Library. The particular version of the Library
+-with which the Combined Work was made is also called the "Linked
+-Version".
+-
+- The "Minimal Corresponding Source" for a Combined Work means the
+-Corresponding Source for the Combined Work, excluding any source code
+-for portions of the Combined Work that, considered in isolation, are
+-based on the Application, and not on the Linked Version.
+-
+- The "Corresponding Application Code" for a Combined Work means the
+-object code and/or source code for the Application, including any data
+-and utility programs needed for reproducing the Combined Work from the
+-Application, but excluding the System Libraries of the Combined Work.
+-
+- 1. Exception to Section 3 of the GNU GPL.
+-
+- You may convey a covered work under sections 3 and 4 of this License
+-without being bound by section 3 of the GNU GPL.
+-
+- 2. Conveying Modified Versions.
+-
+- If you modify a copy of the Library, and, in your modifications, a
+-facility refers to a function or data to be supplied by an Application
+-that uses the facility (other than as an argument passed when the
+-facility is invoked), then you may convey a copy of the modified
+-version:
+-
+- a) under this License, provided that you make a good faith effort to
+- ensure that, in the event an Application does not supply the
+- function or data, the facility still operates, and performs
+- whatever part of its purpose remains meaningful, or
+-
+- b) under the GNU GPL, with none of the additional permissions of
+- this License applicable to that copy.
+-
+- 3. Object Code Incorporating Material from Library Header Files.
+-
+- The object code form of an Application may incorporate material from
+-a header file that is part of the Library. You may convey such object
+-code under terms of your choice, provided that, if the incorporated
+-material is not limited to numerical parameters, data structure
+-layouts and accessors, or small macros, inline functions and templates
+-(ten or fewer lines in length), you do both of the following:
+-
+- a) Give prominent notice with each copy of the object code that the
+- Library is used in it and that the Library and its use are
+- covered by this License.
+-
+- b) Accompany the object code with a copy of the GNU GPL and this license
+- document.
+-
+- 4. Combined Works.
+-
+- You may convey a Combined Work under terms of your choice that,
+-taken together, effectively do not restrict modification of the
+-portions of the Library contained in the Combined Work and reverse
+-engineering for debugging such modifications, if you also do each of
+-the following:
+-
+- a) Give prominent notice with each copy of the Combined Work that
+- the Library is used in it and that the Library and its use are
+- covered by this License.
+-
+- b) Accompany the Combined Work with a copy of the GNU GPL and this license
+- document.
+-
+- c) For a Combined Work that displays copyright notices during
+- execution, include the copyright notice for the Library among
+- these notices, as well as a reference directing the user to the
+- copies of the GNU GPL and this license document.
+-
+- d) Do one of the following:
+-
+- 0) Convey the Minimal Corresponding Source under the terms of this
+- License, and the Corresponding Application Code in a form
+- suitable for, and under terms that permit, the user to
+- recombine or relink the Application with a modified version of
+- the Linked Version to produce a modified Combined Work, in the
+- manner specified by section 6 of the GNU GPL for conveying
+- Corresponding Source.
+-
+- 1) Use a suitable shared library mechanism for linking with the
+- Library. A suitable mechanism is one that (a) uses at run time
+- a copy of the Library already present on the user's computer
+- system, and (b) will operate properly with a modified version
+- of the Library that is interface-compatible with the Linked
+- Version.
+-
+- e) Provide Installation Information, but only if you would otherwise
+- be required to provide such information under section 6 of the
+- GNU GPL, and only to the extent that such information is
+- necessary to install and execute a modified version of the
+- Combined Work produced by recombining or relinking the
+- Application with a modified version of the Linked Version. (If
+- you use option 4d0, the Installation Information must accompany
+- the Minimal Corresponding Source and Corresponding Application
+- Code. If you use option 4d1, you must provide the Installation
+- Information in the manner specified by section 6 of the GNU GPL
+- for conveying Corresponding Source.)
+-
+- 5. Combined Libraries.
+-
+- You may place library facilities that are a work based on the
+-Library side by side in a single library together with other library
+-facilities that are not Applications and are not covered by this
+-License, and convey such a combined library under terms of your
+-choice, if you do both of the following:
+-
+- a) Accompany the combined library with a copy of the same work based
+- on the Library, uncombined with any other library facilities,
+- conveyed under the terms of this License.
+-
+- b) Give prominent notice with the combined library that part of it
+- is a work based on the Library, and explaining where to find the
+- accompanying uncombined form of the same work.
+-
+- 6. Revised Versions of the GNU Lesser General Public License.
+-
+- The Free Software Foundation may publish revised and/or new versions
+-of the GNU Lesser General Public License from time to time. Such new
+-versions will be similar in spirit to the present version, but may
+-differ in detail to address new problems or concerns.
+-
+- Each version is given a distinguishing version number. If the
+-Library as you received it specifies that a certain numbered version
+-of the GNU Lesser General Public License "or any later version"
+-applies to it, you have the option of following the terms and
+-conditions either of that published version or of any later version
+-published by the Free Software Foundation. If the Library as you
+-received it does not specify a version number of the GNU Lesser
+-General Public License, you may choose any version of the GNU Lesser
+-General Public License ever published by the Free Software Foundation.
+-
+- If the Library as you received it specifies that a proxy can decide
+-whether future versions of the GNU Lesser General Public License shall
+-apply, that proxy's public statement of acceptance of any version is
+-permanent authorization for you to choose that version for the
++[This is the first released version of the Lesser GPL. It also counts
++ as the successor of the GNU Library Public License, version 2, hence
++ the version number 2.1.]
++
++ Preamble
++
++ The licenses for most software are designed to take away your
++freedom to share and change it. By contrast, the GNU General Public
++Licenses are intended to guarantee your freedom to share and change
++free software--to make sure the software is free for all its users.
++
++ This license, the Lesser General Public License, applies to some
++specially designated software packages--typically libraries--of the
++Free Software Foundation and other authors who decide to use it. You
++can use it too, but we suggest you first think carefully about whether
++this license or the ordinary General Public License is the better
++strategy to use in any particular case, based on the explanations below.
++
++ When we speak of free software, we are referring to freedom of use,
++not price. Our General Public Licenses are designed to make sure that
++you have the freedom to distribute copies of free software (and charge
++for this service if you wish); that you receive source code or can get
++it if you want it; that you can change the software and use pieces of
++it in new free programs; and that you are informed that you can do
++these things.
++
++ To protect your rights, we need to make restrictions that forbid
++distributors to deny you these rights or to ask you to surrender these
++rights. These restrictions translate to certain responsibilities for
++you if you distribute copies of the library or if you modify it.
++
++ For example, if you distribute copies of the library, whether gratis
++or for a fee, you must give the recipients all the rights that we gave
++you. You must make sure that they, too, receive or can get the source
++code. If you link other code with the library, you must provide
++complete object files to the recipients, so that they can relink them
++with the library after making changes to the library and recompiling
++it. And you must show them these terms so they know their rights.
++
++ We protect your rights with a two-step method: (1) we copyright the
++library, and (2) we offer you this license, which gives you legal
++permission to copy, distribute and/or modify the library.
++
++ To protect each distributor, we want to make it very clear that
++there is no warranty for the free library. Also, if the library is
++modified by someone else and passed on, the recipients should know
++that what they have is not the original version, so that the original
++author's reputation will not be affected by problems that might be
++introduced by others.
++
++ Finally, software patents pose a constant threat to the existence of
++any free program. We wish to make sure that a company cannot
++effectively restrict the users of a free program by obtaining a
++restrictive license from a patent holder. Therefore, we insist that
++any patent license obtained for a version of the library must be
++consistent with the full freedom of use specified in this license.
++
++ Most GNU software, including some libraries, is covered by the
++ordinary GNU General Public License. This license, the GNU Lesser
++General Public License, applies to certain designated libraries, and
++is quite different from the ordinary General Public License. We use
++this license for certain libraries in order to permit linking those
++libraries into non-free programs.
++
++ When a program is linked with a library, whether statically or using
++a shared library, the combination of the two is legally speaking a
++combined work, a derivative of the original library. The ordinary
++General Public License therefore permits such linking only if the
++entire combination fits its criteria of freedom. The Lesser General
++Public License permits more lax criteria for linking other code with
++the library.
++
++ We call this license the "Lesser" General Public License because it
++does Less to protect the user's freedom than the ordinary General
++Public License. It also provides other free software developers Less
++of an advantage over competing non-free programs. These disadvantages
++are the reason we use the ordinary General Public License for many
++libraries. However, the Lesser license provides advantages in certain
++special circumstances.
++
++ For example, on rare occasions, there may be a special need to
++encourage the widest possible use of a certain library, so that it becomes
++a de-facto standard. To achieve this, non-free programs must be
++allowed to use the library. A more frequent case is that a free
++library does the same job as widely used non-free libraries. In this
++case, there is little to gain by limiting the free library to free
++software only, so we use the Lesser General Public License.
++
++ In other cases, permission to use a particular library in non-free
++programs enables a greater number of people to use a large body of
++free software. For example, permission to use the GNU C Library in
++non-free programs enables many more people to use the whole GNU
++operating system, as well as its variant, the GNU/Linux operating
++system.
++
++ Although the Lesser General Public License is Less protective of the
++users' freedom, it does ensure that the user of a program that is
++linked with the Library has the freedom and the wherewithal to run
++that program using a modified version of the Library.
++
++ The precise terms and conditions for copying, distribution and
++modification follow. Pay close attention to the difference between a
++"work based on the library" and a "work that uses the library". The
++former contains code derived from the library, whereas the latter must
++be combined with the library in order to run.
++
++ GNU LESSER GENERAL PUBLIC LICENSE
++ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
++
++ 0. This License Agreement applies to any software library or other
++program which contains a notice placed by the copyright holder or
++other authorized party saying it may be distributed under the terms of
++this Lesser General Public License (also called "this License").
++Each licensee is addressed as "you".
++
++ A "library" means a collection of software functions and/or data
++prepared so as to be conveniently linked with application programs
++(which use some of those functions and data) to form executables.
++
++ The "Library", below, refers to any such software library or work
++which has been distributed under these terms. A "work based on the
++Library" means either the Library or any derivative work under
++copyright law: that is to say, a work containing the Library or a
++portion of it, either verbatim or with modifications and/or translated
++straightforwardly into another language. (Hereinafter, translation is
++included without limitation in the term "modification".)
++
++ "Source code" for a work means the preferred form of the work for
++making modifications to it. For a library, complete source code means
++all the source code for all modules it contains, plus any associated
++interface definition files, plus the scripts used to control compilation
++and installation of the library.
++
++ Activities other than copying, distribution and modification are not
++covered by this License; they are outside its scope. The act of
++running a program using the Library is not restricted, and output from
++such a program is covered only if its contents constitute a work based
++on the Library (independent of the use of the Library in a tool for
++writing it). Whether that is true depends on what the Library does
++and what the program that uses the Library does.
++
++ 1. You may copy and distribute verbatim copies of the Library's
++complete source code as you receive it, in any medium, provided that
++you conspicuously and appropriately publish on each copy an
++appropriate copyright notice and disclaimer of warranty; keep intact
++all the notices that refer to this License and to the absence of any
++warranty; and distribute a copy of this License along with the
+ Library.
++
++ You may charge a fee for the physical act of transferring a copy,
++and you may at your option offer warranty protection in exchange for a
++fee.
++
++ 2. You may modify your copy or copies of the Library or any portion
++of it, thus forming a work based on the Library, and copy and
++distribute such modifications or work under the terms of Section 1
++above, provided that you also meet all of these conditions:
++
++ a) The modified work must itself be a software library.
++
++ b) You must cause the files modified to carry prominent notices
++ stating that you changed the files and the date of any change.
++
++ c) You must cause the whole of the work to be licensed at no
++ charge to all third parties under the terms of this License.
++
++ d) If a facility in the modified Library refers to a function or a
++ table of data to be supplied by an application program that uses
++ the facility, other than as an argument passed when the facility
++ is invoked, then you must make a good faith effort to ensure that,
++ in the event an application does not supply such function or
++ table, the facility still operates, and performs whatever part of
++ its purpose remains meaningful.
++
++ (For example, a function in a library to compute square roots has
++ a purpose that is entirely well-defined independent of the
++ application. Therefore, Subsection 2d requires that any
++ application-supplied function or table used by this function must
++ be optional: if the application does not supply it, the square
++ root function must still compute square roots.)
++
++These requirements apply to the modified work as a whole. If
++identifiable sections of that work are not derived from the Library,
++and can be reasonably considered independent and separate works in
++themselves, then this License, and its terms, do not apply to those
++sections when you distribute them as separate works. But when you
++distribute the same sections as part of a whole which is a work based
++on the Library, the distribution of the whole must be on the terms of
++this License, whose permissions for other licensees extend to the
++entire whole, and thus to each and every part regardless of who wrote
++it.
++
++Thus, it is not the intent of this section to claim rights or contest
++your rights to work written entirely by you; rather, the intent is to
++exercise the right to control the distribution of derivative or
++collective works based on the Library.
++
++In addition, mere aggregation of another work not based on the Library
++with the Library (or with a work based on the Library) on a volume of
++a storage or distribution medium does not bring the other work under
++the scope of this License.
++
++ 3. You may opt to apply the terms of the ordinary GNU General Public
++License instead of this License to a given copy of the Library. To do
++this, you must alter all the notices that refer to this License, so
++that they refer to the ordinary GNU General Public License, version 2,
++instead of to this License. (If a newer version than version 2 of the
++ordinary GNU General Public License has appeared, then you can specify
++that version instead if you wish.) Do not make any other change in
++these notices.
++
++ Once this change is made in a given copy, it is irreversible for
++that copy, so the ordinary GNU General Public License applies to all
++subsequent copies and derivative works made from that copy.
++
++ This option is useful when you wish to copy part of the code of
++the Library into a program that is not a library.
++
++ 4. You may copy and distribute the Library (or a portion or
++derivative of it, under Section 2) in object code or executable form
++under the terms of Sections 1 and 2 above provided that you accompany
++it with the complete corresponding machine-readable source code, which
++must be distributed under the terms of Sections 1 and 2 above on a
++medium customarily used for software interchange.
++
++ If distribution of object code is made by offering access to copy
++from a designated place, then offering equivalent access to copy the
++source code from the same place satisfies the requirement to
++distribute the source code, even though third parties are not
++compelled to copy the source along with the object code.
++
++ 5. A program that contains no derivative of any portion of the
++Library, but is designed to work with the Library by being compiled or
++linked with it, is called a "work that uses the Library". Such a
++work, in isolation, is not a derivative work of the Library, and
++therefore falls outside the scope of this License.
++
++ However, linking a "work that uses the Library" with the Library
++creates an executable that is a derivative of the Library (because it
++contains portions of the Library), rather than a "work that uses the
++library". The executable is therefore covered by this License.
++Section 6 states terms for distribution of such executables.
++
++ When a "work that uses the Library" uses material from a header file
++that is part of the Library, the object code for the work may be a
++derivative work of the Library even though the source code is not.
++Whether this is true is especially significant if the work can be
++linked without the Library, or if the work is itself a library. The
++threshold for this to be true is not precisely defined by law.
++
++ If such an object file uses only numerical parameters, data
++structure layouts and accessors, and small macros and small inline
++functions (ten lines or less in length), then the use of the object
++file is unrestricted, regardless of whether it is legally a derivative
++work. (Executables containing this object code plus portions of the
++Library will still fall under Section 6.)
++
++ Otherwise, if the work is a derivative of the Library, you may
++distribute the object code for the work under the terms of Section 6.
++Any executables containing that work also fall under Section 6,
++whether or not they are linked directly with the Library itself.
++
++ 6. As an exception to the Sections above, you may also combine or
++link a "work that uses the Library" with the Library to produce a
++work containing portions of the Library, and distribute that work
++under terms of your choice, provided that the terms permit
++modification of the work for the customer's own use and reverse
++engineering for debugging such modifications.
++
++ You must give prominent notice with each copy of the work that the
++Library is used in it and that the Library and its use are covered by
++this License. You must supply a copy of this License. If the work
++during execution displays copyright notices, you must include the
++copyright notice for the Library among them, as well as a reference
++directing the user to the copy of this License. Also, you must do one
++of these things:
++
++ a) Accompany the work with the complete corresponding
++ machine-readable source code for the Library including whatever
++ changes were used in the work (which must be distributed under
++ Sections 1 and 2 above); and, if the work is an executable linked
++ with the Library, with the complete machine-readable "work that
++ uses the Library", as object code and/or source code, so that the
++ user can modify the Library and then relink to produce a modified
++ executable containing the modified Library. (It is understood
++ that the user who changes the contents of definitions files in the
++ Library will not necessarily be able to recompile the application
++ to use the modified definitions.)
++
++ b) Use a suitable shared library mechanism for linking with the
++ Library. A suitable mechanism is one that (1) uses at run time a
++ copy of the library already present on the user's computer system,
++ rather than copying library functions into the executable, and (2)
++ will operate properly with a modified version of the library, if
++ the user installs one, as long as the modified version is
++ interface-compatible with the version that the work was made with.
++
++ c) Accompany the work with a written offer, valid for at
++ least three years, to give the same user the materials
++ specified in Subsection 6a, above, for a charge no more
++ than the cost of performing this distribution.
++
++ d) If distribution of the work is made by offering access to copy
++ from a designated place, offer equivalent access to copy the above
++ specified materials from the same place.
++
++ e) Verify that the user has already received a copy of these
++ materials or that you have already sent this user a copy.
++
++ For an executable, the required form of the "work that uses the
++Library" must include any data and utility programs needed for
++reproducing the executable from it. However, as a special exception,
++the materials to be distributed need not include anything that is
++normally distributed (in either source or binary form) with the major
++components (compiler, kernel, and so on) of the operating system on
++which the executable runs, unless that component itself accompanies
++the executable.
++
++ It may happen that this requirement contradicts the license
++restrictions of other proprietary libraries that do not normally
++accompany the operating system. Such a contradiction means you cannot
++use both them and the Library together in an executable that you
++distribute.
++
++ 7. You may place library facilities that are a work based on the
++Library side-by-side in a single library together with other library
++facilities not covered by this License, and distribute such a combined
++library, provided that the separate distribution of the work based on
++the Library and of the other library facilities is otherwise
++permitted, and provided that you do these two things:
++
++ a) Accompany the combined library with a copy of the same work
++ based on the Library, uncombined with any other library
++ facilities. This must be distributed under the terms of the
++ Sections above.
++
++ b) Give prominent notice with the combined library of the fact
++ that part of it is a work based on the Library, and explaining
++ where to find the accompanying uncombined form of the same work.
++
++ 8. You may not copy, modify, sublicense, link with, or distribute
++the Library except as expressly provided under this License. Any
++attempt otherwise to copy, modify, sublicense, link with, or
++distribute the Library is void, and will automatically terminate your
++rights under this License. However, parties who have received copies,
++or rights, from you under this License will not have their licenses
++terminated so long as such parties remain in full compliance.
++
++ 9. You are not required to accept this License, since you have not
++signed it. However, nothing else grants you permission to modify or
++distribute the Library or its derivative works. These actions are
++prohibited by law if you do not accept this License. Therefore, by
++modifying or distributing the Library (or any work based on the
++Library), you indicate your acceptance of this License to do so, and
++all its terms and conditions for copying, distributing or modifying
++the Library or works based on it.
++
++ 10. Each time you redistribute the Library (or any work based on the
++Library), the recipient automatically receives a license from the
++original licensor to copy, distribute, link with or modify the Library
++subject to these terms and conditions. You may not impose any further
++restrictions on the recipients' exercise of the rights granted herein.
++You are not responsible for enforcing compliance by third parties with
++this License.
++
++ 11. If, as a consequence of a court judgment or allegation of patent
++infringement or for any other reason (not limited to patent issues),
++conditions are imposed on you (whether by court order, agreement or
++otherwise) that contradict the conditions of this License, they do not
++excuse you from the conditions of this License. If you cannot
++distribute so as to satisfy simultaneously your obligations under this
++License and any other pertinent obligations, then as a consequence you
++may not distribute the Library at all. For example, if a patent
++license would not permit royalty-free redistribution of the Library by
++all those who receive copies directly or indirectly through you, then
++the only way you could satisfy both it and this License would be to
++refrain entirely from distribution of the Library.
++
++If any portion of this section is held invalid or unenforceable under any
++particular circumstance, the balance of the section is intended to apply,
++and the section as a whole is intended to apply in other circumstances.
++
++It is not the purpose of this section to induce you to infringe any
++patents or other property right claims or to contest validity of any
++such claims; this section has the sole purpose of protecting the
++integrity of the free software distribution system which is
++implemented by public license practices. Many people have made
++generous contributions to the wide range of software distributed
++through that system in reliance on consistent application of that
++system; it is up to the author/donor to decide if he or she is willing
++to distribute software through any other system and a licensee cannot
++impose that choice.
++
++This section is intended to make thoroughly clear what is believed to
++be a consequence of the rest of this License.
++
++ 12. If the distribution and/or use of the Library is restricted in
++certain countries either by patents or by copyrighted interfaces, the
++original copyright holder who places the Library under this License may add
++an explicit geographical distribution limitation excluding those countries,
++so that distribution is permitted only in or among countries not thus
++excluded. In such case, this License incorporates the limitation as if
++written in the body of this License.
++
++ 13. The Free Software Foundation may publish revised and/or new
++versions of the Lesser General Public License from time to time.
++Such new versions will be similar in spirit to the present version,
++but may differ in detail to address new problems or concerns.
++
++Each version is given a distinguishing version number. If the Library
++specifies a version number of this License which applies to it and
++"any later version", you have the option of following the terms and
++conditions either of that version or of any later version published by
++the Free Software Foundation. If the Library does not specify a
++license version number, you may choose any version ever published by
++the Free Software Foundation.
++
++ 14. If you wish to incorporate parts of the Library into other free
++programs whose distribution conditions are incompatible with these,
++write to the author to ask for permission. For software which is
++copyrighted by the Free Software Foundation, write to the Free
++Software Foundation; we sometimes make exceptions for this. Our
++decision will be guided by the two goals of preserving the free status
++of all derivatives of our free software and of promoting the sharing
++and reuse of software generally.
++
++ NO WARRANTY
++
++ 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
++WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
++EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
++OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
++KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
++IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
++PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
++LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
++THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
++
++ 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
++WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
++AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
++FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
++CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
++LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
++RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
++FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
++SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
++DAMAGES.
++
++ END OF TERMS AND CONDITIONS
++
++ How to Apply These Terms to Your New Libraries
++
++ If you develop a new library, and you want it to be of the greatest
++possible use to the public, we recommend making it free software that
++everyone can redistribute and change. You can do so by permitting
++redistribution under these terms (or, alternatively, under the terms of the
++ordinary General Public License).
++
++ To apply these terms, attach the following notices to the library. It is
++safest to attach them to the start of each source file to most effectively
++convey the exclusion of warranty; and each file should have at least the
++"copyright" line and a pointer to where the full notice is found.
++
++ <one line to give the library's name and a brief idea of what it does.>
++ Copyright (C) <year> <name of author>
++
++ This library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ This library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with this library; if not, write to the Free Software
++ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
++
++Also add information on how to contact you by electronic and paper mail.
++
++You should also get your employer (if you work as a programmer) or your
++school, if any, to sign a "copyright disclaimer" for the library, if
++necessary. Here is a sample; alter the names:
++
++ Yoyodyne, Inc., hereby disclaims all copyright interest in the
++ library `Frob' (a library for tweaking knobs) written by James Random Hacker.
++
++ <signature of Ty Coon>, 1 April 1990
++ Ty Coon, President of Vice
++
++That's all there is to it!
++
++
+diff -aur branches/release-0-21-fixes/mythtv/libs/libmythtv/hdhrchannel.cpp src/mythtv-0.21/libs/libmythtv/hdhrchannel.cpp
+--- branches/release-0-21-fixes/mythtv/libs/libmythtv/hdhrchannel.cpp 2009-07-13 15:44:12.000000000 +0930
++++ src/mythtv-0.21/libs/libmythtv/hdhrchannel.cpp 2009-01-09 13:14:58.000000000 +1030
+@@ -1,6 +1,6 @@
+ /**
+- * HDHRChannel
+- * Copyright (c) 2006-2009 by Silicondust Engineering Ltd.
++ * DBox2Channel
++ * Copyright (c) 2006 by Silicondust Engineering Ltd.
+ * Distributed as part of MythTV under GPL v2 and later.
+ */
+
+@@ -24,6 +24,7 @@
+ #include "hdhrchannel.h"
+ #include "videosource.h"
+ #include "channelutil.h"
++#include "frequencytables.h"
+
+ #define DEBUG_PID_FILTERS
+
+@@ -31,7 +32,7 @@
+ #define LOC_ERR QString("HDHRChan(%1), Error: ").arg(GetDevice())
+
+ HDHRChannel::HDHRChannel(TVRec *parent, const QString &device, uint tuner)
+- : DTVChannel(parent), _hdhomerun_device(NULL),
++ : DTVChannel(parent), _control_socket(NULL),
+ _device_id(0), _device_ip(0),
+ _tuner(tuner), _lock(true)
+ {
+@@ -41,8 +42,6 @@
+ if (valid && hdhomerun_discover_validate_device_id(_device_id))
+ return;
+
+- _device_id = HDHOMERUN_DEVICE_ID_WILDCARD;
+-
+ /* Otherwise, is it a valid IP address? */
+ struct in_addr address;
+ if (inet_aton(device, &address))
+@@ -55,6 +54,7 @@
+ VERBOSE(VB_IMPORTANT, LOC_ERR + QString("Invalid DeviceID '%1'")
+ .arg(device));
+
++ _device_id = HDHOMERUN_DEVICE_ID_WILDCARD;
+ }
+
+ HDHRChannel::~HDHRChannel(void)
+@@ -67,38 +67,77 @@
+ if (IsOpen())
+ return true;
+
++ if (!FindDevice())
++ return false;
++
+ if (!InitializeInputs())
+ return false;
+
+- return Connect();
++ return (_device_ip != 0) && Connect();
+ }
+
+ void HDHRChannel::Close(void)
+ {
+- if (_hdhomerun_device)
++ if (_control_socket)
+ {
+- hdhomerun_device_destroy(_hdhomerun_device);
+- _hdhomerun_device = NULL;
++ hdhomerun_control_destroy(_control_socket);
++ _control_socket = NULL;
+ }
+ }
+
+ bool HDHRChannel::EnterPowerSavingMode(void)
+ {
+- return hdhomerun_device_set_tuner_channel(_hdhomerun_device, "none") > 0;
++ return QString::null != TunerSet("channel", "none", false);
++}
++
++bool HDHRChannel::FindDevice(void)
++{
++ if (!_device_id)
++ return _device_ip;
++
++ _device_ip = 0;
++
++ /* Discover. */
++ struct hdhomerun_discover_device_t result;
++ int ret = hdhomerun_discover_find_device(_device_id, &result);
++ if (ret < 0)
++ {
++ VERBOSE(VB_IMPORTANT, LOC_ERR + "Unable to send discovery request" + ENO);
++ return false;
++ }
++ if (ret == 0)
++ {
++ VERBOSE(VB_IMPORTANT, LOC_ERR + QString("device not found"));
++ return false;
++ }
++
++ /* Found. */
++ _device_ip = result.ip_addr;
++
++ VERBOSE(VB_IMPORTANT, LOC +
++ QString("device found at address %1.%2.%3.%4")
++ .arg((_device_ip>>24) & 0xFF).arg((_device_ip>>16) & 0xFF)
++ .arg((_device_ip>> 8) & 0xFF).arg((_device_ip>> 0) & 0xFF));
++
++ return true;
+ }
+
+ bool HDHRChannel::Connect(void)
+ {
+- _hdhomerun_device = hdhomerun_device_create(
+- _device_id, _device_ip, _tuner, NULL);
++ _control_socket = hdhomerun_control_create(_device_id, _device_ip);
++ if (!_control_socket)
++ {
++ VERBOSE(VB_IMPORTANT, LOC_ERR + "Unable to create control socket");
++ return false;
++ }
+
+- if (!_hdhomerun_device)
++ if (hdhomerun_control_get_local_addr(_control_socket) == 0)
+ {
+- VERBOSE(VB_IMPORTANT,
+- LOC_ERR + "Unable to create hdhomerun device object");
++ VERBOSE(VB_IMPORTANT, LOC_ERR + "Unable to connect to device");
+ return false;
+ }
+
++ VERBOSE(VB_CHANNEL, LOC + "Successfully connected to device");
+ return true;
+ }
+
+@@ -106,7 +145,7 @@
+ {
+ QMutexLocker locker(&_lock);
+
+- if (!_hdhomerun_device)
++ if (!_control_socket)
+ {
+ VERBOSE(VB_IMPORTANT, LOC_ERR + "Get request failed (not connected)");
+ return QString::null;
+@@ -114,7 +153,7 @@
+
+ char *value = NULL;
+ char *error = NULL;
+- if (hdhomerun_device_get_var(_hdhomerun_device, name, &value, &error) < 0)
++ if (hdhomerun_control_get(_control_socket, name, &value, &error) < 0)
+ {
+ VERBOSE(VB_IMPORTANT, LOC_ERR + "Get request failed" + ENO);
+ return QString::null;
+@@ -136,7 +175,7 @@
+ {
+ QMutexLocker locker(&_lock);
+
+- if (!_hdhomerun_device)
++ if (!_control_socket)
+ {
+ VERBOSE(VB_IMPORTANT, LOC_ERR + "Set request failed (not connected)");
+ return QString::null;
+@@ -144,8 +183,7 @@
+
+ char *value = NULL;
+ char *error = NULL;
+- if (hdhomerun_device_set_var(
+- _hdhomerun_device, name, val, &value, &error) < 0)
++ if (hdhomerun_control_set(_control_socket, name, val, &value, &error) < 0)
+ {
+ VERBOSE(VB_IMPORTANT, LOC_ERR + "Set request failed" + ENO);
+
+@@ -163,11 +201,6 @@
+ return QString(value);
+ }
+
+-struct hdhomerun_device_t *HDHRChannel::GetHDHRDevice(void)
+-{
+- return _hdhomerun_device;
+-}
+-
+ QString HDHRChannel::TunerGet(const QString &name, bool report_error_return)
+ {
+ return DeviceGet(QString("/tuner%1/%2").arg(_tuner).arg(name),
+@@ -188,8 +221,7 @@
+ return false;
+ }
+
+- unsigned long localIP = hdhomerun_device_get_local_machine_addr(
+- _hdhomerun_device);
++ unsigned long localIP = hdhomerun_control_get_local_addr(_control_socket);
+ if (localIP == 0)
+ {
+ return false;
+@@ -200,7 +232,7 @@
+ .arg((localIP >> 8) & 0xFF).arg((localIP >> 0) & 0xFF)
+ .arg(localPort);
+
+- if (hdhomerun_device_set_tuner_target(_hdhomerun_device, configValue) <= 0)
++ if (!TunerSet("target", configValue))
+ {
+ return false;
+ }
+@@ -208,9 +240,9 @@
+ return true;
+ }
+
+-bool HDHRChannel::DeviceClearTarget(void)
++bool HDHRChannel::DeviceClearTarget()
+ {
+- return hdhomerun_device_set_tuner_target(_hdhomerun_device, "none") > 0;
++ return TunerSet("target", "0.0.0.0:0");
+ }
+
+ bool HDHRChannel::SetChannelByString(const QString &channum)
+@@ -316,8 +348,7 @@
+ if (mpeg_prog_num && (GetTuningMode() == "mpeg"))
+ {
+ QString pnum = QString::number(mpeg_prog_num);
+- _ignore_filters = (hdhomerun_device_set_tuner_program(
+- _hdhomerun_device, pnum) > 0);
++ _ignore_filters = QString::null != TunerSet("program", pnum, false);
+ }
+
+ return true;
+@@ -360,27 +391,22 @@
+ bool HDHRChannel::Tune(uint frequency, QString /*input*/,
+ QString modulation, QString si_std)
+ {
+- // Convert dtv_multiplex.modulation strings to something the HDHR can use:
+- modulation.replace("qam_", "qam"); // e.g. qam_256 -> qam256
+-#if 0
+- if (modulation == "qamauto")
+- modulation = "qam"; // "auto" works just as well?
+-#endif
+-
+- if (modulation.isEmpty())
+- modulation = "auto";
++ bool ok = false;
+
+- QString chan = modulation + ':' + QString::number(frequency);
++ VERBOSE(VB_CHANNEL, LOC +
++ QString("TuneTo(%1,%2)").arg(frequency).arg(modulation));
+
+- VERBOSE(VB_CHANNEL, LOC + "Tune()ing to " + chan);
++ if (modulation == "8vsb")
++ ok = TunerSet("channel", QString("8vsb:%1").arg(frequency));
++ else if (modulation == "qam_64")
++ ok = TunerSet("channel", QString("qam64:%1").arg(frequency));
++ else if (modulation == "qam_256")
++ ok = TunerSet("channel", QString("qam256:%1").arg(frequency));
+
+- if (hdhomerun_device_set_tuner_channel(_hdhomerun_device, chan) > 0)
+- {
++ if (ok)
+ SetSIStandard(si_std);
+- return true;
+- }
+
+- return false;
++ return ok;
+ }
+
+ bool HDHRChannel::AddPID(uint pid, bool do_update)
+diff -aur branches/release-0-21-fixes/mythtv/libs/libmythtv/hdhrchannel.h src/mythtv-0.21/libs/libmythtv/hdhrchannel.h
+--- branches/release-0-21-fixes/mythtv/libs/libmythtv/hdhrchannel.h 2009-07-13 15:44:12.000000000 +0930
++++ src/mythtv-0.21/libs/libmythtv/hdhrchannel.h 2009-01-09 13:14:58.000000000 +1030
+@@ -39,7 +39,7 @@
+ bool SetChannelByString(const QString &chan);
+
+ // Gets
+- bool IsOpen(void) const { return (_hdhomerun_device != NULL); }
++ bool IsOpen(void) const { return (_control_socket != NULL); }
+ QString GetDevice(void) const
+ { return QString("%1/%2").arg(_device_id, 8, 16).arg(_tuner); }
+ vector<uint> GetPIDs(void) const
+@@ -57,13 +57,11 @@
+ bool Tune(const DTVMultiplex &tuning, QString inputname);
+
+ private:
++ bool FindDevice(void);
+ bool Connect(void);
+ bool Tune(uint frequency, QString inputname,
+ QString modulation, QString si_std);
+
+-
+- struct hdhomerun_device_t *GetHDHRDevice(void);
+-
+ bool DeviceSetTarget(unsigned short localPort);
+ bool DeviceClearTarget(void);
+
+@@ -76,7 +74,7 @@
+ bool report_error_return = true);
+
+ private:
+- struct hdhomerun_device_t *_hdhomerun_device;
++ hdhr_socket_t *_control_socket;
+ uint _device_id;
+ uint _device_ip;
+ uint _tuner;
+diff -aur branches/release-0-21-fixes/mythtv/libs/libmythtv/hdhrrecorder.cpp src/mythtv-0.21/libs/libmythtv/hdhrrecorder.cpp
+--- branches/release-0-21-fixes/mythtv/libs/libmythtv/hdhrrecorder.cpp 2009-07-13 15:44:12.000000000 +0930
++++ src/mythtv-0.21/libs/libmythtv/hdhrrecorder.cpp 2009-01-22 18:52:43.000000000 +1030
+@@ -1,6 +1,6 @@
+ /** -*- Mode: c++ -*-
+ * HDHRRecorder
+- * Copyright (c) 2006-2009 by Silicondust Engineering Ltd, and
++ * Copyright (c) 2006 by Silicondust Engineering Ltd, and
+ * Daniel Thor Kristjansson
+ * Distributed as part of MythTV under GPL v2 and later.
+ */
+@@ -27,7 +27,6 @@
+ #include "hdhrrecorder.h"
+ #include "atsctables.h"
+ #include "atscstreamdata.h"
+-#include "dvbstreamdata.h"
+ #include "eithelper.h"
+ #include "tv_rec.h"
+
+@@ -110,7 +109,7 @@
+ buffersize = max(49 * TSPacket::SIZE * 128, buffersize);
+
+ /* Create TS socket. */
+- _video_socket = hdhomerun_video_create(0, buffersize, NULL);
++ _video_socket = hdhomerun_video_create(0, buffersize);
+ if (!_video_socket)
+ {
+ VERBOSE(VB_IMPORTANT, LOC + "Open() failed to open socket");
+@@ -177,13 +176,10 @@
+ data->AddMPEGListener(this);
+
+ ATSCStreamData *atsc = dynamic_cast<ATSCStreamData*>(data);
+- DVBStreamData *dvb = dynamic_cast<DVBStreamData*>(data);
+
+ if (atsc && atsc->DesiredMinorChannel())
+ atsc->SetDesiredChannel(atsc->DesiredMajorChannel(),
+ atsc->DesiredMinorChannel());
+- else if (dvb)
+- dvb->AddDVBMainListener(this);
+ else if (data->DesiredProgram() >= 0)
+ data->SetDesiredProgram(data->DesiredProgram());
+ }
+diff -aur branches/release-0-21-fixes/mythtv/libs/libmythtv/hdhrsignalmonitor.cpp src/mythtv-0.21/libs/libmythtv/hdhrsignalmonitor.cpp
+--- branches/release-0-21-fixes/mythtv/libs/libmythtv/hdhrsignalmonitor.cpp 2009-07-13 15:44:12.000000000 +0930
++++ src/mythtv-0.21/libs/libmythtv/hdhrsignalmonitor.cpp 2009-01-09 13:14:58.000000000 +1030
+@@ -139,17 +139,19 @@
+ {
+ dtvMonitorRunning = true;
+
+- HDHRChannel *hdrc = dynamic_cast<HDHRChannel*>(channel);
+- struct hdhomerun_device_t *_hdhomerun_device = hdrc->GetHDHRDevice();
+-
+- if (!_hdhomerun_device)
++ struct hdhomerun_video_sock_t *_video_socket;
++ _video_socket = hdhomerun_video_create(0, VIDEO_DATA_BUFFER_SIZE_1S);
++ if (!_video_socket)
+ {
+- VERBOSE(VB_IMPORTANT, "Failed to get HDHomeRun device handle");
++ VERBOSE(VB_IMPORTANT, LOC_ERR + "Failed to get video socket");
+ return;
+ }
+
+- if (!hdhomerun_device_stream_start(_hdhomerun_device))
++ HDHRChannel *hdrc = dynamic_cast<HDHRChannel*>(channel);
++ uint localPort = hdhomerun_video_get_local_port(_video_socket);
++ if (!hdrc->DeviceSetTarget(localPort))
+ {
++ hdhomerun_video_destroy(_video_socket);
+ VERBOSE(VB_IMPORTANT, LOC_ERR + "Failed to set target");
+ return;
+ }
+@@ -164,7 +166,7 @@
+
+ size_t data_length;
+ unsigned char *data_buffer =
+- hdhomerun_device_stream_recv(_hdhomerun_device,
++ hdhomerun_video_recv(_video_socket,
+ VIDEO_DATA_BUFFER_SIZE_1S / 5,
+ &data_length);
+
+@@ -177,7 +179,8 @@
+ usleep(2500);
+ }
+
+- hdhomerun_device_stream_stop(_hdhomerun_device);
++ hdrc->DeviceClearTarget();
++ hdhomerun_video_destroy(_video_socket);
+
+ VERBOSE(VB_CHANNEL, LOC + "RunTableMonitor(): -- shutdown");
+
+@@ -212,15 +215,16 @@
+ return;
+ }
+
+- HDHRChannel *hdrc = dynamic_cast<HDHRChannel*>(channel);
+- struct hdhomerun_device_t *_hdhomerun_device = hdrc->GetHDHRDevice();
+- struct hdhomerun_tuner_status_t status;
+- hdhomerun_device_get_tuner_status(_hdhomerun_device, NULL, &status);
+-
+- uint sig = status.signal_strength;
+- uint snq = status.signal_to_noise_quality;
+- uint seq = status.symbol_error_quality;
+-
++ QString msg = ((HDHRChannel*)channel)->TunerGet("status");
++ //ss = signal strength, [0,100]
++ //snq = signal to noise quality [0,100]
++ //seq = signal error quality [0,100]
++ int loc_sig = msg.find("ss="), loc_snq = msg.find("snq=");
++ int loc_seq = msg.find("seq="), loc_end = msg.length();
++ bool ok0, ok1, ok2;
++ uint sig = msg.mid(loc_sig + 3, loc_snq - loc_sig - 4).toUInt(&ok0);
++ uint snq = msg.mid(loc_snq + 4, loc_seq - loc_snq - 5).toUInt(&ok1);
++ uint seq = msg.mid(loc_seq + 4, loc_end - loc_seq - 4).toUInt(&ok2);
+ (void) snq; // TODO should convert to S/N
+ (void) seq; // TODO should report this...
+
+@@ -232,8 +236,9 @@
+ bool isLocked = false;
+ {
+ QMutexLocker locker(&statusLock);
+- signalStrength.SetValue(sig);
+- signalLock.SetValue(status.lock_supported);
++ if (loc_sig > 0 && loc_snq > 0 && ok0)
++ signalStrength.SetValue(sig);
++ signalLock.SetValue(signalStrength.IsGood() ? 1 : 0);
+ isLocked = signalLock.IsGood();
+ }
+
+diff -aur branches/release-0-21-fixes/mythtv/libs/libmythtv/libmythtv.pro src/mythtv-0.21/libs/libmythtv/libmythtv.pro
+--- branches/release-0-21-fixes/mythtv/libs/libmythtv/libmythtv.pro 2009-07-13 15:44:12.000000000 +0930
++++ src/mythtv-0.21/libs/libmythtv/libmythtv.pro 2009-01-09 13:14:58.000000000 +1030
+@@ -459,28 +459,12 @@
+ DEFINES += USING_HDHOMERUN
+
+ # HDHomeRun library
+- HEADERS += hdhomerun/hdhomerun.h
++ HEADERS += hdhomerun/hdhomerun_pkt.h hdhomerun/hdhomerun_discover.h
++ HEADERS += hdhomerun/hdhomerun_video.h hdhomerun/hdhomerun_control.h
+ HEADERS += hdhomerun/hdhomerun_os.h
+- HEADERS += hdhomerun/hdhomerun_os_posix.h
+- HEADERS += hdhomerun/hdhomerun_os_windows.h
+- HEADERS += hdhomerun/hdhomerun_channelscan.h
+- HEADERS += hdhomerun/hdhomerun_channels.h
+- HEADERS += hdhomerun/hdhomerun_control.h
+- HEADERS += hdhomerun/hdhomerun_debug.h
+- HEADERS += hdhomerun/hdhomerun_pkt.h
+- HEADERS += hdhomerun/hdhomerun_device.h
+- HEADERS += hdhomerun/hdhomerun_types.h
+- HEADERS += hdhomerun/hdhomerun_discover.h
+- HEADERS += hdhomerun/hdhomerun_video.h
+-
+- SOURCES += hdhomerun/hdhomerun_pkt.c
+- SOURCES += hdhomerun/hdhomerun_debug.c
+- SOURCES += hdhomerun/hdhomerun_discover.c
+- SOURCES += hdhomerun/hdhomerun_channels.c
+- SOURCES += hdhomerun/hdhomerun_channelscan.c
+- SOURCES += hdhomerun/hdhomerun_control.c
+- SOURCES += hdhomerun/hdhomerun_video.c
+- SOURCES += hdhomerun/hdhomerun_device.c
++
++ SOURCES += hdhomerun/hdhomerun_pkt.c hdhomerun/hdhomerun_discover.c
++ SOURCES += hdhomerun/hdhomerun_video.c hdhomerun/hdhomerun_control.c
+ }
+
+ # Support for PVR-150/250/350/500, etc. on Linux
diff --git a/abs/core-testing/mythtv/stable/mythvideo/PKGBUILD b/abs/core-testing/mythtv/stable/mythvideo/PKGBUILD
index f9895c6..a233549 100644
--- a/abs/core-testing/mythtv/stable/mythvideo/PKGBUILD
+++ b/abs/core-testing/mythtv/stable/mythvideo/PKGBUILD
@@ -4,15 +4,16 @@
pkgname=mythvideo
pkgver=0.21
-pkgrel=8
+pkgrel=9
pkgdesc="Video playback and browsing plugin for MythTV"
arch=('i686' 'x86_64')
url="http://www.mythtv.org"
license=('GPL')
depends=("mythtv>=${pkgver}" 'mplayer' 'perlxml' 'perl-libwww' 'perl-uri' 'perl-xml-simple' 'ffmpeg')
source=("ftp://ftp.knoppmyth.net/R6/sources/mythplugins-$pkgver-fixes.tar.bz2"\
- mtd)
-md5sums=('1b3e2a97b7ecf7373e162fe20b6faabe' '476c12ba074794ad7f4ae092bdf949d6')
+ "ftp://ftp.knoppmyth.net/R6/sources/tmdb.tar.bz2" \
+ mtd mythvideo-6338-use_tmdb_in_fixes.patch)
+md5sums=('1b3e2a97b7ecf7373e162fe20b6faabe' '48cff8f7095586c85ec70989746736b4' '476c12ba074794ad7f4ae092bdf949d6' '4bd38d054dfc4b0b1724f398d38676f7')
replaces=('mythdvd')
groups=('mythtv-extras')
install=mythvideo.install
@@ -20,6 +21,7 @@ install=mythvideo.install
build() {
cd $startdir/src/mythplugins
svn update
+ patch -p1 < ../mythvideo-6338-use_tmdb_in_fixes.patch
. /etc/profile.d/qt3.sh
# use QT3 qmake
@@ -33,6 +35,7 @@ build() {
make INSTALL_ROOT=$startdir/pkg install
install -D -m755 ../mtd $startdir/pkg/etc/rc.d/mtd
+ cp -Rv $startdir/src/tmdb/* $startdir/pkg/usr/share/mythtv/mythvideo/scripts/
}
diff --git a/abs/core-testing/mythtv/stable/mythvideo/mythvideo-6338-use_tmdb_in_fixes.patch b/abs/core-testing/mythtv/stable/mythvideo/mythvideo-6338-use_tmdb_in_fixes.patch
new file mode 100644
index 0000000..a5a182d
--- /dev/null
+++ b/abs/core-testing/mythtv/stable/mythvideo/mythvideo-6338-use_tmdb_in_fixes.patch
@@ -0,0 +1,151 @@
+Index: mythplugins/mythvideo/mythvideo/videomanager.cpp
+===================================================================
+--- mythplugins.orig/mythvideo/mythvideo/videomanager.cpp 2009-03-09 22:39:40.000000000 -0400
++++ mythplugins/mythvideo/mythvideo/videomanager.cpp 2009-03-09 23:04:55.000000000 -0400
+@@ -1535,6 +1535,56 @@
+ }
+ }
+
++ // Since there's no DB update to remove imdb.pl settings in -fixes,
++ // check for the old imdb.pl command and, if it's the old default,
++ // use tmdb.pl, instead (if available in the same location or the
++ // scripts dir)). Checks to see if cmd ends with end (the end of the
++ // old default imdb.pl command line). If so, it checks for tmdb, and
++ // if it exists in either the same location as specified in cmd or in
++ // the MythVideo scripts directory, replace end with "/tmdb.pl " + arg
++ QString UpdateCommandForTMDB(const QString cmd, const QString end,
++ const QString arg)
++ {
++ QString updated_cmd = cmd;
++ if (updated_cmd.endsWith(end))
++ {
++ QString script_path = updated_cmd;
++ script_path.truncate(updated_cmd.findRev(end,
++ 0 - end.length()));
++ QString tmdb_path(script_path + "/tmdb.pl");
++ if (QFile::exists(tmdb_path))
++ {
++ VERBOSE(VB_GENERAL, QString("Overriding old default "
++ "grabber script command line. "
++ "Using tmdb.pl, instead."));
++ updated_cmd = tmdb_path + " " + arg;
++ }
++ else
++ {
++ // It's possible the user has a non-default imdb.pl
++ // command-line--including path location--in the setting,
++ // so check to see if we've already checked the mythvideo
++ // scripts directory
++ QString def_path = QDir::cleanDirPath(QString("%1/%2")
++ .arg(gContext->GetShareDir())
++ .arg("mythvideo/scripts"));
++ if (script_path != def_path)
++ {
++ tmdb_path = def_path + "/tmdb.pl";
++ if (QFile::exists(tmdb_path))
++ {
++ VERBOSE(VB_GENERAL, QString("Overriding old "
++ "default grabber script command line. "
++ "Using tmdb.pl, instead."));
++ updated_cmd = tmdb_path + " " + arg;
++ }
++ }
++ }
++ }
++
++ return updated_cmd;
++ }
++
+ virtual void OnExecDone(bool normal_exit, const QStringList &out,
+ const QStringList &err) = 0;
+
+@@ -1624,9 +1674,16 @@
+
+ QString def_cmd = QDir::cleanDirPath(QString("%1/%2")
+ .arg(gContext->GetShareDir())
+- .arg("mythvideo/scripts/imdb.pl -M tv=no;video=no"));
++ .arg("mythvideo/scripts/tmdb.pl -M"));
+
+- QString cmd = gContext->GetSetting("MovieListCommandLine", def_cmd);
++ // Since there's no DB update to remove imdb.pl settings in -fixes,
++ // check for the old imdb.pl command and, if it's the old default,
++ // use tmdb.pl, instead (if available in the same location or the
++ // scripts dir))
++ QString cmd = UpdateCommandForTMDB(
++ gContext->GetSetting("MovieListCommandLine",
++ def_cmd),
++ "/imdb.pl -M tv=no;video=no", "-M");
+
+ QStringList args;
+ args += title;
+@@ -1682,9 +1739,15 @@
+
+ const QString def_cmd = QDir::cleanDirPath(QString("%1/%2")
+ .arg(gContext->GetShareDir())
+- .arg("mythvideo/scripts/imdb.pl -D"));
+- const QString cmd = gContext->GetSetting("MovieDataCommandLine",
+- def_cmd);
++ .arg("mythvideo/scripts/tmdb.pl -D"));
++ // Since there's no DB update to remove imdb.pl settings in -fixes,
++ // check for the old imdb.pl command and, if it's the old default,
++ // use tmdb.pl, instead (if available in the same location or the
++ // scripts dir))
++ const QString cmd = UpdateCommandForTMDB(
++ gContext->GetSetting("MovieDataCommandLine",
++ def_cmd),
++ "/imdb.pl -D", "-D");
+
+ StartRun(cmd, video_uid, "Video Data Query");
+ }
+@@ -1726,9 +1789,16 @@
+ const QString default_cmd =
+ QDir::cleanDirPath(QString("%1/%2")
+ .arg(gContext->GetShareDir())
+- .arg("mythvideo/scripts/imdb.pl -P"));
+- const QString cmd = gContext->GetSetting("MoviePosterCommandLine",
+- default_cmd);
++ .arg("mythvideo/scripts/tmdb.pl -P"));
++ // Since there's no DB update to remove imdb.pl settings in -fixes,
++ // check for the old imdb.pl command and, if it's the old default,
++ // use tmdb.pl, instead (if available in the same location or the
++ // scripts dir))
++ const QString cmd = UpdateCommandForTMDB(
++ gContext->GetSetting("MoviePosterCommandLine",
++ default_cmd),
++ "/imdb.pl -P", "-P");
++
+ StartRun(cmd, video_uid, "Poster Query");
+ }
+
+Index: mythplugins/mythvideo/mythvideo/globalsettings.cpp
+===================================================================
+--- mythplugins.orig/mythvideo/mythvideo/globalsettings.cpp 2009-03-09 22:39:40.000000000 -0400
++++ mythplugins/mythvideo/mythvideo/globalsettings.cpp 2009-03-09 22:42:47.000000000 -0400
+@@ -210,8 +210,7 @@
+ {
+ HostLineEdit *gc = new HostLineEdit("MovieListCommandLine");
+ gc->setLabel(QObject::tr("Command to search for movie listings"));
+- gc->setValue(gContext->GetShareDir() + "mythvideo/scripts/imdb.pl " +
+- "-M tv=no;video=no");
++ gc->setValue(gContext->GetShareDir() + "mythvideo/scripts/tmdb.pl -M");
+ gc->setHelpText(QObject::tr("This command must be "
+ "executable by the user running MythVideo."));
+ return gc;
+@@ -221,7 +220,7 @@
+ {
+ HostLineEdit *gc = new HostLineEdit("MoviePosterCommandLine");
+ gc->setLabel(QObject::tr("Command to search for movie posters"));
+- gc->setValue(gContext->GetShareDir() + "mythvideo/scripts/imdb.pl -P");
++ gc->setValue(gContext->GetShareDir() + "mythvideo/scripts/tmdb.pl -P");
+ gc->setHelpText(QObject::tr("This command must be "
+ "executable by the user running MythVideo."));
+ return gc;
+@@ -231,7 +230,7 @@
+ {
+ HostLineEdit *gc = new HostLineEdit("MovieDataCommandLine");
+ gc->setLabel(QObject::tr("Command to extract data for movies"));
+- gc->setValue(gContext->GetShareDir() + "mythvideo/scripts/imdb.pl -D");
++ gc->setValue(gContext->GetShareDir() + "mythvideo/scripts/tmdb.pl -D");
+ gc->setHelpText(QObject::tr("This command must be "
+ "executable by the user running MythVideo."));
+ return gc;
diff --git a/abs/core-testing/mythtv/stable/mythweb/PKGBUILD b/abs/core-testing/mythtv/stable/mythweb/PKGBUILD
index 3e3d172..20e9e3d 100644
--- a/abs/core-testing/mythtv/stable/mythweb/PKGBUILD
+++ b/abs/core-testing/mythtv/stable/mythweb/PKGBUILD
@@ -1,13 +1,13 @@
pkgname=mythweb
pkgver=0.21
-pkgrel=19
+pkgrel=20
pkgdesc="Web interface for MythTV's backend"
arch=('i686' 'x86_64')
url="http://www.mythtv.org"
license=('GPL')
depends=("mythtv>=${pkgver}" 'lighttpd' 'php' 'local-website')
install=mythweb.install
-source=("ftp://ftp.knoppmyth.net/R6/sources/mythplugins-$pkgver-fixes.tar.bz2" wiiweb.tar.bz2)
+source=("ftp://ftp.knoppmyth.net/R6/sources/mythplugins-$pkgver-fixes.tar.bz2" wiiweb.tar.bz2 transcoders.patch)
md5sums=('1b3e2a97b7ecf7373e162fe20b6faabe')
groups=('mythtv-extras')
DOCROOT=/data/srv/httpd/htdocs/mythweb
@@ -26,6 +26,7 @@ build() {
# Workaround for LIGHTTPD bug in mythweb.pl (affects DB queries)
cd $startdir/src/mythplugins/$pkgname/
patch -p0 < $startdir/patch/mythweb.pl.diff
+ patch -p1 < $startdir/transcoders.patch
cp -r $startdir/src/mythplugins/$pkgname/* $startdir/pkg/$DOCROOT
# cp $startdir/src/mythplugins-$pkgver/$pkgname/data/.htaccess $startdir/pkg/$DOCROOT
diff --git a/abs/core-testing/mythtv/stable/mythweb/transcoders.patch b/abs/core-testing/mythtv/stable/mythweb/transcoders.patch
new file mode 100644
index 0000000..c1aeb6c
--- /dev/null
+++ b/abs/core-testing/mythtv/stable/mythweb/transcoders.patch
@@ -0,0 +1,23 @@
+diff -ruaN mythweb.orig/modules/_shared/lang/English.lang mythweb/modules/_shared/lang/English.lang
+--- mythweb.orig/modules/_shared/lang/English.lang 2009-01-09 02:44:23.000000000 +0000
++++ mythweb/modules/_shared/lang/English.lang 2009-07-31 06:29:11.000000000 +0000
+@@ -816,3 +816,5 @@
+ "Year"
+ "Yes"
+ "Yesterday"
++"Myth2iPod"
++"Myt2XviD3"
+diff -ruaN mythweb.orig/modules/_shared/tmpl/default/header.php mythweb/modules/_shared/tmpl/default/header.php
+--- mythweb.orig/modules/_shared/tmpl/default/header.php 2009-01-09 02:44:23.000000000 +0000
++++ mythweb/modules/_shared/tmpl/default/header.php 2009-07-31 06:28:54.000000000 +0000
+@@ -171,6 +171,10 @@
+ <a href="<?php echo root ?>tv/recorded"><?php echo t('Recorded Programs') ?></a>
+ &nbsp; | &nbsp;
+ <a href="<?php echo root ?>status"><?php echo t('Backend Status') ?></a>
++ &nbsp; | &nbsp;
++ <a href="/ipodfeed/m2iweb.php"><?php echo t('Myth2iPod') ?></a>
++ &nbsp; | &nbsp;
++ <a href="/archive/archive.php"><?php echo t('Myt2XviD3') ?></a>
+ <?php if ($Modules['backend_log']) { ?>
+ &nbsp; | &nbsp;
+ <a href="<?php echo root ?>backend_log"><?php echo t('Backend Logs') ?></a>
diff --git a/abs/core-testing/mythtv/trunk/clean_all.sh b/abs/core-testing/mythtv/trunk/clean_all.sh
new file mode 100755
index 0000000..1ebdc43
--- /dev/null
+++ b/abs/core-testing/mythtv/trunk/clean_all.sh
@@ -0,0 +1,22 @@
+#!/bin/sh
+
+buildlist=('mythtv' 'mytharchive' 'mythbrowser' 'mythflix' 'mythgallery' 'mythgame' 'mythmovies' 'mythmusic' 'mythnews' 'mythvideo' 'mythweather' 'mythzoneminder' 'mythweb' 'myththemes' 'morethemes')
+
+# clean up current directory
+rm -f *~
+
+# clean up mythtv directories
+for i in `echo ${buildlist[@]:0}`
+do
+ echo "-- cleaning $i"
+ cd ./$i
+
+ # clean up everything
+ rm -rf pkg src
+ rm -f *~
+
+ cd ..
+done
+
+echo "DONE!"
+
diff --git a/abs/core-testing/mythtv/trunk/morethemes/PKGBUILD b/abs/core-testing/mythtv/trunk/morethemes/PKGBUILD
index 3009bee..e23a18f 100644
--- a/abs/core-testing/mythtv/trunk/morethemes/PKGBUILD
+++ b/abs/core-testing/mythtv/trunk/morethemes/PKGBUILD
@@ -1,5 +1,5 @@
pkgname=morethemes-svn
-pkgver=20787
+pkgver=21022
pkgrel=1
pkgdesc="Additional themes for MythTV"
url="http://www.mythtv.org"
diff --git a/abs/core-testing/mythtv/trunk/mp_all.sh b/abs/core-testing/mythtv/trunk/mp_all.sh
index 3b0421c..f95a31d 100755
--- a/abs/core-testing/mythtv/trunk/mp_all.sh
+++ b/abs/core-testing/mythtv/trunk/mp_all.sh
@@ -1,5 +1,6 @@
#!/bin/sh
-_svnver=20787
+pkgver=21022
+pkgrel=1
# NOTE: Make sure to build and install mythtv first BEFORE building anything else
buildlist=('mythtv' 'mytharchive' 'mythbrowser' 'mythflix' 'mythgallery' 'mythgame' 'mythmovies' 'mythmusic' 'mythnews' 'mythvideo' 'mythweather' 'mythzoneminder' 'mythweb' 'myththemes' 'morethemes')
@@ -9,9 +10,18 @@ for i in `echo ${buildlist[@]:0}`
do
echo "---------- building $i ----------"
cd ./$i
+
+ # set svn version in the PKGBUILD
+ sed -i s/^pkgver=.*/pkgver=$pkgver/ PKGBUILD
+ sed -i s/^pkgrel=.*/pkgrel=$pkgrel/ PKGBUILD
+
+ # make the package
mp -f -i --holdver || exit 1
+
+ # clean up afterwards
rm -rf pkg
rm -f *~
+
cd ..
done
diff --git a/abs/core-testing/mythtv/trunk/mytharchive/PKGBUILD b/abs/core-testing/mythtv/trunk/mytharchive/PKGBUILD
index 3101248..02802a4 100644
--- a/abs/core-testing/mythtv/trunk/mytharchive/PKGBUILD
+++ b/abs/core-testing/mythtv/trunk/mytharchive/PKGBUILD
@@ -1,5 +1,5 @@
pkgname=mytharchive-svn
-pkgver=20787
+pkgver=21022
pkgrel=1
pkgdesc="MythTV plugin that lets you create DVDs from or archive your recorded shows."
url="http://www.mythtv.org"
diff --git a/abs/core-testing/mythtv/trunk/mythbrowser/PKGBUILD b/abs/core-testing/mythtv/trunk/mythbrowser/PKGBUILD
index f01722d..d9b5df6 100644
--- a/abs/core-testing/mythtv/trunk/mythbrowser/PKGBUILD
+++ b/abs/core-testing/mythtv/trunk/mythbrowser/PKGBUILD
@@ -1,5 +1,5 @@
pkgname=mythbrowser-svn
-pkgver=20787
+pkgver=21022
pkgrel=1
pkgdesc="Mini web browser for MythTV"
url="http://www.mythtv.org"
diff --git a/abs/core-testing/mythtv/trunk/mythflix/PKGBUILD b/abs/core-testing/mythtv/trunk/mythflix/PKGBUILD
index f5efdc9..2edd643 100644
--- a/abs/core-testing/mythtv/trunk/mythflix/PKGBUILD
+++ b/abs/core-testing/mythtv/trunk/mythflix/PKGBUILD
@@ -1,5 +1,5 @@
pkgname=mythflix-svn
-pkgver=20787
+pkgver=21022
pkgrel=1
pkgdesc="Netflix access plugin for MythTV"
url="http://www.mythtv.org"
diff --git a/abs/core-testing/mythtv/trunk/mythgallery/PKGBUILD b/abs/core-testing/mythtv/trunk/mythgallery/PKGBUILD
index 115bc12..b010c83 100644
--- a/abs/core-testing/mythtv/trunk/mythgallery/PKGBUILD
+++ b/abs/core-testing/mythtv/trunk/mythgallery/PKGBUILD
@@ -1,5 +1,5 @@
pkgname=mythgallery-svn
-pkgver=20787
+pkgver=21022
pkgrel=1
pkgdesc="Image gallery plugin for MythTV"
url="http://www.mythtv.org"
diff --git a/abs/core-testing/mythtv/trunk/mythgame/PKGBUILD b/abs/core-testing/mythtv/trunk/mythgame/PKGBUILD
index 2271068..36a776b 100644
--- a/abs/core-testing/mythtv/trunk/mythgame/PKGBUILD
+++ b/abs/core-testing/mythtv/trunk/mythgame/PKGBUILD
@@ -1,5 +1,5 @@
pkgname=mythgame-svn
-pkgver=20787
+pkgver=21022
pkgrel=1
pkgdesc="Emulation plugin for MythTV"
url="http://www.mythtv.org"
diff --git a/abs/core-testing/mythtv/trunk/mythmovies/PKGBUILD b/abs/core-testing/mythtv/trunk/mythmovies/PKGBUILD
index b62b7c7..777276d 100644
--- a/abs/core-testing/mythtv/trunk/mythmovies/PKGBUILD
+++ b/abs/core-testing/mythtv/trunk/mythmovies/PKGBUILD
@@ -1,5 +1,5 @@
pkgname=mythmovies-svn
-pkgver=20787
+pkgver=21022
pkgrel=1
pkgdesc="Displays information about movies playing in the area."
url="http://www.mythtv.org"
diff --git a/abs/core-testing/mythtv/trunk/mythmusic/PKGBUILD b/abs/core-testing/mythtv/trunk/mythmusic/PKGBUILD
index 912fa54..743872c 100644
--- a/abs/core-testing/mythtv/trunk/mythmusic/PKGBUILD
+++ b/abs/core-testing/mythtv/trunk/mythmusic/PKGBUILD
@@ -1,5 +1,5 @@
pkgname=mythmusic-svn
-pkgver=20787
+pkgver=21022
pkgrel=1
pkgdesc="Music playing plugin for MythTV"
url="http://www.mythtv.org"
@@ -12,7 +12,7 @@ depends=('mythtv-svn' 'libid3tag' 'libmad' 'libvorbis' 'flac>=1.1.4' 'libcdaudio
conflicts=('mythmusic')
groups=('mythtv-extras-svn')
-patches=('aacdecoder.cpp.patch')
+patches=()
source=(`echo ${patches[@]:0}`)
_svntrunk=http://cvs.mythtv.org/svn/trunk/mythplugins
_svnmod=mythplugins
diff --git a/abs/core-testing/mythtv/trunk/mythmusic/aacdecoder.cpp.patch b/abs/core-testing/mythtv/trunk/mythmusic/aacdecoder.cpp.patch
deleted file mode 100644
index 8796eb4..0000000
--- a/abs/core-testing/mythtv/trunk/mythmusic/aacdecoder.cpp.patch
+++ /dev/null
@@ -1,12 +0,0 @@
---- mythmusic/mythmusic/aacdecoder.cpp.orig 2008-11-19 12:51:48.000000000 -0500
-+++ mythmusic/mythmusic/aacdecoder.cpp 2008-11-19 12:52:42.000000000 -0500
-@@ -17,6 +17,9 @@
- #define FAAD_MODIFIED
- #endif
-
-+// LinHES need this undefined
-+#undef FAAD_MODIFIED
-+
- // ANSI C headers
- #include <cstdlib>
-
diff --git a/abs/core-testing/mythtv/trunk/mythnews/PKGBUILD b/abs/core-testing/mythtv/trunk/mythnews/PKGBUILD
index 5d8c7fe..06c9aa4 100644
--- a/abs/core-testing/mythtv/trunk/mythnews/PKGBUILD
+++ b/abs/core-testing/mythtv/trunk/mythnews/PKGBUILD
@@ -1,5 +1,5 @@
pkgname=mythnews-svn
-pkgver=20787
+pkgver=21022
pkgrel=1
pkgdesc="News checking plugin for MythTV"
url="http://www.mythtv.org"
diff --git a/abs/core-testing/mythtv/trunk/myththemes/PKGBUILD b/abs/core-testing/mythtv/trunk/myththemes/PKGBUILD
index 2066152..81f2cb4 100755
--- a/abs/core-testing/mythtv/trunk/myththemes/PKGBUILD
+++ b/abs/core-testing/mythtv/trunk/myththemes/PKGBUILD
@@ -1,5 +1,5 @@
pkgname=myththemes-svn
-pkgver=20787
+pkgver=21022
pkgrel=1
pkgdesc="Themes for MythTV"
url="http://www.mythtv.org"
diff --git a/abs/core-testing/mythtv/trunk/mythtv/PKGBUILD b/abs/core-testing/mythtv/trunk/mythtv/PKGBUILD
index cb0bc86..57bfe54 100755
--- a/abs/core-testing/mythtv/trunk/mythtv/PKGBUILD
+++ b/abs/core-testing/mythtv/trunk/mythtv/PKGBUILD
@@ -1,5 +1,5 @@
pkgname=mythtv-svn
-pkgver=20787
+pkgver=21022
pkgrel=1
pkgdesc="A personal video recorder for Linux"
url="http://www.mythtv.org"
@@ -16,7 +16,8 @@ groups=('pvr')
#MAKEFLAGS="-j6"
install='mythtv.install'
-patchs=('smolt_jump.patch' 'myththemedmenu.h.patch' 'myththemedmenu.cpp.patch' )
+patchs=()
+#patchs=('smolt_jump.patch' 'myththemedmenu.h.patch' 'myththemedmenu.cpp.patch' )
# 'H264Parser-fixes-v1.1.patch' \
# 'hdpvr-signalmonitor.patch' 'ringbuffer_reset_v2.diff' )
#patchs=('svn_main_menu_popup.patch' 'smolt_jump.patch')
@@ -55,10 +56,11 @@ build() {
# configure
./configure --prefix=/usr --arch=${ARCH} \
- --enable-vdpau --enable-xvmc --enable-xvmc-pro \
+ --enable-vdpau --disable-xvmc \
--enable-opengl-vsync --enable-libfaad --enable-dvb --enable-firewire \
--compile-type=release --with-bindings=perl,python \
--enable-audio-alsa --disable-audio-jack --disable-audio-arts || return 1
+ # --enable-xvmc --enable-xvmc-pro \
# build and install
. /etc/profile
diff --git a/abs/core-testing/mythtv/trunk/mythvideo/PKGBUILD b/abs/core-testing/mythtv/trunk/mythvideo/PKGBUILD
index 289dd21..12fd62f 100644
--- a/abs/core-testing/mythtv/trunk/mythvideo/PKGBUILD
+++ b/abs/core-testing/mythtv/trunk/mythvideo/PKGBUILD
@@ -1,5 +1,5 @@
pkgname=mythvideo-svn
-pkgver=20787
+pkgver=21022
pkgrel=1
pkgdesc="Video playback and browsing plugin for MythTV"
url="http://www.mythtv.org"
diff --git a/abs/core-testing/mythtv/trunk/mythweather/PKGBUILD b/abs/core-testing/mythtv/trunk/mythweather/PKGBUILD
index 4200bf0..8fd9935 100644
--- a/abs/core-testing/mythtv/trunk/mythweather/PKGBUILD
+++ b/abs/core-testing/mythtv/trunk/mythweather/PKGBUILD
@@ -1,5 +1,5 @@
pkgname=mythweather-svn
-pkgver=20787
+pkgver=21022
pkgrel=1
pkgdesc="Weather checking plugin for MythTV"
url="http://www.mythtv.org"
diff --git a/abs/core-testing/mythtv/trunk/mythweb/PKGBUILD b/abs/core-testing/mythtv/trunk/mythweb/PKGBUILD
index b058125..150e5cf 100644
--- a/abs/core-testing/mythtv/trunk/mythweb/PKGBUILD
+++ b/abs/core-testing/mythtv/trunk/mythweb/PKGBUILD
@@ -1,5 +1,5 @@
pkgname=mythweb-svn
-pkgver=20787
+pkgver=21022
pkgrel=1
pkgdesc="Web interface for MythTV's backend"
url="http://www.mythtv.org"
diff --git a/abs/core-testing/mythtv/trunk/mythzoneminder/PKGBUILD b/abs/core-testing/mythtv/trunk/mythzoneminder/PKGBUILD
index cb2f2c3..f33281a 100644
--- a/abs/core-testing/mythtv/trunk/mythzoneminder/PKGBUILD
+++ b/abs/core-testing/mythtv/trunk/mythzoneminder/PKGBUILD
@@ -1,5 +1,5 @@
pkgname=mythzoneminder-svn
-pkgver=20787
+pkgver=21022
pkgrel=1
pkgdesc="Integrates ZoneMinder into MythTV"
url="http://www.mythtv.org"
diff --git a/abs/core-testing/nuvexport/MP4.pm b/abs/core-testing/nuvexport/MP4.pm
new file mode 100755
index 0000000..e13d44b
--- /dev/null
+++ b/abs/core-testing/nuvexport/MP4.pm
@@ -0,0 +1,316 @@
+#!/usr/bin/perl -w
+#
+# ffmpeg-based MP4 (iPod) video module for nuvexport.
+#
+# Many thanks to cartman in #ffmpeg, and for the instructions at
+# http://rob.opendot.cl/index.php?active=3&subactive=1
+# http://videotranscoding.wikispaces.com/EncodeForIPodorPSP
+#
+# @url $URL: svn+ssh://xris@svn.mythtv.org/var/lib/svn/trunk/mythextras/nuvexport/export/ffmpeg/MP4.pm $
+# @date $Date: 2008-02-16 20:54:43 -0800 (Sat, 16 Feb 2008) $
+# @version $Revision: 16110 $
+# @author $Author: xris $
+# @copyright Silicon Mechanics
+#
+
+package export::ffmpeg::MP4;
+ use base 'export::ffmpeg';
+
+# Load the myth and nuv utilities, and make sure we're connected to the database
+ use nuv_export::shared_utils;
+ use nuv_export::cli;
+ use nuv_export::ui;
+ use mythtv::recordings;
+
+# Load the following extra parameters from the commandline
+ add_arg('quantisation|q=i', 'Quantisation');
+ add_arg('a_bitrate|a=i', 'Audio bitrate');
+ add_arg('v_bitrate|v=i', 'Video bitrate');
+ add_arg('multipass!', 'Enable two-pass encoding.');
+ add_arg('mp4_codec=s', 'Video codec to use for MP4/iPod video (mpeg4 or h264).');
+ add_arg('mp4_fps=s', 'Framerate to use: auto, 25, 23.97, 29.97.');
+ add_arg('ipod!', 'Produce ipod-compatible output.');
+
+ sub new {
+ my $class = shift;
+ my $self = {
+ 'cli' => qr/\b(?:mp4|ipod)\b/i,
+ 'name' => 'Export to MP4 (iPod)',
+ 'enabled' => 1,
+ 'errors' => [],
+ 'defaults' => {},
+ };
+ bless($self, $class);
+
+ # Initialize the default parameters
+ $self->load_defaults();
+
+ # Verify any commandline or config file options
+ die "Audio bitrate must be > 0\n" unless (!defined $self->val('a_bitrate') || $self->{'a_bitrate'} > 0);
+ die "Video bitrate must be > 0\n" unless (!defined $self->val('v_bitrate') || $self->{'v_bitrate'} > 0);
+ die "Width must be > 0\n" unless (!defined $self->val('width') || $self->{'width'} =~ /^\s*\D/ || $self->{'width'} > 0);
+ die "Height must be > 0\n" unless (!defined $self->val('height') || $self->{'height'} =~ /^\s*\D/ || $self->{'height'} > 0);
+
+ # VBR, multipass, etc.
+ if ($self->val('multipass')) {
+ $self->{'vbr'} = 1;
+ }
+ elsif ($self->val('quantisation')) {
+ die "Quantisation must be a number between 1 and 31 (lower means better quality).\n" if ($self->{'quantisation'} < 1 || $self->{'quantisation'} > 31);
+ $self->{'vbr'} = 1;
+ }
+
+ # Initialize and check for ffmpeg
+ $self->init_ffmpeg();
+
+ # Can we even encode mp4?
+ if (!$self->can_encode('mp4')) {
+ push @{$self->{'errors'}}, "Your ffmpeg installation doesn't support encoding to mp4 file formats.";
+ }
+ if (!$self->can_encode('aac') && !$self->can_encode('libfaac')) {
+ push @{$self->{'errors'}}, "Your ffmpeg installation doesn't support encoding to aac audio.";
+ }
+ if (!$self->can_encode('mpeg4') && !$self->can_encode('h264') && !$self->can_encode('libx264')) {
+ push @{$self->{'errors'}}, "Your ffmpeg installation doesn't support encoding to either mpeg4 or h264 video.";
+ }
+ # Any errors? disable this function
+ $self->{'enabled'} = 0 if ($self->{'errors'} && @{$self->{'errors'}} > 0);
+ # Return
+ return $self;
+ }
+
+# Load default settings
+ sub load_defaults {
+ my $self = shift;
+ # Load the parent module's settings
+ $self->SUPER::load_defaults();
+ # Default settings
+ $self->{'defaults'}{'v_bitrate'} = 384;
+ $self->{'defaults'}{'a_bitrate'} = 64;
+ $self->{'defaults'}{'width'} = 320;
+ $self->{'defaults'}{'mp4_codec'} = 'mpeg4';
+ # Verify commandline options
+ if ($self->val('mp4_codec') !~ /^(?:mpeg4|h264)$/i) {
+ die "mp4_codec must be either mpeg4 or h264.\n";
+ }
+ $self->{'mp4_codec'} =~ tr/A-Z/a-z/;
+
+ }
+
+# Gather settings from the user
+ sub gather_settings {
+ my $self = shift;
+ # Load the parent module's settings
+ $self->SUPER::gather_settings();
+ # Audio Bitrate
+ $self->{'a_bitrate'} = query_text('Audio bitrate?',
+ 'int',
+ $self->val('a_bitrate'));
+ # Video options
+ if (!$is_cli) {
+ # iPod compatibility mode?
+ $self->{'ipod'} = query_text('Enable iPod compatibility?',
+ 'yesno',
+ $self->val('ipod'));
+ # Video codec
+ if ($self->{'ffmpeg_vers'} eq 'svn') {
+ while (1) {
+ my $codec = query_text('Video codec (mpeg4 or h264)?',
+ 'string',
+ $self->{'mp4_codec'});
+ if ($codec =~ /^m/) {
+ $self->{'mp4_codec'} = 'mpeg4';
+ last;
+ }
+ elsif ($codec =~ /^h/) {
+ $self->{'mp4_codec'} = 'h264';
+ last;
+ }
+ print "Please choose either mpeg4 or h264\n";
+ }
+ }
+ else {
+ $self->{'mp4_codec'} = 'mpeg4';
+ print "Using the mpeg4 codec (h.264 mp4/ipod encoding requires the svn version of ffmpeg.)\n";
+ }
+ # Video bitrate options
+ $self->{'vbr'} = query_text('Variable bitrate video?',
+ 'yesno',
+ $self->val('vbr'));
+ if ($self->{'vbr'}) {
+ $self->{'multipass'} = query_text('Multi-pass (slower, but better quality)?',
+ 'yesno',
+ $self->val('multipass'));
+ if (!$self->{'multipass'}) {
+ while (1) {
+ my $quantisation = query_text('VBR quality/quantisation (1-31)?',
+ 'float',
+ $self->val('quantisation'));
+ if ($quantisation < 1) {
+ print "Too low; please choose a number between 1 and 31.\n";
+ }
+ elsif ($quantisation > 31) {
+ print "Too high; please choose a number between 1 and 31\n";
+ }
+ else {
+ $self->{'quantisation'} = $quantisation;
+ last;
+ }
+ }
+ }
+ } else {
+ $self->{'multipass'} = 0;
+ }
+ # Ask the user what video bitrate he/she wants
+ $self->{'v_bitrate'} = query_text('Video bitrate?',
+ 'int',
+ $self->val('v_bitrate'));
+ }
+ # Complain about h264
+ if ($self->{'mp4_codec'} eq 'h264' && $self->{'ffmpeg_vers'} ne 'svn') {
+ die "h.264 mp4/ipod encoding requires the svn version of ffmpeg.\n";
+ }
+ # Loop, in case we need to verify ipod compatibility
+ while (1) {
+ # Query the resolution
+ $self->query_resolution();
+ # Warn about ipod resolution
+ if ($self->val('ipod') && ($self->{'height'} > 480 || $self->{'width'} > 640)) {
+ my $note = "WARNING: Video larger than 640x480 will not play on an iPod.\n";
+ die $note if ($is_cli);
+ print $note;
+ next;
+ }
+ # Done looping
+ last;
+ }
+ }
+
+ sub export {
+ my $self = shift;
+ my $episode = shift;
+ # Make sure this is set to anamorphic mode
+ $self->{'aspect_stretched'} = 1;
+ # Framerate
+ my $standard = ($episode->{'finfo'}{'fps'} =~ /^2(?:5|4\.9)/) ? 'PAL' : 'NTSC';
+ if ($standard eq 'PAL') {
+ $self->{'out_fps'} = 25;
+ }
+ elsif ($self->val('mp4_fps') =~ /^23/) {
+ $self->{'out_fps'} = 23.97;
+ }
+ elsif ($self->val('mp4_fps') =~ /^29/) {
+ $self->{'out_fps'} = 29.97;
+ }
+ else {
+ $self->{'out_fps'} = ($self->{'width'} > 320 || $self->{'height'} > 288) ? 29.97 : 23.97;
+ }
+ # Embed the title
+ $safe_title = $episode->{'title'};
+ if ($episode->{'subtitle'} ne 'Untitled') {
+ $safe_title .= ' - '.$episode->{'subtitle'};
+ }
+ my $safe_title = shell_escape($safe_title);
+ # Codec name changes between ffmpeg versions
+ my $codec = $self->{'mp4_codec'};
+ if ($codec eq 'h264' && $self->can_encode('libx264')) {
+ $codec = 'libx264';
+ }
+ # Build the common ffmpeg string
+ my $ffmpeg_xtra = ' -vcodec '.$codec
+ .$self->param('bit_rate', $self->{'v_bitrate'})
+ ;### ." -title $safe_title";
+ # Options required for the codecs separately
+ if ($self->{'mp4_codec'} eq 'h264') {
+ $ffmpeg_xtra .= ' -level 30'
+ ### .' -loop 1'
+ .' -g 250 -keyint_min 25'
+ .' -sc_threshold 40'
+ ### .' -rc_eq \'blurCplx^(1-qComp)\''
+ .$self->param('bit_rate_tolerance', $self->{'v_bitrate'})
+ .$self->param('rc_max_rate', 1500 - $self->{'a_bitrate'})
+ .$self->param('rc_buffer_size', 2000)
+ .$self->param('i_quant_factor', 0.71428572)
+ .$self->param('b_quant_factor', 0.76923078)
+ .$self->param('max_b_frames', 0)
+ ### .' -me umh' # this will eventually be me_method, but not all ffmpeg versions support it yet
+ ;
+ }
+ else {
+ $ffmpeg_xtra .= ' -flags +mv4' ## +trell+loop'
+ ### .' -aic 1'
+ .' -mbd 1'
+ .' -cmp 2 -subcmp 2'
+ ;
+ }
+ # Some shared options
+ if ($self->{'multipass'} || $self->{'vbr'}) {
+ $ffmpeg_xtra .= $self->param('qcompress', 0.6)
+ .$self->param('qmax', 51)
+ .$self->param('max_qdiff', 4)
+ ;
+ }
+ # Dual pass?
+ if ($self->{'multipass'}) {
+ # Apparently, the -passlogfile option doesn't work for h264, so we need
+ # to be aware of other processes that might be working in this directory
+ if ($self->{'mp4_codec'} eq 'h264' && (-e 'x264_2pass.log.temp' || -e 'x264_2pass.log')) {
+ die "ffmpeg does not allow us to specify the name of the multi-pass log\n"
+ ."file, and x264_2pass.log exists in this directory already. Please\n"
+ ."wait for the other process to finish, or remove the stale file.\n";
+ }
+ # Add all possible temporary files to the list
+ push @tmpfiles, 'x264_2pass.log',
+ 'x264_2pass.log.temp',
+ 'ffmpeg2pass-0.log';
+ # Build the ffmpeg string
+ print "First pass...\n";
+ $self->{'ffmpeg_xtra'} = ' -pass 1'
+ .$ffmpeg_xtra
+ .' -f mp4';
+ if ($self->{'mp4_codec'} eq 'h264') {
+ $self->{'ffmpeg_xtra'} .= ' -refs 1 -subq 1'
+ .' -trellis 0'
+ ;
+ }
+ $self->SUPER::export($episode, '', 1);
+ # Second Pass
+ print "Final pass...\n";
+ $ffmpeg_xtra = ' -pass 2 '
+ .$ffmpeg_xtra;
+ }
+ # Single Pass
+ else {
+ if ($self->{'vbr'}) {
+ $ffmpeg_xtra .= ' -qmin '.$self->{'quantisation'};
+ }
+ }
+ # Single/final pass options
+ if ($self->{'mp4_codec'} eq 'h264') {
+ $ffmpeg_xtra .= ' -refs '.($self->val('ipod') ? 2 : 7)
+ .' -subq 7'
+ .' -partitions parti4x4+parti8x8+partp4x4+partp8x8+partb8x8'
+ .' -flags2 +bpyramid+wpred+mixed_refs+8x8dct' ##+brdo'
+ .' -me_range 21'
+ .' -trellis 2'
+ .' -chromaoffset 1'
+ ### .' -slice 2'
+ ### .' -cmp 1'
+ # These should match the defaults:
+ .' -deblockalpha 0 -deblockbeta 0'
+ ;
+ }
+ # Audio codec name changes between ffmpeg versions
+ my $acodec = $self->can_encode('libfaac') ? 'libfaac' : 'aac';
+ # Don't forget the audio, etc.
+ $self->{'ffmpeg_xtra'} = $ffmpeg_xtra
+ ." -acodec $acodec -ar 48000 -async 1"
+ .$self->param('ab', $self->{'a_bitrate'});
+ # Execute the (final pass) encode
+ $self->SUPER::export($episode, '.mp4');
+ }
+
+1; #return true
+
+# vim:ts=4:sw=4:ai:et:si:sts=4
+
diff --git a/abs/core-testing/nuvexport/PKGBUILD b/abs/core-testing/nuvexport/PKGBUILD
index e414b1e..27369de 100644
--- a/abs/core-testing/nuvexport/PKGBUILD
+++ b/abs/core-testing/nuvexport/PKGBUILD
@@ -4,7 +4,7 @@
pkgname=nuvexport
pkgver=20080311
relnum=0.5
-pkgrel=1
+pkgrel=3
pkgdesc="Export for MythTV nuv files to other formats (DVD/SVCD/DivX,etc.)"
arch=(i686 x86_64)
url="http://forevermore.net/files/nuvexport"
@@ -15,7 +15,7 @@ conflicts=()
replaces=()
backup=()
install=
-source=(http://forevermore.net/files/nuvexport/$pkgname-$relnum-0.$pkgver.svn.tar.bz2 $pkgname-ipod-disable.patch)
+source=(http://forevermore.net/files/nuvexport/archive/$pkgname-$relnum-0.$pkgver.svn.tar.bz2 $pkgname-ipod-disable.patch MP4.pm XviD.pm)
md5sums=('2d0a99623f06394daf3bf8769536d3cd' 'acd2dad9987e68359ead8b0be5e5797c')
build() {
@@ -28,4 +28,6 @@ build() {
mkdir $startdir/pkg/usr || return 1
make install || return 1
sed -i "s|/tmp/fifodir|/var/tmp/fifodir|g" $startdir/pkg/usr/share/nuvexport/export/*.pm || return 1
+ cp $startdir/src/MP4.pm $startdir/pkg/usr/share/nuvexport/export/ffmpeg/MP4.pm
+ cp $startdir/src/XviD.pm $startdir/pkg/usr/share/nuvexport/export/ffmpeg/XviD.pm
}
diff --git a/abs/core-testing/nuvexport/XviD.pm b/abs/core-testing/nuvexport/XviD.pm
new file mode 100755
index 0000000..c4700f5
--- /dev/null
+++ b/abs/core-testing/nuvexport/XviD.pm
@@ -0,0 +1,197 @@
+#
+# ffmpeg-based XviD export module for nuvexport.
+#
+# @url $URL: svn+ssh://xris@svn.mythtv.org/var/lib/svn/trunk/mythextras/nuvexport/export/ffmpeg/XviD.pm $
+# @date $Date: 2008-02-19 20:47:06 -0800 (Tue, 19 Feb 2008) $
+# @version $Revision: 16175 $
+# @author $Author: xris $
+# @copyright Silicon Mechanics
+#
+
+package export::ffmpeg::XviD;
+ use base 'export::ffmpeg';
+
+# Load the myth and nuv utilities, and make sure we're connected to the database
+ use nuv_export::shared_utils;
+ use nuv_export::cli;
+ use nuv_export::ui;
+ use mythtv::recordings;
+
+# Load the following extra parameters from the commandline
+ add_arg('quantisation|q=i', 'Quantisation');
+ add_arg('a_bitrate|a=i', 'Audio bitrate');
+ add_arg('v_bitrate|v=i', 'Video bitrate');
+ add_arg('multipass!', 'Enable two-pass encoding.');
+
+ sub new {
+ my $class = shift;
+ my $self = {
+ 'cli' => qr/\bxvid\b/i,
+ 'name' => 'Export to XviD',
+ 'enabled' => 1,
+ 'errors' => [],
+ 'defaults' => {},
+ };
+ bless($self, $class);
+
+ # Initialize the default parameters
+ $self->load_defaults();
+
+ # Verify any commandline or config file options
+ die "Audio bitrate must be > 0\n" unless (!defined $self->val('a_bitrate') || $self->{'a_bitrate'} > 0);
+ die "Video bitrate must be > 0\n" unless (!defined $self->val('v_bitrate') || $self->{'v_bitrate'} > 0);
+ die "Width must be > 0\n" unless (!defined $self->val('width') || $self->{'width'} =~ /^\s*\D/ || $self->{'width'} > 0);
+ die "Height must be > 0\n" unless (!defined $self->val('height') || $self->{'height'} =~ /^\s*\D/ || $self->{'height'} > 0);
+
+ # VBR, multipass, etc.
+ if ($self->val('multipass')) {
+ $self->{'vbr'} = 1;
+ }
+ elsif ($self->val('quantisation')) {
+ die "Quantisation must be a number between 1 and 31 (lower means better quality).\n" if ($self->{'quantisation'} < 1 || $self->{'quantisation'} > 31);
+ $self->{'vbr'} = 1;
+ }
+
+ # Initialize and check for ffmpeg
+ $self->init_ffmpeg();
+
+ # Can we even encode xvid?
+ if (!$self->can_encode('xvid') && !$self->can_encode('libxvid')) {
+ push @{$self->{'errors'}}, "Your ffmpeg installation doesn't support encoding to xvid.\n"
+ ." (It must be compiled with the --enable-libxvid option)";
+ }
+ if (!$self->can_encode('mp3') && !$self->can_encode('libmp3lame')) {
+ push @{$self->{'errors'}}, "Your ffmpeg installation doesn't support encoding to mp3 audio.";
+ }
+
+ # Any errors? disable this function
+ $self->{'enabled'} = 0 if ($self->{'errors'} && @{$self->{'errors'}} > 0);
+ # Return
+ return $self;
+ }
+
+# Load default settings
+ sub load_defaults {
+ my $self = shift;
+ # Load the parent module's settings
+ $self->SUPER::load_defaults();
+ # Default bitrates and resolution
+ $self->{'defaults'}{'a_bitrate'} = 128;
+ $self->{'defaults'}{'v_bitrate'} = 960;
+ $self->{'defaults'}{'width'} = 624;
+ }
+
+# Gather settings from the user
+ sub gather_settings {
+ my $self = shift;
+ # Load the parent module's settings
+ $self->SUPER::gather_settings();
+ # Audio Bitrate
+ $self->{'a_bitrate'} = query_text('Audio bitrate?',
+ 'int',
+ $self->val('a_bitrate'));
+ # VBR options
+ if (!$is_cli) {
+ $self->{'vbr'} = query_text('Variable bitrate video?',
+ 'yesno',
+ $self->val('vbr'));
+ if ($self->{'vbr'}) {
+ $self->{'multipass'} = query_text('Multi-pass (slower, but better quality)?',
+ 'yesno',
+ $self->val('multipass'));
+ if (!$self->{'multipass'}) {
+ while (1) {
+ my $quantisation = query_text('VBR quality/quantisation (1-31)?',
+ 'float',
+ $self->val('quantisation'));
+ if ($quantisation < 1) {
+ print "Too low; please choose a number between 1 and 31.\n";
+ }
+ elsif ($quantisation > 31) {
+ print "Too high; please choose a number between 1 and 31\n";
+ }
+ else {
+ $self->{'quantisation'} = $quantisation;
+ last;
+ }
+ }
+ }
+ } else {
+ $self->{'multipass'} = 0;
+ }
+ # Ask the user what video bitrate he/she wants
+ $self->{'v_bitrate'} = query_text('Video bitrate?',
+ 'int',
+ $self->val('v_bitrate'));
+ }
+ # Query the resolution
+ $self->query_resolution();
+ }
+
+ sub export {
+ my $self = shift;
+ my $episode = shift;
+ # Make sure we have the framerate
+ $self->{'out_fps'} = $episode->{'finfo'}{'fps'};
+ # Embed the title
+ $safe_title = $episode->{'title'};
+ if ($episode->{'subtitle'} ne 'Untitled') {
+ $safe_title .= ' - '.$episode->{'subtitle'};
+ }
+ my $safe_title = shell_escape($safe_title);
+ # Codec name changes between ffmpeg versions
+ my $codec = $self->can_encode('libxvid') ? 'libxvid' : 'xvid';
+ # Build the common ffmpeg string
+ my $ffmpeg_xtra = ' -vcodec '.$codec
+ .$self->param('bit_rate', $self->{'v_bitrate'})
+ .($self->{'vbr'}
+ ? $self->param('rc_min_rate', 32)
+ . $self->param('rc_max_rate', (2 * $self->{'v_bitrate'}))
+ . $self->param('bit_rate_tolerance', 32)
+ . ' -bufsize 65535'
+ : '')
+ .' -flags +mv4+loop+cgop'
+ .' -trellis 1'
+ ### .' -aic 1'
+ .' -mbd 1'
+ .' -cmp 2 -subcmp 2'
+ ### .' -cgop 1'
+ .$self->param('b_quant_factor', 150)
+ .$self->param('b_quant_offset', 100)
+ .$self->param('max_b_frames', 1)
+ ;
+ # Dual pass?
+ if ($self->{'multipass'}) {
+ # Add the temporary file to the list
+ push @tmpfiles, "/tmp/xvid.$$.log";
+ # First pass
+ print "First pass...\n";
+ $self->{'ffmpeg_xtra'} = $ffmpeg_xtra
+ ." -pass 1 -passlogfile '/tmp/xvid.$$.log'"
+ .' -f avi';
+ $self->SUPER::export($episode, '', 1);
+ # Second pass
+ print "Final pass...\n";
+ $self->{'ffmpeg_xtra'} = $ffmpeg_xtra
+ . " -pass 2 -passlogfile '/tmp/xvid.$$.log'";
+ }
+ # Single Pass
+ else {
+ $self->{'ffmpeg_xtra'} = $ffmpeg_xtra
+ .($self->{'vbr'}
+ ? ' -qmax 31 -qmin '.$self->{'quantisation'}
+ : '');
+ }
+ # Don't forget the audio, etc.
+ $self->{'ffmpeg_xtra'} .= ' -acodec '
+ .($self->can_encode('libmp3lame') ? 'libmp3lame' : 'mp3')
+ .' -async 1 '
+ .$self->param('ab', $self->{'a_bitrate'})
+ .' -f avi';
+ # Execute the (final pass) encode
+ $self->SUPER::export($episode, '.avi');
+ }
+
+1; #return true
+
+# vim:ts=4:sw=4:ai:et:si:sts=4
diff --git a/abs/core-testing/nvidia-71xx/PKGBUILD b/abs/core-testing/nvidia-71xx/PKGBUILD
index 3e5d589..318b798 100644
--- a/abs/core-testing/nvidia-71xx/PKGBUILD
+++ b/abs/core-testing/nvidia-71xx/PKGBUILD
@@ -3,13 +3,13 @@
pkgname=nvidia-71xx
pkgver=71.86.09
_kernver='2.6.28-LinHES'
-pkgrel=1
+pkgrel=3
pkgdesc="NVIDIA legacy drivers for kernel26-ice, 71xx branch"
arch=(i686 x86_64)
[ "$CARCH" = "i686" ] && ARCH=x86
[ "$CARCH" = "x86_64" ] && ARCH=x86_64
url="http://www.nvidia.com/"
-depends=('nvidia-71xx-utils' 'kernel26')
+depends=('nvidia-71xx-utils' 'kernel26' 'vdpinfo-71xx')
conflicts=('nvidia' 'nvidia-96xx')
license=('custom')
source=(http://us.download.nvidia.com/XFree86/Linux-${ARCH}/${pkgver}/NVIDIA-Linux-${ARCH}-${pkgver}-pkg0.run
diff --git a/abs/core-testing/nvidia-96xx/PKGBUILD b/abs/core-testing/nvidia-96xx/PKGBUILD
index deb90eb..ee165d2 100644
--- a/abs/core-testing/nvidia-96xx/PKGBUILD
+++ b/abs/core-testing/nvidia-96xx/PKGBUILD
@@ -4,14 +4,14 @@
pkgname=nvidia-96xx
pkgver=96.43.09
_kernver='2.6.28-LinHES'
-pkgrel=4
+pkgrel=5
pkgdesc="NVIDIA legacy drivers for kernel26, 96xx branch"
arch=(i686 x86_64)
license=('custom:NVIDIA')
[ "$CARCH" = "i686" ] && ARCH=x86
[ "$CARCH" = "x86_64" ] && ARCH=x86_64
url="http://www.nvidia.com/"
-depends=('kernel26>=2.6.28' 'kernel26<2.6.29' 'nvidia-96xx-utils')
+depends=('kernel26>=2.6.28' 'kernel26<2.6.29' 'nvidia-96xx-utils' 'vdpinfo-96xx')
conflicts=('nvidia' 'nvidia-71xx' 'nvidia-legacy')
install=nvidia-96xx.install
license=('custom')
diff --git a/abs/core-testing/nvidia/PKGBUILD b/abs/core-testing/nvidia/PKGBUILD
index eccf01f..252a746 100644
--- a/abs/core-testing/nvidia/PKGBUILD
+++ b/abs/core-testing/nvidia/PKGBUILD
@@ -4,13 +4,13 @@
pkgname=nvidia
pkgver=185.18.14
_kernver='2.6.28-LinHES'
-pkgrel=2
+pkgrel=4
pkgdesc="NVIDIA drivers for kernel26."
arch=('i686' 'x86_64')
[ "$CARCH" = "i686" ] && ARCH=x86
[ "$CARCH" = "x86_64" ] && ARCH=x86_64
url="http://www.nvidia.com/"
-depends=('kernel26>=2.6.28' 'kernel26<2.6.29' 'nvidia-utils=185.18.14')
+depends=('kernel26>=2.6.28' 'kernel26<2.6.29' 'nvidia-utils=185.18.14' 'vdpinfo')
conflicts=('nvidia-96xx' 'nvidia-71xx' 'nvidia-legacy' 'nvidia-beta')
license=('custom')
install=nvidia.install
diff --git a/abs/core-testing/perl_modules/perl-tk/PKGBUILD b/abs/core-testing/perl_modules/perl-tk/PKGBUILD
index 7a16357..7aa281d 100644
--- a/abs/core-testing/perl_modules/perl-tk/PKGBUILD
+++ b/abs/core-testing/perl_modules/perl-tk/PKGBUILD
@@ -6,7 +6,7 @@ pkgname=perl-tk
_realname=Tk
#stable pkgver=804.027
pkgver=804.028
-pkgrel=1
+pkgrel=2
pkgdesc="This module/script allows perl to interface with tk"
license=('PerlArtistic' 'GPL' 'custom')
arch=(i686 x86_64)
diff --git a/abs/core-testing/php/PKGBUILD b/abs/core-testing/php/PKGBUILD
index b7b99c1..c549d56 100644
--- a/abs/core-testing/php/PKGBUILD
+++ b/abs/core-testing/php/PKGBUILD
@@ -1,6 +1,6 @@
pkgname=php
pkgver=5.2.6
-pkgrel=17
+pkgrel=20
_suhosinver=0.9.6.2
pkgdesc='A high-level scripting language'
arch=('i686' 'x86_64')
@@ -39,10 +39,14 @@ optdepends=('bzip2: bz2' \
'libxslt: xsl' \
)
options=('emptydirs')
-source=("http://www.php.net/distributions/${pkgname}-${pkgver}.tar.bz2" \
+source=("http://museum.php.net/php5/${pkgname}-${pkgver}.tar.bz2" \
"http://download.suhosin.org/suhosin-patch-${pkgver}-${_suhosinver}.patch.gz" \
'php.ini' 'apache.conf' 'db-configure.patch')
-
+md5sums=('7380ffecebd95c6edb317ef861229ebd'
+ 'f2ec986341a314c271259dbe4d940858'
+ '160b4a4f6fba59e646c3b79e3cb0f134'
+ '96ca078be6729b665be8a865535a97bf'
+ '74e5ce5a02488ec91b1c59f539e42936')
build() {
phpconfig="--prefix=/usr \
diff --git a/abs/core-testing/php/php.ini b/abs/core-testing/php/php.ini
index 0d05055..21c3db1 100644
--- a/abs/core-testing/php/php.ini
+++ b/abs/core-testing/php/php.ini
@@ -249,7 +249,7 @@ safe_mode_protected_env_vars = LD_LIBRARY_PATH
; and below. This directive makes most sense if used in a per-directory
; or per-virtualhost web server configuration file. This directive is
; *NOT* affected by whether Safe Mode is turned On or Off.
-open_basedir = /data/srv/httpd/htdocs/:/home/:/tmp/:/usr/share/pear/:/data/srv/tmp:/usr/share/mythtv/mythweather/scripts/:/data/srv/httpd/htdocs/mythweb/data/video
+open_basedir = /data/srv/httpd/htdocs/:/home/:/tmp/:/usr/share/pear/:/data/srv/tmp:/usr/share/mythtv/mythweather/scripts/:/data/srv/httpd/htdocs/mythweb/data/video:/myth/ipodfeed:/data/srv/httpd/htdocs/archive
; This directive allows you to disable certain functions for security reasons.
; It receives a comma-delimited list of function names. This directive is
diff --git a/abs/core-testing/pil/PKGBUILD b/abs/core-testing/pil/PKGBUILD
index f7149de..6f01309 100644
--- a/abs/core-testing/pil/PKGBUILD
+++ b/abs/core-testing/pil/PKGBUILD
@@ -4,7 +4,7 @@
pkgname=pil
pkgver=1.1.6
-pkgrel=5
+pkgrel=6
pkgdesc="Python imaging library"
arch=('i686' 'x86_64')
url="http://www.pythonware.com/products/pil/index.htm"
diff --git a/abs/core-testing/qt/PKGBUILD b/abs/core-testing/qt/PKGBUILD
index b581564..87ec9f7 100644
--- a/abs/core-testing/qt/PKGBUILD
+++ b/abs/core-testing/qt/PKGBUILD
@@ -2,33 +2,49 @@
# Maintainer: Pierre Schmitz <pierre@archlinux.de>
pkgname=qt
-pkgver=4.5.1
-pkgrel=2
-_qtcopyver=958581
+pkgver=4.5.2
+pkgrel=4
+_kdeqtver=2d1727e396d5dca24ae0fb6a45d35ffc1abd0c12
pkgdesc='A cross-platform application and UI framework'
arch=('i686' 'x86_64')
url='http://www.qtsoftware.com/'
license=('GPL3' 'LGPL')
-depends=('libpng' 'mesa' 'fontconfig' 'libtiff' 'libmng' 'sqlite3' 'libxrandr' 'glib2' 'libxi' 'dbus' 'libxcursor' 'libxinerama' 'libxrender')
+depends=('libpng' 'mesa' 'fontconfig' 'libtiff>=3.8.2-5' 'libmng>=1.0.10-2' 'sqlite3'
+ 'libxrandr' 'glib2' 'libxi' 'dbus' 'libxcursor' 'libxinerama' 'libxrender')
optdepends=('postgresql-libs' 'libmysqlclient' 'unixodbc')
-makedepends=('inputproto' 'postgresql-libs' 'mysql' 'unixodbc' 'libxfixes')
+makedepends=('inputproto' 'postgresql-libs' 'mysql' 'unixodbc' 'libxfixes' 'gtk2')
provides=("qt4=${pkgver}")
replaces=('qt4')
conflicts=('qt4')
options=('!libtool')
_pkgfqn="qt-x11-opensource-src-${pkgver}"
-# svn export -r${_qtcopyver} svn://anonsvn.kde.org/home/kde/trunk/qt-copy/patches/ qt-copy-patches-${_qtcopyver}
source=("ftp://ftp.qtsoftware.com/qt/source/${_pkgfqn}.tar.bz2"
- "ftp://ftp.archlinux.org/other/qt/qt-copy-patches-${_qtcopyver}.tar.bz2"
+ "ftp://ftp.archlinux.org/other/kde-qt/kde-qt-patches-${_kdeqtver}.tar.bz2"
'assistant.desktop' 'designer.desktop' 'linguist.desktop' 'qtconfig.desktop'
'qdoc3.patch')
-md5sums=('afc43e566341cf3e5ed0bcb974f0c3b2'
- 'b57b08ac7f990f91b85a7b1b1106e36b'
+md5sums=('28a7e8ac9805a6f614d2a27ee1a6ac9d'
+ '4b333add3031f59538629b35858178d9'
'b352b4b70faba2571af3fce5d119580a'
'491a96682faa03407f768a53cca71db5'
'cda7ed7e132689991dc2968a0043b4b0'
'717669b728a0a795217d2f52969e454c'
- '868056a3edab09fbac0f82ec8b4a4be3')
+ '9c0a0db3569e889a54a6cddcd55c538c')
+
+_create-kdeqt-patches() {
+ local codir=$(mktemp -d)
+ mkdir -p "${codir}/kde-qt"
+ git clone git://gitorious.org/+kde-developers/qt/kde-qt.git "${codir}/kde-qt"
+ pushd "${codir}/kde-qt"
+ local kdeqtver=$(git --no-pager show --format='%H' "${pkgver}-patched")
+ mkdir "../kde-qt-patches-${kdeqtver}"
+ git format-patch -k "v${pkgver}..${pkgver}-patched" -o "../kde-qt-patches-${kdeqtver}"
+ popd
+ pushd "${codir}"
+ bsdtar -cjf "kde-qt-patches-${kdeqtver}.tar.bz2" kde-qt-patches-${kdeqtver}
+ popd
+ mv "${codir}/kde-qt-patches-${kdeqtver}.tar.bz2" .
+ rm -rf "${codir}"
+}
build() {
unset QMAKESPEC
@@ -37,17 +53,17 @@ build() {
export LD_LIBRARY_PATH=${QT4DIR}/lib:${LD_LIBRARY_PATH}
cd $srcdir/$_pkgfqn
- for i in $srcdir/qt-copy-patches-${_qtcopyver}/*; do
+ for i in $srcdir/kde-qt-patches-${_kdeqtver}/*; do
echo "applying $i"
- patch -p0 -i $i || return 1
+ patch -p1 -i $i || return 1
done
- patch -p1 -i $srcdir/qdoc3.patch
+ patch -p0 -i $srcdir/qdoc3.patch
sed -i "s|-O2|$CXXFLAGS|" mkspecs/common/g++.conf
+ sed -i "/^QMAKE_RPATH/s| -Wl,-rpath,||g" mkspecs/common/g++.conf
./configure -confirm-license -opensource \
- -silent \
-prefix /usr \
-sysconfdir /etc \
-plugindir /usr/lib/qt/plugins \
@@ -56,16 +72,32 @@ build() {
-docdir /usr/share/doc/qt \
-examplesdir /usr/share/doc/qt/examples \
-demosdir /usr/share/doc/qt/demos \
- -no-separate-debug-info \
+ -largefile \
-plugin-sql-{psql,mysql,sqlite,odbc} \
-system-sqlite \
+ -xmlpatterns \
+ -no-phonon \
+ -svg \
+ -webkit \
+ -scripttools \
+ -system-zlib \
+ -system-libtiff \
+ -system-libpng \
+ -system-libmng \
+ -system-libjpeg \
-openssl-linked \
-nomake demos \
-nomake examples \
-nomake docs \
- -no-phonon \
+ -no-rpath \
+ -silent \
-optimized-qmake \
- -reduce-relocations
+ -dbus \
+ -reduce-relocations \
+ -no-separate-debug-info \
+ -gtkstyle \
+ -opengl \
+ -glib
make
make INSTALL_ROOT=$pkgdir install
diff --git a/abs/core-testing/qt/qdoc3.patch b/abs/core-testing/qt/qdoc3.patch
index 38ae735..c967b6e 100644
--- a/abs/core-testing/qt/qdoc3.patch
+++ b/abs/core-testing/qt/qdoc3.patch
@@ -1,17 +1,20 @@
-diff -up qt-x11-opensource-src-4.5.0/tools/qdoc3/qdoc3.pro.qdoc3 qt-x11-opensource-src-4.5.0/tools/qdoc3/qdoc3.pro
---- qt-x11-opensource-src-4.5.0/tools/qdoc3/qdoc3.pro.qdoc3 2009-02-25 15:09:26.000000000 -0600
-+++ qt-x11-opensource-src-4.5.0/tools/qdoc3/qdoc3.pro 2009-03-04 09:30:05.000000000 -0600
-@@ -106,3 +106,7 @@ win32 {
- QT_WINCONFIG = debug
- }
+--- tools/qdoc3/qdoc3.pro 2009-06-25 17:34:42.000000000 +0200
++++ tools/qdoc3/qdoc3.pro.new 2009-06-25 17:35:42.000000000 +0200
+@@ -8,6 +8,11 @@
+ CONFIG -= build_all
+ CONFIG += release
}
+
+TARGET= qdoc3
+target.path = $$[QT_INSTALL_BINS]
+INSTALLS += target
++
+ mac:CONFIG -= app_bundle
+ HEADERS += apigenerator.h \
+ archiveextractor.h \
diff -up qt-x11-opensource-src-4.5.0/tools/tools.pro.qdoc3 qt-x11-opensource-src-4.5.0/tools/tools.pro
---- qt-x11-opensource-src-4.5.0/tools/tools.pro.qdoc3 2009-02-25 15:09:27.000000000 -0600
-+++ qt-x11-opensource-src-4.5.0/tools/tools.pro 2009-03-04 09:44:18.000000000 -0600
+--- tools/tools.pro.qdoc3 2009-02-25 15:09:27.000000000 -0600
++++ tools/tools.pro 2009-03-04 09:44:18.000000000 -0600
@@ -13,6 +13,7 @@ no-png {
SUBDIRS += designer
}
diff --git a/abs/core-testing/qt3/PKGBUILD b/abs/core-testing/qt3/PKGBUILD
index 870305a..131cbb1 100644
--- a/abs/core-testing/qt3/PKGBUILD
+++ b/abs/core-testing/qt3/PKGBUILD
@@ -3,7 +3,7 @@
# Contributor: John Proctor <jproctor@prium.net>
pkgname=qt3
pkgver=3.3.8
-pkgrel=8
+pkgrel=9
pkgdesc="The QT gui toolkit."
arch=(i686 x86_64)
license=('GPL')
diff --git a/abs/core-testing/runit-scripts/PKGBUILD b/abs/core-testing/runit-scripts/PKGBUILD
index 2c237d7..6bea389 100755
--- a/abs/core-testing/runit-scripts/PKGBUILD
+++ b/abs/core-testing/runit-scripts/PKGBUILD
@@ -1,11 +1,11 @@
pkgname=runit-scripts
pkgver=1.8.0
-pkgrel=90
+pkgrel=94
pkgdesc="collection of startup scripts for runit"
url="http://smarden.org/runit/"
license="BSD"
depends=('glibc' 'util-linux' 'initscripts' 'runit' )
-makedepends=()
+makedepends=('rsync')
conflicts=()
replaces=()
backup=(etc/runit/1.local)
diff --git a/abs/core-testing/runit-scripts/runitscripts/halt-runit b/abs/core-testing/runit-scripts/runitscripts/halt-runit
index 7c07b05..b7d9a95 100755
--- a/abs/core-testing/runit-scripts/runitscripts/halt-runit
+++ b/abs/core-testing/runit-scripts/runitscripts/halt-runit
@@ -1,2 +1,3 @@
#!/bin/sh
+wall "System will shutdown NOW"
runit-init 0
diff --git a/abs/core-testing/runit-scripts/runitscripts/reboot-runit b/abs/core-testing/runit-scripts/runitscripts/reboot-runit
index be831ec..0d3d9d4 100755
--- a/abs/core-testing/runit-scripts/runitscripts/reboot-runit
+++ b/abs/core-testing/runit-scripts/runitscripts/reboot-runit
@@ -1,2 +1,3 @@
#!/bin/sh
+wall "System will reboot NOW"
runit-init 6
diff --git a/abs/core-testing/runit-scripts/runitscripts/services/lircd/run b/abs/core-testing/runit-scripts/runitscripts/services/lircd/run
index 6d67537..0a398ac 100755
--- a/abs/core-testing/runit-scripts/runitscripts/services/lircd/run
+++ b/abs/core-testing/runit-scripts/runitscripts/services/lircd/run
@@ -1,30 +1,36 @@
#!/bin/bash
+
exec 2>&1
export TERM=linux
+
. /etc/rc.conf
. /etc/rc.d/functions
#since what we do may not be enough
#if your one of those people, this is where you place your stuff
+
LOG=/tmp/lirc.log
+
if [ -f $LOG ]
then
- rm -f $LOG
+ rm -f $LOG
fi
+
if [ -f /etc/runit/lirc.sh ]
then
#program must not terminate.
- stat_runit "Starting lirc"
+ stat_runit "Starting lirc"
/etc/runit/lirc.sh
else
. /etc/systemconfig
stat_runit "Starting lirc"
+
[ -e /etc/sv/lircd/.runtime ] || mkdir -p /etc/sv/lircd/.runtime
function dvico_detect {
- if [ x$Remotetype = "xdvico" ]
+ if [ x$Remotetype = "xdvico" ] || [ x$Remotetype = "xDvico-Dual-Digital4-rev2" ]
then
RunDvico=true
else
@@ -35,15 +41,26 @@ else
num_lirc=`ls -la /dev/lirc[0-9] 2>/dev/null |wc -l `
num_lirc=$((num_lirc-1))
- #/dev/ttys0 (COM1), port 0x3f8, irq 4
- #/dev/ttys1 (COM2), port 0x2f8, irq 3
- #/dev/ttys2 (COM3), port 0x3e8, irq 4
- #/dev/ttys3 (COM4), port 0x2e8, irq 3
+ serial_port=""
+
if [ x$ReceiverType = xSerial ]
then
- case $ReceiverSerialport in
+ serial_port=$ReceiverSerialport
+ elif [ x$HostBlasterType = xSerial ]
+ then
+ serial_port=$HostSerialPort_blasterlirc
+ fi
+
+ if [ -n "$serial_port" ]
+ then
+ #/dev/ttyS0 (COM1), port 0x3f8, irq 4
+ #/dev/ttyS1 (COM2), port 0x2f8, irq 3
+ #/dev/ttyS2 (COM3), port 0x3e8, irq 4
+ #/dev/ttyS3 (COM4), port 0x2e8, irq 3
+
+ case $serial_port in
ttyS0)
- FLAGS="io=0x3f8 irq=4"
+ FLAGS="io=0x3f8 irq=4"
;;
ttyS1)
FLAGS="io=0x2f8 irq=3"
@@ -52,81 +69,70 @@ else
FLAGS="io=0x3e8 irq=4"
;;
ttyS3)
- FLAGS="io=0x2f8 irq=3"
+ FLAGS="io=0x2e8 irq=3"
;;
esac
- /usr/bin/setserial /dev/$ReceiverSerialport uart none
- sleep .5
+ /usr/bin/setserial /dev/serial_port uart none
+ sleep 0.5
/sbin/modprobe lirc_serial $FLAGS
- sleep .5
- elif [ x$HostBlasterType = xSerial ]
- then
- case $HostSerialPort_blasterlirc in
- ttyS0)
- FLAGS="io=0x3f8 irq=4"
- ;;
- ttyS1)
- FLAGS="io=0x2f8 irq=3"
- ;;
- ttyS2)
- FLAGS="io=0x3e8 irq=4"
- ;;
- ttyS3)
- FLAGS="io=0x2f8 irq=3"
- ;;
- esac
- /usr/bin/setserial /dev/$ReceiverSerialport uart none
- sleep .5
- /sbin/modprobe lirc_serial $FLAGS
- sleep .5
+ sleep 0.5
fi
dvico_detect
+
if [ x$HostBlasterType = xCommandIR -o x$ReceiverType = xCommandIR ]
then
CMD="/usr/sbin/lircd -n --driver=commandir"
printhl " Using commandir"
$CMD >>$LOG 2>>$LOG
- elif [ x$HostBlasterType = xiguanaIR-usb -o x$ReceiverType = xiguanaIR-usb ]
- then
+#echo $CMD
+ elif [ x$HostBlasterType = xiguanaIR-usb -o x$ReceiverType = xiguanaIR-usb ]
+ then
sv start igdaemon
CMD="/usr/sbin/lircd -n --driver=iguanaIR"
printhl " Using iguanaIR usb"
+#echo $CMD
$CMD >>$LOG 2>>$LOG
else
LASTCMD=""
+
for i in `seq 1 $num_lirc`
do
CMD="/usr/sbin/lircd -d /dev/lirc$i --output=/dev/lircd$i --pidfile=/var/run/lircd$i.pid --listen=876$i"
-# echo $CMD
printhl " Device $i"
+#echo $CMD
$CMD >>$LOG 2>>$LOG
LASTCMD="--connect=localhost:876$i $LASTCMD "
done
- if [ $RunDvico = "true" -a $num_lirc -lt 0 ]
- then
- #only run dvicio
- LCMD="/usr/sbin/lircd -n -d /dev/usb/dvicoIR --driver=dvico --output /dev/lircd"
- # echo $LCMD
- printhl " Device Dvicio"
-
- exec $LCMD >>$LOG 2>>$LOG
- elif [ $RunDvico = true -a $num_lirc -gt -1 ]
- then
- #chain them together
- i=$((i+1))
- CMD="/usr/sbin/lircd -d /dev/usb/dvicoIR --driver=dvico --output=/dev/lircd$i --pidfile=/var/run/lircd$i.pid --listen=876$i"
- # echo $CMD
- $CMD >> $LOG
- LASTCMD="--connect=localhost:876$i $LASTCMD "
- printhl " Device Dvicio"
-
- /usr/sbin/lircd -n -d /dev/lirc0 --output /dev/lircd $LASTCMD >>$LOG 2>>$LOG
- else
- LCMD="/usr/sbin/lircd -n -d /dev/lirc0 --output /dev/lircd $LASTCMD"
- # echo $LCMD
-
- exec $LCMD >>$LOG 2>>$LOG
- fi
+
+ if [ $RunDvico = "true" ]
+ then
+ if [ x$Remotetype = "xdvico" ]
+ then
+ LCMD="/usr/sbin/lircd -n -d /dev/usb/dvicoIR --driver=dvico --output /dev/lircd"
+ else
+ LCMD="/usr/sbin/lircd -n -d /dev/input/irremote --driver=devinput --output /dev/lircd"
+ fi
+
+ if [ $num_lirc -lt 0 ]
+ then
+ # Only run Dvico
+ printhl " Device $Remotetype"
+#echo $LCMD
+ exec $LCMD >>$LOG 2>>$LOG
+ elif [ $num_lirc -gt -1 ]
+ then
+ i=$((i+1))
+ CMD="$LCMD --output=/dev/lircd$i --pidfile=/var/run/lircd$i.pid --listen=876$i"
+ $CMD >> $LOG
+ LASTCMD="--connect=localhost:876$i $LASTCMD "
+ printhl " Device Dvico"
+ /usr/sbin/lircd -n -d /dev/lirc0 --output /dev/lircd $LASTCMD >>$LOG 2>>$LOG
+ fi
+ else
+ LCMD="/usr/sbin/lircd -n -d /dev/lirc0 --output /dev/lircd $LASTCMD"
+#echo $LCMD
+ exec $LCMD >>$LOG 2>>$LOG
+ fi
fi
fi
diff --git a/abs/core-testing/sqlite3/PKGBUILD b/abs/core-testing/sqlite3/PKGBUILD
index b40c3ee..acf7a94 100644
--- a/abs/core-testing/sqlite3/PKGBUILD
+++ b/abs/core-testing/sqlite3/PKGBUILD
@@ -3,8 +3,8 @@
# Contributor: Tom Newsom <Jeepster@gmx.co.uk>
pkgname=sqlite3
-pkgver=3.6.7
-pkgrel=2
+pkgver=3.6.10
+pkgrel=5
pkgdesc="A C library that implements an SQL database engine"
arch=('i686' 'x86_64')
license=('custom')
@@ -15,9 +15,9 @@ conflicts=('sqlite')
replaces=('sqlite')
source=(http://www.sqlite.org/sqlite-$pkgver.tar.gz
license.txt)
-options=(!libtool)
-md5sums=('5223d1f459b608ed8c2c54f8847f8e1a'
+md5sums=('a03bdc86df4025b6881d58557e4b5bd3'
'c1cdbc5544034d9012e421e75a5e4890')
+options=(!libtool)
build() {
cd ${srcdir}/sqlite-${pkgver}
diff --git a/abs/core-testing/system-templates/PKGBUILD b/abs/core-testing/system-templates/PKGBUILD
index b911335..c93b210 100755
--- a/abs/core-testing/system-templates/PKGBUILD
+++ b/abs/core-testing/system-templates/PKGBUILD
@@ -1,6 +1,6 @@
pkgname=system-templates
pkgver=1.0
-pkgrel=27
+pkgrel=33
conflicts=( )
pkgdesc="Templates used for system configuration"
depends=()
diff --git a/abs/core-testing/system-templates/templates/remotes/ea65/lircd.conf.ea65 b/abs/core-testing/system-templates/templates/remotes/AOpen-EA65/lircd.conf.ea65
index a10181d..a10181d 100644
--- a/abs/core-testing/system-templates/templates/remotes/ea65/lircd.conf.ea65
+++ b/abs/core-testing/system-templates/templates/remotes/AOpen-EA65/lircd.conf.ea65
diff --git a/abs/core-testing/system-templates/templates/remotes/ea65/lircrc.ea65 b/abs/core-testing/system-templates/templates/remotes/AOpen-EA65/lircrc.ea65
index fd96d42..fd96d42 100644
--- a/abs/core-testing/system-templates/templates/remotes/ea65/lircrc.ea65
+++ b/abs/core-testing/system-templates/templates/remotes/AOpen-EA65/lircrc.ea65
diff --git a/abs/core-testing/system-templates/templates/remotes/AOpen-EA65/preview.jpg b/abs/core-testing/system-templates/templates/remotes/AOpen-EA65/preview.jpg
new file mode 100644
index 0000000..2fc223c
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/AOpen-EA65/preview.jpg
Binary files differ
diff --git a/abs/core-testing/system-templates/templates/remotes/asus-digitmatrix/lircd.conf.asus b/abs/core-testing/system-templates/templates/remotes/ASUS-DiGiMatrix/lircd.conf.asus
index ceadbf0..ceadbf0 100644
--- a/abs/core-testing/system-templates/templates/remotes/asus-digitmatrix/lircd.conf.asus
+++ b/abs/core-testing/system-templates/templates/remotes/ASUS-DiGiMatrix/lircd.conf.asus
diff --git a/abs/core-testing/system-templates/templates/remotes/asus-digitmatrix/lircd.conf.digimatrix b/abs/core-testing/system-templates/templates/remotes/ASUS-DiGiMatrix/lircd.conf.digimatrix
index a6e9abd..a6e9abd 100644
--- a/abs/core-testing/system-templates/templates/remotes/asus-digitmatrix/lircd.conf.digimatrix
+++ b/abs/core-testing/system-templates/templates/remotes/ASUS-DiGiMatrix/lircd.conf.digimatrix
diff --git a/abs/core-testing/system-templates/templates/remotes/ASUS-DiGiMatrix/preview.jpg b/abs/core-testing/system-templates/templates/remotes/ASUS-DiGiMatrix/preview.jpg
new file mode 100644
index 0000000..250d6a1
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/ASUS-DiGiMatrix/preview.jpg
Binary files differ
diff --git a/abs/core-testing/system-templates/templates/remotes/Avermedia_77x/lircd-avermedia77x.conf b/abs/core-testing/system-templates/templates/remotes/Avermedia_77x/lircd-avermedia77x.conf
new file mode 100755
index 0000000..d30e172
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Avermedia_77x/lircd-avermedia77x.conf
@@ -0,0 +1,66 @@
+#
+# this config file was automatically generated
+# using lirc-0.8.0(userspace) on Mon Feb 20 23:15:48 2006
+#
+# contributed by Joris Patroons
+#
+# brand: AVerMedia
+# model no. of remote control: Unknown
+# devices being controlled by this remote:
+# AVerTV DVB-T 771
+
+begin remote
+
+ name a771
+ bits 32
+ flags SPACE_ENC|CONST_LENGTH
+ eps 30
+ aeps 100
+
+ header 9078 4437
+ one 615 1631
+ zero 615 515
+ ptrail 620
+ repeat 9080 2189
+ gap 108056
+ toggle_bit 0
+
+
+ begin codes
+ SOURCE 0x40BF807F
+ TELETEXT 0x40BF40BF
+ POWER 0x40BF00FF
+ 1 0x40BFA05F
+ 2 0x40BF609F
+ 3 0x40BFE01F
+ 4 0x40BF906F
+ 5 0x40BF50AF
+ 6 0x40BFD02F
+ 7 0x40BFB04F
+ 8 0x40BF708F
+ 9 0x40BFF00F
+ 0 0x40BF8877
+ AUDIO 0x40BF10EF
+ FULLSCREEN 0x40BF30CF
+ DISPLAY 0x40BF48B7
+ LOOP 0x40BFC837
+ PREVIEW 0x40BF08F7
+ BACKWARD 0x40BFA857
+ FORWARD 0x40BF6897
+ CAPTURE 0x40BFE817
+ MUTE 0x40BF28D7
+ RECORD 0x40BF9867
+ PAUSE 0x40BF58A7
+ STOP 0x40BFD827
+ PLAY 0x40BF18E7
+ RED 0x40BFB847
+ GREEN 0xC03F807F
+ YELLOW 0x40BF38C7
+ BLUE 0xC03F00FF
+ VOL_DOWN 0x40BF7887
+ VOL_UP 0x40BFF807
+ CH_DOWN 0xC03F40BF
+ CH_UP 0xC03FC03F
+ end codes
+
+end remote \ No newline at end of file
diff --git a/abs/core-testing/system-templates/templates/remotes/Avermedia_77x/lircrc-avermedia771.txt b/abs/core-testing/system-templates/templates/remotes/Avermedia_77x/lircrc-avermedia771.txt
new file mode 100755
index 0000000..2aa9e09
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Avermedia_77x/lircrc-avermedia771.txt
@@ -0,0 +1,475 @@
+# Channel Up
+begin
+prog = mythtv
+button = CH_UP
+config = Up
+end
+
+# Channel Down
+begin
+prog = mythtv
+button = CH_DOWN
+config = Down
+end
+
+# General Left
+begin
+prog = mythtv
+button =
+config = Left
+end
+
+# General Right
+begin
+prog = mythtv
+button =
+config = Right
+end
+
+ # LiveTV browse up channel
+begin
+prog = mythtv
+button = CH_UP
+config = Up
+end
+
+# LiveTV browse down channel
+begin
+prog = mythtv
+button = CH_DOWN
+config = Down
+end
+
+# Volume Up
+begin
+prog = mythtv
+button = VOL_UP
+config = F11
+end
+
+# Volume Down
+begin
+prog = mythtv
+button = VOL_DOWN
+config = F10
+end
+
+ # OK/Select
+begin
+prog = mythtv
+button =
+config = Space
+end
+
+# Play
+begin
+prog = mythtv
+button = PLAY
+config = Return
+end
+
+# Stop
+begin
+prog = mythtv
+button = STOP
+config = Esc
+end
+
+# Escape/Exit/Back
+begin
+prog = mythtv
+button =
+config = Esc
+end
+
+# Power Off/Exit
+begin
+prog = irexec
+button = POWER
+config = /usr/bin/mythpowerbutton.sh
+end
+
+# Pause
+begin
+prog = mythtv
+button = PAUSE
+config = P
+end
+
+# Mute
+begin
+prog = mythtv
+button = MUTE
+config = |
+end
+
+# Fast forward (10 sec default)
+begin
+prog = mythtv
+button = FORWARD
+config = Right
+end
+
+# Rewind (10 sec default)
+begin
+prog = mythtv
+button = BACKWARD
+config = Left
+end
+
+# Skip forward (10 min default)
+begin
+prog = mythtv
+button =
+config = PgDown
+end
+
+# Skip backward (10 min default)
+begin
+prog = mythtv
+button =
+config = PgUp
+end
+
+# Record
+begin
+prog = mythtv
+button = CAPTURE
+config = R
+end
+
+# Delete
+begin
+prog = mythtv
+button = RED
+config = D
+end
+
+# OSD browse
+begin
+prog = mythtv
+button =
+config = O
+end
+
+# Display EPG while in live TV,
+# View selected show while in EPG
+begin
+prog = mythtv
+button = PREVIEW
+config = M
+end
+
+# Bring up OSD info
+begin
+prog = mythtv
+button = TELETEXT
+config = I
+end
+
+# Change display aspect ratio
+begin
+prog = mythtv
+button = DISPLAY
+config = W
+end
+
+# Seek to previous commercial cut point
+begin
+prog = mythtv
+button =
+config = Q
+end
+
+# Seek to next commercial cut point
+begin
+prog = mythtv
+button =
+config = Z
+end
+
+# Numbers 0-9
+
+begin
+prog = mythtv
+button = 0
+config = 0
+end
+
+begin
+prog = mythtv
+button = 1
+config = 1
+end
+
+begin
+prog = mythtv
+button = 2
+config = 2
+end
+
+begin
+prog = mythtv
+button = 3
+config = 3
+end
+
+begin
+prog = mythtv
+button = 4
+config = 4
+end
+
+begin
+prog = mythtv
+button = 5
+config = 5
+end
+
+begin
+prog = mythtv
+button = 6
+config = 6
+end
+
+begin
+prog = mythtv
+button = 7
+config = 7
+end
+
+begin
+prog = mythtv
+button = 8
+config = 8
+end
+
+begin
+prog = mythtv
+button = 9
+config = 9
+end
+
+# Closed Captioning
+begin
+prog = mythtv
+button =
+config = T
+end
+
+# Picture in Picture
+begin
+prog = mythtv
+button = PREVIEW
+config = V
+end
+
+# Change channels on both cards
+begin
+prog = mythtv
+button =
+config = N
+end
+
+# Clear cutpoints in cutlist
+begin
+prog = mythtv
+button =
+config = Q
+end
+
+
+
+
+### MPlayer lirc setup
+
+# Show OSD
+begin
+prog = mplayer
+button = TELETEXT
+config = osd
+end
+
+# Pause playback
+begin
+prog = mplayer
+button = PAUSE
+config = pause
+end
+
+# Skip ahead a minute if playing
+# If paused, resume playing
+begin
+prog = mplayer
+button =
+config = seek +1
+end
+
+# Mute
+begin
+prog = mplayer
+button = MUTE
+config = mute
+end
+
+# Seek back 10 seconds
+begin
+prog = mplayer
+button = BACKWARD
+config = seek -10
+end
+
+# Seek forward 30 seconds
+begin
+prog = mplayer
+button = FORWARD
+config = seek +30
+end
+
+# Quit
+begin
+prog = mplayer
+button = STOP
+config = quit
+end
+
+# Seek forward 10 minutes
+begin
+prog = mplayer
+button =
+config = seek +600
+end
+
+# Seek backward 10 minutes
+begin
+prog = mplayer
+button =
+config = seek -600
+end
+
+# Toggle full-screen
+begin
+prog = mplayer
+button = FULLSCREEN
+config = vo_fullscreen
+end
+
+
+
+### Xine lirc setup
+
+begin
+prog = xine
+button = PLAY
+config = Play
+end
+
+begin
+prog = xine
+button = STOP
+config = Stop
+end
+
+begin
+prog = xine
+button = STOP
+config = Quit
+end
+
+begin
+prog = xine
+button = PAUSE
+config = Pause
+end
+
+begin
+prog = xine
+button =
+config = EventUp
+end
+
+begin
+prog = xine
+button =
+config = EventDown
+end
+
+begin
+prog = xine
+button =
+config = EventLeft
+end
+
+begin
+prog = xine
+button =
+config = EventRight
+end
+
+begin
+prog = xine
+button =
+config = EventSelect
+end
+
+begin
+prog = xine
+button = PREVIEW
+config = Menu
+end
+
+begin
+prog = xine
+button = FORWARD
+#config = SpeedFaster
+config = SeekRelative+60
+end
+
+begin
+prog = xine
+button = BACKWARD
+#config = SpeedSlower
+config = SeekRelative-60
+end
+
+begin
+prog = xine
+button = VOL_UP
+config = Volume+
+end
+
+begin
+prog = xine
+button = VOL_DOWN
+config = Volume-
+end
+
+begin
+prog = xine
+button = MUTE
+config = Mute
+end
+
+begin
+prog = xine
+button = STOP
+config = RootMenu
+end
+
+begin
+prog = xine
+button =
+config = EventNext
+end
+
+begin
+prog = xine
+button =
+config = EventPrior
+end
+
+begin
+prog = xine
+button = TELETEXT
+config = OSDStreamInfos
+end \ No newline at end of file
diff --git a/abs/core-testing/system-templates/templates/remotes/ea65/preview.jpg b/abs/core-testing/system-templates/templates/remotes/Avermedia_77x/preview.jpg
index a034186..a034186 100644
--- a/abs/core-testing/system-templates/templates/remotes/ea65/preview.jpg
+++ b/abs/core-testing/system-templates/templates/remotes/Avermedia_77x/preview.jpg
Binary files differ
diff --git a/abs/core-testing/system-templates/templates/remotes/Avermedia_98/lircd-avermedia98.conf b/abs/core-testing/system-templates/templates/remotes/Avermedia_98/lircd-avermedia98.conf
new file mode 100755
index 0000000..bfc07b9
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Avermedia_98/lircd-avermedia98.conf
@@ -0,0 +1,97 @@
+#
+# this config file was automatically generated
+# using lirc-0.6.1 on Tue Apr 25 14:31:21 2000
+#
+# contributed by Christoph Bartelmus <lirc@bartelmus.de>
+#
+# brand: AVerMedia
+# model: ? (36 buttons)
+# supported devices: TVPhone98 card (ID 0x00031461)
+# TVCapture98 card (ID 0x00041461)
+#
+# This config file does work with both homebrew receivers and
+# original AVerMedia TV cards !!!
+#
+
+begin remote
+
+ name TVPhone98
+ bits 16
+ flags SPACE_ENC|CONST_LENGTH
+ eps 30
+ aeps 100
+
+ header 9078 4437
+ one 615 1631
+ zero 615 515
+ ptrail 620
+ repeat 9080 2189
+ pre_data_bits 16
+ pre_data 0x40BF
+ gap 108056
+ repeat_bit 0
+
+ begin codes
+ POWER 0x00000000000000FF
+ TV/FM 0x000000000000807F
+ CD 0x00000000000040BF
+ TELETEXT 0x000000000000C03F
+ VIDEO 0x00000000000020DF
+ 1 0x000000000000A05F
+ 2 0x000000000000609F
+ 3 0x000000000000E01F
+ AUDIO 0x00000000000010EF
+ 4 0x000000000000906F
+ 5 0x00000000000050AF
+ 6 0x000000000000D02F
+ FULLSCREEN 0x00000000000030CF
+ 7 0x000000000000B04F
+ 8 0x000000000000708F
+ 9 0x000000000000F00F
+
+ PREVIEW 0x00000000000008F7
+ 0 0x0000000000008877
+ DISPLAY 0x00000000000048B7
+ LOOP 0x000000000000C837
+ MUTE 0x00000000000028D7
+ AUTOSCAN 0x000000000000A857
+ FREEZE 0x0000000000006897
+ CAPTURE 0x000000000000E817
+ PLAY 0x00000000000018E7
+ RECORD 0x0000000000009867
+ PAUSE 0x00000000000058A7
+ STOP 0x000000000000D827
+ YELLOW 0x00000000000038C7
+ RED 0x000000000000B847
+ VOL_DOWN 0x0000000000007887
+ VOL_UP 0x000000000000F807
+ end codes
+
+end remote
+
+begin remote
+
+ name TVPhone98_ext
+ bits 16
+ flags SPACE_ENC|CONST_LENGTH
+ eps 30
+ aeps 100
+
+ header 9078 4437
+ one 615 1631
+ zero 615 515
+ ptrail 620
+ repeat 9080 2189
+ pre_data_bits 16
+ pre_data 0xC03F
+ gap 108056
+ repeat_bit 0
+
+ begin codes
+ BLUE 0x00000000000000FF
+ GREEN 0x000000000000807F
+ CH_DOWN 0x00000000000040BF
+ CH_UP 0x000000000000C03F
+ end codes
+
+end remote \ No newline at end of file
diff --git a/abs/core-testing/system-templates/templates/remotes/Avermedia_98/lircrc-avermedia98.txt b/abs/core-testing/system-templates/templates/remotes/Avermedia_98/lircrc-avermedia98.txt
new file mode 100755
index 0000000..f8fb43a
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Avermedia_98/lircrc-avermedia98.txt
@@ -0,0 +1,477 @@
+# Channel Up
+begin
+prog = mythtv
+button = CH_UP
+config = Up
+end
+
+# Channel Down
+begin
+prog = mythtv
+button = CH_DOWN
+config = Down
+end
+
+# General Left
+begin
+prog = mythtv
+button = LEFT
+config = Left
+end
+
+# General Right
+begin
+prog = mythtv
+button = RIGHT
+config = Right
+end
+
+ # LiveTV browse up channel
+begin
+prog = mythtv
+button = CH_UP
+config = Up
+end
+
+# LiveTV browse down channel
+begin
+prog = mythtv
+button = CH_DOWN
+config = Down
+end
+
+# Volume Up
+begin
+prog = mythtv
+button = VOL_UP
+config = F11
+end
+
+# Volume Down
+begin
+prog = mythtv
+button = VOL_DOWN
+config = F10
+end
+
+ # OK/Select
+begin
+prog = mythtv
+button = UNLABELED
+config = Space
+end
+
+# Play
+begin
+prog = mythtv
+button = PLAY
+config = Return
+end
+
+# Stop
+begin
+prog = mythtv
+button = STOP
+config = Esc
+end
+
+# Escape/Exit/Back
+begin
+prog = mythtv
+button =
+config = Esc
+end
+
+# Power Off/Exit
+begin
+prog = irexec
+button = POWER
+config = /usr/bin/mythpowerbutton.sh
+end
+
+# Pause
+begin
+prog = mythtv
+button = PAUSE
+config = P
+end
+
+# Mute
+begin
+prog = mythtv
+button = MUTE
+config = |
+end
+
+# Fast forward (10 sec default)
+begin
+prog = mythtv
+button =
+config = Right
+end
+
+# Rewind (10 sec default)
+begin
+remote = TVPhone98_ext
+prog = mythtv
+button = BLUE
+config = Left
+end
+
+# Skip forward (10 min default)
+begin
+remote = TVPhone98_ext
+prog = mythtv
+button = GREEN
+config = PgDown
+end
+
+# Skip backward (10 min default)
+begin
+prog = mythtv
+button =
+config = PgUp
+end
+
+# Record
+begin
+prog = mythtv
+button = CAPTURE
+config = R
+end
+
+# Delete
+begin
+prog = mythtv
+button = RED
+config = D
+end
+
+# OSD browse
+begin
+prog = mythtv
+button =
+config = O
+end
+
+# Display EPG while in live TV,
+# View selected show while in EPG
+begin
+prog = mythtv
+button = YELLOW
+config = M
+end
+
+# Bring up OSD info
+begin
+prog = mythtv
+button = TELETEXT
+config = I
+end
+
+# Change display aspect ratio
+begin
+prog = mythtv
+button = DISPLAY
+config = W
+end
+
+# Seek to previous commercial cut point
+begin
+prog = mythtv
+button =
+config = Q
+end
+
+# Seek to next commercial cut point
+begin
+prog = mythtv
+button =
+config = Z
+end
+
+# Numbers 0-9
+
+begin
+prog = mythtv
+button = 0
+config = 0
+end
+
+begin
+prog = mythtv
+button = 1
+config = 1
+end
+
+begin
+prog = mythtv
+button = 2
+config = 2
+end
+
+begin
+prog = mythtv
+button = 3
+config = 3
+end
+
+begin
+prog = mythtv
+button = 4
+config = 4
+end
+
+begin
+prog = mythtv
+button = 5
+config = 5
+end
+
+begin
+prog = mythtv
+button = 6
+config = 6
+end
+
+begin
+prog = mythtv
+button = 7
+config = 7
+end
+
+begin
+prog = mythtv
+button = 8
+config = 8
+end
+
+begin
+prog = mythtv
+button = 9
+config = 9
+end
+
+# Closed Captioning
+begin
+prog = mythtv
+button =
+config = T
+end
+
+# Picture in Picture
+begin
+prog = mythtv
+button = VIDEO
+config = V
+end
+
+# Change channels on both cards
+begin
+prog = mythtv
+button =
+config = N
+end
+
+# Clear cutpoints in cutlist
+begin
+prog = mythtv
+button =
+config = Q
+end
+
+
+
+
+### MPlayer lirc setup
+
+# Show OSD
+begin
+prog = mplayer
+button = TELETEXT
+config = osd
+end
+
+# Pause playback
+begin
+prog = mplayer
+button = PAUSE
+config = pause
+end
+
+# Skip ahead a minute if playing
+# If paused, resume playing
+begin
+prog = mplayer
+button =
+config = seek +1
+end
+
+# Mute
+begin
+prog = mplayer
+button = MUTE
+config = mute
+end
+
+# Seek back 10 seconds
+begin
+prog = mplayer
+button =
+config = seek -10
+end
+
+# Seek forward 30 seconds
+begin
+prog = mplayer
+button =
+config = seek +30
+end
+
+# Quit
+begin
+prog = mplayer
+button = STOP
+config = quit
+end
+
+# Seek forward 10 minutes
+begin
+prog = mplayer
+button =
+config = seek +600
+end
+
+# Seek backward 10 minutes
+begin
+prog = mplayer
+button =
+config = seek -600
+end
+
+# Toggle full-screen
+begin
+prog = mplayer
+button = FULLSCREEN
+config = vo_fullscreen
+end
+
+
+
+### Xine lirc setup
+
+begin
+prog = xine
+button = PLAY
+config = Play
+end
+
+begin
+prog = xine
+button = STOP
+config = Stop
+end
+
+begin
+prog = xine
+button = STOP
+config = Quit
+end
+
+begin
+prog = xine
+button = PAUSE
+config = Pause
+end
+
+begin
+prog = xine
+button =
+config = EventUp
+end
+
+begin
+prog = xine
+button =
+config = EventDown
+end
+
+begin
+prog = xine
+button =
+config = EventLeft
+end
+
+begin
+prog = xine
+button =
+config = EventRight
+end
+
+begin
+prog = xine
+button =
+config = EventSelect
+end
+
+begin
+prog = xine
+button = PREVIEW
+config = Menu
+end
+
+begin
+prog = xine
+button =
+#config = SpeedFaster
+config = SeekRelative+60
+end
+
+begin
+prog = xine
+button =
+#config = SpeedSlower
+config = SeekRelative-60
+end
+
+begin
+prog = xine
+button = VOL_UP
+config = Volume+
+end
+
+begin
+prog = xine
+button = VOL_DOWN
+config = Volume-
+end
+
+begin
+prog = xine
+button = MUTE
+config = Mute
+end
+
+begin
+prog = xine
+button = STOP
+config = RootMenu
+end
+
+begin
+prog = xine
+button =
+config = EventNext
+end
+
+begin
+prog = xine
+button =
+config = EventPrior
+end
+
+begin
+prog = xine
+button = TELETEXT
+config = OSDStreamInfos
+end \ No newline at end of file
diff --git a/abs/core-testing/system-templates/templates/remotes/Avermedia_98/preview.jpg b/abs/core-testing/system-templates/templates/remotes/Avermedia_98/preview.jpg
new file mode 100644
index 0000000..a2382d2
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Avermedia_98/preview.jpg
Binary files differ
diff --git a/abs/core-testing/system-templates/templates/remotes/Avertv_USB/lircd-avertvusb.conf b/abs/core-testing/system-templates/templates/remotes/Avertv_USB/lircd-avertvusb.conf
new file mode 100755
index 0000000..391c8d4
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Avertv_USB/lircd-avertvusb.conf
@@ -0,0 +1,65 @@
+#
+# this config file was created by using lirc-0.8 on Thu Sept 14 2006
+#
+# contributed by elturisto
+#
+# brand: AVerMedia
+# model no. of remote control: RM-FP
+# devices being controlled by this remote: AVerMedia DVB-T USB2.0 (A800)
+#
+
+begin remote
+
+ name rmfp
+ bits 32
+ flags SPACE_ENC|CONST_LENGTH
+ eps 30
+ aeps 100
+
+ header 8967 4524
+ one 565 1682
+ zero 565 559
+ ptrail 561
+ repeat 8968 2276
+ gap 107905
+ toggle_bit 0
+
+
+ begin codes
+ power 0x00010074
+ source 0x00010094
+ 1 0x00010002
+ 2 0x00010003
+ 3 0x00010004
+ 4 0x00010005
+ 5 0x00010006
+ 6 0x00010007
+ 7 0x00010008
+ 8 0x00010009
+ 9 0x0001000a
+ 0 0x0001000b
+ display 0x00010095
+ snapshot 0x00010069
+ chrtn 0x0001006a
+ chprev 0x000100ca
+ chup 0x00010192
+ chdown 0x00010193
+ voldown 0x00010072
+ volup 0x00010073
+ fullscreen 0x00010174
+ mute 0x00010071
+ audio 0x00010188
+ record 0x000100a7
+ play 0x000100cf
+ stop 0x00010080
+ pause 0x000100a4
+ rewind 0x0001009e
+ forward 0x0001009f
+ teletext 0x00010184
+ last 0x00010194
+ next 0x00010195
+ epg 0x0001016d
+ menu 0x0001008b
+ end codes
+
+end remote \ No newline at end of file
diff --git a/abs/core-testing/system-templates/templates/remotes/Avertv_USB/lircrc-avertvusb.txt b/abs/core-testing/system-templates/templates/remotes/Avertv_USB/lircrc-avertvusb.txt
new file mode 100755
index 0000000..dc28857
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Avertv_USB/lircrc-avertvusb.txt
@@ -0,0 +1,482 @@
+# Channel Up
+begin
+prog = mythtv
+button = chup
+config = Up
+end
+
+# Channel Down
+begin
+prog = mythtv
+button = chdown
+config = Down
+end
+
+# General Left
+begin
+prog = mythtv
+button =
+config = Left
+end
+
+# General Right
+begin
+prog = mythtv
+button =
+config = Right
+end
+
+ # LiveTV browse up channel
+begin
+prog = mythtv
+button = chup
+config = Up
+end
+
+# LiveTV browse down channel
+begin
+prog = mythtv
+button = chdown
+config = Down
+end
+
+# Volume Up
+begin
+prog = mythtv
+button = volup
+config = F11
+end
+
+# Volume Down
+begin
+prog = mythtv
+button = voldown
+config = F10
+end
+
+ # OK/Select
+begin
+prog = mythtv
+button =
+config = Space
+end
+
+# Play
+begin
+prog = mythtv
+button = play
+config = Return
+end
+
+# Stop
+begin
+prog = mythtv
+button = stop
+config = Esc
+end
+
+# Escape/Exit/Back
+begin
+prog = mythtv
+button =
+config = Esc
+end
+
+# Power Off/Exit
+begin
+prog = irexec
+button = power
+config = /usr/bin/mythpowerbutton.sh
+end
+
+# Pause
+begin
+prog = mythtv
+button = pause
+config = P
+end
+
+# Mute
+begin
+prog = mythtv
+button = mute
+config = |
+end
+
+# Fast forward (10 sec default)
+begin
+prog = mythtv
+button = forward
+config = Right
+end
+
+# Rewind (10 sec default)
+begin
+prog = mythtv
+button = rewind
+config = Left
+end
+
+# Skip forward (10 min default)
+begin
+prog = mythtv
+button = next
+config = PgDown
+end
+
+# Skip backward (10 min default)
+begin
+prog = mythtv
+button = last
+config = PgUp
+end
+
+# Record
+begin
+prog = mythtv
+button = record
+config = R
+end
+
+# Delete
+begin
+prog = mythtv
+button =
+config = D
+end
+
+# OSD browse
+begin
+prog = mythtv
+button = epg
+config = O
+end
+
+# Display EPG while in live TV,
+# View selected show while in EPG
+begin
+prog = mythtv
+button = menu
+config = M
+end
+
+# Bring up OSD info
+begin
+prog = mythtv
+button =
+config = I
+end
+
+# Change display aspect ratio
+begin
+prog = mythtv
+button = display
+config = W
+end
+
+# Seek to previous commercial cut point
+begin
+prog = mythtv
+button =
+config = Q
+end
+
+# Seek to next commercial cut point
+begin
+prog = mythtv
+button =
+config = Z
+end
+
+# Numbers 0-9
+
+begin
+prog = mythtv
+button = 0
+config = 0
+end
+
+begin
+prog = mythtv
+button = 1
+config = 1
+end
+
+begin
+prog = mythtv
+button = 2
+config = 2
+end
+
+begin
+prog = mythtv
+button = 3
+config = 3
+end
+
+begin
+prog = mythtv
+button = 4
+config = 4
+end
+
+begin
+prog = mythtv
+button = 5
+config = 5
+end
+
+begin
+prog = mythtv
+button = 6
+config = 6
+end
+
+begin
+prog = mythtv
+button = 7
+config = 7
+end
+
+begin
+prog = mythtv
+button = 8
+config = 8
+end
+
+begin
+prog = mythtv
+button = 9
+config = 9
+end
+
+# Previous channel
+begin
+prog = mythtv
+button = chprev
+config = H
+end
+
+# Closed Captioning
+begin
+prog = mythtv
+button = teletext
+config = T
+end
+
+# Picture in Picture
+begin
+prog = mythtv
+button = snapshot
+config = V
+end
+
+# Change channels on both cards
+begin
+prog = mythtv
+button =
+config = N
+end
+
+# Clear cutpoints in cutlist
+begin
+prog = mythtv
+button =
+config = Q
+end
+
+
+
+
+### MPlayer lirc setup
+
+# Show OSD
+begin
+prog = mplayer
+button = menu
+config = osd
+end
+
+# Pause playback
+begin
+prog = mplayer
+button = pause
+config = pause
+end
+
+# Skip ahead a minute if playing
+# If paused, resume playing
+begin
+prog = mplayer
+button =
+config = seek +1
+end
+
+# Mute
+begin
+prog = mplayer
+button = mute
+config = mute
+end
+
+# Seek back 10 seconds
+begin
+prog = mplayer
+button = forward
+config = seek -10
+end
+
+# Seek forward 30 seconds
+begin
+prog = mplayer
+button = rewind
+config = seek +30
+end
+
+# Quit
+begin
+prog = mplayer
+button = stop
+config = quit
+end
+
+# Seek forward 10 minutes
+begin
+prog = mplayer
+button = next
+config = seek +600
+end
+
+# Seek backward 10 minutes
+begin
+prog = mplayer
+button = last
+config = seek -600
+end
+
+# Toggle full-screen
+begin
+prog = mplayer
+button = display
+config = vo_fullscreen
+end
+
+
+
+### Xine lirc setup
+
+begin
+prog = xine
+button = play
+config = Play
+end
+
+begin
+prog = xine
+button = stop
+config = Stop
+end
+
+begin
+prog = xine
+button = stop
+config = Quit
+end
+
+begin
+prog = xine
+button = pause
+config = Pause
+end
+
+begin
+prog = xine
+button = chup
+config = EventUp
+end
+
+begin
+prog = xine
+button = chdown
+config = EventDown
+end
+
+begin
+prog = xine
+button =
+config = EventLeft
+end
+
+begin
+prog = xine
+button =
+config = EventRight
+end
+
+begin
+prog = xine
+button =
+config = EventSelect
+end
+
+begin
+prog = xine
+button = menu
+config = Menu
+end
+
+begin
+prog = xine
+button = forward
+#config = SpeedFaster
+config = SeekRelative+60
+end
+
+begin
+prog = xine
+button = rewind
+#config = SpeedSlower
+config = SeekRelative-60
+end
+
+begin
+prog = xine
+button = volup
+config = Volume+
+end
+
+begin
+prog = xine
+button = voldown
+config = Volume-
+end
+
+begin
+prog = xine
+button = mute
+config = Mute
+end
+
+begin
+prog = xine
+button = stop
+config = RootMenu
+end
+
+begin
+prog = xine
+button = next
+config = EventNext
+end
+
+begin
+prog = xine
+button = last
+config = EventPrior
+end
+
+begin
+prog = xine
+button = display
+config = OSDStreamInfos
+end \ No newline at end of file
diff --git a/abs/core-testing/system-templates/templates/remotes/asus-digitmatrix/preview.jpg b/abs/core-testing/system-templates/templates/remotes/Avertv_USB/preview.jpg
index a034186..a034186 100644
--- a/abs/core-testing/system-templates/templates/remotes/asus-digitmatrix/preview.jpg
+++ b/abs/core-testing/system-templates/templates/remotes/Avertv_USB/preview.jpg
Binary files differ
diff --git a/abs/core-testing/system-templates/templates/remotes/Cinergy/lircd-cinergy400600.conf b/abs/core-testing/system-templates/templates/remotes/Cinergy/lircd-cinergy400600.conf
new file mode 100755
index 0000000..8b0bd3c
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Cinergy/lircd-cinergy400600.conf
@@ -0,0 +1,67 @@
+# Please make this file available to others
+# by sending it to <lirc@bartelmus.de>
+#
+# this config file was automatically generated
+# using lirc-0.7.0 (devinput) on Sun Feb 27 18:29:35 2005
+#
+#
+# brand: Terratec_Cinergy_Remote
+# model no. of remote control:
+# devices being controlled by this remote:
+#
+
+begin remote
+
+name Terratec_Cinergy_Remote
+bits 16
+eps 30
+aeps 100
+one 0 0
+zero 0 0
+pre_data_bits 16
+pre_data 0x8001
+gap 237493
+toggle_bit 0
+
+
+ begin codes
+ power 0x0000000000000074
+ app 0x0000000000000094
+ zoom 0x0000000000000174
+ 1 0x000000000000004F
+ 2 0x0000000000000050
+ 3 0x0000000000000051
+ 4 0x000000000000004B
+ 5 0x000000000000004C
+ 6 0x000000000000004D
+ 7 0x0000000000000047
+ 8 0x0000000000000048
+ 9 0x0000000000000049
+ 0 0x0000000000000052
+ chup 0x0000000000000192
+ chdown 0x0000000000000193
+ volup 0x0000000000000073
+ voldown 0x0000000000000072
+ av 0x0000000000000182
+ -/-- 0x0000000000000045
+ audio 0x0000000000000188
+ mute 0x0000000000000071
+ left 0x0000000000000069
+ right 0x000000000000006A
+ up 0 x0000000000000067
+ down 0x000000000000006C
+ mouseleft 0x0000000000000110
+ mouseright 0x0000000000000111
+ text 0x0000000000000096
+ rew 0x00000000000000A8
+ fwd 0x000000000000009F
+ rec 0x00000000000000A7
+ play 0x00000000000000CF
+ prev 0x00000000000000A5
+ next 0x00000000000000A3
+ pause 0x0000000000000077
+ stop 0x0000000000000080
+
+end codes
+
+end remote \ No newline at end of file
diff --git a/abs/core-testing/system-templates/templates/remotes/Cinergy/lircrc-cinergy400600.txt b/abs/core-testing/system-templates/templates/remotes/Cinergy/lircrc-cinergy400600.txt
new file mode 100755
index 0000000..5ac2227
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Cinergy/lircrc-cinergy400600.txt
@@ -0,0 +1,474 @@
+# Channel Up
+begin
+prog = mythtv
+button = chup
+config = Up
+end
+
+# Channel Down
+begin
+prog = mythtv
+button = chdown
+config = Down
+end
+
+# General Left
+begin
+prog = mythtv
+button = left
+config = Left
+end
+
+# General Right
+begin
+prog = mythtv
+button = right
+config = Right
+end
+
+ # LiveTV browse up channel
+begin
+prog = mythtv
+button = up
+config = Up
+end
+
+# LiveTV browse down channel
+begin
+prog = mythtv
+button = down
+config = Down
+end
+
+# Volume Up
+begin
+prog = mythtv
+button = volup
+config = F11
+end
+
+# Volume Down
+begin
+prog = mythtv
+button = voldown
+config = F10
+end
+
+ # OK/Select
+begin
+prog = mythtv
+button =
+config = Space
+end
+
+# Play
+begin
+prog = mythtv
+button = play
+config = Return
+end
+
+# Stop
+begin
+prog = mythtv
+button = stop
+config = Esc
+end
+
+# Escape/Exit/Back
+begin
+prog = mythtv
+button =
+config = Esc
+end
+
+# Power Off/Exit
+begin
+prog = irexec
+button = power
+config = /usr/bin/mythpowerbutton.sh
+end
+
+# Pause
+begin
+prog = mythtv
+button = pause
+config = P
+end
+
+# Mute
+begin
+prog = mythtv
+button = mute
+config = |
+end
+
+# Fast forward (10 sec default)
+begin
+prog = mythtv
+button = fwd
+config = Right
+end
+
+# Rewind (10 sec default)
+begin
+prog = mythtv
+button = rew
+config = Left
+end
+
+# Skip forward (10 min default)
+begin
+prog = mythtv
+button = next
+config = PgDown
+end
+
+# Skip backward (10 min default)
+begin
+prog = mythtv
+button = prev
+config = PgUp
+end
+
+# Record
+begin
+prog = mythtv
+button = rec
+config = R
+end
+
+# Delete
+begin
+prog = mythtv
+button =
+config = D
+end
+
+# OSD browse
+begin
+prog = mythtv
+button =
+config = O
+end
+
+# Display EPG while in live TV,
+# View selected show while in EPG
+begin
+prog = mythtv
+button = app
+config = M
+end
+
+# Bring up OSD info
+begin
+prog = mythtv
+button =
+config = I
+end
+
+# Change display aspect ratio
+begin
+prog = mythtv
+button =
+config = W
+end
+
+# Seek to previous commercial cut point
+begin
+prog = mythtv
+button =
+config = Q
+end
+
+# Seek to next commercial cut point
+begin
+prog = mythtv
+button =
+config = Z
+end
+
+# Numbers 0-9
+
+begin
+prog = mythtv
+button = 0
+config = 0
+end
+
+begin
+prog = mythtv
+button = 1
+config = 1
+end
+
+begin
+prog = mythtv
+button = 2
+config = 2
+end
+
+begin
+prog = mythtv
+button = 3
+config = 3
+end
+
+begin
+prog = mythtv
+button = 4
+config = 4
+end
+
+begin
+prog = mythtv
+button = 5
+config = 5
+end
+
+begin
+prog = mythtv
+button = 6
+config = 6
+end
+
+begin
+prog = mythtv
+button = 7
+config = 7
+end
+
+begin
+prog = mythtv
+button = 8
+config = 8
+end
+
+begin
+prog = mythtv
+button = 9
+config = 9
+end
+
+# Previous channel
+begin
+prog = mythtv
+button =
+config = H
+end
+
+# Closed Captioning
+begin
+prog = mythtv
+button =
+config = T
+end
+
+# Picture in Picture
+begin
+prog = mythtv
+button =
+config = V
+end
+
+# Change channels on both cards
+begin
+prog = mythtv
+button =
+config = N
+end
+
+# Clear cutpoints in cutlist
+begin
+prog = mythtv
+button =
+config = Q
+end
+
+
+
+
+### MPlayer lirc setup
+
+# Show OSD
+begin
+prog = mplayer
+button = app
+config = osd
+end
+
+# Pause playback
+begin
+prog = mplayer
+button = pause
+config = pause
+end
+
+# Mute
+begin
+prog = mplayer
+button = mute
+config = mute
+end
+
+# Seek back 10 seconds
+begin
+prog = mplayer
+button = rew
+config = seek -10
+end
+
+# Seek forward 30 seconds
+begin
+prog = mplayer
+button = fwd
+config = seek +30
+end
+
+# Quit
+begin
+prog = mplayer
+button = stop
+config = quit
+end
+
+# Seek forward 10 minutes
+begin
+prog = mplayer
+button = next
+config = seek +600
+end
+
+# Seek backward 10 minutes
+begin
+prog = mplayer
+button = prev
+config = seek -600
+end
+
+# Toggle full-screen
+begin
+prog = mplayer
+button = zoom
+config = vo_fullscreen
+end
+
+
+
+### Xine lirc setup
+
+begin
+prog = xine
+button = play
+config = Play
+end
+
+begin
+prog = xine
+button = stop
+config = Stop
+end
+
+begin
+prog = xine
+button = stop
+config = Quit
+end
+
+begin
+prog = xine
+button = pause
+config = Pause
+end
+
+begin
+prog = xine
+button = up
+config = EventUp
+end
+
+begin
+prog = xine
+button = down
+config = EventDown
+end
+
+begin
+prog = xine
+button = left
+config = EventLeft
+end
+
+begin
+prog = xine
+button = right
+config = EventRight
+end
+
+begin
+prog = xine
+button =
+config = EventSelect
+end
+
+begin
+prog = xine
+button = app
+config = Menu
+end
+
+begin
+prog = xine
+button = next
+#config = SpeedFaster
+config = SeekRelative+60
+end
+
+begin
+prog = xine
+button = prev
+#config = SpeedSlower
+config = SeekRelative-60
+end
+
+begin
+prog = xine
+button = volup
+config = Volume+
+end
+
+begin
+prog = xine
+button = voldown
+config = Volume-
+end
+
+begin
+prog = xine
+button = mute
+config = Mute
+end
+
+begin
+prog = xine
+button = stop
+config = RootMenu
+end
+
+begin
+prog = xine
+button = next
+config = EventNext
+end
+
+begin
+prog = xine
+button = prev
+config = EventPrior
+end
+
+begin
+prog = xine
+button = av
+config = OSDStreamInfos
+end \ No newline at end of file
diff --git a/abs/core-testing/system-templates/templates/remotes/Cinergy/preview.jpg b/abs/core-testing/system-templates/templates/remotes/Cinergy/preview.jpg
new file mode 100644
index 0000000..a034186
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Cinergy/preview.jpg
Binary files differ
diff --git a/abs/core-testing/system-templates/templates/remotes/Cinergy_1400/lircd-cinergy1400.conf b/abs/core-testing/system-templates/templates/remotes/Cinergy_1400/lircd-cinergy1400.conf
new file mode 100755
index 0000000..8458cfe
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Cinergy_1400/lircd-cinergy1400.conf
@@ -0,0 +1,71 @@
+#
+# this config file was automatically generated
+# using lirc-0.7.2(serial) on Fri Oct 14 16:29:58 2005
+#
+# contributed by Sebastian Kraft
+#
+# brand: Terratec
+# model no. of remote control: Cinergy 1400-T
+# devices being controlled by this remote:
+#
+
+begin remote
+
+ name Terratec_Cinergy_1400-T
+ bits 16
+ flags SPACE_ENC|CONST_LENGTH
+ eps 30
+ aeps 100
+
+ header 9007 4495
+ one 557 1683
+ zero 557 555
+ ptrail 546
+ pre_data_bits 16
+ pre_data 0x20D7
+ gap 110968
+ toggle_bit 0
+
+
+ begin codes
+ 0 0x30CF
+ 1 0x40BF
+ 2 0xC03F
+ 3 0x20DF
+ 4 0xA05F
+ 5 0x609F
+ 6 0xE01F
+ 7 0x10EF
+ 8 0x906F
+ 9 0x50AF
+ fullscreen 0x18E7
+ osd 0x708F
+ volumeup 0x38C7
+ volumedown 0x7887
+ channelup 0xD827
+ channeldown 0xF807
+ epg 0xF00F
+ av 0xD02F
+ power 0x807F
+ teletext 0xA857
+ clock 0xE817
+ mute 0xB847
+ pause 0x02FD
+ play 0x32CD
+ record 0x1AE5
+ rewind 0x2AD5
+ stop 0x12ED
+ forward 0x3AC5
+ up 0x08F7
+ down 0x28D7
+ left 0x8877
+ right 0xC837
+ info 0x6897
+ ok 0x48B7
+ tab 0x58A7
+ audio 0x9867
+ clock 0xE817
+
+ end codes
+
+end remote \ No newline at end of file
diff --git a/abs/core-testing/system-templates/templates/remotes/Cinergy_1400/lircrc-cinergy1400.txt b/abs/core-testing/system-templates/templates/remotes/Cinergy_1400/lircrc-cinergy1400.txt
new file mode 100755
index 0000000..8dd42c5
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Cinergy_1400/lircrc-cinergy1400.txt
@@ -0,0 +1,474 @@
+# Channel Up
+begin
+prog = mythtv
+button = channelup
+config = Up
+end
+
+# Channel Down
+begin
+prog = mythtv
+button = channeldown
+config = Down
+end
+
+# General Left
+begin
+prog = mythtv
+button = left
+config = Left
+end
+
+# General Right
+begin
+prog = mythtv
+button = right
+config = Right
+end
+
+ # LiveTV browse up channel
+begin
+prog = mythtv
+button = up
+config = Up
+end
+
+# LiveTV browse down channel
+begin
+prog = mythtv
+button = down
+config = Down
+end
+
+# Volume Up
+begin
+prog = mythtv
+button = volumeup
+config = F11
+end
+
+# Volume Down
+begin
+prog = mythtv
+button = volumedown
+config = F10
+end
+
+ # OK/Select
+begin
+prog = mythtv
+button = ok
+config = Space
+end
+
+# Play
+begin
+prog = mythtv
+button = play
+config = Return
+end
+
+# Stop
+begin
+prog = mythtv
+button = stop
+config = Esc
+end
+
+# Escape/Exit/Back
+begin
+prog = mythtv
+button =
+config = Esc
+end
+
+# Power Off/Exit
+begin
+prog = irexec
+button = power
+config = /usr/bin/mythpowerbutton.sh
+end
+
+# Pause
+begin
+prog = mythtv
+button = pause
+config = P
+end
+
+# Mute
+begin
+prog = mythtv
+button = mute
+config = |
+end
+
+# Fast forward (10 sec default)
+begin
+prog = mythtv
+button = forward
+config = Right
+end
+
+# Rewind (10 sec default)
+begin
+prog = mythtv
+button = rewind
+config = Left
+end
+
+# Skip forward (10 min default)
+begin
+prog = mythtv
+button =
+config = PgDown
+end
+
+# Skip backward (10 min default)
+begin
+prog = mythtv
+button =
+config = PgUp
+end
+
+# Record
+begin
+prog = mythtv
+button = record
+config = R
+end
+
+# Delete
+begin
+prog = mythtv
+button =
+config = D
+end
+
+# OSD browse
+begin
+prog = mythtv
+button = osd
+config = O
+end
+
+# Display EPG while in live TV,
+# View selected show while in EPG
+begin
+prog = mythtv
+button = epg
+config = M
+end
+
+# Bring up OSD info
+begin
+prog = mythtv
+button = info
+config = I
+end
+
+# Change display aspect ratio
+begin
+prog = mythtv
+button = tab
+config = W
+end
+
+# Seek to previous commercial cut point
+begin
+prog = mythtv
+button =
+config = Q
+end
+
+# Seek to next commercial cut point
+begin
+prog = mythtv
+button =
+config = Z
+end
+
+# Numbers 0-9
+
+begin
+prog = mythtv
+button = 0
+config = 0
+end
+
+begin
+prog = mythtv
+button = 1
+config = 1
+end
+
+begin
+prog = mythtv
+button = 2
+config = 2
+end
+
+begin
+prog = mythtv
+button = 3
+config = 3
+end
+
+begin
+prog = mythtv
+button = 4
+config = 4
+end
+
+begin
+prog = mythtv
+button = 5
+config = 5
+end
+
+begin
+prog = mythtv
+button = 6
+config = 6
+end
+
+begin
+prog = mythtv
+button = 7
+config = 7
+end
+
+begin
+prog = mythtv
+button = 8
+config = 8
+end
+
+begin
+prog = mythtv
+button = 9
+config = 9
+end
+
+# Previous channel
+begin
+prog = mythtv
+button =
+config = H
+end
+
+# Closed Captioning
+begin
+prog = mythtv
+button = teletext
+config = T
+end
+
+# Picture in Picture
+begin
+prog = mythtv
+button =
+config = V
+end
+
+# Change channels on both cards
+begin
+prog = mythtv
+button =
+config = N
+end
+
+# Clear cutpoints in cutlist
+begin
+prog = mythtv
+button =
+config = Q
+end
+
+
+
+
+### MPlayer lirc setup
+
+# Show OSD
+begin
+prog = mplayer
+button = osd
+config = osd
+end
+
+# Pause playback
+begin
+prog = mplayer
+button = pause
+config = pause
+end
+
+# Mute
+begin
+prog = mplayer
+button = mute
+config = mute
+end
+
+# Seek back 10 seconds
+begin
+prog = mplayer
+button = rewind
+config = seek -10
+end
+
+# Seek forward 30 seconds
+begin
+prog = mplayer
+button = forward
+config = seek +30
+end
+
+# Quit
+begin
+prog = mplayer
+button = stop
+config = quit
+end
+
+# Seek forward 10 minutes
+begin
+prog = mplayer
+button =
+config = seek +600
+end
+
+# Seek backward 10 minutes
+begin
+prog = mplayer
+button =
+config = seek -600
+end
+
+# Toggle full-screen
+begin
+prog = mplayer
+button = fullscreen
+config = vo_fullscreen
+end
+
+
+
+### Xine lirc setup
+
+begin
+prog = xine
+button = play
+config = Play
+end
+
+begin
+prog = xine
+button = stop
+config = Stop
+end
+
+begin
+prog = xine
+button = stop
+config = Quit
+end
+
+begin
+prog = xine
+button = pause
+config = Pause
+end
+
+begin
+prog = xine
+button = up
+config = EventUp
+end
+
+begin
+prog = xine
+button = down
+config = EventDown
+end
+
+begin
+prog = xine
+button = left
+config = EventLeft
+end
+
+begin
+prog = xine
+button = right
+config = EventRight
+end
+
+begin
+prog = xine
+button = ok
+config = EventSelect
+end
+
+begin
+prog = xine
+button = epg
+config = Menu
+end
+
+begin
+prog = xine
+button = forward
+#config = SpeedFaster
+config = SeekRelative+60
+end
+
+begin
+prog = xine
+button = rewind
+#config = SpeedSlower
+config = SeekRelative-60
+end
+
+begin
+prog = xine
+button = volumeup
+config = Volume+
+end
+
+begin
+prog = xine
+button = volumedown
+config = Volume-
+end
+
+begin
+prog = xine
+button = mute
+config = Mute
+end
+
+begin
+prog = xine
+button = stop
+config = RootMenu
+end
+
+begin
+prog = xine
+button = channelup
+config = EventNext
+end
+
+begin
+prog = xine
+button = channeldown
+config = EventPrior
+end
+
+begin
+prog = xine
+button = info
+config = OSDStreamInfos
+end \ No newline at end of file
diff --git a/abs/core-testing/system-templates/templates/remotes/Cinergy_1400/preview.jpg b/abs/core-testing/system-templates/templates/remotes/Cinergy_1400/preview.jpg
new file mode 100644
index 0000000..b777ac9
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Cinergy_1400/preview.jpg
Binary files differ
diff --git a/abs/core-testing/system-templates/templates/remotes/Cinergy_T2/lircd-cinergyT2.conf b/abs/core-testing/system-templates/templates/remotes/Cinergy_T2/lircd-cinergyT2.conf
new file mode 100755
index 0000000..168743b
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Cinergy_T2/lircd-cinergyT2.conf
@@ -0,0 +1,72 @@
+#
+# this config file was generated
+# using lirc-0.7.1pre2(serial) kantonix VDR
+#
+# contributed by Stefan Bernshausen
+#
+# brand: Terratec
+# model no. of remote control: Cinergy T2
+# devices being controlled by this remote:
+#
+
+begin remote
+
+ name Terratec_Cinergy_T2
+ bits 16
+ flags SPACE_ENC|CONST_LENGTH
+ eps 30
+ aeps 100
+
+ header 9007 4495
+ one 557 1683
+ zero 557 555
+ ptrail 546
+ pre_data_bits 16
+ pre_data 0x20D7
+ gap 110968
+ toggle_bit 0
+
+
+ begin codes
+ 0 0x30CF
+ 1 0x40BF
+ 2 0xC03F
+ 3 0x20DF
+ 4 0xA05F
+ 5 0x609F
+ 6 0xE01F
+ 7 0x10EF
+ 8 0x906F
+ 9 0x50AF
+ Green 0x18E7
+ Osd 0x708F
+ Volume+ 0x38C7
+ Volume- 0x7887
+ Ch+ 0xD827
+ Ch- 0xF807
+ Epg 0xF00F
+ Av 0xD02F
+ Power 0x807F
+ Txt 0xA857
+ Red 0xE817
+ Mute 0xB847
+ Pause 0x02FD
+ Play 0x32CD
+ Record 0x1AE5
+ Fback 0x2AD5
+ Stop 0x12ED
+ Ffor 0x3AC5
+ Up 0x08F7
+ Down 0x28D7
+ Left 0x8877
+ Right 0xC837
+ Info 0x6897
+ Ok 0x48B7
+ Blue 0x58A7
+ Yellow 0x9867
+ Red 0xE817
+ Back 0xB04F
+
+ end codes
+
+end remote \ No newline at end of file
diff --git a/abs/core-testing/system-templates/templates/remotes/Cinergy_T2/lircrc-cinergyT2.txt b/abs/core-testing/system-templates/templates/remotes/Cinergy_T2/lircrc-cinergyT2.txt
new file mode 100755
index 0000000..c4042fe
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Cinergy_T2/lircrc-cinergyT2.txt
@@ -0,0 +1,474 @@
+# Channel Up
+begin
+prog = mythtv
+button = Ch+
+config = Up
+end
+
+# Channel Down
+begin
+prog = mythtv
+button = Ch-
+config = Down
+end
+
+# General Left
+begin
+prog = mythtv
+button = Left
+config = Left
+end
+
+# General Right
+begin
+prog = mythtv
+button = Right
+config = Right
+end
+
+ # LiveTV browse up channel
+begin
+prog = mythtv
+button = Up
+config = Up
+end
+
+# LiveTV browse down channel
+begin
+prog = mythtv
+button = Down
+config = Down
+end
+
+# Volume Up
+begin
+prog = mythtv
+button = Volume+
+config = F11
+end
+
+# Volume Down
+begin
+prog = mythtv
+button = Volume-
+config = F10
+end
+
+ # OK/Select
+begin
+prog = mythtv
+button = Ok
+config = Space
+end
+
+# Play
+begin
+prog = mythtv
+button = Play
+config = Return
+end
+
+# Stop
+begin
+prog = mythtv
+button = Stop
+config = Esc
+end
+
+# Escape/Exit/Back
+begin
+prog = mythtv
+button =
+config = Esc
+end
+
+# Power Off/Exit
+begin
+prog = irexec
+button = Power
+config = /usr/bin/mythpowerbutton.sh
+end
+
+# Pause
+begin
+prog = mythtv
+button = Pause
+config = P
+end
+
+# Mute
+begin
+prog = mythtv
+button = Mute
+config = |
+end
+
+# Fast forward (10 sec default)
+begin
+prog = mythtv
+button = Ffor
+config = Right
+end
+
+# Rewind (10 sec default)
+begin
+prog = mythtv
+button = Fback
+config = Left
+end
+
+# Skip forward (10 min default)
+begin
+prog = mythtv
+button =
+config = PgDown
+end
+
+# Skip backward (10 min default)
+begin
+prog = mythtv
+button =
+config = PgUp
+end
+
+# Record
+begin
+prog = mythtv
+button = Record
+config = R
+end
+
+# Delete
+begin
+prog = mythtv
+button = Red
+config = D
+end
+
+# OSD browse
+begin
+prog = mythtv
+button = Osd
+config = O
+end
+
+# Display EPG while in live TV,
+# View selected show while in EPG
+begin
+prog = mythtv
+button = Epg
+config = M
+end
+
+# Bring up OSD info
+begin
+prog = mythtv
+button = Info
+config = I
+end
+
+# Change display aspect ratio
+begin
+prog = mythtv
+button = Green
+config = W
+end
+
+# Seek to previous commercial cut point
+begin
+prog = mythtv
+button =
+config = Q
+end
+
+# Seek to next commercial cut point
+begin
+prog = mythtv
+button =
+config = Z
+end
+
+# Numbers 0-9
+
+begin
+prog = mythtv
+button = 0
+config = 0
+end
+
+begin
+prog = mythtv
+button = 1
+config = 1
+end
+
+begin
+prog = mythtv
+button = 2
+config = 2
+end
+
+begin
+prog = mythtv
+button = 3
+config = 3
+end
+
+begin
+prog = mythtv
+button = 4
+config = 4
+end
+
+begin
+prog = mythtv
+button = 5
+config = 5
+end
+
+begin
+prog = mythtv
+button = 6
+config = 6
+end
+
+begin
+prog = mythtv
+button = 7
+config = 7
+end
+
+begin
+prog = mythtv
+button = 8
+config = 8
+end
+
+begin
+prog = mythtv
+button = 9
+config = 9
+end
+
+# Previous channel
+begin
+prog = mythtv
+button = Blue
+config = H
+end
+
+# Closed Captioning
+begin
+prog = mythtv
+button =
+config = T
+end
+
+# Picture in Picture
+begin
+prog = mythtv
+button =
+config = V
+end
+
+# Change channels on both cards
+begin
+prog = mythtv
+button =
+config = N
+end
+
+# Clear cutpoints in cutlist
+begin
+prog = mythtv
+button =
+config = Q
+end
+
+
+
+
+### MPlayer lirc setup
+
+# Show OSD
+begin
+prog = mplayer
+button = Osd
+config = osd
+end
+
+# Pause playback
+begin
+prog = mplayer
+button = Pause
+config = pause
+end
+
+# Mute
+begin
+prog = mplayer
+button = Mute
+config = mute
+end
+
+# Seek back 10 seconds
+begin
+prog = mplayer
+button = Fback
+config = seek -10
+end
+
+# Seek forward 30 seconds
+begin
+prog = mplayer
+button = Ffor
+config = seek +30
+end
+
+# Quit
+begin
+prog = mplayer
+button = Stop
+config = quit
+end
+
+# Seek forward 10 minutes
+begin
+prog = mplayer
+button = Ch+
+config = seek +600
+end
+
+# Seek backward 10 minutes
+begin
+prog = mplayer
+button = Ch-
+config = seek -600
+end
+
+# Toggle full-screen
+begin
+prog = mplayer
+button = Blue
+config = vo_fullscreen
+end
+
+
+
+### Xine lirc setup
+
+begin
+prog = xine
+button = Play
+config = Play
+end
+
+begin
+prog = xine
+button = Stop
+config = Stop
+end
+
+begin
+prog = xine
+button = Stop
+config = Quit
+end
+
+begin
+prog = xine
+button = Pause
+config = Pause
+end
+
+begin
+prog = xine
+button = Up
+config = EventUp
+end
+
+begin
+prog = xine
+button = Down
+config = EventDown
+end
+
+begin
+prog = xine
+button = Left
+config = EventLeft
+end
+
+begin
+prog = xine
+button = Right
+config = EventRight
+end
+
+begin
+prog = xine
+button = Ok
+config = EventSelect
+end
+
+begin
+prog = xine
+button = Epg
+config = Menu
+end
+
+begin
+prog = xine
+button = Ffor
+#config = SpeedFaster
+config = SeekRelative+60
+end
+
+begin
+prog = xine
+button = Fback
+#config = SpeedSlower
+config = SeekRelative-60
+end
+
+begin
+prog = xine
+button = Volume+
+config = Volume+
+end
+
+begin
+prog = xine
+button = Volume-
+config = Volume-
+end
+
+begin
+prog = xine
+button = Mute
+config = Mute
+end
+
+begin
+prog = xine
+button = Stop
+config = RootMenu
+end
+
+begin
+prog = xine
+button = Ch+
+config = EventNext
+end
+
+begin
+prog = xine
+button = Ch-
+config = EventPrior
+end
+
+begin
+prog = xine
+button = Info
+config = OSDStreamInfos
+end \ No newline at end of file
diff --git a/abs/core-testing/system-templates/templates/remotes/Cinergy_T2/preview.jpg b/abs/core-testing/system-templates/templates/remotes/Cinergy_T2/preview.jpg
new file mode 100644
index 0000000..b777ac9
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Cinergy_T2/preview.jpg
Binary files differ
diff --git a/abs/core-testing/system-templates/templates/remotes/Compro/lircd-compro.conf b/abs/core-testing/system-templates/templates/remotes/Compro/lircd-compro.conf
new file mode 100755
index 0000000..41f2c7b
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Compro/lircd-compro.conf
@@ -0,0 +1,364 @@
+begin remote
+ name linux-input-layer
+ bits 32
+ begin codes
+ ESC 0x10001
+ 1 0x10002
+ 2 0x10003
+ 3 0x10004
+ 4 0x10005
+ 5 0x10006
+ 6 0x10007
+ 7 0x10008
+ 8 0x10009
+ 9 0x1000a
+ 0 0x1000b
+ MINUS 0x1000c
+ EQUAL 0x1000d
+ BACKSPACE 0x1000e
+ TAB 0x1000f
+ Q 0x10010
+ W 0x10011
+ E 0x10012
+ R 0x10013
+ T 0x10014
+ Y 0x10015
+ U 0x10016
+ I 0x10017
+ O 0x10018
+ P 0x10019
+ LEFTBRACE 0x1001a
+ RIGHTBRACE 0x1001b
+ ENTER 0x1001c
+ LEFTCTRL 0x1001d
+ A 0x1001e
+ S 0x1001f
+ D 0x10020
+ F 0x10021
+ G 0x10022
+ H 0x10023
+ J 0x10024
+ K 0x10025
+ L 0x10026
+ SEMICOLON 0x10027
+ APOSTROPHE 0x10028
+ GRAVE 0x10029
+ LEFTSHIFT 0x1002a
+ BACKSLASH 0x1002b
+ Z 0x1002c
+ X 0x1002d
+ C 0x1002e
+ V 0x1002f
+ B 0x10030
+ N 0x10031
+ M 0x10032
+ COMMA 0x10033
+ DOT 0x10034
+ SLASH 0x10035
+ RIGHTSHIFT 0x10036
+ KPASTERISK 0x10037
+ LEFTALT 0x10038
+ SPACE 0x10039
+ CAPSLOCK 0x1003a
+ F1 0x1003b
+ F2 0x1003c
+ F3 0x1003d
+ F4 0x1003e
+ F5 0x1003f
+ F6 0x10040
+ F7 0x10041
+ F8 0x10042
+ F9 0x10043
+ F10 0x10044
+ NUMLOCK 0x10045
+ SCROLLLOCK 0x10046
+ KP7 0x10047
+ KP8 0x10048
+ KP9 0x10049
+ KPMINUS 0x1004a
+ KP4 0x1004b
+ KP5 0x1004c
+ KP6 0x1004d
+ KPPLUS 0x1004e
+ KP1 0x1004f
+ KP2 0x10050
+ KP3 0x10051
+ KP0 0x10052
+ KPDOT 0x10053
+ 103RD 0x10054
+ F13 0x10055
+ 102ND 0x10056
+ F11 0x10057
+ F12 0x10058
+ F14 0x10059
+ F15 0x1005a
+ F16 0x1005b
+ F17 0x1005c
+ F18 0x1005d
+ F19 0x1005e
+ F20 0x1005f
+ KPENTER 0x10060
+ RIGHTCTRL 0x10061
+ KPSLASH 0x10062
+ SYSRQ 0x10063
+ RIGHTALT 0x10064
+ LINEFEED 0x10065
+ HOME 0x10066
+ UP 0x10067
+ PAGEUP 0x10068
+ LEFT 0x10069
+ RIGHT 0x1006a
+ END 0x1006b
+ DOWN 0x1006c
+ PAGEDOWN 0x1006d
+ INSERT 0x1006e
+ DELETE 0x1006f
+ MACRO 0x10070
+ MUTE 0x10071
+ VOLUMEDOWN 0x10072
+ VOLUMEUP 0x10073
+ POWER 0x10074
+ KPEQUAL 0x10075
+ KPPLUSMINUS 0x10076
+ PAUSE 0x10077
+ F21 0x10078
+ F22 0x10079
+ F23 0x1007a
+ F24 0x1007b
+ KPCOMMA 0x1007c
+ LEFTMETA 0x1007d
+ RIGHTMETA 0x1007e
+ COMPOSE 0x1007f
+ STOP 0x10080
+ AGAIN 0x10081
+ PROPS 0x10082
+ UNDO 0x10083
+ FRONT 0x10084
+ COPY 0x10085
+ OPEN 0x10086
+ PASTE 0x10087
+ FIND 0x10088
+ CUT 0x10089
+ HELP 0x1008a
+ MENU 0x1008b
+ CALC 0x1008c
+ SETUP 0x1008d
+ SLEEP 0x1008e
+ WAKEUP 0x1008f
+ FILE 0x10090
+ SENDFILE 0x10091
+ DELETEFILE 0x10092
+ XFER 0x10093
+ PROG1 0x10094
+ PROG2 0x10095
+ WWW 0x10096
+ MSDOS 0x10097
+ COFFEE 0x10098
+ DIRECTION 0x10099
+ CYCLEWINDOWS 0x1009a
+ MAIL 0x1009b
+ BOOKMARKS 0x1009c
+ COMPUTER 0x1009d
+ BACK 0x1009e
+ FORWARD 0x1009f
+ CLOSECD 0x100a0
+ EJECTCD 0x100a1
+ EJECTCLOSECD 0x100a2
+ NEXTSONG 0x100a3
+ PLAYPAUSE 0x100a4
+ PREVIOUSSONG 0x100a5
+ STOPCD 0x100a6
+ RECORD 0x100a7
+ REWIND 0x100a8
+ PHONE 0x100a9
+ ISO 0x100aa
+ CONFIG 0x100ab
+ HOMEPAGE 0x100ac
+ REFRESH 0x100ad
+ EXIT 0x100ae
+ MOVE 0x100af
+ EDIT 0x100b0
+ SCROLLUP 0x100b1
+ SCROLLDOWN 0x100b2
+ KPLEFTPAREN 0x100b3
+ KPRIGHTPAREN 0x100b4
+ INTL1 0x100b5
+ INTL2 0x100b6
+ INTL3 0x100b7
+ INTL4 0x100b8
+ INTL5 0x100b9
+ INTL6 0x100ba
+ INTL7 0x100bb
+ INTL8 0x100bc
+ INTL9 0x100bd
+ LANG1 0x100be
+ LANG2 0x100bf
+ LANG3 0x100c0
+ LANG4 0x100c1
+ LANG5 0x100c2
+ LANG6 0x100c3
+ LANG7 0x100c4
+ LANG8 0x100c5
+ LANG9 0x100c6
+ PLAYCD 0x100c8
+ PAUSECD 0x100c9
+ PROG3 0x100ca
+ PROG4 0x100cb
+ SUSPEND 0x100cd
+ CLOSE 0x100ce
+ PLAY 0x100cf
+ FASTFORWARD 0x100d0
+ BASSBOOST 0x100d1
+ PRINT 0x100d2
+ HP 0x100d3
+ CAMERA 0x100d4
+ SOUND 0x100d5
+ QUESTION 0x100d6
+ EMAIL 0x100d7
+ CHAT 0x100d8
+ SEARCH 0x100d9
+ CONNECT 0x100da
+ FINANCE 0x100db
+ SPORT 0x100dc
+ SHOP 0x100dd
+ ALTERASE 0x100de
+ CANCEL 0x100df
+ BRIGHTNESSDOWN 0x100e0
+ BRIGHTNESSUP 0x100e1
+ MEDIA 0x100e2
+ UNKNOWN 0x100f0
+ BTN_MISC 0x10100
+ BTN_0 0x10100
+ BTN_1 0x10101
+ BTN_2 0x10102
+ BTN_3 0x10103
+ BTN_4 0x10104
+ BTN_5 0x10105
+ BTN_6 0x10106
+ BTN_7 0x10107
+ BTN_8 0x10108
+ BTN_9 0x10109
+ BTN_MOUSE 0x10110
+ BTN_LEFT 0x10110
+ BTN_RIGHT 0x10111
+ BTN_MIDDLE 0x10112
+ BTN_SIDE 0x10113
+ BTN_EXTRA 0x10114
+ BTN_FORWARD 0x10115
+ BTN_BACK 0x10116
+ BTN_TASK 0x10117
+ BTN_JOYSTICK 0x10120
+ BTN_TRIGGER 0x10120
+ BTN_THUMB 0x10121
+ BTN_THUMB2 0x10122
+ BTN_TOP 0x10123
+ BTN_TOP2 0x10124
+ BTN_PINKIE 0x10125
+ BTN_BASE 0x10126
+ BTN_BASE2 0x10127
+ BTN_BASE3 0x10128
+ BTN_BASE4 0x10129
+ BTN_BASE5 0x1012a
+ BTN_BASE6 0x1012b
+ BTN_DEAD 0x1012f
+ BTN_GAMEPAD 0x10130
+ BTN_A 0x10130
+ BTN_B 0x10131
+ BTN_C 0x10132
+ BTN_X 0x10133
+ BTN_Y 0x10134
+ BTN_Z 0x10135
+ BTN_TL 0x10136
+ BTN_TR 0x10137
+ BTN_TL2 0x10138
+ BTN_TR2 0x10139
+ BTN_SELECT 0x1013a
+ BTN_START 0x1013b
+ BTN_MODE 0x1013c
+ BTN_THUMBL 0x1013d
+ BTN_THUMBR 0x1013e
+ BTN_DIGI 0x10140
+ BTN_TOOL_PEN 0x10140
+ BTN_TOOL_RUBBER 0x10141
+ BTN_TOOL_BRUSH 0x10142
+ BTN_TOOL_PENCIL 0x10143
+ BTN_TOOL_AIRBRUSH 0x10144
+ BTN_TOOL_FINGER 0x10145
+ BTN_TOOL_MOUSE 0x10146
+ BTN_TOOL_LENS 0x10147
+ BTN_TOUCH 0x1014a
+ BTN_STYLUS 0x1014b
+ BTN_STYLUS2 0x1014c
+ BTN_WHEEL 0x10150
+ BTN_GEAR_DOWN 0x10150
+ BTN_GEAR_UP 0x10151
+ OK 0x10160
+ SELECT 0x10161
+ GOTO 0x10162
+ CLEAR 0x10163
+ POWER2 0x10164
+ OPTION 0x10165
+ INFO 0x10166
+ TIME 0x10167
+ VENDOR 0x10168
+ ARCHIVE 0x10169
+ PROGRAM 0x1016a
+ CHANNEL 0x1016b
+ FAVORITES 0x1016c
+ EPG 0x1016d
+ PVR 0x1016e
+ MHP 0x1016f
+ LANGUAGE 0x10170
+ TITLE 0x10171
+ SUBTITLE 0x10172
+ ANGLE 0x10173
+ ZOOM 0x10174
+ MODE 0x10175
+ KEYBOARD 0x10176
+ SCREEN 0x10177
+ PC 0x10178
+ TV 0x10179
+ TV2 0x1017a
+ VCR 0x1017b
+ VCR2 0x1017c
+ SAT 0x1017d
+ SAT2 0x1017e
+ CD 0x1017f
+ TAPE 0x10180
+ RADIO 0x10181
+ TUNER 0x10182
+ PLAYER 0x10183
+ TEXT 0x10184
+ DVD 0x10185
+ AUX 0x10186
+ MP3 0x10187
+ AUDIO 0x10188
+ VIDEO 0x10189
+ DIRECTORY 0x1018a
+ LIST 0x1018b
+ MEMO 0x1018c
+ CALENDAR 0x1018d
+ RED 0x1018e
+ GREEN 0x1018f
+ YELLOW 0x10190
+ BLUE 0x10191
+ CHANNELUP 0x10192
+ CHANNELDOWN 0x10193
+ FIRST 0x10194
+ LAST 0x10195
+ AB 0x10196
+ NEXT 0x10197
+ RESTART 0x10198
+ SLOW 0x10199
+ SHUFFLE 0x1019a
+ BREAK 0x1019b
+ PREVIOUS 0x1019c
+ DIGITS 0x1019d
+ TEEN 0x1019e
+ TWEN 0x1019f
+ DEL_EOL 0x101c0
+ DEL_EOS 0x101c1
+ INS_LINE 0x101c2
+ DEL_LINE 0x101c3
+ end codes
+end remote
diff --git a/abs/core-testing/system-templates/templates/remotes/Compro/lircrc-compro.txt b/abs/core-testing/system-templates/templates/remotes/Compro/lircrc-compro.txt
new file mode 100755
index 0000000..3a7fae8
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Compro/lircrc-compro.txt
@@ -0,0 +1,487 @@
+begin
+ prog = mythtv
+ button = UP
+ config = Up
+end
+
+begin
+ prog = mythtv
+ button = DOWN
+ config = Down
+end
+
+begin
+ prog = mythtv
+ button = LEFT
+ config = Left
+end
+
+begin
+ prog = mythtv
+ button = RIGHT
+ config = Right
+end
+
+begin
+ prog = mythtv
+ button = DVD
+ config = Esc
+end
+
+begin
+ prog = mythtv
+ button = Go
+# Swap the PiP windows
+ config = N
+end
+
+begin
+ prog = mythtv
+ button = 1
+ config = 1
+end
+
+begin
+ prog = mythtv
+ button = 2
+ config = 2
+end
+
+begin
+ prog = mythtv
+ button = 3
+ config = 3
+end
+
+begin
+ prog = mythtv
+ button = 4
+ config = 4
+end
+
+begin
+ prog = mythtv
+ button = 5
+ config = 5
+end
+
+begin
+ prog = mythtv
+ button = 6
+ config = 6
+end
+
+begin
+ prog = mythtv
+ button = 7
+ config = 7
+end
+
+begin
+ prog = mythtv
+ button = 8
+ config = 8
+end
+
+begin
+ prog = mythtv
+ button = 9
+ config = 9
+end
+
+begin
+ prog = mythtv
+ button = 0
+ config = 0
+end
+
+begin
+ prog = mythtv
+ button = TV
+ config = Esc
+end
+
+begin
+ prog = mythtv
+ button = VIDEO
+ config = M
+end
+
+# Below are keys used with the Hauppauge Grey remote
+
+begin
+ prog = mythtv
+# This is the Red key
+# We'll use it for "Delete"
+ button = Red
+ config = D
+end
+
+begin
+ prog = mythtv
+# This is the Green key
+# We'll use it for "Information"
+ button = Green
+ config = I
+end
+
+# Note the "repeat =" strings in the volume and channel.
+# This means that if you hold down the key, every nth instance will be
+# passed. This depends on your system, so you may want to increase or
+# decrease this and see what happens. repeat = 1 is probably too
+# fast.
+
+begin
+ prog = mythtv
+# This is the Yellow key
+# Use it as a volume key
+ button = VOLUMEDOWN
+ repeat = 3
+ config = F10
+end
+
+begin
+ prog = mythtv
+# This is the Blue key
+# Use it as a volume key
+ button = VOLUMEUP
+ repeat = 3
+ config = F11
+end
+
+begin
+ prog = mythtv
+ button = CHANNELUP
+# This is the "up" on the central diamond
+ repeat = 3
+ config = Up
+end
+
+begin
+ prog = mythtv
+ button = CHANNELDOWN
+# This is the "down" on the central diamond
+ repeat = 3
+ config = Down
+end
+
+begin
+ prog = mythtv
+ button = VOLUMEUP
+# This is the "left" on the central diamond
+ repeat = 3
+ config = Right
+end
+
+begin
+ prog = mythtv
+ button = VOLUMEDOWN
+# This is the "right" on the central diamond
+ repeat = 3
+ config = Left
+end
+
+begin
+ prog = mythtv
+# Middle button on the diamond
+ button = OK
+ config = Return
+end
+
+begin
+ prog = mythtv
+ button = MUTE
+ config = |
+end
+
+begin
+ prog = mythtv
+# Change focus for PiP (to change channel in the other window)
+ button = Blank
+ config = B
+end
+
+begin
+ prog = mythtv
+# Toggle PiP on/off
+ button = Full
+ config = V
+end
+
+begin
+ prog = mythtv
+ button = REWIND
+ config = <
+end
+
+begin
+ prog = mythtv
+ button = PLAY
+ config = P
+end
+
+begin
+ prog = mythtv
+ button = FORWARD
+ config = >
+end
+
+begin
+ prog = mythtv
+ button = RECORD
+ config = R
+end
+
+begin
+ prog = mythtv
+# Teletext
+ button = STOP
+ config = T
+end
+
+begin
+ prog = mythtv
+ button = PLAYPAUSE
+ config = P
+end
+
+begin
+ prog = mythtv
+ button = Replay
+# Use for backwards commercial skip
+ config = Q
+end
+
+begin
+ prog = mythtv
+ button = Skip
+# Use for forward commercial skip
+ config = Z
+end
+
+#MPlayer
+begin
+ prog = mplayer
+ button = VIDEO
+ config = quit
+end
+
+begin
+ prog = mplayer
+ button = SETUP
+ config = osd
+end
+
+begin
+ prog = mplayer
+ button = REWIND
+ config = seek -10
+ repeat = 1
+end
+
+begin
+ prog = mplayer
+ button = FOWARD
+ config = seek +10
+ repeat = 1
+end
+
+begin
+ prog = mplayer
+ button = PREVIOUS
+ config = seek -60
+ repeat = 1
+end
+
+begin
+ prog = mplayer
+ button = NEXT
+ config = seek +60
+ repeat = 1
+end
+
+begin
+ prog = mplayer
+ button = PLAYPAUSE
+ config = pause
+end
+
+begin
+ prog = mplayer
+ button = PLAYPAUSE
+ config = pause
+end
+
+begin
+ prog = mplayer
+ button = VIDEO
+ config = quit
+end
+
+begin
+ prog = mplayer
+ button = VOLUMEUP
+ config = volume +1
+ repeat = 1
+end
+
+begin
+ prog = mplayer
+ button = VOLUMEDOWN
+ config = volume -1
+ repeat = 1
+end
+
+begin
+ prog = mplayer
+ button = MUTE
+ config = mute
+end
+##XINE
+
+ begin
+ prog = xine
+ button = PLAY
+ repeat = 3
+ config = Play
+ end
+
+ begin
+ prog = xine
+ button = STOP
+ repeat = 3
+ config = Stop
+ end
+
+ begin
+ prog = xine
+ button = BACK/EXIT
+ config = Quit
+ end
+
+ begin
+ prog = xine
+ button = PAUSE
+ repeat = 3
+ config = Pause
+ end
+
+ begin
+ prog = xine
+ button = CH+
+ repeat = 4
+ config = EventUp
+ end
+
+ begin
+ prog = xine
+ button = CH-
+ repeat = 4
+ config = EventDown
+ end
+
+ begin
+ prog = xine
+ button = VOL-
+ repeat = 4
+ config = Volume-
+ end
+
+ begin
+ prog = xine
+ button = VOL+
+ repeat = 4
+ config = Volume+
+ end
+
+ begin
+ prog = xine
+ button = OK
+ repeat = 0
+ config = EventSelect
+ end
+
+ begin
+ prog = xine
+ button = MENU
+ repeat = 0
+ config = Menu
+ end
+
+ #vol down
+ begin
+ prog = xine
+ button = YELLOW
+ repeat = 1
+ config = EventLeft
+ end
+
+ #vol up
+ begin
+ prog = xine
+ button = Red
+ repeat = 1
+ config = EventRight
+ end
+
+ begin
+ prog = xine
+ button = FFW
+ repeat = 2
+ config = SeekRelative+30
+ end
+
+ begin
+ prog = xine
+ button = REW
+ repeat = 2
+ config = SeekRelative-30
+ end
+
+ #ch up
+ begin
+ prog = xine
+ button = Green
+ repeat = 1
+ config = SeekRelative+60
+ end
+
+ #ch down
+ begin
+ prog = xine
+ button = Blue
+ repeat = 1
+ config = SeekRelative-60
+ end
+
+ #sleep
+ begin
+ prog = xine
+ button = GO
+ repeat = 1
+ config = ZoomIn
+ end
+
+ #display
+ begin
+ prog = xine
+ button = SKIP
+ repeat = 1
+ config = ZoomOut
+ end
+
+ #skip chapter forward
+ begin
+ prog = xine
+ button = SKIP
+ repeat = 1
+ config = EventNext
+ end
+
+ #skip chapter backward
+ begin
+ prog = xine
+ button = REPLAY
+ repeat = 1
+ config = EventPrior
+ end
diff --git a/abs/core-testing/system-templates/templates/remotes/Compro/preview.jpg b/abs/core-testing/system-templates/templates/remotes/Compro/preview.jpg
new file mode 100644
index 0000000..a034186
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Compro/preview.jpg
Binary files differ
diff --git a/abs/core-testing/system-templates/templates/remotes/Dvico-Dual-Digital4-rev2/lircd.conf.dvico-dual-digital4 b/abs/core-testing/system-templates/templates/remotes/Dvico-Dual-Digital4-rev2/lircd.conf.dvico-dual-digital4
new file mode 100644
index 0000000..2d2b9ac
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Dvico-Dual-Digital4-rev2/lircd.conf.dvico-dual-digital4
@@ -0,0 +1,81 @@
+# Please make this file available to others
+# by sending it to <lirc@bartelmus.de>
+#
+# this config file was automatically generated
+# using lirc-0.8.0(userspace) on Mon Mar 5 16:00:35 2007
+#
+# contributed by: Soth
+#
+# brand: DViCO FusionHDTV DVB-T Dual Digital
+# model no. of remote control: Fusion MCE
+# devices being controlled by this remote:
+#
+
+begin remote
+
+ name DViCO_Dual_Digital
+ bits 16
+ eps 30
+ aeps 100
+
+ one 0 0
+ zero 0 0
+ pre_data_bits 16
+ pre_data 0x1
+ gap 251756
+ toggle_bit 0
+
+ begin codes
+#starting at the top
+ dtv 0x0179
+ mp3 0x0187
+ dvd 0x0185
+ cpf 0x016C
+#outer circle clockwise from top
+ tvpower 0x0164
+ guide 0x016D
+ info 0x0166
+ alttab 0x000F
+ skip 0x00A3
+ start 0x001C
+ replay 0x00A5
+ dvdmenu 0x008B
+ back 0x009E
+ setup 0x008D
+#inner circle
+ up 0x0067
+ down 0x006C
+ left 0x0069
+ right 0x006A
+ ok 0x0160
+#volume and channel
+ voldn 0x0072
+ volup 0x0073
+ chup 0x0192
+ chdn 0x0193
+#keypad
+ camera 0x00D4
+ live 0x0182
+ folder 0x0086
+ 1 0x0002
+ 2 0x0003
+ 3 0x0004
+ 4 0x0005
+ 5 0x0006
+ 6 0x0007
+ 7 0x0008
+ 8 0x0009
+ 9 0x000A
+ aspect 0x0173
+ 0 0x000B
+ zoom 0x0174
+#play buttons
+ rew 0x00A8
+ playpause 0x00A4
+ ff 0x00D0
+ mute 0x0071
+ stop 0x0080
+ rec 0x00A7
+ power 0x0074
+ end codes
+end remote
diff --git a/abs/core-testing/system-templates/templates/remotes/Dvico-Dual-Digital4-rev2/lircrc.dvico-dual-digital4 b/abs/core-testing/system-templates/templates/remotes/Dvico-Dual-Digital4-rev2/lircrc.dvico-dual-digital4
new file mode 100644
index 0000000..7c75f01
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Dvico-Dual-Digital4-rev2/lircrc.dvico-dual-digital4
@@ -0,0 +1,430 @@
+# lircrc.example.DVICO-nativelirc
+# 2004-07-04, Chris Pascoe
+# mailto:linuxdvb@itee.uq.edu.au
+# Save this file in ~/.mythtv/lircrc
+#
+# Note the "repeat =" strings in the volume and channel.
+# This means that if you hold down the key, every nth instance will be
+# passed. This depends on your system, so you may want to increase or
+# decrease this and see what happens. repeat = 1 is probably too
+# fast.
+
+### Top 4 buttons ###
+
+# DTV - Change focus for PiP (to change channel in the other window)
+begin
+ prog = mythtv
+ button = dtv
+ config = B
+end
+
+begin
+ prog = mythtv
+ button = mp3
+ config = Ctrl+M
+end
+
+begin
+ prog = mythtv
+ button = dvd
+ config = Ctrl+D
+end
+
+begin
+ prog = mythtv
+ button = cpf
+ config =
+end
+
+### Outer Circle (clockwise from the top) ###
+
+begin
+ prog = mythtv
+ button = tvpower
+ config = Esc
+end
+
+begin
+ prog = mythtv
+ button = guide
+ config = S
+end
+
+begin
+ prog = mythtv
+ button = info
+ config = I
+end
+
+#swap the pip windows
+begin
+ prog = mythtv
+ button = alttab
+ config = N
+end
+
+#commercial skip forwards
+begin
+ prog = mythtv
+ button = skip
+ config = Z
+end
+
+begin
+ prog = mythtv
+ button = start
+ config = Return
+end
+
+#commercial skip backwards
+begin
+ prog = mythtv
+ button = replay
+ config = Q
+end
+
+begin
+ prog = mythtv
+ button = dvdmenu
+# config = undefined
+end
+
+begin
+ prog = mythtv
+ button = back
+ config = Esc
+end
+
+begin
+ prog = mythtv
+ button = setup
+ config = undefined
+end
+
+### Inner Circle ###
+
+begin
+ prog = mythtv
+ button = up
+ config = Up
+end
+
+begin
+ prog = mythtv
+ button = down
+ config = Down
+end
+
+begin
+ prog = mythtv
+ button = left
+ config = Left
+end
+
+begin
+ prog = mythtv
+ button = right
+ config = Right
+end
+
+begin
+ prog = mythtv
+ button = ok
+ config = Return
+end
+
+### Volume and Channel ###
+
+begin
+ prog = mythtv
+ button = voldn
+ repeat = 1
+ config = F10
+end
+
+begin
+ prog = mythtv
+ button = volup
+ repeat = 1
+ config = F11
+end
+
+begin
+ prog = mythtv
+ button = chup
+ config = Up
+end
+
+begin
+ prog = mythtv
+ button = chdn
+ config = Down
+end
+
+### Keypad ###
+
+begin
+ prog = mythtv
+ button = camera
+ config = P
+end
+
+begin
+ prog = mythtv
+ button = live
+# config = undefined
+end
+
+begin
+ prog = mythtv
+ button = folder
+ config = C
+end
+
+begin
+ prog = mythtv
+ button = 1
+ config = 1
+ config = return
+end
+
+begin
+ prog = mythtv
+ button = 2
+ config = 2
+ config = return
+end
+
+begin
+ prog = mythtv
+ button = 3
+ config = 3
+ config = return
+end
+
+begin
+ prog = mythtv
+ button = 4
+ config = 4
+ config = return
+end
+
+begin
+ prog = mythtv
+ button = 5
+ config = 5
+ config = return
+end
+
+begin
+ prog = mythtv
+ button = 6
+ config = 6
+ config = return
+end
+
+begin
+ prog = mythtv
+ button = 7
+ config = 7
+ config = return
+end
+
+begin
+ prog = mythtv
+ button = 8
+ config = 8
+ config = return
+end
+
+begin
+ prog = mythtv
+ button = 9
+ config = 9
+ config = return
+end
+
+begin
+ prog = mythtv
+ button = aspect
+ config = W
+end
+
+begin
+ prog = mythtv
+ button = 0
+ config = 0
+ config = return
+end
+
+# Toggle PiP on/off
+begin
+ prog = mythtv
+ button = zoom
+ config = V
+end
+
+### Play buttons ###
+
+begin
+ prog = mythtv
+ button = rew
+ config = Left
+# config = seek -180
+end
+
+begin
+ prog = mythtv
+ button = playpause
+ config = ctrl+p
+end
+
+begin
+ prog = mythtv
+ button = ff
+ config = Right
+# config = seek +180
+end
+
+begin
+ prog = mythtv
+ button = mute
+ config = |
+end
+
+begin
+ prog = mythtv
+ button = stop
+ config = P
+end
+
+begin
+ prog = mythtv
+ button = rec
+ config = R
+end
+
+begin
+ prog = mythtv
+ button = power
+ config = Esc
+end
+
+# Xine
+
+begin
+ prog = xine
+ button = playpause
+ repeat = 3
+ config = Play
+end
+
+begin
+ prog = xine
+ button = stop
+ repeat = 3
+ config = Pause
+end
+
+begin
+ prog = xine
+ button = back
+ config = Quit
+end
+
+begin
+ prog = xine
+ button = tv_onoff
+ config = Quit
+end
+
+begin
+ prog = xine
+ button = right
+ repeat = 3
+ config = SeekRelative+10
+end
+
+begin
+ prog = xine
+ button = left
+ repeat = 3
+ config = SeekRelative-10
+end
+
+begin
+ prog = xine
+ button = ff
+ repeat = 3
+ config = SeekRelative+30
+end
+
+begin
+ prog = xine
+ button = rew
+ repeat = 3
+ config = SeekRelative-30
+end
+
+begin
+ prog = xine
+ button = skip
+ repeat = 3
+ config = SeekRelative+300
+end
+
+begin
+ prog = xine
+ button = replay
+ repeat = 3
+ config = SeekRelative-300
+end
+
+begin
+ prog = xine
+ button = up
+ repeat = 1
+ config = EventUp
+end
+
+begin
+ prog = xine
+ button = down
+ repeat = 1
+ config = EventDown
+end
+
+begin
+ prog = xine
+ button = ok
+ repeat = 0
+ config = EventSelect
+end
+
+begin
+ prog = xine
+ button = guide
+ repeat = 0
+ config = Menu
+end
+
+begin
+ prog = xine
+ button = setup
+ repeat = 0
+ config = Menu
+end
+
+begin
+ prog = xine
+ button = volup
+ repeat = 1
+ config = Volume+
+end
+
+begin
+ prog = xine
+ button = voldn
+ repeat = 1
+ config = Volume-
+end
diff --git a/abs/core-testing/system-templates/templates/remotes/Dvico-Dual-Digital4-rev2/preview.jpg b/abs/core-testing/system-templates/templates/remotes/Dvico-Dual-Digital4-rev2/preview.jpg
new file mode 100644
index 0000000..f3956fa
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Dvico-Dual-Digital4-rev2/preview.jpg
Binary files differ
diff --git a/abs/core-testing/system-templates/templates/remotes/Flyvideo_2000/lircd-flyvideo2000.conf b/abs/core-testing/system-templates/templates/remotes/Flyvideo_2000/lircd-flyvideo2000.conf
new file mode 100755
index 0000000..03a5f14
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Flyvideo_2000/lircd-flyvideo2000.conf
@@ -0,0 +1,57 @@
+# Please make this file available to others
+# by sending it to <lirc@bartelmus.de>
+#
+# this config file was automatically generated
+# using lirc-0.8.1(dev/input) on Wed Jun 13 19:09:39 2007
+#
+# contributed by
+#
+# brand: /tmp/lirc.conf
+# model no. of remote control:
+# devices being controlled by this remote:
+#
+
+begin remote
+
+name FlyVideo_2000
+bits 16
+eps 30
+aeps 100
+
+one 0 0
+zero 0 0
+pre_data_bits 16
+pre_data 0x8001
+gap 208092
+toggle_bit 0
+
+
+begin codes
+ Air/catTV 0x0175
+ Video 0x0189
+ Audio 0x0188
+ Power 0x0074
+ AVSource 0x0182
+ FullScreen 0x0174
+ Stereo 0x0170
+ Mute 0x0071
+ Vol+ 0x0073
+ Vol- 0x0072
+ Ch+ 0x0192
+ Ch- 0x0193
+ Recall 0x0081
+ Enter 0x001C
+ 1 0x0002
+ 2 0x0003
+ 3 0x0004
+ 4 0x0005
+ 5 0x0006
+ 6 0x0007
+ 7 0x0008
+ 8 0x0009
+ 9 0x000A
+ 0 0x000B
+
+end codes
+
+end remote \ No newline at end of file
diff --git a/abs/core-testing/system-templates/templates/remotes/Flyvideo_2000/lircrc-flyvideo2000.txt b/abs/core-testing/system-templates/templates/remotes/Flyvideo_2000/lircrc-flyvideo2000.txt
new file mode 100755
index 0000000..08fb7fb
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Flyvideo_2000/lircrc-flyvideo2000.txt
@@ -0,0 +1,474 @@
+# Channel Up
+begin
+prog = mythtv
+button = Ch+
+config = Up
+end
+
+# Channel Down
+begin
+prog = mythtv
+button = Ch-
+config = Down
+end
+
+# General Left
+begin
+prog = mythtv
+button =
+config = Left
+end
+
+# General Right
+begin
+prog = mythtv
+button =
+config = Right
+end
+
+ # LiveTV browse up channel
+begin
+prog = mythtv
+button = Ch+
+config = Up
+end
+
+# LiveTV browse down channel
+begin
+prog = mythtv
+button = Ch-
+config = Down
+end
+
+# Volume Up
+begin
+prog = mythtv
+button = Vol+
+config = F11
+end
+
+# Volume Down
+begin
+prog = mythtv
+button = Vol-
+config = F10
+end
+
+ # OK/Select
+begin
+prog = mythtv
+button = Enter
+config = Space
+end
+
+# Play
+begin
+prog = mythtv
+button =
+config = Return
+end
+
+# Stop
+begin
+prog = mythtv
+button =
+config = Esc
+end
+
+# Escape/Exit/Back
+begin
+prog = mythtv
+button =
+config = Esc
+end
+
+# Power Off/Exit
+begin
+prog = irexec
+button = Power
+config = /usr/bin/mythpowerbutton.sh
+end
+
+# Pause
+begin
+prog = mythtv
+button =
+config = P
+end
+
+# Mute
+begin
+prog = mythtv
+button = Mute
+config = |
+end
+
+# Fast forward (10 sec default)
+begin
+prog = mythtv
+button =
+config = Right
+end
+
+# Rewind (10 sec default)
+begin
+prog = mythtv
+button =
+config = Left
+end
+
+# Skip forward (10 min default)
+begin
+prog = mythtv
+button =
+config = PgDown
+end
+
+# Skip backward (10 min default)
+begin
+prog = mythtv
+button =
+config = PgUp
+end
+
+# Record
+begin
+prog = mythtv
+button =
+config = R
+end
+
+# Delete
+begin
+prog = mythtv
+button =
+config = D
+end
+
+# OSD browse
+begin
+prog = mythtv
+button =
+config = O
+end
+
+# Display EPG while in live TV,
+# View selected show while in EPG
+begin
+prog = mythtv
+button =
+config = M
+end
+
+# Bring up OSD info
+begin
+prog = mythtv
+button =
+config = I
+end
+
+# Change display aspect ratio
+begin
+prog = mythtv
+button =
+config = W
+end
+
+# Seek to previous commercial cut point
+begin
+prog = mythtv
+button =
+config = Q
+end
+
+# Seek to next commercial cut point
+begin
+prog = mythtv
+button =
+config = Z
+end
+
+# Numbers 0-9
+
+begin
+prog = mythtv
+button = 0
+config = 0
+end
+
+begin
+prog = mythtv
+button = 1
+config = 1
+end
+
+begin
+prog = mythtv
+button = 2
+config = 2
+end
+
+begin
+prog = mythtv
+button = 3
+config = 3
+end
+
+begin
+prog = mythtv
+button = 4
+config = 4
+end
+
+begin
+prog = mythtv
+button = 5
+config = 5
+end
+
+begin
+prog = mythtv
+button = 6
+config = 6
+end
+
+begin
+prog = mythtv
+button = 7
+config = 7
+end
+
+begin
+prog = mythtv
+button = 8
+config = 8
+end
+
+begin
+prog = mythtv
+button = 9
+config = 9
+end
+
+# Previous channel
+begin
+prog = mythtv
+button = Recall
+config = H
+end
+
+# Closed Captioning
+begin
+prog = mythtv
+button =
+config = T
+end
+
+# Picture in Picture
+begin
+prog = mythtv
+button =
+config = V
+end
+
+# Change channels on both cards
+begin
+prog = mythtv
+button =
+config = N
+end
+
+# Clear cutpoints in cutlist
+begin
+prog = mythtv
+button =
+config = Q
+end
+
+
+
+
+### MPlayer lirc setup
+
+# Show OSD
+begin
+prog = mplayer
+button =
+config = osd
+end
+
+# Pause playback
+begin
+prog = mplayer
+button =
+config = pause
+end
+
+# Mute
+begin
+prog = mplayer
+button = Mute
+config = mute
+end
+
+# Seek back 10 seconds
+begin
+prog = mplayer
+button =
+config = seek -10
+end
+
+# Seek forward 30 seconds
+begin
+prog = mplayer
+button =
+config = seek +30
+end
+
+# Quit
+begin
+prog = mplayer
+button =
+config = quit
+end
+
+# Seek forward 10 minutes
+begin
+prog = mplayer
+button =
+config = seek +600
+end
+
+# Seek backward 10 minutes
+begin
+prog = mplayer
+button =
+config = seek -600
+end
+
+# Toggle full-screen
+begin
+prog = mplayer
+button = FullScreen
+config = vo_fullscreen
+end
+
+
+
+### Xine lirc setup
+
+begin
+prog = xine
+button =
+config = Play
+end
+
+begin
+prog = xine
+button =
+config = Stop
+end
+
+begin
+prog = xine
+button =
+config = Quit
+end
+
+begin
+prog = xine
+button =
+config = Pause
+end
+
+begin
+prog = xine
+button = Ch+
+config = EventUp
+end
+
+begin
+prog = xine
+button = Ch-
+config = EventDown
+end
+
+begin
+prog = xine
+button =
+config = EventLeft
+end
+
+begin
+prog = xine
+button =
+config = EventRight
+end
+
+begin
+prog = xine
+button = Enter
+config = EventSelect
+end
+
+begin
+prog = xine
+button =
+config = Menu
+end
+
+begin
+prog = xine
+button =
+#config = SpeedFaster
+config = SeekRelative+60
+end
+
+begin
+prog = xine
+button =
+#config = SpeedSlower
+config = SeekRelative-60
+end
+
+begin
+prog = xine
+button = Vol+
+config = Volume+
+end
+
+begin
+prog = xine
+button = Vol-
+config = Volume-
+end
+
+begin
+prog = xine
+button = Mute
+config = Mute
+end
+
+begin
+prog = xine
+button =
+config = RootMenu
+end
+
+begin
+prog = xine
+button =
+config = EventNext
+end
+
+begin
+prog = xine
+button =
+config = EventPrior
+end
+
+begin
+prog = xine
+button =
+config = OSDStreamInfos
+end \ No newline at end of file
diff --git a/abs/core-testing/system-templates/templates/remotes/Flyvideo_2000/preview.jpg b/abs/core-testing/system-templates/templates/remotes/Flyvideo_2000/preview.jpg
new file mode 100644
index 0000000..a034186
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Flyvideo_2000/preview.jpg
Binary files differ
diff --git a/abs/core-testing/system-templates/templates/remotes/Flyvideo_3000/lircd-flyvideo3000.conf b/abs/core-testing/system-templates/templates/remotes/Flyvideo_3000/lircd-flyvideo3000.conf
new file mode 100755
index 0000000..8b4f23e
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Flyvideo_3000/lircd-flyvideo3000.conf
@@ -0,0 +1,47 @@
+# lircd.conf.Flyvideo_3000_devinput
+#
+# Lirc configuration file for the LifeView FlyVideo 3000 remote.
+#
+# Adapted from the standard linux input layer config file found at
+# http://linux.bytesex.org/v4l2/linux-input-layer-lircd.conf
+# The remote name and button names are consistent with lircd.conf.Flyvideo_3000.
+#
+# Created January 22, 2005
+#
+# contributed by Jason Anderson (jasonofhoulton@hotmail.com)
+#
+# brand: Lifeview
+# model no. of remote control: Flyvideo 3000
+# devices being controlled by this remote:
+#
+
+begin remote
+ name Flyvideo_3000
+ bits 32
+ begin codes
+ air/catv 0x10182
+ video 0x10189
+ audio 0x10188
+ power 0x10074
+ av_source 0x100b0
+ full_screen 0x10174
+ stereo 0x100c0
+ Mute 0x10071
+ 1 0x1004f
+ 2 0x10050
+ 3 0x10051
+ vol+ 0x10073
+ 4 0x1004b
+ 5 0x1004c
+ 6 0x1004d
+ vol- 0x10072
+ 7 0x10047
+ 8 0x10048
+ 9 0x10049
+ ch+ 0x10192
+ recall 0x10081
+ 0 0x10052
+ enter 0x10060
+ ch- 0x10193
+ end codes
+end remote
diff --git a/abs/core-testing/system-templates/templates/remotes/Flyvideo_3000/lircrc-flyvideo3000.txt b/abs/core-testing/system-templates/templates/remotes/Flyvideo_3000/lircrc-flyvideo3000.txt
new file mode 100755
index 0000000..565c2d9
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Flyvideo_3000/lircrc-flyvideo3000.txt
@@ -0,0 +1,474 @@
+# Channel Up
+begin
+prog = mythtv
+button = ch+
+config = Up
+end
+
+# Channel Down
+begin
+prog = mythtv
+button = ch-
+config = Down
+end
+
+# General Left
+begin
+prog = mythtv
+button =
+config = Left
+end
+
+# General Right
+begin
+prog = mythtv
+button =
+config = Right
+end
+
+ # LiveTV browse up channel
+begin
+prog = mythtv
+button = ch+
+config = Up
+end
+
+# LiveTV browse down channel
+begin
+prog = mythtv
+button = ch-
+config = Down
+end
+
+# Volume Up
+begin
+prog = mythtv
+button = vol+
+config = F11
+end
+
+# Volume Down
+begin
+prog = mythtv
+button = vol-
+config = F10
+end
+
+ # OK/Select
+begin
+prog = mythtv
+button = enter
+config = Space
+end
+
+# Play
+begin
+prog = mythtv
+button =
+config = Return
+end
+
+# Stop
+begin
+prog = mythtv
+button =
+config = Esc
+end
+
+# Escape/Exit/Back
+begin
+prog = mythtv
+button =
+config = Esc
+end
+
+# Power Off/Exit
+begin
+prog = irexec
+button = power
+config = /usr/bin/mythpowerbutton.sh
+end
+
+# Pause
+begin
+prog = mythtv
+button =
+config = P
+end
+
+# Mute
+begin
+prog = mythtv
+button = Mute
+config = |
+end
+
+# Fast forward (10 sec default)
+begin
+prog = mythtv
+button =
+config = Right
+end
+
+# Rewind (10 sec default)
+begin
+prog = mythtv
+button =
+config = Left
+end
+
+# Skip forward (10 min default)
+begin
+prog = mythtv
+button =
+config = PgDown
+end
+
+# Skip backward (10 min default)
+begin
+prog = mythtv
+button =
+config = PgUp
+end
+
+# Record
+begin
+prog = mythtv
+button =
+config = R
+end
+
+# Delete
+begin
+prog = mythtv
+button =
+config = D
+end
+
+# OSD browse
+begin
+prog = mythtv
+button =
+config = O
+end
+
+# Display EPG while in live TV,
+# View selected show while in EPG
+begin
+prog = mythtv
+button =
+config = M
+end
+
+# Bring up OSD info
+begin
+prog = mythtv
+button =
+config = I
+end
+
+# Change display aspect ratio
+begin
+prog = mythtv
+button =
+config = W
+end
+
+# Seek to previous commercial cut point
+begin
+prog = mythtv
+button =
+config = Q
+end
+
+# Seek to next commercial cut point
+begin
+prog = mythtv
+button =
+config = Z
+end
+
+# Numbers 0-9
+
+begin
+prog = mythtv
+button = 0
+config = 0
+end
+
+begin
+prog = mythtv
+button = 1
+config = 1
+end
+
+begin
+prog = mythtv
+button = 2
+config = 2
+end
+
+begin
+prog = mythtv
+button = 3
+config = 3
+end
+
+begin
+prog = mythtv
+button = 4
+config = 4
+end
+
+begin
+prog = mythtv
+button = 5
+config = 5
+end
+
+begin
+prog = mythtv
+button = 6
+config = 6
+end
+
+begin
+prog = mythtv
+button = 7
+config = 7
+end
+
+begin
+prog = mythtv
+button = 8
+config = 8
+end
+
+begin
+prog = mythtv
+button = 9
+config = 9
+end
+
+# Previous channel
+begin
+prog = mythtv
+button = recall
+config = H
+end
+
+# Closed Captioning
+begin
+prog = mythtv
+button =
+config = T
+end
+
+# Picture in Picture
+begin
+prog = mythtv
+button =
+config = V
+end
+
+# Change channels on both cards
+begin
+prog = mythtv
+button =
+config = N
+end
+
+# Clear cutpoints in cutlist
+begin
+prog = mythtv
+button =
+config = Q
+end
+
+
+
+
+### MPlayer lirc setup
+
+# Show OSD
+begin
+prog = mplayer
+button =
+config = osd
+end
+
+# Pause playback
+begin
+prog = mplayer
+button =
+config = pause
+end
+
+# Mute
+begin
+prog = mplayer
+button = Mute
+config = mute
+end
+
+# Seek back 10 seconds
+begin
+prog = mplayer
+button =
+config = seek -10
+end
+
+# Seek forward 30 seconds
+begin
+prog = mplayer
+button =
+config = seek +30
+end
+
+# Quit
+begin
+prog = mplayer
+button =
+config = quit
+end
+
+# Seek forward 10 minutes
+begin
+prog = mplayer
+button =
+config = seek +600
+end
+
+# Seek backward 10 minutes
+begin
+prog = mplayer
+button =
+config = seek -600
+end
+
+# Toggle full-screen
+begin
+prog = mplayer
+button = full_Screen
+config = vo_fullscreen
+end
+
+
+
+### Xine lirc setup
+
+begin
+prog = xine
+button =
+config = Play
+end
+
+begin
+prog = xine
+button =
+config = Stop
+end
+
+begin
+prog = xine
+button =
+config = Quit
+end
+
+begin
+prog = xine
+button =
+config = Pause
+end
+
+begin
+prog = xine
+button = ch+
+config = EventUp
+end
+
+begin
+prog = xine
+button = ch-
+config = EventDown
+end
+
+begin
+prog = xine
+button =
+config = EventLeft
+end
+
+begin
+prog = xine
+button =
+config = EventRight
+end
+
+begin
+prog = xine
+button = enter
+config = EventSelect
+end
+
+begin
+prog = xine
+button =
+config = Menu
+end
+
+begin
+prog = xine
+button =
+#config = SpeedFaster
+config = SeekRelative+60
+end
+
+begin
+prog = xine
+button =
+#config = SpeedSlower
+config = SeekRelative-60
+end
+
+begin
+prog = xine
+button = vol+
+config = Volume+
+end
+
+begin
+prog = xine
+button = vol-
+config = Volume-
+end
+
+begin
+prog = xine
+button = Mute
+config = Mute
+end
+
+begin
+prog = xine
+button =
+config = RootMenu
+end
+
+begin
+prog = xine
+button =
+config = EventNext
+end
+
+begin
+prog = xine
+button =
+config = EventPrior
+end
+
+begin
+prog = xine
+button =
+config = OSDStreamInfos
+end \ No newline at end of file
diff --git a/abs/core-testing/system-templates/templates/remotes/Flyvideo_3000/preview.jpg b/abs/core-testing/system-templates/templates/remotes/Flyvideo_3000/preview.jpg
new file mode 100644
index 0000000..a034186
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Flyvideo_3000/preview.jpg
Binary files differ
diff --git a/abs/core-testing/system-templates/templates/remotes/Hercules/lircd-hercules.conf b/abs/core-testing/system-templates/templates/remotes/Hercules/lircd-hercules.conf
new file mode 100755
index 0000000..a745dbb
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Hercules/lircd-hercules.conf
@@ -0,0 +1,61 @@
+#
+# this config file was automatically generated
+# using lirc-0.6.6(any) on Mon Oct 6 01:10:14 2003
+#
+# contributed by Dimitris Michail <dmichail|yahoo.com>
+#
+# brand: Hercules
+# model no. of remote control: unknown
+# devices being controlled by this remote: Hercules SmartTV Stereo
+#
+# Works with module lirc_i2c, reports PV951 IR
+
+begin remote
+
+ name HERCULES_SMARTTV_STEREO
+ bits 16
+ eps 30
+ aeps 100
+
+ one 0 0
+ zero 0 0
+ pre_data_bits 16
+ pre_data 0x61D6
+ gap 199964
+ toggle_bit 0
+
+
+ begin codes
+ POWER 0x00000000000048B7
+ MUTE 0x000000000000C837
+ PREVIEW 0x000000000000F00F
+ FULLSCREEN 0x00000000000038C7
+ AV/TV 0x0000000000008877
+ TELETEXT 0x00000000000008F7
+ 1 0x000000000000807F
+ 2 0x00000000000040BF
+ 3 0x000000000000C03F
+ 4 0x00000000000020DF
+ 5 0x000000000000A05F
+ 6 0x000000000000609F
+ 7 0x000000000000E01F
+ 8 0x00000000000010EF
+ 9 0x000000000000906F
+ 0 0x00000000000000FF
+ SNAPSHOT 0x00000000000050AF
+ 100+ 0x000000000000E817
+ CH+ 0x00000000000058A7
+ CH- 0x0000000000007887
+ VOL+ 0x000000000000D827
+ VOL- 0x000000000000F807
+ PAUSE 0x000000000000B04F
+ RECORD 0x000000000000708F
+ STOP 0x000000000000B847
+ PLAY 0x0000000000009867
+ TV_REPLAY 0x0000000000006897
+ TIME_SHIFT 0x00000000000028D7
+ SEEK_BACK 0x00000000000018E7
+ SEEK_FWD 0x00000000000030CF
+ end codes
+
+end remote \ No newline at end of file
diff --git a/abs/core-testing/system-templates/templates/remotes/Hercules/lircrc-hercules.txt b/abs/core-testing/system-templates/templates/remotes/Hercules/lircrc-hercules.txt
new file mode 100755
index 0000000..c54873b
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Hercules/lircrc-hercules.txt
@@ -0,0 +1,475 @@
+# Channel Up
+begin
+prog = mythtv
+button = CH+
+config = Up
+end
+
+# Channel Down
+begin
+prog = mythtv
+button = CH-
+config = Down
+end
+
+# General Left
+begin
+prog = mythtv
+button =
+config = Left
+end
+
+# General Right
+begin
+prog = mythtv
+button =
+config = Right
+end
+
+ # LiveTV browse up channel
+begin
+prog = mythtv
+button = CH+
+config = Up
+end
+
+# LiveTV browse down channel
+begin
+prog = mythtv
+button = CH-
+config = Down
+end
+
+# Volume Up
+begin
+prog = mythtv
+button = VOL+
+config = F11
+end
+
+# Volume Down
+begin
+prog = mythtv
+button = VOL-
+config = F10
+end
+
+ # OK/Select
+begin
+prog = mythtv
+button =
+config = Space
+end
+
+# Play
+begin
+prog = mythtv
+button = PLAY
+config = Return
+end
+
+# Stop
+begin
+prog = mythtv
+button = STOP
+config = Esc
+end
+
+# Escape/Exit/Back
+begin
+prog = mythtv
+button =
+config = Esc
+end
+
+# Power Off/Exit
+begin
+prog = irexec
+button = POWER
+config = /usr/bin/mythpowerbutton.sh
+end
+
+# Pause
+begin
+prog = mythtv
+button = PAUSE
+config = P
+end
+
+# Mute
+begin
+prog = mythtv
+button = MUTE
+config = |
+end
+
+# Fast forward (10 sec default)
+begin
+prog = mythtv
+button = SEEK_FWD
+config = Right
+end
+
+# Rewind (10 sec default)
+begin
+prog = mythtv
+button = SEEK_BACK
+config = Left
+end
+
+# Skip forward (10 min default)
+begin
+prog = mythtv
+button =
+config = PgDown
+end
+
+# Skip backward (10 min default)
+begin
+prog = mythtv
+button =
+config = PgUp
+end
+
+# Record
+begin
+prog = mythtv
+button = RECORD
+config = R
+end
+
+# Delete
+begin
+prog = mythtv
+button =
+config = D
+end
+
+# OSD browse
+begin
+prog = mythtv
+button =
+config = O
+end
+
+# Display EPG while in live TV,
+# View selected show while in EPG
+begin
+prog = mythtv
+button = PREVIEW
+config = M
+end
+
+# Bring up OSD info
+begin
+prog = mythtv
+button =
+config = I
+end
+
+# Change display aspect ratio
+begin
+prog = mythtv
+button = FULLSCREEN
+config = W
+end
+
+# Seek to previous commercial cut point
+begin
+prog = mythtv
+button =
+config = Q
+end
+
+# Seek to next commercial cut point
+begin
+prog = mythtv
+button =
+config = Z
+end
+
+# Numbers 0-9
+
+begin
+prog = mythtv
+button = 0
+config = 0
+end
+
+begin
+prog = mythtv
+button = 1
+config = 1
+end
+
+begin
+prog = mythtv
+button = 2
+config = 2
+end
+
+begin
+prog = mythtv
+button = 3
+config = 3
+end
+
+begin
+prog = mythtv
+button = 4
+config = 4
+end
+
+begin
+prog = mythtv
+button = 5
+config = 5
+end
+
+begin
+prog = mythtv
+button = 6
+config = 6
+end
+
+begin
+prog = mythtv
+button = 7
+config = 7
+end
+
+begin
+prog = mythtv
+button = 8
+config = 8
+end
+
+begin
+prog = mythtv
+button = 9
+config = 9
+end
+
+# Closed Captioning
+begin
+prog = mythtv
+button = TELETEXT
+config = T
+end
+
+# Picture in Picture
+begin
+prog = mythtv
+button =
+config = V
+end
+
+# Change channels on both cards
+begin
+prog = mythtv
+button =
+config = N
+end
+
+# Clear cutpoints in cutlist
+begin
+prog = mythtv
+button =
+config = Q
+end
+
+
+
+
+### MPlayer lirc setup
+
+# Show OSD
+begin
+prog = mplayer
+button = PREVIEW
+config = osd
+end
+
+# Pause playback
+begin
+prog = mplayer
+button = PAUSE
+config = pause
+end
+
+# Skip ahead a minute if playing
+# If paused, resume playing
+begin
+prog = mplayer
+button =
+config = seek +1
+end
+
+# Mute
+begin
+prog = mplayer
+button = MUTE
+config = mute
+end
+
+# Seek back 10 seconds
+begin
+prog = mplayer
+button = SEEK_BACK
+config = seek -10
+end
+
+# Seek forward 30 seconds
+begin
+prog = mplayer
+button = SEEK_FWD
+config = seek +30
+end
+
+# Quit
+begin
+prog = mplayer
+button = STOP
+config = quit
+end
+
+# Seek forward 10 minutes
+begin
+prog = mplayer
+button =
+config = seek +600
+end
+
+# Seek backward 10 minutes
+begin
+prog = mplayer
+button =
+config = seek -600
+end
+
+# Toggle full-screen
+begin
+prog = mplayer
+button = FULLSCREEN
+config = vo_fullscreen
+end
+
+
+
+### Xine lirc setup
+
+begin
+prog = xine
+button = PLAY
+config = Play
+end
+
+begin
+prog = xine
+button = STOP
+config = Stop
+end
+
+begin
+prog = xine
+button = STOP
+config = Quit
+end
+
+begin
+prog = xine
+button = PAUSE
+config = Pause
+end
+
+begin
+prog = xine
+button =
+config = EventUp
+end
+
+begin
+prog = xine
+button =
+config = EventDown
+end
+
+begin
+prog = xine
+button =
+config = EventLeft
+end
+
+begin
+prog = xine
+button =
+config = EventRight
+end
+
+begin
+prog = xine
+button =
+config = EventSelect
+end
+
+begin
+prog = xine
+button = PREVIEW
+config = Menu
+end
+
+begin
+prog = xine
+button = SEEK_FWD
+#config = SpeedFaster
+config = SeekRelative+60
+end
+
+begin
+prog = xine
+button = SEEK_BACK
+#config = SpeedSlower
+config = SeekRelative-60
+end
+
+begin
+prog = xine
+button = VOL+
+config = Volume+
+end
+
+begin
+prog = xine
+button = VOL-
+config = Volume-
+end
+
+begin
+prog = xine
+button = MUTE
+config = Mute
+end
+
+begin
+prog = xine
+button = STOP
+config = RootMenu
+end
+
+begin
+prog = xine
+button =
+config = EventNext
+end
+
+begin
+prog = xine
+button =
+config = EventPrior
+end
+
+begin
+prog = xine
+button = TELETEXT
+config = OSDStreamInfos
+end \ No newline at end of file
diff --git a/abs/core-testing/system-templates/templates/remotes/Hercules/preview.jpg b/abs/core-testing/system-templates/templates/remotes/Hercules/preview.jpg
new file mode 100644
index 0000000..8ffa652
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Hercules/preview.jpg
Binary files differ
diff --git a/abs/core-testing/system-templates/templates/remotes/Kworld_110/lircd-kworld110.conf b/abs/core-testing/system-templates/templates/remotes/Kworld_110/lircd-kworld110.conf
new file mode 100755
index 0000000..eab7fa2
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Kworld_110/lircd-kworld110.conf
@@ -0,0 +1,84 @@
+#
+# this config file was automatically generated
+# using lirc-0.8.1-CVS(default) on Sun Jan 14 20:53:40 2007
+#
+# contributed by Craig Courtney <craig at dawnsedge.com>
+#
+# brand: Kworld
+# model no. of remote control: ATSC 110 Remote
+# devices being controlled by this remote: ATSC 110 HDTV Tuner Card
+#
+# Generated with homebrew serial circuit connect to reciever that came
+# with the card.
+#
+
+begin remote
+
+ name Kworld_ATSC_110
+ bits 16
+ flags SPACE_ENC|CONST_LENGTH
+ eps 30
+ aeps 100
+
+ header 9084 4466
+ one 604 1650
+ zero 604 526
+ ptrail 603
+ repeat 9082 2218
+ pre_data_bits 16
+ pre_data 0xDF
+ gap 108354
+ toggle_bit 0
+
+
+ begin codes
+ power 0x30CF
+ ch+ 0x7887
+ ch- 0xF807
+ vol+ 0x38C7
+ vol- 0xB847
+ 1 0x00FF
+ 2 0x807F
+ 3 0x40BF
+ 4 0xC03F
+ 5 0x20DF
+ 6 0xA05F
+ 7 0x609F
+ 8 0xE01F
+ 9 0x10EF
+ 0 0x50AF
+ numpad_up 0x906F
+ numpad_enter 0xD02F
+ standby 0xB04F
+ mute 0x28D7
+ stereo 0xA857
+ source 0x6897
+ zoom 0xE817
+ shut_down 0x18E7
+ up 0x08F7
+ left 0x48B7
+ right 0xC837
+ down 0x8877
+ select 0x708F
+ timeshift 0x9867
+ stop 0x58A7
+ rec 0xD827
+ scan_rev 0x02FD
+ scan_fwd 0x827D
+ play_pause 0x22DD
+ play_stop 0xA25D
+ chapter_rev 0x42BD
+ chapter_fwd 0xC23D
+ a 0x12ED
+ b 0x926D
+ c 0x52AD
+ d 0xD22D
+ e 0x32CD
+ f 0xB24D
+ g 0x728D
+ h 0xF20D
+ end codes
+
+end remote
+
+
diff --git a/abs/core-testing/system-templates/templates/remotes/Kworld_110/lircrc-kworld110.txt b/abs/core-testing/system-templates/templates/remotes/Kworld_110/lircrc-kworld110.txt
new file mode 100755
index 0000000..7447a46
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Kworld_110/lircrc-kworld110.txt
@@ -0,0 +1,482 @@
+# Channel Up
+begin
+prog = mythtv
+button = ch+
+config = Up
+end
+
+# Channel Down
+begin
+prog = mythtv
+button = ch-
+config = Down
+end
+
+# General Left
+begin
+prog = mythtv
+button = left
+config = Left
+end
+
+# General Right
+begin
+prog = mythtv
+button = right
+config = Right
+end
+
+ # LiveTV browse up channel
+begin
+prog = mythtv
+button = up
+config = Up
+end
+
+# LiveTV browse down channel
+begin
+prog = mythtv
+button = down
+config = Down
+end
+
+# Volume Up
+begin
+prog = mythtv
+button = vol+
+config = F11
+end
+
+# Volume Down
+begin
+prog = mythtv
+button = vol-
+config = F10
+end
+
+ # OK/Select
+begin
+prog = mythtv
+button = select
+config = Space
+end
+
+# Play
+begin
+prog = mythtv
+button = play_pause
+config = Return
+end
+
+# Stop
+begin
+prog = mythtv
+button = stop
+config = Esc
+end
+
+# Escape/Exit/Back
+begin
+prog = mythtv
+button =
+config = Esc
+end
+
+# Power Off/Exit
+begin
+prog = irexec
+button = power
+config = /usr/bin/mythpowerbutton.sh
+end
+
+# Pause
+begin
+prog = mythtv
+button = play_pause
+config = P
+end
+
+# Mute
+begin
+prog = mythtv
+button = mute
+config = |
+end
+
+# Fast forward (10 sec default)
+begin
+prog = mythtv
+button = scan_fwd
+config = Right
+end
+
+# Rewind (10 sec default)
+begin
+prog = mythtv
+button = scan_rev
+config = Left
+end
+
+# Skip forward (10 min default)
+begin
+prog = mythtv
+button = chapter_fwd
+config = PgDown
+end
+
+# Skip backward (10 min default)
+begin
+prog = mythtv
+button = chapter_rev
+config = PgUp
+end
+
+# Record
+begin
+prog = mythtv
+button = rec
+config = R
+end
+
+# Delete
+begin
+prog = mythtv
+button = d
+config = D
+end
+
+# OSD browse
+begin
+prog = mythtv
+button = b
+config = O
+end
+
+# Display EPG while in live TV,
+# View selected show while in EPG
+begin
+prog = mythtv
+button = e
+config = M
+end
+
+# Bring up OSD info
+begin
+prog = mythtv
+button = c
+config = I
+end
+
+# Change display aspect ratio
+begin
+prog = mythtv
+button = zoom
+config = W
+end
+
+# Seek to previous commercial cut point
+begin
+prog = mythtv
+button =
+config = Q
+end
+
+# Seek to next commercial cut point
+begin
+prog = mythtv
+button =
+config = Z
+end
+
+# Numbers 0-9
+
+begin
+prog = mythtv
+button = 0
+config = 0
+end
+
+begin
+prog = mythtv
+button = 1
+config = 1
+end
+
+begin
+prog = mythtv
+button = 2
+config = 2
+end
+
+begin
+prog = mythtv
+button = 3
+config = 3
+end
+
+begin
+prog = mythtv
+button = 4
+config = 4
+end
+
+begin
+prog = mythtv
+button = 5
+config = 5
+end
+
+begin
+prog = mythtv
+button = 6
+config = 6
+end
+
+begin
+prog = mythtv
+button = 7
+config = 7
+end
+
+begin
+prog = mythtv
+button = 8
+config = 8
+end
+
+begin
+prog = mythtv
+button = 9
+config = 9
+end
+
+# Previous channel
+begin
+prog = mythtv
+button = h
+config = H
+end
+
+# Closed Captioning
+begin
+prog = mythtv
+button = f
+config = T
+end
+
+# Picture in Picture
+begin
+prog = mythtv
+button = g
+config = V
+end
+
+# Change channels on both cards
+begin
+prog = mythtv
+button =
+config = N
+end
+
+# Clear cutpoints in cutlist
+begin
+prog = mythtv
+button =
+config = Q
+end
+
+
+
+
+### MPlayer lirc setup
+
+# Show OSD
+begin
+prog = mplayer
+button = source
+config = osd
+end
+
+# Pause playback
+begin
+prog = mplayer
+button = play_pause
+config = pause
+end
+
+# Skip ahead a minute if playing
+# If paused, resume playing
+begin
+prog = mplayer
+button =
+config = seek +1
+end
+
+# Mute
+begin
+prog = mplayer
+button = mute
+config = mute
+end
+
+# Seek back 10 seconds
+begin
+prog = mplayer
+button = scan_rev
+config = seek -10
+end
+
+# Seek forward 30 seconds
+begin
+prog = mplayer
+button = seek_fwd
+config = seek +30
+end
+
+# Quit
+begin
+prog = mplayer
+button = stop
+config = quit
+end
+
+# Seek forward 10 minutes
+begin
+prog = mplayer
+button = chapter_fwd
+config = seek +600
+end
+
+# Seek backward 10 minutes
+begin
+prog = mplayer
+button = chapter_rev
+config = seek -600
+end
+
+# Toggle full-screen
+begin
+prog = mplayer
+button = zoom
+config = vo_fullscreen
+end
+
+
+
+### Xine lirc setup
+
+begin
+prog = xine
+button = play_pause
+config = Play
+end
+
+begin
+prog = xine
+button = stop
+config = Stop
+end
+
+begin
+prog = xine
+button = stop
+config = Quit
+end
+
+begin
+prog = xine
+button = play_pause
+config = Pause
+end
+
+begin
+prog = xine
+button = up
+config = EventUp
+end
+
+begin
+prog = xine
+button = down
+config = EventDown
+end
+
+begin
+prog = xine
+button = left
+config = EventLeft
+end
+
+begin
+prog = xine
+button = right
+config = EventRight
+end
+
+begin
+prog = xine
+button = select
+config = EventSelect
+end
+
+begin
+prog = xine
+button = a
+config = Menu
+end
+
+begin
+prog = xine
+button = seek_fwd
+#config = SpeedFaster
+config = SeekRelative+60
+end
+
+begin
+prog = xine
+button = seek_rev
+#config = SpeedSlower
+config = SeekRelative-60
+end
+
+begin
+prog = xine
+button = vol+
+config = Volume+
+end
+
+begin
+prog = xine
+button = vol-
+config = Volume-
+end
+
+begin
+prog = xine
+button = mute
+config = Mute
+end
+
+begin
+prog = xine
+button = stop
+config = RootMenu
+end
+
+begin
+prog = xine
+button = chapter_fwd
+config = EventNext
+end
+
+begin
+prog = xine
+button = chapter_rev
+config = EventPrior
+end
+
+begin
+prog = xine
+button = source
+config = OSDStreamInfos
+end \ No newline at end of file
diff --git a/abs/core-testing/system-templates/templates/remotes/Kworld_110/preview.jpg b/abs/core-testing/system-templates/templates/remotes/Kworld_110/preview.jpg
new file mode 100644
index 0000000..f83f474
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Kworld_110/preview.jpg
Binary files differ
diff --git a/abs/core-testing/system-templates/templates/remotes/Kworld_220/lircd-kworld220.conf b/abs/core-testing/system-templates/templates/remotes/Kworld_220/lircd-kworld220.conf
new file mode 100755
index 0000000..a483e7f
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Kworld_220/lircd-kworld220.conf
@@ -0,0 +1,80 @@
+#
+# this config file only works with a home-brew receiver!!!
+#
+
+#
+# this config file was automatically generated
+# using lirc-0.8.1(default) on Sun Jul 1 22:59:56 2007
+#
+# contributed by Bruce Schultz <brucejs71 at yahoo.com.au>
+#
+# brand: KWorld
+# model no. of remote control:
+# devices being controlled by this remote: DVB-T 220 tuner card
+#
+
+begin remote
+
+ name KWorld-DVBT-220
+ bits 16
+ flags SPACE_ENC|CONST_LENGTH
+ eps 30
+ aeps 100
+
+ header 9144 4394
+ one 673 1578
+ zero 673 453
+ ptrail 666
+ repeat 9146 2141
+ pre_data_bits 16
+ pre_data 0xDF
+ gap 108141
+ toggle_bit 0
+
+
+ begin codes
+ power 0x30CF
+ standby 0xB04F
+ sub_tv 0x7887
+ preview 0xF807
+ snap 0x38C7
+ shut_down 0xB847
+ 1 0x00FF
+ 2 0x807F
+ 3 0x40BF
+ 4 0xC03F
+ 5 0x20DF
+ 6 0xA05F
+ 7 0x609F
+ 8 0xE01F
+ 9 0x10EF
+ 0 0x50AF
+ numpad_up 0x906F
+ numpad_enter 0xD02F
+ mute 0x28D7
+ stereo 0xA857
+ source 0x6897
+ zoom 0xE817
+ min 0x18E7
+ left 0x48B7
+ right 0xC837
+ up 0x08F7
+ down 0x8877
+ select 0x708F
+ timeshift 0x9867
+ stop 0x58A7
+ rec 0xD827
+ scan_rev 0x02FD
+ scan_fwd 0x827D
+ play_pause 0x22DD
+ play_stop 0xA25D
+ chapter_rev 0x42BD
+ chapter_fwd 0xC23D
+ fun1 0x12ED
+ fun2 0x926D
+ fun3 0x52AD
+ fun4 0xD22D
+ end codes
+
+end remote
+
diff --git a/abs/core-testing/system-templates/templates/remotes/Kworld_220/lircrc-kworld220.txt b/abs/core-testing/system-templates/templates/remotes/Kworld_220/lircrc-kworld220.txt
new file mode 100755
index 0000000..702d238
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Kworld_220/lircrc-kworld220.txt
@@ -0,0 +1,482 @@
+# Channel Up
+begin
+prog = mythtv
+button = up
+config = Up
+end
+
+# Channel Down
+begin
+prog = mythtv
+button = down
+config = Down
+end
+
+# General Left
+begin
+prog = mythtv
+button =
+config = Left
+end
+
+# General Right
+begin
+prog = mythtv
+button =
+config = Right
+end
+
+ # LiveTV browse up channel
+begin
+prog = mythtv
+button = up
+config = Up
+end
+
+# LiveTV browse down channel
+begin
+prog = mythtv
+button = down
+config = Down
+end
+
+# Volume Up
+begin
+prog = mythtv
+button = right
+config = F11
+end
+
+# Volume Down
+begin
+prog = mythtv
+button = left
+config = F10
+end
+
+ # OK/Select
+begin
+prog = mythtv
+button = select
+config = Space
+end
+
+# Play
+begin
+prog = mythtv
+button = play_pause
+config = Return
+end
+
+# Stop
+begin
+prog = mythtv
+button = stop
+config = Esc
+end
+
+# Escape/Exit/Back
+begin
+prog = mythtv
+button =
+config = Esc
+end
+
+# Power Off/Exit
+begin
+prog = irexec
+button = power
+config = /usr/bin/mythpowerbutton.sh
+end
+
+# Pause
+begin
+prog = mythtv
+button = play_pause
+config = P
+end
+
+# Mute
+begin
+prog = mythtv
+button = mute
+config = |
+end
+
+# Fast forward (10 sec default)
+begin
+prog = mythtv
+button = scan_fwd
+config = Right
+end
+
+# Rewind (10 sec default)
+begin
+prog = mythtv
+button = scan_rev
+config = Left
+end
+
+# Skip forward (10 min default)
+begin
+prog = mythtv
+button = chapter_fwd
+config = PgDown
+end
+
+# Skip backward (10 min default)
+begin
+prog = mythtv
+button = chapter_rev
+config = PgUp
+end
+
+# Record
+begin
+prog = mythtv
+button = rec
+config = R
+end
+
+# Delete
+begin
+prog = mythtv
+button =
+config = D
+end
+
+# OSD browse
+begin
+prog = mythtv
+button =
+config = O
+end
+
+# Display EPG while in live TV,
+# View selected show while in EPG
+begin
+prog = mythtv
+button = fun1
+config = M
+end
+
+# Bring up OSD info
+begin
+prog = mythtv
+button = fun2
+config = I
+end
+
+# Change display aspect ratio
+begin
+prog = mythtv
+button = zoom
+config = W
+end
+
+# Seek to previous commercial cut point
+begin
+prog = mythtv
+button =
+config = Q
+end
+
+# Seek to next commercial cut point
+begin
+prog = mythtv
+button =
+config = Z
+end
+
+# Numbers 0-9
+
+begin
+prog = mythtv
+button = 0
+config = 0
+end
+
+begin
+prog = mythtv
+button = 1
+config = 1
+end
+
+begin
+prog = mythtv
+button = 2
+config = 2
+end
+
+begin
+prog = mythtv
+button = 3
+config = 3
+end
+
+begin
+prog = mythtv
+button = 4
+config = 4
+end
+
+begin
+prog = mythtv
+button = 5
+config = 5
+end
+
+begin
+prog = mythtv
+button = 6
+config = 6
+end
+
+begin
+prog = mythtv
+button = 7
+config = 7
+end
+
+begin
+prog = mythtv
+button = 8
+config = 8
+end
+
+begin
+prog = mythtv
+button = 9
+config = 9
+end
+
+# Previous channel
+begin
+prog = mythtv
+button = fun3
+config = H
+end
+
+# Closed Captioning
+begin
+prog = mythtv
+button =
+config = T
+end
+
+# Picture in Picture
+begin
+prog = mythtv
+button =
+config = V
+end
+
+# Change channels on both cards
+begin
+prog = mythtv
+button =
+config = N
+end
+
+# Clear cutpoints in cutlist
+begin
+prog = mythtv
+button =
+config = Q
+end
+
+
+
+
+### MPlayer lirc setup
+
+# Show OSD
+begin
+prog = mplayer
+button = source
+config = osd
+end
+
+# Pause playback
+begin
+prog = mplayer
+button = play_pause
+config = pause
+end
+
+# Skip ahead a minute if playing
+# If paused, resume playing
+begin
+prog = mplayer
+button =
+config = seek +1
+end
+
+# Mute
+begin
+prog = mplayer
+button = mute
+config = mute
+end
+
+# Seek back 10 seconds
+begin
+prog = mplayer
+button = scan_rev
+config = seek -10
+end
+
+# Seek forward 30 seconds
+begin
+prog = mplayer
+button = seek_fwd
+config = seek +30
+end
+
+# Quit
+begin
+prog = mplayer
+button = stop
+config = quit
+end
+
+# Seek forward 10 minutes
+begin
+prog = mplayer
+button = chapter_fwd
+config = seek +600
+end
+
+# Seek backward 10 minutes
+begin
+prog = mplayer
+button = chapter_rev
+config = seek -600
+end
+
+# Toggle full-screen
+begin
+prog = mplayer
+button = zoom
+config = vo_fullscreen
+end
+
+
+
+### Xine lirc setup
+
+begin
+prog = xine
+button = play_pause
+config = Play
+end
+
+begin
+prog = xine
+button = stop
+config = Stop
+end
+
+begin
+prog = xine
+button = stop
+config = Quit
+end
+
+begin
+prog = xine
+button = play_pause
+config = Pause
+end
+
+begin
+prog = xine
+button = up
+config = EventUp
+end
+
+begin
+prog = xine
+button = down
+config = EventDown
+end
+
+begin
+prog = xine
+button =
+config = EventLeft
+end
+
+begin
+prog = xine
+button =
+config = EventRight
+end
+
+begin
+prog = xine
+button = select
+config = EventSelect
+end
+
+begin
+prog = xine
+button = preview
+config = Menu
+end
+
+begin
+prog = xine
+button = seek_fwd
+#config = SpeedFaster
+config = SeekRelative+60
+end
+
+begin
+prog = xine
+button = seek_rev
+#config = SpeedSlower
+config = SeekRelative-60
+end
+
+begin
+prog = xine
+button = right
+config = Volume+
+end
+
+begin
+prog = xine
+button = left
+config = Volume-
+end
+
+begin
+prog = xine
+button = mute
+config = Mute
+end
+
+begin
+prog = xine
+button = stop
+config = RootMenu
+end
+
+begin
+prog = xine
+button = chapter_fwd
+config = EventNext
+end
+
+begin
+prog = xine
+button = chapter_rev
+config = EventPrior
+end
+
+begin
+prog = xine
+button = source
+config = OSDStreamInfos
+end \ No newline at end of file
diff --git a/abs/core-testing/system-templates/templates/remotes/Kworld_220/preview.jpg b/abs/core-testing/system-templates/templates/remotes/Kworld_220/preview.jpg
new file mode 100644
index 0000000..a034186
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Kworld_220/preview.jpg
Binary files differ
diff --git a/abs/core-testing/system-templates/templates/remotes/Kworld_310/lircd-kworld310.conf b/abs/core-testing/system-templates/templates/remotes/Kworld_310/lircd-kworld310.conf
new file mode 100755
index 0000000..7ee4bdd
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Kworld_310/lircd-kworld310.conf
@@ -0,0 +1,80 @@
+#
+# this config file only works with a home-brew receiver!!!
+#
+
+#
+# this config file was automatically generated
+# using lirc-0.8.1(default) on Sun Jul 1 23:10:43 2007
+#
+# contributed by Bruce Schultz <brucejs71 at yahoo.com.au>
+#
+# brand:KWorld
+# model no. of remote control:
+# devices being controlled by this remote: DVB-T PE310 tuner card
+#
+
+begin remote
+
+ name KWorld-DVBT-PE310
+ bits 16
+ flags SPACE_ENC|CONST_LENGTH
+ eps 30
+ aeps 100
+
+ header 9175 4402
+ one 677 1580
+ zero 677 452
+ ptrail 667
+ repeat 9177 2145
+ pre_data_bits 16
+ pre_data 0xDF
+ gap 108444
+ toggle_bit 0
+
+
+ begin codes
+ power 0x30CF
+ standby 0xB04F
+ sub_tv 0x7887
+ preview 0xF807
+ snap 0x38C7
+ shut_down 0xB847
+ 1 0x00FF
+ 2 0x807F
+ 3 0x40BF
+ 4 0xC03F
+ 5 0x20DF
+ 6 0xA05F
+ 7 0x609F
+ 8 0xE01F
+ 9 0x10EF
+ 0 0x50AF
+ numpad_up 0x906F
+ numpad_enter 0xD02F
+ mute 0x28D7
+ stereo 0xA857
+ source 0x6897
+ zoom 0xE817
+ min 0x18E7
+ left 0x48B7
+ right 0xC837
+ up 0x08F7
+ down 0x8877
+ select 0x708F
+ timeshift 0x9867
+ stop 0x58A7
+ rec 0xD827
+ scan_rev 0x02FD
+ scan_fwd 0x827D
+ play_pause 0x22DD
+ play_stop 0xA25D
+ chapter_rev 0x42BD
+ chapter_fwd 0xC23D
+ fun1 0x12ED
+ fun2 0x926D
+ fun3 0x52AD
+ fun4 0xD22D
+ end codes
+
+end remote
+
diff --git a/abs/core-testing/system-templates/templates/remotes/Kworld_310/lircrc-kworld310.txt b/abs/core-testing/system-templates/templates/remotes/Kworld_310/lircrc-kworld310.txt
new file mode 100755
index 0000000..702d238
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Kworld_310/lircrc-kworld310.txt
@@ -0,0 +1,482 @@
+# Channel Up
+begin
+prog = mythtv
+button = up
+config = Up
+end
+
+# Channel Down
+begin
+prog = mythtv
+button = down
+config = Down
+end
+
+# General Left
+begin
+prog = mythtv
+button =
+config = Left
+end
+
+# General Right
+begin
+prog = mythtv
+button =
+config = Right
+end
+
+ # LiveTV browse up channel
+begin
+prog = mythtv
+button = up
+config = Up
+end
+
+# LiveTV browse down channel
+begin
+prog = mythtv
+button = down
+config = Down
+end
+
+# Volume Up
+begin
+prog = mythtv
+button = right
+config = F11
+end
+
+# Volume Down
+begin
+prog = mythtv
+button = left
+config = F10
+end
+
+ # OK/Select
+begin
+prog = mythtv
+button = select
+config = Space
+end
+
+# Play
+begin
+prog = mythtv
+button = play_pause
+config = Return
+end
+
+# Stop
+begin
+prog = mythtv
+button = stop
+config = Esc
+end
+
+# Escape/Exit/Back
+begin
+prog = mythtv
+button =
+config = Esc
+end
+
+# Power Off/Exit
+begin
+prog = irexec
+button = power
+config = /usr/bin/mythpowerbutton.sh
+end
+
+# Pause
+begin
+prog = mythtv
+button = play_pause
+config = P
+end
+
+# Mute
+begin
+prog = mythtv
+button = mute
+config = |
+end
+
+# Fast forward (10 sec default)
+begin
+prog = mythtv
+button = scan_fwd
+config = Right
+end
+
+# Rewind (10 sec default)
+begin
+prog = mythtv
+button = scan_rev
+config = Left
+end
+
+# Skip forward (10 min default)
+begin
+prog = mythtv
+button = chapter_fwd
+config = PgDown
+end
+
+# Skip backward (10 min default)
+begin
+prog = mythtv
+button = chapter_rev
+config = PgUp
+end
+
+# Record
+begin
+prog = mythtv
+button = rec
+config = R
+end
+
+# Delete
+begin
+prog = mythtv
+button =
+config = D
+end
+
+# OSD browse
+begin
+prog = mythtv
+button =
+config = O
+end
+
+# Display EPG while in live TV,
+# View selected show while in EPG
+begin
+prog = mythtv
+button = fun1
+config = M
+end
+
+# Bring up OSD info
+begin
+prog = mythtv
+button = fun2
+config = I
+end
+
+# Change display aspect ratio
+begin
+prog = mythtv
+button = zoom
+config = W
+end
+
+# Seek to previous commercial cut point
+begin
+prog = mythtv
+button =
+config = Q
+end
+
+# Seek to next commercial cut point
+begin
+prog = mythtv
+button =
+config = Z
+end
+
+# Numbers 0-9
+
+begin
+prog = mythtv
+button = 0
+config = 0
+end
+
+begin
+prog = mythtv
+button = 1
+config = 1
+end
+
+begin
+prog = mythtv
+button = 2
+config = 2
+end
+
+begin
+prog = mythtv
+button = 3
+config = 3
+end
+
+begin
+prog = mythtv
+button = 4
+config = 4
+end
+
+begin
+prog = mythtv
+button = 5
+config = 5
+end
+
+begin
+prog = mythtv
+button = 6
+config = 6
+end
+
+begin
+prog = mythtv
+button = 7
+config = 7
+end
+
+begin
+prog = mythtv
+button = 8
+config = 8
+end
+
+begin
+prog = mythtv
+button = 9
+config = 9
+end
+
+# Previous channel
+begin
+prog = mythtv
+button = fun3
+config = H
+end
+
+# Closed Captioning
+begin
+prog = mythtv
+button =
+config = T
+end
+
+# Picture in Picture
+begin
+prog = mythtv
+button =
+config = V
+end
+
+# Change channels on both cards
+begin
+prog = mythtv
+button =
+config = N
+end
+
+# Clear cutpoints in cutlist
+begin
+prog = mythtv
+button =
+config = Q
+end
+
+
+
+
+### MPlayer lirc setup
+
+# Show OSD
+begin
+prog = mplayer
+button = source
+config = osd
+end
+
+# Pause playback
+begin
+prog = mplayer
+button = play_pause
+config = pause
+end
+
+# Skip ahead a minute if playing
+# If paused, resume playing
+begin
+prog = mplayer
+button =
+config = seek +1
+end
+
+# Mute
+begin
+prog = mplayer
+button = mute
+config = mute
+end
+
+# Seek back 10 seconds
+begin
+prog = mplayer
+button = scan_rev
+config = seek -10
+end
+
+# Seek forward 30 seconds
+begin
+prog = mplayer
+button = seek_fwd
+config = seek +30
+end
+
+# Quit
+begin
+prog = mplayer
+button = stop
+config = quit
+end
+
+# Seek forward 10 minutes
+begin
+prog = mplayer
+button = chapter_fwd
+config = seek +600
+end
+
+# Seek backward 10 minutes
+begin
+prog = mplayer
+button = chapter_rev
+config = seek -600
+end
+
+# Toggle full-screen
+begin
+prog = mplayer
+button = zoom
+config = vo_fullscreen
+end
+
+
+
+### Xine lirc setup
+
+begin
+prog = xine
+button = play_pause
+config = Play
+end
+
+begin
+prog = xine
+button = stop
+config = Stop
+end
+
+begin
+prog = xine
+button = stop
+config = Quit
+end
+
+begin
+prog = xine
+button = play_pause
+config = Pause
+end
+
+begin
+prog = xine
+button = up
+config = EventUp
+end
+
+begin
+prog = xine
+button = down
+config = EventDown
+end
+
+begin
+prog = xine
+button =
+config = EventLeft
+end
+
+begin
+prog = xine
+button =
+config = EventRight
+end
+
+begin
+prog = xine
+button = select
+config = EventSelect
+end
+
+begin
+prog = xine
+button = preview
+config = Menu
+end
+
+begin
+prog = xine
+button = seek_fwd
+#config = SpeedFaster
+config = SeekRelative+60
+end
+
+begin
+prog = xine
+button = seek_rev
+#config = SpeedSlower
+config = SeekRelative-60
+end
+
+begin
+prog = xine
+button = right
+config = Volume+
+end
+
+begin
+prog = xine
+button = left
+config = Volume-
+end
+
+begin
+prog = xine
+button = mute
+config = Mute
+end
+
+begin
+prog = xine
+button = stop
+config = RootMenu
+end
+
+begin
+prog = xine
+button = chapter_fwd
+config = EventNext
+end
+
+begin
+prog = xine
+button = chapter_rev
+config = EventPrior
+end
+
+begin
+prog = xine
+button = source
+config = OSDStreamInfos
+end \ No newline at end of file
diff --git a/abs/core-testing/system-templates/templates/remotes/Kworld_310/preview.jpg b/abs/core-testing/system-templates/templates/remotes/Kworld_310/preview.jpg
new file mode 100644
index 0000000..f024370
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Kworld_310/preview.jpg
Binary files differ
diff --git a/abs/core-testing/system-templates/templates/remotes/Kworld_DVBT/lircd-kworlddvbt.conf b/abs/core-testing/system-templates/templates/remotes/Kworld_DVBT/lircd-kworlddvbt.conf
new file mode 100755
index 0000000..425e107
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Kworld_DVBT/lircd-kworlddvbt.conf
@@ -0,0 +1,71 @@
+#
+# this config file was automatically generated
+# using lirc-0.6.6(sa1100) on Sun Feb 23 17:02:27 2003
+#
+# contributed by Denes Balatoni <pnis at coder.hu>
+# Modified by Daniel Foote <freefoote at dview dot net> to
+# work with remote that came with DVB-T card.
+#
+# brand: kworld
+# model no. of remote control: ?
+# devices being controlled by this remote: tv878r tuner card
+#
+
+begin remote
+
+ name KWorld_DVB-T
+ bits 16
+ flags SPACE_ENC|CONST_LENGTH
+ eps 30
+ aeps 100
+
+ header 8853 4526
+ one 533 1713
+ zero 533 589
+ ptrail 531
+ repeat 8853 2281
+ pre_data_bits 16
+ pre_data 0x61D6
+ gap 107839
+ toggle_bit 0
+
+
+ begin codes
+ ch- 0x0000000000007887
+ 7 0x000000000000E01F
+ preview 0x00000000000038C7
+ zoom 0x00000000000018E7
+ 3 0x000000000000C03F
+ 1 0x000000000000807F
+ epg 0x000000000000D02F
+ vol+ 0x000000000000D827
+ vol- 0x000000000000F807
+ 5 0x000000000000A05F
+ 9 0x000000000000906F
+ reset 0x000000000000A857
+ turnleft 0x000000000000E817
+ 6 0x000000000000609F
+ 0 0x00000000000050AF
+ power 0x00000000000048B7
+ scan 0x00000000000030CF
+ 2 0x00000000000040BF
+ mute 0x00000000000008F7
+ snap 0x000000000000C837
+ 4 0x00000000000020DF
+ turnup 0x00000000000000FF
+ 8 0x00000000000010EF
+ backward 0x0000000000008877
+ source 0x000000000000F00F
+ forward 0x0000000000009867
+ pip 0x00000000000028D7
+ ch- 0x000000000000E817
+ play 0x0000000000006897
+ ch+ 0x00000000000058A7
+ stop 0x000000000000B04F
+ function- 0x00000000000020DF
+ pause 0x000000000000708F
+ function+ 0x00000000000030CF
+ rec 0x000000000000B847
+ end codes
+
+end remote \ No newline at end of file
diff --git a/abs/core-testing/system-templates/templates/remotes/Kworld_DVBT/lircrc-kworlddvbt.txt b/abs/core-testing/system-templates/templates/remotes/Kworld_DVBT/lircrc-kworlddvbt.txt
new file mode 100755
index 0000000..70272b7
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Kworld_DVBT/lircrc-kworlddvbt.txt
@@ -0,0 +1,474 @@
+# Channel Up
+begin
+prog = mythtv
+button = ch+
+config = Up
+end
+
+# Channel Down
+begin
+prog = mythtv
+button = ch-
+config = Down
+end
+
+# General Left
+begin
+prog = mythtv
+button =
+config = Left
+end
+
+# General Right
+begin
+prog = mythtv
+button =
+config = Right
+end
+
+ # LiveTV browse up channel
+begin
+prog = mythtv
+button = ch+
+config = Up
+end
+
+# LiveTV browse down channel
+begin
+prog = mythtv
+button = ch-
+config = Down
+end
+
+# Volume Up
+begin
+prog = mythtv
+button = vol+
+config = F11
+end
+
+# Volume Down
+begin
+prog = mythtv
+button = vol-
+config = F10
+end
+
+ # OK/Select
+begin
+prog = mythtv
+button =
+config = Space
+end
+
+# Play
+begin
+prog = mythtv
+button = play
+config = Return
+end
+
+# Stop
+begin
+prog = mythtv
+button = stop
+config = Esc
+end
+
+# Escape/Exit/Back
+begin
+prog = mythtv
+button =
+config = Esc
+end
+
+# Power Off/Exit
+begin
+prog = irexec
+button = power
+config = /usr/bin/mythpowerbutton.sh
+end
+
+# Pause
+begin
+prog = mythtv
+button = pause
+config = P
+end
+
+# Mute
+begin
+prog = mythtv
+button = mute
+config = |
+end
+
+# Fast forward (10 sec default)
+begin
+prog = mythtv
+button = forward
+config = Right
+end
+
+# Rewind (10 sec default)
+begin
+prog = mythtv
+button = backward
+config = Left
+end
+
+# Skip forward (10 min default)
+begin
+prog = mythtv
+button = function+
+config = PgDown
+end
+
+# Skip backward (10 min default)
+begin
+prog = mythtv
+button = function-
+config = PgUp
+end
+
+# Record
+begin
+prog = mythtv
+button = rec
+config = R
+end
+
+# Delete
+begin
+prog = mythtv
+button =
+config = D
+end
+
+# OSD browse
+begin
+prog = mythtv
+button = preview
+config = O
+end
+
+# Display EPG while in live TV,
+# View selected show while in EPG
+begin
+prog = mythtv
+button = epg
+config = M
+end
+
+# Bring up OSD info
+begin
+prog = mythtv
+button = source
+config = I
+end
+
+# Change display aspect ratio
+begin
+prog = mythtv
+button = zoom
+config = W
+end
+
+# Seek to previous commercial cut point
+begin
+prog = mythtv
+button =
+config = Q
+end
+
+# Seek to next commercial cut point
+begin
+prog = mythtv
+button =
+config = Z
+end
+
+# Numbers 0-9
+
+begin
+prog = mythtv
+button = 0
+config = 0
+end
+
+begin
+prog = mythtv
+button = 1
+config = 1
+end
+
+begin
+prog = mythtv
+button = 2
+config = 2
+end
+
+begin
+prog = mythtv
+button = 3
+config = 3
+end
+
+begin
+prog = mythtv
+button = 4
+config = 4
+end
+
+begin
+prog = mythtv
+button = 5
+config = 5
+end
+
+begin
+prog = mythtv
+button = 6
+config = 6
+end
+
+begin
+prog = mythtv
+button = 7
+config = 7
+end
+
+begin
+prog = mythtv
+button = 8
+config = 8
+end
+
+begin
+prog = mythtv
+button = 9
+config = 9
+end
+
+# Previous channel
+begin
+prog = mythtv
+button = reset
+config = H
+end
+
+# Closed Captioning
+begin
+prog = mythtv
+button =
+config = T
+end
+
+# Picture in Picture
+begin
+prog = mythtv
+button = pip
+config = V
+end
+
+# Change channels on both cards
+begin
+prog = mythtv
+button = snap
+config = N
+end
+
+# Clear cutpoints in cutlist
+begin
+prog = mythtv
+button =
+config = Q
+end
+
+
+
+
+### MPlayer lirc setup
+
+# Show OSD
+begin
+prog = mplayer
+button = epg
+config = osd
+end
+
+# Pause playback
+begin
+prog = mplayer
+button = pause
+config = pause
+end
+
+# Mute
+begin
+prog = mplayer
+button = mute
+config = mute
+end
+
+# Seek back 10 seconds
+begin
+prog = mplayer
+button = backward
+config = seek -10
+end
+
+# Seek forward 30 seconds
+begin
+prog = mplayer
+button = forward
+config = seek +30
+end
+
+# Quit
+begin
+prog = mplayer
+button = stop
+config = quit
+end
+
+# Seek forward 10 minutes
+begin
+prog = mplayer
+button = function+
+config = seek +600
+end
+
+# Seek backward 10 minutes
+begin
+prog = mplayer
+button = function-
+config = seek -600
+end
+
+# Toggle full-screen
+begin
+prog = mplayer
+button = zoom
+config = vo_fullscreen
+end
+
+
+
+### Xine lirc setup
+
+begin
+prog = xine
+button = play
+config = Play
+end
+
+begin
+prog = xine
+button = stop
+config = Stop
+end
+
+begin
+prog = xine
+button = stop
+config = Quit
+end
+
+begin
+prog = xine
+button = pause
+config = Pause
+end
+
+begin
+prog = xine
+button = turnup
+config = EventUp
+end
+
+begin
+prog = xine
+button =
+config = EventDown
+end
+
+begin
+prog = xine
+button =
+config = EventLeft
+end
+
+begin
+prog = xine
+button =
+config = EventRight
+end
+
+begin
+prog = xine
+button =
+config = EventSelect
+end
+
+begin
+prog = xine
+button = epg
+config = Menu
+end
+
+begin
+prog = xine
+button = forward
+#config = SpeedFaster
+config = SeekRelative+60
+end
+
+begin
+prog = xine
+button = backward
+#config = SpeedSlower
+config = SeekRelative-60
+end
+
+begin
+prog = xine
+button = vol+
+config = Volume+
+end
+
+begin
+prog = xine
+button = vol-
+config = Volume-
+end
+
+begin
+prog = xine
+button = mute
+config = Mute
+end
+
+begin
+prog = xine
+button = stop
+config = RootMenu
+end
+
+begin
+prog = xine
+button = function+
+config = EventNext
+end
+
+begin
+prog = xine
+button = function-
+config = EventPrior
+end
+
+begin
+prog = xine
+button = source
+config = OSDStreamInfos
+end \ No newline at end of file
diff --git a/abs/core-testing/system-templates/templates/remotes/Kworld_DVBT/preview.jpg b/abs/core-testing/system-templates/templates/remotes/Kworld_DVBT/preview.jpg
new file mode 100644
index 0000000..a034186
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Kworld_DVBT/preview.jpg
Binary files differ
diff --git a/abs/core-testing/system-templates/templates/remotes/Kworld_tv878/lircd-kworldtv878.conf b/abs/core-testing/system-templates/templates/remotes/Kworld_tv878/lircd-kworldtv878.conf
new file mode 100755
index 0000000..5817bfd
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Kworld_tv878/lircd-kworldtv878.conf
@@ -0,0 +1,70 @@
+#
+# this config file was automatically generated
+# using lirc-0.6.6(sa1100) on Sun Feb 23 17:02:27 2003
+#
+# contributed by Denes Balatoni <pnis at coder.hu>
+#
+# brand: kworld
+# model no. of remote control: ?
+# devices being controlled by this remote: tv878r tuner card
+#
+
+begin remote
+
+ name kworld-878
+ bits 16
+ flags SPACE_ENC|CONST_LENGTH
+ eps 30
+ aeps 100
+
+ header 8853 4526
+ one 533 1713
+ zero 533 589
+ ptrail 531
+ repeat 8853 2281
+ pre_data_bits 16
+ pre_data 0x61D6
+ gap 107839
+ toggle_bit 0
+
+
+ begin codes
+ power 0x0000000000007887
+ source 0x000000000000E01F
+ scan 0x00000000000038C7
+ mute 0x00000000000018E7
+ tv/fm 0x000000000000C03F
+ 1 0x000000000000807F
+ 2 0x000000000000D02F
+ 3 0x000000000000D827
+ fm_scan+ 0x000000000000F807
+ 4 0x000000000000A05F
+ 5 0x000000000000906F
+ 6 0x000000000000A857
+ fm_scan- 0x000000000000E817
+ 7 0x000000000000609F
+ 8 0x00000000000050AF
+ 9 0x00000000000048B7
+ fm_freq+ 0x00000000000030CF
+ 0 0x00000000000040BF
+ + 0x00000000000008F7
+ recall 0x000000000000C837
+ fm-freq- 0x00000000000020DF
+ record 0x00000000000000FF
+ stop 0x00000000000010EF
+ play 0x0000000000008877
+ minimze 0x000000000000F00F
+ ch+ 0x000000000000F807
+ zoom 0x0000000000009867
+ vol- 0x00000000000028D7
+ ch- 0x000000000000E817
+ vol+ 0x0000000000006897
+ snapshot 0x00000000000058A7
+ mts 0x000000000000B04F
+ function- 0x00000000000020DF
+ function 0x000000000000708F
+ function+ 0x00000000000030CF
+ reset 0x000000000000B847
+ end codes
+
+end remote \ No newline at end of file
diff --git a/abs/core-testing/system-templates/templates/remotes/Kworld_tv878/lircrc-kworldv878.txt b/abs/core-testing/system-templates/templates/remotes/Kworld_tv878/lircrc-kworldv878.txt
new file mode 100755
index 0000000..e1ca297
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Kworld_tv878/lircrc-kworldv878.txt
@@ -0,0 +1,482 @@
+# Channel Up
+begin
+prog = mythtv
+button = ch+
+config = Up
+end
+
+# Channel Down
+begin
+prog = mythtv
+button = ch-
+config = Down
+end
+
+# General Left
+begin
+prog = mythtv
+button =
+config = Left
+end
+
+# General Right
+begin
+prog = mythtv
+button =
+config = Right
+end
+
+ # LiveTV browse up channel
+begin
+prog = mythtv
+button = ch+
+config = Up
+end
+
+# LiveTV browse down channel
+begin
+prog = mythtv
+button = ch-
+config = Down
+end
+
+# Volume Up
+begin
+prog = mythtv
+button = vol+
+config = F11
+end
+
+# Volume Down
+begin
+prog = mythtv
+button = vol-
+config = F10
+end
+
+ # OK/Select
+begin
+prog = mythtv
+button =
+config = Space
+end
+
+# Play
+begin
+prog = mythtv
+button = play
+config = Return
+end
+
+# Stop
+begin
+prog = mythtv
+button = stop
+config = Esc
+end
+
+# Escape/Exit/Back
+begin
+prog = mythtv
+button =
+config = Esc
+end
+
+# Power Off/Exit
+begin
+prog = irexec
+button = power
+config = /usr/bin/mythpowerbutton.sh
+end
+
+# Pause
+begin
+prog = mythtv
+button = snapshot
+config = P
+end
+
+# Mute
+begin
+prog = mythtv
+button = mute
+config = |
+end
+
+# Fast forward (10 sec default)
+begin
+prog = mythtv
+button = function+
+config = Right
+end
+
+# Rewind (10 sec default)
+begin
+prog = mythtv
+button = function-
+config = Left
+end
+
+# Skip forward (10 min default)
+begin
+prog = mythtv
+button =
+config = PgDown
+end
+
+# Skip backward (10 min default)
+begin
+prog = mythtv
+button =
+config = PgUp
+end
+
+# Record
+begin
+prog = mythtv
+button = record
+config = R
+end
+
+# Delete
+begin
+prog = mythtv
+button =
+config = D
+end
+
+# OSD browse
+begin
+prog = mythtv
+button =
+config = O
+end
+
+# Display EPG while in live TV,
+# View selected show while in EPG
+begin
+prog = mythtv
+button = function
+config = M
+end
+
+# Bring up OSD info
+begin
+prog = mythtv
+button = scan
+config = I
+end
+
+# Change display aspect ratio
+begin
+prog = mythtv
+button = minimze
+config = W
+end
+
+# Seek to previous commercial cut point
+begin
+prog = mythtv
+button =
+config = Q
+end
+
+# Seek to next commercial cut point
+begin
+prog = mythtv
+button =
+config = Z
+end
+
+# Numbers 0-9
+
+begin
+prog = mythtv
+button = 0
+config = 0
+end
+
+begin
+prog = mythtv
+button = 1
+config = 1
+end
+
+begin
+prog = mythtv
+button = 2
+config = 2
+end
+
+begin
+prog = mythtv
+button = 3
+config = 3
+end
+
+begin
+prog = mythtv
+button = 4
+config = 4
+end
+
+begin
+prog = mythtv
+button = 5
+config = 5
+end
+
+begin
+prog = mythtv
+button = 6
+config = 6
+end
+
+begin
+prog = mythtv
+button = 7
+config = 7
+end
+
+begin
+prog = mythtv
+button = 8
+config = 8
+end
+
+begin
+prog = mythtv
+button = 9
+config = 9
+end
+
+# Previous channel
+begin
+prog = mythtv
+button = recall
+config = H
+end
+
+# Closed Captioning
+begin
+prog = mythtv
+button =
+config = T
+end
+
+# Picture in Picture
+begin
+prog = mythtv
+button =
+config = V
+end
+
+# Change channels on both cards
+begin
+prog = mythtv
+button =
+config = N
+end
+
+# Clear cutpoints in cutlist
+begin
+prog = mythtv
+button =
+config = Q
+end
+
+
+
+
+### MPlayer lirc setup
+
+# Show OSD
+begin
+prog = mplayer
+button = scan
+config = osd
+end
+
+# Pause playback
+begin
+prog = mplayer
+button = snapshot
+config = pause
+end
+
+# Skip ahead a minute if playing
+# If paused, resume playing
+begin
+prog = mplayer
+button =
+config = seek +1
+end
+
+# Mute
+begin
+prog = mplayer
+button = mute
+config = mute
+end
+
+# Seek back 10 seconds
+begin
+prog = mplayer
+button = function-
+config = seek -10
+end
+
+# Seek forward 30 seconds
+begin
+prog = mplayer
+button = function+
+config = seek +30
+end
+
+# Quit
+begin
+prog = mplayer
+button = stop
+config = quit
+end
+
+# Seek forward 10 minutes
+begin
+prog = mplayer
+button =
+config = seek +600
+end
+
+# Seek backward 10 minutes
+begin
+prog = mplayer
+button =
+config = seek -600
+end
+
+# Toggle full-screen
+begin
+prog = mplayer
+button = zoom
+config = vo_fullscreen
+end
+
+
+
+### Xine lirc setup
+
+begin
+prog = xine
+button = play
+config = Play
+end
+
+begin
+prog = xine
+button = stop
+config = Stop
+end
+
+begin
+prog = xine
+button = stop
+config = Quit
+end
+
+begin
+prog = xine
+button = snapshot
+config = Pause
+end
+
+begin
+prog = xine
+button =
+config = EventUp
+end
+
+begin
+prog = xine
+button =
+config = EventDown
+end
+
+begin
+prog = xine
+button =
+config = EventLeft
+end
+
+begin
+prog = xine
+button =
+config = EventRight
+end
+
+begin
+prog = xine
+button =
+config = EventSelect
+end
+
+begin
+prog = xine
+button = source
+config = Menu
+end
+
+begin
+prog = xine
+button = function+
+#config = SpeedFaster
+config = SeekRelative+60
+end
+
+begin
+prog = xine
+button = function-
+#config = SpeedSlower
+config = SeekRelative-60
+end
+
+begin
+prog = xine
+button = vol+
+config = Volume+
+end
+
+begin
+prog = xine
+button = vol-
+config = Volume-
+end
+
+begin
+prog = xine
+button = mute
+config = Mute
+end
+
+begin
+prog = xine
+button = stop
+config = RootMenu
+end
+
+begin
+prog = xine
+button = +
+config = EventNext
+end
+
+begin
+prog = xine
+button = recall
+config = EventPrior
+end
+
+begin
+prog = xine
+button = reset
+config = OSDStreamInfos
+end \ No newline at end of file
diff --git a/abs/core-testing/system-templates/templates/remotes/Kworld_tv878/preview.jpg b/abs/core-testing/system-templates/templates/remotes/Kworld_tv878/preview.jpg
new file mode 100644
index 0000000..a034186
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Kworld_tv878/preview.jpg
Binary files differ
diff --git a/abs/core-testing/system-templates/templates/remotes/Leadtek_2000XP/lircd-leadtek2000xp.conf b/abs/core-testing/system-templates/templates/remotes/Leadtek_2000XP/lircd-leadtek2000xp.conf
new file mode 100755
index 0000000..4238a02
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Leadtek_2000XP/lircd-leadtek2000xp.conf
@@ -0,0 +1,77 @@
+# Please make this file available to others
+# by sending it to <lirc at bartelmus.de>
+#
+# this config file was automatically generated
+# using lirc-0.8.3-CVS(dev/input) on Tue Nov 6 17:04:54 2007
+#
+# contributed by: Jeff Kosowsky
+#
+# brand: LeadTek
+# model no. of remote control: Y0400046 (bundled with Winfast 2000XP Deluxe)
+# devices being controlled by this remote: LeadTek Winfast 2000XP Deluxe
+
+# brand: Leadtek
+# model: Y0400052 (bundeled with Winfast PVR2000 TV-card)
+#
+# Note: Only CH_UP, CH_DOWN, VOL_UP and VOL_DOWN will repeat. This
+# seems to be a limitation of the remote control.
+
+begin remote
+
+ name Leadtek_2000XP
+ bits 16
+ eps 30
+ aeps 100
+
+ one 0 0
+ zero 0 0
+ pre_data_bits 16
+ pre_data 0x8001
+ gap 423871
+ toggle_bit_mask 0x80010073
+
+ begin codes
+ POWER 0x0074
+ MTS 0x0188
+ TV/FM 0x0182
+ VIDEO 0x0189
+ DISPLAY 0x0166
+ CH+ 0x0192
+ CH- 0x0193
+ VOL- 0x0072
+ VOL+ 0x0073
+ FULLSCREEN 0x0174
+ TELETEXT 0x0184
+ SLEEP 0x008E
+ BOSSKEY 0x0163
+ MUTE 0x0071
+ RED 0x018E
+ GREEN 0x018F
+ YELLOW 0x0190
+ BLUE 0x0191
+ 1 0x0002
+ 2 0x0003
+ 3 0x0004
+ 4 0x0005
+ 5 0x0006
+ 6 0x0007
+ 7 0x0008
+ 8 0x0009
+ 9 0x000A
+ 0 0x000B
+ . 0x0034
+ FINETUNE+ 0x004E
+ FINETUNE- 0x004A
+ PIP 0x00E2
+ ENTER 0x001C
+ RECALL 0x0195
+ BACK 0x019C
+ PLAY 0x00A4
+ NEXT 0x0197
+ TIMESHIFTING 0x0169
+ STOP 0x0080
+ REC 0x00A7
+ SNAPSHOT 0x00EA
+ end codes
+
+end remote
diff --git a/abs/core-testing/system-templates/templates/remotes/Leadtek_2000XP/lircrc-leadtek2000xp.txt b/abs/core-testing/system-templates/templates/remotes/Leadtek_2000XP/lircrc-leadtek2000xp.txt
new file mode 100755
index 0000000..f16beb3
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Leadtek_2000XP/lircrc-leadtek2000xp.txt
@@ -0,0 +1,474 @@
+# Channel Up
+begin
+prog = mythtv
+button = CH+
+config = Up
+end
+
+# Channel Down
+begin
+prog = mythtv
+button = CH-
+config = Down
+end
+
+# General Left
+begin
+prog = mythtv
+button =
+config = Left
+end
+
+# General Right
+begin
+prog = mythtv
+button =
+config = Right
+end
+
+ # LiveTV browse up channel
+begin
+prog = mythtv
+button = FINETUNE+
+config = Up
+end
+
+# LiveTV browse down channel
+begin
+prog = mythtv
+button = FINETUNE-
+config = Down
+end
+
+# Volume Up
+begin
+prog = mythtv
+button = VOL+
+config = F11
+end
+
+# Volume Down
+begin
+prog = mythtv
+button = VOL-
+config = F10
+end
+
+ # OK/Select
+begin
+prog = mythtv
+button = ENTER
+config = Space
+end
+
+# Play
+begin
+prog = mythtv
+button = PLAY
+config = Return
+end
+
+# Stop
+begin
+prog = mythtv
+button = STOP
+config = Esc
+end
+
+# Escape/Exit/Back
+begin
+prog = mythtv
+button =
+config = Esc
+end
+
+# Power Off/Exit
+begin
+prog = irexec
+button = POWER
+config = /usr/bin/mythpowerbutton.sh
+end
+
+# Pause
+begin
+prog = mythtv
+button = SNAPSHOT
+config = P
+end
+
+# Mute
+begin
+prog = mythtv
+button = MUTE
+config = |
+end
+
+# Fast forward (10 sec default)
+begin
+prog = mythtv
+button = NEXT
+config = Right
+end
+
+# Rewind (10 sec default)
+begin
+prog = mythtv
+button = BACK
+config = Left
+end
+
+# Skip forward (10 min default)
+begin
+prog = mythtv
+button =
+config = PgDown
+end
+
+# Skip backward (10 min default)
+begin
+prog = mythtv
+button =
+config = PgUp
+end
+
+# Record
+begin
+prog = mythtv
+button = REC
+config = R
+end
+
+# Delete
+begin
+prog = mythtv
+button = RED
+config = D
+end
+
+# OSD browse
+begin
+prog = mythtv
+button =
+config = O
+end
+
+# Display EPG while in live TV,
+# View selected show while in EPG
+begin
+prog = mythtv
+button = GREEN
+config = M
+end
+
+# Bring up OSD info
+begin
+prog = mythtv
+button = YELLOW
+config = I
+end
+
+# Change display aspect ratio
+begin
+prog = mythtv
+button = DISPLAY
+config = W
+end
+
+# Seek to previous commercial cut point
+begin
+prog = mythtv
+button =
+config = Q
+end
+
+# Seek to next commercial cut point
+begin
+prog = mythtv
+button =
+config = Z
+end
+
+# Numbers 0-9
+
+begin
+prog = mythtv
+button = 0
+config = 0
+end
+
+begin
+prog = mythtv
+button = 1
+config = 1
+end
+
+begin
+prog = mythtv
+button = 2
+config = 2
+end
+
+begin
+prog = mythtv
+button = 3
+config = 3
+end
+
+begin
+prog = mythtv
+button = 4
+config = 4
+end
+
+begin
+prog = mythtv
+button = 5
+config = 5
+end
+
+begin
+prog = mythtv
+button = 6
+config = 6
+end
+
+begin
+prog = mythtv
+button = 7
+config = 7
+end
+
+begin
+prog = mythtv
+button = 8
+config = 8
+end
+
+begin
+prog = mythtv
+button = 9
+config = 9
+end
+
+# Previous channel
+begin
+prog = mythtv
+button = RECALL
+config = H
+end
+
+# Closed Captioning
+begin
+prog = mythtv
+button =
+config = T
+end
+
+# Picture in Picture
+begin
+prog = mythtv
+button = PIP
+config = V
+end
+
+# Change channels on both cards
+begin
+prog = mythtv
+button =
+config = N
+end
+
+# Clear cutpoints in cutlist
+begin
+prog = mythtv
+button = BLUE
+config = Q
+end
+
+
+
+
+### MPlayer lirc setup
+
+# Show OSD
+begin
+prog = mplayer
+button = DISPLAY
+config = osd
+end
+
+# Pause playback
+begin
+prog = mplayer
+button = SNAPSHOT
+config = pause
+end
+
+# Mute
+begin
+prog = mplayer
+button = MUTE
+config = mute
+end
+
+# Seek back 10 seconds
+begin
+prog = mplayer
+button = BACK
+config = seek -10
+end
+
+# Seek forward 30 seconds
+begin
+prog = mplayer
+button = NEXT
+config = seek +30
+end
+
+# Quit
+begin
+prog = mplayer
+button = STOP
+config = quit
+end
+
+# Seek forward 10 minutes
+begin
+prog = mplayer
+button = FINETUNE+
+config = seek +600
+end
+
+# Seek backward 10 minutes
+begin
+prog = mplayer
+button = FINETUNE-
+config = seek -600
+end
+
+# Toggle full-screen
+begin
+prog = mplayer
+button = FULLSCREEN
+config = vo_fullscreen
+end
+
+
+
+### Xine lirc setup
+
+begin
+prog = xine
+button = PLAY
+config = Play
+end
+
+begin
+prog = xine
+button = STOP
+config = Stop
+end
+
+begin
+prog = xine
+button = STOP
+config = Quit
+end
+
+begin
+prog = xine
+button = SNAPSHOT
+config = Pause
+end
+
+begin
+prog = xine
+button = CH+
+config = EventUp
+end
+
+begin
+prog = xine
+button = CH-
+config = EventDown
+end
+
+begin
+prog = xine
+button = FINETUNE-
+config = EventLeft
+end
+
+begin
+prog = xine
+button = FINETUNE+
+config = EventRight
+end
+
+begin
+prog = xine
+button = ENTER
+config = EventSelect
+end
+
+begin
+prog = xine
+button = DISPLAY
+config = Menu
+end
+
+begin
+prog = xine
+button = NEXT
+#config = SpeedFaster
+config = SeekRelative+60
+end
+
+begin
+prog = xine
+button = BACK
+#config = SpeedSlower
+config = SeekRelative-60
+end
+
+begin
+prog = xine
+button = VOL+
+config = Volume+
+end
+
+begin
+prog = xine
+button = VOL-
+config = Volume-
+end
+
+begin
+prog = xine
+button = MUTE
+config = Mute
+end
+
+begin
+prog = xine
+button = STOP
+config = RootMenu
+end
+
+begin
+prog = xine
+button =
+config = EventNext
+end
+
+begin
+prog = xine
+button =
+config = EventPrior
+end
+
+begin
+prog = xine
+button = TELETEXT
+config = OSDStreamInfos
+end \ No newline at end of file
diff --git a/abs/core-testing/system-templates/templates/remotes/Leadtek_2000XP/preview.jpg b/abs/core-testing/system-templates/templates/remotes/Leadtek_2000XP/preview.jpg
new file mode 100644
index 0000000..aeecf95
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Leadtek_2000XP/preview.jpg
Binary files differ
diff --git a/abs/core-testing/system-templates/templates/remotes/Leadtek_PVR/lircd-leadtekPVR.conf b/abs/core-testing/system-templates/templates/remotes/Leadtek_PVR/lircd-leadtekPVR.conf
new file mode 100755
index 0000000..460ddcf
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Leadtek_PVR/lircd-leadtekPVR.conf
@@ -0,0 +1,82 @@
+#
+# this config file was automatically generated
+# using lirc-0.8.2-CVS(default) on Thu Oct 25 23:27:29 2007
+#
+# contributed by
+#
+# brand: Leadtek
+# model no. of remote control:
+# devices being controlled by this remote: PVR2000
+#
+
+begin remote
+
+ name PVR2000
+ bits 16
+ flags SPACE_ENC|CONST_LENGTH
+ eps 30
+ aeps 100
+
+ header 8946 4535
+ one 530 1716
+ zero 530 593
+ ptrail 532
+ repeat 8945 2286
+ pre_data_bits 16
+ pre_data 0xC03F
+ gap 107856
+ toggle_bit_mask 0x0
+
+ begin codes
+ POWER 0x00FF
+ TV 0x6A95
+ FM 0xEA15
+ DVD 0x1AE5
+ RED 0xD22D
+ GREEN 0x32CD
+ YELLOW 0xB24D
+ BLUE 0x728D
+ TELETEXT 0xF807
+ SLEEP 0x02FD
+ MUTE 0x28D7
+ BOSS_KEY 0x926D
+ CH_UP 0x30CF
+ CH_DOWN 0x08F7
+ VOL_DOWN 0x10EF
+ VOL_UP 0x20DF
+ ENTER 0xC837
+ CC 0x0AF5
+ FULLSCREEN 0xC03F
+ MENU 0xF20D
+ SCAN 0x8A75
+ REPLAY 0x42BD
+ PLAY 0xC23D
+ SKIP 0x22DD
+ OSD 0x4AB5
+ BACK 0x2AD5
+ STOP 0x629D
+ FORWARD 0xAA55
+ LANGUAGE 0xCA35
+ 1 0xA05F
+ 2 0x609F
+ 3 0xE01F
+ 4 0x906F
+ 5 0x50AF
+ 6 0xD02F
+ 7 0xB04F
+ 8 0x708F
+ 9 0xF00F
+ 0 0x48B7
+ . 0x827D
+ RECALL 0x8877
+ VIDEO 0x7887
+ AUDIO 0xD827
+ DISPLAY 0x6897
+ SNAPSHOT 0x12ED
+ PIP 0x52AD
+ RECSTOP 0x629D
+ REC 0xE21D
+ TIMESHIFT 0xA25D
+ end codes
+
+end remote \ No newline at end of file
diff --git a/abs/core-testing/system-templates/templates/remotes/Leadtek_PVR/lircrc-leadtekPVR.txt b/abs/core-testing/system-templates/templates/remotes/Leadtek_PVR/lircrc-leadtekPVR.txt
new file mode 100755
index 0000000..a15ee21
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Leadtek_PVR/lircrc-leadtekPVR.txt
@@ -0,0 +1,474 @@
+# Channel Up
+begin
+prog = mythtv
+button = CH_UP
+config = Up
+end
+
+# Channel Down
+begin
+prog = mythtv
+button = CH_DOWN
+config = Down
+end
+
+# General Left
+begin
+prog = mythtv
+button =
+config = Left
+end
+
+# General Right
+begin
+prog = mythtv
+button =
+config = Right
+end
+
+ # LiveTV browse up channel
+begin
+prog = mythtv
+button = CH_UP
+config = Up
+end
+
+# LiveTV browse down channel
+begin
+prog = mythtv
+button = CH_DOWN
+config = Down
+end
+
+# Volume Up
+begin
+prog = mythtv
+button = VOL_UP
+config = F11
+end
+
+# Volume Down
+begin
+prog = mythtv
+button = VOL_DOWN
+config = F10
+end
+
+ # OK/Select
+begin
+prog = mythtv
+button = ENTER
+config = Space
+end
+
+# Play
+begin
+prog = mythtv
+button = PLAY
+config = Return
+end
+
+# Stop
+begin
+prog = mythtv
+button = STOP
+config = Esc
+end
+
+# Escape/Exit/Back
+begin
+prog = mythtv
+button =
+config = Esc
+end
+
+# Power Off/Exit
+begin
+prog = irexec
+button = POWER
+config = /usr/bin/mythpowerbutton.sh
+end
+
+# Pause
+begin
+prog = mythtv
+button = SNAPSHOT
+config = P
+end
+
+# Mute
+begin
+prog = mythtv
+button = MUTE
+config = |
+end
+
+# Fast forward (10 sec default)
+begin
+prog = mythtv
+button = FORWARD
+config = Right
+end
+
+# Rewind (10 sec default)
+begin
+prog = mythtv
+button = BACK
+config = Left
+end
+
+# Skip forward (10 min default)
+begin
+prog = mythtv
+button =
+config = PgDown
+end
+
+# Skip backward (10 min default)
+begin
+prog = mythtv
+button =
+config = PgUp
+end
+
+# Record
+begin
+prog = mythtv
+button = REC
+config = R
+end
+
+# Delete
+begin
+prog = mythtv
+button = RED
+config = D
+end
+
+# OSD browse
+begin
+prog = mythtv
+button =
+config = O
+end
+
+# Display EPG while in live TV,
+# View selected show while in EPG
+begin
+prog = mythtv
+button = GREEN
+config = M
+end
+
+# Bring up OSD info
+begin
+prog = mythtv
+button = YELLOW
+config = I
+end
+
+# Change display aspect ratio
+begin
+prog = mythtv
+button = DISPLAY
+config = W
+end
+
+# Seek to previous commercial cut point
+begin
+prog = mythtv
+button =
+config = Q
+end
+
+# Seek to next commercial cut point
+begin
+prog = mythtv
+button =
+config = Z
+end
+
+# Numbers 0-9
+
+begin
+prog = mythtv
+button = 0
+config = 0
+end
+
+begin
+prog = mythtv
+button = 1
+config = 1
+end
+
+begin
+prog = mythtv
+button = 2
+config = 2
+end
+
+begin
+prog = mythtv
+button = 3
+config = 3
+end
+
+begin
+prog = mythtv
+button = 4
+config = 4
+end
+
+begin
+prog = mythtv
+button = 5
+config = 5
+end
+
+begin
+prog = mythtv
+button = 6
+config = 6
+end
+
+begin
+prog = mythtv
+button = 7
+config = 7
+end
+
+begin
+prog = mythtv
+button = 8
+config = 8
+end
+
+begin
+prog = mythtv
+button = 9
+config = 9
+end
+
+# Previous channel
+begin
+prog = mythtv
+button = RECALL
+config = H
+end
+
+# Closed Captioning
+begin
+prog = mythtv
+button =
+config = T
+end
+
+# Picture in Picture
+begin
+prog = mythtv
+button = PIP
+config = V
+end
+
+# Change channels on both cards
+begin
+prog = mythtv
+button =
+config = N
+end
+
+# Clear cutpoints in cutlist
+begin
+prog = mythtv
+button = BLUE
+config = Q
+end
+
+
+
+
+### MPlayer lirc setup
+
+# Show OSD
+begin
+prog = mplayer
+button = DISPLAY
+config = osd
+end
+
+# Pause playback
+begin
+prog = mplayer
+button = SNAPSHOT
+config = pause
+end
+
+# Mute
+begin
+prog = mplayer
+button = MUTE
+config = mute
+end
+
+# Seek back 10 seconds
+begin
+prog = mplayer
+button = BACK
+config = seek -10
+end
+
+# Seek forward 30 seconds
+begin
+prog = mplayer
+button = FORWARD
+config = seek +30
+end
+
+# Quit
+begin
+prog = mplayer
+button = STOP
+config = quit
+end
+
+# Seek forward 10 minutes
+begin
+prog = mplayer
+button =
+config = seek +600
+end
+
+# Seek backward 10 minutes
+begin
+prog = mplayer
+button =
+config = seek -600
+end
+
+# Toggle full-screen
+begin
+prog = mplayer
+button = FULLSCREEN
+config = vo_fullscreen
+end
+
+
+
+### Xine lirc setup
+
+begin
+prog = xine
+button = PLAY
+config = Play
+end
+
+begin
+prog = xine
+button = STOP
+config = Stop
+end
+
+begin
+prog = xine
+button = STOP
+config = Quit
+end
+
+begin
+prog = xine
+button = SNAPSHOT
+config = Pause
+end
+
+begin
+prog = xine
+button = CH_UP
+config = EventUp
+end
+
+begin
+prog = xine
+button = CH_DOWN
+config = EventDown
+end
+
+begin
+prog = xine
+button =
+config = EventLeft
+end
+
+begin
+prog = xine
+button =
+config = EventRight
+end
+
+begin
+prog = xine
+button = ENTER
+config = EventSelect
+end
+
+begin
+prog = xine
+button = DISPLAY
+config = Menu
+end
+
+begin
+prog = xine
+button = FORWARD
+#config = SpeedFaster
+config = SeekRelative+60
+end
+
+begin
+prog = xine
+button = BACK
+#config = SpeedSlower
+config = SeekRelative-60
+end
+
+begin
+prog = xine
+button = VOL_UP
+config = Volume+
+end
+
+begin
+prog = xine
+button = VOL_DOWN
+config = Volume-
+end
+
+begin
+prog = xine
+button = MUTE
+config = Mute
+end
+
+begin
+prog = xine
+button = STOP
+config = RootMenu
+end
+
+begin
+prog = xine
+button =
+config = EventNext
+end
+
+begin
+prog = xine
+button =
+config = EventPrior
+end
+
+begin
+prog = xine
+button = TELETEXT
+config = OSDStreamInfos
+end \ No newline at end of file
diff --git a/abs/core-testing/system-templates/templates/remotes/Leadtek_PVR/preview.jpg b/abs/core-testing/system-templates/templates/remotes/Leadtek_PVR/preview.jpg
new file mode 100644
index 0000000..a034186
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Leadtek_PVR/preview.jpg
Binary files differ
diff --git a/abs/core-testing/system-templates/templates/remotes/Lifeview/lircd-lifeview.conf b/abs/core-testing/system-templates/templates/remotes/Lifeview/lircd-lifeview.conf
new file mode 100755
index 0000000..2df0bc6
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Lifeview/lircd-lifeview.conf
@@ -0,0 +1,48 @@
+begin remote
+ name Lifeview_trio
+ bits 16
+ eps 30
+ aeps 100
+ one 0 0
+ zero 0 0
+ gap 199996
+ pre_data_bits 16
+ pre_data 0x8001
+
+ begin codes
+ fullscreen 0x0174
+ power 0x0074
+ one 0x0002
+ two 0x0003
+ three 0x0004
+ four 0x0005
+ five 0x0006
+ six 0x0007
+ seven 0x0008
+ eight 0x0009
+ nine 0x000A
+ zero 0x000B
+ recall 0x0081
+ mute 0x0071
+ tv/radio 0x0181
+ sap 0x0170
+ ch+ 0x0192
+ vol- 0x0072
+ enter 0x001C
+ vol+ 0x0073
+ ch- 0x0193
+ pip 0x0175
+ source 0x0182
+ record/pause 0x00A7
+ timeshift/pause 0x0077
+ rewind 0x009E
+ play/pause 0x00A4
+ forward 0x009F
+ back 0x019C
+ stop 0x0080
+ next 0x0197
+ blank 0x0173
+
+ end codes
+
+end remote \ No newline at end of file
diff --git a/abs/core-testing/system-templates/templates/remotes/Lifeview/lircrc-lifeview.txt b/abs/core-testing/system-templates/templates/remotes/Lifeview/lircrc-lifeview.txt
new file mode 100755
index 0000000..845742a
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Lifeview/lircrc-lifeview.txt
@@ -0,0 +1,474 @@
+# Channel Up
+begin
+prog = mythtv
+button = ch+
+config = Up
+end
+
+# Channel Down
+begin
+prog = mythtv
+button = ch-
+config = Down
+end
+
+# General Left
+begin
+prog = mythtv
+button =
+config = Left
+end
+
+# General Right
+begin
+prog = mythtv
+button =
+config = Right
+end
+
+ # LiveTV browse up channel
+begin
+prog = mythtv
+button = ch+
+config = Up
+end
+
+# LiveTV browse down channel
+begin
+prog = mythtv
+button = ch-
+config = Down
+end
+
+# Volume Up
+begin
+prog = mythtv
+button = vol+
+config = F11
+end
+
+# Volume Down
+begin
+prog = mythtv
+button = vol-
+config = F10
+end
+
+ # OK/Select
+begin
+prog = mythtv
+button = enter
+config = Space
+end
+
+# Play
+begin
+prog = mythtv
+button = play/pause
+config = Return
+end
+
+# Stop
+begin
+prog = mythtv
+button = stop
+config = Esc
+end
+
+# Escape/Exit/Back
+begin
+prog = mythtv
+button =
+config = Esc
+end
+
+# Power Off/Exit
+begin
+prog = irexec
+button = power
+config = /usr/bin/mythpowerbutton.sh
+end
+
+# Pause
+begin
+prog = mythtv
+button = play/pause
+config = P
+end
+
+# Mute
+begin
+prog = mythtv
+button = mute
+config = |
+end
+
+# Fast forward (10 sec default)
+begin
+prog = mythtv
+button = forward
+config = Right
+end
+
+# Rewind (10 sec default)
+begin
+prog = mythtv
+button = rewind
+config = Left
+end
+
+# Skip forward (10 min default)
+begin
+prog = mythtv
+button = next
+config = PgDown
+end
+
+# Skip backward (10 min default)
+begin
+prog = mythtv
+button = back
+config = PgUp
+end
+
+# Record
+begin
+prog = mythtv
+button = record/pause
+config = R
+end
+
+# Delete
+begin
+prog = mythtv
+button =
+config = D
+end
+
+# OSD browse
+begin
+prog = mythtv
+button =
+config = O
+end
+
+# Display EPG while in live TV,
+# View selected show while in EPG
+begin
+prog = mythtv
+button = source
+config = M
+end
+
+# Bring up OSD info
+begin
+prog = mythtv
+button =
+config = I
+end
+
+# Change display aspect ratio
+begin
+prog = mythtv
+button = blank
+config = W
+end
+
+# Seek to previous commercial cut point
+begin
+prog = mythtv
+button =
+config = Q
+end
+
+# Seek to next commercial cut point
+begin
+prog = mythtv
+button =
+config = Z
+end
+
+# Numbers 0-9
+
+begin
+prog = mythtv
+button = zero
+config = 0
+end
+
+begin
+prog = mythtv
+button = one
+config = 1
+end
+
+begin
+prog = mythtv
+button = two
+config = 2
+end
+
+begin
+prog = mythtv
+button = three
+config = 3
+end
+
+begin
+prog = mythtv
+button = four
+config = 4
+end
+
+begin
+prog = mythtv
+button = five
+config = 5
+end
+
+begin
+prog = mythtv
+button = six
+config = 6
+end
+
+begin
+prog = mythtv
+button = seven
+config = 7
+end
+
+begin
+prog = mythtv
+button = eight
+config = 8
+end
+
+begin
+prog = mythtv
+button = nine
+config = 9
+end
+
+# Previous channel
+begin
+prog = mythtv
+button = recall
+config = H
+end
+
+# Closed Captioning
+begin
+prog = mythtv
+button =
+config = T
+end
+
+# Picture in Picture
+begin
+prog = mythtv
+button = pip
+config = V
+end
+
+# Change channels on both cards
+begin
+prog = mythtv
+button =
+config = N
+end
+
+# Clear cutpoints in cutlist
+begin
+prog = mythtv
+button =
+config = Q
+end
+
+
+
+
+### MPlayer lirc setup
+
+# Show OSD
+begin
+prog = mplayer
+button = source
+config = osd
+end
+
+# Pause playback
+begin
+prog = mplayer
+button = play/pause
+config = pause
+end
+
+# Mute
+begin
+prog = mplayer
+button = mute
+config = mute
+end
+
+# Seek back 10 seconds
+begin
+prog = mplayer
+button = rewind
+config = seek -10
+end
+
+# Seek forward 30 seconds
+begin
+prog = mplayer
+button = forward
+config = seek +30
+end
+
+# Quit
+begin
+prog = mplayer
+button = stop
+config = quit
+end
+
+# Seek forward 10 minutes
+begin
+prog = mplayer
+button = next
+config = seek +600
+end
+
+# Seek backward 10 minutes
+begin
+prog = mplayer
+button = back
+config = seek -600
+end
+
+# Toggle full-screen
+begin
+prog = mplayer
+button = fullscreen
+config = vo_fullscreen
+end
+
+
+
+### Xine lirc setup
+
+begin
+prog = xine
+button = play/pause
+config = Play
+end
+
+begin
+prog = xine
+button = stop
+config = Stop
+end
+
+begin
+prog = xine
+button = stop
+config = Quit
+end
+
+begin
+prog = xine
+button = play/pause
+config = Pause
+end
+
+begin
+prog = xine
+button = ch+
+config = EventUp
+end
+
+begin
+prog = xine
+button = ch-
+config = EventDown
+end
+
+begin
+prog = xine
+button =
+config = EventLeft
+end
+
+begin
+prog = xine
+button =
+config = EventRight
+end
+
+begin
+prog = xine
+button = enter
+config = EventSelect
+end
+
+begin
+prog = xine
+button = source
+config = Menu
+end
+
+begin
+prog = xine
+button = forward
+#config = SpeedFaster
+config = SeekRelative+60
+end
+
+begin
+prog = xine
+button = rewind
+#config = SpeedSlower
+config = SeekRelative-60
+end
+
+begin
+prog = xine
+button = vol+
+config = Volume+
+end
+
+begin
+prog = xine
+button = vol-
+config = Volume-
+end
+
+begin
+prog = xine
+button = mute
+config = Mute
+end
+
+begin
+prog = xine
+button = stop
+config = RootMenu
+end
+
+begin
+prog = xine
+button = next
+config = EventNext
+end
+
+begin
+prog = xine
+button = back
+config = EventPrior
+end
+
+begin
+prog = xine
+button = blank
+config = OSDStreamInfos
+end \ No newline at end of file
diff --git a/abs/core-testing/system-templates/templates/remotes/Lifeview/preview.jpg b/abs/core-testing/system-templates/templates/remotes/Lifeview/preview.jpg
new file mode 100644
index 0000000..a034186
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Lifeview/preview.jpg
Binary files differ
diff --git a/abs/core-testing/system-templates/templates/remotes/Medion_RF/lircd-medion-rf.conf b/abs/core-testing/system-templates/templates/remotes/Medion_RF/lircd-medion-rf.conf
new file mode 100755
index 0000000..8793475
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Medion_RF/lircd-medion-rf.conf
@@ -0,0 +1,82 @@
+# Please make this file available to others
+# by sending it to <lirc at bartelmus.de>
+#
+# this config file was automatically generated
+# using lirc-0.7.0(atiusb) on Sun Jan 23 11:18:36 2005
+#
+# contributed by Dirk Aust
+#
+# brand: Medion, Made by X10, China
+# Remote P/N: 20016398
+# Receiver P/N: 20016397
+
+begin remote
+
+ name Medion
+ bits 40
+ eps 30
+ aeps 100
+
+ one 0 0
+ zero 0 0
+ gap 139873
+ toggle_bit 0
+
+
+ begin codes
+ TV 0x00000014012C0000
+ VCR 0x00000014022D0000
+ DVD 0x00000014D9040000
+ MUSIC 0x00000014DB060000
+ RADIO 0x00000014032E0000
+ PHOTO 0x00000014DA050000
+ TV_PREVIEW 0x00000014042F0000
+ CHANNEL_LIST 0x0000001405300000
+ SETUP 0x00000014F01B0000
+ VIDEO_DESKTOP 0x0000001406310000
+ CHAN+ 0x00000014E00B0000
+ VOL- 0x00000014DD080000
+ MUTE 0x00000014D5000000
+ VOL+ 0x00000014DE090000
+ CHAN- 0x00000014E10C0000
+ RED 0x0000001407320000
+ GREEN 0x0000001408330000
+ YELLOW 0x0000001409340000
+ BLUE 0x000000140A350000
+ TXT 0x00000014FE290000
+ 1 0x00000014E20D0000
+ 2 0x00000014E30E0000
+ 3 0x00000014E40F0000
+ 4 0x00000014E5100000
+ 5 0x00000014E6110000
+ 6 0x00000014E7120000
+ 7 0x00000014E8130000
+ 8 0x00000014E9140000
+ 9 0x00000014EA150000
+ TV/RADIO 0x00000014F11C0000
+ 0 0x00000014EC170000
+ DELETE 0x00000014F5200000
+ RENAME 0x000000140B360000
+ SNAPSHOT 0x00000014ED180000
+ UP 0x00000014EF1A0000
+ LEFT 0x00000014F21D0000
+ OK 0x00000014F31E0000
+ RIGHT 0x00000014F41F0000
+ DOWN 0x00000014F7220000
+ ACQ_IMAGE 0x000000140C370000
+ EDIT_IMAGE 0x000000140D380000
+ REW 0x00000014F9240000
+ PLAY 0x00000014FA250000
+ FFW 0x00000014FB260000
+ RECORD 0x00000014FC270000
+ STOP 0x00000014FD280000
+ PAUSE 0x00000014FE290000
+ PREV 0x00000014F6210000
+ FULL 0x000000140E390000
+ NEXT 0x00000014F8230000
+ DVD_MENU 0x00000014EE190000
+ DVD_AUDIO 0x000000140F3A0000
+ POWER 0x00000014D7020000
+ end codes
+
+end remote \ No newline at end of file
diff --git a/abs/core-testing/system-templates/templates/remotes/Medion_RF/lircrc-medion-rf.txt b/abs/core-testing/system-templates/templates/remotes/Medion_RF/lircrc-medion-rf.txt
new file mode 100755
index 0000000..cc69f96
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Medion_RF/lircrc-medion-rf.txt
@@ -0,0 +1,474 @@
+# Channel Up
+begin
+prog = mythtv
+button = CH+
+config = Up
+end
+
+# Channel Down
+begin
+prog = mythtv
+button = CH-
+config = Down
+end
+
+# General Left
+begin
+prog = mythtv
+button = LEFT
+config = Left
+end
+
+# General Right
+begin
+prog = mythtv
+button = RIGHT
+config = Right
+end
+
+ # LiveTV browse up channel
+begin
+prog = mythtv
+button = UP
+config = Up
+end
+
+# LiveTV browse down channel
+begin
+prog = mythtv
+button = DOWN
+config = Down
+end
+
+# Volume Up
+begin
+prog = mythtv
+button = VOL+
+config = F11
+end
+
+# Volume Down
+begin
+prog = mythtv
+button = VOL-
+config = F10
+end
+
+ # OK/Select
+begin
+prog = mythtv
+button = OK
+config = Space
+end
+
+# Play
+begin
+prog = mythtv
+button = PLAY_PAUSE
+config = Return
+end
+
+# Stop
+begin
+prog = mythtv
+button = STOP
+config = Esc
+end
+
+# Escape/Exit/Back
+begin
+prog = mythtv
+button =
+config = Esc
+end
+
+# Power Off/Exit
+begin
+prog = irexec
+button = PC
+config = /usr/bin/mythpowerbutton.sh
+end
+
+# Pause
+begin
+prog = mythtv
+button = PLAY_PAUSE
+config = P
+end
+
+# Mute
+begin
+prog = mythtv
+button = MUTE
+config = |
+end
+
+# Fast forward (10 sec default)
+begin
+prog = mythtv
+button = FFWD
+config = Right
+end
+
+# Rewind (10 sec default)
+begin
+prog = mythtv
+button = FRWND
+config = Left
+end
+
+# Skip forward (10 min default)
+begin
+prog = mythtv
+button = NEXT
+config = PgDown
+end
+
+# Skip backward (10 min default)
+begin
+prog = mythtv
+button = PREV
+config = PgUp
+end
+
+# Record
+begin
+prog = mythtv
+button = RECORD
+config = R
+end
+
+# Delete
+begin
+prog = mythtv
+button =
+config = D
+end
+
+# OSD browse
+begin
+prog = mythtv
+button =
+config = O
+end
+
+# Display EPG while in live TV,
+# View selected show while in EPG
+begin
+prog = mythtv
+button =
+config = M
+end
+
+# Bring up OSD info
+begin
+prog = mythtv
+button =
+config = I
+end
+
+# Change display aspect ratio
+begin
+prog = mythtv
+button =
+config = W
+end
+
+# Seek to previous commercial cut point
+begin
+prog = mythtv
+button =
+config = Q
+end
+
+# Seek to next commercial cut point
+begin
+prog = mythtv
+button =
+config = Z
+end
+
+# Numbers 0-9
+
+begin
+prog = mythtv
+button = 0
+config = 0
+end
+
+begin
+prog = mythtv
+button = 1
+config = 1
+end
+
+begin
+prog = mythtv
+button = 2
+config = 2
+end
+
+begin
+prog = mythtv
+button = 3
+config = 3
+end
+
+begin
+prog = mythtv
+button = 4
+config = 4
+end
+
+begin
+prog = mythtv
+button = 5
+config = 5
+end
+
+begin
+prog = mythtv
+button = 6
+config = 6
+end
+
+begin
+prog = mythtv
+button = 7
+config = 7
+end
+
+begin
+prog = mythtv
+button = 8
+config = 8
+end
+
+begin
+prog = mythtv
+button = 9
+config = 9
+end
+
+# Previous channel
+begin
+prog = mythtv
+button = RC
+config = H
+end
+
+# Closed Captioning
+begin
+prog = mythtv
+button =
+config = T
+end
+
+# Picture in Picture
+begin
+prog = mythtv
+button =
+config = V
+end
+
+# Change channels on both cards
+begin
+prog = mythtv
+button =
+config = N
+end
+
+# Clear cutpoints in cutlist
+begin
+prog = mythtv
+button =
+config = Q
+end
+
+
+
+
+### MPlayer lirc setup
+
+# Show OSD
+begin
+prog = mplayer
+button =
+config = osd
+end
+
+# Pause playback
+begin
+prog = mplayer
+button = PLAY_PAUSE
+config = pause
+end
+
+# Mute
+begin
+prog = mplayer
+button = MUTE
+config = mute
+end
+
+# Seek back 10 seconds
+begin
+prog = mplayer
+button = FRWND
+config = seek -10
+end
+
+# Seek forward 30 seconds
+begin
+prog = mplayer
+button = FFWD
+config = seek +30
+end
+
+# Quit
+begin
+prog = mplayer
+button = STOP
+config = quit
+end
+
+# Seek forward 10 minutes
+begin
+prog = mplayer
+button = NEXT
+config = seek +600
+end
+
+# Seek backward 10 minutes
+begin
+prog = mplayer
+button = PREV
+config = seek -600
+end
+
+# Toggle full-screen
+begin
+prog = mplayer
+button =
+config = vo_fullscreen
+end
+
+
+
+### Xine lirc setup
+
+begin
+prog = xine
+button = PLAY_PAUSE
+config = Play
+end
+
+begin
+prog = xine
+button = STOP
+config = Stop
+end
+
+begin
+prog = xine
+button = STOP
+config = Quit
+end
+
+begin
+prog = xine
+button = PLAY_PAUSE
+config = Pause
+end
+
+begin
+prog = xine
+button = UP
+config = EventUp
+end
+
+begin
+prog = xine
+button = DOWN
+config = EventDown
+end
+
+begin
+prog = xine
+button = LEFT
+config = EventLeft
+end
+
+begin
+prog = xine
+button = RIGHT
+config = EventRight
+end
+
+begin
+prog = xine
+button = OK
+config = EventSelect
+end
+
+begin
+prog = xine
+button =
+config = Menu
+end
+
+begin
+prog = xine
+button = FFWD
+#config = SpeedFaster
+config = SeekRelative+60
+end
+
+begin
+prog = xine
+button = FRWND
+#config = SpeedSlower
+config = SeekRelative-60
+end
+
+begin
+prog = xine
+button = VOL+
+config = Volume+
+end
+
+begin
+prog = xine
+button = VOL-
+config = Volume-
+end
+
+begin
+prog = xine
+button = MUTE
+config = Mute
+end
+
+begin
+prog = xine
+button = STOP
+config = RootMenu
+end
+
+begin
+prog = xine
+button = NEXT
+config = EventNext
+end
+
+begin
+prog = xine
+button = PREV
+config = EventPrior
+end
+
+begin
+prog = xine
+button =
+config = OSDStreamInfos
+end \ No newline at end of file
diff --git a/abs/core-testing/system-templates/templates/remotes/Medion_RF/preview.jpg b/abs/core-testing/system-templates/templates/remotes/Medion_RF/preview.jpg
new file mode 100644
index 0000000..a034186
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Medion_RF/preview.jpg
Binary files differ
diff --git a/abs/core-testing/system-templates/templates/remotes/Medion_X10_8080/lircd-medionx10-8080.conf b/abs/core-testing/system-templates/templates/remotes/Medion_X10_8080/lircd-medionx10-8080.conf
new file mode 100755
index 0000000..68c9179
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Medion_X10_8080/lircd-medionx10-8080.conf
@@ -0,0 +1,68 @@
+begin remote
+ name Medion_8080
+ bits 16
+ eps 30
+ aeps 100
+ one 0 0
+ zero 0 0
+ gap 139996
+ pre_data_bits 8
+ pre_data 0x14
+
+ begin codes
+ dvdaudio 0x0F3A
+ power 0xD702
+ dvdmenu 0xEE19
+ ff 0xF823
+ fullscreen 0x0E39
+ bb 0xF621
+ pause 0xFE29
+ stop 0xFD28
+ rec 0xFC27
+ f 0xFB26
+ play 0xFA25
+ b 0xF924
+ editimage 0x0D38
+ acquireimage 0x0C37
+ ok 0xF31E
+ right 0xF41F
+ left 0xF21D
+ down 0xF722
+ up 0xEF1A
+ snapshot 0xED18
+ rename 0x0B36
+ delete 0xF520
+ tvradio 0xF11C
+ 0 0xEC17
+ 9 0xEA15
+ 8 0xE914
+ 7 0xE813
+ 6 0xE712
+ 5 0xE611
+ 4 0xE510
+ 3 0xE40F
+ 2 0xE30E
+ 1 0xE20D
+ txt 0xEB16
+ blue 0x0A35
+ yellow 0x0934
+ green 0x0833
+ red 0x0732
+ vol+ 0xDE09
+ vol- 0xDD08
+ chan- 0xE10C
+ chan+ 0xE00B
+ videodesktop 0x0631
+ setup 0xF01B
+ channellist 0x0530
+ tvpreview 0x042F
+ photo 0xDA05
+ radio 0x032E
+ music 0xDB06
+ dvd 0xD904
+ vcr 0x022D
+ tv 0x012C
+
+ end codes
+
+end remote \ No newline at end of file
diff --git a/abs/core-testing/system-templates/templates/remotes/Medion_X10_8080/lircrc-medionx10-8080.txt b/abs/core-testing/system-templates/templates/remotes/Medion_X10_8080/lircrc-medionx10-8080.txt
new file mode 100755
index 0000000..2476f76
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Medion_X10_8080/lircrc-medionx10-8080.txt
@@ -0,0 +1,474 @@
+# Channel Up
+begin
+prog = mythtv
+button = chan+
+config = Up
+end
+
+# Channel Down
+begin
+prog = mythtv
+button = chan-
+config = Down
+end
+
+# General Left
+begin
+prog = mythtv
+button = left
+config = Left
+end
+
+# General Right
+begin
+prog = mythtv
+button = right
+config = Right
+end
+
+ # LiveTV browse up channel
+begin
+prog = mythtv
+button = up
+config = Up
+end
+
+# LiveTV browse down channel
+begin
+prog = mythtv
+button = down
+config = Down
+end
+
+# Volume Up
+begin
+prog = mythtv
+button = vol+
+config = F11
+end
+
+# Volume Down
+begin
+prog = mythtv
+button = vol-
+config = F10
+end
+
+ # OK/Select
+begin
+prog = mythtv
+button = ok
+config = Space
+end
+
+# Play
+begin
+prog = mythtv
+button = play
+config = Return
+end
+
+# Stop
+begin
+prog = mythtv
+button = stop
+config = Esc
+end
+
+# Escape/Exit/Back
+begin
+prog = mythtv
+button =
+config = Esc
+end
+
+# Power Off/Exit
+begin
+prog = irexec
+button = power
+config = /usr/bin/mythpowerbutton.sh
+end
+
+# Pause
+begin
+prog = mythtv
+button = pause
+config = P
+end
+
+# Mute
+begin
+prog = mythtv
+button =
+config = |
+end
+
+# Fast forward (10 sec default)
+begin
+prog = mythtv
+button = ff
+config = Right
+end
+
+# Rewind (10 sec default)
+begin
+prog = mythtv
+button = bb
+config = Left
+end
+
+# Skip forward (10 min default)
+begin
+prog = mythtv
+button =
+config = PgDown
+end
+
+# Skip backward (10 min default)
+begin
+prog = mythtv
+button =
+config = PgUp
+end
+
+# Record
+begin
+prog = mythtv
+button = rec
+config = R
+end
+
+# Delete
+begin
+prog = mythtv
+button = delete
+config = D
+end
+
+# OSD browse
+begin
+prog = mythtv
+button = tvpreview
+config = O
+end
+
+# Display EPG while in live TV,
+# View selected show while in EPG
+begin
+prog = mythtv
+button = channellist
+config = M
+end
+
+# Bring up OSD info
+begin
+prog = mythtv
+button = setup
+config = I
+end
+
+# Change display aspect ratio
+begin
+prog = mythtv
+button = fullscreen
+config = W
+end
+
+# Seek to previous commercial cut point
+begin
+prog = mythtv
+button =
+config = Q
+end
+
+# Seek to next commercial cut point
+begin
+prog = mythtv
+button =
+config = Z
+end
+
+# Numbers 0-9
+
+begin
+prog = mythtv
+button = 0
+config = 0
+end
+
+begin
+prog = mythtv
+button = 1
+config = 1
+end
+
+begin
+prog = mythtv
+button = 2
+config = 2
+end
+
+begin
+prog = mythtv
+button = 3
+config = 3
+end
+
+begin
+prog = mythtv
+button = 4
+config = 4
+end
+
+begin
+prog = mythtv
+button = 5
+config = 5
+end
+
+begin
+prog = mythtv
+button = 6
+config = 6
+end
+
+begin
+prog = mythtv
+button = 7
+config = 7
+end
+
+begin
+prog = mythtv
+button = 8
+config = 8
+end
+
+begin
+prog = mythtv
+button = 9
+config = 9
+end
+
+# Previous channel
+begin
+prog = mythtv
+button = snapshot
+config = H
+end
+
+# Closed Captioning
+begin
+prog = mythtv
+button = txt
+config = T
+end
+
+# Picture in Picture
+begin
+prog = mythtv
+button = pip
+config = V
+end
+
+# Change channels on both cards
+begin
+prog = mythtv
+button =
+config = N
+end
+
+# Clear cutpoints in cutlist
+begin
+prog = mythtv
+button =
+config = Q
+end
+
+
+
+
+### MPlayer lirc setup
+
+# Show OSD
+begin
+prog = mplayer
+button = tvpreview
+config = osd
+end
+
+# Pause playback
+begin
+prog = mplayer
+button = play
+config = pause
+end
+
+# Mute
+begin
+prog = mplayer
+button =
+config = mute
+end
+
+# Seek back 10 seconds
+begin
+prog = mplayer
+button = bb
+config = seek -10
+end
+
+# Seek forward 30 seconds
+begin
+prog = mplayer
+button = ff
+config = seek +30
+end
+
+# Quit
+begin
+prog = mplayer
+button = stop
+config = quit
+end
+
+# Seek forward 10 minutes
+begin
+prog = mplayer
+button =
+config = seek +600
+end
+
+# Seek backward 10 minutes
+begin
+prog = mplayer
+button =
+config = seek -600
+end
+
+# Toggle full-screen
+begin
+prog = mplayer
+button = fullscreen
+config = vo_fullscreen
+end
+
+
+
+### Xine lirc setup
+
+begin
+prog = xine
+button = play
+config = Play
+end
+
+begin
+prog = xine
+button = stop
+config = Stop
+end
+
+begin
+prog = xine
+button = stop
+config = Quit
+end
+
+begin
+prog = xine
+button = pause
+config = Pause
+end
+
+begin
+prog = xine
+button = chan+
+config = EventUp
+end
+
+begin
+prog = xine
+button = chan-
+config = EventDown
+end
+
+begin
+prog = xine
+button = left
+config = EventLeft
+end
+
+begin
+prog = xine
+button = right
+config = EventRight
+end
+
+begin
+prog = xine
+button = ok
+config = EventSelect
+end
+
+begin
+prog = xine
+button = tvpreview
+config = Menu
+end
+
+begin
+prog = xine
+button = forward
+#config = ff
+config = SeekRelative+60
+end
+
+begin
+prog = xine
+button = rewind
+#config = bb
+config = SeekRelative-60
+end
+
+begin
+prog = xine
+button = vol+
+config = Volume+
+end
+
+begin
+prog = xine
+button = vol-
+config = Volume-
+end
+
+begin
+prog = xine
+button =
+config = Mute
+end
+
+begin
+prog = xine
+button = stop
+config = RootMenu
+end
+
+begin
+prog = xine
+button =
+config = EventNext
+end
+
+begin
+prog = xine
+button =
+config = EventPrior
+end
+
+begin
+prog = xine
+button = channellist
+config = OSDStreamInfos
+end \ No newline at end of file
diff --git a/abs/core-testing/system-templates/templates/remotes/Medion_X10_8080/preview.jpg b/abs/core-testing/system-templates/templates/remotes/Medion_X10_8080/preview.jpg
new file mode 100644
index 0000000..a034186
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Medion_X10_8080/preview.jpg
Binary files differ
diff --git a/abs/core-testing/system-templates/templates/remotes/Medion_X10_8802/lircd-medionx10-8802.conf b/abs/core-testing/system-templates/templates/remotes/Medion_X10_8802/lircd-medionx10-8802.conf
new file mode 100755
index 0000000..f897a64
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Medion_X10_8802/lircd-medionx10-8802.conf
@@ -0,0 +1,126 @@
+#
+# this config file was hand crafted for
+# lirc-0.8.0(atiusb) on Sun June 11 22:49:23 2006
+#
+# contributed by Ted Schipper <t.schipper@tsux.org>
+#
+# brand: Medion 8802
+# Remote P/N: 20029724
+# Receiver P/N: 20024123
+# model no. of remote control: Medion RF remote
+# devices being controlled by this remote: Medion 8802 Multimedia Home Entertainment Design Center
+#
+
+begin remote
+
+ name Medion_8802
+ bits 16
+ eps 30
+ aeps 100
+
+ one 0 0
+ zero 0 0
+ pre_data_bits 8
+ pre_data 0x14
+ post_data_bits 16
+ post_data 0x0
+ gap 227999
+ min_repeat 5
+ toggle_bit 0
+
+
+ begin codes
+ Line_TV 0x719C
+ Line_TV 0xF11C
+ Rec_TV 0x6D98
+ Rec_TV 0xED18
+ On/Standby 0xD702
+ Photo 0x5A85
+ Photo 0xDA05
+ Music 0x5B86
+ Music 0xDB06
+ Guide 0x0631
+ Guide 0x86B1
+ DVD_Menu 0x5984
+ DVD_Menu 0xD904
+ Video 0x022D
+ Video 0x82AD
+ Text 0x6B96
+ Text 0xEB16
+ RED/Audio 0x0732
+ RED/Audio 0x87B2
+ YELLOW/Angle 0x0934
+ YELLOW/Angle 0x89B4
+ BLUE/Title 0x0A35
+ BLUE/Title 0x8AB5
+ GREEN/Subtitle 0x0833
+ GREEN/Subtitle 0x88B3
+ Vol+ 0x5E89
+ Vol+ 0xDE09
+ Vol- 0x5D88
+ Vol- 0xDD08
+ Up 0x6F9A
+ Up 0xEF1A
+ Down 0x77A2
+ Down 0xF722
+ Left 0x729D
+ Left 0xF21D
+ Right 0x749F
+ Right 0xF41F
+ Ok 0x739E
+ Ok 0xF31E
+ Mute 0x5580
+ Mute 0xD500
+ Ch+ 0x608B
+ Ch+ 0xE00B
+ Ch- 0x618C
+ Ch- 0xE10C
+ 1 0x628D
+ 1 0xE20D
+ 2 0x638E
+ 2 0xE30E
+ 3 0x648F
+ 3 0xE40F
+ 4 0x6590
+ 4 0xE510
+ 5 0x6691
+ 5 0xE611
+ 6 0x6792
+ 6 0xE712
+ 7 0x6893
+ 7 0xE813
+ 8 0x6994
+ 8 0xE994
+ 9 0x6A95
+ 9 0xEA15
+ * 0x0C37
+ * 0x8CB7
+ 0 0x6C97
+ 0 0xEC17
+ # 0x0D38
+ # 0x8DB8
+ Back 0x75A0
+ Back 0xF520
+ Info 0x042F
+ Info 0x84AF
+ Select 0x709B
+ Select 0xF01B
+ Rewind 0x79A4
+ Rewind 0xF924
+ Play 0x7AA5
+ Play 0xFA25
+ Fast_Forward 0x7BA6
+ Fast_Forward 0xFB26
+ Pause 0x7EA9
+ Pause 0xFE29
+ Start 0x76A1
+ Start 0xF621
+ End 0x78A3
+ End 0xF823
+ Stop 0x7DA8
+ Stop 0xFD28
+ Record 0x7CA7
+ Record 0xFC27
+ end codes
+
+end remote \ No newline at end of file
diff --git a/abs/core-testing/system-templates/templates/remotes/Medion_X10_8802/lircrc-medionx10-8802.txt b/abs/core-testing/system-templates/templates/remotes/Medion_X10_8802/lircrc-medionx10-8802.txt
new file mode 100755
index 0000000..fb91d72
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Medion_X10_8802/lircrc-medionx10-8802.txt
@@ -0,0 +1,487 @@
+# Channel Up
+begin
+prog = mythtv
+button = Ch+
+config = Up
+end
+
+# Channel Down
+begin
+prog = mythtv
+button = Ch-
+config = Down
+end
+
+# General Left
+begin
+prog = mythtv
+button = Left
+config = Left
+end
+
+# General Right
+begin
+prog = mythtv
+button = Right
+config = Right
+end
+
+ # LiveTV browse up channel
+begin
+prog = mythtv
+button = Up
+config = Up
+end
+
+# LiveTV browse down channel
+begin
+prog = mythtv
+button = Down
+config = Down
+end
+
+# Volume Up
+begin
+prog = mythtv
+button = Vol+
+config = F11
+end
+
+# Volume Down
+begin
+prog = mythtv
+button = Vol-
+config = F10
+end
+
+ # OK/Select
+begin
+prog = mythtv
+button = Ok
+config = Space
+end
+
+# OK/Select
+begin
+prog = mythtv
+button = Select
+config = Space
+end
+
+# Play
+begin
+prog = mythtv
+button = Play
+config = Return
+end
+
+# Stop
+begin
+prog = mythtv
+button = Stop
+config = Esc
+end
+
+# Escape/Exit/Back
+begin
+prog = mythtv
+button =
+config = Esc
+end
+
+# Power Off/Exit
+begin
+prog = irexec
+button = On/Standby
+config = /usr/bin/mythpowerbutton.sh
+end
+
+# Pause
+begin
+prog = mythtv
+button = Pause
+config = P
+end
+
+# Mute
+begin
+prog = mythtv
+button = Mute
+config = |
+end
+
+# Fast forward (10 sec default)
+begin
+prog = mythtv
+button =
+config = Right
+end
+
+# Rewind (10 sec default)
+begin
+prog = mythtv
+button =
+config = Left
+end
+
+# Skip forward (10 min default)
+begin
+prog = mythtv
+button = Fast_Forward
+config = PgDown
+end
+
+# Skip backward (10 min default)
+begin
+prog = mythtv
+button = Rewind
+config = PgUp
+end
+
+# Record
+begin
+prog = mythtv
+button = Record
+config = R
+end
+
+# Delete
+begin
+prog = mythtv
+button = RED/Audio
+config = D
+end
+
+# OSD browse
+begin
+prog = mythtv
+button =
+config = O
+end
+
+# Display EPG while in live TV,
+# View selected show while in EPG
+begin
+prog = mythtv
+button = Guide
+config = M
+end
+
+# Bring up OSD info
+begin
+prog = mythtv
+button = Info
+config = I
+end
+
+# Change display aspect ratio
+begin
+prog = mythtv
+button =
+config = W
+end
+
+# Seek to previous commercial cut point
+begin
+prog = mythtv
+button =
+config = Q
+end
+
+# Seek to next commercial cut point
+begin
+prog = mythtv
+button =
+config = Z
+end
+
+# Numbers 0-9
+
+begin
+prog = mythtv
+button = 0
+config = 0
+end
+
+begin
+prog = mythtv
+button = 1
+config = 1
+end
+
+begin
+prog = mythtv
+button = 2
+config = 2
+end
+
+begin
+prog = mythtv
+button = 3
+config = 3
+end
+
+begin
+prog = mythtv
+button = 4
+config = 4
+end
+
+begin
+prog = mythtv
+button = 5
+config = 5
+end
+
+begin
+prog = mythtv
+button = 6
+config = 6
+end
+
+begin
+prog = mythtv
+button = 7
+config = 7
+end
+
+begin
+prog = mythtv
+button = 8
+config = 8
+end
+
+begin
+prog = mythtv
+button = 9
+config = 9
+end
+
+# Previous channel
+begin
+prog = mythtv
+button = back
+config = H
+end
+
+# Closed Captioning
+begin
+prog = mythtv
+button =
+config = T
+end
+
+# Picture in Picture
+begin
+prog = mythtv
+button =
+config = V
+end
+
+# Change channels on both cards
+begin
+prog = mythtv
+button =
+config = N
+end
+
+# Clear cutpoints in cutlist
+begin
+prog = mythtv
+button =
+config = Q
+end
+
+
+
+
+### MPlayer lirc setup
+
+# Show OSD
+begin
+prog = mplayer
+button = Guide
+config = osd
+end
+
+# Pause playback
+begin
+prog = mplayer
+button = Pause
+config = pause
+end
+
+# Mute
+begin
+prog = mplayer
+button = Mute
+config = mute
+end
+
+# Seek back 10 seconds
+begin
+prog = mplayer
+button = Fast_Forward
+config = seek -10
+end
+
+# Seek forward 30 seconds
+begin
+prog = mplayer
+button = Rewind
+config = seek +30
+end
+
+# Quit
+begin
+prog = mplayer
+button = Stop
+config = quit
+end
+
+# Seek forward 10 minutes
+begin
+prog = mplayer
+button = Right
+config = seek +600
+end
+
+# Seek backward 10 minutes
+begin
+prog = mplayer
+button = Left
+config = seek -600
+end
+
+# Toggle full-screen
+begin
+prog = mplayer
+button =
+config = vo_fullscreen
+end
+
+
+
+### Xine lirc setup
+
+begin
+prog = xine
+button = Play
+config = Play
+end
+
+begin
+prog = xine
+button = Stop
+config = Stop
+end
+
+begin
+prog = xine
+button = Stop
+config = Quit
+end
+
+begin
+prog = xine
+button = Pause
+config = Pause
+end
+
+begin
+prog = xine
+button = Up
+config = EventUp
+end
+
+begin
+prog = xine
+button = Down
+config = EventDown
+end
+
+begin
+prog = xine
+button = Left
+config = EventLeft
+end
+
+begin
+prog = xine
+button = Right
+config = EventRight
+end
+
+begin
+prog = xine
+button = Select
+config = EventSelect
+end
+
+begin
+prog = xine
+button = Ok
+config = EventSelect
+end
+
+begin
+prog = xine
+button = Guide
+config = Menu
+end
+
+begin
+prog = xine
+button = Fast_Forward
+#config = SpeedFaster
+config = SeekRelative+60
+end
+
+begin
+prog = xine
+button = Rewind
+#config = SpeedSlower
+config = SeekRelative-60
+end
+
+begin
+prog = xine
+button = Vol+
+config = Volume+
+end
+
+begin
+prog = xine
+button = Vol-
+config = Volume-
+end
+
+begin
+prog = xine
+button = Mute
+config = Mute
+end
+
+begin
+prog = xine
+button = Stop
+config = RootMenu
+end
+
+begin
+prog = xine
+button = Ch+
+config = EventNext
+end
+
+begin
+prog = xine
+button = Ch-
+config = EventPrior
+end
+
+begin
+prog = xine
+button = Info
+config = OSDStreamInfos
+end \ No newline at end of file
diff --git a/abs/core-testing/system-templates/templates/remotes/Medion_X10_8802/preview.jpg b/abs/core-testing/system-templates/templates/remotes/Medion_X10_8802/preview.jpg
new file mode 100644
index 0000000..a034186
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Medion_X10_8802/preview.jpg
Binary files differ
diff --git a/abs/core-testing/system-templates/templates/remotes/Nebula/lircd-nebula.conf b/abs/core-testing/system-templates/templates/remotes/Nebula/lircd-nebula.conf
new file mode 100755
index 0000000..611c804
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Nebula/lircd-nebula.conf
@@ -0,0 +1,88 @@
+
+# this config file was automatically generated
+# using lirc-0.8.0(userspace) on Wed Dec 20 19:35:11 2006
+#
+# contributed by Peter Wood
+#
+# brand: Nebula Electronics
+# model no. of remote control: DigiTV-PCI Remote
+# devices being controlled by this remote: DVB-Card
+#
+# Note unlike the existing lircd.conf, this one was captured with
+# the DigiTV IR receiver via the DVB card it's self. This was the
+# remote which came with a Revision B PCI card (Brought Dec 2006).
+
+begin remote
+
+ name Nebula_DVB
+ bits 16
+ eps 30
+ aeps 100
+
+ one 0 0
+ zero 0 0
+ pre_data_bits 16
+ pre_data 0x8001
+ gap 135906
+ toggle_bit 0
+
+
+ begin codes
+ TV 0x0179
+ AUX 0x0186
+ DVD/CD 0x0185
+ 1 0x0002
+ 2 0x0003
+ 3 0x0004
+ 4 0x0005
+ 5 0x0006
+ 6 0x0007
+ 7 0x0008
+ 8 0x0009
+ 9 0x000A
+ 0 0x000B
+ 16:9 0x00B7
+ 14:9 0x00B8
+ EXIT 0x00AE
+ POWER 0x0074
+ PICTURE 0x016F
+ AUDIO 0x0188
+ I 0x0166
+ EPG 0x016D
+ MENU 0x008B
+ UP 0x0067
+ DOWN 0x006C
+ LEFT 0x0069
+ RIGHT 0x006A
+ OK 0x001C
+ CH+ 0x0192
+ CH- 0x0193
+ VOLUME+ 0x0073
+ VOLUME- 0x0072
+ RED 0x018E
+ GREEN 0x018F
+ YELLOW 0x0190
+ BLUE 0x0191
+ SUBT 0x0172
+ AD 0x00B9
+ TEXT 0x0184
+ MUTE 0x0071
+ REWIND 0x00A8
+ STOP 0x0080
+ PLAY 0x00CF
+ FFORWARD 0x00D0
+ CHAPTER 0x00BA
+ PAUSE 0x0077
+ PLAYSPEED 0x80010CF
+ RECORD 0x00A7
+ PIP 0x00BB
+ ZOOM- 0x004E
+ ZOOM+ 0x004A
+ CAPTURE 0x00BC
+ WEB 0x00BD
+ EMAIL 0x00D7
+ PHONE 0x00A9
+ PC 0x0178
+ end codes
+
+end remote \ No newline at end of file
diff --git a/abs/core-testing/system-templates/templates/remotes/Nebula/lircrc-nebula.txt b/abs/core-testing/system-templates/templates/remotes/Nebula/lircrc-nebula.txt
new file mode 100755
index 0000000..c3d70b0
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Nebula/lircrc-nebula.txt
@@ -0,0 +1,402 @@
+# lircrc.example.[[Nebula Digi T V]]-nativelirc
+# 2005-04-02, Samuel Jacobs
+# Save this file in ~/.mythtv/lircrc
+
+# There are so many buttons on this remote, 55 to be exact. I don't really
+# know what to do with all of them, yet I'm discovering that Myth has
+# functions for all of them and much, much more! All in all, 407 lines of
+# yummy remote-controlled icing on the delicious cake that is MythTV.
+
+# Intended for use with:
+# http://lirc.sourceforge.net/remotes/nebula_electronics/DigiTV
+# NOTE: On my system I renamed the remote to "nebdtv". To use this file
+# with the download from lirc.sf.net (which is otherwise identical to my
+# copy) simply replace all instances of "nebdtv" with "Nebula_DVB".
+
+# NOTE 2: Not all buttons are used yet, and some key binding customisations
+# will probably be made to get the most out of the extra buttons. In
+# particular "Picture" and "Audio" are currently unused so I could
+# possibly set jumppoints to [[Myth Photo]] and [[Myth Music]] in future.
+
+# NOTE 3: The buttons on the remote are listed from the top left down, row
+# by row, left to right, with any unused buttons given comments where it
+# would appear if it was used here. The number buttons are listed in their
+# entirety before starting back at the "Picture" button.
+
+# NOTE 4: I just thought of another thing that could cause confusion, the
+# volume buttons are commented out because I use KDELIRC for that. They
+# are defined however, so just uncomment them if you want to use them.
+
+# Based on, and thanks to:
+# lircrc.example.[[Hauppauge Grey]]-nativelirc
+# 2003-09-17, Robert Kulagowski
+# mailto:rkulagow@rocketmail.com
+
+# TODO: TV (will probably use for launching mythfrontend)
+# TODO: Aux (probably a jumppoint to Live TV)
+# TODO: DVD/CD (there's currently no jumppoint for generic optical media,
+# so will probably use for DVD)
+
+begin
+ prog = mythtv
+ remote = Nebula_DVB
+ button = Power
+ config = Esc
+end
+
+begin
+ prog = mythtv
+ remote = Nebula_DVB
+ button = 1
+ config = 1
+end
+
+begin
+ prog = mythtv
+ remote = Nebula_DVB
+ button = 2
+ config = 2
+end
+
+begin
+ prog = mythtv
+ remote = Nebula_DVB
+ button = 3
+ config = 3
+end
+
+begin
+ prog = mythtv
+ remote = Nebula_DVB
+ button = 4
+ config = 4
+end
+
+begin
+ prog = mythtv
+ remote = Nebula_DVB
+ button = 5
+ config = 5
+end
+
+begin
+ prog = mythtv
+ remote = Nebula_DVB
+ button = 6
+ config = 6
+end
+
+begin
+ prog = mythtv
+ remote = Nebula_DVB
+ button = 7
+ config = 7
+end
+
+begin
+ prog = mythtv
+ remote = Nebula_DVB
+ button = 8
+ config = 8
+end
+
+begin
+ prog = mythtv
+ remote = Nebula_DVB
+ button = 9
+ config = 9
+end
+
+begin
+ prog = mythtv
+ remote = Nebula_DVB
+ button = 0
+ config = 0
+end
+
+# TODO: Picture
+# TODO: Audio
+
+begin
+ prog = mythtv
+ remote = Nebula_DVB
+ button = I
+ config = I
+end
+
+begin
+ prog = mythtv
+ remote = Nebula_DVB
+ button = 16:9
+ config = W
+end
+
+# Unused: 14:9
+
+begin
+ prog = mythtv
+ remote = Nebula_DVB
+# this will only work in live tv mode
+ button = EPG
+ config = S
+end
+
+begin
+ prog = mythtv
+ remote = Nebula_DVB
+ button = Exit
+ config = Esc
+end
+
+begin
+ prog = mythtv
+ remote = Nebula_DVB
+ button = Menu
+ config = M
+end
+
+# Note the "repeat =" strings in the arrows, volume and channel.
+# This means that if you hold down the key, every nth instance will be
+# passed. This depends on your system, so you may want to increase or
+# decrease this and see what happens. repeat = 1 is probably too
+# fast.
+
+begin
+ prog = mythtv
+ remote = Nebula_DVB
+ button = Up
+# This is the "up" on the central diamond
+ repeat = 3
+ config = Up
+end
+
+begin
+ prog = mythtv
+ remote = Nebula_DVB
+ button = Down
+# This is the "down" on the central diamond
+ repeat = 3
+ config = Down
+end
+
+begin
+ prog = mythtv
+ remote = Nebula_DVB
+ button = Left
+# This is the "left" on the central diamond
+ repeat = 3
+ config = Left
+end
+
+begin
+ prog = mythtv
+ remote = Nebula_DVB
+ button = Right
+# This is the "right" on the central diamond
+ repeat = 3
+ config = Right
+end
+
+begin
+ prog = mythtv
+ remote = Nebula_DVB
+ button = Ok
+# Middle button on the diamond
+ config = Return
+end
+
+# The channel buttons are mapped to Page Up and Page Down.
+
+begin
+ prog = mythtv
+ remote = Nebula_DVB
+ button = Ch+
+ repeat = 3
+ config = [[Pg Up]]
+end
+
+begin
+ prog = mythtv
+ remote = Nebula_DVB
+ button = Ch-
+ repeat = 3
+ config = [[Pg Down]]
+end
+
+# These are the volume buttons. Uncomment them if you want myth to handle
+# the volume.
+
+begin
+ prog = mythtv
+ remote = Nebula_DVB
+ button = Volume+
+ repeat = 3
+ config = F11
+end
+
+begin
+ prog = mythtv
+ remote = Nebula_DVB
+ button = Volume-
+ repeat = 3
+ config = F10
+end
+
+# colours
+begin
+ prog = mythtv
+ remote = Nebula_DVB
+ button = Red
+# This is the Red button
+# We'll use it for "Delete"
+ config = D
+end
+
+begin
+ prog = mythtv
+ remote = Nebula_DVB
+ button = Green
+# This is the Green button
+# We'll use it for "Extended Info"
+ config = U
+end
+
+begin
+ prog = mythtv
+ remote = Nebula_DVB
+ button = Yellow
+# This is the Yellow button
+# We'll use it for "Edit"
+ config = E
+end
+
+begin
+ prog = mythtv
+ remote = Nebula_DVB
+ button = Blue
+# This is the Blue button
+# We'll use it for "Toggle browse mode"
+ config = O
+end
+
+begin
+ prog = mythtv
+ remote = Nebula_DVB
+ button = SubT
+ config = T
+end
+
+begin
+ prog = mythtv
+ remote = Nebula_DVB
+ button = AD
+ config = A
+end
+
+begin
+ prog = mythtv
+ remote = Nebula_DVB
+ button = Text
+# I REALLY can't think of anything to put here, so it does the same as EPG.
+ config = S
+end
+
+begin
+ prog = mythtv
+ remote = Nebula_DVB
+ button = Mute
+ config = |
+end
+
+# Here begineth a stickered area, so I assume the labels for these buttons
+# could be easily changed post-manufacture.
+
+begin
+ prog = mythtv
+ remote = Nebula_DVB
+ button = Rewind
+ config = <
+end
+
+begin
+ prog = mythtv
+ remote = Nebula_DVB
+ button = Stop
+# Again, I couldn't think of an appropriate function, so it's ESC.
+ config = Esc
+end
+
+begin
+ prog = mythtv
+ remote = Nebula_DVB
+ button = Play
+ config = P
+end
+
+begin
+ prog = mythtv
+ remote = Nebula_DVB
+ button = FForward
+ config = >
+end
+
+begin
+ prog = mythtv
+ remote = Nebula_DVB
+ button = Chapter
+# Change focus for PiP (to change channel in the other window)
+ config = B
+end
+
+begin
+ prog = mythtv
+ remote = Nebula_DVB
+ button = Pause
+ config = P
+end
+
+begin
+ prog = mythtv
+ remote = Nebula_DVB
+ button = Playspeed
+ config = J
+end
+
+begin
+ prog = mythtv
+ remote = Nebula_DVB
+ button = Record
+ config = R
+end
+
+begin
+ prog = mythtv
+ remote = Nebula_DVB
+ button = PiP
+# Toggle PiP on/off
+ config = V
+end
+
+begin
+ prog = mythtv
+ remote = Nebula_DVB
+ button = Zoom-
+# Use for backwards commercial skip
+ config = Q
+end
+
+begin
+ prog = mythtv
+ remote = Nebula_DVB
+ button = Zoom+
+# Use for forward commercial skip
+ config = Z
+end
+
+begin
+ prog = mythtv
+ remote = Nebula_DVB
+ button = Capture
+# Swap the PiP windows
+ config = N
+end \ No newline at end of file
diff --git a/abs/core-testing/system-templates/templates/remotes/Nebula/preview.jpg b/abs/core-testing/system-templates/templates/remotes/Nebula/preview.jpg
new file mode 100644
index 0000000..a034186
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Nebula/preview.jpg
Binary files differ
diff --git a/abs/core-testing/system-templates/templates/remotes/Nexus/lircd-nexus.conf b/abs/core-testing/system-templates/templates/remotes/Nexus/lircd-nexus.conf
new file mode 100755
index 0000000..229db28
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Nexus/lircd-nexus.conf
@@ -0,0 +1,73 @@
+#
+# this config file was automatically generated
+# using lirc-0.7.0pre4(serial) on Sun Oct 2 00:24:32 2005
+#
+# contributed by anton|ganthaler.at and juergen.wilhelm|aon.at
+# members of linux user group Vorarlberg www.lugv.at
+#
+# for ir remote controler from Hauppauge WinTV Nexus-S
+# most of the keys are supported
+#
+# brand: Hauppauge
+# model no. of remote control: WinTV Nexus-S
+# devices being controlled by this remote:
+#
+
+begin remote
+
+ name Hauppauge_WinTV_Nexus-S
+ bits 13
+ flags RC5|CONST_LENGTH
+ eps 30
+ aeps 100
+
+ one 944 828
+ zero 944 828
+ plead 980
+ gap 113932
+ min_repeat 1
+ toggle_bit 2
+
+
+ begin codes
+ Up 0x0000000000001794
+ Down 0x0000000000001795
+ Left 0x0000000000001796
+ Right 0x0000000000001797
+ Power 0x00000000000017BD
+ Ok 0x00000000000017A5
+ Menu 0x000000000000178D
+ Back 0x000000000000179F
+ Red 0x000000000000178B
+ Green 0x00000000000017AE
+ Yellow 0x00000000000017B8
+ Blue 0x00000000000017A9
+ 0 0x0000000000001780
+ 1 0x0000000000001781
+ 2 0x0000000000001782
+ 3 0x0000000000001783
+ 4 0x0000000000001784
+ 5 0x0000000000001785
+ 6 0x0000000000001786
+ 7 0x0000000000001787
+ 8 0x0000000000001788
+ 9 0x0000000000001789
+ Play 0x00000000000017B5
+ Pause 0x00000000000017B0
+ Stop 0x00000000000017B6
+ Record 0x00000000000017B7
+ FastFwd 0x00000000000017B4
+ FastRwd 0x00000000000017B2
+ Channel+ 0x00000000000017A0
+ Channel- 0x00000000000017A1
+ Volume+ 0x0000000000001790
+ Volume- 0x0000000000001791
+ Mute 0x000000000000178F
+ Timers 0x000000000000178A
+ Recordings 0x000000000000178E
+ Back 0x000000000000179F
+ Record 0x00000000000017B7
+ end codes
+
+end remote
+
diff --git a/abs/core-testing/system-templates/templates/remotes/Nexus/lircrc-nexus.txt b/abs/core-testing/system-templates/templates/remotes/Nexus/lircrc-nexus.txt
new file mode 100755
index 0000000..169da14
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Nexus/lircrc-nexus.txt
@@ -0,0 +1,459 @@
+# ~/.mythtv/lircrc
+#
+# MythTV native LIRC config file for
+# the new grey Hauppauge remote
+#
+
+
+
+begin
+prog = mythtv
+button = Go
+repeat = 3
+config = I
+end
+
+begin
+prog = mythtv
+button = Up
+repeat = 3
+config = Up
+end
+
+begin
+prog = mythtv
+button = Down
+repeat = 3
+config = Down
+end
+
+begin
+prog = mythtv
+button = Left
+repeat = 3
+config = Left
+end
+
+begin
+prog = mythtv
+button = Right
+repeat = 3
+config = Right
+end
+
+# Channel Up
+begin
+prog = mythtv
+button = Channel+
+repeat = 3
+config = Up
+end
+
+# Channel Down
+begin
+prog = mythtv
+button = Channel-
+repeat = 3
+config = Down
+end
+
+# OKSelect
+begin
+prog = mythtv
+button = Ok
+repeat = 3
+config = Space
+end
+
+# Play
+begin
+prog = mythtv
+button = Play
+repeat = 3
+config = Return
+end
+
+# Stop
+begin
+prog = mythtv
+button = Stop
+repeat = 3
+config = Esc
+end
+
+# Escape/Exit/Back
+begin
+prog = mythtv
+button = Back
+repeat = 3
+config = Esc
+end
+
+# Power Off/Exit
+begin
+prog = irxevent
+button = Power
+repeat = 3
+config = /usr/bin/mythpowerbutton.sh
+end
+
+# Pause
+begin
+prog = mythtv
+button = Pause
+repeat = 3
+config = P
+end
+
+# Mute
+begin
+prog = mythtv
+button = Mute
+repeat = 3
+config = |
+end
+
+# Fast forward
+begin
+prog = mythtv
+button = FastFwd
+repeat = 3
+config = <
+end
+
+# Rewind
+begin
+prog = mythtv
+button = FastRwd
+repeat = 3
+config = >
+end
+
+# Record
+begin
+prog = mythtv
+button = Record
+repeat = 3
+config = R
+end
+
+# Delete
+begin
+prog = mythtv
+button = Red
+repeat = 3
+config = D
+end
+
+# Decrease play speed
+begin
+prog = mythtv
+button = Green
+repeat = 3
+config = U
+end
+
+# Display EPG while in live TV,
+# View selected show while in EPG
+begin
+prog = mythtv
+button = Menu
+repeat = 3
+config = M
+end
+
+# Scroll up
+begin
+prog = mythtv
+button = Volume+
+repeat = 3
+config = F11
+end
+
+# Scroll down
+begin
+prog = mythtv
+button = Volume-
+repeat = 3
+config = F10
+end
+
+# double speed watch
+begin
+prog = mythtv
+button = Yellow
+repeat = 3
+config = J
+end
+
+# Bring up Time stretch
+begin
+prog = mythtv
+button = Blue
+repeat = 3
+config = A
+end
+
+# Numbers 0-9
+begin
+prog = mythtv
+button = 0
+repeat = 3
+config = 0
+end
+
+begin
+prog = mythtv
+button = 1
+repeat = 3
+config = 1
+end
+
+begin
+prog = mythtv
+button = 2
+repeat = 3
+config = 2
+end
+
+begin
+prog = mythtv
+button = 3
+repeat = 3
+config = 3
+end
+
+begin
+prog = mythtv
+button = 4
+repeat = 3
+config = 4
+end
+
+begin
+prog = mythtv
+button = 5
+repeat = 3
+config = 5
+end
+
+begin
+prog = mythtv
+button = 6
+repeat = 3
+config = 6
+end
+
+begin
+prog = mythtv
+button = 7
+repeat = 3
+config = 7
+end
+
+begin
+prog = mythtv
+button = 8
+repeat = 3
+config = 8
+end
+
+begin
+prog = mythtv
+button = 9
+repeat = 3
+config = 9
+end
+
+
+
+###### MPlayer lirc setup
+# Show OSD
+begin
+prog = mplayer
+button = Menu
+repeat = 3
+config = osd
+end
+
+# Pause playback
+begin
+prog = mplayer
+button = Pause
+repeat = 3
+config = pause
+end
+
+# Skip ahead a minute if playing
+# If paused, resume playing
+begin
+prog = mplayer
+button = Play
+repeat = 3
+config = seek +1
+end
+
+# Stop playback and exit
+begin
+prog = mplayer
+button = Stop
+repeat = 3
+config = quit
+end
+
+# Mute
+begin
+prog = mplayer
+button = Mute
+repeat = 3
+config = mute
+end
+
+begin
+prog = mplayer
+button = Left
+repeat = 3
+config = seek -10
+end
+
+# Seek back 10 seconds
+begin
+prog = mplayer
+button = FastRwd
+repeat = 3
+config = seek -10
+end
+
+begin
+prog = mplayer
+button = Right
+repeat = 3
+config = seek +30
+end
+
+# Seek forward 30 seconds
+begin
+prog = mplayer
+button = FastFwd
+repeat = 3
+config = seek +30
+end
+
+# Quit
+begin
+prog = mplayer
+button = Back
+repeat = 3
+config = quit
+end
+
+
+
+
+###### Xine lirc setup
+begin
+prog = xine
+button = Play
+repeat = 3
+config = Play
+end
+
+begin
+prog = xine
+button = Stop
+repeat = 3
+config = Stop
+end
+
+begin
+prog = xine
+button = Back
+repeat = 3
+config = Quit
+end
+
+begin
+prog = xine
+button = Pause
+repeat = 3
+config = Pause
+end
+
+begin
+prog = xine
+button = Up
+repeat = 3
+config = EventUp
+end
+
+begin
+prog = xine
+button = Down
+repeat = 3
+config = EventDown
+end
+
+begin
+prog = xine
+button = Left
+repeat = 3
+config = EventLeft
+end
+
+begin
+prog = xine
+button = Right
+repeat = 3
+config = EventRight
+end
+
+begin
+prog = xine
+button = Ok
+repeat = 3
+config = EventSelect
+end
+
+begin
+prog = xine
+button = FastFwd
+repeat = 3
+config = SpeedFaster
+end
+
+begin
+prog = xine
+button = FastRwd
+repeat = 3
+config = SpeedSlower
+end
+
+begin
+prog = xine
+button = Volume+
+repeat = 3
+config = Volume+
+end
+
+begin
+prog = xine
+button = Volume-
+repeat = 3
+config = Volume-
+end
+
+begin
+prog = xine
+button = Mute
+repeat = 3
+config = Mute
+end
+
+begin
+prog = xine
+button = Menu
+repeat = 3
+config = RootMenu
+end
+
+
diff --git a/abs/core-testing/system-templates/templates/remotes/Nexus/preview.jpg b/abs/core-testing/system-templates/templates/remotes/Nexus/preview.jpg
new file mode 100644
index 0000000..a034186
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Nexus/preview.jpg
Binary files differ
diff --git a/abs/core-testing/system-templates/templates/remotes/Nova_500/lircd-nova500.conf b/abs/core-testing/system-templates/templates/remotes/Nova_500/lircd-nova500.conf
new file mode 100755
index 0000000..c66c9e5
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Nova_500/lircd-nova500.conf
@@ -0,0 +1,69 @@
+#
+# brand: Hauppauge NOVA-T-500
+# model no. of remote control: Hauppage Nova-T-500 Snowboard Shape Silver over Black
+#
+
+begin remote
+
+ name NOVA-T500
+ bits 16
+ eps 30
+ aeps 100
+
+ one 0 0
+ zero 0 0
+ pre_data_bits 16
+ pre_data 0x1
+ gap 199999
+ toggle_bit 0
+
+
+ begin codes
+ Go 0x0162
+ Power 0x0074
+ TV 0x0179
+ Videos 0x0189
+ Music 0x0188
+ Pictures 0x00E2
+ Guide 0x016D
+ Radio 0x0181
+ ArrowUp 0x0067
+ ArrowLeft 0x0069
+ OK 0x0160
+ ArrowRight 0x006A
+ ArrowDown 0x006C
+ BackExit 0x009E
+ Menu 0x008B
+ VolumeUp 0x0073
+ VolumeDown 0x0072
+ PrevCh 0x016B
+ Mute 0x0071
+ ChannelUp 0x0192
+ ChannelDown 0x0193
+ Record 0x00A7
+ Rewind 0x00A8
+ SkipBack 0x0195
+ Play 0x00CF
+ Pause 0x0077
+ Stop 0x0080
+ Fwdwind 0x00D0
+ SkipFwd 0x0197
+ 1 0x0002
+ 2 0x0003
+ 3 0x0004
+ 4 0x0005
+ 5 0x0006
+ 6 0x0007
+ 7 0x0008
+ 8 0x0009
+ 9 0x000A
+ Star 0x0037
+ 0 0x000B
+ # 0x0029
+ Red 0x018E
+ Green 0x018F
+ Yellow 0x0190
+ Blue 0x0191
+ end codes
+
+end remote \ No newline at end of file
diff --git a/abs/core-testing/system-templates/templates/remotes/Nova_500/lircrc-nova500.txt b/abs/core-testing/system-templates/templates/remotes/Nova_500/lircrc-nova500.txt
new file mode 100755
index 0000000..2d74c3d
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Nova_500/lircrc-nova500.txt
@@ -0,0 +1,559 @@
+# /etc/lircrc
+# ln ~mythtv/.mythtv/lircrc
+#
+# MythTV native LIRC config file for
+# Hauppage Nova-T-500 PCI Dual Tuners DVB-T
+# Snowboard shape remote
+# Silver on top Black underneath
+# 45 buttons
+#
+# Originally
+# By Jarod Wilson, 2003/12/21
+# Amalgamated from Jeff Campbell's .lircrc
+
+
+
+################## MythTV Control ######################
+### http://www.mythtv.org/wiki/index.php/Keybindings ###
+
+# Remote Button
+## MythTV function
+
+
+# Go
+## Go to home page
+begin
+prog = mythtv
+button = Go
+config = ALT+H
+end
+
+# Power
+## Turns monitor in Standby
+#begin
+#prog = irexec
+#button = Power
+#config = sudo vbetool dpms on ; sudo vbetool dpms off
+#end
+
+# TV
+## Go to Watch TV
+begin
+prog = mythtv
+button = TV
+config = ALT+T
+end
+
+# Videos
+## Go to MythVideo
+begin
+prog = mythtv
+button = Videos
+config = ALT+V
+end
+
+# Music
+## Go to MythMusic
+begin
+prog = mythtv
+button = Music
+config = ALT+M
+end
+
+# Pictures
+## Go to MythGallery
+begin
+prog = mythtv
+button = Pictures
+config = ALT+P
+end
+
+# Guide
+## display EPG
+begin
+prog = mythtv
+button = Guide
+config = s
+end
+
+# Radio
+
+
+
+# ArrowUp
+## Up
+begin
+prog = mythtv
+button = ArrowUp
+config = Up
+end
+
+# ArrowLeft
+## Left
+begin
+prog = mythtv
+button = ArrowLeft
+config = Left
+end
+
+# OK
+## Select/enter/resolve
+begin
+prog = mythtv
+button = OK
+config = Space
+end
+
+# ArrowRight
+## Right
+begin
+prog = mythtv
+button = ArrowRight
+config = Right
+end
+
+# ArrowDown
+## Down
+begin
+prog = mythtv
+button = ArrowDown
+config = Down
+end
+
+# BackExit
+## Exit/go back/cancel
+begin
+prog = mythtv
+button = BackExit
+config = Esc
+end
+
+# Menu
+## Menu
+begin
+prog = mythtv
+button = Menu
+config = m
+end
+
+# VolumeUp
+## Volume Up
+begin
+prog = mythtv
+button = VolumeUp
+config = F11
+end
+
+# VolumeDown
+## Volume down
+begin
+prog = mythtv
+button = VolumeDown
+config = F10
+end
+
+# PrevCh
+## Change tuner card input
+begin
+prog = mythtv
+button = PrevCh
+config = c
+end
+
+# Mute
+## Mute
+begin
+prog = mythtv
+button = Mute
+config = |
+end
+
+# ChannelUp
+begin
+prog = mythtv
+button = ChannelUp
+config = Up
+end
+
+# ChannelDown
+begin
+prog = mythtv
+button = ChannelDown
+config = Down
+end
+
+# Record
+begin
+prog = mythtv
+button = Record
+config = R
+end
+
+# Rewind
+begin
+prog = mythtv
+button = Rewind
+config = Left
+end
+
+# SkipBack
+begin
+prog = mythtv
+button = SkipBack
+config = PgUp
+end
+
+# Play
+begin
+prog = mythtv
+button = Play
+config = Return
+end
+
+# Pause
+begin
+prog = mythtv
+button = Pause
+config = P
+end
+
+# Stop
+begin
+prog = mythtv
+button = Stop
+config = Esc
+end
+
+# Fwdwind
+begin
+prog = mythtv
+button = Fwdwind
+config = Right
+end
+
+# SkipFwd
+begin
+prog = mythtv
+button = SkipFwd
+config = PgDown
+end
+
+# 1
+begin
+prog = mythtv
+button = 1
+config = 1
+end
+
+# 2
+begin
+prog = mythtv
+button = 2
+config = 2
+end
+
+# 3
+begin
+prog = mythtv
+button = 3
+config = 3
+end
+
+# 4
+begin
+prog = mythtv
+button = 4
+config = 4
+end
+
+# 5
+begin
+prog = mythtv
+button = 5
+config = 5
+end
+
+# 6
+begin
+prog = mythtv
+button = 6
+config = 6
+end
+
+# 7
+begin
+prog = mythtv
+button = 7
+config = 7
+end
+
+# 8
+begin
+prog = mythtv
+button = 8
+config = 8
+end
+
+# 9
+begin
+prog = mythtv
+button = 9
+config = 9
+end
+
+# Star
+## Info
+begin
+prog = mythtv
+button = Star
+config = i
+end
+
+# 0
+begin
+prog = mythtv
+button = 0
+config = 0
+end
+
+# #
+## Toggle recording of current program (cycles through types)
+begin
+prog = mythtv
+button = #
+config = r
+end
+
+# Red
+## Picture zoom
+begin
+prog = mythtv
+button = Red
+config = W
+end
+
+# Green
+# OSD navigation through channels/programs
+begin
+prog = mythtv
+button = Green
+config = O
+end
+
+# Yellow
+begin
+prog = mythtv
+button = Yellow
+config = Q
+end
+
+# Blue
+begin
+prog = mythtv
+button = Blue
+config = Z
+end
+
+
+
+##### MPlayer lirc setup
+# Show OSD
+begin
+prog = mplayer
+button = Menu
+config = osd
+end
+
+# Pause playback
+begin
+prog = mplayer
+button = Pause
+config = pause
+end
+
+# Skip ahead a minute if playing
+# If paused, resume playing
+begin
+prog = mplayer
+button = Play
+config = seek +1
+end
+
+# Stop playback and exit
+begin
+prog = mplayer
+button = Stop
+config = quit
+end
+
+# Mute
+begin
+prog = mplayer
+button = Mute
+config = mute
+end
+
+begin
+prog = mplayer
+button = ArrowLeft
+config = seek -10
+end
+
+# Seek back 10 seconds
+begin
+prog = mplayer
+button = Rewind
+config = seek -10
+end
+
+begin
+prog = mplayer
+button = ArrowRight
+config = seek +30
+end
+
+# Seek forward 30 seconds
+begin
+prog = mplayer
+button = Fwdwind
+config = seek +30
+end
+
+# Quit
+begin
+prog = mplayer
+button = BackExit
+config = quit
+end
+
+# Seek forward 10 minutes
+begin
+prog = mplayer
+button = SkipFwd
+config = seek +600
+end
+
+# Seek backward 10 minutes
+begin
+prog = mplayer
+button = SkipBack
+config = seek -600
+end
+
+# Toggle full-screen
+begin
+prog = mplayer
+button = Star
+config = vo_fullscreen
+end
+
+
+
+###### Xine lirc setup
+begin
+prog = xine
+button = Play
+config = Play
+end
+
+begin
+prog = xine
+button = Stop
+config = Stop
+end
+
+begin
+prog = xine
+button = BackExit
+config = Quit
+end
+
+begin
+prog = xine
+button = Pause
+config = Pause
+end
+
+begin
+prog = xine
+button = ArrowUp
+config = EventUp
+end
+
+begin
+prog = xine
+button = ArrowDown
+config = EventDown
+end
+
+begin
+prog = xine
+button = ArrowLeft
+config = EventLeft
+end
+
+begin
+prog = xine
+button = ArrowRight
+config = EventRight
+end
+
+begin
+prog = xine
+button = OK
+config = EventSelect
+end
+
+begin
+prog = xine
+button = Fwdwind
+config = SpeedFaster
+end
+
+begin
+prog = xine
+button = Rewind
+config = SpeedSlower
+end
+
+begin
+prog = xine
+button = VolumeUp
+config = Volume+
+end
+
+begin
+prog = xine
+button = VolumeDown
+config = Volume-
+end
+
+begin
+prog = xine
+button = Mute
+config = Mute
+end
+
+begin
+prog = xine
+button = Menu
+config = RootMenu
+end
+
+begin
+prog = xine
+button = SkipFwd
+config = EventNext
+end
+
+begin
+prog = xine
+button = SkipBack
+config = EventPrior
+end
+
+begin
+prog = xine
+button = Go
+config = OSDStreamInfos
+end \ No newline at end of file
diff --git a/abs/core-testing/system-templates/templates/remotes/Nova_500/preview.jpg b/abs/core-testing/system-templates/templates/remotes/Nova_500/preview.jpg
new file mode 100644
index 0000000..a034186
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Nova_500/preview.jpg
Binary files differ
diff --git a/abs/core-testing/system-templates/templates/remotes/Nova_T/lircd-novat.conf b/abs/core-testing/system-templates/templates/remotes/Nova_T/lircd-novat.conf
new file mode 100755
index 0000000..27a575d
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Nova_T/lircd-novat.conf
@@ -0,0 +1,60 @@
+begin remote
+ name nova-t
+ bits 16
+ eps 30
+ aeps 100
+ one 0 0
+ zero 0 0
+ gap 135988
+ pre_data_bits 16
+ pre_data 0x8001
+
+ begin codes
+ 1 0x0002
+ 2 0x0003
+ 3 0x0004
+ 4 0x0005
+ 5 0x0006
+ 6 0x0007
+ 7 0x0008
+ 8 0x0009
+ 9 0x000A
+ 0 0x000B
+ * 0x0184
+ # 0x0172
+ red 0x018E
+ green 0x018F
+ yellow 0x0190
+ blue 0x0191
+ power 0x0074
+ go 0x0161
+ tv 0x0179
+ videos 0x0189
+ music 0x0188
+ pictures 0x016F
+ guide 0x016D
+ radio 0x0181
+ up 0x0067
+ left 0x0069
+ right 0x006A
+ down 0x006C
+ ok 0x001C
+ back 0x00A8
+ menu 0x008B
+ prev-ch 0x019C
+ mute 0x0071
+ volup 0x0073
+ voldown 0x0072
+ chanup 0x0192
+ chandown 0x0193
+ rec 0x00A7
+ stop 0x0080
+ forward 0x00D0
+ skipback 0x00A5
+ skipforward 0x00A3
+ play 0x00CF
+ pause 0x0077
+
+ end codes
+
+end remote \ No newline at end of file
diff --git a/abs/core-testing/system-templates/templates/remotes/Nova_T/lircrc-novat.txt b/abs/core-testing/system-templates/templates/remotes/Nova_T/lircrc-novat.txt
new file mode 100755
index 0000000..f075729
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Nova_T/lircrc-novat.txt
@@ -0,0 +1,474 @@
+# Channel Up
+begin
+prog = mythtv
+button = chanup
+config = Up
+end
+
+# Channel Down
+begin
+prog = mythtv
+button = chandown
+config = Down
+end
+
+# General Left
+begin
+prog = mythtv
+button = left
+config = Left
+end
+
+# General Right
+begin
+prog = mythtv
+button = right
+config = Right
+end
+
+ # LiveTV browse up channel
+begin
+prog = mythtv
+button = up
+config = Up
+end
+
+# LiveTV browse down channel
+begin
+prog = mythtv
+button = down
+config = Down
+end
+
+# Volume Up
+begin
+prog = mythtv
+button = volup
+config = F11
+end
+
+# Volume Down
+begin
+prog = mythtv
+button = voldown
+config = F10
+end
+
+ # OK/Select
+begin
+prog = mythtv
+button = ok
+config = Space
+end
+
+# Play
+begin
+prog = mythtv
+button = play
+config = Return
+end
+
+# Stop
+begin
+prog = mythtv
+button = stop
+config = Esc
+end
+
+# Escape/Exit/Back
+begin
+prog = mythtv
+button =
+config = Esc
+end
+
+# Power Off/Exit
+begin
+prog = irexec
+button = power
+config = /usr/bin/mythpowerbutton.sh
+end
+
+# Pause
+begin
+prog = mythtv
+button = pause
+config = P
+end
+
+# Mute
+begin
+prog = mythtv
+button = mute
+config = |
+end
+
+# Fast forward (10 sec default)
+begin
+prog = mythtv
+button = forward
+config = Right
+end
+
+# Rewind (10 sec default)
+begin
+prog = mythtv
+button = back
+config = Left
+end
+
+# Skip forward (10 min default)
+begin
+prog = mythtv
+button = skipforward
+config = PgDown
+end
+
+# Skip backward (10 min default)
+begin
+prog = mythtv
+button = skipback
+config = PgUp
+end
+
+# Record
+begin
+prog = mythtv
+button = rec
+config = R
+end
+
+# Delete
+begin
+prog = mythtv
+button = red
+config = D
+end
+
+# OSD browse
+begin
+prog = mythtv
+button = menu
+config = O
+end
+
+# Display EPG while in live TV,
+# View selected show while in EPG
+begin
+prog = mythtv
+button = guide
+config = M
+end
+
+# Bring up OSD info
+begin
+prog = mythtv
+button = yellow
+config = I
+end
+
+# Change display aspect ratio
+begin
+prog = mythtv
+button = blue
+config = W
+end
+
+# Seek to previous commercial cut point
+begin
+prog = mythtv
+button =
+config = Q
+end
+
+# Seek to next commercial cut point
+begin
+prog = mythtv
+button =
+config = Z
+end
+
+# Numbers 0-9
+
+begin
+prog = mythtv
+button = 0
+config = 0
+end
+
+begin
+prog = mythtv
+button = 1
+config = 1
+end
+
+begin
+prog = mythtv
+button = 2
+config = 2
+end
+
+begin
+prog = mythtv
+button = 3
+config = 3
+end
+
+begin
+prog = mythtv
+button = 4
+config = 4
+end
+
+begin
+prog = mythtv
+button = 5
+config = 5
+end
+
+begin
+prog = mythtv
+button = 6
+config = 6
+end
+
+begin
+prog = mythtv
+button = 7
+config = 7
+end
+
+begin
+prog = mythtv
+button = 8
+config = 8
+end
+
+begin
+prog = mythtv
+button = 9
+config = 9
+end
+
+# Previous channel
+begin
+prog = mythtv
+button = prev-ch
+config = H
+end
+
+# Closed Captioning
+begin
+prog = mythtv
+button =
+config = T
+end
+
+# Picture in Picture
+begin
+prog = mythtv
+button =
+config = V
+end
+
+# Change channels on both cards
+begin
+prog = mythtv
+button =
+config = N
+end
+
+# Clear cutpoints in cutlist
+begin
+prog = mythtv
+button =
+config = Q
+end
+
+
+
+
+### MPlayer lirc setup
+
+# Show OSD
+begin
+prog = mplayer
+button = guide
+config = osd
+end
+
+# Pause playback
+begin
+prog = mplayer
+button = pause
+config = pause
+end
+
+# Mute
+begin
+prog = mplayer
+button = mute
+config = mute
+end
+
+# Seek back 10 seconds
+begin
+prog = mplayer
+button = back
+config = seek -10
+end
+
+# Seek forward 30 seconds
+begin
+prog = mplayer
+button = forward
+config = seek +30
+end
+
+# Quit
+begin
+prog = mplayer
+button = stop
+config = quit
+end
+
+# Seek forward 10 minutes
+begin
+prog = mplayer
+button = skipforward
+config = seek +600
+end
+
+# Seek backward 10 minutes
+begin
+prog = mplayer
+button = skipback
+config = seek -600
+end
+
+# Toggle full-screen
+begin
+prog = mplayer
+button =
+config = vo_fullscreen
+end
+
+
+
+### Xine lirc setup
+
+begin
+prog = xine
+button = play
+config = Play
+end
+
+begin
+prog = xine
+button = stop
+config = Stop
+end
+
+begin
+prog = xine
+button = stop
+config = Quit
+end
+
+begin
+prog = xine
+button = pause
+config = Pause
+end
+
+begin
+prog = xine
+button = up
+config = EventUp
+end
+
+begin
+prog = xine
+button = down
+config = EventDown
+end
+
+begin
+prog = xine
+button = left
+config = EventLeft
+end
+
+begin
+prog = xine
+button = right
+config = EventRight
+end
+
+begin
+prog = xine
+button = ok
+config = EventSelect
+end
+
+begin
+prog = xine
+button = menu
+config = Menu
+end
+
+begin
+prog = xine
+button = forward
+#config = SpeedFaster
+config = SeekRelative+60
+end
+
+begin
+prog = xine
+button = back
+#config = SpeedSlower
+config = SeekRelative-60
+end
+
+begin
+prog = xine
+button = volup
+config = Volume+
+end
+
+begin
+prog = xine
+button = voldown
+config = Volume-
+end
+
+begin
+prog = xine
+button = mute
+config = Mute
+end
+
+begin
+prog = xine
+button = stop
+config = RootMenu
+end
+
+begin
+prog = xine
+button = skipforward
+config = EventNext
+end
+
+begin
+prog = xine
+button = skipback
+config = EventPrior
+end
+
+begin
+prog = xine
+button = guide
+config = OSDStreamInfos
+end \ No newline at end of file
diff --git a/abs/core-testing/system-templates/templates/remotes/Nova_T/preview.jpg b/abs/core-testing/system-templates/templates/remotes/Nova_T/preview.jpg
new file mode 100644
index 0000000..a034186
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Nova_T/preview.jpg
Binary files differ
diff --git a/abs/core-testing/system-templates/templates/remotes/Nova_T_USB2/lircd-novatusb2.conf b/abs/core-testing/system-templates/templates/remotes/Nova_T_USB2/lircd-novatusb2.conf
new file mode 100755
index 0000000..d2bbee6
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Nova_T_USB2/lircd-novatusb2.conf
@@ -0,0 +1,77 @@
+# Please make this file available to others
+# by sending it to <lirc@bartelmus.de>
+#
+# this config file was automatically generated
+# using lirc-0.8.1-CVS(dev/input) on Sun Oct 8 22:51:46 2006
+#
+# contributed by JonS
+#
+# brand: irrecord.nova-T-usb
+# model no. of remote control: Hauppage Nova-T USB Snowboard Shape Silver over Black
+# devices being controlled by this remote: MythTV
+#
+
+begin remote
+
+ name nova-T-usb
+ bits 16
+ eps 30
+ aeps 100
+
+ one 0 0
+ zero 0 0
+ pre_data_bits 16
+ pre_data 0x1
+ gap 199999
+ toggle_bit 0
+
+
+ begin codes
+ Go 0x0162
+ Power 0x0074
+ TV 0x0179
+ Videos 0x0189
+ Music 0x0188
+ Pictures 0x00E2
+ Guide 0x016D
+ Radio 0x0181
+ ArrowUp 0x0067
+ ArrowLeft 0x0069
+ OK 0x0160
+ ArrowRight 0x006A
+ ArrowDown 0x006C
+ BackExit 0x009E
+ Menu 0x008B
+ VolumeUp 0x0073
+ VolumeDown 0x0072
+ PrevCh 0x016B
+ Mute 0x0071
+ ChannelUp 0x0192
+ ChannelDown 0x0193
+ Record 0x00A7
+ Rewind 0x00A8
+ SkipBack 0x0195
+ Play 0x00CF
+ Pause 0x0077
+ Stop 0x0080
+ Fwdwind 0x00D0
+ SkipFwd 0x0197
+ 1 0x0002
+ 2 0x0003
+ 3 0x0004
+ 4 0x0005
+ 5 0x0006
+ 6 0x0007
+ 7 0x0008
+ 8 0x0009
+ 9 0x000A
+ * 0x0037
+ 0 0x000B
+ # 0x0029
+ Red 0x018E
+ Green 0x018F
+ Yellow 0x0190
+ Blue 0x0191
+ end codes
+
+end remote \ No newline at end of file
diff --git a/abs/core-testing/system-templates/templates/remotes/Nova_T_USB2/lircrc-novatusb2.txt b/abs/core-testing/system-templates/templates/remotes/Nova_T_USB2/lircrc-novatusb2.txt
new file mode 100755
index 0000000..fad1483
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Nova_T_USB2/lircrc-novatusb2.txt
@@ -0,0 +1,474 @@
+# Channel Up
+begin
+prog = mythtv
+button = ChannelUp
+config = Up
+end
+
+# Channel Down
+begin
+prog = mythtv
+button = ChannelDown
+config = Down
+end
+
+# General Left
+begin
+prog = mythtv
+button = ArrowLeft
+config = Left
+end
+
+# General Right
+begin
+prog = mythtv
+button = ArrowRight
+config = Right
+end
+
+ # LiveTV browse up channel
+begin
+prog = mythtv
+button = ArrowUp
+config = Up
+end
+
+# LiveTV browse down channel
+begin
+prog = mythtv
+button = ArrowDown
+config = Down
+end
+
+# Volume Up
+begin
+prog = mythtv
+button = VolumeUp
+config = F11
+end
+
+# Volume Down
+begin
+prog = mythtv
+button = VolumeDown
+config = F10
+end
+
+ # OK/Select
+begin
+prog = mythtv
+button = OK
+config = Space
+end
+
+# Play
+begin
+prog = mythtv
+button = Play
+config = Return
+end
+
+# Stop
+begin
+prog = mythtv
+button = Stop
+config = Esc
+end
+
+# Escape/Exit/Back
+begin
+prog = mythtv
+button = BackExit
+config = Esc
+end
+
+# Power Off/Exit
+begin
+prog = irexec
+button = Power
+config = /usr/bin/mythpowerbutton.sh
+end
+
+# Pause
+begin
+prog = mythtv
+button = Pause
+config = P
+end
+
+# Mute
+begin
+prog = mythtv
+button = Mute
+config = |
+end
+
+# Fast forward (10 sec default)
+begin
+prog = mythtv
+button = FwdWind
+config = Right
+end
+
+# Rewind (10 sec default)
+begin
+prog = mythtv
+button = Rewind
+config = Left
+end
+
+# Skip forward (10 min default)
+begin
+prog = mythtv
+button = SkipFwd
+config = PgDown
+end
+
+# Skip backward (10 min default)
+begin
+prog = mythtv
+button = SkipBack
+config = PgUp
+end
+
+# Record
+begin
+prog = mythtv
+button = Record
+config = R
+end
+
+# Delete
+begin
+prog = mythtv
+button = Red
+config = D
+end
+
+# OSD browse
+begin
+prog = mythtv
+button = Green
+config = O
+end
+
+# Display EPG while in live TV,
+# View selected show while in EPG
+begin
+prog = mythtv
+button = Guide
+config = M
+end
+
+# Bring up OSD info
+begin
+prog = mythtv
+button = Yellow
+config = I
+end
+
+# Change display aspect ratio
+begin
+prog = mythtv
+button = Blue
+config = W
+end
+
+# Seek to previous commercial cut point
+begin
+prog = mythtv
+button =
+config = Q
+end
+
+# Seek to next commercial cut point
+begin
+prog = mythtv
+button =
+config = Z
+end
+
+# Numbers 0-9
+
+begin
+prog = mythtv
+button = 0
+config = 0
+end
+
+begin
+prog = mythtv
+button = 1
+config = 1
+end
+
+begin
+prog = mythtv
+button = 2
+config = 2
+end
+
+begin
+prog = mythtv
+button = 3
+config = 3
+end
+
+begin
+prog = mythtv
+button = 4
+config = 4
+end
+
+begin
+prog = mythtv
+button = 5
+config = 5
+end
+
+begin
+prog = mythtv
+button = 6
+config = 6
+end
+
+begin
+prog = mythtv
+button = 7
+config = 7
+end
+
+begin
+prog = mythtv
+button = 8
+config = 8
+end
+
+begin
+prog = mythtv
+button = 9
+config = 9
+end
+
+# Previous channel
+begin
+prog = mythtv
+button = PrevCh
+config = H
+end
+
+# Closed Captioning
+begin
+prog = mythtv
+button =
+config = T
+end
+
+# Picture in Picture
+begin
+prog = mythtv
+button =
+config = V
+end
+
+# Change channels on both cards
+begin
+prog = mythtv
+button =
+config = N
+end
+
+# Clear cutpoints in cutlist
+begin
+prog = mythtv
+button =
+config = Q
+end
+
+
+
+
+### MPlayer lirc setup
+
+# Show OSD
+begin
+prog = mplayer
+button = Guide
+config = osd
+end
+
+# Pause playback
+begin
+prog = mplayer
+button = Pause
+config = pause
+end
+
+# Mute
+begin
+prog = mplayer
+button = Mute
+config = mute
+end
+
+# Seek back 10 seconds
+begin
+prog = mplayer
+button = Rewind
+config = seek -10
+end
+
+# Seek forward 30 seconds
+begin
+prog = mplayer
+button = FwdWind
+config = seek +30
+end
+
+# Quit
+begin
+prog = mplayer
+button = Stop
+config = quit
+end
+
+# Seek forward 10 minutes
+begin
+prog = mplayer
+button = SkipFwd
+config = seek +600
+end
+
+# Seek backward 10 minutes
+begin
+prog = mplayer
+button = SkipBack
+config = seek -600
+end
+
+# Toggle full-screen
+begin
+prog = mplayer
+button =
+config = vo_fullscreen
+end
+
+
+
+### Xine lirc setup
+
+begin
+prog = xine
+button = Play
+config = Play
+end
+
+begin
+prog = xine
+button = Stop
+config = Stop
+end
+
+begin
+prog = xine
+button = BackExit
+config = Quit
+end
+
+begin
+prog = xine
+button = Pause
+config = Pause
+end
+
+begin
+prog = xine
+button = ArrowUp
+config = EventUp
+end
+
+begin
+prog = xine
+button = ArrowDown
+config = EventDown
+end
+
+begin
+prog = xine
+button = ArrowLeft
+config = EventLeft
+end
+
+begin
+prog = xine
+button = ArrowRight
+config = EventRight
+end
+
+begin
+prog = xine
+button = OK
+config = EventSelect
+end
+
+begin
+prog = xine
+button = Guide
+config = Menu
+end
+
+begin
+prog = xine
+button = FwdWind
+#config = SpeedFaster
+config = SeekRelative+60
+end
+
+begin
+prog = xine
+button = Rewind
+#config = SpeedSlower
+config = SeekRelative-60
+end
+
+begin
+prog = xine
+button = VolumeUp
+config = Volume+
+end
+
+begin
+prog = xine
+button = VolumeDown
+config = Volume-
+end
+
+begin
+prog = xine
+button = Mute
+config = Mute
+end
+
+begin
+prog = xine
+button = Stop
+config = RootMenu
+end
+
+begin
+prog = xine
+button = SkipFwd
+config = EventNext
+end
+
+begin
+prog = xine
+button = SkipBack
+config = EventPrior
+end
+
+begin
+prog = xine
+button = Menu
+config = OSDStreamInfos
+end \ No newline at end of file
diff --git a/abs/core-testing/system-templates/templates/remotes/Nova_T_USB2/preview.jpg b/abs/core-testing/system-templates/templates/remotes/Nova_T_USB2/preview.jpg
new file mode 100644
index 0000000..a034186
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Nova_T_USB2/preview.jpg
Binary files differ
diff --git a/abs/core-testing/system-templates/templates/remotes/Nvidia/lircd-nvidia.conf b/abs/core-testing/system-templates/templates/remotes/Nvidia/lircd-nvidia.conf
new file mode 100755
index 0000000..133ac00
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Nvidia/lircd-nvidia.conf
@@ -0,0 +1,62 @@
+begin remote
+ name nvidia
+ bits 16
+ eps 30
+ aeps 100
+ one 0 0
+ zero 0 0
+ gap 227970
+ pre_data_bits 8
+ pre_data 0x14
+
+ begin codes
+ CANCIL 0xDF0A
+ RIGHTMOUSE 0x517C
+ LEFTMOUSE 0x4D78
+ PAUSE 0x4D78
+ STOP 0xFD28
+ REC 0xFC27
+ ADVANCE 0xFB26
+ PLAY 0xFA25
+ REPLAY 0xF924
+ FFORWARD 0xF823
+ REWIND 0xF621
+ OK 0xF31E
+ SLOW 0xF520
+ LIVETV 0xF11C
+ LEFT 0xF21D
+ RIGHT 0xF41F
+ DOWN 0xF722
+ UP 0xEF1A
+ SETUP 0xF01B
+ DVDMENU 0xEE19
+ SNAPSHOT 0xED18
+ CC 0xEB16
+ 0 0xEC17
+ 9 0xEA15
+ 8 0xE914
+ 7 0xE813
+ 6 0xE712
+ 5 0xE611
+ 4 0xE510
+ 3 0xE40F
+ 2 0xE30E
+ 1 0xE20D
+ ZOOM 0xFF2A
+ INPUT 0x002B
+ CHAN- 0xE10C
+ CHAN+ 0xE00B
+ VOL- 0xDD08
+ VOL+ 0xDE09
+ WEB 0xDC07
+ MUSIC 0xDB06
+ PHOTO 0xDA05
+ DVDVCD 0xD904
+ DVR 0xD803
+ CHSURF 0xD702
+ CHGUIDE 0xD601
+ MUTE 0xD500
+
+ end codes
+
+end remote \ No newline at end of file
diff --git a/abs/core-testing/system-templates/templates/remotes/Nvidia/lircrc-nvidia.txt b/abs/core-testing/system-templates/templates/remotes/Nvidia/lircrc-nvidia.txt
new file mode 100755
index 0000000..53c133b
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Nvidia/lircrc-nvidia.txt
@@ -0,0 +1,474 @@
+# Channel Up
+begin
+prog = mythtv
+button = CHAN+
+config = Up
+end
+
+# Channel Down
+begin
+prog = mythtv
+button = CHAN-
+config = Down
+end
+
+# General Left
+begin
+prog = mythtv
+button = LEFT
+config = Left
+end
+
+# General Right
+begin
+prog = mythtv
+button = RIGHT
+config = Right
+end
+
+ # LiveTV browse up channel
+begin
+prog = mythtv
+button = UP
+config = Up
+end
+
+# LiveTV browse down channel
+begin
+prog = mythtv
+button = DOWN
+config = Down
+end
+
+# Volume Up
+begin
+prog = mythtv
+button = VOL+
+config = F11
+end
+
+# Volume Down
+begin
+prog = mythtv
+button = VOL-
+config = F10
+end
+
+ # OK/Select
+begin
+prog = mythtv
+button = OK
+config = Space
+end
+
+# Play
+begin
+prog = mythtv
+button = PLAY
+config = Return
+end
+
+# Stop
+begin
+prog = mythtv
+button = STOP
+config = Esc
+end
+
+# Escape/Exit/Back
+begin
+prog = mythtv
+button = CANCIL
+config = Esc
+end
+
+# Power Off/Exit
+begin
+prog = irexec
+button =
+config = /usr/bin/mythpowerbutton.sh
+end
+
+# Pause
+begin
+prog = mythtv
+button = PAUSE
+config = P
+end
+
+# Mute
+begin
+prog = mythtv
+button = MUTE
+config = |
+end
+
+# Fast forward (10 sec default)
+begin
+prog = mythtv
+button = FFORWARD
+config = Right
+end
+
+# Rewind (10 sec default)
+begin
+prog = mythtv
+button = REWIND
+config = Left
+end
+
+# Skip forward (10 min default)
+begin
+prog = mythtv
+button = ADVANCE
+config = PgDown
+end
+
+# Skip backward (10 min default)
+begin
+prog = mythtv
+button = REPLAY
+config = PgUp
+end
+
+# Record
+begin
+prog = mythtv
+button = REC
+config = R
+end
+
+# Delete
+begin
+prog = mythtv
+button =
+config = D
+end
+
+# OSD browse
+begin
+prog = mythtv
+button = CHGUIDE
+config = O
+end
+
+# Display EPG while in live TV,
+# View selected show while in EPG
+begin
+prog = mythtv
+button = CHSURF
+config = M
+end
+
+# Bring up OSD info
+begin
+prog = mythtv
+button = INPUT
+config = I
+end
+
+# Change display aspect ratio
+begin
+prog = mythtv
+button = SETUP
+config = W
+end
+
+# Seek to previous commercial cut point
+begin
+prog = mythtv
+button =
+config = Q
+end
+
+# Seek to next commercial cut point
+begin
+prog = mythtv
+button =
+config = Z
+end
+
+# Numbers 0-9
+
+begin
+prog = mythtv
+button = 0
+config = 0
+end
+
+begin
+prog = mythtv
+button = 1
+config = 1
+end
+
+begin
+prog = mythtv
+button = 2
+config = 2
+end
+
+begin
+prog = mythtv
+button = 3
+config = 3
+end
+
+begin
+prog = mythtv
+button = 4
+config = 4
+end
+
+begin
+prog = mythtv
+button = 5
+config = 5
+end
+
+begin
+prog = mythtv
+button = 6
+config = 6
+end
+
+begin
+prog = mythtv
+button = 7
+config = 7
+end
+
+begin
+prog = mythtv
+button = 8
+config = 8
+end
+
+begin
+prog = mythtv
+button = 9
+config = 9
+end
+
+# Previous channel
+begin
+prog = mythtv
+button =
+config = H
+end
+
+# Closed Captioning
+begin
+prog = mythtv
+button =
+config = T
+end
+
+# Picture in Picture
+begin
+prog = mythtv
+button =
+config = V
+end
+
+# Change channels on both cards
+begin
+prog = mythtv
+button =
+config = N
+end
+
+# Clear cutpoints in cutlist
+begin
+prog = mythtv
+button =
+config = Q
+end
+
+
+
+
+### MPlayer lirc setup
+
+# Show OSD
+begin
+prog = mplayer
+button = CHGUIDE
+config = osd
+end
+
+# Pause playback
+begin
+prog = mplayer
+button = PAUSE
+config = pause
+end
+
+# Mute
+begin
+prog = mplayer
+button = MUTE
+config = mute
+end
+
+# Seek back 10 seconds
+begin
+prog = mplayer
+button = REWIND
+config = seek -10
+end
+
+# Seek forward 30 seconds
+begin
+prog = mplayer
+button = FFORWARD
+config = seek +30
+end
+
+# Quit
+begin
+prog = mplayer
+button = STOP
+config = quit
+end
+
+# Seek forward 10 minutes
+begin
+prog = mplayer
+button = ADVANCE
+config = seek +600
+end
+
+# Seek backward 10 minutes
+begin
+prog = mplayer
+button = REPLAY
+config = seek -600
+end
+
+# Toggle full-screen
+begin
+prog = mplayer
+button = ZOOM
+config = vo_fullscreen
+end
+
+
+
+### Xine lirc setup
+
+begin
+prog = xine
+button = PLAY
+config = Play
+end
+
+begin
+prog = xine
+button = STOP
+config = Stop
+end
+
+begin
+prog = xine
+button = STOP
+config = Quit
+end
+
+begin
+prog = xine
+button = PAUSE
+config = Pause
+end
+
+begin
+prog = xine
+button = UP
+config = EventUp
+end
+
+begin
+prog = xine
+button = DOWN
+config = EventDown
+end
+
+begin
+prog = xine
+button = LEFT
+config = EventLeft
+end
+
+begin
+prog = xine
+button = RIGHT
+config = EventRight
+end
+
+begin
+prog = xine
+button = OK
+config = EventSelect
+end
+
+begin
+prog = xine
+button = CHGUIDE
+config = Menu
+end
+
+begin
+prog = xine
+button = FFORWARD
+#config = SpeedFaster
+config = SeekRelative+60
+end
+
+begin
+prog = xine
+button = REWIND
+#config = SpeedSlower
+config = SeekRelative-60
+end
+
+begin
+prog = xine
+button = VOL+
+config = Volume+
+end
+
+begin
+prog = xine
+button = VOL-
+config = Volume-
+end
+
+begin
+prog = xine
+button = MUTE
+config = Mute
+end
+
+begin
+prog = xine
+button = STOP
+config = RootMenu
+end
+
+begin
+prog = xine
+button = ADVANCE
+config = EventNext
+end
+
+begin
+prog = xine
+button = REPLAY
+config = EventPrior
+end
+
+begin
+prog = xine
+button = CHSURF
+config = OSDStreamInfos
+end \ No newline at end of file
diff --git a/abs/core-testing/system-templates/templates/remotes/Nvidia/preview.jpg b/abs/core-testing/system-templates/templates/remotes/Nvidia/preview.jpg
new file mode 100644
index 0000000..a034186
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Nvidia/preview.jpg
Binary files differ
diff --git a/abs/core-testing/system-templates/templates/remotes/Nvidia_X10/lircd-nvidiax10.conf b/abs/core-testing/system-templates/templates/remotes/Nvidia_X10/lircd-nvidiax10.conf
new file mode 100755
index 0000000..1c06639
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Nvidia_X10/lircd-nvidiax10.conf
@@ -0,0 +1,71 @@
+begin remote
+ name nvidiax10
+ bits 40
+ eps 30
+ aeps 100
+ one 0 0
+ zero 0 0
+ gap 235987
+
+ begin codes
+ mute 0x14D5000000
+ playlist 0x14D6010000
+ chSurf 0x14D7020000
+ dvr 0x14D8030000
+ dvd 0x14D9040000
+ photo 0x14DA050000
+ music 0x14DB060000
+ web 0x14DC070000
+ L 0x144D780000
+ R 0x14517C0000
+ ESC 0x14DF0A0000
+ VOL+ 0x14DE090000
+ VOL- 0x14DD080000
+ CHAN- 0x14E10C0000
+ CHAN+ 0x14E00B0000
+ angle 0x14002B0000
+ zoom 0x14FF2A0000
+ 0 0x14EC170000
+ 1 0x14E20D0000
+ 2 0x14E30E0000
+ 3 0x14E40F0000
+ 4 0x14E5100000
+ 5 0x14E6110000
+ 6 0x14E7120000
+ 7 0x14E8130000
+ 8 0x14E9140000
+ 9 0x14EA150000
+ TXT 0x14EB160000
+ SnapShot 0x14ED180000
+ DVDMenu 0x14EE190000
+ setup 0x14F01B0000
+ audio 0x14F11C0000
+ slow 0x14F5200000
+ up 0x14EF1A0000
+ down 0x14F7220000
+ left 0x14F21D0000
+ right 0x14F41F0000
+ ok 0x14F31E0000
+ back 0x14F6210000
+ forward 0x14F8230000
+ fRewind 0x14F9240000
+ play 0x14FA250000
+ ffw 0x14FB260000
+ rec 0x14FC270000
+ stop 0x14FD280000
+ pause 0x14FE290000
+
+ mouse_n 0x0000001447720000
+ mouse_ne 0x000000144A750000
+ mouse_e 0x0000001446710000
+ mouse_se 0x000000144B760000
+ mouse_s 0x0000001448730000
+ mouse_sw 0x000000144C770000
+ mouse_w 0x0000001445700000
+ mouse_nw 0x0000001449740000
+ mouse_left 0x000000144E790000
+ mouse_right 0x00000014527D0000
+
+ end codes
+
+end remote \ No newline at end of file
diff --git a/abs/core-testing/system-templates/templates/remotes/Nvidia_X10/lircrc-nvidiax10.txt b/abs/core-testing/system-templates/templates/remotes/Nvidia_X10/lircrc-nvidiax10.txt
new file mode 100755
index 0000000..0774c10
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Nvidia_X10/lircrc-nvidiax10.txt
@@ -0,0 +1,474 @@
+# Channel Up
+begin
+prog = mythtv
+button = CHAN+
+config = Up
+end
+
+# Channel Down
+begin
+prog = mythtv
+button = CHAN-
+config = Down
+end
+
+# General Left
+begin
+prog = mythtv
+button = left
+config = Left
+end
+
+# General Right
+begin
+prog = mythtv
+button = right
+config = Right
+end
+
+ # LiveTV browse up channel
+begin
+prog = mythtv
+button = up
+config = Up
+end
+
+# LiveTV browse down channel
+begin
+prog = mythtv
+button = down
+config = Down
+end
+
+# Volume Up
+begin
+prog = mythtv
+button = VOL+
+config = F11
+end
+
+# Volume Down
+begin
+prog = mythtv
+button = VOL-
+config = F10
+end
+
+ # OK/Select
+begin
+prog = mythtv
+button = ok
+config = Space
+end
+
+# Play
+begin
+prog = mythtv
+button = play
+config = Return
+end
+
+# Stop
+begin
+prog = mythtv
+button = stop
+config = Esc
+end
+
+# Escape/Exit/Back
+begin
+prog = mythtv
+button = ESC
+config = Esc
+end
+
+# Power Off/Exit
+begin
+prog = irexec
+button =
+config = /usr/bin/mythpowerbutton.sh
+end
+
+# Pause
+begin
+prog = mythtv
+button = pause
+config = P
+end
+
+# Mute
+begin
+prog = mythtv
+button = mute
+config = |
+end
+
+# Fast forward (10 sec default)
+begin
+prog = mythtv
+button = ffw
+config = Right
+end
+
+# Rewind (10 sec default)
+begin
+prog = mythtv
+button = fRewind
+config = Left
+end
+
+# Skip forward (10 min default)
+begin
+prog = mythtv
+button = forward
+config = PgDown
+end
+
+# Skip backward (10 min default)
+begin
+prog = mythtv
+button = back
+config = PgUp
+end
+
+# Record
+begin
+prog = mythtv
+button = rec
+config = R
+end
+
+# Delete
+begin
+prog = mythtv
+button =
+config = D
+end
+
+# OSD browse
+begin
+prog = mythtv
+button =
+config = O
+end
+
+# Display EPG while in live TV,
+# View selected show while in EPG
+begin
+prog = mythtv
+button = chSurf
+config = M
+end
+
+# Bring up OSD info
+begin
+prog = mythtv
+button =
+config = I
+end
+
+# Change display aspect ratio
+begin
+prog = mythtv
+button =
+config = W
+end
+
+# Seek to previous commercial cut point
+begin
+prog = mythtv
+button =
+config = Q
+end
+
+# Seek to next commercial cut point
+begin
+prog = mythtv
+button =
+config = Z
+end
+
+# Numbers 0-9
+
+begin
+prog = mythtv
+button = 0
+config = 0
+end
+
+begin
+prog = mythtv
+button = 1
+config = 1
+end
+
+begin
+prog = mythtv
+button = 2
+config = 2
+end
+
+begin
+prog = mythtv
+button = 3
+config = 3
+end
+
+begin
+prog = mythtv
+button = 4
+config = 4
+end
+
+begin
+prog = mythtv
+button = 5
+config = 5
+end
+
+begin
+prog = mythtv
+button = 6
+config = 6
+end
+
+begin
+prog = mythtv
+button = 7
+config = 7
+end
+
+begin
+prog = mythtv
+button = 8
+config = 8
+end
+
+begin
+prog = mythtv
+button = 9
+config = 9
+end
+
+# Previous channel
+begin
+prog = mythtv
+button =
+config = H
+end
+
+# Closed Captioning
+begin
+prog = mythtv
+button = TXT
+config = T
+end
+
+# Picture in Picture
+begin
+prog = mythtv
+button =
+config = V
+end
+
+# Change channels on both cards
+begin
+prog = mythtv
+button =
+config = N
+end
+
+# Clear cutpoints in cutlist
+begin
+prog = mythtv
+button =
+config = Q
+end
+
+
+
+
+### MPlayer lirc setup
+
+# Show OSD
+begin
+prog = mplayer
+button = chSurf
+config = osd
+end
+
+# Pause playback
+begin
+prog = mplayer
+button = pause
+config = pause
+end
+
+# Mute
+begin
+prog = mplayer
+button = mute
+config = mute
+end
+
+# Seek back 10 seconds
+begin
+prog = mplayer
+button = fRewind
+config = seek -10
+end
+
+# Seek forward 30 seconds
+begin
+prog = mplayer
+button = ffw
+config = seek +30
+end
+
+# Quit
+begin
+prog = mplayer
+button = stop
+config = quit
+end
+
+# Seek forward 10 minutes
+begin
+prog = mplayer
+button = forward
+config = seek +600
+end
+
+# Seek backward 10 minutes
+begin
+prog = mplayer
+button = back
+config = seek -600
+end
+
+# Toggle full-screen
+begin
+prog = mplayer
+button = zoom
+config = vo_fullscreen
+end
+
+
+
+### Xine lirc setup
+
+begin
+prog = xine
+button = play
+config = Play
+end
+
+begin
+prog = xine
+button = stop
+config = Stop
+end
+
+begin
+prog = xine
+button = ESC
+config = Quit
+end
+
+begin
+prog = xine
+button = pause
+config = Pause
+end
+
+begin
+prog = xine
+button = up
+config = EventUp
+end
+
+begin
+prog = xine
+button = down
+config = EventDown
+end
+
+begin
+prog = xine
+button = left
+config = EventLeft
+end
+
+begin
+prog = xine
+button = right
+config = EventRight
+end
+
+begin
+prog = xine
+button = ok
+config = EventSelect
+end
+
+begin
+prog = xine
+button = chSurf
+config = Menu
+end
+
+begin
+prog = xine
+button = ffw
+#config = SpeedFaster
+config = SeekRelative+60
+end
+
+begin
+prog = xine
+button = fRewind
+#config = SpeedSlower
+config = SeekRelative-60
+end
+
+begin
+prog = xine
+button = VOL+
+config = Volume+
+end
+
+begin
+prog = xine
+button = VOL-
+config = Volume-
+end
+
+begin
+prog = xine
+button = mute
+config = Mute
+end
+
+begin
+prog = xine
+button = stop
+config = RootMenu
+end
+
+begin
+prog = xine
+button = forward
+config = EventNext
+end
+
+begin
+prog = xine
+button = back
+config = EventPrior
+end
+
+begin
+prog = xine
+button =
+config = OSDStreamInfos
+end \ No newline at end of file
diff --git a/abs/core-testing/system-templates/templates/remotes/Nvidia_X10/preview.jpg b/abs/core-testing/system-templates/templates/remotes/Nvidia_X10/preview.jpg
new file mode 100644
index 0000000..a034186
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Nvidia_X10/preview.jpg
Binary files differ
diff --git a/abs/core-testing/system-templates/templates/remotes/One4All/lircd-one4all.conf b/abs/core-testing/system-templates/templates/remotes/One4All/lircd-one4all.conf
new file mode 100755
index 0000000..00060fd
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/One4All/lircd-one4all.conf
@@ -0,0 +1,111 @@
+#------------------------------------------------------------------------------
+# contributed by Claas Langbehn (claas@bigfoot.com) 01-May-2000
+#------------------------------------------------------------------------------
+#
+# filename: RC-5
+# encoding: shift encoded, RC-5
+# brand: Philips (and others)
+# model: all
+# supported devices: all
+#
+#------------------------------------------------------------------------------
+
+begin remote
+
+ name one4all
+ bits 11
+ flags RC5|CONST_LENGTH
+ eps 20
+ aeps 0
+
+ header 0 0
+ one 889 889
+ zero 889 889
+ plead 889
+ ptrail 0
+ foot 0 0
+ repeat 0 0
+ pre_data_bits 2
+ pre_data 0x02
+ post_data_bits 0
+ post_data 0x0
+ pre 0 0
+ post 0 0
+ gap 113792
+ toggle_bit 2
+ frequency 36000
+ duty_cycle 50
+
+ begin codes
+ 0 0x0000000000000140
+ 1 0x0000000000000141
+ 2 0x0000000000000142
+ 3 0x0000000000000143
+ 4 0x0000000000000144
+ 5 0x0000000000000145
+ 6 0x0000000000000146
+ 7 0x0000000000000147
+ 8 0x0000000000000148
+ 9 0x0000000000000149
+ GUIDE 0x000000000000014a
+ SELECT 0x000000000000014b
+ POWER 0x000000000000014c
+ Mute 0x000000000000014d
+ Move 0x000000000000014e
+ VOL+ 0x0000000000000150
+ VOL- 0x0000000000000151
+ PREVCH 0x0000000000000152
+ NEXTCH 0x0000000000000153
+ SLOMO 0x0000000000000154
+ ANGLE 0x0000000000000155
+ MENU 0x000000000000015d
+ SUBT 0x000000000000015e
+ CH+ 0x0000000000000160
+ CH- 0x0000000000000161
+ PIP 0x0000000000000162
+ Swap 0x0000000000000163
+ PAUSE 0x0000000000000169
+ PVRMENU 0x000000000000016e
+ EXIT 0x0000000000000171
+ REW 0x0000000000000172
+ REPLAY 0x0000000000000173
+ FFW 0x0000000000000174
+ PLAY 0x0000000000000175
+ STOP 0x0000000000000176
+ REC 0x0000000000000177
+ SKIP 0x0000000000000178
+ Prev 0x000000000000017b
+ INFO 0x000000000000017c
+ TV/VID 0x000000000000017e
+ Audio 0x000000000000017f
+ THDN 0x0000000000000268
+ THUP 0x0000000000000269
+ end codes
+
+end remote
+
+begin remote
+
+ name PHILIPS_RC-5_ALT
+ bits 13
+ flags RC5|CONST_LENGTH
+ eps 20
+ aeps 0
+
+ one 889 889
+ zero 889 889
+ plead 889
+ gap 113792
+ min_repeat 1
+ toggle_bit 2
+
+ frequency 36000
+ duty_cycle 50
+
+ begin codes
+ LEFT 0x0000000000000155
+ RIGHT 0x0000000000000156
+ end codes
+
+end remote
+
diff --git a/abs/core-testing/system-templates/templates/remotes/One4All/lircrc-one4all.txt b/abs/core-testing/system-templates/templates/remotes/One4All/lircrc-one4all.txt
new file mode 100755
index 0000000..0b67174
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/One4All/lircrc-one4all.txt
@@ -0,0 +1,730 @@
+# lircrc.URC-6131/RC-5 (Hauppauge PVR-250)
+# 2004-01-25, Joe Votour
+# mailto:vulturej@vulturesnest.net
+# Save this file in ~/.mythtv/lircrc, and make a symlink with ~/.lircrc
+# TODO: Test/configure the mplayer buttons
+# Finish the rest of the remote buttons for MythTV
+
+# Power button/quit
+#begin
+# prog = mythtv
+# button = POWER
+# config = Esc
+#end
+
+# Change TV card input
+begin
+ prog = mythtv
+ button = TV/VID
+ config = C
+end
+
+# Toggle Picture-In-Picture
+begin
+ prog = mythtv
+ button = PIP
+ config = V
+end
+
+# Swap the PiP windows
+begin
+ prog = mythtv
+ button = Swap
+ config = N
+end
+
+# Number keys
+begin
+ prog = mythtv
+ button = 1
+ config = 1
+end
+
+begin
+ prog = mythtv
+ button = 2
+ config = 2
+end
+
+begin
+ prog = mythtv
+ button = 3
+ config = 3
+end
+
+begin
+ prog = mythtv
+ button = 4
+ config = 4
+end
+
+begin
+ prog = mythtv
+ button = 5
+ config = 5
+end
+
+begin
+ prog = mythtv
+ button = 6
+ config = 6
+end
+
+begin
+ prog = mythtv
+ button = 7
+ config = 7
+end
+
+begin
+ prog = mythtv
+ button = 8
+ config = 8
+end
+
+begin
+ prog = mythtv
+ button = 9
+ config = 9
+end
+
+begin
+ prog = mythtv
+ button = 0
+ config = 0
+end
+
+# Exit button (returning to menu)
+begin
+ prog = mythtv
+ button = EXIT
+ config = Esc
+end
+
+# Menu button (TV menu)
+begin
+ prog = mythtv
+ button = MENU
+ config = M
+end
+
+# Guide button (EPG)
+begin
+ prog = mythtv
+ button = GUIDE
+ config = S
+end
+
+# Delete (i.e. View recordings screen)
+begin
+ prog = mythtv
+ button = POWER
+ config = D
+end
+
+# View program info (OSD)
+begin
+ prog = mythtv
+ button = INFO
+ config = I
+end
+
+# Note the "repeat =" strings in the volume and channel.
+# This means that if you hold down the key, every nth instance will be
+# passed. This depends on your system, so you may want to increase or
+# decrease this and see what happens. repeat = 1 is probably too
+# fast.
+
+# Volume Down
+begin
+ prog = mythtv
+ button = VOL-
+ repeat = 3
+ config = F10
+end
+
+# Volume Up
+begin
+ prog = mythtv
+ button = VOL+
+ repeat = 3
+ config = F11
+end
+
+# Channel Up
+begin
+ prog = mythtv
+ button = THUP
+ repeat = 3
+ config = Up
+end
+
+# Channel Down
+begin
+ prog = mythtv
+ button = THDN
+ repeat = 3
+ config = Down
+end
+
+# Navigational arrows
+begin
+ prog = mythtv
+ button = LEFT
+ repeat = 3
+ config = Left
+end
+
+begin
+ prog = mythtv
+ button = RIGHT
+ repeat = 3
+ config = Right
+end
+
+begin
+ prog = mythtv
+ button = SELECT
+ config = Return
+end
+
+# Mute
+begin
+ prog = mythtv
+ button = Mute
+ config = F9
+end
+
+# Browse mode
+#begin
+# prog = mythtv
+# button = DISPLAY
+# config = O
+#end
+
+# Channel history
+begin
+ prog = mythtv
+ button = Prev
+ config = H
+end
+
+# Rewind
+begin
+ prog = mythtv
+ button = REW
+ config = Left
+end
+
+# Play
+begin
+ prog = mythtv
+ button = PLAY
+ config = P
+end
+
+# Fast-forward
+begin
+ prog = mythtv
+ button = FFW
+ config = Right
+end
+
+# Next chapter (page down for EPG)
+begin
+ prog = mythtv
+ button = NEXTCH
+ config = PgDown
+end
+
+# Previous chapter (page up for EPG)
+begin
+ prog = mythtv
+ button = PREVCH
+ config = PgUp
+end
+
+# Record
+begin
+ prog = mythtv
+ button = REC
+ config = R
+end
+
+# Teletext/Closed Captioning
+# Audio button doubles as CC
+begin
+ prog = mythtv
+ button = Audio
+ config = T
+end
+
+# Pause
+begin
+ prog = mythtv
+ button = PAUSE
+ config = P
+end
+
+# Backwards commercial skip
+begin
+ prog = mythtv
+ button = REPLAY
+ config = Q
+end
+
+# Forward commercial skip
+begin
+ prog = mythtv
+ button = SKIP
+ config = Z
+end
+
+#
+# mplayer keys (Untested)
+#
+begin
+ prog = mplayer
+ button = EXIT
+ config = quit
+end
+
+begin
+ prog = mplayer
+ button = MUTE
+ config = mute
+end
+
+begin
+ prog = mplayer
+ button = VOL-
+ config = volume -1
+ repeat = 1
+end
+
+begin
+ prog = mplayer
+ button = VOL+
+ config = volume 1
+ repeat = 1
+end
+
+begin
+ prog = mplayer
+ button = PLAY
+ config = pause
+end
+
+begin
+ prog = mplayer
+ button = PAUSE
+ config = pause
+end
+
+begin
+ prog = mplayer
+ button = STOP
+ config = quit
+end
+
+begin
+ prog = mplayer
+ button = DISPLAY
+ config = osd
+end
+
+begin
+ prog = mplayer
+ button = FFW
+ config = skip 1
+end
+
+begin
+ prog = mplayer
+ button = REW
+ config = skip -1
+end
+
+begin
+ prog = mplayer
+ button = REPLAY
+ config = skip -60
+end
+
+begin
+ prog = mplayer
+ button = SKIP
+ config = skip 60
+end
+
+##
+# xine key bindings.
+# Automatically generated by xine-ui version 0.9.23.
+# To run xine:
+# MythVideo: xine -D -pfh %s
+# MythDVD: xine -D -pfhq --auto-scan dvd (for DVD)
+# xine -D -pfhq --auto-scan vcdo (for VCD)
+##
+
+# start playback
+begin
+ button = PLAY
+ prog = xine
+ repeat = 3
+ config = Play
+end
+
+# playback pause toggle
+begin
+ button = PAUSE
+ prog = xine
+ repeat = 3
+ config = Pause
+end
+
+# stop playback
+begin
+ button = STOP
+ prog = xine
+ repeat = 3
+ config = Stop
+end
+
+# set position to -10 minutes in current stream
+begin
+ button = REPLAY
+ prog = xine
+ repeat = 3
+ config = SeekRelative-600
+end
+
+# set position to +10 minutes in current stream
+begin
+ button = SKIP
+ prog = xine
+ repeat = 3
+ config = SeekRelative+600
+end
+
+# set position to -30 seconds in current stream
+begin
+ button = REW
+ prog = xine
+ repeat = 3
+ config = SeekRelative-30
+end
+
+# set position to +30 seconds in current stream
+begin
+ button = FFW
+ prog = xine
+ repeat = 3
+ config = SeekRelative+30
+end
+
+# decrement playback speed
+begin
+ button = SLOMO
+ prog = xine
+ repeat = 3
+ config = SpeedSlower
+end
+
+# reset playback speed
+begin
+ button = PLAY
+ prog = xine
+ repeat = 3
+ config = SpeedReset
+end
+
+# increment audio volume
+begin
+ button = VOL+
+ prog = xine
+ repeat = 2
+ config = Volume+
+end
+
+# decrement audio volume
+begin
+ button = VOL-
+ prog = xine
+ repeat = 2
+ config = Volume-
+end
+
+# increment amplification level
+#begin
+# remote = xxxxx
+# button = xxxxx
+# prog = xine
+# repeat = 3
+# config = Amp+
+#end
+
+# decrement amplification level
+#begin
+# remote = xxxxx
+# button = xxxxx
+# prog = xine
+# repeat = 3
+# config = Amp-
+#end
+
+# reset amplification to default value
+#begin
+# remote = xxxxx
+# button = xxxxx
+# prog = xine
+# repeat = 3
+# config = ResetAmp
+#end
+
+# audio muting toggle
+begin
+ button = Mute
+ prog = xine
+ repeat = 3
+ config = Mute
+end
+
+# select next audio channel
+begin
+ button = Audio
+ prog = xine
+ repeat = 3
+ config = AudioChannelNext
+end
+
+# select next sub picture (subtitle) channel
+begin
+ button = SUBT
+ prog = xine
+ repeat = 3
+ config = SpuNext
+end
+
+# jump to media Menu
+#begin
+# button = MENU
+# prog = xine
+# repeat = 3
+# config = Menu
+#end
+
+# jump to Title Menu
+#begin
+# remote = xxxxx
+# button = xxxxx
+# prog = xine
+# repeat = 3
+# config = TitleMenu
+#end
+
+# jump to Root Menu
+begin
+ button = MENU
+ prog = xine
+ repeat = 3
+ config = RootMenu
+end
+
+# jump to Subpicture Menu
+begin
+ remote = xxxxx
+ button = xxxxx
+ prog = xine
+ repeat = 3
+ config = SubpictureMenu
+end
+
+# jump to Audio Menu
+begin
+ button = Audio
+ prog = xine
+ repeat = 3
+ config = AudioMenu
+end
+
+# jump to Angle Menu
+begin
+ button = Angle
+ prog = xine
+ repeat = 3
+ config = AngleMenu
+end
+
+# jump to Part Menu
+#begin
+# remote = xxxxx
+# button = xxxxx
+# prog = xine
+# repeat = 3
+# config = PartMenu
+#end
+
+# menu navigate up
+begin
+ button = CH+
+ prog = xine
+ repeat = 3
+ config = EventUp
+end
+
+# menu navigate down
+begin
+ button = CH-
+ prog = xine
+ repeat = 3
+ config = EventDown
+end
+
+# menu navigate left
+begin
+ button = LEFT
+ prog = xine
+ repeat = 3
+ config = EventLeft
+end
+
+# menu navigate right
+begin
+ button = RIGHT
+ prog = xine
+ repeat = 3
+ config = EventRight
+end
+
+# menu select
+begin
+ button = SELECT
+ prog = xine
+ repeat = 3
+ config = EventSelect
+end
+
+# jump to next chapter
+begin
+ button = NEXTCH
+ prog = xine
+ repeat = 3
+ config = EventNext
+end
+
+# jump to previous chapter
+begin
+ button = PREVCH
+ prog = xine
+ repeat = 3
+ config = EventPrior
+end
+
+# select next angle
+begin
+ button = ANGLE
+ prog = xine
+ repeat = 3
+ config = EventAngleNext
+end
+
+# display stream information using OSD
+begin
+ button = INFO
+ prog = xine
+ repeat = 3
+ config = OSDStreamInfos
+end
+
+# enter the number 0
+begin
+ button = 0
+ prog = xine
+ repeat = 3
+ config = Number0
+end
+
+# enter the number 1
+begin
+ button = 1
+ prog = xine
+ repeat = 3
+ config = Number1
+end
+
+# enter the number 2
+begin
+ button = 2
+ prog = xine
+ repeat = 3
+ config = Number2
+end
+
+# enter the number 3
+begin
+ button = 3
+ prog = xine
+ repeat = 3
+ config = Number3
+end
+
+# enter the number 4
+begin
+ button = 4
+ prog = xine
+ repeat = 3
+ config = Number4
+end
+
+# enter the number 5
+begin
+ button = 5
+ prog = xine
+ repeat = 3
+ config = Number5
+end
+
+# enter the number 6
+begin
+ button = 6
+ prog = xine
+ repeat = 3
+ config = Number6
+end
+
+# enter the number 7
+begin
+ button = 7
+ prog = xine
+ repeat = 3
+ config = Number7
+end
+
+# enter the number 8
+begin
+ button = 8
+ prog = xine
+ repeat = 3
+ config = Number8
+end
+
+# enter the number 9
+begin
+ button = 9
+ prog = xine
+ repeat = 3
+ config = Number9
+end
+
+# quit the program
+begin
+ button = POWER
+ prog = xine
+ repeat = 3
+ config = Quit
+end
+
+##
+# End of xine key bindings.
+##
+
diff --git a/abs/core-testing/system-templates/templates/remotes/One4All/preview.jpg b/abs/core-testing/system-templates/templates/remotes/One4All/preview.jpg
new file mode 100644
index 0000000..770d54b
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/One4All/preview.jpg
Binary files differ
diff --git a/abs/core-testing/system-templates/templates/remotes/One4All_6131/lircd-one4all6131.conf b/abs/core-testing/system-templates/templates/remotes/One4All_6131/lircd-one4all6131.conf
new file mode 100755
index 0000000..9562f79
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/One4All_6131/lircd-one4all6131.conf
@@ -0,0 +1,31 @@
+begin remote
+ name OneForAll_6131
+ bits 20
+ flags SPACE_ENC|CONST_LENGTH
+ eps 30
+ aeps 100
+ header 2449 542
+ one 1259 527
+ zero 675 527
+ gap 45430
+
+ begin codes
+ Left 0xDEB92
+ Right 0x3EB92
+ Up 0x9EB92
+ Down 0x5EB92
+ Select 0xD0B92
+ Exit 0x70B92
+ Info 0x2AB92
+ Guide 0x58B92
+ Menu 0xD8B92
+ Play 0x4CB92
+ Pause 0x9CB92
+ Stop 0x1CB92
+ JumpBack 0x6CB92
+ JumpAhead 0xECB92
+ JumpToStart 0x0CB92
+
+ end codes
+
+end remote \ No newline at end of file
diff --git a/abs/core-testing/system-templates/templates/remotes/One4All_6131/lircrc-one4all6131.txt b/abs/core-testing/system-templates/templates/remotes/One4All_6131/lircrc-one4all6131.txt
new file mode 100755
index 0000000..728c046
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/One4All_6131/lircrc-one4all6131.txt
@@ -0,0 +1,474 @@
+# Channel Up
+begin
+prog = mythtv
+button = Up
+config = Up
+end
+
+# Channel Down
+begin
+prog = mythtv
+button = Down
+config = Down
+end
+
+# General Left
+begin
+prog = mythtv
+button =
+config = Left
+end
+
+# General Right
+begin
+prog = mythtv
+button =
+config = Right
+end
+
+ # LiveTV browse up channel
+begin
+prog = mythtv
+button = Up
+config = Up
+end
+
+# LiveTV browse down channel
+begin
+prog = mythtv
+button = Down
+config = Down
+end
+
+# Volume Up
+begin
+prog = mythtv
+button = Right
+config = F11
+end
+
+# Volume Down
+begin
+prog = mythtv
+button = Left
+config = F10
+end
+
+ # OK/Select
+begin
+prog = mythtv
+button = Select
+config = Space
+end
+
+# Play
+begin
+prog = mythtv
+button = Play
+config = Return
+end
+
+# Stop
+begin
+prog = mythtv
+button = Stop
+config = Esc
+end
+
+# Escape/Exit/Back
+begin
+prog = mythtv
+button = Exit
+config = Esc
+end
+
+# Power Off/Exit
+begin
+prog = irexec
+button =
+config = /usr/bin/mythpowerbutton.sh
+end
+
+# Pause
+begin
+prog = mythtv
+button = Pause
+config = P
+end
+
+# Mute
+begin
+prog = mythtv
+button =
+config = |
+end
+
+# Fast forward (10 sec default)
+begin
+prog = mythtv
+button = JumpAhead
+config = Right
+end
+
+# Rewind (10 sec default)
+begin
+prog = mythtv
+button = JumpBack
+config = Left
+end
+
+# Skip forward (10 min default)
+begin
+prog = mythtv
+button =
+config = PgDown
+end
+
+# Skip backward (10 min default)
+begin
+prog = mythtv
+button =
+config = PgUp
+end
+
+# Record
+begin
+prog = mythtv
+button =
+config = R
+end
+
+# Delete
+begin
+prog = mythtv
+button =
+config = D
+end
+
+# OSD browse
+begin
+prog = mythtv
+button = Menu
+config = O
+end
+
+# Display EPG while in live TV,
+# View selected show while in EPG
+begin
+prog = mythtv
+button = Guide
+config = M
+end
+
+# Bring up OSD info
+begin
+prog = mythtv
+button = Info
+config = I
+end
+
+# Change display aspect ratio
+begin
+prog = mythtv
+button =
+config = W
+end
+
+# Seek to previous commercial cut point
+begin
+prog = mythtv
+button =
+config = Q
+end
+
+# Seek to next commercial cut point
+begin
+prog = mythtv
+button =
+config = Z
+end
+
+# Numbers 0-9
+
+begin
+prog = mythtv
+button = 0
+config = 0
+end
+
+begin
+prog = mythtv
+button = 1
+config = 1
+end
+
+begin
+prog = mythtv
+button = 2
+config = 2
+end
+
+begin
+prog = mythtv
+button = 3
+config = 3
+end
+
+begin
+prog = mythtv
+button = 4
+config = 4
+end
+
+begin
+prog = mythtv
+button = 5
+config = 5
+end
+
+begin
+prog = mythtv
+button = 6
+config = 6
+end
+
+begin
+prog = mythtv
+button = 7
+config = 7
+end
+
+begin
+prog = mythtv
+button = 8
+config = 8
+end
+
+begin
+prog = mythtv
+button = 9
+config = 9
+end
+
+# Previous channel
+begin
+prog = mythtv
+button =
+config = H
+end
+
+# Closed Captioning
+begin
+prog = mythtv
+button =
+config = T
+end
+
+# Picture in Picture
+begin
+prog = mythtv
+button =
+config = V
+end
+
+# Change channels on both cards
+begin
+prog = mythtv
+button =
+config = N
+end
+
+# Clear cutpoints in cutlist
+begin
+prog = mythtv
+button =
+config = Q
+end
+
+
+
+
+### MPlayer lirc setup
+
+# Show OSD
+begin
+prog = mplayer
+button = Menu
+config = osd
+end
+
+# Pause playback
+begin
+prog = mplayer
+button = Pause
+config = pause
+end
+
+# Mute
+begin
+prog = mplayer
+button =
+config = mute
+end
+
+# Seek back 10 seconds
+begin
+prog = mplayer
+button = JumpBack
+config = seek -10
+end
+
+# Seek forward 30 seconds
+begin
+prog = mplayer
+button = JumpAhead
+config = seek +30
+end
+
+# Quit
+begin
+prog = mplayer
+button = Stop
+config = quit
+end
+
+# Seek forward 10 minutes
+begin
+prog = mplayer
+button =
+config = seek +600
+end
+
+# Seek backward 10 minutes
+begin
+prog = mplayer
+button =
+config = seek -600
+end
+
+# Toggle full-screen
+begin
+prog = mplayer
+button =
+config = vo_fullscreen
+end
+
+
+
+### Xine lirc setup
+
+begin
+prog = xine
+button = Play
+config = Play
+end
+
+begin
+prog = xine
+button = Stop
+config = Stop
+end
+
+begin
+prog = xine
+button = Exit
+config = Quit
+end
+
+begin
+prog = xine
+button = Pause
+config = Pause
+end
+
+begin
+prog = xine
+button = Up
+config = EventUp
+end
+
+begin
+prog = xine
+button = Down
+config = EventDown
+end
+
+begin
+prog = xine
+button =
+config = EventLeft
+end
+
+begin
+prog = xine
+button =
+config = EventRight
+end
+
+begin
+prog = xine
+button = Select
+config = EventSelect
+end
+
+begin
+prog = xine
+button = Menu
+config = Menu
+end
+
+begin
+prog = xine
+button = JumpAhead
+#config = SpeedFaster
+config = SeekRelative+60
+end
+
+begin
+prog = xine
+button = JumpBack
+#config = SpeedSlower
+config = SeekRelative-60
+end
+
+begin
+prog = xine
+button = Right
+config = Volume+
+end
+
+begin
+prog = xine
+button = Left
+config = Volume-
+end
+
+begin
+prog = xine
+button =
+config = Mute
+end
+
+begin
+prog = xine
+button = Stop
+config = RootMenu
+end
+
+begin
+prog = xine
+button =
+config = EventNext
+end
+
+begin
+prog = xine
+button =
+config = EventPrior
+end
+
+begin
+prog = xine
+button = Info
+config = OSDStreamInfos
+end \ No newline at end of file
diff --git a/abs/core-testing/system-templates/templates/remotes/One4All_6131/preview.jpg b/abs/core-testing/system-templates/templates/remotes/One4All_6131/preview.jpg
new file mode 100644
index 0000000..cc0751e
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/One4All_6131/preview.jpg
Binary files differ
diff --git a/abs/core-testing/system-templates/templates/remotes/One4All_7544/lircd-one4all7544.conf b/abs/core-testing/system-templates/templates/remotes/One4All_7544/lircd-one4all7544.conf
new file mode 100755
index 0000000..c1787ef
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/One4All_7544/lircd-one4all7544.conf
@@ -0,0 +1,49 @@
+begin remote
+ name one4all_7544
+ bits 12
+ flags SPACE_ENC|CONST_LENGTH
+ eps 30
+ aeps 100
+ header 2399 615
+ one 1175 620
+ zero 572 620
+ gap 45451
+
+ begin codes
+ 1 0x01A
+ 2 0x81A
+ 3 0x41A
+ 4 0xC1A
+ 5 0x21A
+ 6 0xA1A
+ 7 0x61A
+ 8 0xE1A
+ 9 0x11A
+ 10 0x51A
+ 0 0x91A
+ av 0x55A
+ c+ 0x09A
+ c- 0x89A
+ exit 0x55A
+ ok 0x8BA
+ up 0x43A
+ down 0xC3A
+ left 0x47A
+ right 0x87A
+ v+ 0x49A
+ v- 0xC9A
+ mute 0xADA
+ rr 0xD9A
+ play 0x59A
+ pause 0x99A
+ ff 0x39A
+ red 0x1BA
+ green 0x19A
+ yellow 0xB9A
+ blue 0xE5A
+ menu 0xB3A
+ power 0xA9A
+
+ end codes
+
+end remote \ No newline at end of file
diff --git a/abs/core-testing/system-templates/templates/remotes/One4All_7544/lircrc-one4all7544.txt b/abs/core-testing/system-templates/templates/remotes/One4All_7544/lircrc-one4all7544.txt
new file mode 100755
index 0000000..57e702a
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/One4All_7544/lircrc-one4all7544.txt
@@ -0,0 +1,474 @@
+# Channel Up
+begin
+prog = mythtv
+button = c+
+config = Up
+end
+
+# Channel Down
+begin
+prog = mythtv
+button = c-
+config = Down
+end
+
+# General Left
+begin
+prog = mythtv
+button = left
+config = Left
+end
+
+# General Right
+begin
+prog = mythtv
+button = right
+config = Right
+end
+
+ # LiveTV browse up channel
+begin
+prog = mythtv
+button = up
+config = Up
+end
+
+# LiveTV browse down channel
+begin
+prog = mythtv
+button = down
+config = Down
+end
+
+# Volume Up
+begin
+prog = mythtv
+button = v+
+config = F11
+end
+
+# Volume Down
+begin
+prog = mythtv
+button = v-
+config = F10
+end
+
+ # OK/Select
+begin
+prog = mythtv
+button = ok
+config = Space
+end
+
+# Play
+begin
+prog = mythtv
+button = play
+config = Return
+end
+
+# Stop
+begin
+prog = mythtv
+button = exit
+config = Esc
+end
+
+# Escape/Exit/Back
+begin
+prog = mythtv
+button =
+config = Esc
+end
+
+# Power Off/Exit
+begin
+prog = irexec
+button = power
+config = /usr/bin/mythpowerbutton.sh
+end
+
+# Pause
+begin
+prog = mythtv
+button = pause
+config = P
+end
+
+# Mute
+begin
+prog = mythtv
+button = mute
+config = |
+end
+
+# Fast forward (10 sec default)
+begin
+prog = mythtv
+button = ff
+config = Right
+end
+
+# Rewind (10 sec default)
+begin
+prog = mythtv
+button = rr
+config = Left
+end
+
+# Skip forward (10 min default)
+begin
+prog = mythtv
+button =
+config = PgDown
+end
+
+# Skip backward (10 min default)
+begin
+prog = mythtv
+button =
+config = PgUp
+end
+
+# Record
+begin
+prog = mythtv
+button = red
+config = R
+end
+
+# Delete
+begin
+prog = mythtv
+button =
+config = D
+end
+
+# OSD browse
+begin
+prog = mythtv
+button = yellow
+config = O
+end
+
+# Display EPG while in live TV,
+# View selected show while in EPG
+begin
+prog = mythtv
+button = menu
+config = M
+end
+
+# Bring up OSD info
+begin
+prog = mythtv
+button = green
+config = I
+end
+
+# Change display aspect ratio
+begin
+prog = mythtv
+button = blue
+config = W
+end
+
+# Seek to previous commercial cut point
+begin
+prog = mythtv
+button =
+config = Q
+end
+
+# Seek to next commercial cut point
+begin
+prog = mythtv
+button =
+config = Z
+end
+
+# Numbers 0-9
+
+begin
+prog = mythtv
+button = 0
+config = 0
+end
+
+begin
+prog = mythtv
+button = 1
+config = 1
+end
+
+begin
+prog = mythtv
+button = 2
+config = 2
+end
+
+begin
+prog = mythtv
+button = 3
+config = 3
+end
+
+begin
+prog = mythtv
+button = 4
+config = 4
+end
+
+begin
+prog = mythtv
+button = 5
+config = 5
+end
+
+begin
+prog = mythtv
+button = 6
+config = 6
+end
+
+begin
+prog = mythtv
+button = 7
+config = 7
+end
+
+begin
+prog = mythtv
+button = 8
+config = 8
+end
+
+begin
+prog = mythtv
+button = 9
+config = 9
+end
+
+# Previous channel
+begin
+prog = mythtv
+button =
+config = H
+end
+
+# Closed Captioning
+begin
+prog = mythtv
+button =
+config = T
+end
+
+# Picture in Picture
+begin
+prog = mythtv
+button =
+config = V
+end
+
+# Change channels on both cards
+begin
+prog = mythtv
+button =
+config = N
+end
+
+# Clear cutpoints in cutlist
+begin
+prog = mythtv
+button =
+config = Q
+end
+
+
+
+
+### MPlayer lirc setup
+
+# Show OSD
+begin
+prog = mplayer
+button = menu
+config = osd
+end
+
+# Pause playback
+begin
+prog = mplayer
+button = pause
+config = pause
+end
+
+# Mute
+begin
+prog = mplayer
+button = mute
+config = mute
+end
+
+# Seek back 10 seconds
+begin
+prog = mplayer
+button = rr
+config = seek -10
+end
+
+# Seek forward 30 seconds
+begin
+prog = mplayer
+button = ff
+config = seek +30
+end
+
+# Quit
+begin
+prog = mplayer
+button = exit
+config = quit
+end
+
+# Seek forward 10 minutes
+begin
+prog = mplayer
+button =
+config = seek +600
+end
+
+# Seek backward 10 minutes
+begin
+prog = mplayer
+button =
+config = seek -600
+end
+
+# Toggle full-screen
+begin
+prog = mplayer
+button =
+config = vo_fullscreen
+end
+
+
+
+### Xine lirc setup
+
+begin
+prog = xine
+button = play
+config = Play
+end
+
+begin
+prog = xine
+button = exit
+config = Stop
+end
+
+begin
+prog = xine
+button = exit
+config = Quit
+end
+
+begin
+prog = xine
+button = pause
+config = Pause
+end
+
+begin
+prog = xine
+button = up
+config = EventUp
+end
+
+begin
+prog = xine
+button = down
+config = EventDown
+end
+
+begin
+prog = xine
+button = left
+config = EventLeft
+end
+
+begin
+prog = xine
+button = right
+config = EventRight
+end
+
+begin
+prog = xine
+button = ok
+config = EventSelect
+end
+
+begin
+prog = xine
+button = menu
+config = Menu
+end
+
+begin
+prog = xine
+button = ff
+#config = SpeedFaster
+config = SeekRelative+60
+end
+
+begin
+prog = xine
+button = rr
+#config = SpeedSlower
+config = SeekRelative-60
+end
+
+begin
+prog = xine
+button = v+
+config = Volume+
+end
+
+begin
+prog = xine
+button = v-
+config = Volume-
+end
+
+begin
+prog = xine
+button = mute
+config = Mute
+end
+
+begin
+prog = xine
+button = exit
+config = RootMenu
+end
+
+begin
+prog = xine
+button =
+config = EventNext
+end
+
+begin
+prog = xine
+button =
+config = EventPrior
+end
+
+begin
+prog = xine
+button = green
+config = OSDStreamInfos
+end \ No newline at end of file
diff --git a/abs/core-testing/system-templates/templates/remotes/One4All_7544/preview.jpg b/abs/core-testing/system-templates/templates/remotes/One4All_7544/preview.jpg
new file mode 100644
index 0000000..cb75f0b
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/One4All_7544/preview.jpg
Binary files differ
diff --git a/abs/core-testing/system-templates/templates/remotes/One4All_9910/lircd-one4all9910.conf b/abs/core-testing/system-templates/templates/remotes/One4All_9910/lircd-one4all9910.conf
new file mode 100755
index 0000000..504718b
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/One4All_9910/lircd-one4all9910.conf
@@ -0,0 +1,53 @@
+begin remote
+ name one4all_9910
+ bits 24
+ flags SPACE_ENC|CONST_LENGTH
+ eps 30
+ aeps 100
+ header 4074 3901
+ one 584 1909
+ zero 584 909
+ ptrail 589
+ gap 64326
+
+ begin codes
+ 1 0x7318CE
+ 2 0x7328CD
+ 3 0x7338CC
+ 4 0x7348CB
+ 5 0x7358CA
+ 6 0x7368C9
+ 7 0x7378C8
+ 8 0x7388C7
+ 9 0x7398C6
+ 0 0x7308CF
+ enter 0x7F480B
+ tvvid 0x7A385C
+ rew 0x71D8E2
+ play 0x7158EA
+ fwd 0x72D8D2
+ rec 0x7178E8
+ pause 0x7198E6
+ frew 0x72C8D3
+ stop 0x71F8E0
+ ffwd 0x72D8D2
+ pip 0x71B8E4
+ swap 0x7C383C
+ fav 0x72D8D2
+ ch- 0x72C8D3
+ ch+ 0x72D8D2
+ prev 0x7278D8
+ left 0x7568A9
+ up 0x7598A6
+ down 0x7588A7
+ right 0x7578A8
+ select 0x7F480B
+ menu 0x7088F7
+ guide 0x71A8E5
+ exit 0x7068F9
+ info 0x73C8C3
+ power 0x72A8D5
+
+ end codes
+
+end remote \ No newline at end of file
diff --git a/abs/core-testing/system-templates/templates/remotes/One4All_9910/lircrc-one4all9910.txt b/abs/core-testing/system-templates/templates/remotes/One4All_9910/lircrc-one4all9910.txt
new file mode 100755
index 0000000..ea40c6a
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/One4All_9910/lircrc-one4all9910.txt
@@ -0,0 +1,474 @@
+# Channel Up
+begin
+prog = mythtv
+button = ch+
+config = Up
+end
+
+# Channel Down
+begin
+prog = mythtv
+button = ch-
+config = Down
+end
+
+# General Left
+begin
+prog = mythtv
+button = left
+config = Left
+end
+
+# General Right
+begin
+prog = mythtv
+button = right
+config = Right
+end
+
+ # LiveTV browse up channel
+begin
+prog = mythtv
+button = up
+config = Up
+end
+
+# LiveTV browse down channel
+begin
+prog = mythtv
+button = down
+config = Down
+end
+
+# Volume Up
+begin
+prog = mythtv
+button =
+config = F11
+end
+
+# Volume Down
+begin
+prog = mythtv
+button =
+config = F10
+end
+
+ # OK/Select
+begin
+prog = mythtv
+button = select
+config = Space
+end
+
+# Play
+begin
+prog = mythtv
+button = play
+config = Return
+end
+
+# Stop
+begin
+prog = mythtv
+button = stop
+config = Esc
+end
+
+# Escape/Exit/Back
+begin
+prog = mythtv
+button = exit
+config = Esc
+end
+
+# Power Off/Exit
+begin
+prog = irexec
+button = power
+config = /usr/bin/mythpowerbutton.sh
+end
+
+# Pause
+begin
+prog = mythtv
+button = pause
+config = P
+end
+
+# Mute
+begin
+prog = mythtv
+button =
+config = |
+end
+
+# Fast forward (10 sec default)
+begin
+prog = mythtv
+button = fwd
+config = Right
+end
+
+# Rewind (10 sec default)
+begin
+prog = mythtv
+button = rew
+config = Left
+end
+
+# Skip forward (10 min default)
+begin
+prog = mythtv
+button = ffwd
+config = PgDown
+end
+
+# Skip backward (10 min default)
+begin
+prog = mythtv
+button = frew
+config = PgUp
+end
+
+# Record
+begin
+prog = mythtv
+button = rec
+config = R
+end
+
+# Delete
+begin
+prog = mythtv
+button =
+config = D
+end
+
+# OSD browse
+begin
+prog = mythtv
+button =
+config = O
+end
+
+# Display EPG while in live TV,
+# View selected show while in EPG
+begin
+prog = mythtv
+button = menu
+config = M
+end
+
+# Bring up OSD info
+begin
+prog = mythtv
+button = info
+config = I
+end
+
+# Change display aspect ratio
+begin
+prog = mythtv
+button =
+config = W
+end
+
+# Seek to previous commercial cut point
+begin
+prog = mythtv
+button =
+config = Q
+end
+
+# Seek to next commercial cut point
+begin
+prog = mythtv
+button =
+config = Z
+end
+
+# Numbers 0-9
+
+begin
+prog = mythtv
+button = 0
+config = 0
+end
+
+begin
+prog = mythtv
+button = 1
+config = 1
+end
+
+begin
+prog = mythtv
+button = 2
+config = 2
+end
+
+begin
+prog = mythtv
+button = 3
+config = 3
+end
+
+begin
+prog = mythtv
+button = 4
+config = 4
+end
+
+begin
+prog = mythtv
+button = 5
+config = 5
+end
+
+begin
+prog = mythtv
+button = 6
+config = 6
+end
+
+begin
+prog = mythtv
+button = 7
+config = 7
+end
+
+begin
+prog = mythtv
+button = 8
+config = 8
+end
+
+begin
+prog = mythtv
+button = 9
+config = 9
+end
+
+# Previous channel
+begin
+prog = mythtv
+button = prev
+config = H
+end
+
+# Closed Captioning
+begin
+prog = mythtv
+button =
+config = T
+end
+
+# Picture in Picture
+begin
+prog = mythtv
+button = pip
+config = V
+end
+
+# Change channels on both cards
+begin
+prog = mythtv
+button =
+config = N
+end
+
+# Clear cutpoints in cutlist
+begin
+prog = mythtv
+button =
+config = Q
+end
+
+
+
+
+### MPlayer lirc setup
+
+# Show OSD
+begin
+prog = mplayer
+button = menu
+config = osd
+end
+
+# Pause playback
+begin
+prog = mplayer
+button = pause
+config = pause
+end
+
+# Mute
+begin
+prog = mplayer
+button =
+config = mute
+end
+
+# Seek back 10 seconds
+begin
+prog = mplayer
+button = rew
+config = seek -10
+end
+
+# Seek forward 30 seconds
+begin
+prog = mplayer
+button = fwd
+config = seek +30
+end
+
+# Quit
+begin
+prog = mplayer
+button = stop
+config = quit
+end
+
+# Seek forward 10 minutes
+begin
+prog = mplayer
+button = ffwd
+config = seek +600
+end
+
+# Seek backward 10 minutes
+begin
+prog = mplayer
+button = frew
+config = seek -600
+end
+
+# Toggle full-screen
+begin
+prog = mplayer
+button =
+config = vo_fullscreen
+end
+
+
+
+### Xine lirc setup
+
+begin
+prog = xine
+button = play
+config = Play
+end
+
+begin
+prog = xine
+button = stop
+config = Stop
+end
+
+begin
+prog = xine
+button = stop
+config = Quit
+end
+
+begin
+prog = xine
+button = pause
+config = Pause
+end
+
+begin
+prog = xine
+button = up
+config = EventUp
+end
+
+begin
+prog = xine
+button = down
+config = EventDown
+end
+
+begin
+prog = xine
+button = left
+config = EventLeft
+end
+
+begin
+prog = xine
+button = right
+config = EventRight
+end
+
+begin
+prog = xine
+button = enter
+config = EventSelect
+end
+
+begin
+prog = xine
+button = menu
+config = Menu
+end
+
+begin
+prog = xine
+button = ffwd
+#config = SpeedFaster
+config = SeekRelative+60
+end
+
+begin
+prog = xine
+button = frew
+#config = SpeedSlower
+config = SeekRelative-60
+end
+
+begin
+prog = xine
+button = ch+
+config = Volume+
+end
+
+begin
+prog = xine
+button = ch-
+config = Volume-
+end
+
+begin
+prog = xine
+button =
+config = Mute
+end
+
+begin
+prog = xine
+button = stop
+config = RootMenu
+end
+
+begin
+prog = xine
+button =
+config = EventNext
+end
+
+begin
+prog = xine
+button = prev
+config = EventPrior
+end
+
+begin
+prog = xine
+button = info
+config = OSDStreamInfos
+end \ No newline at end of file
diff --git a/abs/core-testing/system-templates/templates/remotes/One4All_9910/preview.jpg b/abs/core-testing/system-templates/templates/remotes/One4All_9910/preview.jpg
new file mode 100644
index 0000000..827cb9a
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/One4All_9910/preview.jpg
Binary files differ
diff --git a/abs/core-testing/system-templates/templates/remotes/Packard_bell/lircd-packard.conf b/abs/core-testing/system-templates/templates/remotes/Packard_bell/lircd-packard.conf
new file mode 100755
index 0000000..9e0e783
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Packard_bell/lircd-packard.conf
@@ -0,0 +1,92 @@
+# Config file for Packard Bell Remotes (with repeat codes!)
+# created by Samuel Wood (sjw@umr.edu)
+#
+# brand: Packard Bell Remote
+# model: El Cheapo Packard Bell Remote
+#
+# This is a config file for the cheap excess Packard Bell remotes
+# you sometimes can buy from online auctions like www.onsale.com.
+#
+# The receiver that comes with it hooks into the serial port and works
+# fine with lirc 0.5.4.
+#
+# The receiver that comes with the remote is near garbage. If
+# you don't point almost directly at it, it will not detect. But
+# it's simpler than building your own. :-)
+#
+# Repeat works fine for me. You just have to modify or add the
+# "repeat=" lines in your .lircrc.
+#
+# irrecord was used to generate the file, then I modified and
+# added repeat codes.
+#
+# The button names used are identical to what was printed on the
+# remote, except for the number pads (using actual numbers like
+# "1" and so forth did not seem to work. Similarly, '*' is Star
+# and '#' is Hash. LMB and RMB refer to the two mousepad buttons
+# on the left and right respectively.
+#
+# I still need to modify the gap setting. Right now, if you don't
+# hold the button down long enough, it may not register, but if
+# you hold it too long, it will detect a repeat or two. Feel free
+# to modify this to work better. If you get it to work better, send
+# me a copy. :-)
+
+begin remote
+
+ name PackBell
+ bits 15
+ flags SPACE_ENC|CONST_LENGTH
+ eps 30
+ aeps 400
+
+ header 9065 4500
+ one 597 532
+ zero 597 1643
+ ptrail 597
+ pre_data_bits 16
+ pre_data 0xF708
+ post_data_bits 1
+ post_data 0x0
+ gap 107000
+ repeat_bit 0
+ repeat 9050 2250
+
+ begin codes
+ Help 0x0000000000006F90
+ Phone 0x0000000000004FB0
+ Message 0x0000000000006E91
+ SRS 0x0000000000004EB1
+ CD 0x0000000000002FD0
+ Aux1 0x0000000000000FF0
+ Aux2 0x0000000000002ED1
+ Aux3 0x0000000000000EF1
+ LMB 0x00000000000023DC
+ RMB 0x000000000000639C
+ Up 0x00000000000037C8
+ Down 0x00000000000057A8
+ Left 0x0000000000007788
+ Right 0x00000000000017E8
+ Menu 0x0000000000007B84
+ Mute 0x0000000000003BC4
+ Enter 0x00000000000047B8
+ CHUp 0x00000000000027D8
+ CHDown 0x0000000000006798
+ VolUp 0x0000000000005BA4
+ VolDown 0x0000000000001BE4
+ Display 0x00000000000007F8
+ One 0x0000000000005EA1
+ Two 0x0000000000001EE1
+ Three 0x0000000000000BF4
+ Four 0x0000000000007E81
+ Five 0x0000000000003EC1
+ Six 0x0000000000004BB4
+ Seven 0x0000000000005FA0
+ Eight 0x0000000000001FE0
+ Nine 0x0000000000002BD4
+ Zero 0x0000000000003FC0
+ Star 0x0000000000007F80
+ Hash 0x0000000000006B94
+ end codes
+
+end remote \ No newline at end of file
diff --git a/abs/core-testing/system-templates/templates/remotes/Packard_bell/lircrc-packard.txt b/abs/core-testing/system-templates/templates/remotes/Packard_bell/lircrc-packard.txt
new file mode 100755
index 0000000..5e54f7a
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Packard_bell/lircrc-packard.txt
@@ -0,0 +1,474 @@
+# Channel Up
+begin
+prog = mythtv
+button = CHUp
+config = Up
+end
+
+# Channel Down
+begin
+prog = mythtv
+button = CHDown
+config = Down
+end
+
+# General Left
+begin
+prog = mythtv
+button = Left
+config = Left
+end
+
+# General Right
+begin
+prog = mythtv
+button = Right
+config = Right
+end
+
+ # LiveTV browse up channel
+begin
+prog = mythtv
+button = Up
+config = Up
+end
+
+# LiveTV browse down channel
+begin
+prog = mythtv
+button = Down
+config = Down
+end
+
+# Volume Up
+begin
+prog = mythtv
+button = VolUp
+config = F11
+end
+
+# Volume Down
+begin
+prog = mythtv
+button = VolDown
+config = F10
+end
+
+ # OK/Select
+begin
+prog = mythtv
+button = Enter
+config = Space
+end
+
+# Play
+begin
+prog = mythtv
+button =
+config = Return
+end
+
+# Stop
+begin
+prog = mythtv
+button =
+config = Esc
+end
+
+# Escape/Exit/Back
+begin
+prog = mythtv
+button =
+config = Esc
+end
+
+# Power Off/Exit
+begin
+prog = irexec
+button =
+config = /usr/bin/mythpowerbutton.sh
+end
+
+# Pause
+begin
+prog = mythtv
+button =
+config = P
+end
+
+# Mute
+begin
+prog = mythtv
+button = Mute
+config = |
+end
+
+# Fast forward (10 sec default)
+begin
+prog = mythtv
+button =
+config = Right
+end
+
+# Rewind (10 sec default)
+begin
+prog = mythtv
+button =
+config = Left
+end
+
+# Skip forward (10 min default)
+begin
+prog = mythtv
+button =
+config = PgDown
+end
+
+# Skip backward (10 min default)
+begin
+prog = mythtv
+button =
+config = PgUp
+end
+
+# Record
+begin
+prog = mythtv
+button =
+config = R
+end
+
+# Delete
+begin
+prog = mythtv
+button =
+config = D
+end
+
+# OSD browse
+begin
+prog = mythtv
+button =
+config = O
+end
+
+# Display EPG while in live TV,
+# View selected show while in EPG
+begin
+prog = mythtv
+button = Menu
+config = M
+end
+
+# Bring up OSD info
+begin
+prog = mythtv
+button =
+config = I
+end
+
+# Change display aspect ratio
+begin
+prog = mythtv
+button =
+config = W
+end
+
+# Seek to previous commercial cut point
+begin
+prog = mythtv
+button =
+config = Q
+end
+
+# Seek to next commercial cut point
+begin
+prog = mythtv
+button =
+config = Z
+end
+
+# Numbers 0-9
+
+begin
+prog = mythtv
+button = Zero
+config = 0
+end
+
+begin
+prog = mythtv
+button = One
+config = 1
+end
+
+begin
+prog = mythtv
+button = Two
+config = 2
+end
+
+begin
+prog = mythtv
+button = Three
+config = 3
+end
+
+begin
+prog = mythtv
+button = Four
+config = 4
+end
+
+begin
+prog = mythtv
+button = Five
+config = 5
+end
+
+begin
+prog = mythtv
+button = Six
+config = 6
+end
+
+begin
+prog = mythtv
+button = Seven
+config = 7
+end
+
+begin
+prog = mythtv
+button = Eight
+config = 8
+end
+
+begin
+prog = mythtv
+button = Nine
+config = 9
+end
+
+# Previous channel
+begin
+prog = mythtv
+button =
+config = H
+end
+
+# Closed Captioning
+begin
+prog = mythtv
+button =
+config = T
+end
+
+# Picture in Picture
+begin
+prog = mythtv
+button =
+config = V
+end
+
+# Change channels on both cards
+begin
+prog = mythtv
+button =
+config = N
+end
+
+# Clear cutpoints in cutlist
+begin
+prog = mythtv
+button =
+config = Q
+end
+
+
+
+
+### MPlayer lirc setup
+
+# Show OSD
+begin
+prog = mplayer
+button = Menu
+config = osd
+end
+
+# Pause playback
+begin
+prog = mplayer
+button =
+config = pause
+end
+
+# Mute
+begin
+prog = mplayer
+button = Mute
+config = mute
+end
+
+# Seek back 10 seconds
+begin
+prog = mplayer
+button = Left
+config = seek -10
+end
+
+# Seek forward 30 seconds
+begin
+prog = mplayer
+button = Right
+config = seek +30
+end
+
+# Quit
+begin
+prog = mplayer
+button =
+config = quit
+end
+
+# Seek forward 10 minutes
+begin
+prog = mplayer
+button =
+config = seek +600
+end
+
+# Seek backward 10 minutes
+begin
+prog = mplayer
+button =
+config = seek -600
+end
+
+# Toggle full-screen
+begin
+prog = mplayer
+button =
+config = vo_fullscreen
+end
+
+
+
+### Xine lirc setup
+
+begin
+prog = xine
+button =
+config = Play
+end
+
+begin
+prog = xine
+button =
+config = Stop
+end
+
+begin
+prog = xine
+button =
+config = Quit
+end
+
+begin
+prog = xine
+button =
+config = Pause
+end
+
+begin
+prog = xine
+button = Up
+config = EventUp
+end
+
+begin
+prog = xine
+button = Down
+config = EventDown
+end
+
+begin
+prog = xine
+button = Left
+config = EventLeft
+end
+
+begin
+prog = xine
+button = Right
+config = EventRight
+end
+
+begin
+prog = xine
+button =
+config = EventSelect
+end
+
+begin
+prog = xine
+button = Menu
+config = Menu
+end
+
+begin
+prog = xine
+button =
+#config = SpeedFaster
+config = SeekRelative+60
+end
+
+begin
+prog = xine
+button =
+#config = SpeedSlower
+config = SeekRelative-60
+end
+
+begin
+prog = xine
+button = VolUp
+config = Volume+
+end
+
+begin
+prog = xine
+button = VolDown
+config = Volume-
+end
+
+begin
+prog = xine
+button = Mute
+config = Mute
+end
+
+begin
+prog = xine
+button =
+config = RootMenu
+end
+
+begin
+prog = xine
+button =
+config = EventNext
+end
+
+begin
+prog = xine
+button =
+config = EventPrior
+end
+
+begin
+prog = xine
+button = Help
+config = OSDStreamInfos
+end \ No newline at end of file
diff --git a/abs/core-testing/system-templates/templates/remotes/Packard_bell/preview.jpg b/abs/core-testing/system-templates/templates/remotes/Packard_bell/preview.jpg
new file mode 100644
index 0000000..76453bb
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Packard_bell/preview.jpg
Binary files differ
diff --git a/abs/core-testing/system-templates/templates/remotes/Pinnacle/lircd-pinnacle.conf b/abs/core-testing/system-templates/templates/remotes/Pinnacle/lircd-pinnacle.conf
new file mode 100755
index 0000000..ebc04d9
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Pinnacle/lircd-pinnacle.conf
@@ -0,0 +1,97 @@
+#
+# contributed by Bart Alewijnse <scarfboy@yahoo.com>
+#
+# brand: Pinnacle Systems
+# model: PCTV Remote (Perhaps other ones as well)
+# supported devices: there's only one I know of. (serial)
+#
+# Mail me if your remote is only partly supported, or if it has different
+# buttons than listed below.
+#
+
+begin remote
+
+ name PinnacleSysPCTVRemote
+ bits 16
+ eps 30
+ aeps 100
+
+ one 0 0
+ zero 0 0
+ pre_data_bits 8
+ pre_data 0xFE
+ gap 180000
+ toggle_bit 0
+
+ begin codes
+ Mute 0xB53C #Mute 0x000000000000003C
+ Power 0x2D2F #Power 0x000000000000002F
+ Chan+Play 0x173F #Chan+Play 0x000000000000003F
+ Chan-Stop 0xC63E #Chan-Stop 0x000000000000003E
+ Vol+FF 0xF13B #Vol+FF 0x000000000000003B
+ Vol-Rew 0x643D #Vol-Rew 0x000000000000003D
+ 1 0x9F31 #1 0x0000000000000031
+ 2 0x3D32 #2 0x0000000000000032
+ 3 0xEC33 #3 0x0000000000000033
+ 4 0xA834 #4 0x0000000000000034
+ 5 0x7935 #5 0x0000000000000035
+ 6 0xDB36 #6 0x0000000000000036
+ 7 0x0A37 #7 0x0000000000000037
+ 8 0x5338 #8 0x0000000000000038
+ 9 0x8239 #9 0x0000000000000039
+ Fullscreen 0x5E2D #Fullscreen 0x000000000000002D
+ 0/AV 0x203A #0/AV 0x000000000000003A
+ Info 0xCB2B #Info 0x000000000000002B
+ Preview 0xFC2E #Preview 0x000000000000002E
+ Record 0x3027 #Record 0x0000000000000027
+ Chan_Last 0x4325 #Chan_Last 0x0000000000000025
+ F_TV 0xE126 #F_TV 0x0000000000000026
+ F_TELETEXT 0xB829 #F_TELETEXT 0x0000000000000029
+ F_RADIO 0x1A2A #F_RADIO 0x000000000000002A
+
+#
+# here are some extra buttons a new version of the remote seems to have
+#
+# contributed by Robbert Monna <rjmonna@kabelfoon.nl>
+#
+# brand: Pinnacle Systems
+# model: PCTV Remote (newest version?)
+# supported devices: dongle on serial port (from TV-Card)
+#
+ L 0x631F #L 0x000000000000001F
+ Zoom 0xB21E #Zoom 0x000000000000001E
+ vol+ 0x851B #vol+ 0x000000000000001B
+ vol- 0x590F #vol- 0x000000000000000F
+ channel+ 0x7E17 #channel+ 0x0000000000000017
+ channel- 0xC11C #channel- 0x000000000000001C
+ middle 0x541A #middle 0x000000000000001A
+ Menu 0x101D #Menu 0x000000000000001D
+ next 0xF619 #next 0x0000000000000019
+ undo 0xAF16 #undo 0x0000000000000016
+ pause 0x0D15 #pause 0x0000000000000015
+ redo 0x9813 #redo 0x0000000000000013
+ Rewind 0x880E #Rewind 0x000000000000000E
+ Play 0x2A0D #Play 0x000000000000000D
+ Stop 0xBF0B #Stop 0x000000000000000B
+ FForward 0x4407 #FForward 0x0000000000000007
+ EPG 0x2718 #EPG 0x0000000000000018
+
+# here are some more buttons that seem to be mapped differently from
+# the ones above
+
+# contributed by InterCeptor ceptor_7@freemail.hu
+#
+# brand: Pinnacle Systems PCTV Pro Remote
+# model no. of remote control: (I can't find any numbers on it)
+# supported devices: serial
+#
+
+ 9 0x0000000000000082
+ Zoom 0x00000000000000B2
+ middle 0x0000000000000014
+
+
+ end codes
+end remote
+
+
diff --git a/abs/core-testing/system-templates/templates/remotes/Pinnacle/lircrc-pinnacle.txt b/abs/core-testing/system-templates/templates/remotes/Pinnacle/lircrc-pinnacle.txt
new file mode 100755
index 0000000..d3b9261
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Pinnacle/lircrc-pinnacle.txt
@@ -0,0 +1,474 @@
+# Channel Up
+begin
+prog = mythtv
+button = channel+
+config = Up
+end
+
+# Channel Down
+begin
+prog = mythtv
+button = channel-
+config = Down
+end
+
+# General Left
+begin
+prog = mythtv
+button =
+config = Left
+end
+
+# General Right
+begin
+prog = mythtv
+button =
+config = Right
+end
+
+ # LiveTV browse up channel
+begin
+prog = mythtv
+button = channel+
+config = Up
+end
+
+# LiveTV browse down channel
+begin
+prog = mythtv
+button = channel-
+config = Down
+end
+
+# Volume Up
+begin
+prog = mythtv
+button = vol+
+config = F11
+end
+
+# Volume Down
+begin
+prog = mythtv
+button = vol-
+config = F10
+end
+
+ # OK/Select
+begin
+prog = mythtv
+button =
+config = Space
+end
+
+# Play
+begin
+prog = mythtv
+button = Play
+config = Return
+end
+
+# Stop
+begin
+prog = mythtv
+button = Stop
+config = Esc
+end
+
+# Escape/Exit/Back
+begin
+prog = mythtv
+button = undo
+config = Esc
+end
+
+# Power Off/Exit
+begin
+prog = irexec
+button = Power
+config = /usr/bin/mythpowerbutton.sh
+end
+
+# Pause
+begin
+prog = mythtv
+button = pause
+config = P
+end
+
+# Mute
+begin
+prog = mythtv
+button = Mute
+config = |
+end
+
+# Fast forward (10 sec default)
+begin
+prog = mythtv
+button = FForward
+config = Right
+end
+
+# Rewind (10 sec default)
+begin
+prog = mythtv
+button = Rewind
+config = Left
+end
+
+# Skip forward (10 min default)
+begin
+prog = mythtv
+button = Vol+FF
+config = PgDown
+end
+
+# Skip backward (10 min default)
+begin
+prog = mythtv
+button = Vol-Rew
+config = PgUp
+end
+
+# Record
+begin
+prog = mythtv
+button = Record
+config = R
+end
+
+# Delete
+begin
+prog = mythtv
+button =
+config = D
+end
+
+# OSD browse
+begin
+prog = mythtv
+button = Menu
+config = O
+end
+
+# Display EPG while in live TV,
+# View selected show while in EPG
+begin
+prog = mythtv
+button = EPG
+config = M
+end
+
+# Bring up OSD info
+begin
+prog = mythtv
+button = Info
+config = I
+end
+
+# Change display aspect ratio
+begin
+prog = mythtv
+button =
+config = W
+end
+
+# Seek to previous commercial cut point
+begin
+prog = mythtv
+button =
+config = Q
+end
+
+# Seek to next commercial cut point
+begin
+prog = mythtv
+button =
+config = Z
+end
+
+# Numbers 0-9
+
+begin
+prog = mythtv
+button = 0
+config = 0
+end
+
+begin
+prog = mythtv
+button = 1
+config = 1
+end
+
+begin
+prog = mythtv
+button = 2
+config = 2
+end
+
+begin
+prog = mythtv
+button = 3
+config = 3
+end
+
+begin
+prog = mythtv
+button = 4
+config = 4
+end
+
+begin
+prog = mythtv
+button = 5
+config = 5
+end
+
+begin
+prog = mythtv
+button = 6
+config = 6
+end
+
+begin
+prog = mythtv
+button = 7
+config = 7
+end
+
+begin
+prog = mythtv
+button = 8
+config = 8
+end
+
+begin
+prog = mythtv
+button = 9
+config = 9
+end
+
+# Previous channel
+begin
+prog = mythtv
+button = Chan_Last
+config = H
+end
+
+# Closed Captioning
+begin
+prog = mythtv
+button = F_TELETEXT
+config = T
+end
+
+# Picture in Picture
+begin
+prog = mythtv
+button = Fullscreen
+config = V
+end
+
+# Change channels on both cards
+begin
+prog = mythtv
+button =
+config = N
+end
+
+# Clear cutpoints in cutlist
+begin
+prog = mythtv
+button =
+config = Q
+end
+
+
+
+
+### MPlayer lirc setup
+
+# Show OSD
+begin
+prog = mplayer
+button = Menu
+config = osd
+end
+
+# Pause playback
+begin
+prog = mplayer
+button = pause
+config = pause
+end
+
+# Mute
+begin
+prog = mplayer
+button = Mute
+config = mute
+end
+
+# Seek back 10 seconds
+begin
+prog = mplayer
+button = Rewind
+config = seek -10
+end
+
+# Seek forward 30 seconds
+begin
+prog = mplayer
+button = FForward
+config = seek +30
+end
+
+# Quit
+begin
+prog = mplayer
+button = Stop
+config = quit
+end
+
+# Seek forward 10 minutes
+begin
+prog = mplayer
+button = Vol+FF
+config = seek +600
+end
+
+# Seek backward 10 minutes
+begin
+prog = mplayer
+button = Vol-Rew
+config = seek -600
+end
+
+# Toggle full-screen
+begin
+prog = mplayer
+button = Fullscreen
+config = vo_fullscreen
+end
+
+
+
+### Xine lirc setup
+
+begin
+prog = xine
+button = Play
+config = Play
+end
+
+begin
+prog = xine
+button = Stop
+config = Stop
+end
+
+begin
+prog = xine
+button = Stop
+config = Quit
+end
+
+begin
+prog = xine
+button = pause
+config = Pause
+end
+
+begin
+prog = xine
+button = channel+
+config = EventUp
+end
+
+begin
+prog = xine
+button = channel-
+config = EventDown
+end
+
+begin
+prog = xine
+button =
+config = EventLeft
+end
+
+begin
+prog = xine
+button =
+config = EventRight
+end
+
+begin
+prog = xine
+button =
+config = EventSelect
+end
+
+begin
+prog = xine
+button = Menu
+config = Menu
+end
+
+begin
+prog = xine
+button = FForward
+#config = SpeedFaster
+config = SeekRelative+60
+end
+
+begin
+prog = xine
+button = Rewind
+#config = SpeedSlower
+config = SeekRelative-60
+end
+
+begin
+prog = xine
+button = vol+
+config = Volume+
+end
+
+begin
+prog = xine
+button = vol-
+config = Volume-
+end
+
+begin
+prog = xine
+button = Mute
+config = Mute
+end
+
+begin
+prog = xine
+button = Stop
+config = RootMenu
+end
+
+begin
+prog = xine
+button = next
+config = EventNext
+end
+
+begin
+prog = xine
+button = undo
+config = EventPrior
+end
+
+begin
+prog = xine
+button = Info
+config = OSDStreamInfos
+end \ No newline at end of file
diff --git a/abs/core-testing/system-templates/templates/remotes/Pinnacle/preview.jpg b/abs/core-testing/system-templates/templates/remotes/Pinnacle/preview.jpg
new file mode 100644
index 0000000..bd8e19e
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Pinnacle/preview.jpg
Binary files differ
diff --git a/abs/core-testing/system-templates/templates/remotes/Provideo/lircd-provideo.conf b/abs/core-testing/system-templates/templates/remotes/Provideo/lircd-provideo.conf
new file mode 100755
index 0000000..d20ad85
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Provideo/lircd-provideo.conf
@@ -0,0 +1,52 @@
+begin remote
+
+ name PV951
+ bits 16
+ flags SPACE_ENC|CONST_LENGTH
+ eps 30
+ aeps 100
+
+ header 9067 4482
+ one 597 1650
+ zero 597 529
+ ptrail 584
+ repeat 9068 2232
+ pre_data_bits 16
+ pre_data 0x61D6
+ gap 107983
+ repeat_bit 0
+
+ begin codes
+ power 0x00000000000048B7
+ air/cbl 0x000000000000D02F
+ pc/tv 0x0000000000008877
+ source 0x000000000000F00F
+ mts 0x000000000000C837
+ mute 0x00000000000008F7
+ 1 0x000000000000807F
+ 2 0x00000000000040BF
+ 3 0x000000000000C03F
+ 4 0x00000000000020DF
+ 5 0x000000000000A05F
+ 6 0x000000000000609F
+ 7 0x000000000000E01F
+ 8 0x00000000000010EF
+ 9 0x000000000000906F
+ 0 0x00000000000000FF
+ +100 0x00000000000050AF
+ ch_rtn 0x000000000000E817
+ ch+ 0x00000000000058A7
+ ch- 0x0000000000007887
+ vol+ 0x000000000000D827
+ vol- 0x000000000000F807
+ func 0x0000000000009867
+ ttx 0x000000000000B04F
+ pg+ 0x000000000000708F
+ pg- 0x000000000000B847
+ cc 0x0000000000006897
+ sync 0x00000000000028D7
+ ch+- 0x00000000000018E7
+ autoscan 0x00000000000030CF
+ end codes
+
+end remote
diff --git a/abs/core-testing/system-templates/templates/remotes/Provideo/lircrc-provideo.txt b/abs/core-testing/system-templates/templates/remotes/Provideo/lircrc-provideo.txt
new file mode 100755
index 0000000..90972b6
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Provideo/lircrc-provideo.txt
@@ -0,0 +1,474 @@
+# Channel Up
+begin
+prog = mythtv
+button = ch+
+config = Up
+end
+
+# Channel Down
+begin
+prog = mythtv
+button = ch-
+config = Down
+end
+
+# General Left
+begin
+prog = mythtv
+button =
+config = Left
+end
+
+# General Right
+begin
+prog = mythtv
+button =
+config = Right
+end
+
+ # LiveTV browse up channel
+begin
+prog = mythtv
+button = pg+
+config = Up
+end
+
+# LiveTV browse down channel
+begin
+prog = mythtv
+button = pg-
+config = Down
+end
+
+# Volume Up
+begin
+prog = mythtv
+button = vol+
+config = F11
+end
+
+# Volume Down
+begin
+prog = mythtv
+button = vol-
+config = F10
+end
+
+ # OK/Select
+begin
+prog = mythtv
+button =
+config = Space
+end
+
+# Play
+begin
+prog = mythtv
+button =
+config = Return
+end
+
+# Stop
+begin
+prog = mythtv
+button =
+config = Esc
+end
+
+# Escape/Exit/Back
+begin
+prog = mythtv
+button =
+config = Esc
+end
+
+# Power Off/Exit
+begin
+prog = irexec
+button = power
+config = /usr/bin/mythpowerbutton.sh
+end
+
+# Pause
+begin
+prog = mythtv
+button =
+config = P
+end
+
+# Mute
+begin
+prog = mythtv
+button = mute
+config = |
+end
+
+# Fast forward (10 sec default)
+begin
+prog = mythtv
+button =
+config = Right
+end
+
+# Rewind (10 sec default)
+begin
+prog = mythtv
+button =
+config = Left
+end
+
+# Skip forward (10 min default)
+begin
+prog = mythtv
+button =
+config = PgDown
+end
+
+# Skip backward (10 min default)
+begin
+prog = mythtv
+button =
+config = PgUp
+end
+
+# Record
+begin
+prog = mythtv
+button =
+config = R
+end
+
+# Delete
+begin
+prog = mythtv
+button =
+config = D
+end
+
+# OSD browse
+begin
+prog = mythtv
+button =
+config = O
+end
+
+# Display EPG while in live TV,
+# View selected show while in EPG
+begin
+prog = mythtv
+button = func
+config = M
+end
+
+# Bring up OSD info
+begin
+prog = mythtv
+button =
+config = I
+end
+
+# Change display aspect ratio
+begin
+prog = mythtv
+button =
+config = W
+end
+
+# Seek to previous commercial cut point
+begin
+prog = mythtv
+button =
+config = Q
+end
+
+# Seek to next commercial cut point
+begin
+prog = mythtv
+button =
+config = Z
+end
+
+# Numbers 0-9
+
+begin
+prog = mythtv
+button = 0
+config = 0
+end
+
+begin
+prog = mythtv
+button = 1
+config = 1
+end
+
+begin
+prog = mythtv
+button = 2
+config = 2
+end
+
+begin
+prog = mythtv
+button = 3
+config = 3
+end
+
+begin
+prog = mythtv
+button = 4
+config = 4
+end
+
+begin
+prog = mythtv
+button = 5
+config = 5
+end
+
+begin
+prog = mythtv
+button = 6
+config = 6
+end
+
+begin
+prog = mythtv
+button = 7
+config = 7
+end
+
+begin
+prog = mythtv
+button = 8
+config = 8
+end
+
+begin
+prog = mythtv
+button = 9
+config = 9
+end
+
+# Previous channel
+begin
+prog = mythtv
+button = ch_rtn
+config = H
+end
+
+# Closed Captioning
+begin
+prog = mythtv
+button = cc
+config = T
+end
+
+# Picture in Picture
+begin
+prog = mythtv
+button =
+config = V
+end
+
+# Change channels on both cards
+begin
+prog = mythtv
+button =
+config = N
+end
+
+# Clear cutpoints in cutlist
+begin
+prog = mythtv
+button =
+config = Q
+end
+
+
+
+
+### MPlayer lirc setup
+
+# Show OSD
+begin
+prog = mplayer
+button = func
+config = osd
+end
+
+# Pause playback
+begin
+prog = mplayer
+button =
+config = pause
+end
+
+# Mute
+begin
+prog = mplayer
+button = mute
+config = mute
+end
+
+# Seek back 10 seconds
+begin
+prog = mplayer
+button =
+config = seek -10
+end
+
+# Seek forward 30 seconds
+begin
+prog = mplayer
+button =
+config = seek +30
+end
+
+# Quit
+begin
+prog = mplayer
+button =
+config = quit
+end
+
+# Seek forward 10 minutes
+begin
+prog = mplayer
+button =
+config = seek +600
+end
+
+# Seek backward 10 minutes
+begin
+prog = mplayer
+button =
+config = seek -600
+end
+
+# Toggle full-screen
+begin
+prog = mplayer
+button =
+config = vo_fullscreen
+end
+
+
+
+### Xine lirc setup
+
+begin
+prog = xine
+button =
+config = Play
+end
+
+begin
+prog = xine
+button =
+config = Stop
+end
+
+begin
+prog = xine
+button =
+config = Quit
+end
+
+begin
+prog = xine
+button =
+config = Pause
+end
+
+begin
+prog = xine
+button = ch+
+config = EventUp
+end
+
+begin
+prog = xine
+button = ch-
+config = EventDown
+end
+
+begin
+prog = xine
+button =
+config = EventLeft
+end
+
+begin
+prog = xine
+button =
+config = EventRight
+end
+
+begin
+prog = xine
+button =
+config = EventSelect
+end
+
+begin
+prog = xine
+button =
+config = Menu
+end
+
+begin
+prog = xine
+button = pg+
+#config = SpeedFaster
+config = SeekRelative+60
+end
+
+begin
+prog = xine
+button = pg-
+#config = SpeedSlower
+config = SeekRelative-60
+end
+
+begin
+prog = xine
+button = vol+
+config = Volume+
+end
+
+begin
+prog = xine
+button = vol-
+config = Volume-
+end
+
+begin
+prog = xine
+button = mute
+config = Mute
+end
+
+begin
+prog = xine
+button =
+config = RootMenu
+end
+
+begin
+prog = xine
+button =
+config = EventNext
+end
+
+begin
+prog = xine
+button = ch_rtn
+config = EventPrior
+end
+
+begin
+prog = xine
+button = ttx
+config = OSDStreamInfos
+end \ No newline at end of file
diff --git a/abs/core-testing/system-templates/templates/remotes/Provideo/preview.jpg b/abs/core-testing/system-templates/templates/remotes/Provideo/preview.jpg
new file mode 100644
index 0000000..a034186
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Provideo/preview.jpg
Binary files differ
diff --git a/abs/core-testing/system-templates/templates/remotes/Sasem/lircd-sasem.conf b/abs/core-testing/system-templates/templates/remotes/Sasem/lircd-sasem.conf
new file mode 100755
index 0000000..25d6521
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Sasem/lircd-sasem.conf
@@ -0,0 +1,81 @@
+#
+# this config file was automatically generated
+# using lirc-0.7.0pre4(sasem) on Mon May 24 03:11:34 2004
+#
+# contributed by Oliver Stabel (oliver.stabel@gmx.de)
+#
+# brand: Sasem OnAir
+# model no. of remote control: n/a
+# devices being controlled by this remote:
+# This IR came with the Dign HV5 HTPC case, manufactured
+# by Uneed in Korea (www.iuneed.com).
+# AFAIK the case is called Ahanix HV5 in the US.
+# The IR/VFD device is originally manufactured by Sasem,
+# and sold as OnAir Remocon-V (?looks different from
+# mine but should be the same?)
+#
+
+begin remote
+
+ name sasem
+ bits 16
+ eps 30
+ aeps 100
+
+ one 0 0
+ zero 0 0
+ pre_data_bits 24
+ pre_data 0x0C807F
+ post_data_bits 24
+ post_data 0x000000
+ gap 196000
+ toggle_bit 0
+
+
+ begin codes
+ 1 0x08F7
+ 2 0x09F6
+ 3 0x0AF5
+ 4 0x10EF
+ 5 0x11EE
+ 6 0x12ED
+ 7 0x18E7
+ 8 0x19E6
+ 9 0x1AE5
+ start 0x40BF
+ 0 0x41BE
+ full_down 0x06F9
+ vol- 0x0FF0
+ vol+ 0x0EF1
+ esc 0x05FA
+ up 0x0BF4
+ close 0x07F8
+ left 0x03FC
+ enter 0x13EC
+ right 0x1BE4
+ prev 0x0CF3
+ down 0x43BC
+ next 0x01FE
+ mute 0x0DF2
+ step 0x04FB
+ play_pause 0x49B6
+ stop 0x48B7
+ winamp 0x1EE1
+ media_player 0x15EA
+ hdtv 0x17E8
+ cd_player 0x16E9
+ win_dvd 0x44BB
+ power_dvd 0x14EB
+ internet 0x46B9
+ email 0x47B8
+ a 0x45BA
+ b 0x1DE2
+ c 0x1CE3
+ d 0x1FE0
+ eject 0x02FD
+ power 0x00FF
+ end codes
+
+end remote
+
+
diff --git a/abs/core-testing/system-templates/templates/remotes/Sasem/lircrc-sasem.txt b/abs/core-testing/system-templates/templates/remotes/Sasem/lircrc-sasem.txt
new file mode 100755
index 0000000..9d73415
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Sasem/lircrc-sasem.txt
@@ -0,0 +1,474 @@
+# Channel Up
+begin
+prog = mythtv
+button = up
+config = Up
+end
+
+# Channel Down
+begin
+prog = mythtv
+button = down
+config = Down
+end
+
+# General Left
+begin
+prog = mythtv
+button = left
+config = Left
+end
+
+# General Right
+begin
+prog = mythtv
+button = right
+config = Right
+end
+
+ # LiveTV browse up channel
+begin
+prog = mythtv
+button = up
+config = Up
+end
+
+# LiveTV browse down channel
+begin
+prog = mythtv
+button = down
+config = Down
+end
+
+# Volume Up
+begin
+prog = mythtv
+button = vol+
+config = F11
+end
+
+# Volume Down
+begin
+prog = mythtv
+button = vol-
+config = F10
+end
+
+ # OK/Select
+begin
+prog = mythtv
+button = enter
+config = Space
+end
+
+# Play
+begin
+prog = mythtv
+button = play_pause
+config = Return
+end
+
+# Stop
+begin
+prog = mythtv
+button = stop
+config = Esc
+end
+
+# Escape/Exit/Back
+begin
+prog = mythtv
+button = esc
+config = Esc
+end
+
+# Power Off/Exit
+begin
+prog = irexec
+button = power
+config = /usr/bin/mythpowerbutton.sh
+end
+
+# Pause
+begin
+prog = mythtv
+button = play_pause
+config = P
+end
+
+# Mute
+begin
+prog = mythtv
+button = mute
+config = |
+end
+
+# Fast forward (10 sec default)
+begin
+prog = mythtv
+button = next
+config = Right
+end
+
+# Rewind (10 sec default)
+begin
+prog = mythtv
+button = prev
+config = Left
+end
+
+# Skip forward (10 min default)
+begin
+prog = mythtv
+button =
+config = PgDown
+end
+
+# Skip backward (10 min default)
+begin
+prog = mythtv
+button =
+config = PgUp
+end
+
+# Record
+begin
+prog = mythtv
+button =
+config = R
+end
+
+# Delete
+begin
+prog = mythtv
+button =
+config = D
+end
+
+# OSD browse
+begin
+prog = mythtv
+button =
+config = O
+end
+
+# Display EPG while in live TV,
+# View selected show while in EPG
+begin
+prog = mythtv
+button =
+config = M
+end
+
+# Bring up OSD info
+begin
+prog = mythtv
+button =
+config = I
+end
+
+# Change display aspect ratio
+begin
+prog = mythtv
+button =
+config = W
+end
+
+# Seek to previous commercial cut point
+begin
+prog = mythtv
+button =
+config = Q
+end
+
+# Seek to next commercial cut point
+begin
+prog = mythtv
+button =
+config = Z
+end
+
+# Numbers 0-9
+
+begin
+prog = mythtv
+button = 0
+config = 0
+end
+
+begin
+prog = mythtv
+button = 1
+config = 1
+end
+
+begin
+prog = mythtv
+button = 2
+config = 2
+end
+
+begin
+prog = mythtv
+button = 3
+config = 3
+end
+
+begin
+prog = mythtv
+button = 4
+config = 4
+end
+
+begin
+prog = mythtv
+button = 5
+config = 5
+end
+
+begin
+prog = mythtv
+button = 6
+config = 6
+end
+
+begin
+prog = mythtv
+button = 7
+config = 7
+end
+
+begin
+prog = mythtv
+button = 8
+config = 8
+end
+
+begin
+prog = mythtv
+button = 9
+config = 9
+end
+
+# Previous channel
+begin
+prog = mythtv
+button =
+config = H
+end
+
+# Closed Captioning
+begin
+prog = mythtv
+button =
+config = T
+end
+
+# Picture in Picture
+begin
+prog = mythtv
+button =
+config = V
+end
+
+# Change channels on both cards
+begin
+prog = mythtv
+button =
+config = N
+end
+
+# Clear cutpoints in cutlist
+begin
+prog = mythtv
+button =
+config = Q
+end
+
+
+
+
+### MPlayer lirc setup
+
+# Show OSD
+begin
+prog = mplayer
+button =
+config = osd
+end
+
+# Pause playback
+begin
+prog = mplayer
+button = play_pause
+config = pause
+end
+
+# Mute
+begin
+prog = mplayer
+button = mute
+config = mute
+end
+
+# Seek back 10 seconds
+begin
+prog = mplayer
+button = prev
+config = seek -10
+end
+
+# Seek forward 30 seconds
+begin
+prog = mplayer
+button = next
+config = seek +30
+end
+
+# Quit
+begin
+prog = mplayer
+button = stop
+config = quit
+end
+
+# Seek forward 10 minutes
+begin
+prog = mplayer
+button =
+config = seek +600
+end
+
+# Seek backward 10 minutes
+begin
+prog = mplayer
+button =
+config = seek -600
+end
+
+# Toggle full-screen
+begin
+prog = mplayer
+button = full_down
+config = vo_fullscreen
+end
+
+
+
+### Xine lirc setup
+
+begin
+prog = xine
+button = play_pause
+config = Play
+end
+
+begin
+prog = xine
+button = stop
+config = Stop
+end
+
+begin
+prog = xine
+button = esc
+config = Quit
+end
+
+begin
+prog = xine
+button = play_pause
+config = Pause
+end
+
+begin
+prog = xine
+button = up
+config = EventUp
+end
+
+begin
+prog = xine
+button = down
+config = EventDown
+end
+
+begin
+prog = xine
+button = left
+config = EventLeft
+end
+
+begin
+prog = xine
+button = right
+config = EventRight
+end
+
+begin
+prog = xine
+button = enter
+config = EventSelect
+end
+
+begin
+prog = xine
+button =
+config = Menu
+end
+
+begin
+prog = xine
+button = next
+#config = SpeedFaster
+config = SeekRelative+60
+end
+
+begin
+prog = xine
+button = prev
+#config = SpeedSlower
+config = SeekRelative-60
+end
+
+begin
+prog = xine
+button = vol+
+config = Volume+
+end
+
+begin
+prog = xine
+button = vol-
+config = Volume-
+end
+
+begin
+prog = xine
+button = mute
+config = Mute
+end
+
+begin
+prog = xine
+button = stop
+config = RootMenu
+end
+
+begin
+prog = xine
+button =
+config = EventNext
+end
+
+begin
+prog = xine
+button =
+config = EventPrior
+end
+
+begin
+prog = xine
+button =
+config = OSDStreamInfos
+end \ No newline at end of file
diff --git a/abs/core-testing/system-templates/templates/remotes/Sasem/preview.jpg b/abs/core-testing/system-templates/templates/remotes/Sasem/preview.jpg
new file mode 100644
index 0000000..ec2b595
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Sasem/preview.jpg
Binary files differ
diff --git a/abs/core-testing/system-templates/templates/remotes/Technisat/lircd-technisat.conf b/abs/core-testing/system-templates/templates/remotes/Technisat/lircd-technisat.conf
new file mode 100755
index 0000000..3f0f3d4
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Technisat/lircd-technisat.conf
@@ -0,0 +1,68 @@
+# Please make this file available to others
+# by sending it to <lirc@bartelmus.de>
+#
+# this config file was automatically generated
+# using lirc-0.6.6(any) on Sun Mar 27 11:39:40 2005
+#
+# contributed by
+#
+# brand:
+# model no. of remote control: TS35 - Airstar2
+# devices being controlled by this remote: DVB-T
+#
+
+begin remote
+
+ name technisat
+ bits 13
+ flags RC5|CONST_LENGTH
+ eps 30
+ aeps 100
+
+ one 907 885
+ zero 907 885
+ plead 954
+ gap 113935
+ toggle_bit 2
+
+
+ begin codes
+ 1 0x0000000000001A81
+ 2 0x0000000000001A82
+ 3 0x0000000000001283
+ 4 0x0000000000001284
+ 5 0x0000000000001A85
+ 6 0x0000000000001286
+ 7 0x0000000000001A87
+ 8 0x0000000000001288
+ 9 0x0000000000001A89
+ 0 0x0000000000001A80
+ Mute 0x000000000000128D
+ Ext 0x0000000000001AB8
+ a/b 0x00000000000012A3
+ Power 0x0000000000001A8C
+ tv/radio 0x0000000000000293
+ -/-- 0x0000000000001A8A
+ Menu 0x0000000000000292
+ Back 0x0000000000000A8F
+ Up 0x0000000000001AA0
+ Down 0x00000000000012A1
+ Left 0x0000000000001A91
+ Right 0x0000000000001A90
+ Sfi 0x0000000000001AAF
+ Repeat 0x0000000000001AA2
+ Red 0x00000000000002AB
+ Green 0x0000000000000AAC
+ Yellow 0x0000000000000AAD
+ Blue 0x0000000000000AAE
+ Ok 0x0000000000000297
+ Check 0x00000000000002B6
+ txt 0x0000000000001ABC
+ stop 0x00000000000012A9
+ help 0x0000000000001A8F
+ tv/radio 0x0000000000000A93
+ end codes
+
+end remote
+
+
diff --git a/abs/core-testing/system-templates/templates/remotes/Technisat/lircrc-technisat.txt b/abs/core-testing/system-templates/templates/remotes/Technisat/lircrc-technisat.txt
new file mode 100755
index 0000000..8baa6b9
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Technisat/lircrc-technisat.txt
@@ -0,0 +1,347 @@
+begin
+ prog = mythtv
+ button = Up
+ config = Up
+end
+
+begin
+ prog = mythtv
+ button = Down
+ config = Down
+end
+
+begin
+ prog = mythtv
+ button = Left
+ config = Left
+end
+
+begin
+ prog = mythtv
+ button = Right
+ config = Right
+end
+
+begin
+ prog = mythtv
+ button = 1
+ config = 1
+end
+
+begin
+ prog = mythtv
+ button = 2
+ config = 2
+end
+
+begin
+ prog = mythtv
+ button = 3
+ config = 3
+end
+
+begin
+ prog = mythtv
+ button = 4
+ config = 4
+end
+
+begin
+ prog = mythtv
+ button = 5
+ config = 5
+end
+
+begin
+ prog = mythtv
+ button = 6
+ config = 6
+end
+
+begin
+ prog = mythtv
+ button = 7
+ config = 7
+end
+
+begin
+ prog = mythtv
+ button = 8
+ config = 8
+end
+
+begin
+ prog = mythtv
+ button = 9
+ config = 9
+end
+
+begin
+ prog = mythtv
+ button = 0
+ config = 0
+end
+
+begin
+ prog = mythtv
+ button = Menu
+ config = M
+end
+
+begin
+ prog = mythtv
+ button = Repeat
+ config = H
+end
+
+begin
+ prog = mythtv
+ button = Check
+ config = /
+end
+
+begin
+ prog = mythtv
+ button = help
+ config = T
+end
+
+
+begin
+ prog = mythtv
+# This is the Red key
+# We'll use it for "Delete"
+ button = Red
+ config = D
+end
+
+begin
+ prog = mythtv
+# This is the Green key
+# We'll use it for "Information"
+ button = Green
+ config = I
+end
+
+begin
+ prog = mythtv
+# This is the Green key
+# We'll use it for "View details"
+ button = Yellow
+ config = U
+end
+
+begin
+ prog = mythtv
+# This is the Green key
+# We'll use it for "Upcoming episodes"
+ button = Blue
+ config = O
+end
+
+
+# Note the "repeat =" strings in the volume and channel.
+# This means that if you hold down the key, every nth instance will be
+# passed. This depends on your system, so you may want to increase or
+# decrease this and see what happens. repeat = 1 is probably too
+# fast.
+
+begin
+ prog = mythtv
+ button = Left
+ repeat = 3
+ config = F10
+end
+
+begin
+ prog = mythtv
+ button = Right
+ repeat = 3
+ config = F11
+end
+
+begin
+ prog = mythtv
+# Middle button on the diamond
+ button = Ok
+ config = P
+end
+
+begin
+ prog = mythtv
+ button = Mute
+ config = |
+end
+
+begin
+ prog = mythtv
+ button = back
+ config = Esc
+end
+
+
+begin
+ prog = mythtv
+ button = stop
+ config = Esc
+end
+
+
+#MPlayer
+begin
+ prog = mplayer
+ button = stop
+ config = quit
+end
+
+begin
+ prog = mplayer
+ button = help
+ config = osd
+end
+
+begin
+ prog = mplayer
+ button = Ok
+ config = play
+end
+
+
+
+begin
+ prog = mplayer
+ button = Ok
+ config = pause
+end
+
+begin
+ prog = mplayer
+ button = Right
+ config = volume +1
+ repeat = 1
+end
+
+begin
+ prog = mplayer
+ button = Left
+ config = volume -1
+ repeat = 1
+end
+
+begin
+ prog = mplayer
+ button = Mute
+ config = mute
+end
+##XINE
+
+ begin
+ prog = xine
+ button = Ok
+ repeat = 3
+ config = Play
+ end
+
+ begin
+ prog = xine
+ button = stop
+ repeat = 3
+ config = Stop
+ end
+
+ begin
+ prog = xine
+ button = Back
+ config = Quit
+ end
+
+ begin
+ prog = xine
+ button = Ok
+ repeat = 3
+ config = Pause
+ end
+
+ begin
+ prog = xine
+ button = Up
+ repeat = 4
+ config = EventUp
+ end
+
+ begin
+ prog = xine
+ button = Down
+ repeat = 4
+ config = EventDown
+ end
+
+ begin
+ prog = xine
+ button = Left
+ repeat = 4
+ config = Volume-
+ end
+
+ begin
+ prog = xine
+ button = Right
+ repeat = 4
+ config = Volume+
+ end
+
+ begin
+ prog = xine
+ button = Ok
+ repeat = 0
+ config = EventSelect
+ end
+
+ begin
+ prog = xine
+ button = Menu
+ repeat = 0
+ config = Menu
+ end
+
+ #vol down
+ begin
+ prog = xine
+ button = Yellow
+ repeat = 1
+ config = EventLeft
+ end
+
+ #vol up
+ begin
+ prog = xine
+ button = Red
+ repeat = 1
+ config = EventRight
+ end
+
+
+ #ch up
+ begin
+ prog = xine
+ button = Green
+ repeat = 1
+ config = SeekRelative+60
+ end
+
+ #ch down
+ begin
+ prog = xine
+ button = Blue
+ repeat = 1
+ config = SeekRelative-60
+ end
+
+
+ #skip chapter backward
+ begin
+ prog = xine
+ button = Repeat
+ repeat = 1
+ config = EventPrior
+ end
diff --git a/abs/core-testing/system-templates/templates/remotes/Technisat/preview.jpg b/abs/core-testing/system-templates/templates/remotes/Technisat/preview.jpg
new file mode 100644
index 0000000..25ecd0d
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Technisat/preview.jpg
Binary files differ
diff --git a/abs/core-testing/system-templates/templates/remotes/Tekram/lircd-tekram.conf b/abs/core-testing/system-templates/templates/remotes/Tekram/lircd-tekram.conf
new file mode 100755
index 0000000..90ae8f8
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Tekram/lircd-tekram.conf
@@ -0,0 +1,48 @@
+#
+# This is for the remote that Tekram bundles with its M230 card (Mach64)
+# Commands from the remote are hardware-decoded
+#
+# contributed by Froenchenko Leonid <lfroen@galileo.co.il>
+#
+# brand: Tekram M230 (ATI Mach64)
+# supported devices: This remote control comes with TV Tuner cards from
+# Tekram based on ATI 264VT (btt829)
+#
+
+begin remote
+ name tekram_m230
+ bits 8
+ begin codes
+ 0 0x00
+ 1 0x01
+ 2 0x02
+ 3 0x03
+ 4 0x04
+ 5 0x05
+ 6 0x06
+ 7 0x07
+ 8 0x08
+ 9 0x09
+ RECALL 0x0A
+ ENTER 0x17
+ POWER 0x1C
+ SOURCE 0x15
+ PC_VID 0x12
+ STILL 0x11
+ TTX 0x0F
+ FAV 0x13
+ MUTE 0x10
+ VOL_UP 0x1A
+ VOL_DN 0x1E
+ CH_UP 0x1B
+ CH_DN 0x1F
+ PLAY 0x0D
+ STOP 0x0E
+ REW 0x1D
+ FFW 0x19
+ ADD_ER 0x16
+ FUNC 0x14
+ F_PLUS 0x18
+ F_MINUS 0x0C
+ end codes
+end remote
diff --git a/abs/core-testing/system-templates/templates/remotes/Tekram/lircrc-tekram.txt b/abs/core-testing/system-templates/templates/remotes/Tekram/lircrc-tekram.txt
new file mode 100755
index 0000000..6226f3d
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Tekram/lircrc-tekram.txt
@@ -0,0 +1,474 @@
+# Channel Up
+begin
+prog = mythtv
+button = CH_UP
+config = Up
+end
+
+# Channel Down
+begin
+prog = mythtv
+button = CH_DN
+config = Down
+end
+
+# General Left
+begin
+prog = mythtv
+button =
+config = Left
+end
+
+# General Right
+begin
+prog = mythtv
+button =
+config = Right
+end
+
+ # LiveTV browse up channel
+begin
+prog = mythtv
+button = CH_UP
+config = Up
+end
+
+# LiveTV browse down channel
+begin
+prog = mythtv
+button = CH_DN
+config = Down
+end
+
+# Volume Up
+begin
+prog = mythtv
+button = VOL_UP
+config = F11
+end
+
+# Volume Down
+begin
+prog = mythtv
+button = VOL_DN
+config = F10
+end
+
+ # OK/Select
+begin
+prog = mythtv
+button = ENTER
+config = Space
+end
+
+# Play
+begin
+prog = mythtv
+button = PLAY
+config = Return
+end
+
+# Stop
+begin
+prog = mythtv
+button = STOP
+config = Esc
+end
+
+# Escape/Exit/Back
+begin
+prog = mythtv
+button =
+config = Esc
+end
+
+# Power Off/Exit
+begin
+prog = irexec
+button = POWER
+config = /usr/bin/mythpowerbutton.sh
+end
+
+# Pause
+begin
+prog = mythtv
+button = STILL
+config = P
+end
+
+# Mute
+begin
+prog = mythtv
+button = MUTE
+config = |
+end
+
+# Fast forward (10 sec default)
+begin
+prog = mythtv
+button = FFW
+config = Right
+end
+
+# Rewind (10 sec default)
+begin
+prog = mythtv
+button = REW
+config = Left
+end
+
+# Skip forward (10 min default)
+begin
+prog = mythtv
+button = F_PLUS
+config = PgDown
+end
+
+# Skip backward (10 min default)
+begin
+prog = mythtv
+button = F_MINUS
+config = PgUp
+end
+
+# Record
+begin
+prog = mythtv
+button = FUNC
+config = R
+end
+
+# Delete
+begin
+prog = mythtv
+button =
+config = D
+end
+
+# OSD browse
+begin
+prog = mythtv
+button =
+config = O
+end
+
+# Display EPG while in live TV,
+# View selected show while in EPG
+begin
+prog = mythtv
+button = SOURCE
+config = M
+end
+
+# Bring up OSD info
+begin
+prog = mythtv
+button = FAV
+config = I
+end
+
+# Change display aspect ratio
+begin
+prog = mythtv
+button = PC_VID
+config = W
+end
+
+# Seek to previous commercial cut point
+begin
+prog = mythtv
+button =
+config = Q
+end
+
+# Seek to next commercial cut point
+begin
+prog = mythtv
+button =
+config = Z
+end
+
+# Numbers 0-9
+
+begin
+prog = mythtv
+button = 0
+config = 0
+end
+
+begin
+prog = mythtv
+button = 1
+config = 1
+end
+
+begin
+prog = mythtv
+button = 2
+config = 2
+end
+
+begin
+prog = mythtv
+button = 3
+config = 3
+end
+
+begin
+prog = mythtv
+button = 4
+config = 4
+end
+
+begin
+prog = mythtv
+button = 5
+config = 5
+end
+
+begin
+prog = mythtv
+button = 6
+config = 6
+end
+
+begin
+prog = mythtv
+button = 7
+config = 7
+end
+
+begin
+prog = mythtv
+button = 8
+config = 8
+end
+
+begin
+prog = mythtv
+button = 9
+config = 9
+end
+
+# Previous channel
+begin
+prog = mythtv
+button = RECALL
+config = H
+end
+
+# Closed Captioning
+begin
+prog = mythtv
+button = TTX
+config = T
+end
+
+# Picture in Picture
+begin
+prog = mythtv
+button =
+config = V
+end
+
+# Change channels on both cards
+begin
+prog = mythtv
+button =
+config = N
+end
+
+# Clear cutpoints in cutlist
+begin
+prog = mythtv
+button =
+config = Q
+end
+
+
+
+
+### MPlayer lirc setup
+
+# Show OSD
+begin
+prog = mplayer
+button = FAV
+config = osd
+end
+
+# Pause playback
+begin
+prog = mplayer
+button = STILL
+config = pause
+end
+
+# Mute
+begin
+prog = mplayer
+button = MUTE
+config = mute
+end
+
+# Seek back 10 seconds
+begin
+prog = mplayer
+button = REW
+config = seek -10
+end
+
+# Seek forward 30 seconds
+begin
+prog = mplayer
+button = FFW
+config = seek +30
+end
+
+# Quit
+begin
+prog = mplayer
+button = STOP
+config = quit
+end
+
+# Seek forward 10 minutes
+begin
+prog = mplayer
+button = F_PLUS
+config = seek +600
+end
+
+# Seek backward 10 minutes
+begin
+prog = mplayer
+button = F_MINUS
+config = seek -600
+end
+
+# Toggle full-screen
+begin
+prog = mplayer
+button = SOURCE
+config = vo_fullscreen
+end
+
+
+
+### Xine lirc setup
+
+begin
+prog = xine
+button = PLAY
+config = Play
+end
+
+begin
+prog = xine
+button = STOP
+config = Stop
+end
+
+begin
+prog = xine
+button = STOP
+config = Quit
+end
+
+begin
+prog = xine
+button = STILL
+config = Pause
+end
+
+begin
+prog = xine
+button = CH_UP
+config = EventUp
+end
+
+begin
+prog = xine
+button = CH_DN
+config = EventDown
+end
+
+begin
+prog = xine
+button =
+config = EventLeft
+end
+
+begin
+prog = xine
+button =
+config = EventRight
+end
+
+begin
+prog = xine
+button = ENTER
+config = EventSelect
+end
+
+begin
+prog = xine
+button = SOURCE
+config = Menu
+end
+
+begin
+prog = xine
+button = FFW
+#config = SpeedFaster
+config = SeekRelative+60
+end
+
+begin
+prog = xine
+button = REW
+#config = SpeedSlower
+config = SeekRelative-60
+end
+
+begin
+prog = xine
+button = VOL_UP
+config = Volume+
+end
+
+begin
+prog = xine
+button = VOL_DN
+config = Volume-
+end
+
+begin
+prog = xine
+button = MUTE
+config = Mute
+end
+
+begin
+prog = xine
+button = STOP
+config = RootMenu
+end
+
+begin
+prog = xine
+button = F_PLUS
+config = EventNext
+end
+
+begin
+prog = xine
+button = F_MINUS
+config = EventPrior
+end
+
+begin
+prog = xine
+button = TTX
+config = OSDStreamInfos
+end \ No newline at end of file
diff --git a/abs/core-testing/system-templates/templates/remotes/Tekram/preview.jpg b/abs/core-testing/system-templates/templates/remotes/Tekram/preview.jpg
new file mode 100644
index 0000000..a034186
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Tekram/preview.jpg
Binary files differ
diff --git a/abs/core-testing/system-templates/templates/remotes/Twinham/lircd-twinhan.conf b/abs/core-testing/system-templates/templates/remotes/Twinham/lircd-twinhan.conf
new file mode 100755
index 0000000..3fb3652
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Twinham/lircd-twinhan.conf
@@ -0,0 +1,44 @@
+begin remote
+ name TwinHanRemote
+ bits 32
+ eps 30
+ aeps 100
+ one 0 0
+ zero 0 0
+ gap 115899
+ toggle_bit 0
+ begin codes
+ fullscreen 0x8001002C
+ Power 0x8001001D
+ 1 0x80010002
+ 2 0x80010003
+ 3 0x80010004
+ 4 0x80010005
+ 5 0x80010006
+ 6 0x80010007
+ 7 0x80010008
+ 8 0x80010009
+ 9 0x8001000A
+ 0 0x8001000B
+ rec 0x80010066
+ favorite 0x8001002F
+ rewind 0x80010017
+ forward 0x80010031
+ ch+ 0x80010068
+ ch- 0x8001006D
+ vol- 0x8001006C
+ vol+ 0x80010067
+ recall 0x8001002E
+ play 0x8001001C
+ stop 0x8001006B
+ pause 0x80010014
+ mute 0x80010032
+ cancel 0x80010001
+ capture 0x80010019
+ preview 0x80010025
+ epg 0x80010012
+ recordlist 0x80010026
+ tab 0x8001000F
+ teletext 0x8001001E
+ end codes
+end remote \ No newline at end of file
diff --git a/abs/core-testing/system-templates/templates/remotes/Twinham/lircrc-twinhan.txt b/abs/core-testing/system-templates/templates/remotes/Twinham/lircrc-twinhan.txt
new file mode 100755
index 0000000..296876c
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Twinham/lircrc-twinhan.txt
@@ -0,0 +1,474 @@
+# Channel Up
+begin
+prog = mythtv
+button = ch+
+config = Up
+end
+
+# Channel Down
+begin
+prog = mythtv
+button = ch-
+config = Down
+end
+
+# General Left
+begin
+prog = mythtv
+button =
+config = Left
+end
+
+# General Right
+begin
+prog = mythtv
+button =
+config = Right
+end
+
+ # LiveTV browse up channel
+begin
+prog = mythtv
+button = ch+
+config = Up
+end
+
+# LiveTV browse down channel
+begin
+prog = mythtv
+button = ch-
+config = Down
+end
+
+# Volume Up
+begin
+prog = mythtv
+button = vol+
+config = F11
+end
+
+# Volume Down
+begin
+prog = mythtv
+button = vol-
+config = F10
+end
+
+ # OK/Select
+begin
+prog = mythtv
+button =
+config = Space
+end
+
+# Play
+begin
+prog = mythtv
+button = play
+config = Return
+end
+
+# Stop
+begin
+prog = mythtv
+button = stop
+config = Esc
+end
+
+# Escape/Exit/Back
+begin
+prog = mythtv
+button =
+config = Esc
+end
+
+# Power Off/Exit
+begin
+prog = irexec
+button = Power
+config = /usr/bin/mythpowerbutton.sh
+end
+
+# Pause
+begin
+prog = mythtv
+button = pause
+config = P
+end
+
+# Mute
+begin
+prog = mythtv
+button = mute
+config = |
+end
+
+# Fast forward (10 sec default)
+begin
+prog = mythtv
+button = forward
+config = Right
+end
+
+# Rewind (10 sec default)
+begin
+prog = mythtv
+button = rewind
+config = Left
+end
+
+# Skip forward (10 min default)
+begin
+prog = mythtv
+button =
+config = PgDown
+end
+
+# Skip backward (10 min default)
+begin
+prog = mythtv
+button =
+config = PgUp
+end
+
+# Record
+begin
+prog = mythtv
+button = rec
+config = R
+end
+
+# Delete
+begin
+prog = mythtv
+button =
+config = D
+end
+
+# OSD browse
+begin
+prog = mythtv
+button =
+config = O
+end
+
+# Display EPG while in live TV,
+# View selected show while in EPG
+begin
+prog = mythtv
+button = epg
+config = M
+end
+
+# Bring up OSD info
+begin
+prog = mythtv
+button =
+config = I
+end
+
+# Change display aspect ratio
+begin
+prog = mythtv
+button = preview
+config = W
+end
+
+# Seek to previous commercial cut point
+begin
+prog = mythtv
+button =
+config = Q
+end
+
+# Seek to next commercial cut point
+begin
+prog = mythtv
+button =
+config = Z
+end
+
+# Numbers 0-9
+
+begin
+prog = mythtv
+button = 0
+config = 0
+end
+
+begin
+prog = mythtv
+button = 1
+config = 1
+end
+
+begin
+prog = mythtv
+button = 2
+config = 2
+end
+
+begin
+prog = mythtv
+button = 3
+config = 3
+end
+
+begin
+prog = mythtv
+button = 4
+config = 4
+end
+
+begin
+prog = mythtv
+button = 5
+config = 5
+end
+
+begin
+prog = mythtv
+button = 6
+config = 6
+end
+
+begin
+prog = mythtv
+button = 7
+config = 7
+end
+
+begin
+prog = mythtv
+button = 8
+config = 8
+end
+
+begin
+prog = mythtv
+button = 9
+config = 9
+end
+
+# Previous channel
+begin
+prog = mythtv
+button = recall
+config = H
+end
+
+# Closed Captioning
+begin
+prog = mythtv
+button = teletext
+config = T
+end
+
+# Picture in Picture
+begin
+prog = mythtv
+button =
+config = V
+end
+
+# Change channels on both cards
+begin
+prog = mythtv
+button =
+config = N
+end
+
+# Clear cutpoints in cutlist
+begin
+prog = mythtv
+button =
+config = Q
+end
+
+
+
+
+### MPlayer lirc setup
+
+# Show OSD
+begin
+prog = mplayer
+button = epg
+config = osd
+end
+
+# Pause playback
+begin
+prog = mplayer
+button = pause
+config = pause
+end
+
+# Mute
+begin
+prog = mplayer
+button = mute
+config = mute
+end
+
+# Seek back 10 seconds
+begin
+prog = mplayer
+button = rewind
+config = seek -10
+end
+
+# Seek forward 30 seconds
+begin
+prog = mplayer
+button = forward
+config = seek +30
+end
+
+# Quit
+begin
+prog = mplayer
+button = stop
+config = quit
+end
+
+# Seek forward 10 minutes
+begin
+prog = mplayer
+button =
+config = seek +600
+end
+
+# Seek backward 10 minutes
+begin
+prog = mplayer
+button =
+config = seek -600
+end
+
+# Toggle full-screen
+begin
+prog = mplayer
+button = fullscreen
+config = vo_fullscreen
+end
+
+
+
+### Xine lirc setup
+
+begin
+prog = xine
+button = play
+config = Play
+end
+
+begin
+prog = xine
+button = stop
+config = Stop
+end
+
+begin
+prog = xine
+button = stop
+config = Quit
+end
+
+begin
+prog = xine
+button = pause
+config = Pause
+end
+
+begin
+prog = xine
+button = ch+
+config = EventUp
+end
+
+begin
+prog = xine
+button = ch-
+config = EventDown
+end
+
+begin
+prog = xine
+button =
+config = EventLeft
+end
+
+begin
+prog = xine
+button =
+config = EventRight
+end
+
+begin
+prog = xine
+button =
+config = EventSelect
+end
+
+begin
+prog = xine
+button = epg
+config = Menu
+end
+
+begin
+prog = xine
+button = forward
+#config = SpeedFaster
+config = SeekRelative+60
+end
+
+begin
+prog = xine
+button = rewind
+#config = SpeedSlower
+config = SeekRelative-60
+end
+
+begin
+prog = xine
+button = vol+
+config = Volume+
+end
+
+begin
+prog = xine
+button = vol-
+config = Volume-
+end
+
+begin
+prog = xine
+button = mute
+config = Mute
+end
+
+begin
+prog = xine
+button = stop
+config = RootMenu
+end
+
+begin
+prog = xine
+button =
+config = EventNext
+end
+
+begin
+prog = xine
+button =
+config = EventPrior
+end
+
+begin
+prog = xine
+button = teletext
+config = OSDStreamInfos
+end \ No newline at end of file
diff --git a/abs/core-testing/system-templates/templates/remotes/Twinham/preview.jpg b/abs/core-testing/system-templates/templates/remotes/Twinham/preview.jpg
new file mode 100644
index 0000000..a034186
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/Twinham/preview.jpg
Binary files differ
diff --git a/abs/core-testing/system-templates/templates/remotes/X10_Lola/lircd-x10lola.conf b/abs/core-testing/system-templates/templates/remotes/X10_Lola/lircd-x10lola.conf
new file mode 100755
index 0000000..7bfad44
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/X10_Lola/lircd-x10lola.conf
@@ -0,0 +1,78 @@
+# lircd.conf for X-10 Lola remote
+#
+# this config file was automatically generated
+# using lirc-0.6.6(any) on Sat May 15 14:41:38 2004
+# matching MythTV configuration file at http://wendy.seltzer.org/mythtv/lircrc
+#
+#
+# brand: X-10 Lola
+# model no. of remote control: UR89A
+# devices being controlled by this remote: mythtv
+#
+
+begin remote
+
+ name x10_lola
+ bits 16
+ eps 30
+ aeps 100
+
+ one 0 0
+ zero 0 0
+
+ pre_data_bits 8
+ pre_data 0x14
+ post_data_bits 16
+ post_data 0x0
+ gap 219972
+ toggle_bit 0
+
+
+ begin codes
+ up 0x000000000000600B
+ down 0x000000000000610C
+ left 0x0000000000005D08
+ right 0x0000000000005E09
+ M 0x0000000000005F0A
+ 1 0x000000000000620D
+ 2 0x000000000000630E
+ 3 0x000000000000640F
+ 4 0x0000000000006510
+ 5 0x0000000000006611
+ 6 0x0000000000006712
+ 7 0x0000000000006813
+ 8 0x0000000000006914
+ 9 0x0000000000006A15
+ 0 0x0000000000006C17
+ a-d 0x0000000000006B16
+ a-b 0x0000000000006D18
+ pageup 0x000000000000711C
+ pagedown 0x0000000000007520
+ T 0x000000000000832E
+ E 0x000000000000842F
+ F 0x0000000000005C07
+ S 0x0000000000008530
+ scan- 0x000000000000802B
+ rew 0x0000000000007924
+ play 0x0000000000007A25
+ ff 0x0000000000007B26
+ scan+ 0x0000000000007F2A
+ rec 0x0000000000007C27
+ stop 0x0000000000007D28
+ pause 0x0000000000007E29
+ playlist 0x0000000000005601
+ playing 0x000000000000822D
+ enter 0x000000000000731E
+ eu 0x0000000000006F1A
+ ed 0x0000000000007722
+ el 0x000000000000721D
+ er 0x000000000000741F
+ alb 0x0000000000006E19
+ art 0x000000000000701B
+ gen 0x0000000000007621
+ trk 0x0000000000007823
+ end codes
+
+end remote
+
+
diff --git a/abs/core-testing/system-templates/templates/remotes/X10_Lola/lircrc-x10lola.txt b/abs/core-testing/system-templates/templates/remotes/X10_Lola/lircrc-x10lola.txt
new file mode 100755
index 0000000..5fc949e
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/X10_Lola/lircrc-x10lola.txt
@@ -0,0 +1,334 @@
+# lircrc
+# lircrc configuration file for X-10 Lola remote for use with MythTV
+# for use with keymapping at http://wendy.seltzer.org/mythtv/lircd.conf
+# common keymappings from the keys.txt suggestions
+#
+# This file is public domain. No rights reserved.
+
+###number keys
+begin
+ prog = mythtv
+ button = 0
+ config = 0
+end
+begin
+ prog = mythtv
+ button = 1
+ config = 1
+end
+begin
+ prog = mythtv
+ button = 2
+ config = 2
+end
+begin
+ prog = mythtv
+ button = 3
+ config = 3
+end
+begin
+ prog = mythtv
+ button = 4
+ config = 4
+end
+begin
+ prog = mythtv
+ button = 5
+ config = 5
+end
+begin
+ prog = mythtv
+ button = 0
+ config = 0
+end
+begin
+ prog = mythtv
+ button = 6
+ config = 6
+end
+begin
+ prog = mythtv
+ button = 7
+ config = 7
+end
+begin
+ prog = mythtv
+ button = 8
+ config = 8
+end
+begin
+ prog = mythtv
+ button = 9
+ config = 9
+end
+
+##arrows
+begin
+ prog = mythtv
+ button = play
+ config = Space
+end
+
+### arrows with the multibutton
+begin
+ prog = mythtv
+ button = eu
+ config = Up
+end
+begin
+ prog = mythtv
+ button = ed
+ config = Down
+end
+begin
+ prog = mythtv
+ button = el
+ config = Left
+end
+begin
+ prog = mythtv
+ button = er
+ config = Right
+end
+begin
+ prog = mythtv
+ button = enter
+ config = Space
+end
+begin
+ prog = mythtv
+ button = stop
+ config = Escape
+end
+begin
+ prog = mythtv
+ button = alb
+ config = m
+end
+begin
+ prog = mythtv
+ button = art
+ config = e
+end
+begin
+ prog = mythtv
+ button = gen
+ config = i
+end
+begin
+ prog = mythtv
+ button = trk
+ config = y
+end
+begin
+ prog = mythtv
+ button = rec
+ config = r
+end
+
+begin
+ prog = mythtv
+ button = pause
+ config = p
+end
+
+begin
+ prog = mythtv
+ button = T
+ config = t
+end
+
+begin
+ prog = mythtv
+ button = E
+ config = u
+end
+
+begin
+ prog = mythtv
+ button = S
+ config = a
+end
+
+begin
+ prog = mythtv
+ button = F
+ config = +
+end
+
+begin
+ prog = mythtv
+ button = playing
+ config = s
+end
+
+begin
+ prog=mythtv
+ button = playlist
+ config = w
+end
+
+begin
+ prog = mythtv
+ button = a-d
+ config = d
+end
+
+begin
+ prog = mythtv
+ button = a-b
+ config = b
+end
+##Volume (with pageup)
+begin
+ prog=mythtv
+ button = pageup
+ config = Page Up
+end
+begin
+ prog=mythtv
+ button = pagedown
+ config = Page Down
+end
+
+begin
+ prog=mythtv
+ button = ch+
+ config = ]
+end
+
+begin
+ prog=mythtv
+ button = ch-
+ config = [
+end
+
+begin
+ prog=mythtv
+ button = vol-
+ config = q
+end
+
+begin
+ prog=mythtv
+ button = vol+
+ config = z
+end
+
+begin
+ prog=mythtv
+ button = ff
+ config = >
+end
+
+begin
+ prog=mythtv
+ button = rew
+ config = <
+end
+
+begin
+ prog=mythtv
+ button = scan+
+ config = }
+end
+
+begin
+ prog=mythtv
+ button = scan-
+ config = {
+end
+
+
+##mplayer
+### MPlayer lirc setup
+
+# Show OSD
+begin
+prog = mplayer
+button = alb
+repeat = 3
+config = osd
+end
+
+# Pause playback
+begin
+prog = mplayer
+button = pause
+repeat = 3
+config = pause
+end
+
+# Skip ahead a minute if playing
+# If paused, resume playing
+begin
+prog = mplayer
+button = play
+repeat = 3
+config = seek +1
+end
+
+# Stop playback and exit
+begin
+prog = mplayer
+button = stop
+repeat = 3
+config = quit
+end
+
+# Mute
+begin
+prog = mplayer
+button =
+repeat = 3
+config = mute
+end
+
+# Seek back 10 seconds
+begin
+prog = mplayer
+button = rew
+repeat = 3
+config = seek -10
+end
+
+# Seek forward 30 seconds
+begin
+prog = mplayer
+button = ff
+repeat = 3
+config = seek +30
+end
+
+# Quit
+begin
+prog = mplayer
+button = E
+repeat = 3
+config = quit
+end
+
+# Seek forward 10 minutes
+begin
+prog = mplayer
+button = vol+
+repeat = 3
+config = seek +600
+end
+
+# Seek backward 10 minutes
+begin
+prog = mplayer
+button = vol-
+repeat = 3
+config = seek -600
+end
+
+# Toggle full-screen
+begin
+prog = mplayer
+button = playlist
+repeat = 3
+config = vo_fullscreen
+end
+
diff --git a/abs/core-testing/system-templates/templates/remotes/X10_Lola/preview.jpg b/abs/core-testing/system-templates/templates/remotes/X10_Lola/preview.jpg
new file mode 100644
index 0000000..915a3b2
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/X10_Lola/preview.jpg
Binary files differ
diff --git a/abs/core-testing/system-templates/templates/remotes/imon-pad/preview.jpg b/abs/core-testing/system-templates/templates/remotes/imon-pad/preview.jpg
index a034186..a2e46a3 100644
--- a/abs/core-testing/system-templates/templates/remotes/imon-pad/preview.jpg
+++ b/abs/core-testing/system-templates/templates/remotes/imon-pad/preview.jpg
Binary files differ
diff --git a/abs/core-testing/system-templates/templates/remotes/imon/preview.jpg b/abs/core-testing/system-templates/templates/remotes/imon/preview.jpg
index a034186..0829118 100644
--- a/abs/core-testing/system-templates/templates/remotes/imon/preview.jpg
+++ b/abs/core-testing/system-templates/templates/remotes/imon/preview.jpg
Binary files differ
diff --git a/abs/core-testing/system-templates/templates/remotes/mceusb/lircd-mceusb.conf b/abs/core-testing/system-templates/templates/remotes/mceusb/lircd-mceusb.conf
deleted file mode 100644
index ec3b73e..0000000
--- a/abs/core-testing/system-templates/templates/remotes/mceusb/lircd-mceusb.conf
+++ /dev/null
@@ -1,88 +0,0 @@
-#
-# RC-6 config file
-#
-# source: http://home.hccnet.nl/m.majoor/projects__remote_control.htm
-# http://home.hccnet.nl/m.majoor/pronto.pdf
-#
-# used by: Philips
-#
-#########
-#
-# Philips Media Center Edition remote control
-# For use with the USB MCE ir receiver
-#
-# Dan Conti dconti|acm.wwu.edu
-#
-# Radio, Print, RecTV are only available on the HP Media Center remote control
-#
-
-begin remote
-
- name mceusb
- bits 16
- flags RC6|CONST_LENGTH
- eps 30
- aeps 100
-
- header 2667 889
- one 444 444
- zero 444 444
- pre_data_bits 21
- pre_data 0x37FF0
- gap 105000
- toggle_bit 22
- rc6_mask 0x100000000
-
-
- begin codes
-
-# starts at af
- Radio 0x00007baf
- Print 0x00007bb1
- Videos 0x00007bb5
- Pictures 0x00007bb6
- RecTV 0x00007bb7
- Music 0x00007bb8
- TV 0x00007bb9
-# no ba - d8
- Guide 0x00007bd9
- LiveTV 0x00007bda
- DVD 0x00007bdb
- Back 0x00007bdc
- OK 0x00007bdd
- Right 0x00007bde
- Left 0x00007bdf
- Down 0x00007be0
- Up 0x00007be1
-# no e2,e3
- Replay 0x00007be4
- Skip 0x00007be5
- Stop 0x00007be6
- Pause 0x00007be7
- Record 0x00007be8
- Play 0x00007be9
- Rewind 0x00007bea
- Forward 0x00007beb
- ChanDown 0x00007bec
- ChanUp 0x00007bed
- VolDown 0x00007bee
- VolUp 0x00007bef
- More 0x00007bf0
- Mute 0x00007bf1
- Home 0x00007bf2
- Power 0x00007bf3
- Enter 0x00007bf4
- Clear 0x00007bf5
- Nine 0x00007bf6
- Eight 0x00007bf7
- Seven 0x00007bf8
- Six 0x00007bf9
- Five 0x00007bfa
- Four 0x00007bfb
- Three 0x00007bfc
- Two 0x00007bfd
- One 0x00007bfe
- Zero 0x00007bff
- end codes
-
-end remote
diff --git a/abs/core-testing/system-templates/templates/remotes/mceusb/lircd.conf.mceusb b/abs/core-testing/system-templates/templates/remotes/mceusb/lircd.conf.mceusb
index 041c2cb..b1c26b6 100644
--- a/abs/core-testing/system-templates/templates/remotes/mceusb/lircd.conf.mceusb
+++ b/abs/core-testing/system-templates/templates/remotes/mceusb/lircd.conf.mceusb
@@ -24,81 +24,140 @@
begin remote
- name mceusb
- bits 16
- flags RC6|CONST_LENGTH
- eps 30
- aeps 100
+ name mceusb
+ bits 16
+ flags RC6|CONST_LENGTH
+ eps 30
+ aeps 100
- header 2667 889
- one 444 444
- zero 444 444
+ header 2667 889
+ one 444 444
+ zero 444 444
pre_data_bits 21
pre_data 0x37FF0
- gap 105000
- toggle_bit 22
- rc6_mask 0x100000000
+ gap 105000
+ toggle_bit 22
+ rc6_mask 0x100000000
-
- begin codes
-
- Blue 0x00007ba1
- Yellow 0x00007ba2
- Green 0x00007ba3
- Red 0x00007ba4
+ begin codes
+#-------------------------------------------------------------b9
+ Testb90 0x00007b90
+ Testb91 0x00007b91
+ Testb92 0x00007b92
+ Testb93 0x00007b93
+ Testb94 0x00007b94
+ Testb95 0x00007b95
+ Testb96 0x00007b96
+ Testb97 0x00007b97
+ Testb98 0x00007b98
+ Testb99 0x00007b99
+ TV????? 0x00007b9a
+ Messenger 0x00007b9b
+ Testb9c 0x00007b9c
+ Testb9d 0x00007b9d
+ Testb9e 0x00007b9e
+ Testb9f 0x00007b9f
+#-------------------------------------------------------------ba
+ Testba0 0x00007ba0
+ Blue 0x00007ba1
+ Yellow 0x00007ba2
+ Green 0x00007ba3
+ Red 0x00007ba4
Teletext 0x00007ba5
-
-# starts at af
- Radio 0x00007baf
- Print 0x00007bb1
- Videos 0x00007bb5
- Pictures 0x00007bb6
- RecTV 0x00007bb7
- Music 0x00007bb8
- TV 0x00007bb9
-# no ba - d8
-
- Guide 0x00007bd9
- LiveTV 0x00007bda
- DVD 0x00007bdb
- Back 0x00007bdc
- OK 0x00007bdd
- Right 0x00007bde
- Left 0x00007bdf
- Down 0x00007be0
- Up 0x00007be1
-
- Star 0x00007be2
- Hash 0x00007be3
-
- Replay 0x00007be4
- Skip 0x00007be5
- Stop 0x00007be6
- Pause 0x00007be7
- Record 0x00007be8
- Play 0x00007be9
- Rewind 0x00007bea
- Forward 0x00007beb
- ChanDown 0x00007bec
- ChanUp 0x00007bed
- VolDown 0x00007bee
- VolUp 0x00007bef
- More 0x00007bf0
- Mute 0x00007bf1
- Home 0x00007bf2
- Power 0x00007bf3
- Enter 0x00007bf4
- Clear 0x00007bf5
- Nine 0x00007bf6
- Eight 0x00007bf7
- Seven 0x00007bf8
- Six 0x00007bf9
- Five 0x00007bfa
- Four 0x00007bfb
- Three 0x00007bfc
- Two 0x00007bfd
- One 0x00007bfe
- Zero 0x00007bff
- end codes
-
+ Testba6 0x00007ba6
+ Testba7 0x00007ba7
+ Testba8 0x00007ba8
+ Testba9 0x00007ba9
+ Testbaa 0x00007baa
+ Testbab 0x00007bab
+ Testbac 0x00007bac
+ Testbad 0x00007bad
+ Testbae 0x00007bae
+ Radio 0x00007baf
+#-------------------------------------------------------------bb
+ Testbb0 0x00007bb0
+ Print 0x00007bb1
+ Testbb2 0x00007bb2
+ Testbb3 0x00007bb3
+ Testbb4 0x00007bb4
+ Videos 0x00007bb5
+ Pictures 0x00007bb6
+ RecordedTV 0x00007bb7
+ Music 0x00007bb8
+ TV 0x00007bb9
+ Testbba 0x00007bba
+ Testbbb 0x00007bbb
+ Testbbc 0x00007bbc
+ Testbbd 0x00007bbd
+ Testbbe 0x00007bbe
+ Testbbf 0x00007bbf
+#-------------------------------------------------------------- bc
+ Testbc0 0x00007bc0
+ Testbc1 0x00007bc1
+ Testbc2 0x00007bc2
+ Testbc3 0x00007bc3
+ Testbc4 0x00007bc4
+ Testbc5 0x00007bc5
+ Testbc6 0x00007bc6
+ Testbc7 0x00007bc7
+ Testbc8 0x00007bc8
+ Testbc9 0x00007bc9
+ Testbca 0x00007bca
+ Testbcb 0x00007bcb
+ Testbcc 0x00007bcc
+ Testbcd 0x00007bcd
+ Testbce 0x00007bce
+ Testbcf 0x00007bcf
+#---------------------------------------------------------------bd
+ Testbd0 0x00007bd0
+ Testbd1 0x00007bd1
+ Testbd2 0x00007bd2
+ Testbd3 0x00007bd3
+ Testbd4 0x00007bd4
+ Testbd5 0x00007bd5
+ Testbd6 0x00007bd6
+ Testbd7 0x00007bd7
+ Testbd8 0x00007bd8
+ Guide 0x00007bd9
+ LiveTV 0x00007bda
+ DVDMenu 0x00007bdb
+ Back 0x00007bdc
+ OK 0x00007bdd
+ Right 0x00007bde
+ Left 0x00007bdf
+#--------------------------------------------------------------be
+ Down 0x00007be0
+ Up 0x00007be1
+ Star 0x00007be2
+ Hash 0x00007be3
+ Replay 0x00007be4
+ Skip 0x00007be5
+ Stop 0x00007be6
+ Pause 0x00007be7
+ Record 0x00007be8
+ Play 0x00007be9
+ Rewind 0x00007bea
+ Forward 0x00007beb
+ ChannelDown 0x00007bec
+ ChannelUp 0x00007bed
+ VolumeDown 0x00007bee
+ VolumeUp 0x00007bef
+#---------------------------------------------------------------bf
+ More 0x00007bf0
+ Mute 0x00007bf1
+ Start 0x00007bf2
+ Power 0x00007bf3
+ Enter 0x00007bf4
+ Clear 0x00007bf5
+ Nine 0x00007bf6
+ Eight 0x00007bf7
+ Seven 0x00007bf8
+ Six 0x00007bf9
+ Five 0x00007bfa
+ Four 0x00007bfb
+ Three 0x00007bfc
+ Two 0x00007bfd
+ One 0x00007bfe
+ Zero 0x00007bff
+ end codes
end remote
diff --git a/abs/core-testing/system-templates/templates/remotes/mceusb/lircrc-mceusb b/abs/core-testing/system-templates/templates/remotes/mceusb/lircrc-mceusb
index 3738bfa..a6a8c48 100644
--- a/abs/core-testing/system-templates/templates/remotes/mceusb/lircrc-mceusb
+++ b/abs/core-testing/system-templates/templates/remotes/mceusb/lircrc-mceusb
@@ -1,393 +1,877 @@
-# lircrc.mceusb
-
-###################
+# /home/mythtv/.mythtv/lircrc
+#
+# From Knoppmyth R5.5 - Copied by UniCav
#
-# MythTV
+# Media Center Edition Remote Control and
+# Remote Control Keys on Media Center Keyboard
#
-###################
+##############################################################################
+# For use with the USB MCE ir receiver
+# MythTV LIRC config file for the mceusb2 or lirc_mod_mce module
+
+# Info about lircrc statment
+#begin
+# prog = ... Program controlled, irxevent, irexec, mythtv, mplayer,
+# xine, or others
+# remote = ... mceusb, or what ever you happen to have or want to call it
+# button = ... remote keys names from your lircd.conf file
+# repeat = ... repeat = 2 is fast, repeat = 4 is slower
+# delay = ... delay before repeat, 1 is short, 4 is longer
+# config = ... output key presses to key bindings editor
+# mode = ...
+# flags = ...
+#end
+
+# Test your new Lirc settings
+# /etc/init.d/lirc restart To restart Lirc
+# ctrl-alt-backspace To restart the frontend
+
+# Updated January 30th 2008 BAK
+# for the Knoppmyth project
+
+################################### irexec ###################################
+# the lirc irexec program must be running for this section
+
+# Will perform a complete shutdown
+#begin
+# prog = irexec
+# button = Power
+# config = /usr/bin/sudo halt
+#end
+
+############################### Mythtv Section ###############################
+# MythTV Key Binding Editor location
+# Mythtv Menu >>Utilities / Setup >>Edit Keys
+# Key Bindings can also be found in Myth Web
+
+# Record
+begin
+ prog = mythtv
+ button = Record
+ config = R
+end
+
+# Stop
begin
- prog = mythtv
- button = One
- config = 1
+ prog = mythtv
+ button = Stop
+ config = Esc
end
+# Pause
begin
- prog = mythtv
- button = Two
- config = 2
+ prog = mythtv
+ button = Pause
+ config = P
end
+# Rewind (while viewing)
begin
- prog = mythtv
- button = Three
- config = 3
+ prog = mythtv
+ button = Rewind
+ repeat = 0
+ delay = 1
+ config = <
end
+# Fast forward (while viewing)
begin
- prog = mythtv
- button = Four
- config = 4
+ prog = mythtv
+ button = Forward
+ repeat = 0
+ delay = 1
+ config = >
end
+# Play
begin
- prog = mythtv
- button = Five
- config = 5
+ prog = mythtv
+ button = Play
+ config = L
end
+# Skip backward (1 min default)
begin
- prog = mythtv
- button = Six
- config = 6
+ prog = mythtv
+ button = Replay
+ repeat = 4
+ delay = 4
+ config = PgUp
end
+# Skip forward (1 min default)
begin
- prog = mythtv
- button = Seven
- config = 7
+ prog = mythtv
+ button = Skip
+ repeat = 4
+ delay = 4
+ config = PgDown
end
+#<><><><><><><><><><><> Mythtv Control <><><><>
+
+# Escape/Exit/Back
begin
- prog = mythtv
- button = Eight
- config = 8
+ prog = mythtv
+ button = Back
+ config = Esc
end
+# Bring up OSD info
begin
- prog = mythtv
- button = Nine
- config = 9
+ prog = mythtv
+ button = More
+ config = I
end
begin
- prog = mythtv
- button = Zero
- config = 0
+ prog = mythtv
+ button = Left
+ repeat = 2
+ delay = 4
+ config = Left
end
begin
- prog = mythtv
- button = Back
- config = Esc
+ prog = mythtv
+ button = Right
+ repeat = 2
+ delay = 4
+ config = Right
end
begin
- prog = mythtv
- button = Guide
- config = M
+ prog = mythtv
+ button = Up
+ repeat = 2
+ delay = 4
+ config = Up
end
begin
- prog = mythtv
- button = More
- config = I
+ prog = mythtv
+ button = Down
+ repeat = 2
+ delay = 4
+ config = Down
end
+# OK/Select
begin
- prog = mythtv
- button = VolDown
- config = F10
+ prog = mythtv
+ button = OK
+ config = Return
end
+# The Start Button is really just a Menu key
begin
- prog = mythtv
- button = VolUp
- config = F11
+ prog = mythtv
+ button = Start
+ config = M
+end
+
+#<><><><><><><><><><><><><><><>
+
+# Volume-Up
+begin
+ prog = mythtv
+ button = VolumeUp
+ repeat = 1
+ config = ]
+end
+
+# Volume-Down
+begin
+ prog = mythtv
+ button = VolumeDown
+ repeat = 1
+ config = [
+end
+
+# Mute
+begin
+ prog = mythtv
+ button = Mute
+ config = |
+end
+
+# Channel Up
+begin
+ prog = mythtv
+ button = ChannelUp
+ repeat = 3
+# delay = 1
+ config = Up
+end
+
+# Channel Down
+begin
+ prog = mythtv
+ button = ChannelDown
+ config = Down
+ repeat = 3
+# delay = 1
+end
+
+# Numbers 0-9 <><><><><><><><><><><>
+
+begin
+ prog = mythtv
+ button = One
+# repeat = 2
+ config = 1
+end
+
+begin
+ prog = mythtv
+ button = Two
+# repeat = 2
+ config = 2
+end
+
+begin
+ prog = mythtv
+ button = Three
+# repeat = 2
+ config = 3
+end
+
+begin
+ prog = mythtv
+ button = Four
+# repeat = 2
+ config = 4
+end
+
+begin
+ prog = mythtv
+ button = Five
+# repeat = 2
+ config = 5
end
begin
- prog = mythtv
- button = Up
- config = Up
+ prog = mythtv
+ button = Six
+# repeat = 2
+ config = 6
end
begin
- prog = mythtv
- button = Down
- config = Down
+ prog = mythtv
+ button = Seven
+# repeat = 2
+ config = 7
end
begin
- prog = mythtv
- button = Left
- config = Left
+ prog = mythtv
+ button = Eight
+# repeat = 2
+ config = 8
+End
+
+begin
+ prog = mythtv
+ button = Nine
+# repeat = 2
+ config = 9
end
begin
- prog = mythtv
- button = Right
- config = Right
+ prog = mythtv
+ button = Zero
+# repeat = 2
+ config = 0
end
+#<><><><><><><><><><><><><><><><><><><><>
+# Seek to previous commercial cut point
+# or remove all cut points from the Editing Cutlist
begin
- prog = mythtv
- button = Play
- config = Return
+ prog = mythtv
+ button = Star
+ config = Q
end
+# Seek to next commercial cut point
+# or add commericial cut points to the Editing Cutlist
begin
- prog = mythtv
- button = OK
- config = Return
+ prog = mythtv
+ button = Hash
+ config = Z
end
+# Brings up the delete box
begin
- prog = mythtv
- button = Mute
- config = |
+ prog = mythtv
+ button = Clear
+ repeat = 0
+ config = D
end
+# Toggle Editing Cutlist on or off
begin
- prog = mythtv
- button = Rewind
- config = Left
+ prog = mythtv
+ button = Enter
+ repeat = 0
+ config = E
end
+#<><><><><><><><> Additional Remote Commands <><><><><><><><>
+# All buttons in this section must be configured using
+# MythTV's KeyBindings JumpPoints editor.
+# >>> Utilities/ Setup >>> Edit Keys >>> JumpPoints >>>
+
+# Listen to Myth Music
begin
- prog = mythtv
- button = Forward
- config = Right
+ prog = mythtv
+ button = Music
+ config = Ctrl+Alt+M
end
+# at this time connects to MythStreem
begin
prog = mythtv
- button = Record
- config = R
+ button = Radio
+ config = Ctrl+Alt+S
end
+# View Pictures
begin
- prog = mythtv
- button = Stop
- config = O
+ prog = mythtv
+ button = Pictures
+ config = Ctrl+Alt+P
end
+# Watch Videos
begin
- prog = mythtv
- button = Pause
- config = P
+ prog = mythtv
+ button = Videos
+ config = Ctrl+Alt+V
end
-# Use for backwards commercial skip
+# Watch Live TV with Live TV Guide open
begin
- prog = mythtv
- button = Replay
- config = Q
+ prog = mythtv
+ button = TV
+ config = Ctrl+Alt+K
end
-# Use for forward commercial skip
+# Watch Live TV
begin
- prog = mythtv
- button = Skip
- config = Z
+ prog = mythtv
+ button = LiveTV
+ config = Ctrl+Alt+L
end
+# Recorded TV Programs
+begin
+ prog = mythtv
+ button = RecordedTV
+ config = Ctrl+Alt+R
+end
-###################
-#
-# MPlayer
-#
-###################
+# Program Guide
+begin
+ prog = mythtv
+ button = Guide
+ config = Ctrl+Alt+G
+end
+
+# Play DVD
+# There must be a disk in the DVD drive or it dos nothing
begin
- prog = mplayer
- button = Stop
- config = quit
+ prog = mythtv
+ button = DVDMenu
+ config = Ctrl+Alt+D
end
+# unused key
+#begin
+# prog = mythtv
+# button = Messenger
+# config = Ctrl+Alt+A
+#end
+
+# <><><><><><><><><><><><><> Teletext Buttons <><><><><><><><><><><>
+
+# Teletext = Show interactive MHEG screens
begin
- prog = mplayer
- button = Play
- config = seek +1
+ prog = mythtv
+ button = Teletext
+ config = F7
end
-
+
+# Red = Red button for interactive screens.
begin
- prog = mplayer
- button = More
- config = osd
+ prog = mythtv
+ button = Red
+ config = F2
end
-
+
+# Green = Green button for interactive screens.
begin
- prog = mplayer
- button = Replay
- config = seek -10
- repeat = 1
+ prog = mythtv
+ button = Green
+ config = F3
end
-
+
+# Yellow = Yellow button for interactive screens.
begin
- prog = mplayer
- button = Skip
- config = seek +10
- repeat = 1
+ prog = mythtv
+ button = Yellow
+ config = F4
end
+# Blue = Blue button for interactive screens.
begin
- prog = mplayer
- button = Rewind
- config = seek -30
- repeat = 1
+ prog = mythtv
+ button = Blue
+ config = F5
end
+
+######################## MPlayer Section #####################################
+# "mplayer -input keylist" Prints all keys that can be bound to commands.
+# "mplayer -input cmdlist" Prints all commands that can be bound to keys
+# "man mplayer" Prints documentation for MPlayer
+
+# Show OSD
begin
- prog = mplayer
- button = Forward
- config = seek +30
- repeat = 1
+ prog = mplayer
+ button = OK
+ config = osd
end
+# Pause playback
begin
- prog = mplayer
- button = Pause
- config = pause
+ prog = mplayer
+ button = Pause
+ config = pause
end
-
+
+# If paused, resume playing
begin
- prog = mplayer
- button = VolUp
- config = volume +1
- repeat = 1
+ prog = mplayer
+ button = Play
+ config = pause
end
+# Stop playback and exit
begin
- prog = mplayer
- button = VolDown
- config = volume -1
- repeat = 1
+ prog = mplayer
+ button = Stop
+ config = quit
end
+# Volume-Up
begin
- prog = mplayer
- button = Mute
- config = mute
+ prog = mplayer
+ button = VolumeUp
+ repeat = 2
+ config = volume +1
end
-###################
-#
-# Xine
+# Volume-Down
+begin
+ prog = mplayer
+ button = VolumeDown
+ repeat = 2
+ config = volume -1
+end
+
+# Mute
+begin
+ prog = mplayer
+ button = Mute
+ config = mute
+end
+
+# Seek back 60 seconds
+begin
+ prog = mplayer
+ button = Left
+ repeat = 2
+ config = seek -60
+end
+
+# Seek forward 60 seconds
+begin
+ prog = mplayer
+ button = Right
+ repeat = 2
+ config = seek +60
+end
+
+# Seek back 10 seconds
+begin
+ prog = mplayer
+ button = Rewind
+ repeat = 2
+ config = seek -10
+end
+
+# Seek forward 30 seconds
+begin
+ prog = mplayer
+ button = Forward
+ repeat = 2
+ config = seek +30
+end
+
+# Quit
+begin
+ prog = mplayer
+ button = Back
+ config = quit
+end
+
+# Seek forward 10 minutes
+begin
+ prog = mplayer
+ button = Skip
+ repeat = 2
+ config = seek +600
+end
+
+# Seek backward 10 minutes
+begin
+ prog = mplayer
+ button = Replay
+ repeat = 2
+ config = seek -600
+end
+
+# increase brightness
+begin
+ prog = mplayer
+ button = ChannelUp
+ repeat = 2
+ config = brightness +1
+end
+
+# decrease brightness
+begin
+ prog = mplayer
+ button = ChannelDown
+ repeat = 2
+ config = brightness -1
+end
+
+# Toggle full-screen
+#begin
+# prog = mplayer
+# button = #???????????????????????????
+# repeat = 2
+# config = vo_fullscreen
+#end
+
+
+########################## XINE Section ######################################
#
-###################
-# Xine lirc setup
+# For a compleate list of Xine's Lirc Keybindings use comand
+# xine --keymap=lirc>.lircrc.xine.keybindings
+# This creates a file in current directory called ".lircrc.xine.keybindings"
+# Note: Xine has diferent sets of keybindings for lirc and keyboard
+
+## 01/14/2008
+# xine key bindings.
+# Automatically generated by xine-ui version 0.99.6cvs.
+
+#<><><><><><><><><><> Xine Video Movement <><><><>
+
+# start playback
+begin
+ prog = xine
+ button = Play
+ config = Play
+end
+
+# playback pause toggle
+begin
+ prog = xine
+ button = Pause
+ config = Pause
+end
+
+# stop playback
+begin
+ prog = xine
+ button = Stop
+ config = Stop
+end
+
+# take a snapshot
+#begin
+# prog = xine
+# button = Record
+# repeat = 2
+# config = Snapshot
+#end
+
+begin
+ prog = xine
+ button = Forward
+ repeat = 2
+# delay = 1
+ config = SeekRelative+7
+end
+
begin
-prog = xine
-button = Play
-repeat = 3
-config = Play
+ prog = xine
+ button = Rewind
+ repeat = 2
+# delay = 1
+ config = SeekRelative-7
end
+# set position to -60 seconds in current stream
begin
-prog = xine
-button = Stop
-repeat = 3
-config = Stop
+ prog = xine
+ button = Replay
+ repeat = 2
+ delay = 1
+ config = SeekRelative-60
end
+# set position to +60 seconds in current stream
begin
-prog = xine
-button = Back
-repeat = 3
-config = Quit
+ prog = xine
+ button = Skip
+ repeat = 2
+ delay = 1
+ config = SeekRelative+60
end
+#<><><><><><><><><><><><>Xine Control<><><><><><><><><>
+# quit the program
begin
-prog = xine
-button = Pause
-repeat = 3
-config = Pause
+ prog = xine
+ button = Back
+ config = Quit
end
+#display stream information using OSD
begin
-prog = xine
-button = Up
-repeat = 3
-config = EventUp
+ prog = xine
+ button = More
+ config = OSDStreamInfos
end
+# menu navigate up
begin
-prog = xine
-button = Down
-repeat = 3
-config = EventDown
+ prog = xine
+ button = Up
+ repeat = 2
+ delay = 2
+ config = EventUp
end
+# menu navigate down
begin
-prog = xine
-button = Left
-repeat = 3
-config = EventLeft
+ prog = xine
+ button = Down
+ repeat = 2
+ delay = 2
+ config = EventDown
end
+# menu navigate left
begin
-prog = xine
-button = Right
-repeat = 3
-config = EventRight
+ prog = xine
+ button = Left
+ repeat = 2
+ delay = 2
+ config = EventLeft
end
+# menu navigate right
begin
-prog = xine
-button = OK
-repeat = 3
-config = EventSelect
+ prog = xine
+ button = Right
+ repeat = 2
+ delay = 2
+ config = EventRight
end
+# menu select
begin
-prog = xine
-button = Home
-repeat = 3
-config = Menu
+ prog = xine
+ button = OK
+ config = EventSelect
end
+# jump to Root Menu
+begin
+ prog = xine
+ button = Start
+ config = Menu
+end
+
+#<><><><><><><><><><><><><><><><><><><> Xine Volume / Channel <><><><><><><><>
+
+# increment audio volume
begin
-prog = xine
-button = Forward
-repeat = 3
-config = SpeedFaster
+ prog = xine
+ button = VolumeUp
+ repeat = 1
+ config = Volume+
end
+# decrement audio volume
begin
-prog = xine
-button = Rewind
-repeat = 3
-config = SpeedSlower
+ prog = xine
+ button = VolumeDown
+ repeat = 1
+ config = Volume-
end
+# audio muting toggle
begin
-prog = xine
-button = VolUp
-repeat = 3
-config = Volume+
+ prog = xine
+ button = Mute
+ config = Mute
end
+# increase brightness by 10
begin
-prog = xine
-button = VolDown
-repeat = 3
-config = Volume-
+ prog = xine
+ button = ChannelUp
+ config = BrightnessControl+
end
+# decrease brightness by 10
begin
-prog = xine
-button = Mute
-repeat = 3
-config = Mute
+ prog = xine
+ button = ChannelDown
+ config = BrightnessControl-
end
+#<><><><><><><><><><><><><><><><><> Xine Menu <><><><>
+
+# unused key
+#begin
+# prog = xine
+# button = RecordedTV
+# config = ????????
+#end
+
+# visibility toggle of stream info window
begin
-prog = xine
-button = ChanUp
-repeat = 3
-config = EventNext
+ prog = xine
+ button = Guide
+ config = SetupShow
end
+# unused key
+#begin
+# prog = xine
+# button = LiveTV
+# config = ????????
+#end
+
+# jump to Title Menu
begin
-prog = xine
-button = ChanDown
-repeat = 3
-config = EventPrior
+ prog = xine
+ button = DVDMenu
+ config = RootMenu
end
+#<><><><><><><><><><><><><><><><><> Xine Stream Position <><><><>
+
+# set position in current stream
+
begin
-prog = xine
-button = More
-repeat = 3
-config = OSDStreamInfos
-end
+ prog = xine
+ button = Zero
+ config = SetPosition0%
+end
+
+begin
+ prog = xine
+ button = One
+ config = SetPosition10%
+end
+
+begin
+ prog = xine
+ button = Two
+ config = SetPosition20%
+end
+
+begin
+ prog = xine
+ button = Three
+ config = SetPosition30%
+end
+
+begin
+ prog = xine
+ button = Four
+ config = SetPosition40%
+end
+
+begin
+ prog = xine
+ button = Five
+ config = SetPosition50%
+end
+
+begin
+ prog = xine
+ button = Six
+ config = SetPosition60%
+end
+
+begin
+ prog = xine
+ button = Seven
+ config = SetPosition70%
+end
+
+begin
+ prog = xine
+ button = Eight
+ config = SetPosition80%
+end
+
+begin
+ prog = xine
+ button = Nine
+ config = SetPosition90%
+end
+
+#<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
+
+# decrement playback speed (slow motion slowdown)
+begin
+ prog = xine
+ button = Star
+ config = SpeedSlower
+end
+
+# increment playback speed (slow motion speedup)
+begin
+ prog = xine
+ button = Hash
+ config = SpeedFaster
+end
+
+# reset playback speed
+begin
+ prog = xine
+ button = Clear
+ config = SpeedReset
+end
+
+# set position to -30 seconds in current stream config = SeekRelative-30
+# set position to +30 seconds in current stream config = SeekRelative+30
+# eject the current medium config = Eject
+# zoom in config = ZoomIn
+# zoom out config = ZoomOut
+# fullscreen toggle config = ToggleFullscreen
+##
+# End of xine .
+##
diff --git a/abs/core-testing/system-templates/templates/remotes/receiver_usb.id b/abs/core-testing/system-templates/templates/remotes/receiver_usb.id
index 71b37d1..f76442a 100644
--- a/abs/core-testing/system-templates/templates/remotes/receiver_usb.id
+++ b/abs/core-testing/system-templates/templates/remotes/receiver_usb.id
@@ -4,6 +4,7 @@
0bc7:0004|ATI_Remote_Wonder| " ATI Remote Wonder"
0e9c:0000|streamzap| "Streamzap Remote"
0fe9:9010|dvico| "DVICO Remote:"
+0fe9:db98|Dvico-Dual-Digital4-rev2| "Dvico Dual Digital4 rev2 0fe9/db98"
6253:0100|Twinhan_USB| "the VisionPlus is a Twinhan clone "
1509:9242|mceusb| "FIC eHome Infrared Transceiver 1509/9242"
1934:0602|mceusb| "Fintek eHome Infrared Transceiver 1934/0602"
@@ -31,3 +32,4 @@
1784:0007|mceusb| "Topseed HP eHome Infrared Transceiver 1784/0007"
1784:0008|mceusb| "Topseed eHome Infrared Transceiver 1784/0008"
045e:006d|mceusb-old| "USB Microsoft IR Transceiver Driver 045e/006d"
+
diff --git a/abs/core-testing/system-templates/templates/remotes/snapstream_mini/lircd-snapstreammini.conf b/abs/core-testing/system-templates/templates/remotes/snapstream_mini/lircd-snapstreammini.conf
new file mode 100755
index 0000000..edc97f5
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/snapstream_mini/lircd-snapstreammini.conf
@@ -0,0 +1,70 @@
+#
+# this config file was automatically generated
+# using WinLIRC 0.6.5 (LIRC 0.6.1pre3) on Sat Sep 09 22:22:16 2006
+#
+# contributed by David Salisbury
+#
+# brand: SnapStream
+# model: Firefly-Mini
+# supported devices:
+#
+
+begin remote
+
+ name SnapStream_Firefly-Mini
+ bits 16
+ flags SPACE_ENC
+ eps 25
+ aeps 100
+
+ header 9052 4475
+ one 627 1623
+ zero 627 496
+ ptrail 627
+ repeat 9081 2206
+ pre_data_bits 16
+ pre_data 0xFF
+ gap 39962
+ toggle_bit 0
+
+
+ begin codes
+ Close 0xC23D
+ Mute 0xE21D
+ 1 0xD22D
+ 2 0xF20D
+ 3 0xCA35
+ 4 0xEA15
+ 5 0xDA25
+ 6 0xFA05
+ 7 0x827D
+ 8 0xA25D
+ 9 0x926D
+ 0 0x8A75
+ VolumeUp 0xB24D
+ VolumeDown 0x9A65
+ ChannelUp 0xAA55
+ ChannelDown 0x02FD
+ Up 0xBA45
+ Down 0x0AF5
+ Left 0x22DD
+ Right 0x32CD
+ OK 0x12ED
+ Last 0x2AD5
+ Exit 0x1AE5
+ Option 0x3AC5
+ Firefly 0xC03F
+ Menu 0xE01F
+ Record 0xD02F
+ Guide 0xF00F
+ Stop 0xC837
+ Previous 0xE817
+ Play 0xD827
+ Next 0xF807
+ Rewind 0x40BF
+ Pause 0x609F
+ FastForward 0x50AF
+ end codes
+
+end remote
+
diff --git a/abs/core-testing/system-templates/templates/remotes/snapstream_mini/lircrc-snapstreammini.txt b/abs/core-testing/system-templates/templates/remotes/snapstream_mini/lircrc-snapstreammini.txt
new file mode 100755
index 0000000..4c557a2
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/snapstream_mini/lircrc-snapstreammini.txt
@@ -0,0 +1,474 @@
+# Channel Up
+begin
+prog = mythtv
+button = ChannelUp
+config = Up
+end
+
+# Channel Down
+begin
+prog = mythtv
+button = ChannelDown
+config = Down
+end
+
+# General Left
+begin
+prog = mythtv
+button = Left
+config = Left
+end
+
+# General Right
+begin
+prog = mythtv
+button = Right
+config = Right
+end
+
+ # LiveTV browse up channel
+begin
+prog = mythtv
+button = Up
+config = Up
+end
+
+# LiveTV browse down channel
+begin
+prog = mythtv
+button = Down
+config = Down
+end
+
+# Volume Up
+begin
+prog = mythtv
+button = VolumeUp
+config = F11
+end
+
+# Volume Down
+begin
+prog = mythtv
+button = VolumeDown
+config = F10
+end
+
+ # OK/Select
+begin
+prog = mythtv
+button = OK
+config = Space
+end
+
+# Play
+begin
+prog = mythtv
+button = Play
+config = Return
+end
+
+# Stop
+begin
+prog = mythtv
+button = Stop
+config = Esc
+end
+
+# Escape/Exit/Back
+begin
+prog = mythtv
+button = Exit
+config = Esc
+end
+
+# Power Off/Exit
+begin
+prog = irexec
+button = Firefly
+config = /usr/bin/mythpowerbutton.sh
+end
+
+# Pause
+begin
+prog = mythtv
+button = Pause
+config = P
+end
+
+# Mute
+begin
+prog = mythtv
+button = Mute
+config = |
+end
+
+# Fast forward (10 sec default)
+begin
+prog = mythtv
+button = FastForward
+config = Right
+end
+
+# Rewind (10 sec default)
+begin
+prog = mythtv
+button = Rewind
+config = Left
+end
+
+# Skip forward (10 min default)
+begin
+prog = mythtv
+button = Next
+config = PgDown
+end
+
+# Skip backward (10 min default)
+begin
+prog = mythtv
+button = Previous
+config = PgUp
+end
+
+# Record
+begin
+prog = mythtv
+button = Record
+config = R
+end
+
+# Delete
+begin
+prog = mythtv
+button =
+config = D
+end
+
+# OSD browse
+begin
+prog = mythtv
+button =
+config = O
+end
+
+# Display EPG while in live TV,
+# View selected show while in EPG
+begin
+prog = mythtv
+button = Guide
+config = M
+end
+
+# Bring up OSD info
+begin
+prog = mythtv
+button =
+config = I
+end
+
+# Change display aspect ratio
+begin
+prog = mythtv
+button = Option
+config = W
+end
+
+# Seek to previous commercial cut point
+begin
+prog = mythtv
+button =
+config = Q
+end
+
+# Seek to next commercial cut point
+begin
+prog = mythtv
+button =
+config = Z
+end
+
+# Numbers 0-9
+
+begin
+prog = mythtv
+button = 0
+config = 0
+end
+
+begin
+prog = mythtv
+button = 1
+config = 1
+end
+
+begin
+prog = mythtv
+button = 2
+config = 2
+end
+
+begin
+prog = mythtv
+button = 3
+config = 3
+end
+
+begin
+prog = mythtv
+button = 4
+config = 4
+end
+
+begin
+prog = mythtv
+button = 5
+config = 5
+end
+
+begin
+prog = mythtv
+button = 6
+config = 6
+end
+
+begin
+prog = mythtv
+button = 7
+config = 7
+end
+
+begin
+prog = mythtv
+button = 8
+config = 8
+end
+
+begin
+prog = mythtv
+button = 9
+config = 9
+end
+
+# Previous channel
+begin
+prog = mythtv
+button = Last
+config = H
+end
+
+# Closed Captioning
+begin
+prog = mythtv
+button = Close
+config = T
+end
+
+# Picture in Picture
+begin
+prog = mythtv
+button =
+config = V
+end
+
+# Change channels on both cards
+begin
+prog = mythtv
+button =
+config = N
+end
+
+# Clear cutpoints in cutlist
+begin
+prog = mythtv
+button =
+config = Q
+end
+
+
+
+
+### MPlayer lirc setup
+
+# Show OSD
+begin
+prog = mplayer
+button = Guide
+config = osd
+end
+
+# Pause playback
+begin
+prog = mplayer
+button = Pause
+config = pause
+end
+
+# Mute
+begin
+prog = mplayer
+button = Mute
+config = mute
+end
+
+# Seek back 10 seconds
+begin
+prog = mplayer
+button = Rewind
+config = seek -10
+end
+
+# Seek forward 30 seconds
+begin
+prog = mplayer
+button = FastForward
+config = seek +30
+end
+
+# Quit
+begin
+prog = mplayer
+button = Stop
+config = quit
+end
+
+# Seek forward 10 minutes
+begin
+prog = mplayer
+button = Next
+config = seek +600
+end
+
+# Seek backward 10 minutes
+begin
+prog = mplayer
+button = Previous
+config = seek -600
+end
+
+# Toggle full-screen
+begin
+prog = mplayer
+button =
+config = vo_fullscreen
+end
+
+
+
+### Xine lirc setup
+
+begin
+prog = xine
+button = Play
+config = Play
+end
+
+begin
+prog = xine
+button = Stop
+config = Stop
+end
+
+begin
+prog = xine
+button = Exit
+config = Quit
+end
+
+begin
+prog = xine
+button = Pause
+config = Pause
+end
+
+begin
+prog = xine
+button = Up
+config = EventUp
+end
+
+begin
+prog = xine
+button = Down
+config = EventDown
+end
+
+begin
+prog = xine
+button = Left
+config = EventLeft
+end
+
+begin
+prog = xine
+button = Right
+config = EventRight
+end
+
+begin
+prog = xine
+button = OK
+config = EventSelect
+end
+
+begin
+prog = xine
+button = Guide
+config = Menu
+end
+
+begin
+prog = xine
+button = FastForward
+#config = SpeedFaster
+config = SeekRelative+60
+end
+
+begin
+prog = xine
+button = Rewind
+#config = SpeedSlower
+config = SeekRelative-60
+end
+
+begin
+prog = xine
+button = VolumeUp
+config = Volume+
+end
+
+begin
+prog = xine
+button = VolumeDown
+config = Volume-
+end
+
+begin
+prog = xine
+button = Mute
+config = Mute
+end
+
+begin
+prog = xine
+button = Stop
+config = RootMenu
+end
+
+begin
+prog = xine
+button = Next
+config = EventNext
+end
+
+begin
+prog = xine
+button = Previous
+config = EventPrior
+end
+
+begin
+prog = xine
+button = Firefly
+config = OSDStreamInfos
+end \ No newline at end of file
diff --git a/abs/core-testing/system-templates/templates/remotes/snapstream_mini/preview.jpg b/abs/core-testing/system-templates/templates/remotes/snapstream_mini/preview.jpg
new file mode 100644
index 0000000..aa6d9d2
--- /dev/null
+++ b/abs/core-testing/system-templates/templates/remotes/snapstream_mini/preview.jpg
Binary files differ
diff --git a/abs/core-testing/transcode/PKGBUILD b/abs/core-testing/transcode/PKGBUILD
index d1d0fe5..4535bce 100644
--- a/abs/core-testing/transcode/PKGBUILD
+++ b/abs/core-testing/transcode/PKGBUILD
@@ -5,7 +5,7 @@
pkgname=transcode
_sripver=0.3-4
pkgver=1.1.0
-pkgrel=5
+pkgrel=6
pkgdesc="Transcode is a video/DVD ripper and encoder for the terminal/console."
arch=(i686 x86_64)
license=('GPL2')
diff --git a/abs/core-testing/tweaker/PKGBUILD b/abs/core-testing/tweaker/PKGBUILD
index ebd3ed4..43ca495 100644
--- a/abs/core-testing/tweaker/PKGBUILD
+++ b/abs/core-testing/tweaker/PKGBUILD
@@ -1,7 +1,7 @@
pkgname=tweaker
pkgver=1
-pkgrel=38
-pkgdesc=""
+pkgrel=48
+pkgdesc="applies tweaks to the baseline configuration and attempts to optimize settings for the hardware it finds"
arch=('i686' 'x86_64')
depends=('bash' 'perl' 'perl-dbi' 'perl-exception-class' 'perl-log-log4perl' 'perl-log-dispatch' 'perl-getopt-lucid' 'perl-list-member' 'perl-class-data-inheritable' 'perl-devel-stacktrace' 'perl-xml-twig')
@@ -16,19 +16,18 @@ install=tweaker.install
build() {
TWEAKER_ROOT=usr/LH/tweaker
mkdir -p $startdir/pkg/$TWEAKER_ROOT
- mkdir -p $startdir/pkg/$TWEAKER_ROOT/{bin,fs,tcf}
+ mkdir -p $startdir/pkg/$TWEAKER_ROOT/{bin,fs,tcf}
mkdir -p $startdir/pkg/etc/profile.d
mkdir -p $startdir/pkg/usr/lib/perl5/vendor_perl/Tweaker/
cd $startdir
# executables
install -m0777 -D bin/* $startdir/pkg/$TWEAKER_ROOT/bin
-
# parallel root directory structure used for seeding configuration files
-# install -m0777 -D fs/ $startdir/pkg/$TWEAKER_ROOT/fs
- cp -rp fs $startdir/pkg/$TWEAKER_ROOT/
- chmod -R 0777 $startdir/pkg/$TWEAKER_ROOT/
+ # Ensure shell variables are configured at start; ensure $TWEAKER_ROOT/bin is in $PATH
+ cp -rp fs $startdir/pkg/$TWEAKER_ROOT/
+ chmod -R 0777 $startdir/pkg/$TWEAKER_ROOT/
# Tweaker configuration files
install -m0555 -D tcf/* $startdir/pkg/$TWEAKER_ROOT/tcf
@@ -37,7 +36,6 @@ build() {
#install -m0755 log4perl.conf $startdir/pkg/etc/log4perl.conf
install -m0755 log4perl.conf $startdir/pkg/$TWEAKER_ROOT
- # Ensure shell variables are configured at start; ensure $TWEAKER_ROOT/bin is in $PATH
install -m0755 tweaker.sh $startdir/pkg/etc/profile.d/tweaker.sh
# Copy our tweaker Perl modules for general use
diff --git a/abs/core-testing/tweaker/bin/twk_audio.pl b/abs/core-testing/tweaker/bin/twk_audio.pl
index eec7992..47a2415 100755
--- a/abs/core-testing/tweaker/bin/twk_audio.pl
+++ b/abs/core-testing/tweaker/bin/twk_audio.pl
@@ -110,9 +110,9 @@ sub implement_option {
sub edit_mplayer_conf {
my($option) = @_;
# delete any old entries that Tweaker made, relevant to this particular edit
- my $delete_old_tweaker_edits = "[ -e $mplayer_conf ] && sed -i '/^.*a[o,c].*=.*#TWEAKER/d' $mplayer_conf";
+ my $delete_old_tweaker_edits = "[ -e $mplayer_conf ] && sed -i '/^.*a[o,c,f].*=.*#TWEAKER/d' $mplayer_conf && sed -i '/^speed.*=.*#TWEAKER/d' $mplayer_conf";
# comment out old entries that some other process may have made
- my $comment_out_external_edits = "[ -e $mplayer_conf ] && sed -i 's/^\\(a[o,c].*=.*\\)/#\\1/g' $mplayer_conf";
+ my $comment_out_external_edits = "[ -e $mplayer_conf ] && sed -i 's/^\\(a[o,c,f].*=.*\\)/#\\1/g' $mplayer_conf && sed -i 's/^\\(speed.*=.*\\)/#\\1/g' $mplayer_conf";
my $command1;
my $command2="";
($card, $device) = poll_for_digital_output_device;
@@ -160,6 +160,14 @@ sub implement_option {
}
}
}
+ # for all options
+ $command2 = "echo -e 'af=scaletempo=stride=30:overlap=.50:search=10 #TWEAKER\nspeed=1.0 #TWEAKER' >> $mplayer_conf";
+ if (my $error = execute_shell_command($command2)) {
+ $logger->error("ERROR: $error");
+ $logger->error("ERROR: Unable to implement option $option.");
+ exit(-1);
+ }
+
$logger->info("Edited $mplayer_conf for $option audio.");
}
diff --git a/abs/core-testing/tweaker/bin/twk_cpu.pl b/abs/core-testing/tweaker/bin/twk_cpu.pl
index 118bac1..8bddbe3 100755
--- a/abs/core-testing/tweaker/bin/twk_cpu.pl
+++ b/abs/core-testing/tweaker/bin/twk_cpu.pl
@@ -57,6 +57,36 @@ sub get_HDD_size {
#
#}
+# Edit mplayer.conf to tell mplayer to drop video frames when necessary. This should do no harm
+# on systems that don't need the option, and it should make video watchable on those that do.
+sub edit_mplayer_conf {
+ use vars qw($mplayer_conf);
+ $mplayer_conf = "/etc/mplayer/mplayer.conf";
+
+ # delete any old entries that Tweaker made, relevant to this particular edit
+ my $delete_old_tweaker_edits = "[ -e $mplayer_conf ] && sed -i '/^.*hardframedrop.*=.*#TWEAKER/d' $mplayer_conf";
+ # comment out old entries that some other process may have made
+ my $comment_out_external_edits = "[ -e $mplayer_conf ] && sed -i 's/^\\(hardframedrop.*=.*\\)/#\\1/g' $mplayer_conf";
+ my $command1;
+ my $command2="";
+ my $logger = get_logger('tweaker.script');
+
+ if (my $error = execute_shell_command("$delete_old_tweaker_edits && $comment_out_external_edits")) {
+ $logger->error("ERROR: $error");
+ $logger->error("ERROR: Unable to implement option $option.");
+ exit(-1);
+ }
+
+ $command2 = "echo -e 'hardframedrop=true #TWEAKER' >> $mplayer_conf";
+ if (my $error = execute_shell_command($command2)) {
+ $logger->error("ERROR: $error");
+ $logger->error("ERROR: Unable to implement option $option.");
+ exit(-1);
+ }
+
+ $logger->info("Edited $mplayer_conf to drop video frames when CPU is overloaded.");
+}
+
# Try to implement the given option.
sub implement_option {
my($option) = @_;
@@ -106,6 +136,7 @@ sub implement_option {
change_or_make_setting('OSDTheme', 'blootube-osd') || exit -1;
change_or_make_setting('PlayBoxShading', '0') || exit -1;
change_or_make_setting('PlaybackExitPrompt', '2') || exit -1;
+ edit_mplayer_conf();
} else {
exit -1;
}
diff --git a/abs/core-testing/tweaker/bin/twk_general.pl b/abs/core-testing/tweaker/bin/twk_general.pl
index 387920c..f181310 100755
--- a/abs/core-testing/tweaker/bin/twk_general.pl
+++ b/abs/core-testing/tweaker/bin/twk_general.pl
@@ -87,10 +87,8 @@ sub implement_option {
#
# better awareness of different video extensions
#
- change_or_make_entry("videotypes", [["playcommand", "mplayer-resumer.pl -fs -zoom -vc theora,fftheora, -vo xv %s"]], [["extension", "ogg"]]);
- change_or_make_entry("videotypes", [["playcommand", "mplayer-resumer.pl -fs -zoom -vc theora,fftheora, -vo xv %s"]], [["extension", "theora"]]);
- foreach my $video_ext ("mp2", "tp", "ts", "m2p", "nuv", "mkv") {
- change_or_make_entry("videotypes", [["playcommand", "Internal"], ["f_ignore", "0"], ["use_default", "1"]], [["extension", $video_ext]]);
+ foreach my $video_ext ("mp2", "tp", "ts", "m2p", "nuv", "mkv", "ogg", "theora") {
+ change_or_make_entry("videotypes", [["playcommand", "Default"], ["f_ignore", "0"], ["use_default", "1"]], [["extension", $video_ext]]);
}
foreach my $non_video_ext ("jpg", "par2") {
change_or_make_entry("videotypes", [["f_ignore", "1"]], [["extension", $non_video_ext]]);
@@ -407,15 +405,18 @@ sub implement_option {
change_or_make_setting('StartupSecsBeforeRecording', '120');
change_or_make_setting('TruncateDeletesSlowly', '1');
change_or_make_setting('UseOutputPictureControls', '1');
- change_or_make_setting('UserJob4', 'myth2mp3 -cut \"%DIR%\" \"%FILE%\"');
+ change_or_make_setting('UserJob2', 'myth2x264 \"%DIR%/%FILE%\" \"%TITLE% - %SUBTITLE%\" \"%CHANID%\" \"%STARTTIME%\" \"%JOBID%\"');
+ change_or_make_setting('UserJob3', 'myth2xvid \"%DIR%/%FILE%\" \"%TITLE% - %SUBTITLE%\" \"%CHANID%\" \"%STARTTIME%\" \"%JOBID%\"');
+ change_or_make_setting('UserJob4', 'myth2mp3 \"%DIR%/%FILE%\" \"%TITLE% - %SUBTITLE%\" \"%CHANID%\" \"%STARTTIME%\"');
change_or_make_setting('UserJobDesc1', 'User Job #1');
- change_or_make_setting('UserJobDesc2', 'User Job #2');
- change_or_make_setting('UserJobDesc3', 'User Job #3');
+ change_or_make_setting('UserJobDesc2', 'Transcode for iPod');
+ change_or_make_setting('UserJobDesc3', 'Transcode to xvid');
change_or_make_setting('UserJobDesc4', 'Extract audio');
- change_or_make_setting('VCDPlayerCommand', 'mplayer vcd:\/\/ -cdrom-device %d -fs -zoom -vo xv -vf pp=lb');
+ change_or_make_setting('UseOutputPictureControls','0'); # If this is set to '1' it can swap blue for red (and vice versa) on some nVidia GPUs
+ change_or_make_setting('VCDPlayerCommand', 'mplayer-wrapper.pl vcd:\/\/ -cdrom-device %d -fs -zoom');
change_or_make_setting('VideoArtworkDir', "$SQL_DirVideo/.covers");
change_or_make_setting('VideoBrowserNoDB', '1');
- change_or_make_setting('VideoDefaultPlayer', 'mplayer-resumer.pl -fs -zoom -vo xv %s');
+ change_or_make_setting('VideoDefaultPlayer', 'mplayer-wrapper.pl -fs -zoom %s');
change_or_make_setting('VideoGalleryNoDB', '1');
change_or_make_setting('VideoStartupDir', $SQL_DirVideo);
change_or_make_setting('VideoTreeNoDB', '1');
diff --git a/abs/core-testing/tweaker/bin/twk_tuners.pl b/abs/core-testing/tweaker/bin/twk_tuners.pl
index f928ea7..22c6a23 100755
--- a/abs/core-testing/tweaker/bin/twk_tuners.pl
+++ b/abs/core-testing/tweaker/bin/twk_tuners.pl
@@ -105,9 +105,11 @@ my @capture_card_patterns = (
# [ "bt878-based frame grabbers", [".*0400.*109e.*036e.*", ".*0480.*109e.*0878.*"],
# ["V4L", ["NTSC"]]],
- );
+ # USB patterns
-# USB patterns
+ [ "Dvico Dual Digital 4 rev2", [".* 0fe9:db98 .*"],
+ ["DVB", ["DVB-T"]]],
+ );
# "Hauppauge Nova-T 500 Dual DVB-T"
@@ -148,8 +150,8 @@ sub implement_option {
if (connect_to_db("DBI:mysql:$dbconnectionstring")) {
my $logger = get_logger('tweaker.script');
- # Get a list of all PCI devices for later processing
- my @lspci = split('\n', execute_shell_command("lspci -mn"));
+ # Get a list of all PCI and USB devices for later processing
+ my @device_list = split('\n', execute_shell_command("lspci -mn ; lsusb"));
# Iterate through the list of known tuner cards, then the list of known network tuners.
# For each known tuner, configure a safe default for it if it's found. Set up
@@ -338,22 +340,22 @@ sub implement_option {
# Configure each supported tuner/capture device detected on the system.
- # built-in, PCI, or PCI Express
- $logger->debug("Processing local devices...");
- for my $pci_device (@lspci) {
- $logger->debug("DEVICE: $pci_device");
+ # built-in, PCI, PCI Express, or USB
+ $logger->debug("Processing built-in, PCI, PCI Express or USB devices...");
+ for my $a_device (@device_list) {
+ $logger->debug("DEVICE: $a_device");
my $match=0;
- for my $pci_device_data (@capture_card_patterns) {
- $logger->debug("\tIs there a @$pci_device_data[0] at this location?");
+ for my $device_data (@capture_card_patterns) {
+ $logger->debug("\tIs there a @$device_data[0] at this location?");
- for my $patterns (@$pci_device_data[1]) {
+ for my $patterns (@$device_data[1]) {
for my $pattern (@$patterns) {
if ($match) {
next;
} else {
$logger->debug("\t\tPATTERN: $pattern");
- $match += ($pci_device =~ m/$pattern/i);
+ $match += ($a_device =~ m/$pattern/i);
if ($match) {
$global_device_count++; # 1-indexed
@@ -364,10 +366,10 @@ sub implement_option {
# The sub_types are used to populate the videosource table.
# The device type and "best" sub_type are used to set the 'sourceid' field of the cardinput table.
- for my $typeblock (@$pci_device_data[2]) {
- my $pci_device_type = @$typeblock[0];
- $logger->debug("\t\tDEVICE TYPE: $pci_device_type"); # e.g. "DVB", "MPEG", etc.
- $cardtypes{$pci_device_type}++;
+ for my $typeblock (@$device_data[2]) {
+ my $device_type = @$typeblock[0];
+ $logger->debug("\t\tDEVICE TYPE: $device_type"); # e.g. "DVB", "MPEG", etc.
+ $cardtypes{$device_type}++;
my $sourceid = -1;
for my $sub_types (@$typeblock[1]) {
for my $sub_type (@$sub_types) {
@@ -387,7 +389,7 @@ sub implement_option {
#
# POPULATE capturecard table
#
- my $defaultinput = make_capturecard_SQL($global_device_count, $cardtypes{$pci_device_type}-1, $pci_device_type, -1);
+ my $defaultinput = make_capturecard_SQL($global_device_count, $cardtypes{$device_type}-1, $device_type, -1);
#
# POPULATE cardinput table
@@ -457,10 +459,6 @@ sub implement_option {
close(SHELL2);
} # else: don't scan the internet!
- # USB devices
- $logger->debug("Processing USB devices...");
- $logger->debug("\t(no USB devices supported yet)");
-
# Filesystem Tweaks for tuners
# This only works with the Nova-T-500 card, but it doesn't hurt any other cards
execute_shell_command("echo \"#switch on onboard amplifier on Nova-T-500 card\" > /etc/modprobe.d/dvb-usb-dib0700");
diff --git a/abs/core-testing/tweaker/fs/home/mythtv/.config/smplayer/smplayer.ini b/abs/core-testing/tweaker/fs/home/mythtv/.config/smplayer/smplayer.ini
index 33439a7..9660607 100644
--- a/abs/core-testing/tweaker/fs/home/mythtv/.config/smplayer/smplayer.ini
+++ b/abs/core-testing/tweaker/fs/home/mythtv/.config/smplayer/smplayer.ini
@@ -330,7 +330,7 @@ reset_zoom=Shift+E
auto_zoom=Shift+W
zoom_169=Shift+A
zoom_235=Shift+S
-exit_fullscreen=Esc
+exit_fullscreen=
next_osd=O
dec_contrast=1
inc_contrast=2
diff --git a/abs/core-testing/v4l-dvb/PKGBUILD b/abs/core-testing/v4l-dvb/PKGBUILD
index c7aedbb..03508eb 100644
--- a/abs/core-testing/v4l-dvb/PKGBUILD
+++ b/abs/core-testing/v4l-dvb/PKGBUILD
@@ -4,7 +4,7 @@
pkgname=v4l-dvb
_kernver=2.6.28-LinHES
pkgver=1
-pkgrel=8
+pkgrel=9
pkgdesc="V4L-DVB drivers from mercurial"
arch=('i686' 'x86_64')
license=('GPL2')
diff --git a/abs/core-testing/vdpinfo-71xx/PKGBUILD b/abs/core-testing/vdpinfo-71xx/PKGBUILD
new file mode 100644
index 0000000..bf20d32
--- /dev/null
+++ b/abs/core-testing/vdpinfo-71xx/PKGBUILD
@@ -0,0 +1,25 @@
+# It is not expected that vdpau will work with the 71xx nVidia drivers, but we still want
+# 'vdpinfo' to return something when users run it, even if the real 'vdpinfo' won't build
+# for their nVidia driver version.
+
+pkgname=vdpinfo-71xx
+pkgver=1
+pkgrel=1
+pkgdesc="tells the user they can't handle vdpau"
+license=('GPLv2')
+arch=('i686' 'x86_64')
+depends=('nvidia-71xx-utils' 'nvidia-71xx')
+# Just let the dependency on the right nvidia and nvidia-utils versions
+# handle conflicts via those packages conflicts.
+# conflicts=()
+provides=('vdpinfo')
+source=(vdpinfo)
+md5sums=()
+
+build() {
+ LH_ROOT=/usr/LH
+ mkdir -p $startdir/pkg/$LH_ROOT/bin/
+
+ cd $startdir
+ install -m0755 -D vdpinfo $startdir/pkg/$LH_ROOT/bin/
+} \ No newline at end of file
diff --git a/abs/core-testing/vdpinfo-71xx/vdpinfo b/abs/core-testing/vdpinfo-71xx/vdpinfo
new file mode 100755
index 0000000..9b237dc
--- /dev/null
+++ b/abs/core-testing/vdpinfo-71xx/vdpinfo
@@ -0,0 +1,2 @@
+#!/bin/bash
+echo "vdpau is unsupported"
diff --git a/abs/core-testing/vdpinfo-96xx/PKGBUILD b/abs/core-testing/vdpinfo-96xx/PKGBUILD
new file mode 100644
index 0000000..34391dd
--- /dev/null
+++ b/abs/core-testing/vdpinfo-96xx/PKGBUILD
@@ -0,0 +1,25 @@
+# It is not expected that vdpau will work with the 71xx nVidia drivers, but we still want
+# 'vdpinfo' to return something when users run it, even if the real 'vdpinfo' won't build
+# for their nVidia driver version.
+
+pkgname=vdpinfo-96xx
+pkgver=1
+pkgrel=1
+pkgdesc="tells the user they can't handle vdpau"
+license=('GPLv2')
+arch=('i686' 'x86_64')
+depends=('nvidia-96xx-utils' 'nvidia-96xx')
+# Just let the dependency on the right nvidia and nvidia-utils versions
+# handle conflicts via those packages conflicts.
+# conflicts=()
+provides=('vdpinfo')
+source=(vdpinfo)
+md5sums=()
+
+build() {
+ LH_ROOT=/usr/LH
+ mkdir -p $startdir/pkg/$LH_ROOT/bin/
+
+ cd $startdir
+ install -m0755 -D vdpinfo $startdir/pkg/$LH_ROOT/bin/
+} \ No newline at end of file
diff --git a/abs/core-testing/vdpinfo-96xx/vdpinfo b/abs/core-testing/vdpinfo-96xx/vdpinfo
new file mode 100755
index 0000000..9b237dc
--- /dev/null
+++ b/abs/core-testing/vdpinfo-96xx/vdpinfo
@@ -0,0 +1,2 @@
+#!/bin/bash
+echo "vdpau is unsupported"
diff --git a/abs/core-testing/vdpinfo/PKGBUILD b/abs/core-testing/vdpinfo/PKGBUILD
new file mode 100644
index 0000000..d9bfadc
--- /dev/null
+++ b/abs/core-testing/vdpinfo/PKGBUILD
@@ -0,0 +1,35 @@
+# Because this requires parts of the nVidia driver, this parallels the PKGBUILD for
+# the nvidia package.
+
+pkgname=vdpinfo
+pkgver=185.18.14
+pkgrel=1
+pkgdesc="polls the GPU for nVidia vdpau capabilities"
+arch=('i686' 'x86_64')
+[ "$CARCH" = "i686" ] && ARCH=x86
+[ "$CARCH" = "x86_64" ] && ARCH=x86_64
+url="http://www.cs.rug.nl/~wladimir/vdpinfo/"
+license=('MIT')
+depends=('nvidia-utils=185.18.14' 'nvidia=185.18.14')
+# Just let the dependency on the right nvidia and nvidia-utils versions
+# handle conflicts via those packages conflicts.
+# conflicts=()
+provides=('vdpinfo')
+source=(http://www.cs.rug.nl/~wladimir/vdpinfo/vdpinfo-0.0.5.tar.gz http://us.download.nvidia.com/XFree86/Linux-$ARCH/${pkgver}/NVIDIA-Linux-$ARCH-${pkgver}-pkg0.run)
+md5sums=()
+
+build() {
+ LH_ROOT=/usr/LH
+ mkdir -p $startdir/pkg/$LH_ROOT/bin/
+
+ # Extract nVidia driver to get at the headers we need to build vdpau
+ cd $startdir/src/
+ sh NVIDIA-Linux-$ARCH-${pkgver}-pkg0.run --extract-only
+
+ # build vdpinfo
+ cd $startdir/src/vdpinfo
+ #g++ -O3 -g -I../NVIDIA-Linux-x86-185.18.14-pkg0/usr/include -c -o vdpinfo.o vdpinfo.cpp
+ #g++ -O3 -g -I$startdir/src/usr/include -c -o vdpinfo.o vdpinfo.cpp
+ make
+ install -m0755 vdpinfo $startdir/pkg/$LH_ROOT/bin/
+} \ No newline at end of file
diff --git a/abs/core-testing/x264/PKGBUILD b/abs/core-testing/x264/PKGBUILD
index 8d85cb5..4f1756b 100644
--- a/abs/core-testing/x264/PKGBUILD
+++ b/abs/core-testing/x264/PKGBUILD
@@ -1,9 +1,9 @@
-# $Id: PKGBUILD 24030 2009-01-11 23:42:22Z eric $
+# $Id: PKGBUILD 36085 2009-04-19 22:58:09Z eric $
# Contributor: damir <damir@archlinux.org>
# Maintainer: Paul Mattal <paul@archlinux.org>
pkgname=x264
-pkgver=20090108
+pkgver=20090416
pkgrel=1
pkgdesc="free library for encoding H264/AVC video streams"
arch=(i686 x86_64)
@@ -12,7 +12,7 @@ license=('GPL')
depends=('libx11')
makedepends=('yasm')
source=(ftp://ftp.videolan.org/pub/videolan/x264/snapshots/x264-snapshot-$pkgver-2245.tar.bz2)
-md5sums=('27129d3cc2e93899069f3caf6eb51f68')
+md5sums=('f5730feaa6175539e8227e48e38b7d67')
build() {
cd "$srcdir/$pkgname-snapshot-$pkgver-2245" || return 1
diff --git a/abs/core-testing/zoneminder/PKGBUILD b/abs/core-testing/zoneminder/PKGBUILD
index bdd1669..6bfb082 100644
--- a/abs/core-testing/zoneminder/PKGBUILD
+++ b/abs/core-testing/zoneminder/PKGBUILD
@@ -3,7 +3,7 @@
pkgname=zoneminder
pkgver=1.23.3
-pkgrel=4
+pkgrel=6
pkgdesc="Capture, analyse, record and monitor video security cameras."
arch=('i686')
url="http://www.zoneminder.com"
@@ -31,7 +31,7 @@ noextract=()
md5sums=('ee803f0f71d6e67adf602c3557fb6bc9'
'af8631abe20cd7dcab1a023af7d4f3e8'
'246852035905589617b9e0dc63759d27'
- '0e91bbfddbed78ffe1c968d11af49ccb'
+ '320dd41725945218de0672f899e1d739'
'818cec2eba7e1efb3f5c410f6dd8d528'
'f9720872736f26d17bc49d8725b75ae4'
'f0c4b80b3c2f1e0fe90d7b52191b7e51'
diff --git a/abs/core-testing/zoneminder/zmupdate.patch b/abs/core-testing/zoneminder/zmupdate.patch
index 2c94d89..913a6ec 100644
--- a/abs/core-testing/zoneminder/zmupdate.patch
+++ b/abs/core-testing/zoneminder/zmupdate.patch
@@ -9,3 +9,15 @@
print( "Executing '$command'\n" ) if ( DBG_LEVEL > 0 );
my $output = qx($command);
+diff -Naru ZoneMinder-1.23.3-orig/scripts/zmlogrotate.conf.in ZoneMinder-1.23.3/scripts/zmlogrotate.conf.in
+--- ZoneMinder-1.23.3-orig/scripts/zmlogrotate.conf.in 2008-02-25 20:19:52.000000000 +1030
++++ ZoneMinder-1.23.3/scripts/zmlogrotate.conf.in 2009-07-20 20:18:16.000000000 +0930
+@@ -7,7 +7,7 @@
+ missingok
+ }
+
+-Now the weekly db backup
++# Now the weekly db backup
+
+ /var/lib/zm/zm_backup.sql {
+ weekly