diff --git a/.gitignore b/.gitignore index 70c4a6ac3..372cb8af0 100644 --- a/.gitignore +++ b/.gitignore @@ -39,3 +39,4 @@ src/zapit/src/udpstreampes src/drivertool src/gui/svn_version.h src/gui/git_version.h +src/nhttpd/nhttpd.conf diff --git a/acinclude.m4 b/acinclude.m4 index c40fd2a4a..a8c6cc97f 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -11,7 +11,7 @@ AC_ARG_WITH(target, AC_ARG_WITH(targetprefix, [ --with-targetprefix=PATH prefix relative to target root (only applicable in cdk mode)], - [targetprefix="$withval"],[targetprefix="NONE"]) + [TARGET_PREFIX="$withval"],[TARGET_PREFIX="NONE"]) AC_ARG_WITH(debug, [ --without-debug disable debugging code], @@ -22,6 +22,11 @@ if test "$DEBUG" = "yes"; then AC_DEFINE(DEBUG,1,[Enable debug messages]) fi +AC_ARG_ENABLE(tmsdk, + AS_HELP_STRING(--enable-tmsdk, compile inside sdk), + ,[enable_tmsdk=no]) +AM_CONDITIONAL(ENABLE_TMSDK,test "$enable_tmsdk" = "yes") + AC_MSG_CHECKING(target) if test "$TARGET" = "native"; then @@ -34,6 +39,7 @@ if test "$TARGET" = "native"; then if test "$prefix" = "NONE"; then prefix=/usr/local fi + TARGET_PREFIX=$prefix if test "$exec_prefix" = "NONE"; then exec_prefix=$prefix fi @@ -49,10 +55,14 @@ elif test "$TARGET" = "cdk"; then CXXFLAGS="-Wall -Os -mcpu=823 -pipe $DEBUG_CFLAGS" fi if test "$prefix" = "NONE"; then - AC_MSG_ERROR(invalid prefix, you need to specify one in cdk mode) + AC_MSG_ERROR([invalid prefix, you need to specify one in cdk mode]) fi - if test "$targetprefix" = "NONE"; then - targetprefix="" + if test "$TARGET_PREFIX" != "NONE"; then + AC_DEFINE_UNQUOTED(TARGET_PREFIX, "$TARGET_PREFIX",[The targets prefix]) + fi + if test "$TARGET_PREFIX" = "NONE"; then + AC_MSG_ERROR([invalid targetprefix, you need to specify one in cdk mode]) + TARGET_PREFIX="" fi if test "$host_alias" = ""; then cross_compiling=yes @@ -76,7 +86,7 @@ AC_DEFUN([TUXBOX_APPS_DIRECTORY_ONE],[ AC_ARG_WITH($1,[ $6$7 [[PREFIX$4$5]]],[ _$2=$withval if test "$TARGET" = "cdk"; then - $2=`eval echo "${targetprefix}$withval"` + $2=`eval echo "$TARGET_PREFIX$withval"` else $2=$withval fi @@ -91,7 +101,6 @@ AC_ARG_WITH($1,[ $6$7 [[PREFIX$4$5]]],[ TARGET_$2=$_$2 ]) -dnl automake <= 1.6 don't support this dnl AC_SUBST($2) AC_DEFINE_UNQUOTED($2,"$_$2",$7) AC_SUBST(TARGET_$2) @@ -105,10 +114,10 @@ if test "$TARGET" = "cdk"; then sysconfdir="\${prefix}/etc" localstatedir="\${prefix}/var" libdir="\${prefix}/lib" - targetdatadir="\${targetprefix}/share" - targetsysconfdir="\${targetprefix}/etc" - targetlocalstatedir="\${targetprefix}/var" - targetlibdir="\${targetprefix}/lib" + targetdatadir="\${TARGET_PREFIX}/share" + targetsysconfdir="\${TARGET_PREFIX}/etc" + targetlocalstatedir="\${TARGET_PREFIX}/var" + targetlibdir="\${TARGET_PREFIX}/lib" fi TUXBOX_APPS_DIRECTORY_ONE(configdir,CONFIGDIR,localstatedir,/var,/tuxbox/config, @@ -132,8 +141,17 @@ TUXBOX_APPS_DIRECTORY_ONE(plugindir,PLUGINDIR,libdir,/lib,/tuxbox/plugins, TUXBOX_APPS_DIRECTORY_ONE(ucodedir,UCODEDIR,localstatedir,/var,/tuxbox/ucodes, [--with-ucodedir=PATH ],[where to find the ucodes]) -TUXBOX_APPS_DIRECTORY_ONE(themesdir,THEMESDIR,datadir,/share,/tuxbox/neutrino/themes, +TUXBOX_APPS_DIRECTORY_ONE(themesdir,THEMESDIR,datadir,/share/tuxbox, /neutrino/themes, [--with-themesdir=PATH ],[where to find the themes (don't change)]) + +TUXBOX_APPS_DIRECTORY_ONE(iconsdir,ICONSDIR,datadir,/share/tuxbox, /neutrino/icons, + [--with-iconssdir=PATH ],[where to find the icons (don't change)]) + +TUXBOX_APPS_DIRECTORY_ONE(private_httpddir,PRIVATE_HTTPDDIR,datadir,/share,/tuxbox/neutrino/httpd, + [--with-private_httpddir=PATH ],[where to find the the private httpd files]) + +TUXBOX_APPS_DIRECTORY_ONE(public_httpddir,PUBLIC_HTTPDDIR,localstatedir,/var,/httpd, + [--with-public_httpddir=PATH ],[where to find the the public httpd files]) ]) dnl automake <= 1.6 needs this specifications @@ -145,6 +163,9 @@ AC_SUBST(LIBDIR) AC_SUBST(PLUGINDIR) AC_SUBST(UCODEDIR) AC_SUBST(THEMESDIR) +AC_SUBST(ICONSDIR) +AC_SUBST(PRIVATE_HTTPDDIR) +AC_SUBST(PUBLIC_HTTPDDIR) dnl end workaround AC_DEFUN([TUXBOX_APPS_ENDIAN],[ @@ -219,18 +240,18 @@ if test "$$1_CONFIG" != "no"; then if test "$TARGET" = "cdk" && check_path "$$1_CONFIG"; then AC_MSG_$3([could not find a suitable version of $2]); else - if test "$1" = "CURL"; then - $1_CFLAGS=$($$1_CONFIG --cflags) + if test "$1" = "CURL"; then + $1_CFLAGS=$($$1_CONFIG --cflags) $1_LIBS=$($$1_CONFIG --libs) else - if test "$1" = "FREETYPE"; then - $1_CFLAGS=$($$1_CONFIG --cflags) - $1_LIBS=$($$1_CONFIG --libs) - else - $1_CFLAGS=$($$1_CONFIG --prefix=$targetprefix --cflags) - $1_LIBS=$($$1_CONFIG --prefix=$targetprefix --libs) + if test "$1" = "FREETYPE"; then + $1_CFLAGS=$($$1_CONFIG --cflags) + $1_LIBS=$($$1_CONFIG --libs) + else + $1_CFLAGS=$($$1_CONFIG --prefix=$TARGET_PREFIX --cflags) + $1_LIBS=$($$1_CONFIG --prefix=$TARGET_PREFIX --libs) fi - fi + fi fi fi @@ -407,9 +428,17 @@ AC_ARG_WITH(boxtype, esac], [BOXTYPE="coolstream"]) AC_ARG_WITH(boxmodel, - [ --with-boxmodel valid for dreambox: dm500, dm500plus, dm600pvr, dm56x0, dm7000, dm7020, dm7025 + [ --with-boxmodel valid for coolstream: nevis, apollo + valid for dreambox: dm500, dm500plus, dm600pvr, dm56x0, dm7000, dm7020, dm7025 valid for ipbox: ip200, ip250, ip350, ip400], [case "${withval}" in + nevis|apollo) + if test "$BOXTYPE" = "coolstream"; then + BOXMODEL="$withval" + else + AC_MSG_ERROR([unknown model $withval for boxtype $BOXTYPE]) + fi + ;; dm500|dm500plus|dm600pvr|dm56x0|dm7000|dm7020|dm7025) if test "$BOXTYPE" = "dreambox"; then BOXMODEL="$withval" @@ -427,7 +456,7 @@ AC_ARG_WITH(boxmodel, *) AC_MSG_ERROR([unsupported value $withval for --with-boxmodel]) ;; - esac], + esac], [BOXMODEL="nevis"] [if test "$BOXTYPE" = "dreambox" -o "$BOXTYPE" = "ipbox" && test -z "$BOXMODEL"; then AC_MSG_ERROR([Dreambox/IPBox needs --with-boxmodel]) fi]) @@ -444,6 +473,9 @@ AM_CONDITIONAL(BOXTYPE_COOL, test "$BOXTYPE" = "coolstream") AM_CONDITIONAL(BOXTYPE_SPARK, test "$BOXTYPE" = "spark") AM_CONDITIONAL(BOXTYPE_GENERIC, test "$BOXTYPE" = "generic") +AM_CONDITIONAL(BOXMODEL_NEVIS,test "$BOXMODEL" = "nevis") +AM_CONDITIONAL(BOXMODEL_APOLLO,test "$BOXMODEL" = "apollo") + AM_CONDITIONAL(BOXMODEL_DM500,test "$BOXMODEL" = "dm500") AM_CONDITIONAL(BOXMODEL_DM500PLUS,test "$BOXMODEL" = "dm500plus") AM_CONDITIONAL(BOXMODEL_DM600PVR,test "$BOXMODEL" = "dm600pvr") @@ -474,7 +506,11 @@ elif test "$BOXTYPE" = "generic"; then fi # TODO: do we need more defines? -if test "$BOXMODEL" = "dm500"; then +if test "$BOXMODEL" = "nevis"; then + AC_DEFINE(BOXMODEL_NEVIS, 1, [coolstream hd1/neo/neo2/zee]) +elif test "$BOXMODEL" = "apollo"; then + AC_DEFINE(BOXMODEL_APOLLO, 1, [coolstream tank]) +elif test "$BOXMODEL" = "dm500"; then AC_DEFINE(BOXMODEL_DM500, 1, [dreambox 500]) elif test "$BOXMODEL" = "ip200"; then AC_DEFINE(BOXMODEL_IP200, 1, [ipbox 200]) diff --git a/autorun.sh b/autorun.sh new file mode 100755 index 000000000..52b20488c --- /dev/null +++ b/autorun.sh @@ -0,0 +1,8 @@ +export LD_LIBRARY_PATH=/opt/lib:/opt/usr/lib +export PATH=${PATH}:/opt/bin:/opt/usr/bin + +echo "### Starting NEUTRINO ###" + +cd /opt/bin +./neutrino & + diff --git a/configure.ac b/configure.ac index b9be17cd0..f74f03ace 100644 --- a/configure.ac +++ b/configure.ac @@ -53,6 +53,10 @@ TUXBOX_APPS_LIB_PKGCONFIG_CHECK(MAD,libmad) if test x"$MAD_EXISTS" != xyes; then TUXBOX_APPS_LIB_PKGCONFIG(MAD,mad) fi +TUXBOX_APPS_LIB_PKGCONFIG_CHECK(OGG,ogg) +if test -z "$OGG_CFLAGS" ; then + TUXBOX_APPS_LIB_PKGCONFIG(OGG,ogg) +fi TUXBOX_APPS_LIB_PKGCONFIG(PNG,libpng) TUXBOX_APPS_LIB_PKGCONFIG(AVFORMAT,libavformat) TUXBOX_APPS_LIB_PKGCONFIG(AVCODEC,libavcodec) @@ -146,10 +150,26 @@ AC_ARG_ENABLE(cleanup, [ --enable-cleanup enable cleanup on exit], [AC_DEFINE(EXIT_CLEANUP,1,[enable cleanup on exit])]) -if test "$BOXTYPE" = "coolstream" -a -e ${srcdir}/lib/libcoolstream/nevis_ir.h; then +AC_ARG_ENABLE(pip, + [ --enable-pip enable picture in picture support], + [AC_DEFINE(ENABLE_PIP,1,[enable picture in picture support])]) + + +if test "$BOXTYPE" = "coolstream"; then +if test -e ${srcdir}/lib/libcoolstream/nevis_ir.h; then AC_DEFINE(HAVE_COOLSTREAM_NEVIS_IR_H,1,[Define to 1 if you have the header file.]) fi +if test "$BOXMODEL" = "apollo"; then +if test -e ${srcdir}/lib/libcoolstream2/cs_ir_generic.h; then + AC_DEFINE(HAVE_COOLSTREAM_CS_IR_GENERIC_H,1,[Define to 1 if you have the header file.]) +fi +if test -e ${srcdir}/lib/libcoolstream2/cs_frontpanel.h; then + AC_DEFINE(HAVE_COOLSTREAM_CS_FRONTPANEL_H,1,[Define to 1 if you have the header file.]) +fi +fi +fi + # # Check for libtdservicedb - the new one - for testing only # @@ -199,6 +219,7 @@ src/nhttpd/tuxboxapi/Makefile src/nhttpd/tuxboxapi/coolstream/Makefile src/nhttpd/yhttpd_core/Makefile src/nhttpd/yhttpd_mods/Makefile +src/nhttpd/nhttpd.conf src/Makefile src/daemonc/Makefile src/driver/pictureviewer/Makefile @@ -226,5 +247,6 @@ src/timerd/Makefile src/zapit/Makefile src/zapit/lib/Makefile src/zapit/src/Makefile +src/zapit/data/Makefile ]) diff --git a/cross-configure.apollo.debug b/cross-configure.apollo.debug new file mode 100755 index 000000000..ba8444848 --- /dev/null +++ b/cross-configure.apollo.debug @@ -0,0 +1,33 @@ +#!/bin/sh + +PREFIX=/opt/arm/arm-pnx8400-linux-uclibcgnueabi/arm-pnx8400-linux-uclibcgnueabi/sys-root/usr +CCPATH= +HOST=arm-pnx8400-linux-uclibcgnueabi + +export PKG_CONFIG_PATH=${PREFIX}/lib/pkgconfig +export CC=$CCPATH$HOST-gcc +export AR=$CCPATH$HOST-ar +export NM=$CCPATH$HOST-nm +export RANLIB=$CCPATH$HOST-ranlib +export OBJDUMP=$CCPATH$HOST-objdump +export STRIP=$CCPATH$HOST-strip + +export CFLAGS="-Wall -Wextra -Wshadow -g -ggdb3 \ + -mcpu=cortex-a9 -mfpu=vfpv3-d16 -mfloat-abi=hard \ + -D__KERNEL_STRICT_NAMES -DFB_HW_ACCELERATION \ + -I"$PWD"/include -I"$PWD"/include/linux/dvb -I"$PREFIX"/include/freetype2" + +export CXXFLAGS="-Wall -Wextra -Wshadow -g -ggdb3 \ + -mcpu=cortex-a9 -mfpu=vfpv3-d16 -mfloat-abi=hard \ + -D__KERNEL_STRICT_NAMES -DFB_HW_ACCELERATION \ + -I"$PWD"/include -I"$PWD"/include/linux/dvb -I"$PREFIX"/include/freetype2" + +export LDFLAGS="-L"$PREFIX"/lib -lcurl -lssl -lcrypto -ldl" + +export DVB_API_VERSION=3 +export FREETYPE_CONFIG=$PREFIX/bin/freetype-config +export CURL_CONFIG=$PREFIX/bin/curl-config + +./autogen.sh +./configure --prefix=${PREFIX} --build=i386-pc-linux-gnu --host=$HOST --enable-flac --with-target=cdk --with-targetprefix="" --with-boxmodel=apollo --enable-mdev "$*" + diff --git a/data/encoding.conf b/data/encoding.conf index 074ec7593..495ae7277 100644 --- a/data/encoding.conf +++ b/data/encoding.conf @@ -5,28 +5,36 @@ gre ISO8859-7 pol ISO8859-2 rus ISO8859-5 bul ISO8859-5 -cn ISO3166-2 +cn ISO3166-2 #Table of transponder using two byte char mappings (VideoTexSuppl) #TSID ONID 0x441 0x1 ISO6937 # RTL 0x443 0x1 ISO6937 # Eurosport / RTL Austria # -0x447 0x1 #ASTRA 19.2 UPC Direct -0x427 0x1 #ASTRA 19.2 UPC Direct -0x44b 0x1 #ASTRA 19.2 UPC Direct -0x4ff 0x1 #ASTRA 19.2 UPC Direct -0x407 0x1 #ASTRA 19.2 UPC Direct -0x436 0x1 #ASTRA 19.2 MTV Euro - MTV Networks -0x42a 0x1 #ASTRA 19.2 VH1 Classic - MTV Networks -0xc23 0x3 #ASTRA 23.5 CzechLink -0xc93 0x3 #ASTRA 23.5 CzechLink -0xc95 0x3 #ASTRA 23.5 CzechLink -0xc8b 0x3 #ASTRA 23.5 CzechLink -0xc89 0x3 #ASTRA 23.5 CzechLink -0xbc7 0x3 #ASTRA 23.5 CzechLink -0xc8f 0x3 #ASTRA 23.5 CzechLink -0xc85 0x3 #ASTRA 23.5 CzechLink -0xbc6 0x3 #ASTRA 23.5 CzechLink +#0x447 0x1 #ASTRA 19.2 UPC Direct +#0x427 0x1 #ASTRA 19.2 UPC Direct +#0x44b 0x1 #ASTRA 19.2 UPC Direct +#0x4ff 0x1 #ASTRA 19.2 UPC Direct +#0x407 0x1 #ASTRA 19.2 UPC Direct +#0x436 0x1 #ASTRA 19.2 MTV Euro - MTV Networks +#0x42a 0x1 #ASTRA 19.2 VH1 Classic - MTV Networks +# +#0xc23 0x3 #ASTRA 23.5 CzechLink 10803H +#0xbc7 0x3 #ASTRA 23.5 CzechLink 12565H +#0xc8b 0x3 #ASTRA 23.5 CzechLink 11914H +#0xc8f 0x3 #ASTRA 23.5 CzechLink 11992H +0xbc6 0x3 #ASTRA 23.5 12525V skylink +0xc85 0x3 #ASTRA 23.5 11797H skylink +0xc87 0x3 #ASTRA 23.5 11836H skylink* +0xc88 0x3 #ASTRA 23.5 11856V skylink* +0xc89 0x3 #ASTRA 23.5 11876H skylink +0xc8a 0x3 #ASTRA 23.5 11895V skylink +0xc8c 0x3 #ASTRA 23.5 11934V skylink* +0xc8e 0x3 #ASTRA 23.5 11973V skylink* +0xc93 0x3 #ASTRA 23.5 12070H skylink +0xc95 0x3 #ASTRA 23.5 12109H skylink +0xc98 0x3 #ASTRA 23.5 12168V skylink* +0xc9a 0x3 #ASTRA 23.5 12207V skylink* #TSID ONID 0x1 0x601 #UPC Cable Hungary 0x2 0x601 #UPC Cable Hungary @@ -43,22 +51,38 @@ cn ISO3166-2 0xd 0x601 #UPC Cable Hungary 0xe 0x601 #UPC Cable Hungary 0xf 0x601 #UPC Cable Hungary -# UPC Direct Thor 1.0W -0x2b2 0x600 -0x2bd 0x600 -0x2be 0x600 -0x2bf 0x600 -0x2c0 0x600 -0x2c1 0x600 -0x2c2 0x600 -0x2c3 0x600 -0x2c4 0x600 -0x2c5 0x600 -0x2c6 0x600 -0x2e 0x46 -0x1 0x1111 -0x2 0x1111 -0x3 0x1111 +# freesat +0x2bd 0x600 # freesat 0.8W 11727 V +0x2be 0x600 # freesat 0.8W 11766 V +0x2bf 0x600 # freesat 0.8W 11804 V +0x2c0 0x600 # freesat 0.8W 11996 V +0x2c1 0x600 # freesat 0.8W 12034 V +0x2c2 0x600 # freesat 0.8W 12073 V +0x2c3 0x600 # freesat 0.8W 11938 H +0x2c4 0x600 # freesat 0.8W 12188 V +0x2c5 0x600 # freesat 0.8W 12265 V +0x2c6 0x600 # freesat 0.8W 11843 V +0x2c8 0x600 # freesat 0.8W 12111 V +0x26 0x46 # freesat 0.8W 11785 H +0x29 0x46 # freesat 0.8W 12015 H +0x1b 0x2c0 # freesat 0.8W 12226 V +0x5 0x1111 # freesat 0.8W 11747 H +0x7 0x1111 # freesat 0.8W 11976 H +0x65 0x1771 # freesat 0.8W 12380 V +# DigiTV +0x1 0x1 ISO8859-2 # DigiTV 0.8W 12687 H +0x2 0x1 ISO8859-2 # DigiTV 0.8W 12723 H +0x3 0x1 ISO8859-2 # DigiTV 0.8W 12643 H +0x4 0x1 ISO8859-2 # DigiTV 0.8W 12527 H +0x5 0x1 ISO8859-2 # DigiTV 0.8W 12563 H +0x6 0x1 ISO8859-2 # DigiTV 0.8W 12643 V +0x7 0x1 ISO8859-2 # DigiTV 0.8W 12607 H +0x8 0x1 ISO8859-2 # DigiTV 0.8W 12687 V +0x9 0x1 ISO8859-2 # DigiTV 0.8W 12607 V +0xa 0x1 ISO8859-2 # DigiTV 0.8W 12563 V +0xb 0x1 ISO8859-2 # DigiTV 0.8W 12718 V +0xc 0x1 ISO8859-2 # DigiTV 0.8W 11900 H +# Cyfra+ 200 318 #Hotbird Eutelsat (Eurosport) 300 318 #Hotbird Eutelsat (Eurosport, Animal Pl.HD) 400 318 #Hotbird 13.0 Cyfra+ @@ -83,13 +107,21 @@ cn ISO3166-2 13200 113 #Hotbird 13.0 Cyfrowy Polsat #Fallback encoding table for following transponders #TSID ONID ISO8859-X -#0x447 0x1 ISO8859-9 -50100 126 ISO8859-9 # Digiturk 7E 11.471 V 30.000 3/4 -50200 126 ISO8859-9 # Digiturk 7E 11.492 V 30.000 3/4 -50300 126 ISO8859-9 # Digiturk 7E 11.639 H 30.000 3/4 -50400 126 ISO8859-9 # Digiturk 7E 11.534 V 30.000 3/4 -50600 126 ISO8859-9 # Digiturk 7E 11.575 V and 42E 11.729 V 15.555 5/6 -50700 126 ISO8859-9 # Digiturk 7E 11.596 H 30.000 3/4 -50800 126 ISO8859-9 # Digiturk 7E 11.678 H 30.000 3/4 -50900 126 ISO8859-9 # Digiturk 7E 11.513 H 27.500 3/4 -51000 126 ISO8859-9 # Digiturk 7E 11.617 V 30.000 3/4 +0x4fb0 0x7e ISO8859-9 # Digiturk 7E 10762 V +0x5014 0x7e ISO8859-9 # Digiturk 7E 10803 H +0x5078 0x7e ISO8859-9 # Digiturk 7E 10804 V +0x5140 0x7e ISO8859-9 # Digiturk 7E 10845 V +0x51a4 0x7e ISO8859-9 # Digiturk 7E 10886 H +0x5208 0x7e ISO8859-9 # Digiturk 7E 10928 H +0x526c 0x7e ISO8859-9 # Digiturk 7E 10887 V +0x52d0 0x7e ISO8859-9 # Digiturk 7E 10928 V +0xa0f0 0x7e ISO8859-9 # Digiturk 7E 11455 V +0xc3b4 0x7e ISO8859-9 # Digiturk 7E 11471 H +0xc418 0x7e ISO8859-9 # Digiturk 7E 11492 V +0xc47c 0x7e ISO8859-9 # Digiturk 7E 11637 H +0xc4e0 0x7e ISO8859-9 # Digiturk 7E 11534 V +0xc5a8 0x7e ISO8859-9 # Digiturk 7E 11575 V and 42E 11729 V +0xc60c 0x7e ISO8859-9 # Digiturk 7E 11595 H +0xc670 0x7e ISO8859-9 # Digiturk 7E 11679 H +0xc6d4 0x7e ISO8859-9 # Digiturk 7E 11513 H +0xc738 0x7e ISO8859-9 # Digiturk 7E 11617 V diff --git a/data/icons/Makefile.am b/data/icons/Makefile.am index 0bd766ee4..6c85adf37 100644 --- a/data/icons/Makefile.am +++ b/data/icons/Makefile.am @@ -180,6 +180,7 @@ install_DATA += \ numericpad.png \ ok.png \ personalize.png \ + pip.png \ power.png \ powervu_green.png \ powervu_white.png \ @@ -237,6 +238,8 @@ install_DATA += \ timer.png \ tuner_1.png \ tuner_2.png \ + tuner_3.png \ + tuner_4.png \ up.png \ upnp.png \ via_green.png \ diff --git a/data/icons/pip.png b/data/icons/pip.png new file mode 100644 index 000000000..101a2b254 Binary files /dev/null and b/data/icons/pip.png differ diff --git a/data/icons/tuner_3.png b/data/icons/tuner_3.png new file mode 100644 index 000000000..04bc57c03 Binary files /dev/null and b/data/icons/tuner_3.png differ diff --git a/data/icons/tuner_4.png b/data/icons/tuner_4.png new file mode 100644 index 000000000..e7b9ed8cc Binary files /dev/null and b/data/icons/tuner_4.png differ diff --git a/data/locale/deutsch.locale b/data/locale/deutsch.locale index a9e00d8ec..dd5958170 100644 --- a/data/locale/deutsch.locale +++ b/data/locale/deutsch.locale @@ -229,6 +229,7 @@ channellist.new_zap_mode_active aktiv channellist.new_zap_mode_allow erlauben channellist.new_zap_mode_off aus channellist.nonefound Es wurden keine Kanäle gefunden!\nFühren Sie bitte eine Kanalsuche durch\n(MENU-Taste -> Service) +channellist.numeric_adjust Numeric zap adjust channellist.provs Anbieter channellist.recording_not_possible Aufnahme nicht möglich! channellist.reset_flags Entferne Kanal-Markierung "Neu" @@ -237,6 +238,7 @@ channellist.since seit channellist.start Start ci.clock CI Takt (Mhz) ci.empty Kein CAM im Slot +ci.ignore_msg CA Meldungen ignorieren ci.init_failed CAM-Init fehlgeschlagen ci.init_ok CAM-Init beendet ci.inserted CAM im Slot @@ -362,6 +364,9 @@ extra.fec_s2_qpsk_9_10 9/10 S2_QPSK extra.key_current_transponder Aktuelle Transponder Taste extra.key_list_end Listenende extra.key_list_start Listenanfang +extra.key_pip_close Stop/Start PiP +extra.key_pip_setup PiP Konfiguration +extra.key_pip_swap Umschalten PiP/live extra.key_plugin One-touch-Plugin extra.key_screenshot Screenshot Taste extra.key_timeshift Timeshift @@ -630,7 +635,7 @@ keybindingmenu.pageup Seite zurück keybindingmenu.poweroff Standby EIN/AUS keybindingmenu.quickzap Schnellumschaltung keybindingmenu.remotecontrol_hardware Hardware -keybindingmenu.remotecontrol_hardware_coolstream Coolstream +keybindingmenu.remotecontrol_hardware_coolstream CST keybindingmenu.remotecontrol_hardware_dbox DBox Nokia (alt) keybindingmenu.remotecontrol_hardware_msg_part1 Die Fernbedienung wurde von ' keybindingmenu.remotecontrol_hardware_msg_part2 ' auf ' @@ -851,6 +856,9 @@ menu.hint_key_mptime Weisen Sie eine Taste für die Restzeitanzeige ihrer Aufnah menu.hint_key_mptimeshift Weisen Sie eine Taste für das Starten von Timeshift zu menu.hint_key_pagedown Weisen Sie eine Taste für das Herunterblättern zu menu.hint_key_pageup Weisen Sie eine Taste für das Hochblättern zu +menu.hint_key_pip_close Tastenzuordnung für Stop PiP oder Start mit aktuellem Kanal +menu.hint_key_pip_setup Tastenzuordnung für PiP Konfiguration +menu.hint_key_pip_swap Tastenzuordnung zum Umschalten PiP und aktuellem Kanal menu.hint_key_poweroff Wählen Sie eine Taste für den Standby und für das Verhalten für Standby und Deep-Standby menu.hint_key_quickzap Konfigurieren Sie die Tastenbelegung für die Schnellumschaltung menu.hint_key_repeatblock Die Verzögerung nach einem Tastendruck bis die Box reagieren soll @@ -920,11 +928,12 @@ menu.hint_net_setupnow Weisen Sie die aktuellen Einstellungen zu oder übernehme menu.hint_net_setuponstartup Startet das Netzwerk automatisch beim Starten der Box menu.hint_net_show Zeigen Ihnen die aktuellen Netzwerkeinstellungen menu.hint_net_ssid Geben Sie die SSID des WLAN ein, mit dem Sie eine Verbindung herstellen möchten -menu.hint_net_telnet Aktiviert Telnet auf Ihrer Box\nLogin mit Benutzer 'root' und Passwort 'coolstream' +menu.hint_net_telnet Aktiviert Telnet auf Ihrer Box menu.hint_net_test Testet die Netzwerkverbindung:\nPing auf Gateway, Name-Server und externe IP-Adressen menu.hint_net_ushare Freigabe verbundener Datenträger über UPnP menu.hint_network IP-Adresse, Gateway, DNS, Zeit-Sync, Netzwerk-Freigaben, Dienste und mehr menu.hint_new_zap_mode Aktiviert Quickzap in der Kanalliste. Nach Betätigen der Mute-Taste wird mit den Hoch/Runter-Tasten direkt umgeschalten +menu.hint_numeric_adjust Adjust channel list mode on numeric zap menu.hint_osd Farben, Schriftarten, Anzeigegröße, Ansichtsoptionen der Menüs und mehr menu.hint_osd_language Wählen Sie ihre Menü-Sprache menu.hint_osd_preset Wählen Sie zwischen Röhren-TV (CRT) oder Flachbildschirm (LCD) @@ -985,12 +994,14 @@ menu.hint_scan_cable Wählen Sie ihr Kabelnetz für den Suchlauf menu.hint_scan_cable_simple Kabel-Suchlauf mit optionaler Anbieter- und Kanal-Nummerierung menu.hint_scan_commited Wählen Sie ihre Einstellungen für diesen Satelliten menu.hint_scan_diseqc Wählen Sie das DiSEqC-Schalter-Eingangssignal für diesen Satelliten +menu.hint_scan_diseqcorder Diseqc command order for cascaded switches menu.hint_scan_diseqcrepeat DiSEqC-Wiederholungen für kaskadierte Schaltungen menu.hint_scan_diseqctype Wählen Sie ihr DiSEqC-Protokoll\nMit 'Erweitert' können Sie ihre Anlage einbinden menu.hint_scan_fast Schnell-Suchlauf eines ausgewählten Anbieters\nWARNUNG: DiSEqC-Einstellung wird überschrieben menu.hint_scan_fastprov Wählen Sie einen Anbieter (Provider) für den Suchlauf menu.hint_scan_fasttype Wählen Sie das Sendeformat menu.hint_scan_fec Wählen Sie eine Transponder-FEC +menu.hint_scan_felink Select tuner to link tuner to menu.hint_scan_femode Wählen Sie den Verbindungstyp für den zweiten Tuner menu.hint_scan_fesetup Konfigurieren des oder der Tuner menu.hint_scan_fetimeout Maximale Wartezeit auf das Signal in 1/10 Sekunden @@ -1087,11 +1098,15 @@ menu.hint_vfd_statusline Wählen Sie, was in der Statuszeile angezeigt werden so menu.hint_video Video-Ausgang, Auflösung, Format, Seitenverhältnisse und mehr menu.hint_video_43mode Anzeige-Modus für 4:3-Inhalte auf 16:9-Fernsehern menu.hint_video_analog_mode Wählen Sie den Modus des Ausgangssignals für den CINCH-Anschluss +menu.hint_video_brightness Change picture brightness menu.hint_video_cinch_mode Wählen Sie den Modus des Ausgangssignals für den Composite-Video-Anschluss +menu.hint_video_contrast Change picture contrast menu.hint_video_dbdr Verwendeter MPEG2 Filter menu.hint_video_format Wählen Sie das Bildschirmformat ihres Fernsehgerätes menu.hint_video_mode Wählen Sie den Modus des Ausgangssignals für den HDMI-Anschluss menu.hint_video_modes Definiert, welche Videosysteme mit der VF-Taste der Fernbedienung ausgewählt werden können +menu.hint_video_pip Bild in Bild Größe und Position +menu.hint_video_saturation Change picture saturation menu.hint_video_scart_mode Wählen Sie den Modus des Ausgangssignals für den SCART-Anschluss menu.hint_volume_digits Zifferndarstellung der Lautstärkeanzeige ein- oder ausschalten menu.hint_volume_pos Wählen Sie die Position der Lautstärkeanzeige aus @@ -1239,7 +1254,10 @@ moviebrowser.edit_book_type_info2 <0 zurück , >0 vor, 0: kein moviebrowser.edit_serie Name der Serie moviebrowser.error_no_movies Keine Filme gefunden moviebrowser.foot_filter Filter: +moviebrowser.foot_focus Fenster umschalten +moviebrowser.foot_options Optionen moviebrowser.foot_play Film starten +moviebrowser.foot_refresh Liste neu laden moviebrowser.foot_sort Sortieren: moviebrowser.head TS Filmarchiv (eigene Aufnahmen) moviebrowser.head_filter Filme nach Kategorie filtern: @@ -1575,6 +1593,7 @@ satsetup.diseqc12 DiSEqC 1.2 satsetup.diseqc_advanced Erweiterte Auswahl satsetup.diseqc_com_uncom Committed/Uncommitted satsetup.diseqc_input DiSEqC Einspeisung +satsetup.diseqc_order DiSEqC command order satsetup.diseqc_uncom_com Uncommitted/Committed satsetup.diseqcrepeat DiSEqC-Wiederholungen satsetup.extended DiSEqC-Einstellungen @@ -1589,10 +1608,11 @@ satsetup.fastscan_prov_tvv TV Vlaanderen satsetup.fastscan_sd nur SD satsetup.fastscan_type Scantyp satsetup.fe_mode Tuner Modus -satsetup.fe_mode_alone independent -satsetup.fe_mode_loop loop -satsetup.fe_mode_single single -satsetup.fe_mode_twin twin +satsetup.fe_mode_independent Independent +satsetup.fe_mode_link_loop Loop +satsetup.fe_mode_link_twin TWIN +satsetup.fe_mode_master Master +satsetup.fe_mode_unused Nicht genutzt satsetup.fe_setup Setup Tuner satsetup.fe_type Tunertyp wechseln satsetup.fe_type_confirm Um die Empfangsart zu wechseln, muss neutrino\nneu gestartet werden. Jetzt neu starten? @@ -1827,13 +1847,19 @@ usermenu.msg_warning_no_items Sie haben keine Menüpunkte für dieses Menü ange usermenu.name Name video_mode_ok Video-Einstellungen OK? videomenu.43mode 4:3 Anzeigeverhalten +videomenu.analog_auto AUTO +videomenu.analog_cvbs CVBS +videomenu.analog_hd_rgb RGB (HD) videomenu.analog_hd_rgb_cinch RGB -> Cinch (HD) videomenu.analog_hd_rgb_scart RGB -> Scart (HD) +videomenu.analog_hd_yprpb YPbPr(HD) videomenu.analog_hd_yprpb_cinch YPbPr -> Cinch (HD) videomenu.analog_hd_yprpb_scart YPbPr -> Scart (HD) videomenu.analog_mode Videomodus +videomenu.analog_sd_rgb RGB (SD) videomenu.analog_sd_rgb_cinch RGB -> Cinch (SD) videomenu.analog_sd_rgb_scart RGB -> Scart (SD) +videomenu.analog_sd_yprpb YPbPr (SD) videomenu.analog_sd_yprpb_cinch YPbPr -> Cinch (SD) videomenu.analog_sd_yprpb_scart YPbPr -> Scart (SD) videomenu.auto Automatisch @@ -1857,6 +1883,8 @@ videomenu.hue Farbton videomenu.letterbox Letterbox videomenu.panscan Pan & Scan videomenu.panscan2 14:9 Pan & Scan +videomenu.pip PiP Setup +videomenu.pip_error PiP Startfehler videomenu.saturation Sättigung videomenu.scart Scart videomenu.screensetup Bildbereich @@ -1873,7 +1901,7 @@ videomenu.videomode Videosystem wizard.initial_settings Grundeinstellungen gefunden wizard.install_settings Kanalliste für Astra 19.2°E installieren? wizard.welcome_head Willkommen zur Ersteinrichtung Ihres Receivers! -wizard.welcome_text Wir gratulieren Ihnen zum Kauf Ihrer Coolstream. In den nun folgenden\nSchritten begleiten wir Sie durch die Erstinstallation des Gerätes.\nWir wünschen Ihnen viel Freude mit dem wohl einzigartigsten Receiver!\nBeachten Sie: Ihre Coolstream Set-Top-Box lässt sich bequem per Webinterface\nsteuern, um zum Beispiel die Timer-Verwaltung zu nutzen oder Live-TV im Web-Browser zu schauen.\nZugriff erhalten Sie mit dem Benutzernamen: root und dem Passwort: coolstream\nAchten Sie darauf, dass Ihre Gerät nicht von aussen zugänglich ist,\nda sonst ein Zugriff über das Internet nicht ausgeschlossen werden kann!\nNächster Schritt? +wizard.welcome_text Wir gratulieren Ihnen zum Kauf Ihrer CST. In den nun folgenden\nSchritten begleiten wir Sie durch die Erstinstallation des Gerätes.\nWir wünschen Ihnen viel Freude mit dem wohl einzigartigsten Receiver!\nBeachten Sie: Ihre CST Set-Top-Box lässt sich bequem per Webinterface\nsteuern, um zum Beispiel die Timer-Verwaltung zu nutzen oder Live-TV im Web-Browser zu schauen.\nAchten Sie darauf, dass Ihre Gerät nicht von aussen zugänglich ist,\nda sonst ein Zugriff über das Internet nicht ausgeschlossen werden kann!\nNächster Schritt? word.from ab zapit.scantype Service-Auswahl zapit.scantype.all Alle Services diff --git a/data/locale/english.locale b/data/locale/english.locale index 2a18b0911..fdd7c501c 100644 --- a/data/locale/english.locale +++ b/data/locale/english.locale @@ -229,6 +229,7 @@ channellist.new_zap_mode_active active channellist.new_zap_mode_allow allow channellist.new_zap_mode_off off channellist.nonefound No channels were found!\nPlease execute a scan\n(MENU-key -> service) +channellist.numeric_adjust Numeric zap adjust channellist.provs Providers channellist.recording_not_possible Recording not possible! channellist.reset_flags Reset 'new' channel flag @@ -237,6 +238,7 @@ channellist.since since channellist.start starts ci.clock CI clock (Mhz) ci.empty No CAM in slot +ci.ignore_msg Ignore CA messages ci.init_failed CAM init failed ci.init_ok CAM init complete ci.inserted CAM inserted in slot @@ -362,6 +364,9 @@ extra.fec_s2_qpsk_9_10 9/10 s2 qpsk extra.key_current_transponder Current Transponder Key extra.key_list_end end extra.key_list_start home +extra.key_pip_close Stop/Start PiP +extra.key_pip_setup Configure PiP +extra.key_pip_swap Swap PiP/live extra.key_plugin One touch plugin extra.key_screenshot Screenshot key extra.key_timeshift Timeshift @@ -630,7 +635,7 @@ keybindingmenu.pageup page up keybindingmenu.poweroff Power toggle keybindingmenu.quickzap Quickzap keybindingmenu.remotecontrol_hardware Hardware -keybindingmenu.remotecontrol_hardware_coolstream Coolstream +keybindingmenu.remotecontrol_hardware_coolstream CST keybindingmenu.remotecontrol_hardware_dbox d-box Nokia (old) keybindingmenu.remotecontrol_hardware_msg_part1 The remote control has been changed from ' keybindingmenu.remotecontrol_hardware_msg_part2 ' to ' @@ -851,6 +856,9 @@ menu.hint_key_mptime Assign button to show play time\nleft time menu.hint_key_mptimeshift Assign button to start timeshift menu.hint_key_pagedown Assign button to show next items page menu.hint_key_pageup Assign button to show previous items page +menu.hint_key_pip_close Assign button to stop PiP\nor start it for current channel +menu.hint_key_pip_setup Assign button to configure PiP +menu.hint_key_pip_swap Assign button to swap PiP and live channel menu.hint_key_poweroff Assign button to switch power state\n (standby/deepstandby <-> running) menu.hint_key_quickzap Configure keybingdings for quick\nchannel switch menu.hint_key_repeatblock Delay after button press and before\nfirst key repeat @@ -925,6 +933,7 @@ menu.hint_net_test Test network connection: ping gateway,\n name server and exte menu.hint_net_ushare Share connected HDD over uPnp menu.hint_network IP address, gateway, DNS, Time sync\nNetwork shares and services menu.hint_new_zap_mode Allow channel switch while browsing\n(toggle mode with 'mute' in channel list) +menu.hint_numeric_adjust Adjust channel list mode on numeric zap menu.hint_osd Colors, fonts, screen size\nGUI look and feel options menu.hint_osd_language Select OSD language menu.hint_osd_preset Pre-configured screen margins for CRT and LCD TV @@ -985,13 +994,15 @@ menu.hint_scan_cable Select cable network to scan menu.hint_scan_cable_simple Cable scan with optional\nprovider channel numbering menu.hint_scan_commited Select commited input for\nthis satellite menu.hint_scan_diseqc Select diseqc switch input for\nthis satellite +menu.hint_scan_diseqcorder Diseqc command order for cascaded switches menu.hint_scan_diseqcrepeat Diseqc repeat for cascaded switches menu.hint_scan_diseqctype Select your diseqc switch protocol\nwith 'advanced' you can use uncommited switches menu.hint_scan_fast CanalDigitaal/TéléSAT/TV Vlaanderen provider scan\nWARNING: diseqc config will be overwritten menu.hint_scan_fastprov Select provider to scan menu.hint_scan_fasttype Select fast scan type menu.hint_scan_fec Select transponder FEC -menu.hint_scan_femode Select second tuner connection type +menu.hint_scan_felink Select tuner to link tuner to +menu.hint_scan_femode Select tuner connection type menu.hint_scan_fesetup Configure tuner(s) menu.hint_scan_fetimeout Time to wait for signal, in 1/10 of second menu.hint_scan_freq Enter transponder frequency @@ -1087,11 +1098,15 @@ menu.hint_vfd_statusline Choose what to display in short\nVFD status line menu.hint_video Video output, resolution, format\nAspect ratio, fast mode switch options menu.hint_video_43mode Display mode for 4:3 content\non 16:9 TV menu.hint_video_analog_mode Select analog output mode\nfor SCART and CINCH connectors +menu.hint_video_brightness Change picture brightness menu.hint_video_cinch_mode Select analog output mode for\ncomposite video out +menu.hint_video_contrast Change picture contrast menu.hint_video_dbdr MPEG2 enhancement filters menu.hint_video_format TV aspect ratio menu.hint_video_mode HDMI output video mode menu.hint_video_modes VF key will cycle between enabled modes +menu.hint_video_pip Picture in picture size and position +menu.hint_video_saturation Change picture saturation menu.hint_video_scart_mode Select analog output mode for SCART connectors menu.hint_volume_digits Numeric display of the volumebar on/off menu.hint_volume_pos Select volume indicator position @@ -1239,7 +1254,10 @@ moviebrowser.edit_book_type_info2 <0 back , >0 for, 0: none moviebrowser.edit_serie Enter name of serie moviebrowser.error_no_movies No movies found moviebrowser.foot_filter Filter: +moviebrowser.foot_focus Switch window +moviebrowser.foot_options Options moviebrowser.foot_play Start movie +moviebrowser.foot_refresh Refresh list moviebrowser.foot_sort Sort: moviebrowser.head TS MovieBrowser moviebrowser.head_filter Filter movies by category: @@ -1575,6 +1593,7 @@ satsetup.diseqc12 DiSEqC 1.2 satsetup.diseqc_advanced Advanced satsetup.diseqc_com_uncom Commited/Uncommited satsetup.diseqc_input DiSEqC input +satsetup.diseqc_order DiSEqC command order satsetup.diseqc_uncom_com Uncommited/Commited satsetup.diseqcrepeat DiSEqC-repeats satsetup.extended DiSEqC-Settings @@ -1589,10 +1608,11 @@ satsetup.fastscan_prov_tvv TV Vlaanderen satsetup.fastscan_sd SD only satsetup.fastscan_type Scan type satsetup.fe_mode Tuner mode -satsetup.fe_mode_alone independent -satsetup.fe_mode_loop loop -satsetup.fe_mode_single single -satsetup.fe_mode_twin twin +satsetup.fe_mode_independent Independent +satsetup.fe_mode_link_loop Loop +satsetup.fe_mode_link_twin TWIN +satsetup.fe_mode_master Master +satsetup.fe_mode_unused Unused satsetup.fe_setup Setup tuner satsetup.fe_type Change tuner type satsetup.fe_type_confirm To change the reception type, a restart\nof neutrino is necessary. Restart now? @@ -1633,7 +1653,7 @@ scants.actsatellite Satellite: scants.actterrestrial Terrestrial: scants.bouquet Bouquet scants.bouquet_create create new -scants.bouquet_erase erase all +scants.bouquet_erase erase old scants.bouquet_leave leave current scants.bouquet_satellite Satellite-Bouquet scants.bouquet_update update @@ -1827,13 +1847,19 @@ usermenu.msg_warning_no_items No items defined!\nThe menu name is reset! usermenu.name Name video_mode_ok Is this video mode working ok ? videomenu.43mode 4:3 Content mode +videomenu.analog_auto AUTO +videomenu.analog_cvbs CVBS +videomenu.analog_hd_rgb RGB (HD) videomenu.analog_hd_rgb_cinch RGB on cinch (HD) videomenu.analog_hd_rgb_scart RGB on scart (HD) +videomenu.analog_hd_yprpb YPbPr(HD) videomenu.analog_hd_yprpb_cinch YPbPr on cinch (HD) videomenu.analog_hd_yprpb_scart YPbPr on scart (HD) videomenu.analog_mode Analog Video Output +videomenu.analog_sd_rgb RGB (SD) videomenu.analog_sd_rgb_cinch RGB on cinch (SD) videomenu.analog_sd_rgb_scart RGB on scart (SD) +videomenu.analog_sd_yprpb YPbPr (SD) videomenu.analog_sd_yprpb_cinch YPbPr on cinch (SD) videomenu.analog_sd_yprpb_scart YPbPr on scart (SD) videomenu.auto Auto @@ -1857,6 +1883,8 @@ videomenu.hue Hue videomenu.letterbox Letterbox videomenu.panscan Pan&Scan videomenu.panscan2 14:9 Pan&Scan +videomenu.pip PiP setup +videomenu.pip_error PiP start failed videomenu.saturation Saturation videomenu.scart Scart videomenu.screensetup Screen Setup @@ -1873,7 +1901,7 @@ videomenu.videomode Digital video mode wizard.initial_settings Initial settings found wizard.install_settings Do you want to install channels for Astra 19.2°E? wizard.welcome_head Welcome to the Setup Wizard -wizard.welcome_text Next steps will guide you through initial installation of the device.\nImportant: Your CoolStream set-top box can be conveniently controlled\nwith the web interface for timer management or live TV on the Web browser.\nDo not make it accessible to untrusted networks!\nDo you want to continue? +wizard.welcome_text Next steps will guide you through initial installation of the device.\nImportant: Your CST set-top box can be conveniently controlled\nwith the web interface for timer management or live TV on the Web browser.\nDo not make it accessible to untrusted networks!\nDo you want to continue? word.from from zapit.scantype scan for services zapit.scantype.all all services diff --git a/data/locale/unmaintained/czech.locale b/data/locale/unmaintained/czech.locale index 9c22e56a9..5dcc4aaa8 100644 --- a/data/locale/unmaintained/czech.locale +++ b/data/locale/unmaintained/czech.locale @@ -97,26 +97,32 @@ GENRE.TRAVEL_HOBBIES.6 inzerování/nakupování GENRE.TRAVEL_HOBBIES.7 zahrádkářství GENRE.UNKNOWN neznámý apidselector.head Výběr jazyka +audio.srs_algo Mód +audio.srs_algo_light Jemný +audio.srs_algo_normal Normální +audio.srs_iq SRS TruVolume +audio.srs_nmgr Potlačovač šumu +audio.srs_volume Výchozí hlasitost audiomenu.PCMOffset Snížení hlasitosti PCM audiomenu.analog_mode Analogový mód audiomenu.analog_out Analogový výstup +audiomenu.auto_lang Automatický výběr zvuku +audiomenu.auto_subs Automatický výběr titulků audiomenu.avs avs -audiomenu.dolbydigital Zvuk Dolby Digital -audiomenu.monoleft mono levý kanál -audiomenu.monoright mono pravý kanál -audiomenu.stereo stereo -audiomenu.hdmi_dd Zvuk DD na HDMI -audiomenu.spdif_dd Zvuk DD na SPDIF audiomenu.avsync A/V synch audiomenu.avsync_am Hlavní zvuk audiomenu.clockrec Vzorkování -audiomenu.auto_lang Automatický výběr zvuku -audiomenu.auto_subs Automatický výběr titulků -audiomenu.pref_languages Jazykové nastavení -audiomenu.pref_lang_head Nastavení jazyku zvuku/EPG +audiomenu.dolbydigital Zvuk Dolby Digital +audiomenu.hdmi_dd Zvuk DD na HDMI +audiomenu.monoleft mono levý kanál +audiomenu.monoright mono pravý kanál audiomenu.pref_lang Preferovaný jazyk -audiomenu.pref_subs_head Nastavení jazyku vybraných titulků +audiomenu.pref_lang_head Nastavení jazyku zvuku/EPG +audiomenu.pref_languages Jazykové nastavení audiomenu.pref_subs Preferované titulky +audiomenu.pref_subs_head Nastavení jazyku vybraných titulků +audiomenu.spdif_dd Zvuk DD na SPDIF +audiomenu.stereo stereo audioplayer.add přidej audioplayer.add_ic Icecast audioplayer.add_loc Seznam lokálních rádií @@ -134,7 +140,6 @@ audioplayer.fastforward přetoč dopředu audioplayer.follow Udělej výběr hraného audioplayer.head Seznam přehrávání audioplayer.highprio Velká priorita dekódování -audioplayer.spectrum lcd a-spektrum audioplayer.jump_backwards skoč dozadu audioplayer.jump_dialog_hint1 čas skoku audioplayer.jump_dialog_hint2 v sekundách. @@ -161,6 +166,7 @@ audioplayer.screensaver_timeout Vypnutí obrazu (minuta, 0=vypnutý) audioplayer.select_title_by_name Vyber titul podle názvu (SMS) audioplayer.show_playlist Zobraz seznam audioplayer.shuffle náhodně +audioplayer.spectrum lcd a-spektrum audioplayer.stop zastav audioplayer.title_artist Titul, Umělec audioplayerpicsettings.general Nastavení přehrávače @@ -186,20 +192,29 @@ bouqueteditor.switch přidej/odstraň bouqueteditor.switchmode TV/Rádio bouquetlist.head Bukety cablesetup.provider Kabelový poskytovatel +cam.empty Žádný modul v šachtě +cam.init_ok Inicializace modulu ukončená +cam.inserted Vložený modul do šachty +cam.removed Odstraněný modul z šachty +cam.reset Resetovat +cam.reset_standby Resetovat po spuštění +cam.settings Podmíněný přístup +cam.timeout Čas čekání uplynul,\nvracím se do menu +cam.waiting Čekám na odpověď +channellist.current_tp Aktuální transpondér channellist.edit Uprav channellist.epgtext_align_left do leva channellist.epgtext_align_right do prava channellist.extended Grafické EPG v seznamu -channellist.head Všechny kanály -channellist.nonefound Nenalezený seznam kanálů!\nVykonej vyhledání kanálů\n(MENU -> Služby) -channellist.since od -channellist.start spouští channellist.favs Oblíbené +channellist.head Všechny kanály +channellist.history Historie +channellist.make_hdlist Vytvoř seznam pro HD kanály +channellist.nonefound Nenalezený seznam kanálů!\nVykonej vyhledání kanálů\n(MENU -> Služby) channellist.provs Poskytovatelé channellist.sats Satelity -channellist.history Historie -channellist.current_tp Aktuální transpondér -channellist.make_hdlist Vytvoř seznam pro HD kanály +channellist.since od +channellist.start spouští colorchooser.alpha Průhlednost colorchooser.blue Modrý colorchooser.green Zelený @@ -208,13 +223,13 @@ colormenu.background Pozadí colormenu.fade Mizející menu colormenu.font Výběr písma colormenu.font_ttx Výběr teletextového písma +colormenu.hd_preset LCD colormenu.menucolors Barvy menu +colormenu.osd_preset Druh TV +colormenu.sd_preset CRT colormenu.textcolor Barva textu colormenu.themeselect Výběr témat colormenu.timing Čas zobrazení na OSD -colormenu.osd_preset Druh TV -colormenu.hd_preset LCD -colormenu.sd_preset CRT colormenusetup.menucontent Obsahové okno colormenusetup.menucontent_inactive Neaktivní v obsahovém okně colormenusetup.menucontent_selected Vybrané v obsahovém okně @@ -223,10 +238,14 @@ colorstatusbar.text Text stavového řádku colorthememenu.classic_theme Klasika colorthememenu.dblue_theme DarkBlue colorthememenu.dvb2k_theme DVB2000 -colorthememenu.red_theme Jednoduchý červený +colorthememenu.gray Šedá colorthememenu.head Výběr témat colorthememenu.neutrino_theme Neutrino -colorthememenu.gray Šedá +colorthememenu.red_theme Jednoduchý červený +cpu.freq Cpu kmitočet +cpu.freq_default default kmitočet +cpu.freq_normal Normal kmitočet +cpu.freq_standby Standby kmitočet date.Apr Dub date.Aug Srp date.Dec Pro @@ -266,15 +285,104 @@ eventfinder.start_search Spusť hledání eventlistbar.channelswitch přejdi eventlistbar.eventsort třídění eventlistbar.recordevent nahraj +extra.add_to_bouquet Přidání do buketu +extra.audio_run_player Zmáčknutí AUDIO spustí přehrávač +extra.auto_delete Auto-mazání +extra.auto_timeshift Auto-nahrávání, sec (0=vypnuté) +extra.cache_txt Zachytávání teletextu +extra.chadded Aktuální kanál byl přidaný do vybraného buketu....\n +extra.chalreadyinbq Aktuální kanál se už nachází ve vybraném buketu....\n +extra.dboxinfo Informace o systému +extra.east Východně +extra.fec_1_2 1/2 +extra.fec_2_3 2/3 +extra.fec_3_4 3/4 +extra.fec_5_6 5/6 +extra.fec_7_8 7/8 +extra.fec_auto Auto DVB-S +extra.fec_auto_s2 Auto DVB-S2 +extra.fec_s2_8psk_1_2 1/2 s2 8psk +extra.fec_s2_8psk_2_3 2/3 s2 8psk +extra.fec_s2_8psk_3_4 3/4 s2 8psk +extra.fec_s2_8psk_3_5 3/5 s2 8psk +extra.fec_s2_8psk_4_5 4/5 s2 8psk +extra.fec_s2_8psk_5_6 5/6 s2 8psk +extra.fec_s2_8psk_7_8 7/8 s2 8psk +extra.fec_s2_8psk_8_9 8/9 s2 8psk +extra.fec_s2_8psk_9_10 9/10 s2 8psk +extra.fec_s2_qpsk_1_2 1/2 s2 qpsk +extra.fec_s2_qpsk_2_3 2/3 s2 qpsk +extra.fec_s2_qpsk_3_4 3/4 s2 qpsk +extra.fec_s2_qpsk_3_5 3/5 s2 qpsk +extra.fec_s2_qpsk_4_5 4/5 s2 qpsk +extra.fec_s2_qpsk_5_6 5/6 s2 qpsk +extra.fec_s2_qpsk_7_8 7/8 s2 qpsk +extra.fec_s2_qpsk_8_9 8/9 s2 qpsk +extra.fec_s2_qpsk_9_10 9/10 s2 qpsk +extra.key_list_end Na konec +extra.key_list_start Na začátek +extra.key_plugin Tlačítko zobrazující PLUGIN +extra.key_timeshift Časový posuv +extra.key_unlock Odblokuj +extra.ladirection Umístění zem.šířky +extra.latitude Zem.šířka +extra.loadconfig Nahraj nastavení z ... +extra.loadkeys Nahraj nastavení kláves +extra.lodirection Umístění zem.délky +extra.logo Číslo loga(Startovací logo?) +extra.longitude Zem.délka +extra.menu_left_exit "Levý" = návrat menu +extra.north Severně +extra.record_time Rychlý čas nahrávání (hodiny) +extra.rotor_swap Vyměnit východ/západ motoru +extra.rounded_corners Vzhled rohů +extra.rounded_corners_off hranatý +extra.rounded_corners_on zaoblený +extra.saveconfig Ulož nastavení jako ... +extra.savekeys Ulož nastavení kláves +extra.scan_fast Rychlé prohledávání (XML) +extra.scan_full Úplné prohledávání (XML+NIT) +extra.scrambled_message Zpráva kódování +extra.sms_channel Mód SMS pro kanál +extra.south Jižně +extra.start_tostandby Spuštění do stavu připravenosti +extra.temp_timeshift Dočasný časový posuv +extra.timeshift_pause Pozastavení časového posuvu +extra.tp.pol_v V +extra.tp_fec FEC +extra.tp_freq Kmitočet +extra.tp_mod Modulace +extra.tp_mod_128 QAM/128 +extra.tp_mod_16 QAM/16 +extra.tp_mod_256 QAM/256 +extra.tp_mod_32 QAM/32 +extra.tp_mod_64 QAM/64 +extra.tp_pol Polarizace +extra.tp_pol_h H +extra.tp_rate SymbolRate +extra.update_dir Adresář aktualizace +extra.use_gotoxx Použij gotoXX +extra.volume_pos Ukazovatel hlasitosti +extra.west Západně +extra.zap_cycle Vypnout historii kanálů +extra.zapit_fe_timeout Časový limit naladění (1 = 10 msek) +extra.zapit_hvoltage 18V při točení motoru +extra.zapit_make_bouquet Udělejte ostatní seznam kanálů +extra.zapit_menu Možnosti přepínání +extra.zapit_motor_speed Rychlost točení (10 = 1st/sek) +extra.zapit_scanpids Vyhledávání s PIDy +extra.zapit_sdt_changed Změněné kanály, načítání nastavení. +extra.zapit_write_names Zapsání názvů kanálů +fan_speed Rychlost CPU ventilátoru favorites.addchannel Aktuální kanál bude přidaný \ndo buketu "Oblíbené". \nTo potrvá několik vteřin... favorites.bouquetname Oblíbené favorites.bqcreated Buket "Oblíbené" byl vytvořený...\n favorites.chadded Aktuální kanál byl přidaný do oblíbených...\n favorites.chalreadyinbq Aktuální kanál se už nachází v oblíbených...\n +favorites.copy Kopíruj buket do Oblíbených favorites.finalhint \nPoužij editor buketů pro dokončení\změn v oblíbených.\n favorites.menueadd Přidej kanál do oblíbených favorites.nobouquets Oblíbené jsou dostupné jen při použití Buketů. -favorites.copy Kopíruj buket do Oblíbených filebrowser.delete smaž filebrowser.denydirectoryleave Hlavní adresář filebrowser.dodelete1 smaž @@ -351,13 +459,13 @@ flashupdate.versioncheck Kontrola verze flashupdate.writeflash Zapisování celého IMAGE do paměti FLASH flashupdate.writeflashmtd Zapisování jednoho oddílu flashupdate.wrongbase Vaše verze je odlišná.\nPokračovat? -fontmenu.menu Menu fontmenu.channellist Seznam kanálů fontmenu.epg EPG fontmenu.eventlist Programový průvodce fontmenu.gamelist Seznam her fontmenu.head Nastavení písma fontmenu.infobar Stavový řádek +fontmenu.menu Menu fontmenu.sizes Velikosti písma fontsize.channel_num_zap přímý výběr fontsize.channellist Seznam kanálů @@ -384,6 +492,40 @@ fontsize.menu_info Informační menu fontsize.menu_title Titulek menu gtxalpha.alpha1 Alfa 1 gtxalpha.alpha2 Alfa 2 +hdd_10min 10 minut +hdd_1min 1 minuta +hdd_20min 20 minut +hdd_30min 30 minut +hdd_5min 5 minut +hdd_60min 60 minut +hdd_activate Použij nastavení +hdd_check Kontrola souborového systému +hdd_check_failed Chyba kontroly disku ! +hdd_ext3 Souborový systém Ext3 +hdd_fast minimálně +hdd_format Formátování HDD +hdd_format_failed Chyba během formátování disku ! +hdd_format_warn Opravdu formátovat? Všechna data budou ztracena! +hdd_fs Souborový systém +hdd_manage Správa HDD +hdd_middle středně +hdd_noise Hlučnost +hdd_not_found Nenalezený disk +hdd_reiser ReiserFS +hdd_settings Nastavení HDD +hdd_sleep Čas uspání +hdd_slow maximálně +hdd_umount_warn Chyba během odpojení disku ! +imageinfo.creator Vytvořil: +imageinfo.date Datum: +imageinfo.dokumentation Dokumentace: +imageinfo.forum Fórum: +imageinfo.head Informace o IMAGE +imageinfo.homepage Domů: +imageinfo.image Image: +imageinfo.license Licence: +imageinfo.version Verze: +inetradio.name Internetové rádio infoviewer.epgnotload EPG informace nejsou načteny... infoviewer.epgwait čekám na informace EPG... infoviewer.eventlist Přehled EPG @@ -450,9 +592,9 @@ lcdmenu.statusline.both hlasitost/hraný čas lcdmenu.statusline.playtime odehraný čas lcdmenu.statusline.volume hlasitost ledcontroler.menu Podsvícení Power tlačítka -ledcontroler.mode.tv TV mód ledcontroler.mode.deepstandby Hluboký spánek ledcontroler.mode.standby Připravenost +ledcontroler.mode.tv TV mód ledcontroler.off Led1 a Led2 vyp. ledcontroler.on.all Led1 a Led2 zap. ledcontroler.on.led1 Led1 zap. @@ -477,18 +619,18 @@ mainmenu.shutdown Vypnout mainmenu.sleeptimer Časovač vypnutí mainmenu.tvmode TV mainsettings.audio Zvuk -mainsettings.osd Nastavení OSD mainsettings.head Nastavení mainsettings.keybinding Nastavení kláves mainsettings.language Jazyk -mainsettings.timezone Časová zóna mainsettings.lcd Zobrazovač VFD mainsettings.manage Správa nastavení mainsettings.misc Jiné nastavení mainsettings.network Síť +mainsettings.osd Nastavení OSD mainsettings.recording Nahrávání mainsettings.savesettingsnow Uložení nastavení mainsettings.savesettingsnow_hint Zapisování nastavení,\nprosím čekej... +mainsettings.timezone Časová zóna mainsettings.video Obraz menu.back zpět menu.next další (MENU ukončí) @@ -502,6 +644,21 @@ messagebox.ok ok messagebox.yes ano miscsettings.channellist Nastavení seznamu kanálů miscsettings.channellist_epgtext_align Zarovnej EPG text +miscsettings.epg_cache Zachytávání EPG (dni) +miscsettings.epg_cache_hint1 Jak dlouho uchovávat data EPG v budoucnosti? +miscsettings.epg_cache_hint2 Nastavení ve dnech. +miscsettings.epg_dir Adresář EPG +miscsettings.epg_extendedcache Podrobný popis programu (hodiny) +miscsettings.epg_extendedcache_hint1 Jak dlouho zachytávat rozšířený +miscsettings.epg_extendedcache_hint2 popis programu (nastavení v hodinách) +miscsettings.epg_head Nastavení EPG +miscsettings.epg_max_events Maximum programů +miscsettings.epg_max_events_hint1 Kolik programů bude uložených? +miscsettings.epg_max_events_hint2 normálně 6000, 0 pro zrušení limitu +miscsettings.epg_old_events Odstraň neaktuální EPG +miscsettings.epg_old_events_hint1 Jak dlouho zapisovat data EPG po uplynutí doby? +miscsettings.epg_old_events_hint2 Nastavení v hodinách. +miscsettings.epg_save Ulož/Obnov EPG po restartu miscsettings.general Hlavní nastavení miscsettings.head Jiné nastavení miscsettings.infobar Infořádek @@ -521,79 +678,42 @@ miscsettings.shutdown_count_hint2 do hlubokého spánku (0=vypnuté) miscsettings.shutdown_real Umožnění spánku miscsettings.shutdown_real_rcdelay Zpoždění vypnutí miscsettings.virtual_zap_mode Virtuální přepínání -miscsettings.epg_cache Zachytávání EPG (dni) -miscsettings.epg_cache_hint1 Jak dlouho uchovávat data EPG v budoucnosti? -miscsettings.epg_cache_hint2 Nastavení ve dnech. -miscsettings.epg_dir Adresář EPG -miscsettings.epg_extendedcache Podrobný popis programu (hodiny) -miscsettings.epg_extendedcache_hint1 Jak dlouho zachytávat rozšířený -miscsettings.epg_extendedcache_hint2 popis programu (nastavení v hodinách) -miscsettings.epg_head Nastavení EPG -miscsettings.epg_max_events Maximum programů -miscsettings.epg_max_events_hint1 Kolik programů bude uložených? -miscsettings.epg_max_events_hint2 normálně 6000, 0 pro zrušení limitu -miscsettings.epg_old_events Odstraň neaktuální EPG -miscsettings.epg_old_events_hint1 Jak dlouho zapisovat data EPG po uplynutí doby? -miscsettings.epg_old_events_hint2 Nastavení v hodinách. -miscsettings.epg_save Ulož/Obnov EPG po restartu -motorcontrol.head Satelitní vyhledávač -motorcontrol.user_menu Uživatelské menu -motorcontrol.install_menu Instalační menu -motorcontrol.step_west Krok/Posuv motoru na Západ (b,c) -motorcontrol.step_east Krok/Posuv motoru na Východ (b,c) -motorcontrol.halt Zastav motor -motorcontrol.west_limit Nastav západní (soft) limit -motorcontrol.east_limit Nastav východní (soft) limit -motorcontrol.enable_limit Zapni (soft) limity -motorcontrol.disable_limit Vypni (soft) limity -motorcontrol.ref_position Jdi na referenční pozici motorcontrol.calc_positions Přepočítej pozice -motorcontrol.pos_increase Zvyš pozici motoru (a) -motorcontrol.pos_decrease Sniž pozici motoru (a) -motorcontrol.step_drive Přepni Způsob Krok/Posuv (b) -motorcontrol.store Ulož pozici motoru (a) -motorcontrol.step_increase Zvyš velikost kroku (c) -motorcontrol.step_decrease Sniž velikost kroku (c) -motorcontrol.goto Jdi na pozici motoru (a) -motorcontrol.notdef Nepoužité -motorcontrol.motor_pos (a) Pozice motoru: -motorcontrol.settings Nastavení ovládání motoru -motorcontrol.movement (b) Přesun: -motorcontrol.step_mode mód kroku +motorcontrol.disable_limit Vypni (soft) limity motorcontrol.drive_mode mód pohybu motorcontrol.drive_mode_auto Zastavení pohybu Ručně/Auto -motorcontrol.timed_mode čas pro mód kroku +motorcontrol.east_limit Nastav východní (soft) limit +motorcontrol.enable_limit Zapni (soft) limity +motorcontrol.goto Jdi na pozici motoru (a) +motorcontrol.halt Zastav motor +motorcontrol.head Satelitní vyhledávač +motorcontrol.install_menu Instalační menu +motorcontrol.motor_pos (a) Pozice motoru: +motorcontrol.movement (b) Přesun: +motorcontrol.msec ms +motorcontrol.no_mode nepoužité +motorcontrol.notdef Nepoužité +motorcontrol.override Nahradit pozici určenou pro +motorcontrol.pos_decrease Sniž pozici motoru (a) +motorcontrol.pos_increase Zvyš pozici motoru (a) +motorcontrol.ref_position Jdi na referenční pozici +motorcontrol.sat_pos Pozice satelitu (krokovací mód): +motorcontrol.settings Nastavení ovládání motoru +motorcontrol.status Stav +motorcontrol.step_decrease Sniž velikost kroku (c) +motorcontrol.step_drive Přepni Způsob Krok/Posuv (b) +motorcontrol.step_east Krok/Posuv motoru na Východ (b,c) +motorcontrol.step_increase Zvyš velikost kroku (c) +motorcontrol.step_mode mód kroku motorcontrol.step_size (c) Velikost kroku: +motorcontrol.step_west Krok/Posuv motoru na Západ (b,c) motorcontrol.stop_moving Zastav na signálu (pohybování) motorcontrol.stop_stopped Zastav na signálu (zastavení) -motorcontrol.no_mode nepoužité -motorcontrol.msec ms -motorcontrol.status Stav -motorcontrol.sat_pos Pozice satelitu (krokovací mód): -motorcontrol.override Nahradit pozici určenou pro -moviebrowser.option_browser Možnosti prohlížeče +motorcontrol.store Ulož pozici motoru (a) +motorcontrol.timed_mode čas pro mód kroku +motorcontrol.user_menu Uživatelské menu +motorcontrol.west_limit Nastav západní (soft) limit moviebrowser.book_clear_all Vyčisti všechno -moviebrowser.menu_save Ulož změny -moviebrowser.menu_save_all Spusť aktualizaci informací o souboru -moviebrowser.info_head_update Ulož změny ve všech informačních souborech filmu -moviebrowser.update_if_dest_empty_only Kopírovat jen když je cílové místo prázdné -moviebrowser.serie_auto_create Automaticky vytvoř seriál -moviebrowser.load_default Nahrát přednastavené nastavení -moviebrowser.browser_row_head Nastavení řádku -moviebrowser.browser_row_nr Počet sloupců -moviebrowser.browser_row_item Položka sloupce -moviebrowser.browser_row_width Šířka sloupce -moviebrowser.reload_at_start Načítání informace o filmu při startu -moviebrowser.remount_at_start Připoj při startu -moviebrowser.dir_head Doplňkové adresáře -moviebrowser.dir Adresář -moviebrowser.use_dir Použij adresář -moviebrowser.use_rec_dir Použij adresář nahrávání -moviebrowser.use_movie_dir Použij adresář filmů -moviebrowser.hide_series Skrýt seriály -moviebrowser.last_record_max_items Počet linek posledního nahrávání -moviebrowser.last_play_max_items Počet linek posledního přehrávání -moviebrowser.browser_frame_high Výška prohlížeče [pixel] moviebrowser.book_head Záložky moviebrowser.book_lastmoviestop Poslední přerušení: moviebrowser.book_movieend Konec filmu: @@ -604,6 +724,13 @@ moviebrowser.book_position Pozice: moviebrowser.book_type Skok (<0 vzad , >0 vpřed): moviebrowser.book_type_backward Opakovat moviebrowser.book_type_forward Skok za +moviebrowser.browser_frame_high Výška prohlížeče [pixel] +moviebrowser.browser_row_head Nastavení řádku +moviebrowser.browser_row_item Položka sloupce +moviebrowser.browser_row_nr Počet sloupců +moviebrowser.browser_row_width Šířka sloupce +moviebrowser.dir Adresář +moviebrowser.dir_head Doplňkové adresáře moviebrowser.edit_book Změň záložku moviebrowser.edit_book_name_info1 Zadání nového názvu záložky moviebrowser.edit_book_name_info2 název knihy @@ -620,6 +747,7 @@ moviebrowser.head TS přehrávač filmů moviebrowser.head_filter Filtrování filmů podle kategorie: moviebrowser.head_playlist Poslední puštěný: moviebrowser.head_recordlist Posledně nahraný: +moviebrowser.hide_series Skrýt seriály moviebrowser.hint_jumpbackward Skok vzad o 5s\n '0' zruš moviebrowser.hint_jumpforward Skok vpřed o 5s\n '0' zruš moviebrowser.hint_movieend Ukončení sledování za 5 s\n '0' zruš @@ -631,6 +759,7 @@ moviebrowser.info_filename Název moviebrowser.info_genre_major Žánr moviebrowser.info_genre_minor Vedlejší žánr moviebrowser.info_head Informace o filmu +moviebrowser.info_head_update Ulož změny ve všech informačních souborech filmu moviebrowser.info_info1 Info 1 moviebrowser.info_length Délka (Min) moviebrowser.info_parental_lockage Rodičovský zámek @@ -650,6 +779,9 @@ moviebrowser.info_serie Seriál moviebrowser.info_size Velikost (MB) moviebrowser.info_title Titul moviebrowser.info_videoformat Obraz +moviebrowser.last_play_max_items Počet linek posledního přehrávání +moviebrowser.last_record_max_items Počet linek posledního nahrávání +moviebrowser.load_default Nahrát přednastavené nastavení moviebrowser.menu_directories_head Adresáře moviebrowser.menu_help_head Nápověda moviebrowser.menu_main_bookmarks Záložky @@ -657,11 +789,17 @@ moviebrowser.menu_main_head Nastavení moviebrowser.menu_nfs_head Nastavení NFS moviebrowser.menu_parental_lock_activated Aktivace moviebrowser.menu_parental_lock_activated_no ne -moviebrowser.menu_parental_lock_activated_yes ano moviebrowser.menu_parental_lock_activated_no_temp ne (dočasně) +moviebrowser.menu_parental_lock_activated_yes ano moviebrowser.menu_parental_lock_head Blokování moviebrowser.menu_parental_lock_rate_head Blokovat film z ... +moviebrowser.menu_save Ulož změny +moviebrowser.menu_save_all Spusť aktualizaci informací o souboru +moviebrowser.option_browser Možnosti prohlížeče +moviebrowser.reload_at_start Načítání informace o filmu při startu +moviebrowser.remount_at_start Připoj při startu moviebrowser.scan_for_movies Hledej pro film ... +moviebrowser.serie_auto_create Automaticky vytvoř seriál moviebrowser.serie_head Seriály moviebrowser.serie_name Změna názvu moviebrowser.short_audio Zvuk @@ -686,6 +824,10 @@ moviebrowser.short_size Velikost moviebrowser.short_title Titul moviebrowser.start_head Dívat se na film od: moviebrowser.start_record_start Začátek filmu +moviebrowser.update_if_dest_empty_only Kopírovat jen když je cílové místo prázdné +moviebrowser.use_dir Použij adresář +moviebrowser.use_movie_dir Použij adresář filmů +moviebrowser.use_rec_dir Použij adresář nahrávání movieplayer.bookmark Záložky movieplayer.bookmarkname Název záložky movieplayer.bookmarkname_hint1 Vložení názvu @@ -707,6 +849,15 @@ movieplayer.tshelp7 asi 1 min dopředu movieplayer.tshelp8 asi 5 min dozadu movieplayer.tshelp9 asi 5 min dopředu movieplayer.tsplayback Přehrát TS +mpkey.audio Zvuková stpopa +mpkey.bookmark Ulož záložku +mpkey.forward Dopředu +mpkey.pause Přeruš +mpkey.play Přehraj +mpkey.plugin Spusť PLUGIN +mpkey.rewind Dozadu +mpkey.stop Zastav +mpkey.time Zobrazení času networkmenu.broadcast Vysílání networkmenu.dhcp Převzetí z DHCP networkmenu.gateway Předvolená brána @@ -727,6 +878,7 @@ networkmenu.setupnow Použij nastavení sítě networkmenu.setuponstartup Nastavení sítě při startu networkmenu.show Zobrazení síťového nastavení networkmenu.test Otestování sítě +neutrino_starting Spuštění Neutrina... nfs.alreadymounted Adresář je už připojený nfs.automount Připoj při spuštění nfs.dir Adresář/sdílení @@ -759,6 +911,7 @@ options.fb FRAMEBUFFER options.null nic options.off ne options.on ano +options.on.without_messages Bez zpráv options.serial SERIÁL parentallock.changepin Změna PIN kódu parentallock.changepin_hint1 Zadání Vašeho nového bezpečnostního PIN kódu! @@ -825,7 +978,6 @@ recordingmenu.apids_ac3 Nahraj zvuk AC3 recordingmenu.apids_alt Nahraj ostatní zvukové stopy recordingmenu.apids_std Nahraj standartní zvuk recordingmenu.defdir Adresář nahrávání -recordingmenu.tsdir Adresář časového posuvu recordingmenu.file disk (soubor) recordingmenu.help Nahrávací zařízení:\n--------------------------------------\nserver:\npotřebný streamovací SW na PC\n\(analog) VCR:\npotřebný VCR (druhý SCART)\n\ndisk (soubor):\npotřebný připojený síťový NFS adresář\nnebo vnitřní HDD disk\nTS: použij SPTS mód(dBox2)\nPES: nepoužij SPTS mód(dBox2)\n\n\nMaximální velikost souboru:\n---------------------\nNFS V2: 2 GB (2048 MB)\nNFS V3: téměř nekonečné (0 MB)\nFAT: 2 GB (2048 MB)\nFAT32: 4 GB (4096 MB)\n\nPro NFS (UDP) se doporučuje synchronizovaný zápis recordingmenu.off vypnuté @@ -833,49 +985,54 @@ recordingmenu.save_in_channeldir Zapsání do adresáře kanálu recordingmenu.server server recordingmenu.server_mac Adresa MAC serveru recordingmenu.setupnow Použij nastavení +recordingmenu.tsdir Adresář časového posuvu recordingmenu.vcr videomagnetofon recordingmenu.zap_on_announce Informuj o zapnutí nahrávání recordtimer.announce Začátek nahrávání za pár minut. repeatblocker.hint_1 Doba zpoždění (ms) mezi dvěma stlačeními klávesy repeatblocker.hint_2 0 = vypnutí blokování (červené tlačítko) +reset_all Tovární nastavení +reset_channels Smazání všech kanálů +reset_confirm Skutečně? +reset_settings Návrat k přednastavenému nastavení +satsetup.auto_scan Automatické prohledání vybraného satelitu +satsetup.auto_scan_all Automatické prohledání vybraných satelitů +satsetup.comm_input Potvrzený vstup satsetup.diseqc DiSEqC satsetup.diseqc10 DiSEqC 1.0 satsetup.diseqc11 DiSEqC 1.1 satsetup.diseqc12 DiSEqC 1.2 satsetup.diseqc_advanced Rozšířené satsetup.diseqc_com_uncom Potvrzený/Nepotvrzený +satsetup.diseqc_input DiSEqC vstup satsetup.diseqc_uncom_com Nepotvrzený/Potvrzený satsetup.diseqcrepeat DiSEqC opakování satsetup.extended Nastavení DiSEqC satsetup.extended_motor Nastavení motoru +satsetup.fastscan_all SD a HD +satsetup.fastscan_hd jen HD +satsetup.fastscan_head Rychlé prohledání (Astra 1 - 12515 MHz) +satsetup.fastscan_prov Poskytovatel +satsetup.fastscan_prov_cd CanalDigitaal +satsetup.fastscan_prov_telesat TéléSAT +satsetup.fastscan_prov_tvv TV Vlaanderen +satsetup.fastscan_sd jen SD +satsetup.fastscan_type Typ prohledání +satsetup.lofh LNB horní pásmo +satsetup.lofl LNB spodní pásmo +satsetup.lofs LNB přepnutí pásma +satsetup.manual_scan Ruční prohledání satsetup.minidiseqc Mini-DiSEqC +satsetup.motor_pos Pozice v motoru satsetup.nodiseqc bez DiSEqC +satsetup.sat_setup Nastavení vstupů a LNB pro satelity satsetup.satellite Satelit satsetup.smatvremote SMATV ladění -satsetup.sat_setup Nastavení vstupů a LNB pro satelity -satsetup.lofl LNB spodní pásmo -satsetup.lofh LNB horní pásmo -satsetup.lofs LNB přepnutí pásma -satsetup.diseqc_input DiSEqC vstup satsetup.uncomm_input Nepotvrzený vstup -satsetup.comm_input Potvrzený vstup -satsetup.motor_pos Pozice v motoru -satsetup.auto_scan Automatické prohledání vybraného satelitu -satsetup.auto_scan_all Automatické prohledání vybraných satelitů -satsetup.manual_scan Ruční prohledání +satsetup.usals_repeat Opakování USALS příkazu satsetup.use_fta_flag Jen nekódované satsetup.use_nit Použití NIT satsetup.use_usals Použití USALS -satsetup.usals_repeat Opakování USALS příkazu -satsetup.fastscan_head Rychlé prohledání (Astra 1 - 12515 MHz) -satsetup.fastscan_type Typ prohledání -satsetup.fastscan_sd jen SD -satsetup.fastscan_hd jen HD -satsetup.fastscan_all SD a HD -satsetup.fastscan_prov Poskytovatel -satsetup.fastscan_prov_cd CanalDigitaal -satsetup.fastscan_prov_tvv TV Vlaanderen -satsetup.fastscan_prov_telesat TéléSAT scants.abort_body Skutečně přerušit vyhledávání? scants.abort_header Přerušení vyhledávání scants.actcable Kabel: @@ -896,15 +1053,17 @@ scants.numberofradioservices Radio scants.numberoftotalservices Celkem scants.numberoftvservices TV scants.provider Poskytovatel: +scants.select_tp Vyber transpondér scants.startnow Spusť prohledávání scants.test Otestování signálu scants.transponders Transpondéry: -scants.select_tp Vyber transpondér +scrambled_channel Kódovaný kanál screensetup.lowerright zelený = dolní, pravý okraj screensetup.upperleft červený = horní, levý okraj servicemenu.getplugins Načítání PLUGINů servicemenu.getplugins_hint Načítání PLUGINů,\nprosím čekej... servicemenu.head Služby +servicemenu.imageinfo Informace o IMAGE servicemenu.reload Načítání seznamu kanálů servicemenu.reload_hint Načítání seznamu kanálů,\nprosím čekej... servicemenu.restart Restart software @@ -912,7 +1071,10 @@ servicemenu.restart_hint Restartování, prosím čekej... servicemenu.restart_refused_recording Neumožněné restartování, probíhá nahrávání servicemenu.scants Hledání kanálů servicemenu.update Aktualizace software +settings.backup Záloha nastavení +settings.backup_failed Chybná záloha! settings.help Nápověda +settings.menu_pos Umístění nabídky settings.missingoptionsconffile Nastavení Neutrino byly aktualizované.\nNové možnosti budou mít přednastavené hodnoty. settings.noconffile Nenalezené nastavení Neutrino.\nPoužité budou přednastavené hodnoty. settings.pos_bottom_left levý spodek @@ -921,9 +1083,10 @@ settings.pos_default_center vrchní střed settings.pos_higher_center spodní střed settings.pos_top_left levý vrch settings.pos_top_right pravý vrch -settings.menu_pos Umístění nabídky -shutdowntimer.announce Vypnutí boxu za minutu.\nZrušit vypnutí? +settings.restore Obnovení nastavení +settings.restore_warn Budou nahrazené všechny nastavení a restartuji se\nPokračovat ? shutdown.recoding_query Skutečně přerušit nahrávání? +shutdowntimer.announce Vypnutí boxu za minutu.\nZrušit vypnutí? sleeptimerbox.announce Do vypnutí chybí minuta. sleeptimerbox.hint1 Čas do vypnutí v minutách (000=vypnuté) sleeptimerbox.hint2 Po uplynutí tohoto času se vypnu. @@ -944,6 +1107,8 @@ streaming.dir_not_writable Do nahrávacího adresáře není možné nahrávat. streaming.write_error Nahrávání bylo přerušené\nprotože vznikla chyba během zapisovacího procesu. stringinput.caps velké/malé znaky stringinput.clear všechno smaž +subtitles.head Titulky +subtitles.stop Vypnout titulky timer.eventrecord.msg ... Ukončené, nebo neukončené timer.eventrecord.title Plánovač nahrávání timer.eventtimed.msg Tento program je naplánovaný.\nBox bude zapnutý a \npřepnutý na tento kanál ve stanoveném čase. @@ -1038,222 +1203,57 @@ usermenu.item_epg_misc Funkce EPG usermenu.item_none Nic usermenu.item_vtxt Teletext usermenu.name Název +video_mode_ok Video mód pracuje správně? +videomenu.43mode Zobrazení formátu 4:3 +videomenu.analog_hd_rgb_cinch RGB na CINCH (HD) +videomenu.analog_hd_rgb_scart RGB na SCART (HD) +videomenu.analog_hd_yprpb_cinch YPbPr na CINCH (HD) +videomenu.analog_hd_yprpb_scart YPbPr na SCART (HD) +videomenu.analog_mode Analogový výstup +videomenu.analog_sd_rgb_cinch RGB na CINCH (SD) +videomenu.analog_sd_rgb_scart RGB na SCART (SD) +videomenu.analog_sd_yprpb_cinch YPbPr na CINCH (SD) +videomenu.analog_sd_yprpb_scart YPbPr na SCART (SD) +videomenu.auto Automaticky +videomenu.brightness Jas +videomenu.cinch CINCH +videomenu.contrast Kontrast videomenu.csync korekce synchronizace +videomenu.dbdr MPEG2 deblock/dering +videomenu.dbdr_both deblock+dering +videomenu.dbdr_deblock deblock +videomenu.dbdr_none nic +videomenu.enabled_modes Nastavení módů pro VF klávesu +videomenu.fullscreen Celý obraz +videomenu.hdmi_cec Uživatelské ovládání (HDMI-CEC) +videomenu.hdmi_cec_mode Mód HDMI-CEC +videomenu.hdmi_cec_mode_off vyp +videomenu.hdmi_cec_mode_recorder jako Rekordér +videomenu.hdmi_cec_mode_tuner jako Tuner +videomenu.hdmi_cec_standby Použití CEC v pohotovosti +videomenu.hdmi_cec_view_on Použití CEC při sledování +videomenu.hue Nasycení +videomenu.letterbox Letterbox +videomenu.panscan Pan&Scan +videomenu.panscan2 14:9 Pan&Scan +videomenu.saturation Barevnost +videomenu.scart SCART videomenu.screensetup Nastavení zobrazení OSD +videomenu.sharpness Ostrost videomenu.tv-scart TV SCART videomenu.vcrsignal Typ signálu VCR výstupu videomenu.vcrsignal_composite CVBS videomenu.vcrsignal_svideo S-Video videomenu.videoformat Formát obrazu +videomenu.videoformat_149 14:9 videomenu.videoformat_169 16:9 videomenu.videoformat_43 4:3 -videomenu.videoformat_149 14:9 -videomenu.43mode Zobrazení formátu 4:3 -videomenu.panscan Pan&Scan -videomenu.panscan2 14:9 Pan&Scan -videomenu.letterbox Letterbox -videomenu.fullscreen Celý obraz -videomenu.auto Automaticky -videomenu.analog_mode Analogový výstup -videomenu.analog_sd_rgb_scart RGB na SCART (SD) -videomenu.analog_sd_rgb_cinch RGB na CINCH (SD) -videomenu.analog_sd_yprpb_scart YPbPr na SCART (SD) -videomenu.analog_sd_yprpb_cinch YPbPr na CINCH (SD) -videomenu.analog_hd_rgb_scart RGB na SCART (HD) -videomenu.analog_hd_rgb_cinch RGB na CINCH (HD) -videomenu.analog_hd_yprpb_scart YPbPr na SCART (HD) -videomenu.analog_hd_yprpb_cinch YPbPr na CINCH (HD) -videomenu.scart SCART -videomenu.cinch CINCH -videomenu.hdmi_cec Uživatelské ovládání (HDMI-CEC) -videomenu.hdmi_cec_mode Mód HDMI-CEC -videomenu.hdmi_cec_mode_off vyp -videomenu.hdmi_cec_mode_tuner jako Tuner -videomenu.hdmi_cec_mode_recorder jako Rekordér -videomenu.hdmi_cec_standby Použití CEC v pohotovosti -videomenu.hdmi_cec_view_on Použití CEC při sledování -videomenu.dbdr MPEG2 deblock/dering -videomenu.dbdr_none nic -videomenu.dbdr_deblock deblock -videomenu.dbdr_both deblock+dering -videomenu.enabled_modes Nastavení módů pro VF klávesu -videomenu.contrast Kontrast -videomenu.brightness Jas -videomenu.sharpness Ostrost -videomenu.saturation Barevnost -videomenu.hue Nasycení +videomenu.videomode Obrazový mód +wizard.welcome_head Vítejte v Průvodci nastavení +wizard.welcome_text Další kroky provedou základní instalaci tohoto zařízení.\nChceš pokračovat?\nGratulujeme k zakoupení CST. Následující \nkroky tě provedou počáteční instalací nastavení přístroje.\nPřejeme ti hodně radosti s tímto přijímačem!\nDalší krok ? zapit.scantype Vyhledávání kanálů zapit.scantype.all všech zapit.scantype.radio jen Radio zapit.scantype.tv jen TV zapit.scantype.tvradio TV a Radio zaptotimer.announce Minuta do změny kanálu. -extra.dboxinfo Informace o systému -extra.start_tostandby Spuštění do stavu připravenosti -extra.rounded_corners Vzhled rohů -extra.rounded_corners_off hranatý -extra.rounded_corners_on zaoblený -extra.rotor_swap Vyměnit východ/západ motoru -extra.logo Číslo loga(Startovací logo?) -extra.scan_full Úplné prohledávání (XML+NIT) -extra.scan_fast Rychlé prohledávání (XML) -hdd_slow maximálně -hdd_middle středně -hdd_fast minimálně -hdd_ext3 Souborový systém Ext3 -hdd_reiser ReiserFS -hdd_1min 1 minuta -hdd_5min 5 minut -hdd_10min 10 minut -hdd_20min 20 minut -hdd_30min 30 minut -hdd_60min 60 minut -hdd_sleep Čas uspání -hdd_noise Hlučnost -hdd_activate Použij nastavení -hdd_fs Souborový systém -hdd_format Formátování HDD -hdd_format_warn Opravdu formátovat? Všechna data budou ztracena! -hdd_format_failed Chyba během formátování disku ! -hdd_umount_warn Chyba během odpojení disku ! -hdd_check Kontrola souborového systému -hdd_check_failed Chyba kontroly disku ! -hdd_settings Nastavení HDD -hdd_manage Správa HDD -hdd_not_found Nenalezený disk -extra.zap_cycle Vypnout historii kanálů -extra.sms_channel Mód SMS pro kanál -extra.tp_freq Kmitočet -extra.tp_rate SymbolRate -extra.tp_pol Polarizace -extra.tp.pol_v V -extra.tp_pol_h H -extra.tp_fec FEC -extra.fec_auto Auto DVB-S -extra.fec_auto_s2 Auto DVB-S2 -extra.fec_1_2 1/2 -extra.fec_2_3 2/3 -extra.fec_3_4 3/4 -extra.fec_5_6 5/6 -extra.fec_7_8 7/8 -extra.tp_mod Modulace -extra.tp_mod_16 QAM/16 -extra.tp_mod_32 QAM/32 -extra.tp_mod_64 QAM/64 -extra.tp_mod_128 QAM/128 -extra.tp_mod_256 QAM/256 -extra.zapit_menu Možnosti přepínání -extra.zapit_make_bouquet Udělejte ostatní seznam kanálů -extra.zapit_motor_speed Rychlost točení (10 = 1st/sek) -extra.zapit_fe_timeout Časový limit naladění (1 = 10 msek) -extra.zapit_scanpids Vyhledávání s PIDy -extra.zapit_hvoltage 18V při točení motoru -reset_channels Smazání všech kanálů -reset_settings Návrat k přednastavenému nastavení -reset_all Tovární nastavení -reset_confirm Skutečně? -settings.backup Záloha nastavení -settings.backup_failed Chybná záloha! -settings.restore Obnovení nastavení -settings.restore_warn Budou nahrazené všechny nastavení a restartuji se\nPokračovat ? -extra.add_to_bouquet Přidání do buketu -extra.key_list_start Na začátek -extra.key_list_end Na konec -extra.chadded Aktuální kanál byl přidaný do vybraného buketu....\n -extra.chalreadyinbq Aktuální kanál se už nachází ve vybraném buketu....\n -extra.menu_left_exit "Levý" = návrat menu -extra.zapit_write_names Zapsání názvů kanálů -extra.update_dir Adresář aktualizace -extra.audio_run_player Zmáčknutí AUDIO spustí přehrávač -mpkey.rewind Dozadu -mpkey.forward Dopředu -mpkey.pause Přeruš -mpkey.stop Zastav -mpkey.play Přehraj -mpkey.audio Zvuková stpopa -mpkey.time Zobrazení času -mpkey.bookmark Ulož záložku -mpkey.plugin Spusť PLUGIN -extra.loadkeys Nahraj nastavení kláves -extra.savekeys Ulož nastavení kláves -extra.loadconfig Nahraj nastavení z ... -extra.saveconfig Ulož nastavení jako ... -videomenu.videomode Obrazový mód -extra.key_timeshift Časový posuv -extra.key_plugin Tlačítko zobrazující PLUGIN -extra.timeshift_pause Pozastavení časového posuvu -extra.key_unlock Odblokuj -servicemenu.imageinfo Informace o IMAGE -imageinfo.creator Vytvořil: -imageinfo.date Datum: -imageinfo.dokumentation Dokumentace: -imageinfo.forum Fórum: -imageinfo.head Informace o IMAGE -imageinfo.homepage Domů: -imageinfo.image Image: -imageinfo.license Licence: -imageinfo.version Verze: -inetradio.name Internetové rádio -extra.cache_txt Zachytávání teletextu -extra.scrambled_message Zpráva kódování -extra.volume_pos Ukazovatel hlasitosti -extra.use_gotoxx Použij gotoXX -extra.latitude Zem.šířka -extra.longitude Zem.délka -extra.ladirection Umístění zem.šířky -extra.lodirection Umístění zem.délky -extra.south Jižně -extra.north Severně -extra.east Východně -extra.west Západně -options.on.without_messages Bez zpráv -extra.zapit_sdt_changed Změněné kanály, načítání nastavení. -extra.auto_timeshift Auto-nahrávání, sec (0=vypnuté) -extra.temp_timeshift Dočasný časový posuv -extra.auto_delete Auto-mazání -extra.record_time Rychlý čas nahrávání (hodiny) -extra.fec_s2_qpsk_1_2 1/2 s2 qpsk -extra.fec_s2_qpsk_2_3 2/3 s2 qpsk -extra.fec_s2_qpsk_3_4 3/4 s2 qpsk -extra.fec_s2_qpsk_5_6 5/6 s2 qpsk -extra.fec_s2_qpsk_7_8 7/8 s2 qpsk -extra.fec_s2_qpsk_8_9 8/9 s2 qpsk -extra.fec_s2_qpsk_3_5 3/5 s2 qpsk -extra.fec_s2_qpsk_4_5 4/5 s2 qpsk -extra.fec_s2_qpsk_9_10 9/10 s2 qpsk -extra.fec_s2_8psk_1_2 1/2 s2 8psk -extra.fec_s2_8psk_2_3 2/3 s2 8psk -extra.fec_s2_8psk_3_4 3/4 s2 8psk -extra.fec_s2_8psk_5_6 5/6 s2 8psk -extra.fec_s2_8psk_7_8 7/8 s2 8psk -extra.fec_s2_8psk_8_9 8/9 s2 8psk -extra.fec_s2_8psk_3_5 3/5 s2 8psk -extra.fec_s2_8psk_4_5 4/5 s2 8psk -extra.fec_s2_8psk_9_10 9/10 s2 8psk -video_mode_ok Video mód pracuje správně? -scrambled_channel Kódovaný kanál -neutrino_starting Spuštění Neutrina... -cam.settings Podmíněný přístup -cam.empty Žádný modul v šachtě -cam.inserted Vložený modul do šachty -cam.removed Odstraněný modul z šachty -cam.init_ok Inicializace modulu ukončená -cam.waiting Čekám na odpověď -cam.timeout Čas čekání uplynul,\nvracím se do menu -cam.reset Resetovat -cam.reset_standby Resetovat po spuštění -subtitles.head Titulky -subtitles.stop Vypnout titulky -fan_speed Rychlost CPU ventilátoru -audio.srs_iq SRS TruVolume -audio.srs_algo Mód -audio.srs_algo_light Jemný -audio.srs_algo_normal Normální -audio.srs_volume Výchozí hlasitost -audio.srs_nmgr Potlačovač šumu -cpu.freq Cpu kmitočet -cpu.freq_normal Normal kmitočet -cpu.freq_standby Standby kmitočet -cpu.freq_default default kmitočet -wizard.welcome_head Vítejte v Průvodci nastavení -wizard.welcome_text Další kroky provedou základní instalaci tohoto zařízení.\nChceš pokračovat?\nGratulujeme k zakoupení Coolstream. Následující \nkroky tě provedou počáteční instalací nastavení přístroje.\nPřejeme ti hodně radosti s tímto přijímačem!\nDalší krok ? diff --git a/data/locale/unmaintained/dutch.locale b/data/locale/unmaintained/dutch.locale index a60a2822c..d0690fe41 100644 --- a/data/locale/unmaintained/dutch.locale +++ b/data/locale/unmaintained/dutch.locale @@ -1,1000 +1,1233 @@ -EPGMenu.epgplus Elec. Programma Gids -EPGMenu.eventinfo Details aktuele uitzending -EPGMenu.eventlist Programmagids aktuele zender -EPGMenu.head EPG - EPG -EPGMenu.streaminfo technische informatie -EPGPlus.actions Akties -EPGPlus.bybouquet_mode per bouquet -EPGPlus.bypage_mode per pagina -EPGPlus.head Programma gids Overzicht (EPG Plus) -EPGPlus.next_bouquet volgend bouquet +AUDIOSelectMenue.head Audio Selectie +EPGMenu.epgplus Elektronische Programma Gids +EPGMenu.eventinfo Details huidige programma +EPGMenu.eventlist Eventlijst huidige programma +EPGMenu.head EPG - Programma Informatie +EPGMenu.streaminfo Technische informatie +EPGPlus.actions Acties +EPGPlus.bybouquet_mode Per favorietenlijst +EPGPlus.bypage_mode Per pagina +EPGPlus.head Programmagids overzicht (EPG Plus) +EPGPlus.next_bouquet Volgende favorietenlijst EPGPlus.options opties -EPGPlus.page_down pagina terug -EPGPlus.page_up pagina op -EPGPlus.prev_bouquet vorig bouquet -EPGPlus.record opnemen -EPGPlus.refresh_epg ververs de epg -EPGPlus.remind Herinnering -EPGPlus.scroll_mode Scroll Mode -EPGPlus.select_font_name font naam -EPGPlus.stretch_mode Uitstrek Mode -EPGPlus.swap_mode swap mode -EPGPlus.view_mode kijk mode -GENRE.ARTS.0 kunst / kultuur -GENRE.ARTS.1 uitvoerende kunst -GENRE.ARTS.10 kunst/kultuur series -GENRE.ARTS.11 mode -GENRE.ARTS.2 klein kunst -GENRE.ARTS.3 geloof -GENRE.ARTS.4 volks kunst -GENRE.ARTS.5 literatuur -GENRE.ARTS.6 film/bioscoop +EPGPlus.page_down Pagina omlaag +EPGPlus.page_up Pagina omhoog +EPGPlus.prev_bouquet Vorige favorietenlijst +EPGPlus.record Opnemen +EPGPlus.refresh_epg Herlaad EPG +EPGPlus.remind Plannen +EPGPlus.scroll_mode Scroll modus +EPGPlus.select_font_name Lettertype naam +EPGPlus.stretch_mode Uitgestrekte modus +EPGPlus.swap_mode Verwissel modus +EPGPlus.view_mode Bekijk modus +GENRE.ARTS.0 Kunst / cultuur +GENRE.ARTS.1 Uitvoerende kunsten +GENRE.ARTS.10 Kunst/cultuur magazines +GENRE.ARTS.11 Mode +GENRE.ARTS.2 Beeldende kunst +GENRE.ARTS.3 Religie +GENRE.ARTS.4 Populaire cultuur/traditionele kunst +GENRE.ARTS.5 Literatuur +GENRE.ARTS.6 Film/bioscoop GENRE.ARTS.7 experimentele film/video -GENRE.ARTS.8 radio/pers -GENRE.ARTS.9 nieuwe media -GENRE.CHILDRENs_PROGRAMMES.0 kinder / jeugd programma -GENRE.CHILDRENs_PROGRAMMES.1 kleuter programma's -GENRE.CHILDRENs_PROGRAMMES.2 ontwikkelings programma's voor 6 to 14 -GENRE.CHILDRENs_PROGRAMMES.3 ontwikkelings programma's voor 10 to 16 -GENRE.CHILDRENs_PROGRAMMES.4 informatie/educatie/school programma's -GENRE.CHILDRENs_PROGRAMMES.5 teken/poppen -GENRE.DOCUS_MAGAZINES.0 documentatie / series -GENRE.DOCUS_MAGAZINES.1 natuur/dieren/omgeving -GENRE.DOCUS_MAGAZINES.2 technologie/natuur wetenschappen -GENRE.DOCUS_MAGAZINES.3 medisch/physiologie/psychologie -GENRE.DOCUS_MAGAZINES.4 buitenland/expedities -GENRE.DOCUS_MAGAZINES.5 sociale/geestelijke wetenschappen -GENRE.DOCUS_MAGAZINES.6 verdere ontwikkeling -GENRE.DOCUS_MAGAZINES.7 talen -GENRE.MOVIE.0 film/drama -GENRE.MOVIE.1 detective/thriller -GENRE.MOVIE.2 avontuur/western/oorlog -GENRE.MOVIE.3 science fiction/fantasy/horror -GENRE.MOVIE.4 komedie -GENRE.MOVIE.5 soap/melodrama/folklore -GENRE.MOVIE.6 romantiek -GENRE.MOVIE.7 serieus/klassiek/geloof/histories film/drama -GENRE.MOVIE.8 volwassen film/drama -GENRE.MUSIC_DANCE.0 musiek / ballet / dans -GENRE.MUSIC_DANCE.1 rock/pop -GENRE.MUSIC_DANCE.2 serieuze muziek/klassieke muziek -GENRE.MUSIC_DANCE.3 volks/traditionele muziek -GENRE.MUSIC_DANCE.4 jazz -GENRE.MUSIC_DANCE.5 musical/opera -GENRE.MUSIC_DANCE.6 ballet -GENRE.NEWS.0 nieuws -GENRE.NEWS.1 nieuws/weer verslag -GENRE.NEWS.2 nieuws serie -GENRE.NEWS.3 documentatie -GENRE.NEWS.4 discussie/interview/debat +GENRE.ARTS.8 Omroep/Pers +GENRE.ARTS.9 New media +GENRE.CHILDRENs_PROGRAMMES.0 Kinder / jeugd programma +GENRE.CHILDRENs_PROGRAMMES.1 Peuter kinderprogramma's +GENRE.CHILDRENs_PROGRAMMES.2 entertainment programma (Voor 6 tot 14 jaar) +GENRE.CHILDRENs_PROGRAMMES.3 entertainment programma (Voor 10 tot 16 jaar) +GENRE.CHILDRENs_PROGRAMMES.4 informatieve / educatieve/school programma's +GENRE.CHILDRENs_PROGRAMMES.5 Tekenfilms / poppen +GENRE.DOCUS_MAGAZINES.0 documentatie / magazine +GENRE.DOCUS_MAGAZINES.1 natuur / dieren/omgeving +GENRE.DOCUS_MAGAZINES.2 Technologie / Natuurkunde +GENRE.DOCUS_MAGAZINES.3 Medicatie / Fysiologie / Psychologie +GENRE.DOCUS_MAGAZINES.4 Buitenland / Expedities +GENRE.DOCUS_MAGAZINES.5 Sociaal/spirituele wetenschappen +GENRE.DOCUS_MAGAZINES.6 Verdere educatie +GENRE.DOCUS_MAGAZINES.7 Talen +GENRE.MOVIE.0 Film / drama +GENRE.MOVIE.1 Detective / Thriller +GENRE.MOVIE.2 Avontuur / Western / Oorlog +GENRE.MOVIE.3 Science fiction / Fantasie / Horror +GENRE.MOVIE.4 Humor +GENRE.MOVIE.5 Soap / Melodrama / Folklore +GENRE.MOVIE.6 Romantiek +GENRE.MOVIE.7 Serieus / Klassiek / Religieus / Historische film / Drama +GENRE.MOVIE.8 Volwassen film / Drama +GENRE.MUSIC_DANCE.0 Muziek / Ballet / Dans +GENRE.MUSIC_DANCE.1 Rock/pop +GENRE.MUSIC_DANCE.2 Serieuze muziek/ Klassieke muziek +GENRE.MUSIC_DANCE.3 Volks / Traditionele muziek +GENRE.MUSIC_DANCE.4 Jazz +GENRE.MUSIC_DANCE.5 Musical / Opera +GENRE.MUSIC_DANCE.6 Ballet +GENRE.NEWS.0 Nieuws +GENRE.NEWS.1 Nieuws / Weersverwachting +GENRE.NEWS.2 Nieuws magazine +GENRE.NEWS.3 Documentaire +GENRE.NEWS.4 Discussie / Interview / Debat GENRE.SHOW.0 Show / Spelshow -GENRE.SHOW.1 spel show/quiz/wedstrijd -GENRE.SHOW.2 varietee show -GENRE.SHOW.3 praat show -GENRE.SOCIAL_POLITICAL.0 sociaal & politieke evenement / zakelijk -GENRE.SOCIAL_POLITICAL.1 series/verslag/documentaire -GENRE.SOCIAL_POLITICAL.2 economisch/sociaal advies -GENRE.SOCIAL_POLITICAL.3 buitengewone mensen -GENRE.SPORTS.0 sport -GENRE.SPORTS.1 speciale uitzendingen (Olympische Spelen,Wereld Cup etc.) -GENRE.SPORTS.10 equestrian -GENRE.SPORTS.11 vecht sporten -GENRE.SPORTS.2 sport series -GENRE.SPORTS.3 voetbal -GENRE.SPORTS.4 tennis/squash -GENRE.SPORTS.5 team sport (uitgezonderd voetbal) -GENRE.SPORTS.6 athletiek -GENRE.SPORTS.7 motor sport -GENRE.SPORTS.8 water sport -GENRE.SPORTS.9 winter sport -GENRE.TRAVEL_HOBBIES.0 reis & recreatie -GENRE.TRAVEL_HOBBIES.1 tourisme/reisen -GENRE.TRAVEL_HOBBIES.2 handwerken -GENRE.TRAVEL_HOBBIES.3 motor +GENRE.SHOW.1 Spelshow / Quiz / Wedstrijd +GENRE.SHOW.2 Variété show +GENRE.SHOW.3 Talk show +GENRE.SOCIAL_POLITICAL.0 sociale & politieke zaken +GENRE.SOCIAL_POLITICAL.1 Magazines / Verslaggeving / Documentaire +GENRE.SOCIAL_POLITICAL.2 Economisch / Sociaal advies +GENRE.SOCIAL_POLITICAL.3 Bijzondere personen +GENRE.SPORTS.0 Sport +GENRE.SPORTS.1 Bijzondere evenementen (Olympische spelen, Wereldkampioenschap, etc.) +GENRE.SPORTS.10 Paardensport +GENRE.SPORTS.11 Vechtsport +GENRE.SPORTS.2 Sport magazines +GENRE.SPORTS.3 Voetbal +GENRE.SPORTS.4 Tennis / Squash +GENRE.SPORTS.5 Team sporten (Excl. Voetbal) +GENRE.SPORTS.6 Atletiek +GENRE.SPORTS.7 Motorsport +GENRE.SPORTS.8 watersport +GENRE.SPORTS.9 wintersport +GENRE.TRAVEL_HOBBIES.0 Reizen & recreatie +GENRE.TRAVEL_HOBBIES.1 Tourisme / Reizen +GENRE.TRAVEL_HOBBIES.2 Handvaardigheden +GENRE.TRAVEL_HOBBIES.3 Motor voertuigen GENRE.TRAVEL_HOBBIES.4 fitness & gezondheid -GENRE.TRAVEL_HOBBIES.5 koken -GENRE.TRAVEL_HOBBIES.6 advertentie/shopping -GENRE.TRAVEL_HOBBIES.7 tuinieren -GENRE.UNKNOWN onbekend +GENRE.TRAVEL_HOBBIES.5 Koken +GENRE.TRAVEL_HOBBIES.6 Adverteren / Winkelen +GENRE.TRAVEL_HOBBIES.7 Tuinieren +GENRE.UNKNOWN Onbekend +U kunt uw ontvanger ook eenvoudig bedienen via de web-interface. Raadpleeg de handleiding\n apids.hint_1 Geef APIDs om te streamen apids.hint_2 in HEX in gescheiden door ' ' apidselector.head Selecteer taal audio.srs_algo Methode -audio.srs_algo_light eenvoudig -audio.srs_algo_normal normaal +audio.srs_algo_light Eenvoudig +audio.srs_algo_normal Normaal audio.srs_iq SRS True-volume technologie -audio.srs_nmgr Noise-manager -audio.srs_volume Referentie luidsterkte -audiomenu.PCMOffset PCM offset -audiomenu.analogout Analoge uitgang +audio.srs_nmgr Ruis manager +audio.srs_volume Referentie volume +audiomenu.PCMOffset Verlaag volume niveau PCM +audiomenu.analog_mode Analoge modus +audiomenu.analog_out Analoge uitgang +audiomenu.auto_lang Automatisch audio selecteren +audiomenu.auto_subs Automatisch ondertiteling selecteren audiomenu.avs avs +audiomenu.avsync A/V synchronisatie +audiomenu.avsync_am Audio master +audiomenu.clockrec audiomenu.dolbydigital Dolby Digital -audiomenu.hdmi_dd Dolby Digital via HDMI -audiomenu.monoleft mono links -audiomenu.monoright mono rechts -audiomenu.stereo stereo -audioplayer.add voeg toe +audiomenu.hdmi_dd Encoded Dolby Digital via HDMI +audiomenu.hdmi_dd_auto Automatisch +audiomenu.hdmi_dd_force Forceer +audiomenu.monoleft Mono links +audiomenu.monoright Mono rechts +audiomenu.pref_lang Voorkeurstaal +audiomenu.pref_lang_head Audio/EPG taalvoorkeur +audiomenu.pref_languages Taal voorkeuren +audiomenu.pref_subs Gewenste taal ondertiteling +audiomenu.pref_subs_head Voorkeuren ondertiteling +audiomenu.spdif_dd DolbyDigital via SPDIF +audiomenu.stereo Stereo +audiomenu.volume_adjust Volumeniveau aanpassen in percentage +audiomenu.volume_step Volume stap +audioplayer.add Toevoegen +audioplayer.add_ic Icecast +audioplayer.add_loc Lokale radiolijst +audioplayer.add_sc Shoutcast audioplayer.artist_title Artiest, Titel -audiomenu.avsync A/V sync -audioplayer.building_search_index building search index -audioplayer.button_select_title_by_id zoek op ID -audioplayer.button_select_title_by_name zoek op naam -audioplayer.defdir start dir. -audioplayer.delete verwijder -audioplayer.deleteall verwijder alles -audioplayer.display_order Laat volgorde zien -audioplayer.fastforward snel vooruit. -audioplayer.follow auto selecteer aktuele +audioplayer.building_search_index Zoek-index opbouwen +audioplayer.button_select_title_by_id Zoeken op ID +audioplayer.button_select_title_by_name Zoeken op naam +audioplayer.defdir Start dir. +audioplayer.delete Verwijderen +audioplayer.deleteall Verwijder alles +audioplayer.display_order Sorteer volgorde +audioplayer.enable_sc_metadata Uitlezen van Shoutcast meta-data +audioplayer.fastforward Snel vooruit spoelen +audioplayer.follow Automatisch huidige selecteren audioplayer.head Audio afspeellijst -audioplayer.highprio Hoge decodeeer prioriteit -audioplayer.id3scan Scan ID3 tags -audioplayer.jump_backwards spring terug -audioplayer.jump_dialog_hint1 Geef aub sprong doel in +audioplayer.highprio Hoge decodeer prioriteit +audioplayer.jump_backwards Spring terug +audioplayer.jump_dialog_hint1 Markeer sprong punt audioplayer.jump_dialog_hint2 (relatief, in seconden) -audioplayer.jump_dialog_title Geef sprong doel in -audioplayer.jump_forwards spring vooruit -audioplayer.keylevel toets stand +audioplayer.jump_dialog_title Markeer sprong locatie +audioplayer.jump_forwards Sprong voorwaarts +audioplayer.keylevel key level +audioplayer.load_radio_stations Internet radiozenders laden audioplayer.name Audiospeler -audioplayer.pause pause +audioplayer.pause Pauze audioplayer.play Afspelen -audioplayer.playing huidige track -audioplayer.playlist_fileerror_msg Bestand niet gemaakt: -audioplayer.playlist_fileerror_title Bestands fout -audioplayer.playlist_fileoverwrite_msg Wil je dit bestand overschrijven: -audioplayer.playlist_fileoverwrite_title Titel overschrijven? -audioplayer.playlist_name filenaam van de afspeellijst -audioplayer.playlist_name_hint1 Geef aub de naam van de afspeellijst in -audioplayer.playlist_name_hint2 De extensie .m3u wordt aut. toegevoegd -audioplayer.enable_sc_metadata enable shoutcast meta data parsing -audioplayer.repeat_on herhaal-mode inschakelen -audioplayer.rewind terug spoelen -audioplayer.save_playlist sla afspeellijst op -audioplayer.screensaver_timeout screensaver timeout (min, 0=off) -audioplayer.select_title_by_name zoek titel bij naam (SMS) -audioplayer.show_playlist Toon afspeellijst -audioplayer.shuffle willekeurig -audiomenu.spdif_dd Dolby Digital via S/PDIF +audioplayer.playing Huidige nummer +audioplayer.playlist_fileerror_msg Bestand kan niet worden aangemaakt: +audioplayer.playlist_fileoverwrite_msg Wilt u het bestand overschrijven?: +audioplayer.playlist_fileoverwrite_title Overschrijven? +audioplayer.playlist_name Naam van de afspeellijst +audioplayer.playlist_name_hint1 Naam afspeellijst invoeren +audioplayer.playlist_name_hint2 De extensie .m3u wordt automatisch toegevoegd +audioplayer.reading_files Bestanden lezen +audioplayer.receiving_list Receiving list, please wait +audioplayer.repeat_on enable Herhaal modus +audioplayer.rewind Terugspoelen +audioplayer.save_playlist Afspeellijst opslaan +audioplayer.screensaver_timeout Screensaver time-out (min, 0 = uit) +audioplayer.select_title_by_name Zoek titel op naam (SMS) +audioplayer.show_playlist Afspeellijst weergeven +audioplayer.shuffle Shuffle +audioplayer.spectrum LCD a-spectrum audioplayer.stop Stop audioplayer.title_artist Titel, Artiest -audioplayerpicsettings.general audiospeler / afbeeldingen -bookmarkmanager.delete wissen +audioplayerpicsettings.general Audiospeler / Afbeeldingen +bookmarkmanager.delete Wissen bookmarkmanager.name bookmarks -bookmarkmanager.rename hernoem +bookmarkmanager.rename Hernoem bookmarkmanager.select selecteer -bouqueteditor.add voegtoe -bouqueteditor.bouquetname Naam van het bouquet -bouqueteditor.delete wissen -bouqueteditor.discardingchanges Herstel veranderingen. Geduld aub. +bouqueteditor.add Toevoegen +bouqueteditor.bouquetname Naam van de favorietenlijst +bouqueteditor.delete Verwijder +bouqueteditor.delete_question Zender verwijderen uit favorietenlijst? +bouqueteditor.discardingchanges Herstel wijzigingen. Een moment geduld aub. bouqueteditor.hide Verberg bouqueteditor.lock Vergrendel -bouqueteditor.move Beweeg -bouqueteditor.name bouquet bewerker -bouqueteditor.newbouquetname Nieuwe naam van het bouquet +bouqueteditor.move Verplaats +bouqueteditor.name Favorietenlijst bewerken +bouqueteditor.newbouquetname Nieuwe naam van de favorietenlijst bouqueteditor.rename Hernoem -bouqueteditor.return klaar -bouqueteditor.savechanges? Wil je de veranderingen opslaan? -bouqueteditor.savingchanges Sla veranderingen op. Wacht aub ... -bouqueteditor.switch voegtoe/verwijder +bouqueteditor.return Gereed +bouqueteditor.savechanges? Wilt u de veranderingen opslaan? +bouqueteditor.savingchanges Veranderingen opslaan. Een moment geduld aub. +bouqueteditor.switch Toevoegen / Verwijderen bouqueteditor.switchmode TV/Radio -bouquetlist.head Bouquets -cablesetup.provider kabel-provider +bouquetlist.head Favorietenlijst +bouquetname.hdtv HD zenders +bouquetname.new Nieuwe Zenders +bouquetname.other Onbekende provider +bouquetname.removed Verwijderde zenders +cablesetup.provider kabel provider +channellist.additional Extra informatie +channellist.additional_off Uit +channellist.additional_on Aan +channellist.additional_on_minitv Aan (met MiniTV) channellist.current_tp Huidige transponder channellist.edit Bewerken channellist.epgtext_align_left links channellist.epgtext_align_right rechts -channellist.extended Uitgebreide EPG tonen -channellist.fav Favorieten -channellist.head Alle kanalen -channellist.history Historie -channellist.make_hdlist HD-kanalen als favoriet tonen -channellist.nonefound Geen kanalen gevonden!\nVoer aub een scan uit\n(DBOX-key -> onderhoud) -channellist.provs providers +channellist.extended Proces balk weergeven +channellist.favs Favorieten +channellist.foot Zender informatie +channellist.foot_freq Sat/Freq Info +channellist.foot_next Volgende programma +channellist.foot_off Uit +channellist.foot_sort_alpha Ordenen [A-Z] +channellist.foot_sort_chnum Ordenen [0-9] +channellist.foot_sort_freq Ordenen op frequentie +channellist.foot_sort_sat Ordenen op satelliet +channellist.head Alle zenders +channellist.history Geschiedenis +channellist.keep_numbers Aanhoudende kanaalnummers +channellist.make_hdlist Creeër HD favorietenlijst +channellist.make_newlist Creeër lijst met nieuwe kanalen +channellist.make_removedlist Creeër lijst met verwijderde kanalen +channellist.new_zap_mode Quickzap in lijst +channellist.new_zap_mode_active Actief +channellist.new_zap_mode_allow Toestaan +channellist.new_zap_mode_off Uit +channellist.nonefound Geen kanalen gevonden.\nVoer een zenderscan uit. +channellist.provs Providers +channellist.recording_not_possible Het maken van een opname\n is niet mogelijk. +channellist.reset_flags Reset 'nieuw' kanaal vlag channellist.sats Satellieten -channellist.since start tijd -colorchooser.alpha alpha -colorchooser.blue blauw -colorchooser.green groen -colorchooser.red rood +channellist.since sinds +channellist.start start tijd +ci.clock CI kloksnelheid (Mhz) +ci.empty Geen CAM geplaatst +ci.init_failed Initialisatie CAM mislukt +ci.init_ok Initialisatie CAM compleet +ci.inserted Conditional access module herkend +ci.removed Conditional access module verwijderd +ci.reset Reset +ci.reset_standby Opnieuw instellen na stand-by +ci.settings Conditional access +ci.timeout Timeout wachten CI menu gereed +ci.waiting Wachten op reactie... +clock_switch_off klok uit +clock_switch_on klok aan +colorchooser.alpha Alpha +colorchooser.blue Blauw +colorchooser.green Groen +colorchooser.red Rood colormenu.background Achtergrond -colormenu.fade Fade menu's -colormenu.font Font grootte -colormenu.menucolors Menukleur -colormenu.statusbar Infobar -colormenu.textcolor Textkleur -colormenu.themeselect selecteer thema -colormenu.timing OSD Timing -colormenusetup.menucontent Window-Inhoud -colormenusetup.menucontent_inactive Window-Inhoud inaktief -colormenusetup.menucontent_selected Window-Inhoud selekteren -colormenusetup.menuhead Menu Kop -colorstatusbar.head Infobalk kleur -colorstatusbar.text Infobalk text +colormenu.contrast_fonts Contrast lettertype +colormenu.fade Menu's vervagen +colormenu.font Selecteer lettertype gebruikersinterface +colormenu.font_ttx Selecteer lettertype teletekst +colormenu.hd_preset LCD +colormenu.menucolors Kleuren +colormenu.osd_preset Voorinstellingen TV +colormenu.sd_preset CRT +colormenu.textcolor Tekst kleur +colormenu.themeselect Selecteer thema +colormenu.timing OSD Timeouts +colormenusetup.menucontent Content +colormenusetup.menucontent_inactive Inactieve content +colormenusetup.menucontent_selected Geselecteerde content +colormenusetup.menuhead Menu kop +colorstatusbar.text Infobalk colorthememenu.classic_theme Klassiek Thema colorthememenu.dblue_theme Donkerblauw Thema colorthememenu.dvb2k_theme DVB2000 Thema -colorthememenu.head Thema Kiezer +colorthememenu.head Selecteer thema +colorthememenu.head2 Thema's laden +colorthememenu.name Naam thema colorthememenu.neutrino_theme Neutrino Thema +colorthememenu.question Geselecteerde thema gebruiken? +colorthememenu.save Huidige thema opslaan +colorthememenu.select1 Gebruikers Thema +colorthememenu.select2 Standaard Thema +cpu.freq CPU Frequentie +cpu.freq_default Standaard frequentie +cpu.freq_normal Normale frequentie +cpu.freq_standby Stand-by frequentie date.Apr Apr date.Aug Aug date.Dec Dec date.Feb Feb -date.Fri Vrij +date.Fri Vr date.Jan Jan date.Jul Jul date.Jun Jun -date.Mar Maart +date.Mar Mrt date.May Mei -date.Mon Maan +date.Mon Ma date.Nov Nov date.Oct Okt -date.Sat Zat +date.Sat Za date.Sep Sep -date.Sun Zon -date.Thu Don -date.Tue Dins -date.Wed Woens +date.Sun Zo +date.Thu Do +date.Tue Di +date.Wed Wo +epg.saving Opslaan EPG +epgextended.actors Acteurs +epgextended.director Regisseur +epgextended.guests Gasten +epgextended.original_title Originele Titel +epgextended.presenter Presentator +epgextended.year_of_production Productie jaar epglist.head programma-gids- %s -epglist.noevents EPG niet aanwezig... -epgviewer.More_Screenings Volgend scherm -epgviewer.nodetailed Geen gedetaileerde informatie aanwezig -epgviewer.notfound geen epg gevonden -eventfinder.head EPG-zoeken -eventfinder.keyword Zoek naar bepaalde tekst -eventfinder.search Zoek -eventfinder.search_within_list Zoek binnen een tekst -eventfinder.searching zoeken... +epglist.noevents EPG is niet beschikbaar... +epgviewer.More_Screenings More Volgend scherm +epgviewer.More_Screenings_short Volgend scherm +epgviewer.nodetailed Geen gedetailleerde informatie aanwezig +epgviewer.notfound geen EPG gevonden +eventfinder.head Zoeken in EPG +eventfinder.keyword Trefwoord zoeken +eventfinder.search Zoeken eventfinder.search_within_epg Zoeken in +eventfinder.search_within_list Zoeken in +eventfinder.searching Zoek naar trefwoord in EPG... eventfinder.start_search Zoeken starten eventlistbar.channelswitch Omschakelen eventlistbar.eventsort Sorteren -eventlistbar.recordevent Openemen -extra.temp_timeshift Timeshift -favorites.addchannel Het aktuele kanaal wordt toegevoegd \naan het bouquet"My Favorites".\nDit duurt enkele seconden... -favorites.bouquetname Mijn favorieten -favorites.bqcreated Bouquet "Mijn favorieten" is gemaakt...\n -favorites.chadded Het aktuele Kanaal is aan je favorieten toegevoegd...\n -favorites.chalreadyinbq Het aktuele kanaal is reeds in je Favorieten...\n -favorites.finalhint \nGebruik de bouquet bewerker om je Favorieten aan te passen.\n -favorites.menueadd voeg Kanaal toe aan favorieten -favorites.nobouquets Favorieten zijn alleen beschikbaar bij geactiveerde Bouquets . -filebrowser.delete Wis -filebrowser.denydirectoryleave weiger dir te verlaten -filebrowser.dodelete1 Wis +eventlistbar.recordevent Opnemen +extra.add_to_bouquet Toevoegen aan favorietenlijst +extra.audio_run_player Audio key start player +extra.auto_delete Automatisch verwijderen +extra.auto_timeshift Automatische opname, sec (0 = uitgeschakeld) +extra.bigwindows Grote vensters +extra.cache_txt Cache teletekst +extra.chadded het huidige kanaal is toegevoegd aan de geselecteerde favorietenlijst...\n +extra.chalreadyinbq het huidige kanaal bevindt zich al in de geselecteerde favorietenlijst...\n +extra.dboxinfo Box Info +extra.dvbsnoop DVB Stream Info +extra.dvbsnoop_band Toon pid bandbreedte +extra.dvbsnoop_cat Toon CAT +extra.dvbsnoop_eit Toon EIT +extra.dvbsnoop_nit Toon NIT +extra.dvbsnoop_pat Toon PAT +extra.dvbsnoop_pid Toon manual PID +extra.dvbsnoop_rst Toon RST +extra.dvbsnoop_scan Scan PIDs +extra.dvbsnoop_sdt Toon SDT +extra.dvbsnoop_sit Toon SIT +extra.dvbsnoop_tdt Toon TDT +extra.dvbsnoop_tsdt Toon TSDT +extra.east Oost +extra.fec_1_2 1/2 +extra.fec_2_3 2/3 +extra.fec_3_4 3/4 +extra.fec_5_6 5/6 +extra.fec_7_8 7/8 +extra.fec_auto Auto DVB-S +extra.fec_auto_s2 Auto DVB-S2 +extra.fec_s2_8psk_1_2 1/2 s2 8psk +extra.fec_s2_8psk_2_3 2/3 s2 8psk +extra.fec_s2_8psk_3_4 3/4 s2 8psk +extra.fec_s2_8psk_3_5 3/5 s2 8psk +extra.fec_s2_8psk_4_5 4/5 s2 8psk +extra.fec_s2_8psk_5_6 5/6 s2 8psk +extra.fec_s2_8psk_7_8 7/8 s2 8psk +extra.fec_s2_8psk_8_9 8/9 s2 8psk +extra.fec_s2_8psk_9_10 9/10 s2 8psk +extra.fec_s2_qpsk_1_2 1/2 s2 qpsk +extra.fec_s2_qpsk_2_3 2/3 s2 qpsk +extra.fec_s2_qpsk_3_4 3/4 s2 qpsk +extra.fec_s2_qpsk_3_5 3/5 s2 qpsk +extra.fec_s2_qpsk_4_5 4/5 s2 qpsk +extra.fec_s2_qpsk_5_6 5/6 s2 qpsk +extra.fec_s2_qpsk_7_8 7/8 s2 qpsk +extra.fec_s2_qpsk_8_9 8/9 s2 qpsk +extra.fec_s2_qpsk_9_10 9/10 s2 qpsk +extra.key_current_transponder Huidige transponder toets +extra.key_list_end Eind +extra.key_list_start Begin +extra.key_plugin One touch plugin +extra.key_screenshot Screenshot toets +extra.key_timeshift Timeshift +extra.key_unlock Ontgrendel toets +extra.ladirection LA richting +extra.latitude Breedtegraad (latitude) +extra.loadconfig Neutrino-HD Settings: Laden van +extra.loadkeys Toetsen laden van +extra.lodirection LO richting +extra.logview Bekijk Log +extra.longitude Lengtegraad (Longitude) +extra.menu_left_exit "Links" = Terug +extra.north Noord +extra.record_time Max. opname tijd in uren +extra.rotor_swap Schakelen rotor oost/west +extra.rounded_corners Vorm van hoeken +extra.rounded_corners_off Rechthoekig +extra.rounded_corners_on Rond +extra.saveconfig Neutrino-HD Settings: Opslaan als... +extra.savekeys Toetsen opslaan +extra.scrambled_message Gecodeerd bericht +extra.show_mute_icon Weergave Mute icoon wanneer volume niveau 0 is +extra.sms_channel sms-modus kanaal +extra.south Zuid +extra.start_tostandby Opstarten in stand-by modus +extra.temp_timeshift Tijdelijke timeshift +extra.timeshift_pause Timeshift pauzeren +extra.tp.pol_v V +extra.tp_fec FEC +extra.tp_freq Frequentie +extra.tp_mod Modulatie +extra.tp_mod_128 QAM/128 +extra.tp_mod_16 QAM/16 +extra.tp_mod_256 QAM/256 +extra.tp_mod_32 QAM/32 +extra.tp_mod_64 QAM/64 +extra.tp_pol Polarisatie +extra.tp_pol_h H +extra.tp_pol_l L +extra.tp_pol_r R +extra.tp_rate Symbool ratio +extra.update_dir Lokale update directory +extra.use_gotoxx Gebruik gotoXX +extra.volume_digits Volumebar digits +extra.volume_pos Volumebar +extra.west West +extra.zap_cycle Zap cyclus +extra.zapit_fe_timeout Tune timeout (1 = 10 msec) +extra.zapit_hvoltage 18V voor DiSEqC motor +extra.zapit_make_bouquet Creëer resterende kanalen favorietenlijst +extra.zapit_motor_speed Motor snelheid (10 = 1 graad/sec) +extra.zapit_scanpids Scan/gebruik PIDS +extra.zapit_sdt_changed Zenders gewijzigd, herlaad instellingen. +fan_speed CPU Ventilator snelheid +favorites.addchannel Het huidige kanaal wordt toegevoegd aan \n "mijn favorieten". Een moment geduld... +favorites.bouquetname Mijn Favorieten +favorites.bqcreated Favorietenlijst genaamd "Mijn Favorieten" is gecreëerd...\n +favorites.chadded Het huidige kanaal is toegevoegd aan uw favorietenlijst...\n +favorites.chalreadyinbq Het huidige kanaal is al aanwezig in uw favorietenlijst...\n +favorites.copy Kopieer bouquet naar favorieten +favorites.finalhint \nGebruik de favorietenlijst editor om uw favorieten te bewerken.\n +favorites.menueadd Kanaal toevoegen aan favorieten +favorites.nobouquets Enkel geactiveerde favorieten zijn beschikbaar. +filebrowser.delete Verwijderen +filebrowser.denydirectoryleave Absolute start directory +filebrowser.dodelete1 Verwijderen filebrowser.dodelete2 ? -filebrowser.filter.active Filter aan -filebrowser.filter.inactive Filter uit -filebrowser.head Filebrowser -filebrowser.mark Markeer -filebrowser.nextpage volgende pagina -filebrowser.prevpage vorige pagina -filebrowser.scan Scanning folder +filebrowser.filter.active Filter ingeschakeld +filebrowser.filter.inactive Filter uitgeschakeld +filebrowser.head Verkenner +filebrowser.mark Marke +filebrowser.nextpage Volgende pagina +filebrowser.prevpage Vorige pagina +filebrowser.scan Map scannen filebrowser.select Selecteer -filebrowser.showrights Toon bestands rechten +filebrowser.showrights Bestandsrechten weergeven filebrowser.sort.date (datum) -filebrowser.sort.name (filenaam) -filebrowser.sort.namedirsfirst (filenaam2) -filebrowser.sort.size (grootte) -filebrowser.sort.type (type) -flashupdate.actionreadflash Flash lezen -flashupdate.cantopenfile kan bestand niet openen -flashupdate.cantopenmtd kan mtd-device niet openen -flashupdate.checkupdate zoek naar nieuwe versie -flashupdate.currentversion_sep Aktuele versie +filebrowser.sort.name (bestandsnaam) +filebrowser.sort.namedirsfirst (bestandsnaam) +filebrowser.sort.size (Grootte) +filebrowser.sort.type (Type) +filesystem.is.utf8 bestandssystem +filesystem.is.utf8.option.iso8859.1 ISO-8859-1 +filesystem.is.utf8.option.utf8 UTF-8 +flashupdate.actionreadflash lezen +flashupdate.apply_settings Importeer instellingen? +flashupdate.cantopenfile Kan het bestand niet openen +flashupdate.cantopenmtd Kan MTD niet openen +flashupdate.checkupdate_internet Online updates zoeken +flashupdate.checkupdate_local Lokaal updaten +flashupdate.currentversion_sep Huidige versie flashupdate.currentversiondate Datum flashupdate.currentversiontime Tijd -flashupdate.erasefailed flash wissen mislukt -flashupdate.erasing flash wissen -flashupdate.experimentalimage De geselecteerde image is een ongeteste versie,dit betekend\nbootup van de Box kan mislukken na update.\n\nWilt U werkelijk updaten naar deze versie? +flashupdate.erasefailed Wissen van flash mislukt +flashupdate.erasing Flash wissen +flashupdate.experimentalimage De firmware die u heeft geselecteerd is niet getest.\nDit kan wellicht problemen veroorzaken.\n Weet u zeker dat u deze versie wil updaten? flashupdate.expertfunctions Expert-functies -flashupdate.fileis0bytes De filegrootte is 0 Bytes -flashupdate.fileselector File-Kiezer -flashupdate.flashreadyreboot De image was succesvol geflashed.\nDe ruDbox gaat nu herstarten. -flashupdate.getinfofile haal versie info op -flashupdate.getinfofileerror Kan versie info niet ophalen -flashupdate.getupdatefile haal update file op -flashupdate.getupdatefileerror kan update niet ophalen -flashupdate.globalprogress voortgang: +flashupdate.fileis0bytes De bestandsgrootte is 0 Bytes +flashupdate.fileselector Bestandsselectie +flashupdate.flashreadyreboot De firmware is succesvol geïnstalleerd.\nDe ontvanger wordt opnieuw opgestart. +flashupdate.getinfofile Versie informatie verkrijgen +flashupdate.getinfofileerror Kan versie informatie niet verkrijgen +flashupdate.getupdatefile Updates verkrijgen +flashupdate.getupdatefileerror Kan update niet verkrijgen +flashupdate.globalprogress Globale voortgang: flashupdate.head Software Update -flashupdate.md5check Image testen -flashupdate.md5sumerror Image heeft fouten -flashupdate.msgbox Volgende nieuwe image gevonden:\nDate: %s, %s\nBaseImage: %s\nImageType: %s\n\nWil je deze versie nu downloaden en installeren? -flashupdate.msgbox_manual De volgende nieuwe file gevonden:\nDate: %s, %s\nBaseImage: %s\nType: %s\n\nWil je deze versie nu installeren? -flashupdate.mtdselector Partition-Kiezer -flashupdate.programmingflash Flash programmeren -flashupdate.proxypassword Paswoord -flashupdate.proxypassword_hint1 geef de proxyserver paswoord in -flashupdate.proxypassword_hint2 niets ingeven betekend geen proxy-auth. -flashupdate.proxyserver Hostname -flashupdate.proxyserver_hint1 geef proxyserver naam of ip in, gebruik host:port -flashupdate.proxyserver_hint2 niets ingeven betekent geen proxy +flashupdate.md5check Firmware controleren +flashupdate.md5sumerror Firmware bevat fouten +flashupdate.msgbox Het volgende bestand is gevonden:\nDatum: %s, %s\nBaseImage: %s\nType: %s\n\nWilt u het bestand installeren? +flashupdate.msgbox_manual De volgende firmware is gevonden:\nDatum: %s, %s\nBaseImage: %s\nImageType: %s\n\n Wilt u deze versie installeren? +flashupdate.mtdselector Partitie-selector +flashupdate.new_found Nieuwe firmware gevonden! +flashupdate.new_notfound Geen nieuwe firmware gevonden +flashupdate.programmingflash programming flash +flashupdate.proxypassword Wachtwoord +flashupdate.proxypassword_hint1 Wachtwoord van de proxyserver invoeren +flashupdate.proxypassword_hint2 Geen invoer betekend geen autorisatie vereist +flashupdate.proxyserver Hostnaam +flashupdate.proxyserver_hint1 proxyserver naam of ip invoeren, gebruik host:poort +flashupdate.proxyserver_hint2 Geen invoer betekend geen proxy flashupdate.proxyserver_sep Proxyserver flashupdate.proxyusername Gebruikersnaam -flashupdate.proxyusername_hint1 geef de proxyserver gebruikersnaam in -flashupdate.proxyusername_hint2 niets ingeven betekent geen proxy-auth. -flashupdate.readflash Lees hele image -flashupdate.readflashmtd lees een partitie -flashupdate.ready ready -flashupdate.reallyflashmtd Wil je werkelijk flashen?\n\nAls een fout optreed of de image is niet\ngeldig, de Box wil niet booten na het flashen.\n\nImagenaam: %s\nTarget: %s -flashupdate.savesuccess De image was succesvol opgeslagen \nonder %s. -flashupdate.selectimage Beschikbare Images/Files -flashupdate.squashfs.noversion SquashFS versie test momenteel alleen ondersteund bij update via het Web.\nWeet je zeker dat je deze image wilt installeren? -flashupdate.titlereadflash Flash lezen +flashupdate.proxyusername_hint1 Proxyserver gebruikersnaam invoeren +flashupdate.proxyusername_hint2 Geen invoer betekend geen autorisatie vereist +flashupdate.readflash Lees gehele image +flashupdate.readflashmtd Lees een partitie +flashupdate.ready Gereed +flashupdate.reallyflashmtd Weet u zeker dat u wilt updaten?\nIndien er zich een fout voordoet\nof wanneer de firmware incorrect\nis zal de ontvanger niet herstarten\nna het updaten.\n\nImagename: %s\nTarget: %s +flashupdate.savesuccess De Firmware is succesvol opgeslagen \n onder %s. +flashupdate.selectimage Beschikbare firmware/bestanden +flashupdate.settings Update instellingen +flashupdate.squashfs.noversion SquashFS versie controle is alleen ondersteund wanneer u update via het internet. \nWeet u zeker dat u deze firmware wilt installeren? flashupdate.titlewriteflash Flash schrijven +flashupdate.update_with_settings_del_skipped Folder [%s] kan niet worden verwijderd. Folder is overgeslagen. +flashupdate.update_with_settings_error Foutmelding!\n \nNieuwe firmware heeft %ld KB (out of %ld KB) resterend.\n Onvoldoende \nruimte om opdracht af te ronden. Opdracht wordt geannuleerd. +flashupdate.update_with_settings_processed Wordt verwerkt... +flashupdate.update_with_settings_skipped Folder [%s] kan niet opgeslagen worden. Folder wordt overgeslagen. +flashupdate.update_with_settings_successfully Instellingen succesvol overgenomen. De firmware kan worden geupdate. +flashupdate.update_with_settings_warning Waarschuwing!\n Er is waarschijnlijk onvoldoende ruimte. Wilt u verder gaan? flashupdate.updatemode Update mode flashupdate.updatemode_internet internet -flashupdate.updatemode_manual handmatig (ftp) -flashupdate.url_file config file -flashupdate.versioncheck test versie -flashupdate.writeflash schrijf hele image -flashupdate.writeflashmtd schrijf een partitie -flashupdate.wrongbase Your Release cycle differs.\nTo continue? -fontmenu.channellist Kanalen lijst +flashupdate.updatemode_manual Vanaf lokale update directory +flashupdate.url_file configuratie bestand +flashupdate.versioncheck Versie controleren +flashupdate.writeflash Schrijf gehele image +flashupdate.writeflashmtd Schrijf een partitie one +flashupdate.wrongbase Uw release-cyclus verschilt.\nVerder gaan? +fontmenu.channellist Kanalenlijst fontmenu.epg EPG -fontmenu.eventlist Programma gids -fontmenu.gamelist Spelen lijst -fontmenu.head Fontgrootte instellen -fontmenu.infobar Infobar +fontmenu.eventlist Programmalijst +fontmenu.gamelist Spelletjes lijst +fontmenu.head Lettertype instellingen +fontmenu.infobar Informatiebalk +fontmenu.menu Menu +fontmenu.scaling Globale lettertype Zoom Factor +fontmenu.scaling_x Horizontaal (in %) +fontmenu.scaling_x_hint2 Horizontaal (in %) min 50 / max 200 +fontmenu.scaling_y Verticaal (in %) +fontmenu.scaling_y_hint2 Verticaal (in %) min 50 / max 200 +fontmenu.sizes Lettertype grootte fontsize.channel_num_zap directe selectie -fontsize.channellist Kanalen lijst -fontsize.channellist_descr Beschrijving +fontsize.channellist Kanalenlijst +fontsize.channellist_descr Omschrijving +fontsize.channellist_event Programmalijst fontsize.channellist_number Nummer fontsize.epg_date EPG Datum fontsize.epg_info1 EPG Info 1 fontsize.epg_info2 EPG Info 2 fontsize.epg_title EPG Titel -fontsize.eventlist_datetime datum / tijd -fontsize.eventlist_itemlarge groot -fontsize.eventlist_itemsmall klein +fontsize.eventlist_datetime Datum / Tijd +fontsize.eventlist_itemlarge Groot +fontsize.eventlist_itemsmall Klein fontsize.eventlist_title Titel -fontsize.filebrowser_item filebrowser item -fontsize.gamelist_itemlarge groot -fontsize.gamelist_itemsmall klein -fontsize.hint Initialiseer font,\naub wachten... -fontsize.infobar_channame Kanaal naam -fontsize.infobar_info info +fontsize.filebrowser_item Verkenner items +fontsize.gamelist_itemlarge Groot +fontsize.gamelist_itemsmall Klein +fontsize.hint Initialiseren lettertype,\néén moment geduld... +fontsize.infobar_channame Kanaalnaam +fontsize.infobar_info Info fontsize.infobar_number Nummer -fontsize.infobar_small klein -fontsize.menu Menutext +fontsize.infobar_small Klein +fontsize.menu Menu tekst +fontsize.menu_hint Menu hints fontsize.menu_info Menu Info fontsize.menu_title Menu Titel -gtxalpha.alpha1 Alpha 1 -gtxalpha.alpha2 Alpha 2 hdd_10min 10 min. hdd_1min 1 min. hdd_20min 20 min. hdd_30min 30 min. hdd_5min 5 min. hdd_60min 60 min. -hdd_activate Instellingen aktiveren -hdd_check Controleer systeem -hdd_check_failed Controle van harddisk mislukt -hdd_ext3 Ext3fs +hdd_activate Instellingen toepassen +hdd_check Controleer bestandssysteem +hdd_check_failed HDD controle mislukt +hdd_ext3 ext3 +hdd_extended_settings Uitgebreide HDD-instellingen hdd_fast Snel -hdd_format Formatteer harddisk +hdd_format HDD formatteren hdd_format_failed Formatteren mislukt -hdd_format_warn Formatteren wordt gestart -hdd_fs Bestands systeem -hdd_manage Disk management -hdd_middle Middel -hdd_noise Acoustiek-instelling -hdd_not_found Geen harddisk gedetecteerd -hdd_reiser Reiserfs -hdd_settings Harddisk instellingen -hdd_sleep Stop motor na -hdd_slow Langzaam -hdd_umount_warn unmout harddisk -infoviewer.epgnotload EPG niet geladen.... -infoviewer.epgwait wacht op EPG... -infoviewer.eventlist Prg,s overzicht -infoviewer.languages Talen -infoviewer.next Hierna -infoviewer.now Huidig -infoviewer.motor_moving Motor aan het werk -infoviewer.nocurrent Geen info over aktueel programma beschikbaar -infoviewer.noepg EPG niet beschikbaar +hdd_format_warn Begin formatteren... +hdd_fs Bestandssysteem +hdd_manage Beheer hardeschijven +hdd_middle Gemiddeld +hdd_noise Akoestisch beheer (AAM) +hdd_not_found Geen HDD gevonden +hdd_reiser ReiserFS +hdd_removable_device Verwijderbaar apparaat +hdd_settings Harde schijf/USB +hdd_sleep Uitschakelen na... +hdd_slow Sloom +hdd_umount_warn Apparaat ontkoppelen +imageinfo.creator Ontwikkelaar: +imageinfo.date Datum: +imageinfo.dokumentation Documentatie: +imageinfo.forum Forum: +imageinfo.head Image info: +imageinfo.homepage Website: +imageinfo.image Image: +imageinfo.license Licentie: +imageinfo.version Versie: +inetradio.name Internetradio +infoviewer.epgnotload EPG is niet geladen.... +infoviewer.epgwait wachten op EPG... +infoviewer.eventlist Programmalijst +infoviewer.languages Audio +infoviewer.motor_moving Schotel positionering +infoviewer.next Volgende +infoviewer.nocurrent Geen informatie beschikbaar over huidige programma +infoviewer.noepg EPG is niet beschikbaar infoviewer.notavailable Kanaal niet beschikbaar -infoviewer.selecttime Tijd kiezen -infoviewer.streaminfo Extra's +infoviewer.now Nu +infoviewer.selecttime Tijd selectie +infoviewer.streaminfo Mogelijkheden +infoviewer.subchan_disp_pos Toon subkanalen +infoviewer.subchan_infobar Volledige infobalk infoviewer.subservice Subservices -infoviewer.waittime Wacht op de tijd... -ipsetup.hint_1 Benut 0..9, of benut Op/Neer, -ipsetup.hint_2 OK slaat op, HOME breektaf -keybindingmenu.RC Key repeat-blocker -keybindingmenu.addrecord voeg record timer toe -keybindingmenu.addremind voeg zapto timer toe -keybindingmenu.allchannels_on_ok alle-kanalen -keybindingmenu.bouquetchannels_on_ok aktueel bouquet -keybindingmenu.bouquetdown bouquet terug -keybindingmenu.bouquethandling Bouquet-control -keybindingmenu.bouquetlist_on_ok bouquet-lijst -keybindingmenu.bouquetup volgende bouquet -keybindingmenu.cancel Kanalen lijst sluiten -keybindingmenu.channeldown kanaal omlaag -keybindingmenu.channellist kanalen lijst -keybindingmenu.channelup kanaal omhoog -keybindingmenu.head Toetsen Aanpassen -keybindingmenu.lastchannel Laatste kanaal -keybindingmenu.modechange Mode's wissel +infoviewer.waittime Wachten op tijd... +ipsetup.hint_1 Gebruik 0-9, of de omhoog/omlaag cursor, +ipsetup.hint_2 "OK" toets om op te slaan, Exit om af te sluiten +keybindingmenu.RC Tune Remote-Control +keybindingmenu.addrecord Opname timer toevoegen +keybindingmenu.addremind Zap timer toevoegen +keybindingmenu.allchannels_on_ok alle kanalen +keybindingmenu.bouquetchannels_on_ok Huidige kanalenlijst +keybindingmenu.bouquetdown Vorige favorietenlijst +keybindingmenu.bouquethandling Favorietenlijst beheer +keybindingmenu.bouquetlist_on_ok Favorietenlijst +keybindingmenu.bouquetup Volgende favorietenlijst +keybindingmenu.cancel Kanalenlijst sluiten +keybindingmenu.channeldown Kanaal omlaag +keybindingmenu.channellist Kanalenlijst +keybindingmenu.channelup Kanaal omhoog +keybindingmenu.head Bewerk sneltoetsen +keybindingmenu.lastchannel Quick Zap +keybindingmenu.misc Diversen +keybindingmenu.mode_left_right_key_tv Links/Rechts sneltoets in TV modus +keybindingmenu.mode_left_right_key_tv_infobar Infobalk weergeven +keybindingmenu.mode_left_right_key_tv_volume Volume beheer +keybindingmenu.mode_left_right_key_tv_vzap Virtuele Zap +keybindingmenu.mode_left_right_key_tv_zap Zap +keybindingmenu.modechange Wijzig modus keybindingmenu.pagedown pagina omlaag keybindingmenu.pageup pagina omhoog -keybindingmenu.quickzap Vlug zappen -keybindingmenu.repeatblock herhaal vertraging -keybindingmenu.repeatblockgeneric begin vertraging -keybindingmenu.sort verander sorteer volgorde -keybindingmenu.subchanneldown subkanaal omlaag +keybindingmenu.poweroff Stroomschakelaar +keybindingmenu.quickzap Quickzap +keybindingmenu.remotecontrol_hardware Hardware +keybindingmenu.remotecontrol_hardware_coolstream CST +keybindingmenu.remotecontrol_hardware_dbox d-box Nokia (old) +keybindingmenu.remotecontrol_hardware_msg_part1 De afstandsbediening is verandert van ' +keybindingmenu.remotecontrol_hardware_msg_part2 ' naar ' +keybindingmenu.remotecontrol_hardware_msg_part3 ' \nIs dit correct?\n Bevestig uw selectie binnen 15 seconden door uw nieuwe afstandsbediening te gebruiken.\n Anders wordt uw selectie wordt ongedaan gemaakt. +keybindingmenu.remotecontrol_hardware_philips Philips +keybindingmenu.remotecontrol_hardware_tripledragon Triple Dragon +keybindingmenu.repeatblock Algemene vertraging +keybindingmenu.repeatblockgeneric Herhaal vertraging +keybindingmenu.sort Wijzig sorteer orde +keybindingmenu.subchanneldown subkanaal omloog keybindingmenu.subchannelup subkanaal omhoog -keybindingmenu.tvradiomode TV/Radio-mode -keybindingmenu.zaphistory Zap History Bouquet -keychooser.head verander Toets -keychooser.text1 Druk aub de nieuwe toets -keychooser.text2 wacht een paar seconden op abort -keychoosermenu.currentkey aktuele toets -keychoosermenu.setnew setup nieuwe toets -keychoosermenu.setnone geen toets -languagesetup.head Taal Keuze -languagesetup.select Taal -lcdcontroler.brightness normale Helderheid +keybindingmenu.tvradiomode TV/Radio modus +keybindingmenu.zaphistory Zap geschiedenis favorietenlijst +keychooser.head Nieuwe toets instellen +keychooser.text1 Drukt u alstublieft op de nieuwe toets Please press the new key +keychooser.text2 Wacht u alstublieft een ogenblik om te annuleren. +keychoosermenu.currentkey Huidige toets +keychoosermenu.setnew nieuwe toets instellen +keychoosermenu.setnone Geen toets +languagesetup.head Taal / Tijdzone +languagesetup.osd OSD taal +languagesetup.select OSD taal +lcd_info_line show in infoline +lcd_info_line_channel kanaalnaam +lcd_info_line_clock klok +lcdcontroler.brightness Normale helderheid +lcdcontroler.brightnessdeepstandby Deep Standby helderheid lcdcontroler.brightnessstandby Standby Helderheid -lcdcontroler.contrast Kontrast -lcdcontroler.head LCD Instellingen -lcdmenu.head LCD Instellingen -lcdmenu.lcdcontroler Kontrast / Helderheid -lcdmenu.statusline status lijn -lcdmenu.statusline.both volume / speelduur -lcdmenu.statusline.playtime speelduur +lcdmenu.dim_brightness Helderheid na dim timeout +lcdmenu.dim_time Dim timeout +lcdmenu.head VFD Instellingen +lcdmenu.lcdcontroler Helderheid +lcdmenu.statusline statuslijn +lcdmenu.statusline.both volume / afspeelduur +lcdmenu.statusline.playtime afspeelduur lcdmenu.statusline.volume volume -mainmenu.audioplayer Audio-speler -mainmenu.games Spellen -mainmenu.head Hoofd Menu +ledcontroler.blink Knipper in deepstandby indien een timer actief is. +ledcontroler.menu Aan/uit knop LEDs +ledcontroler.mode.deepstandby Deep Standby +ledcontroler.mode.record Knipper tijdens het opnemen +ledcontroler.mode.standby Stand-by +ledcontroler.mode.tv TV Modus +ledcontroler.off LED1 en LED2 uitgeschakeld +ledcontroler.on.all LED1 en LED2 ingeschakeld +ledcontroler.on.led1 Enkel LED1 ingeschakeld +ledcontroler.on.led2 Enkel LED2 ingeschakeld +mainmenu.audioplayer Audiospeler +mainmenu.clearsectionsd EPG geheugen opschonen +mainmenu.games Spelletjes +mainmenu.head Hoofdmenu +mainmenu.media Media mainmenu.movieplayer Movie-player mainmenu.pausesectionsd Lees EPG mainmenu.pictureviewer Afbeeldingen mainmenu.radiomode Radio-Mode -mainmenu.reboot Herstart neutrino +mainmenu.reboot Herstart systeem mainmenu.recording Opnemen -mainmenu.recording_start start -mainmenu.recording_stop stop +mainmenu.recording_start Start +mainmenu.recording_stop Stop +mainmenu.scripts Scripts mainmenu.service Onderhoud mainmenu.settings Instellingen -mainmenu.shutdown Uitzetten -mainmenu.sleeptimer SleepTimer +mainmenu.shutdown Uitschakelen +mainmenu.sleeptimer Slaaptimer mainmenu.tvmode TV-Mode +mainmenu.tvradio_switch TV-Radio Schakelaar mainsettings.audio Audio mainsettings.colors Kleur / thema / font mainsettings.head Instellingen -mainsettings.keybinding Toets Aanpassen -mainsettings.language Taal -mainsettings.lcd LC-Display +mainsettings.keybinding Sneltoetsen aanpassen +mainsettings.language Taal / Tijdzone +mainsettings.lcd Display instellingen +mainsettings.manage Beheer instellingen mainsettings.misc Diverse instellingen mainsettings.network Netwerk mainsettings.osd OSD instellingen mainsettings.recording Opnemen -mainsettings.savesettingsnow sla instellingen nu op -mainsettings.savesettingsnow_hint Sla instellingen op,\nwacht aub... +mainsettings.savesettingsnow Instellingen opslaan +mainsettings.savesettingsnow_hint Instellingen opslaan,\nmoment geduld... mainsettings.timezone Tijdzone mainsettings.video Video -menu.back terug -messagebox.back terug -messagebox.cancel herroep -messagebox.discard Niet uitvoeren? -messagebox.error Fout +menu.back Terug +menu.cancel Annuleer +menu.hint_a_pic Configureer audiospeler en afbeeldingen +menu.hint_aplay Audiospeler +menu.hint_audio Audio output, DD\nSRS True volume opties +menu.hint_audio_analog_mode Selecteer audio kanaal: \nstereo, mono-left, mono-right +menu.hint_audio_avsync A/V synchronisatie +menu.hint_audio_dd Automatisch gebruik maken van DolbyDigital audio indien beschikbaar +menu.hint_audio_hdmi_dd DolbyDigital via HDMI: Uit - decoded\nautomatisch indien het ondersteund is door het apparaat, forceer. +menu.hint_audio_spdif_dd DolbyDigital via optische SPDIF aansluiting +menu.hint_audio_srs SRS TruVolume volumebeheer springt\n bij content veranderingen +menu.hint_audio_srs_algo Mate van controle, licht of normaal +menu.hint_audio_srs_nmgr Noise manager +menu.hint_audio_srs_volume Referentie volume om aan te houden. +menu.hint_audio_volstep Volume +/- toetsen verhogen/verlagen stap +menu.hint_audioplayer_defdir Standaard audiospeler directory +menu.hint_audioplayer_follow Verplaats uw cursor naar huidige nummer in de afspeellijst +menu.hint_audioplayer_highprio Verhoog afspeel prioriteit +menu.hint_audioplayer_order Verander de sorteer order van de afspeellijst +menu.hint_audioplayer_playlist Afspeellijst items weergeven +menu.hint_audioplayer_repeat Herhaal modus inschakelen. Herhaal afspeellijst wanneer einde van de lijst bereikt is. +menu.hint_audioplayer_sc_metadata Meta data van audio streams inschakelen +menu.hint_audioplayer_screensaver Screensaver timeout instellen, in minuten +menu.hint_audioplayer_title Kunnen zoeken in SMS-style in de afspeellijst +menu.hint_auto_lang Automatisch de door u gewenste audiotaal selecteren +menu.hint_auto_subs Automatisch de door u gewenste ondertitelingstaal selecteren +menu.hint_back Keer terug naar het vorige menu\nDruk op de menu toets om alle menu's te sluiten. +menu.hint_backup Backup maken van configuratie en kanalenlijst in de geselecteerde directory. +menu.hint_bedit Bewerk favorieten en favorieten lijsten +menu.hint_bigwindows Altijd groot EPG Detailvenster weergeven. Met de Info toets kunt u de weergave aanpassen. +menu.hint_cache_txt Start teletekst gegevens tijdelijk opslaan (cache) na het schakelen van kanalen. +menu.hint_cec_mode CEC mode +menu.hint_cec_standby CEC stand-by +menu.hint_cec_view_on CEC view ingeschakeld +menu.hint_channellist_additional Extra informatie weergeven in hoofdvenster +menu.hint_channellist_colored Gebruik andere kleur voor huidige of volgende programma +menu.hint_channellist_epg_align EPG evenement uitlijnen +menu.hint_channellist_extended Programma voortgang balk weergeven +menu.hint_channellist_fonts Verander lettertype grote kanalenlijst +menu.hint_channellist_foot Extra informatie weergeven in onderste venster +menu.hint_channellist_setup Configureer kanalenlijst interface opties +menu.hint_ci Conditional access menu\n voor het instellen van uw CI module of kaartlezer +menu.hint_content_back Wijzig venster achtergrond kleur +menu.hint_content_textcolor Wijzig venster tekst kleur +menu.hint_contrast_fonts Lettertype contrast (Niet overgaan in achtergrond) +menu.hint_dboxinfo Informatie over STB CPU en opslag +menu.hint_delete_channels Verplaats alle kanalen +menu.hint_epg_cache Maximum aantal dagen cachen voor toekomstige programma's +menu.hint_epg_dir Selecteer directory op opslagmedium \nom EPG info op te slaan. +menu.hint_epg_extendedcache Maximaal aantal uren om uitgebreide programma omschrijving te cachen. +menu.hint_epg_fonts Wijzig lettertype grote EPG detail venster +menu.hint_epg_max_events Maximum aantal programma's om te cachen. +menu.hint_epg_old_events Het aantal uren na een programma \nvoordat deze wordt verwijderd uit het cache geheugen. +menu.hint_epg_save Cached EPG informatie opslaan op opslagmedium \nen laad de informatie na het opstarten. +menu.hint_epg_save_standby EPG opslaan in soft standby modus. +menu.hint_event_textcolor Wijzig programma kleur voor gekleurde \nprogramma opties in kanalenlijst en infobalk. +menu.hint_eventlist_fonts Wijzig lettertype grote in programma lijst +menu.hint_extended Stroombesparing, EPG opslaan/laden opties \nHDMI-CEC, Startkanaal, Zap opties +menu.hint_factory Fabrieksinstelling herstellen.\nUw ontvanger start zichzelf opnieuw op. +menu.hint_fade Grafische fade overgang van vensters +menu.hint_fan_speed Beheer ventilator snelheid +menu.hint_filebrowser_denydirectoryleave Voorkom dat de verkenner de initiële directory verlaat. +menu.hint_filebrowser_showrights Bestandsrechten weergeven in verkenner +menu.hint_fileplay Verschillende video bestanden afspelen +menu.hint_filesystem_is_utf8 Bestandsverkenner bestandssysteem encoding +menu.hint_font_gui Selecteer het algemene lettertype dat u wenst te gebruiken voor het gebruikersinterface +menu.hint_font_scaling Globale verticale en horizontale font schaling instellen. +menu.hint_font_ttx Selecteer het lettertype dat u wenst te gebruiken voor teletekst. +menu.hint_fonts Configureer lettertypes gebruikersinterface +menu.hint_gamelist_fonts Wijzig lettertype games en scripts lijst +menu.hint_games Lijst met geïnstalleerde games weergeven. +menu.hint_hdd Formatteer / check harde schijf +menu.hint_hdd_apply Slaap/Geluid parameters toepassen +menu.hint_hdd_check Controleer bestandssysteem (file system check) +menu.hint_hdd_format Creëer en formatteer HDD partitie +menu.hint_hdd_noise Akoestische instellingen instellen\nniet alle hardeschijven ondersteunen dit. +menu.hint_hdd_sleep Selecteer tijd voordat de HDD stopt bij inactiviteit. +menu.hint_hdd_tools Initialiseren HDD, bestandssysteem controleren. +menu.hint_head_back Wijzig titel achtergrond kleur +menu.hint_head_textcolor Wijzig venstertitel tekst kleur +menu.hint_imageinfo Informatie over geïnstalleerde software +menu.hint_inact_timer Ontvanger uitschakelen na inactiviteit +menu.hint_inactive_back Wijzig achtergrond kleur van inactieve items +menu.hint_inactive_textcolor Wijzig de tekst kleur van inactieve items +menu.hint_inet_radio Internet radio +menu.hint_info Informatie over firmware, ontvanger CPU,\nopslag en stream informatie +menu.hint_infobar_back Wijzig achtergrond kleur van de infobalk +menu.hint_infobar_casys Aan: display all with colored active, mini: single\nlocked icon, descreet: all active ca-sys +menu.hint_infobar_colored_event Gebruik andere kleur voor huidige programma en komende programma +menu.hint_infobar_dd Dolbydigital icoon weergeven +menu.hint_infobar_filesys Gebruikte schijfruimte van Flashgeheugen en HDD weergeven +menu.hint_infobar_fonts Wijzig lettertype grote van de infobalk +menu.hint_infobar_logo Logo / signaal opties +menu.hint_infobar_logo_dir Selecteer folder om in te zoeken naar zenderlogo's +menu.hint_infobar_on_epg Show Infobalk inschakelen bij veranderen van huidig EPG event +menu.hint_infobar_progressbar Selecteer de opties van de voortgangsbalk in de infobalk +menu.hint_infobar_radiotext Radio tekst venster weergeven +menu.hint_infobar_res Kanaal resolutie iconen weergeven +menu.hint_infobar_sat Huidige satelliet of kabel provider weergeven +menu.hint_infobar_setup Configureer infobalk opties +menu.hint_infobar_textcolor Wijzig tekst kleur van de infobalk +menu.hint_infobar_tuner Actieve tuner icon weergeven +menu.hint_keep_numbers Behoud kanaalnummers na het uitvoeren van volgende scans +menu.hint_key_addrecord Knop toewijzen voor het toevoegen van een opname timer +menu.hint_key_addremind Knop toewijzen voor het toevoegen van een zap timer +menu.hint_key_audio Aan: 'audio' toets wordt gebruikt voor het weergeven van het audio afspeelmenu.\nUit: 'audio' toets wordt gebruikt voor het weergeven van de audio selectie. +menu.hint_key_binding Herdefinieer het gebruik van toetsen voor algemene handelingen +menu.hint_key_bouquetdown Knop toewijzen voor het schakelen naar de vorige favorietenlijst +menu.hint_key_bouquetup Knop toewijzen voor het schakelen naar de volgende favorietenlijst +menu.hint_key_cancel Knop toewijzen voor het sluiten van een geopend menu venster +menu.hint_key_channel_sms Indien ingeschakeld worden de nummerieke toetsen gebruikt voor de invoer\nvan alfabetische tekens. U kunt zo gemakkelijk een kanaal zoeken in uw favorietenlijst. +menu.hint_key_channeldown Knop toewijzen om snel te schakelen \nnaar het vorige kanaal in de kanalenlijst +menu.hint_key_channellist Configuur sneltoetsen voor de kanalenlijst +menu.hint_key_channelup Knop toewijzen om snel te schakelen \nnaar het volgende kanaal in de kanalenlijst +menu.hint_key_hardware Wijzig het type afstandsbediening +menu.hint_key_history Knop toewijzen voor de weergave van de zap geschiedenis +menu.hint_key_lastchannel Knop toewijzen om snel te zappen naar \nhet vorige kanaal in de zap geschiedenis +menu.hint_key_left_exit De linker cursor toewijzen om het vorige menu te openen. +menu.hint_key_list_end Knop toewijzen om naar het einde van de lijst te gaan. +menu.hint_key_list_start Knop toewijzen om naar het begin van de lijst te gaan. +menu.hint_key_load Laad sneltoetsen backup +menu.hint_key_modechange Wijzig TV/Radio mode en standby toetsen +menu.hint_key_movieplayer Configureer sneltoetsen voor de Movie-Player +menu.hint_key_mpaudio Knop toewijzen voor de weergave van audio selectie\ntijdens het afspelen van een opname. +menu.hint_key_mpbookmark Knop toewijzen om een bladwijzer te plaatsen in een opname tijdens het afspelen hiervan. +menu.hint_key_mppause Knop toewijzen om het afspelen van een opname te pauzeren +menu.hint_key_mpplay Knop toewijzen om het afspelen van een opname te hervatten +menu.hint_key_mpplugin Knop toewijzen om tijdens het afspelen van een opname \neen geselecteerde plugin te starten. +menu.hint_key_mprewind Knop toewijzen voor het terugspoelen van een opname +menu.hint_key_mpstop Knop toewijzen voor het stoppen van het afspelen/opnemen van een opname. +menu.hint_key_mptime Knop toewijzen voor de weergave van de resterende afspeeltijd +menu.hint_key_mptimeshift Knop toewijzen voor het starten van de timeshift functie +menu.hint_key_pagedown Knop toewijzen voor de pagina weergave van het volgende item +menu.hint_key_pageup Knop toewijzen voor de pagina weergaven van het vorige item +menu.hint_key_poweroff Knop toewijzen om te schakelen tussen standby/deepstandby en ontvanger ingeschakeld. +menu.hint_key_quickzap Configureer sneltoetsen voor \nhet snel schakelen tussen kanalen +menu.hint_key_repeatblock Delay after button press and before\nfirst key repeat +menu.hint_key_repeatblockgeneric Vertraging tussen het herhalen \nvan toets wanneer toets ingedrukt blijft. +menu.hint_key_right Selecteer 'rechts' functie in live TV/Radio modus. +menu.hint_key_save Sneltoetsen opslaan als backup bestand +menu.hint_key_screenshot Knop toewijzen voor het opslaan van gebruikers interface en/of TV screenshot. +menu.hint_key_sort Knop toewijzen voor het veranderen van de sorteer orde van uw kanalenlijst +menu.hint_key_subchanneldown Knop toewijzen om snel te \nschakelen naar het vorige subkanaal +menu.hint_key_subchannelup Knop toewijzen om snel te \nschakelen naar het volgende subkanaal +menu.hint_key_transponder Knop toewijzen voor de weergave van\n de kanalenlijst op de huidige transponder +menu.hint_key_tvradiomode Knop toewijzen voor het schakelen tussen Radio en TV +menu.hint_key_unlock Knop toewijzen voor het ontgrendelen van de ontvanger.\nOm te ontgrendelen drukt u eerst op de rode toets \ngevolgd door de door u gedefinieerde toets (binnen 5 seconden). +menu.hint_keys Afstandsbediening herhaal ratio \nbewerk sneltoetsen +menu.hint_lang_pref Selecteer de door u gewenste \naudio, EPG en ondertitelingstaal. +menu.hint_language OSD taal, tijdzone \n Voorkeurs audio en ondertitelingstaal +menu.hint_last_radio Start de ontvanger op het door u geselecteerde \nradio kanaal indien deze voor het laatst in radio \nmodus is gebruikt. +menu.hint_last_tv Start de ontvanger op het door u geselecteerde \nTV kanaal indien deze voor het laatst in TV \nmodus is gebruikt. +menu.hint_last_use Start de ontvanger op het laatst bekeken kanaal +menu.hint_leds_blink LEDS knipperen in deep-standby +menu.hint_leds_deepstandby LEDs status in deeps-standby mode +menu.hint_leds_record LEDs status wanneer een opname gemaakt wordt +menu.hint_leds_standby LEDs status in soft-standby mode +menu.hint_leds_tv LEDs status indien de ontvanger in werking is +menu.hint_load Laad Neutrino-HD gebruikersinterface \ninstellingen van back-up bestand +menu.hint_make_hdlist Automatisch HD kanalenlijst maken \ngebaseerd op kanaaltype en naam +menu.hint_make_newlist Kanalenlijst aanmaken met recent toegevoegde kanalen +menu.hint_make_removedlist Kanalenlijst aanmaken met recent verwijderde kanalen +menu.hint_manage_settings Backup, Herstel, Fabrieksinstellingen +menu.hint_mb Uw opnames +menu.hint_media Films, audio bestanden afspelen of afbeeldingen weergeven +menu.hint_menu_fonts Lettertype grote van menu's aanpassen +menu.hint_menu_hints Hints weergeven Show this hints. U kunt tevens gebruik maken van de 'help' toets. +menu.hint_misc_cec HDMI-CEC Opties +menu.hint_misc_channellist HD/Nieuw/Verwijderde kanalen lijst \nZap cyclus +menu.hint_misc_energy Softstandby, uitgesteld uitschakelen en inactiviteit timers inschakelen +menu.hint_misc_epg Opslaan/laden EPG opties, EPG cache opties\n EPG opslag directory +menu.hint_misc_filebrowser Bestandssysteem codering, bestandsrechten +menu.hint_misc_general Opstarten in standby, teletekst cache, swp motor \nplugin, HDD directory +menu.hint_misc_zapit Initiële TV/Radio kanalen +menu.hint_movie Films afspelen +menu.hint_net_broadcast Voer het IP broadcast adres in. +menu.hint_net_dhcp Gebruik DHCP server om automatisch te configureren +menu.hint_net_djmount Koppel UPnP apparaten onder /media/00upnp +menu.hint_net_ftpd Bestandsoverdracht via FTP inschakelen +menu.hint_net_gateway Gateway/router IP adres invoeren +menu.hint_net_hostname Wijzig de hostnaam van uw ontvanger +menu.hint_net_if Selecteer interface om te configureren +menu.hint_net_ipaddress Voer het IP adres van uw ontvanger in. +menu.hint_net_mount Configureer, koppel of ontkoppel gedeelde netwerklocaties\n NFS en CIFS ondersteund. +menu.hint_net_nameserver Voer naamserver in (DNS) IP adres +menu.hint_net_netmask Voer netwerkmasker in.\n Indien u het niet weet gebruikt u\n255.255.255.0 +menu.hint_net_nfs_mount Configureer en koppel netwerklocaties +menu.hint_net_nfs_umount Ontkoppel netwerklocaties +menu.hint_net_ntp Configureer tijd synchronisatie +menu.hint_net_ntpenable Tijd synchronisatie inschakelen (NTP protocol) \nIndien NTP synchronisatie niet succesvol is zal DVB worden gebruikt. +menu.hint_net_ntprefresh Tijd synchronisatie interval +menu.hint_net_ntpserver NTP servernaam invoeren +menu.hint_net_pass Wachtwoord invoeren (WPA-PSK) +menu.hint_net_proxy Configureer hier uw proxy server indien u hier gebruik van maakt. +menu.hint_net_proxypass Proxy wachtwoord\n(indien autorisatie vereist is) +menu.hint_net_proxyserver Proxy servernaam +menu.hint_net_proxyuser Proxy gebruikersnaam\n(indien autorisatie vereist is) +menu.hint_net_services Configureer netwerkdiensten\n(Telnet, FTP, uPNP) +menu.hint_net_setupnow Huidige instellingen toepassen +menu.hint_net_setuponstartup Start netwerk tijdens het opstarten +menu.hint_net_show Huidige netwerk instellingen weergeven +menu.hint_net_ssid SSID van draadloos netwerk waarmee u \nverbinding wilt maken invoeren +menu.hint_net_telnet Telnet login op uw ontvanger inschakelen +menu.hint_net_test Test netwerk verbinding: Ping gateway,\nnaamserver en extern IP adres +menu.hint_net_ushare Deel verbonden opslagmedium via uPnP +menu.hint_network IP adres, gateway, DNS, Tijd synchronisatie\nNetwerklocaties en services +menu.hint_new_zap_mode Schakelen van kanalen toestaan tijdens het browsen.\n(Schakelen tussen vensters met de 'Mute' toets) +menu.hint_osd Kleuren, Lettertypes, scherm afmeting\ngebruikersinterface vormgeving +menu.hint_osd_language Selecteer OSD taal +menu.hint_osd_preset Voorgedefinieerde scherm marges voor CRT en LCD TV +menu.hint_parentallock_changepin Verander PIN code +menu.hint_parentallock_lockage Selecteer toegestane kijk leeftijd +menu.hint_parentallock_prompt Instellen wanneer de pincode ingevoerd dient te worden +menu.hint_personalize Inschakelen, Uitschakelen of bescherm menu items\n Configureer gekleurde toetsen per gebruikersmenu +menu.hint_pictureviewer_defdir Standaard afbeeldingen map +menu.hint_pictureviewer_scaling Afbeeldingen schaal algoritme +menu.hint_pictureviewer_slide_time Slideshow interval, in seconden +menu.hint_picview Bekijk afbeeldingen +menu.hint_plugins_hdd_dir Selecteer plugin directory +menu.hint_power_leds Configureer LED power-button +menu.hint_pref_lang Selecteer de gewenste audio en EPG taal.\nSelecteer 'geen' om geen voorkeurstaal in te stellen. +menu.hint_pref_subs Selecteer de gewenste ondertitelingstaal.\nSelecteer 'geen' om geen voorkeurstaal in te stellen. +menu.hint_progressbar_color Gekleurde voortgangsbalken weergeven +menu.hint_protection Bescherm content met een pincode\nDe standaard pincode is 0000. +menu.hint_radiomode Schakel de ontvanger in radio modus. +menu.hint_reboot Herstart de ontvanger \n zonder bevestiging. +menu.hint_record_apid_ac3 AC3 audio PIDS opnemen +menu.hint_record_apid_alt Alternatieve (niet AC3) audio PIDS opnemen +menu.hint_record_apid_std Eerste audio PID opnemen +menu.hint_record_apids Configureer de op te nemen audio pids +menu.hint_record_apply Opname opties toepassen +menu.hint_record_chandir Creeer map met de naam van \nhet op te nemen kanaal om de opname in op te slaan +menu.hint_record_dir Selecteer map waarin opnames opgeslagen worden +menu.hint_record_end Stop directe opnames na een bepaalde (max.) tijd \nof aan het einde van het huidige programma. +menu.hint_record_slow_warn Waarschuwing weergeven wanneer opname buffer dichtbij overloop is. +menu.hint_record_tdir Selecteer map waarin tijdelijke timeshift opnames worden opgeslagen. +menu.hint_record_time Resterende opname tijd voordat de opname\nstopt tijdens het maken van een directe opname +menu.hint_record_timeafter Aantal minuten dat de opname doorloopt na het einde van het programma +menu.hint_record_timebefore Aantal minuten dat opgenomen wordt \nvoor het op te nemen programma begint +menu.hint_record_timer Configureer opname timer opties +menu.hint_record_timeshift Configureer timeshift opties +menu.hint_record_timeshift_auto Automatisch timeshift starten na het schakelen tussen kanalen, in seconden +menu.hint_record_timeshift_delete Verwijder alle timeshift opnames na het stoppen van Timeshift. +menu.hint_record_timeshift_pause Timeshift starten zodra live uitzendingen gepauzeerd worden +menu.hint_record_timeshift_temp Indien uitgeschakeld, start timeshift \nals een willekeurige directe opname +menu.hint_record_zap Schakel naar het op te nemen kanaal bij de opname melding +menu.hint_record_zap_pre_time Een aantal minuten voor een ingestelde zaptimer naar het kanaal schakelen. +menu.hint_recording Opname en timeshift opties \n Timers beveiliging, audio PIDS opties +menu.hint_reload_channels Herlaad kanalen vanaf flashgeheugen +menu.hint_reload_plugins Herlaad plugins vanaf flashgeheugen +menu.hint_reset Reset gebruikersinterface naar standaard instellingen\n Tuner configuratie en kanalen worden niet beïnvloed. +menu.hint_restore Herstel geselecteerde back-up +menu.hint_rotor_swap Draai motor oost/west +menu.hint_rounded_corners Teken ronde of vierkante vensterhoeken +menu.hint_save_settings Alle instellingen opslaan op flashgeheugen +menu.hint_saveas Gebruikersinterface instellingen opslaan +menu.hint_scan_auto Auto-scan geselecteerde provider +menu.hint_scan_autoall Scan verschillende geselecteerde providers tegelijkertijd +menu.hint_scan_autoall_select Satellieten toevoegen om te scannen +menu.hint_scan_bouquet Selecteer wat u wenst te doen met de huidige favorieten lijsten. +menu.hint_scan_cable Selecteer het kabel netwerk dat u wenst te scannen +menu.hint_scan_cable_simple Kabel scan met optionele \nzender programmering +menu.hint_scan_commited Selecteer commited input voor\ndeze satelliet +menu.hint_scan_diseqc Selecteer DiSEqC switch input voor\ndeze satelliet +menu.hint_scan_diseqcrepeat DiSEqC herhalen voor cascade switches +menu.hint_scan_diseqctype Selecteer uw DiSEqC switch protocol\nmet 'geavanceerd' kunt u uncommited switches gebruiken +menu.hint_scan_fast CanalDigitaal/TéléSAT/TV Vlaanderen provider scan\nWaarschuwing: diseqc instellingen worden overschreven. +menu.hint_scan_fastprov Selecteer uw provider +menu.hint_scan_fasttype Selecteer het type Fastscan +menu.hint_scan_fec Selecteer transponder FEC +menu.hint_scan_femode Selecteer tweede tuner aansluiting type +menu.hint_scan_fesetup Configureer tuner(s) +menu.hint_scan_fetimeout Wachten op signaal, in 1/10 of seconden +menu.hint_scan_freq Transponder frequentie invoeren +menu.hint_scan_fta Alleen vrij te ontvangen kanalen toevoegen +menu.hint_scan_ladirection Selecteer Breedtegraad (latitude) +menu.hint_scan_latitude Breedtegraad (latitude) invoeren +menu.hint_scan_lnbconfig Configureer LNB parameters voor deze satelliet +menu.hint_scan_lodirection Selecteer Lengtegraad (longtitude) +menu.hint_scan_lofh High banb LNB frequentie +menu.hint_scan_lofl Low band LNB frequentie +menu.hint_scan_lofs Band switch LNB frequentie +menu.hint_scan_logical Gebruik de zender nummering van de provider +menu.hint_scan_logical_hd Indien een kanaal zowel in SD als HD uitgezonden wordt \nplaats het HD kanaal boven in de lijst +menu.hint_scan_manual Handmatige transponder scan gebruik \nde geselecteerde parameters +menu.hint_scan_mod Selecteer transponder modulatie +menu.hint_scan_motor_18v Gebruik 18V voor het draaien van de DiSEqC motor +menu.hint_scan_motor_speed Draaisnelheid van de motor \nin 1/10 graden per seconde +menu.hint_scan_motorpos Selecteer opgeslagen positie \nvoor deze satelliet +menu.hint_scan_nid Netwerk ID invoeren +menu.hint_scan_nit Transpoders toevoegen via netwerk informatie +menu.hint_scan_pids Scan en opslaan audio/video/PMT PIDs +menu.hint_scan_pol Selecteer transponder polarisatie +menu.hint_scan_rate Transponder symbol ratio invoeren +menu.hint_scan_reset_numbers Bestaande kanaalnummers opnieuw instellen. Opnieuw kanaalnummers toewijzen na scan. +menu.hint_scan_satadd Nieuwe satellieten toevoegen +menu.hint_scan_satellite Selecteer satelliet die u wenst te scannen +menu.hint_scan_satenable Satelliet inschakelen +menu.hint_scan_satfind Satelliet zoeker: Handmatig motor draaien naar opgeslagen posities. +menu.hint_scan_satfind_start Start met het zoeken naar satellieten +menu.hint_scan_satscan Scan geselecteerde satelliet +menu.hint_scan_satselect Selecteer satelliet +menu.hint_scan_satsetup Configureer satelliet opties +menu.hint_scan_savesettings Tuner configuratie en scan instellingen opslaan.\nOok opgeslagen indien u een service scan start. +menu.hint_scan_scantype Selecteer, welke kanaal types u wenst te scannen +menu.hint_scan_setup_fe Configureer geselecteerde frontend opties +menu.hint_scan_start Start scan. U kunt de 'exit' toets gebruiken om te stoppen. +menu.hint_scan_test Test signaal voor deze transponder +menu.hint_scan_tpselect Selecteer de transponder die u wenst te scannen +menu.hint_scan_uncommited Selecteer uncommited input voor\ndeze satelliet +menu.hint_scan_usals_repeat Herhaal USALS draai motor command indien uw motor onstabiel draait. +menu.hint_scan_usalsall Set/unset usals vlag voor alle satellieten +menu.hint_scan_useusals Gebruik USALS voor\ndeze satelliet +menu.hint_scrambled_message 'Gecodeerd' melding weergeven indien kanaal niet gedecodeerd kan worden +menu.hint_screen_setup Configureer marges van het scherm +menu.hint_screenshot_count Wanneer er geen gebruikersinterface op \nhet scherm is kunt u 1-5 screenshots opslaan. +menu.hint_screenshot_cover Aan: Tijdens het maken van een opname kunt u \neen screenshot maken om weer te geven in de moviebrowser +menu.hint_screenshot_dir Selecteer map waarin screenshots opgeslagen worden +menu.hint_screenshot_format Bestandsformaat waarin screenshots worden gemaakt +menu.hint_screenshot_res Screenshot afmeting: Afmeting van huidig video kanaal\nof OSD afmeting (1280 x 720) +menu.hint_screenshot_scale Voor video+OSD screenshots, schaal naar video afmeting +menu.hint_screenshot_setup Configureer screenshots opties +menu.hint_screenshot_video Live video invoegen in screenshot +menu.hint_scripts Scripts uitvoeren +menu.hint_selected_back Wijzig achtergrond kleur van het geselecteerde item +menu.hint_selected_text Wijzig test kleur van het geselecteerde item +menu.hint_service Tuner instellingen, service scan,\nfavorietenlijst editor, software update +menu.hint_service_scan Tuner instellingen, service scan +menu.hint_settings Configureer Neutrino-HD\nNetwerk, audio, video, OSD en meer +menu.hint_show_mute_icon Mute icoon weergeven wanneer volume op 0 staat. +menu.hint_shutdown Schakel uw ontvanger in deep standby modus\n geen bevestiging +menu.hint_shutdown_count Tijd voordat uw ontvanger in deepstand-by schakelt vanuit soft-standby modus +menu.hint_shutdown_rcdelay Deep standby modus inschakelen wanneer de power toets meer dan 1 seconden ingedrukt wordt. +menu.hint_shutdown_real Soft-standby inschakelen indien soft-standby is \nuitgeschakeld schakelt de ontvanger gelijk in deep standby +menu.hint_sleeptimer Timer instellen om uw ontvanger in slaapstand te schakelen +menu.hint_soft_restart Herstart Neutrino-HD zonder reboot +menu.hint_softupdate_check Controleer online voor updates, download en installeer deze. +menu.hint_softupdate_check_local Selecteer en installeer firmware vanaf een lokaal bestand +menu.hint_softupdate_expert Verdeel partities van het flash geheugen\n en lees/schrijf op het flash geheugen. +menu.hint_softupdate_expert_read Verdeel partitie's (U-Boot, Splash, Kernel, SystemFS) voor het lezen van flashgeheugen +menu.hint_softupdate_expert_write Verdeel partitie's (Splash, Kernel, SystemFS) voor het schrijven op het flashgeheugen +menu.hint_softupdate_settings De lokale update directory en configuratie bestand is ingesteld +menu.hint_start_tostandby Schakel in standby mode na het herstarten +menu.hint_streaminfo Informatie huidig kanaal: pids, signaal and noise ratio\nBitratio grafieken +menu.hint_subchannel_pos Selecteer menu positie van subkanalen +menu.hint_sw_update Update software +menu.hint_theme Select voorgedefinieerde thema\n Opslaan of laad thema van bestand +menu.hint_timeouts Verberg gebruikers interface na bepaald aantal seconden. +menu.hint_timers Toevoegen/Verplaats/Bewerk \ngeplande opnames of timers etc. +menu.hint_timezone Selecteer uw tijdzone +menu.hint_tvmode Schakel ontvanger in TV modus +menu.hint_tvradio_switch Schakelen tussen TV en Radio modus +menu.hint_vfd Voorpaneel LEDS, VFD opties +menu.hint_vfd_brightness Helderheid in gebruik +menu.hint_vfd_brightness_setup Configureer helderheid van het display +menu.hint_vfd_brightnessdeepstandby Helderheid in deep-standby modus +menu.hint_vfd_brightnessdim Automatisch helderheid dimmen +menu.hint_vfd_brightnessstandby Helderheid in soft-standby modus +menu.hint_vfd_defaults Herstel standaard waarden helderheid +menu.hint_vfd_dimtime Automatisch helderheid dimmen na bepaald aantal seconden +menu.hint_vfd_infoline Selecteer hetgeen wordt weergegeven in de hoofd VFD lijn +menu.hint_vfd_statusline Selecteer wat wordt weergegeven in de VFD status lijn +menu.hint_video Video uitgang, resolutie, formaat\nAspect ratio, fast mode switch opties +menu.hint_video_43mode Weergave modus voor 4:3 content\nop 16:9 TV +menu.hint_video_analog_mode Selecteer analoge output modus\nvoor SCART en CINCH aansluiting(en) +menu.hint_video_cinch_mode Selecteer analoge output modus voor\ncomposiet video uitgang +menu.hint_video_dbdr MPEG2 enhancement filters +menu.hint_video_format TV aspect ratio +menu.hint_video_mode HDMI output video modus +menu.hint_video_modes VF toets schakelt tussen de ingeschakelde opties +menu.hint_video_scart_mode Selecteer analog output modus voor SCART aansluiting(en) +menu.hint_volume_digits Numerieke weergave van de volume balk aan/uit +menu.hint_volume_pos Selecteer positie volume indicator +menu.hint_zap_cycle Tijdens het schakelen tussen kanalen in huidige favorieten lijst +menu.next Volgende (Druk op menu om af te sluiten) +messagebox.back Terug +messagebox.cancel Annuleer +messagebox.discard Wijzigingen ongedaan maken? +messagebox.error Foutmelding messagebox.info Informatie messagebox.no Nee +messagebox.ok Ok messagebox.yes Ja miscsettings.channellist Kanalenlijst -miscsettings.channellist_epgtext_align Huidige uitzending tonen -miscsettings.epg_cache EPG cache (Dagen) -miscsettings.epg_extendedcache Beschrijvingen behouden (Uren) -miscsettings.epg_old_events EPG verwijderen na (Uren) -miscsettings.epg_max_events Max. events +miscsettings.channellist_colored_events Gekleurde programma's +miscsettings.channellist_epgtext_align Uitlijning programma tekst +miscsettings.colored_events_0 Geen +miscsettings.colored_events_1 Huidige +miscsettings.colored_events_2 Straks +miscsettings.energy Energie +miscsettings.epg_cache EPG-Cache (Dagen) +miscsettings.epg_cache_hint1 Hoe ver in de toekomst wordt EPG informatie bewaard. +miscsettings.epg_cache_hint2 Instellen in dagen. +miscsettings.epg_dir EPG pad opslaan +miscsettings.epg_extendedcache EPG Lange omschrijving (uren) +miscsettings.epg_extendedcache_hint1 Hoe ver in de toekomst worden uitgebreide +miscsettings.epg_extendedcache_hint2 EPG omschrijvingen bewaard (Instellen in uren) +miscsettings.epg_head EPG +miscsettings.epg_max_events Max. programma's +miscsettings.epg_max_events_hint1 Hoeveel programma's moeten worden opgeslagen? +miscsettings.epg_max_events_hint2 normaal 6000, 0 om geen limiet in te stellen. +miscsettings.epg_old_events Verwijder EPG informatie na (std.) +miscsettings.epg_old_events_hint1 Hoe lang wordt EPG informatie bewaard na time-out? +miscsettings.epg_old_events_hint2 In uren instellen +miscsettings.epg_save EPG opslaan / herstellen na herstart +miscsettings.epg_save_standby EPG opslaan in soft standby miscsettings.general Algemeen miscsettings.head Diverse instellingen -miscsettings.infobar_sat_display Satelliet display op infobar -miscsettings.shutdown_count Geheel uitschakelen na -miscsettings.shutdown_real Schakel standby in -miscsettings.shutdown_real_rcdelay Vertraagde shutdown -miscsettings.startbhdriver laad BH-Mode drivers -motorcontrol.head Motor-Setup -movieplayer.bookmark Bookmarks -movieplayer.bookmarkname Bookmarknaam -movieplayer.bookmarkname_hint1 Geef een naam in voor je nieuwe bookmark -movieplayer.bookmarkname_hint2 -movieplayer.fileplayback File via VLC -movieplayer.head Filmspeler -movieplayer.toomanybookmarks Er zijn teveel bookmarks.\nWis er eerst een van. -movieplayer.tsplayback Speel TS -networkmenu.broadcast Broadcast -networkmenu.dhcp DHCP -networkmenu.gateway default gateway -networkmenu.ipaddress IP adres -networkmenu.mount NFS/CIFS -networkmenu.nameserver server naam -networkmenu.netmask netmask -networkmenu.ntpenable Synchroniseren van tijd via internet -networkmenu.ntprefresh NTP/ DVB-verversen na (sek.) -networkmenu.ntprefresh_hint1 NTP/ DVB-time-sync in minuten -networkmenu.ntprefresh_hint2 EPG-Reset of reboot benodigd -networkmenu.ntpserver NTP-Server (Time-server) -networkmenu.ntpserver_hint1 NTP-server Bijvoorbeeld: ntp1.ptb.de -networkmenu.ntpserver_hint2 EPG-Reset of reboot benodigd -networkmenu.ntptitle Tijd-syncronisatie -networkmenu.setupnow netwerk veranderingen uitvoeren -networkmenu.setuponstartup netwerk bij startup -networkmenu.show Toon actief netwerk instellingen -networkmenu.test test netwerk nu -nfs.alreadymounted directory reeds gemounted -nfs.automount mount bij startup -nfs.dir directory/share -nfs.ip NFS/CIFS Server IP -nfs.localdir local dir -nfs.mount Mount NFS/CIFS volume -nfs.mount_options mount opties -nfs.mounterror mount fout -nfs.mounterror_notsup filesysteem type niet ondersteund -nfs.mountnow mount nu -nfs.mounttimeout mount fout: timeout -nfs.password CIFS paswoord -nfs.remount remount directories -nfs.type type -nfs.type_cifs CIFS -nfs.type_nfs NFS -nfs.umount Unmount NFS/CIFS volume -nfs.umounterror unmounting volume fout -nfs.username CIFS gebruikersnaam -nfsmenu.head NFS/CIFS instellingen -nvod.percentage (%d%% over) -nvod.starting (start in %d min) -nvodselector.directormode Director-Mode -nvodselector.head Selecteer start-tijd -nvodselector.subservice Selecteer Subservice -options.default Reset naar defaults -options.fb framebuffer -options.null nul -options.off uit -options.on aan -options.serial serieel -parentallock.changepin verander PIN code -parentallock.changepin_hint1 Geef de nieuwe jeugd-bescherm pin code hier in! -parentallock.changetolocked bij gesloten bouquets -parentallock.head Geef Lock PIN code in -parentallock.lockage gesloten programma's -parentallock.lockage12 tot aan 12 jaar -parentallock.lockage16 tot aan 16 jaar -parentallock.lockage18 tot aan 18 jaar -parentallock.lockedchannel gelockt kanaal... -parentallock.lockedprogram GeLockt programma (tot aan %d jaar) -parentallock.never nooit -parentallock.onsignal bij uitgezending lock -parentallock.parentallock Jeugd bescherming -parentallock.prompt prompt voor PIN -pictureviewer.defdir start dir. -pictureviewer.head Viewer -pictureviewer.resize.color_average gemiddeld -pictureviewer.resize.none niet -pictureviewer.resize.simple eenvoudig -pictureviewer.scaling scaling -pictureviewer.show Tonen -pictureviewer.slide_time speelduur van diashow -pictureviewer.slideshow diashow -pictureviewer.sortorder verander sorteer volgorde -pictureviewer.sortorder.date datum -pictureviewer.sortorder.filename bestandsnaam -ping.ok is bereikbaar (ping) -ping.protocol is onbereikbaar (host of protocol fout) -ping.socket is onbereikbaar (socket fout) -ping.unreachable is onbereikbaar -pinprotection.head Geef PIN code in -pinprotection.wrongcode PIN-Code was verkeerd! Probeer opnieuw. -rclock.lockmsg Je A-fstand B-ediening is vergrendeld.\nOm je A-B te ontgrendelen, druk en \nop je A-fstand B-ediening. -rclock.menueadd Vergrendel A-B -rclock.title Vergrendel Afstand Bediening -rclock.unlockmsg A-fstand B-ediening gereactiveerd. -recordingmenu.defdir Opname opslaan in -recordingmenu.file direct (file) -recordingmenu.help Recording devices:\n--------------------------\nserver:\ngebruik stream software op een PC\n\n(analoog) vcr:\ngebruik de vcr uitgang\n\ndirect (file):\ndirect in een NFS mounted directory\nof op een interne hard disk\nTS: gebruik spts mode(dbox2)\nPES: niet spts mode(dbox2) gebruiken\n\n\nMax. file grootte:\n---------------------\nNFS V2: 2 GB (2048 MB)\nNFS V3: bijna ongelimiteerd (0 MB)\nFAT: 2 GB (2048 MB)\nFAT32: 4 GB (4096 MB) -recordingmenu.off uit -recordingmenu.server server -recordingmenu.server_mac MAC adres -recordingmenu.setupnow activeer veranderingen nu -recordingmenu.tsdir TS opslaan in -recordingmenu.vcr vcr -recordtimer.announce Opname start over enkele minuten -reset_channels Wis alle kanalen -reset_settings Terug naar fabrieksinstellingen -repeatblocker.hint_1 Kortste tijd (in ms) tussen 2 toets aanslagen -repeatblocker.hint_2 0 schakeld de blocker uit (rood is space) -satsetup.diseqc DiSEqC -satsetup.diseqc10 DiSEqC 1.0 -satsetup.diseqc11 DiSEqC 1.1 -satsetup.diseqc12 DiSEqC 1.2 -satsetup.diseqcrepeat DiSEqC-herhalingen -satsetup.extended DiSEqC-Instellingen -satsetup.extended_motor Motor-Instellingen -satsetup.auto_scan Automatisch scannen -satsetup.auto_scan_all Alle satellieten automatisch scannen -satsetup.manual_scan Handmatig scannen -satsetup.minidiseqc Mini-DiSEqC -satsetup.nodiseqc geen DiSEqC -satsetup.satellite Satelliet -satsetup.smatvremote SMATV Remote Tuning -scants.actcable Kabel: -scants.actsatellite Satelliet: -scants.bouquet Bouquet -scants.bouquet_create creeer nieuw -scants.bouquet_erase wissen -scants.bouquet_leave niet veranderen -scants.bouquet_satellite Satelliet-Bouquet -scants.bouquet_update update -scants.channel kanaal: -scants.failed Transponderscan mislukt! -scants.finished Transponderscan succesvol beeindigd! -scants.freqdata Frequentie: -scants.head Scan transponder -scants.numberofdataservices Data -scants.numberofradioservices Radio -scants.numberoftotalservices Totaal -scants.numberoftvservices TV -scants.provider Provider: -scants.startnow start scan -scants.transponders Transponders: -screensetup.lowerright groen = rechts onder instellen -screensetup.upperleft rood = links boven instellen -servicemenu.head Onderhoud -servicemenu.reload lees kanaallijst opnieuw in -servicemenu.reload_hint Lees kanaallijst opnieuw in,\ngeduld aub. -servicemenu.scants Kanalen zoeken -servicemenu.update Software Update -settings.help Help -settings.missingoptionsconffile De neutrino-instellingen zijn geupdated.\nNieuwe opties worden op default gezet. -settings.noconffile Geen neutrino-instellingen gevonden.\nGebruik default. -shutdowntimer.announce Box gaat shutdown over 1 min.\nShutdown afbreken? -sleeptimerbox.announce Sleeptimer over 1 min -sleeptimerbox.hint1 Shutdown tijd in min. (000=uit) -sleeptimerbox.hint2 De ruDbox gaat shutdown na deze tijd. -sleeptimerbox.title Sleeptimer -streaminfo.aratio verhouding -streaminfo.aratio_unknown verhoudig: onbekend -streaminfo.audiotype Audiotype -streaminfo.bitrate Bitrate -streaminfo.framerate Framerate -streaminfo.framerate_unknown Framerate: onbekend -streaminfo.head Stream-Informatie -streaminfo.not_available niet beschikbaar -streaminfo.resolution Resolutie -streaminfo.signal Ontvangst signaal -streaming.busy Een of meerdere opneem processen zijn aktief.\nAls je dit bericht krijgt en geen opname is aktief,\nherstart Neutrino aub. -streaming.dir_not_writable De opneem directory is niet beschrijfbaar.\nOpname zal niet gaan. -streaming.write_error De opname was afgebroken,\nomdat er een fout optrad gedurende het schrijven. -stringinput.caps Hoofd- / kleine letters -stringinput.clear alles schoonmaken -timer.eventrecord.msg ... DOEN, of LATEN -timer.eventrecord.title Markeer uitzending -timer.eventtimed.msg De uitzending is gemarkeerd.\nDe ruDbox zal aan gaan en\nnaar dit kanaal schakelen op de aangegeven tijd. -timer.eventtimed.title Uitzending markeren -timerbar.channelswitch markeren -timerbar.recordevent Opnemen -timerlist.alarmtime Alarm tijd -timerlist.apids Audio PIDs -timerlist.bouquetselect kies bouquet -timerlist.channel Kanaal -timerlist.channelselect kies kanaal -timerlist.delete Wis -timerlist.menumodify Pas timer aan -timerlist.menunew Nieuwe timer -timerlist.message Bericht -timerlist.moderadio Radio kanalen -timerlist.modeselect Mode kiezen -timerlist.modetv TV kanalen -timerlist.modify Pas aan -timerlist.name Timer lijst -timerlist.new Nieuwe timer -timerlist.program.unknown Onbekend programma -timerlist.reload Herladen -timerlist.repeat Herhaal -timerlist.repeat.biweekly twee wekelijks -timerlist.repeat.byeventdescription zie timer -timerlist.repeat.daily dagelijks -timerlist.repeat.fourweekly vier wekelijks -timerlist.repeat.friday Vrij -timerlist.repeat.monday Maan -timerlist.repeat.monthly maandelijks -timerlist.repeat.once eens -timerlist.repeat.saturday Zat -timerlist.repeat.sunday Zon -timerlist.repeat.thursday Don -timerlist.repeat.tuesday Dins -timerlist.repeat.unknown onbekend -timerlist.repeat.wednesday Woens -timerlist.repeat.weekdays door de week -timerlist.repeat.weekly wekelijks -timerlist.save Save timer -timerlist.standby SB mode -timerlist.standby.off Leave standby -timerlist.standby.on Enter standby -timerlist.stoptime Stop tijd -timerlist.type Timer type -timerlist.type.nextprogram volgend programma -timerlist.type.record Neemop -timerlist.type.remind Herinner -timerlist.type.shutdown Shutdown -timerlist.type.sleeptimer Sleeptimer -timerlist.type.standby Standby -timerlist.type.unknown Onbekend -timerlist.type.zapto Zap naar -timerlist.weekdays Dagen van de week -timerlist.weekdays.hint_1 Maan Dins Woens Don Vrij Zat Zon -timerlist.weekdays.hint_2 'X'=timer '-' geen timer -timersettings.record_safety_time_after Opname stop tijd correctie -timersettings.record_safety_time_after.hint_1 Correctie tijd in min. (00=uit). Deze tijd -timersettings.record_safety_time_after.hint_2 word opgeteld bij de stop tijd van elke opname timer. -timersettings.record_safety_time_before Opname start tijd correctie -timersettings.record_safety_time_before.hint_1 Correctie tijd in min. (00=uit). Deze tijd -timersettings.record_safety_time_before.hint_2 word afgetrokken van elke opname timer. -timersettings.separator Timer instellingen -timing.chanlist Kanaallijst -timing.epg Epg -timing.filebrowser Filebrowser -timing.head OSD Timeouts -timing.hint_1 Tijd in sec. Na deze tijd zal de -timing.hint_2 infobar wegfaden. -timing.infobar Infobar -timing.menu Menu -timing.numericzap Nummer Zap -usermenu.button_blue Gebruikersmenu 'blauw' -usermenu.button_green Gebruikersmenu 'groen' -usermenu.button_red Gebruikersmenu 'rood' -usermenu.button_yellow Gebruikersmenu 'geel' -usermenu.head Gebruikersmenu -usermenu.item_bar ---- Scheiding ---- -usermenu.item_epg_misc EPG funkties -usermenu.item_none -usermenu.item_vtxt Teletext -usermenu.name Naam -video_mode_ok Video-instellingen ok ? -videomenu.43mode 4:3 beeldverhouding -videomenu.analog_hd_rgb RGB (HD) -videomenu.analog_hd_yprpb_cinch YPbPr -> Cinch (HD) -videomenu.analog_hd_yprpb_scart YPbPr -> Scart (HD) -videomenu.analog_mode Videomode -videomenu.analog_sd_rgb RGB (SD) -videomenu.analog_sd_yprpb_cinch YPbPr -> Cinch (SD) -videomenu.analog_sd_yprpb_scart YPbPr -> Scart (SD) -videomenu.auto Automatisch -videomenu.csync sync correctie -videomenu.dbdr Beeldverbeteraar (Filter) -videomenu.dbdr_none uit -videomenu.dbdr_deblock Blockbildung -videomenu.dbdr_both Block- & Ringbildung -videomenu.enabled_modes Videosysteem onder de V.F-Toets -videomenu.fullscreen Volledig beeld -videomenu.letterbox Letterbox -videomenu.screensetup Scherm aanpassen -videomenu.tv-scart TV Scart -videomenu.vcrsignal VCR-uitgang signaal type -videomenu.vcrsignal_composiet CVBS -videomenu.vcrsignal_svideo S-Video -videomenu.videoformat Formaat -videomenu.videoformat_169 16:9 -videomenu.videoformat_43 4:3 (LB) -videomenu.videoformat_431 4:3 (PS) -videomenu.videoformat_149 14:9 -videomenu.videosignal VideoOutput -videomenu.videosignal_composite CVBS -videomenu.videosignal_rgb RGB + CVBS -videomenu.videosignal_svideo S-Video -videomenu.videosignal_yuv_c YUV + CVBS -videomenu.videosignal_yuv_v YUV + VBS -zaptotimer.announce Zap naar timer in een minute -extra.dvbsnoop DVB Stream Info -extra.dvbsnoop_pat Toon PAT -extra.dvbsnoop_cat Toon CAT -extra.dvbsnoop_tsdt Toon TSDT -extra.dvbsnoop_nit Toon NIT -extra.dvbsnoop_sdt Toon SDT -extra.dvbsnoop_eit Toon EIT -extra.dvbsnoop_rst Toon RST -extra.dvbsnoop_tdt Toon TDT -extra.dvbsnoop_sit Toon SIT -extra.dvbsnoop_pid Toon manual PID -extra.dvbsnoop_scan Scan PIDs -extra.dvbsnoop_band Toon pid bandbreedte -extra.logview Bekijk Log -extra.ru ruDREAM -extra.english Engels -extra.dboxinfo Box Info -extra.start_tostandby In standby gaan na opstarten -extra.rotor_swap Swap rotor oost/west -extra.logo Logo nummer -extra.scan_full vol -extra.scan_fast snel -extra.hdd_slow langzaam -extra.hdd_middle Middel -extra.hdd_fast Snel -extra.hdd_ext3 Ext3fs -extra.hdd_reiser Reiserfs -extra.hdd_1min 1 min. -extra.hdd_5min 5 min. -extra.hdd_10min 10 min. -extra.hdd_20min 20 min. -extra.hdd_30min 30 min. -extra.hdd_60min 60 min. -extra.logo1 1 -extra.logo2 2 -extra.logo3 3 -extra.hdd_sleep Sleep time -extra.hdd_noise Lawaai -extra.hdd_activate Activeer instellingen -extra.hdd_fs Filesysteem -extra.hdd_format Formateer HDD -extra.hdd_check Check filesysteem -extra.hdd_settings HDD instellingen -extra.zap_cycle Zap cyclus -extra.sms_channel sms-kanaal -extra.tp_freq Frequentie -extra.tp_rate Symbol rate -extra.tp_pol Polarisatie -extra.tp.pol_v V -extra.tp_pol_h H -extra.tp_fec FEC -extra.fec_1_2 1/2 -extra.fec_2_3 2/3 -extra.fec_3_4 3/4 -extra.fec_5_6 5/6 -extra.fec_7_8 7/8 -extra.zapit_menu Zapit opties -extra.zapit_make_bouquet Maak bouquet -extra.zapit_motor_speed Motor snelheid (10 = 1 graad/sec) -extra.zapit_fe_timeout Timeout melodie -extra.add_to_bouquet voeg to aan bouquet -extra.key_list_start begin -extra.key_list_end einde -extra.chadded het aktuele kanaal is aanhet geselecteerde buoquet toegevoegd.....\n -extra.chalreadyinbq het aktuele kanaal is reeds in het geselecteerde bouquet....\n -extra.menu_left_exit "Left" = terug in menu -extra.zapit_write_names Schrijf Kanaal namen -extra.update_dir Directory for updates -extra.cache Cache -extra.debug Debug -extra.zapit_backup Backup channels to /tmp -extra.zapit_delete Delete channels -extra.zapit_restore Restore channels from /tmp -fan_speed Ventilator snelheid -filesystem.is.utf8 file system -filesystem.is.utf8.option.iso8859.1 ISO-8859-1 -filesystem.is.utf8.option.utf8 UTF-8 -infoviewer.subchan_disp_pos Toon subkanalen -mainmenu.scripts Scripts -movieplayer.defplugin Start-Plugin -movieplayer.tshelp1 Stop -movieplayer.tshelp10 approx. 10 minutes back -movieplayer.tshelp11 skip approx. 10 minutes -movieplayer.tshelp12 Help: http://www.giggo.de/dbox2/movieplayer.html\n -movieplayer.tshelp2 Select audio track -movieplayer.tshelp3 Pause/Continue -movieplayer.tshelp4 Create bookmark -movieplayer.tshelp5 Show progress -movieplayer.tshelp6 approx. 1 minute back -movieplayer.tshelp7 skip approx. 1 minute -movieplayer.tshelp8 approx. 5 minutes back -movieplayer.tshelp9 skip approx. 5 minutes -nfs.mountok mount successful -nfs.type_lufs FTPFS -pictureviewer.help1 menu mode -pictureviewer.help10 show mode -pictureviewer.help11 reread image -pictureviewer.help12 previous image -pictureviewer.help13 next image -pictureviewer.help14 Zoom out -pictureviewer.help15 Zoom in -pictureviewer.help16 scroll up -pictureviewer.help17 scroll left -pictureviewer.help18 scroll right -pictureviewer.help19 scroll down -pictureviewer.help2 display image -pictureviewer.help20 change sort order -pictureviewer.help21 reread image (no scaling) -pictureviewer.help22 exit -pictureviewer.help3 change sort order -pictureviewer.help4 do not scale picture -pictureviewer.help5 diashow mode -pictureviewer.help6 previous image -pictureviewer.help7 next image -pictureviewer.help8 change sort order -pictureviewer.help9 exit -plugins.result plugin output -settings.pos_bottom_left linksonder -settings.pos_bottom_right rechtsonder -settings.pos_top_left linksboven -settings.pos_top_right rechtsboven -timerlist.plugin Plugin -timerlist.recording_dir opname directory -timerlist.repeatcount herhalingen -timerlist.repeatcount.help1 aantal timer herhalingen -timerlist.repeatcount.help2 0 voor ongelimiteerd -timerlist.type.execplugin Start plugin -audioplayer.reading_files bestanden lezen -scants.abort_body Zoeken echt afbreken? -scants.abort_header Onderbreek Scan -servicemenu.getplugins Herlaad plugins -servicemenu.getplugins_hint Herladen van plugins bezig,\nmomentje aub.. -usermenu.head Gebruikers menu -zapit.scantype scan naar services -zapit.scantype.all alle services -zapit.scantype.radio alleen radio -zapit.scantype.tv alleen tv -zapit.scantype.tvradio tv & radio -colorthememenu.red_theme Simpel Red -lcdmenu.dim_brightness Helderheid na dim-timeout -lcdmenu.dim_time Dim timeout -timerlist.overlapping_timer Timer conflict. Ondanks dit toch de timer maken? -extra.audio_run_player Audio key start player -mpkey.rewind Rewind -mpkey.forward Forward -mpkey.pause Pause -mpkey.stop Stop -mpkey.play Play -mpkey.audio Audio track -mpkey.time Show time -mpkey.bookmark save bookmark -mpkey.plugin Run plugin -extra.loadkeys Keys inladen vanaf -extra.savekeys Keys opslaan als -extra.loadconfig Instellingen laden -extra.saveconfig Sla configuratie op als -videomenu.videomode Video systeem -extra.key_timeshift Timeshift -extra.key_plugin One touch plugin -extra.timeshift_pause Timeshift pause -extra.zapit_scanpids Scan/Gebruik pids -servicemenu.imageinfo Techies Image info -imageinfo.creator Gemaakt door: -imageinfo.date Datum: -imageinfo.dokumentation Docs: -imageinfo.forum Forum: -imageinfo.head Image info: -imageinfo.homepage Home page: -imageinfo.image Image: -imageinfo.license Licentie: -imageinfo.version Versie: -extra.cache_txt Cache teletext -extra.use_gotoxx Gebruik gotoXX -extra.latitude Latitude -extra.longitude Longitude -extra.ladirection LaDirection -extra.lodirection LoDirection -extra.south Zuid -extra.north Noord -extra.east Oost -extra.west West -epgextended.actors Actors -epgextended.director Director -epgextended.guests Guests -epgextended.original_title Original Title -epgextended.presenter Presenter -epgextended.year_of_production Year of Production -recordingmenu.save_in_channeldir Save in channel dir -servicemenu.restart Soft restart -servicemenu.restart_hint Restarting, please wait -servicemenu.restart_refused_recording Cant restart, recording in progress -extra.cs Cardserver -extra.restart_cs Restart cardserver -extra.tp_mod Modulation -extra.tp_mod_16 QAM/16 -extra.tp_mod_32 QAM/32 -extra.tp_mod_64 QAM/64 -extra.tp_mod_128 QAM/128 -extra.tp_mod_256 QAM/256 -moviebrowser.book_head Bookmarks +miscsettings.infobar Infobalk +miscsettings.infobar_casystem_display CA-System weergeven +miscsettings.infobar_casystem_mini mini +miscsettings.infobar_casystem_mode discreet +miscsettings.infobar_colored_events Gekleurde programma's +miscsettings.infobar_disp_0 Zonder Logo +miscsettings.infobar_disp_1 Logo in nummerbox +miscsettings.infobar_disp_2 Logo + kanaalnummer +miscsettings.infobar_disp_3 Logo + kanaalnaam + signaal +miscsettings.infobar_disp_4 Logo + kanaalnaam/nummer +miscsettings.infobar_disp_5 Logo + signaal +miscsettings.infobar_disp_6 Logo + kanaalnummer + signaal +miscsettings.infobar_disp_log Logo +miscsettings.infobar_logo_hdd_dir Logo directory +miscsettings.infobar_progressbar Opties voortgangsbalk +miscsettings.infobar_progressbar_0 standaard +miscsettings.infobar_progressbar_1 Onder kanaalnaam +miscsettings.infobar_progressbar_2 Klein onder kanaalnaam +miscsettings.infobar_progressbar_3 Smal tussen EPG programma's +miscsettings.infobar_sat_display Satelliet weergeven op de infobalk +miscsettings.infobar_show show Info wanneer EPG verandert +miscsettings.infobar_show_dd_available Beschikbaarheid DolbyDigital weergeven +miscsettings.infobar_show_res Resolutie weergeven op infobalk +miscsettings.infobar_show_res_simple simpel +miscsettings.infobar_show_sysfs_hdd Gebruikte ruimte (sysFS & HDD) +miscsettings.infobar_show_tuner Actieve tuner(s) weergeven +miscsettings.radiotext Radiotekst +miscsettings.shutdown_count In stand-by, uitschakelen na +miscsettings.shutdown_count_hint1 tijd (in minuten) om te schakelen van standby +miscsettings.shutdown_count_hint2 naar deep standby (0 = off). +miscsettings.shutdown_real Standby modus inschakelen +miscsettings.shutdown_real_rcdelay Uitgesteld uitschakelen +miscsettings.sleeptimer Inactiviteit timer +miscsettings.zapto_pre_time Tijd correctie (minuten) voor een zap timer +motorcontrol.calc_positions (Her)-Calculeer Posities +motorcontrol.disable_limit (soft) limieten uitschakelen +motorcontrol.drive_mode Draai Modus +motorcontrol.drive_mode_auto Draai Modus/auto stop +motorcontrol.east_limit Oost limiet instellen +motorcontrol.enable_limit Limieten instellen +motorcontrol.goto Ga naar Motor Positie (a) +motorcontrol.halt Stop Motor +motorcontrol.head Motor Setup +motorcontrol.install_menu Installatie menu +motorcontrol.motor_pos (a) Motor Positie: +motorcontrol.movement (b) Verplaatsen: +motorcontrol.msec milliseconde +motorcontrol.no_mode Don't care +motorcontrol.notdef Niet gebruikt +motorcontrol.override Positie overschrijven gebruikt voor +motorcontrol.pos_decrease Verlaag Motor Positie (a) +motorcontrol.pos_increase Verhoog Motor Position (a) +motorcontrol.ref_position Ga naar Referentie Positie +motorcontrol.sat_pos Satelliet Positie (Stappen Modus): +motorcontrol.settings Motor control instelling +motorcontrol.status Status +motorcontrol.step_decrease Verklein stap grote (c) +motorcontrol.step_drive Schakel tussen Step/Drive Mode (b) +motorcontrol.step_east Stap/Drive Motor oost (b,c) +motorcontrol.step_increase Vergroot stap grote (c) +motorcontrol.step_mode Stappen Modus +motorcontrol.step_size (c) Stap grote: +motorcontrol.step_west Stap/Drive Motor West (b,c) +motorcontrol.stop_moving stop bij goed signaal (Draaien) +motorcontrol.stop_stopped stop bij goed signaal(gestopt) +motorcontrol.store Motor Positie opslaan (a) +motorcontrol.timed_mode Timed Stap Modus +motorcontrol.user_menu Gebruikersmenu +motorcontrol.west_limit West limiet instellen +moviebrowser.ask_rec_to_delete Het verwijderen van deze film stopt de huidige opname!\n[%s]\nWilt u toch verder gaan? +moviebrowser.book_add Bladwijzer toevoegen +moviebrowser.book_clear_all Alle bladwijzers verwijderen +moviebrowser.book_head Bladwijzers moviebrowser.book_lastmoviestop Last play stop: moviebrowser.book_movieend Einde film: moviebrowser.book_moviestart Start film: -moviebrowser.book_name Naam: -moviebrowser.book_new Nieuwe bookmark +moviebrowser.book_name Naam bladwijzer: +moviebrowser.book_new Nieuwe bladwijzer moviebrowser.book_position Positie: moviebrowser.book_type Spring (<0 terug , >0 voor): moviebrowser.book_type_backward Herhaal moviebrowser.book_type_forward sprong van -moviebrowser.edit_book Bookmark verander +moviebrowser.browser_frame_high Browser hoogte [%] +moviebrowser.browser_row_head Kolom instellingen +moviebrowser.browser_row_item Kolom item +moviebrowser.browser_row_nr Aantal kolommen +moviebrowser.browser_row_width Kolom breedte [%] +moviebrowser.delete_info Bestanden verwijderen, een moment geduld... +moviebrowser.dir Pad +moviebrowser.dir_head extra paden +moviebrowser.edit_book Bookmark Wijzig moviebrowser.edit_book_name_info1 Geef nieuwe bookmark naam moviebrowser.edit_book_name_info2 moviebrowser.edit_book_pos_info1 Geef nieuwe eindpositie (s) @@ -1007,20 +1240,22 @@ moviebrowser.foot_filter Filter: moviebrowser.foot_play Start film moviebrowser.foot_sort Sorteer: moviebrowser.head TS Film browser -moviebrowser.head_filter Filter flims per kategorie: +moviebrowser.head_filter Filter flims per categorie: moviebrowser.head_playlist Laatst afgespeeld: moviebrowser.head_recordlist Laatst opgenomen: +moviebrowser.hide_series Verberg series moviebrowser.hint_jumpbackward Sprong terug over 5 s\n '0' om te annuleren moviebrowser.hint_jumpforward Srong vooruit over 5 s\n '0' om te annuleren moviebrowser.hint_movieend Einde van de film over 5 s\n '0' om verder te kijken moviebrowser.hint_newbook_backward Nieuwe sprong terug\n 'blue' voor eindpositie -moviebrowser.hint_newbook_forward Nieuwe sprong vooruit\n 'blue' voor eindpositie +moviebrowser.hint_newbook_forward Nieuwe sprong vooruit\n 'blue' voor eindpositie moviebrowser.info_audio Audio moviebrowser.info_channel Kanaal moviebrowser.info_filename Naam moviebrowser.info_genre_major Genre moviebrowser.info_genre_minor Genre moviebrowser.info_head Film informatie +moviebrowser.info_head_update Wijzigingen opslaan in alle video informatie bestanden moviebrowser.info_info1 Info 1 moviebrowser.info_info2 Info 2 moviebrowser.info_length Lengte (Min) @@ -1030,7 +1265,7 @@ moviebrowser.info_parental_lockage_12year 12 jaar moviebrowser.info_parental_lockage_16year 16 jaar moviebrowser.info_parental_lockage_18year 18 jaar moviebrowser.info_parental_lockage_6year 6 jaar -moviebrowser.info_parental_lockage_always nooit +moviebrowser.info_parental_lockage_always nooit moviebrowser.info_path Path moviebrowser.info_prevplaydate Laatst afgespleeld op moviebrowser.info_prodcountry LAnd @@ -1041,21 +1276,29 @@ moviebrowser.info_serie Serie moviebrowser.info_size Bestandsgrootte in (MB) moviebrowser.info_title Titel moviebrowser.info_videoformat Afbeeldingen +moviebrowser.last_play_max_items Aantal lijnen laatst afgespeeld +moviebrowser.last_record_max_items Aantal lijnen laatste opname +moviebrowser.load_default Laad standaard instellingen moviebrowser.menu_directories_head Directory's moviebrowser.menu_help_head Help -moviebrowser.menu_main_bookmarks Bookmarks +moviebrowser.menu_main_bookmarks Bladwijzers moviebrowser.menu_main_head Instellingen moviebrowser.menu_main_movieinfo Film info -moviebrowser.menu_main_saveandback opslaan en terug -moviebrowser.menu_nfs_head NFS settings +moviebrowser.menu_main_saveandback Opslaan en terug +moviebrowser.menu_nfs_head NFS instellingen moviebrowser.menu_parental_lock_activated geactiveerd moviebrowser.menu_parental_lock_activated_no nee -moviebrowser.menu_parental_lock_activated_yes ja moviebrowser.menu_parental_lock_activated_no_temp nee (tijdelijk) +moviebrowser.menu_parental_lock_activated_yes ja moviebrowser.menu_parental_lock_head Kinderslot moviebrowser.menu_parental_lock_rate_head Lock films van +moviebrowser.menu_save Wijzigingen opslaan +moviebrowser.menu_save_all Start update van film informatie in bestand +moviebrowser.option_browser Browser Opties +moviebrowser.reload_at_start Herlaad film informatie bij het starten +moviebrowser.remount_at_start Herkoppelen bij het starten moviebrowser.scan_for_movies Films scannen ... -moviebrowser.serie_existingname Betsaande series +moviebrowser.serie_existingname Bestaande series moviebrowser.serie_head Serie moviebrowser.serie_name Verander naam moviebrowser.short_audio Audio @@ -1070,60 +1313,568 @@ moviebrowser.short_info1 Info 1 moviebrowser.short_info2 Info 2 moviebrowser.short_length Min moviebrowser.short_parental_lockage Leeftijd -moviebrowser.short_path Path +moviebrowser.short_path Directory moviebrowser.short_prevplaydate Laatst moviebrowser.short_prodyear Jaar -moviebrowser.short_quality * (quality) +moviebrowser.short_quality * (Kwaliteit) moviebrowser.short_recorddate Datum moviebrowser.short_serie Serie moviebrowser.short_size MB moviebrowser.short_title Titel -moviebrowser.start_head Start film from: +moviebrowser.start_head Start film vanaf: moviebrowser.start_record_start Film start -options.on.without_messages Without msg -extra.zapit_sdt_changed Kanalenlijst veranderd, herladen van lijsten. -miscsettings.virtual_zap_mode Virtual zap -miscsettings.epg_head Epg instellingen -miscsettings.epg_cache_days EPG-Cache (dagen) -miscsettings.epg_old_hours Events verouderd na (uren) -miscsettings.epg_dir Dir voor epg cache -miscsettings.epg_save Save/Herstel EPG na herstart -shutdown.recoding_query De opname echt afbreken ? -recordingmenu.apids default audio streams -recordingmenu.apids_ac3 record AC3 streams -recordingmenu.apids_alt record alternatieve streams -recordingmenu.apids_std record standaard stream +moviebrowser.update_if_dest_empty_only Kopieer indien doelbestemming leeg is +moviebrowser.use_dir Gebruik directory +moviebrowser.use_movie_dir Gebruik film directory +moviebrowser.use_rec_dir Gebruik opname directory +movieplayer.bookmark Bladwijzers +movieplayer.bookmarkname Bladwijzer naam +movieplayer.bookmarkname_hint1 Naam invoeren voor uw bladwijzer +movieplayer.bookmarkname_hint2 +movieplayer.defplugin Start-Plugin +movieplayer.fileplayback Bestand afspelen +movieplayer.head Movieplayer +movieplayer.toomanybookmarks Er zijn te veel bladwijzers.\n Verwijder eerst een bladwijzer. +movieplayer.tshelp1 Stop +movieplayer.tshelp10 Ongeveer 10 minuten terug +movieplayer.tshelp11 Ongeveer 10 minuten overslaan +movieplayer.tshelp12 Help: http://www.giggo.de/dbox2/movieplayer.html\n +movieplayer.tshelp2 Selecteer audio track +movieplayer.tshelp3 Pause/Voortzetten +movieplayer.tshelp4 Creëer bladwijzer +movieplayer.tshelp5 Voortgang weergeven +movieplayer.tshelp6 Ongeveer 1 minuut terug +movieplayer.tshelp7 Ongeveer 1 minuut overslaan +movieplayer.tshelp8 Ongeveer 5 minuten terug +movieplayer.tshelp9 Ongeveer 5 minuten overslaan +movieplayer.tsplayback TS Afspelen +mpkey.audio Audio track +mpkey.bookmark Bladwijzer opslaan +mpkey.forward Vooruit +mpkey.pause Pause +mpkey.play Afspelen +mpkey.plugin Plugin uitvoeren +mpkey.rewind Terugspoelen +mpkey.stop Stop +mpkey.time Tijd weergeven +networkmenu.apply_settings Wijzigingen worden toegepast... +networkmenu.apply_settings_now Wilt u de instellingen toepassen? +networkmenu.broadcast Uitzending +networkmenu.dhcp DHCP +networkmenu.error_no_address Adres ontbreekt +networkmenu.gateway Standaard gateway +networkmenu.hostname Hostname +networkmenu.hostname_hint1 Hostnaam invoeren +networkmenu.hostname_hint2 Opnieuw opstarten na wijzigingen +networkmenu.inactive_network Netwerk inactief! +networkmenu.ipaddress IP adres +networkmenu.mount Bewerk netwerk locaties +networkmenu.nameserver Naamserver +networkmenu.netmask Netmasker +networkmenu.ntpenable Synchronisatie via +networkmenu.ntprefresh NTP/DVB verversen +networkmenu.ntprefresh_hint1 NTP/DVB-Time-Sync in minuten +networkmenu.ntprefresh_hint2 Ontvanger dient herstart te worden of EPG gereset +networkmenu.ntpserver NTP-Server +networkmenu.ntpserver_hint1 NTP-Server voorbeeld: ntp1.ptb.de +networkmenu.ntpserver_hint2 Ontvanger dient herstart te worden of EPG gereset +networkmenu.ntptitle Time-Synchronisatie +networkmenu.password Pre-Shared Key (PSK) +networkmenu.reset_settings_now Wilt u de vorige instellingen herstellen? +networkmenu.select_if Interface +networkmenu.services Netwerk diensten +networkmenu.setupnow Netwerk instellingen toepassen +networkmenu.setuponstartup Netwerk bij het opstarten instellen +networkmenu.show Actieve Netwerk instellingen weergeven +networkmenu.ssid Netwerk naam (SSID) +networkmenu.test Netwerk nu testen +neutrino_starting Neutrino-HD wordt opgestart... +nfs.alreadymounted directory reeds gekoppeld +nfs.automount Koppelen tijdens het opstarten +nfs.dir directory/locatie +nfs.ip Server IP +nfs.localdir lokale directory +nfs.mount Netwerk volume koppelen +nfs.mount_options Koppel opties +nfs.mounterror mount foutmelding +nfs.mounterror_notsup Bestandssysteem niet ondersteund +nfs.mountnow Nu koppelen +nfs.mountok Succesvol gekoppeld +nfs.mounttimeout mount foutmelding: timeout +nfs.password Wachtwoord +nfs.remount remount directories +nfs.type type +nfs.type_cifs CIFS +nfs.type_lufs FTPFS +nfs.type_nfs NFS +nfs.umount Ontkoppeld Netwerk volume +nfs.umounterror Foutmelding ontkoppelen niet geslaagd +nfs.username Gebruikersnaam +nfsmenu.head NFS/CIFS/FTPFS instellingen +nvod.percentage (%d%% over) +nvod.starting (starten in %d min) +nvodselector.directormode Direct-Mode +nvodselector.head Select starting-time +nvodselector.subservice Selecteer Subservice +options.default Herstel standaardwaarden +options.fb framebuffer +options.ntp_off DVB +options.ntp_on NTP +options.null NULL +options.off Uit +options.on Aan +options.on.without_messages Zonder bericht +options.serial serial +parentallock.changepin verander PIN code +parentallock.changepin_hint1 Geef de nieuwe jeugd-bescherm pin code hier in! +parentallock.changetolocked bij vergrendelde zenderlijsten +parentallock.head Geef Lock PIN code in +parentallock.lockage vergrendelde programma's +parentallock.lockage12 tot aan 12 jaar +parentallock.lockage16 tot aan 16 jaar +parentallock.lockage18 tot aan 18 jaar +parentallock.lockedchannel gelockt kanaal... +parentallock.lockedprogram GeLockt programma (tot aan %d jaar) +parentallock.never nooit +parentallock.onsignal bij ongeschikte uitzendingen +parentallock.parentallock Ouderlijk toezicht +parentallock.prompt PIN vereist +personalize.access Toegang opties +personalize.apply_settings Wijzigingen toepassen? +personalize.button_auto auto +personalize.button_blue blauw +personalize.button_green groen +personalize.button_red rood +personalize.button_yellow geel +personalize.disabled Uitgeschakeld +personalize.enabled Ingeschakeld +personalize.head Persoonlijke voorkeuren +personalize.help Help +personalize.help_line1 In het persoonlijke voorkeuren menu is het mogelijk +personalize.help_line2 om de meest belangrijke menu's naar uw wens in te stellen. +personalize.help_line3 U kunt menu items zichtbaar, onzichtbaar, geactiveerd +personalize.help_line4 gedeactiveerd maken of beveiligen met een PIN code. +personalize.help_line5 De toegang tot het persoonlijke voorkeuren menu kan beveiligd +personalize.help_line6 zijn met een PIN. De PIN is identiek voor alle beveiligde menu's. +personalize.help_line7 (Niet van toepassing op ouderlijk toezicht). +personalize.help_line8 Standaard PIN is: 0000 +personalize.menuconfiguration Menu Configuratie +personalize.menudisabledhint Het opgevraagde menu is momenteel uitgeschakeld!\nOm het menu te activeren opent u het persoonlijke voorkeuren menu +personalize.notprotected Nee +personalize.notvisible Onzichtbaar +personalize.pin PIN +personalize.pin_in_use PIN access for personalize setup +personalize.pincode Personalization PIN +personalize.pinhint Enter the Personalization PIN Code +personalize.pinprotect Ja +personalize.pinstatus PIN vereist +personalize.plugins Plugins +personalize.usermenu_preferred_buttons Assigning of preferred keys +personalize.usermenu_show_cancel Show "Cancel"-Button +personalize.visible Zichtbaar +pictureviewer.defdir start dir. +pictureviewer.head Afbeeldingen +pictureviewer.help1 menu modus +pictureviewer.help10 Herlaad afbeelding +pictureviewer.help11 Vorige afbeelding +pictureviewer.help12 Volgende afbeelding +pictureviewer.help13 Zoom out +pictureviewer.help14 Zoom in +pictureviewer.help15 scroll omhoog +pictureviewer.help16 scroll link +pictureviewer.help17 scroll rechts +pictureviewer.help18 scroll omlaag +pictureviewer.help19 Herlaad afbeelding (niet schalen) +pictureviewer.help2 Afbeelding weergeven +pictureviewer.help3 Verander sorteer orde +pictureviewer.help30 Audioplayer modus +pictureviewer.help31 Muziek afspelen +pictureviewer.help32 Pauzeer muziek +pictureviewer.help33 Stop muziek +pictureviewer.help34 Volgende nummer +pictureviewer.help35 Vorige nummer +pictureviewer.help4 Afbeelding niet schalen +pictureviewer.help5 diashow modus +pictureviewer.help6 Vorige afbeelding +pictureviewer.help7 Volgende afbeelding +pictureviewer.help8 Sluiten +pictureviewer.help9 Weergave modus +pictureviewer.resize.color_average geavanceerd +pictureviewer.resize.none Geen +pictureviewer.resize.simple simpel +pictureviewer.scaling schaling +pictureviewer.show Tonen +pictureviewer.slide_time Speelduur van diashow +pictureviewer.slideshow Diashow +pictureviewer.sortorder.date datum +pictureviewer.sortorder.filename bestandsnaam +ping.ok is bereikbaar (ping) +ping.protocol is onbereikbaar (host of protocol fout) +ping.socket is onbereikbaar (socket fout) +ping.unreachable is onbereikbaar +pinprotection.head Geef PIN code in +pinprotection.wrongcode PIN-Code was verkeerd! Probeer opnieuw. +plugins.hdd_dir Plugin HDD dir. +plugins.result plugin output +progressbar.color Kleur voortgangsbalk +rclock.lockmsg Uw afstandsbediening wordt gedeactiveerd.\n Om de afstandsbediening te activeren \ndrukt u op de toets en op uw afstandsbediening. +rclock.menueadd Deactiveer afstandsbediening +rclock.title Deactiveer afstandsbediening +rclock.unlockmsg Afstandsbediening geactiveerd! +recording.is_running Dit kanaal wordt reeds opgenomen. Wilt u een nieuwe opname starten? +recording.start Opname starten, een moment geduld... +recording.stop Opname stoppen, een moment geduld... +recordingmenu.apids Audio streams +recordingmenu.apids_ac3 AC3 streams opnemen +recordingmenu.apids_alt Alternatieve streams opnemen +recordingmenu.apids_std Standaard stream opnemen +recordingmenu.defdir Opname directory +recordingmenu.end_of_recording_epg EPG act. programma +recordingmenu.end_of_recording_max max. opnameduur +recordingmenu.end_of_recording_name Eindtijd van opname +recordingmenu.file direct (bestand) +recordingmenu.help Recording devices:\n--------------------------\nserver:\ngebruik stream software op een PC\n\n(analoog) vcr:\ngebruik de vcr uitgang\n\ndirect (file):\ndirect in een NFS mounted directory\nof op een interne hard disk\nTS: gebruik spts mode(dbox2)\nPES: niet spts mode(dbox2) gebruiken\n\n\nMax. file grootte:\n---------------------\nNFS V2: 2 GB (2048 MB)\nNFS V3: bijna ongelimiteerd (0 MB)\nFAT: 2 GB (2048 MB)\nFAT32: 4 GB (4096 MB) +recordingmenu.multimenu.ask_stop_all Wilt u alle opnames stoppen? +recordingmenu.multimenu.info_stop_all %d van %d opnames worden gestopt. +recordingmenu.multimenu.rec_akt Huidig kanaal opnemen +recordingmenu.multimenu.stop_all stop alle opnames +recordingmenu.multimenu.timeshift Timeshift +recordingmenu.off Uit +recordingmenu.record_is_not_running Er wordt geen opname gemaakt +recordingmenu.record_is_running Er wordt een opname gemaakt +recordingmenu.save_in_channeldir Opslaan in opname folder van dit kanaal +recordingmenu.server server +recordingmenu.server_mac MAC adres +recordingmenu.setupnow activeer veranderingen +recordingmenu.slow_warn Slome opname waarschuwing inschakelen +recordingmenu.timeshift Timeshift +recordingmenu.tsdir Timeshift directory +recordingmenu.vcr VCR recordingmenu.zap_on_announce melding zappen tijdens opname -timerlist.apids_dflt record standaard audio streams -videomenu.tv-scart TV Scart -videomenu.vcrsignal VCR Output Signal Type +recordtimer.announce Opname zal dadelijk starten +repeatblocker.hint_1 Shortest time (in ms) to recognize 2 keystrokes +repeatblocker.hint_2 Enter 0 to switch of the blocker (red is space) +reset_all Fabrieksreset en herstart +reset_channels Wis alle kanalen +reset_confirm Weet u het zeker? +reset_settings Standaard instellingen herstellen +satsetup.auto_scan Auto-Scan geselecteerd %s +satsetup.auto_scan_all Auto-Scan meerdere satellieten +satsetup.cable Kabel scan +satsetup.cable_nid Netwerk ID +satsetup.comm_input Commited invoer +satsetup.diseqc DiSEqC +satsetup.diseqc10 DiSEqC 1.0 +satsetup.diseqc11 DiSEqC 1.1 +satsetup.diseqc12 DiSEqC 1.2 +satsetup.diseqc_advanced Geavanceerd +satsetup.diseqc_com_uncom Commited/Uncommited +satsetup.diseqc_input DiSEqC invoer +satsetup.diseqc_uncom_com Uncommited/Commited +satsetup.diseqcrepeat DiSEqC herhalingen +satsetup.extended DiSEqC Instellingen +satsetup.extended_motor Motor instellingen +satsetup.fastscan_all SD en HD +satsetup.fastscan_hd Enkel HD +satsetup.fastscan_head Fastscan +satsetup.fastscan_prov Provider +satsetup.fastscan_prov_cd CanalDigitaal +satsetup.fastscan_prov_telesat TéléSAT +satsetup.fastscan_prov_tvv TV Vlaanderen +satsetup.fastscan_sd Enkel SD +satsetup.fastscan_type Scantype +satsetup.fe_mode Tuner modus +satsetup.fe_mode_alone Onafhankelijk +satsetup.fe_mode_loop Doorlussen +satsetup.fe_mode_single Single +satsetup.fe_mode_twin Twin +satsetup.fe_setup Tuner instellen +satsetup.lofh LNB High Offset +satsetup.lofl LNB Low Offset +satsetup.lofs LNB switch Offset +satsetup.logical_hd HD kanalen hebben voorkeur +satsetup.logical_numbers Gebruik logische nummers +satsetup.manual_scan Handmatig frequenties scannen +satsetup.minidiseqc Mini-DiSEqC +satsetup.motor_pos Motor positie +satsetup.nodiseqc Geen DiSEqC +satsetup.reset_numbers Reset kanaalnummers +satsetup.sat_setup Setup satellieten input / LNB +satsetup.satellite Satelliet +satsetup.select_sat Selecteer satellieten +satsetup.smatvremote SMATV Remote Tuning +satsetup.uncomm_input Uncommited input +satsetup.uni_settings Unicable instellingen +satsetup.unicable Unicable +satsetup.usals_repeat USALS commando herhalen +satsetup.use_bat Use BAT +satsetup.use_fta_flag Alleen de vrij te ontvangen (FTA) kanalen +satsetup.use_nit Gebruik NIT +satsetup.use_usals Gebuik USALS voor alles +sc.empty Geen smartcard geplaatst +sc.init_failed Initialisatie smartcard mislukt +sc.init_ok Smartcard succesvol geinitialiseerd +sc.inserted Smartcard in de kaartlezer geplaatst +sc.removed Smartcard uit de kaartlezer verwijderd +sc.reset Reset smartcard +sc.timeout Timeout - wachten op smartcard +sc.waiting Wachten op reactie van de smartcard +scants.abort_body Wilt u het scannen onderbreken? +scants.abort_header Scan wordt afgebroken +scants.actcable Kabel: +scants.actsatellite Satelliet: +scants.bouquet Bouquet +scants.bouquet_create creëer nieuw +scants.bouquet_erase wis alles +scants.bouquet_leave niet veranderen +scants.bouquet_satellite Satelliet zenderlijst +scants.bouquet_update update +scants.channel kanaal: +scants.failed Transponderscan mislukt! +scants.finished Transponderscan succesvol beëindigd! +scants.freqdata Frequentie: +scants.head Scan transponder +scants.numberofdataservices Data +scants.numberofradioservices Radio +scants.numberoftotalservices Totaal +scants.numberoftvservices TV +scants.preverences_receiving_system Voorkeuren +scants.preverences_scan Scanmodus +scants.provider Provider: +scants.select_tp Selecteer transponder +scants.startnow start scan +scants.test Test signaal +scants.transponders Transponders: +scrambled_channel Gecodeerd kanaal +screensetup.lowerright groen = rechts onder instellen +screensetup.upperleft rood = links boven instellen +screenshot.count Aantal +screenshot.cover Creeer film omslag voor moviebrowser +screenshot.defdir Doelbestemming +screenshot.format Formatteer +screenshot.info Screenshot toets is ongebruikt +screenshot.menu Screenshot +screenshot.osd OSD resolutie +screenshot.res Resolutie +screenshot.scale Schalen +screenshot.tv TV resolutie +screenshot.video Video in de achtergrond +servicemenu.getplugins Herlaad plugins +servicemenu.getplugins_hint Plugins worden geladen,\nmoment geduld alstublieft. +servicemenu.head Onderhoud +servicemenu.imageinfo Firmware info +servicemenu.reload Herlaad kanalenlijst +servicemenu.reload_hint Kanalenlijst wordt geladen,\nmoment geduld alstublieft. +servicemenu.restart Soft herstart +servicemenu.restart_hint Herstarten, een moment geduld +servicemenu.restart_refused_recording Herstarten niet mogelijk. Er wordt een opname gemaakt. +servicemenu.scants Kanalen zoeken +servicemenu.update Software Update +settings.backup Backup van instellingen maken +settings.backup_failed Backup maken mislukt +settings.help Help +settings.menu_hints Menu hints weergeven +settings.menu_pos Menu positie +settings.missingoptionsconffile De instellingen zijn geupdate. \nNieuwe opties zijn standaard ingesteld. +settings.noconffile Geen Neutrino-HD instellingen gevonden.\n Gebruikt standaard instellingen. +settings.pos_bottom_left Links onder +settings.pos_bottom_right Rechts onder +settings.pos_default_center Gecentreerd boven +settings.pos_higher_center Hoger gecentreerd +settings.pos_top_left Links boven +settings.pos_top_right Rechts boven +settings.restore Instellingen herstellen +settings.restore_warn Alle instellingen zullen vervangen worden.\nDe ontvanger zal opnieuw opstarten\nWilt u verder gaan? +shutdown.recoding_query Wilt u de opname stoppen? +shutdowntimer.announce De ontvanger zal binnen 1 minuut uitschakelen./nWilt u het uitschakelen annuleren? +sleeptimerbox.announce De ontvanger zal binnen 1 minunut in standby schakelen./nlWilt u dit annuleren? +sleeptimerbox.hint1 Afsluit tijd in minuten (000=uit) +sleeptimerbox.hint2 De ontvanger schakelt zichzelf uit na deze periode in standby. +sleeptimerbox.hint3 De ontvanger zal automatisch uitschakelen indien u de afstandsbediening niet gebruikt. +sleeptimerbox.title Slaaptimer +sleeptimerbox.title2 Inactiviteit uitschakel timer +streaminfo.aratio Aspect Ratio +streaminfo.aratio_unknown Onbekend +streaminfo.audiotype Audiotype +streaminfo.bitrate Bitrate +streaminfo.framerate Framerate +streaminfo.framerate_unknown Framerate: onbekend +streaminfo.head Stream-Informatie +streaminfo.not_available niet beschikbaar +streaminfo.resolution Resolutie +streaminfo.signal Ontvangst signaal +streaming.busy Een of meerdere opneem processen zijn aktief.\nAls je dit bericht krijgt en geen opname is aktief,\nherstart Neutrino aub. +streaming.dir_not_writable De opneem directory is niet beschrijfbaar.\nOpname zal niet gaan. +streaming.overflow Record buffer overflow, overweeg enkele opnames te stoppen +streaming.slow Systeem/hdd te traag, overweeg enkele opnames te stoppen +streaming.write_error De opname was afgebroken,\nomdat er een fout optrad gedurende het opname proces. +stringinput.caps Hoofd- / kleine letters +stringinput.clear alle invoer wissen +subtitles.head Ondertiteling +subtitles.stop Stop ondertiteling +timer.eventrecord.msg Het programma bevat een opname reservering.\nOm de reservering(en) aan te passen opent u de timerlijst. +timer.eventrecord.title Opname reservering +timer.eventtimed.msg Het programma is gereserveerd. Uw ontvanger \nzal automatisch inschakelen en afstemmen\n op het kanaal op de opgegeven tijd. +timer.eventtimed.title Reserveer programma +timerbar.channelswitch Reservering +timerbar.recordevent Opname +timerlist.alarmtime Alarm tijd +timerlist.apids Audio PIDs +timerlist.apids_dflt Standaard audio streams opnemen +timerlist.ask_to_delete Uw huidige opname wordt stop gezet. Wilt u verder gaan? +timerlist.bouquetselect Kies zenderlijst +timerlist.channel Kanaal +timerlist.channelselect kies kanaal +timerlist.delete Wis +timerlist.menumodify Pas timer aan +timerlist.menunew Nieuwe timer +timerlist.message Bericht +timerlist.moderadio Radio kanalen +timerlist.modeselect Mode kiezen +timerlist.modetv TV kanalen +timerlist.modify Pas aan +timerlist.name Timer lijst +timerlist.new Nieuwe timer +timerlist.overlapping_timer Timer conflict. Wilt u de timer toch instellen? +timerlist.plugin Plugin +timerlist.program.unknown Onbekend programma +timerlist.recording_dir Opname folder +timerlist.reload Herladen +timerlist.repeat Herhaal +timerlist.repeat.biweekly twee wekelijks +timerlist.repeat.byeventdescription zie timer +timerlist.repeat.daily dagelijks +timerlist.repeat.fourweekly vier wekelijks +timerlist.repeat.friday Vrij +timerlist.repeat.monday Maan +timerlist.repeat.monthly maandelijks +timerlist.repeat.once eenmalig +timerlist.repeat.saturday Zat +timerlist.repeat.sunday Zon +timerlist.repeat.thursday Don +timerlist.repeat.tuesday Dins +timerlist.repeat.unknown onbekend +timerlist.repeat.wednesday Woens +timerlist.repeat.weekdays Doordeweeks +timerlist.repeat.weekly wekelijks +timerlist.repeatcount Herhaald +timerlist.repeatcount.help1 Bepaal het aantal keer dat de timer wordt herhaald +timerlist.repeatcount.help2 0 voor ongelimiteerde herhaling +timerlist.save Timer opslaan +timerlist.standby SB modus +timerlist.standby.off Ontwaak uit standby +timerlist.standby.on Schakel naar standby +timerlist.stoptime Stop tijd +timerlist.type Timer type +timerlist.type.execplugin Plugin uitvoeren +timerlist.type.nextprogram volgend programma +timerlist.type.record Opnemen +timerlist.type.remind Herinner +timerlist.type.shutdown Uitschakelen +timerlist.type.sleeptimer Slaaptimer +timerlist.type.standby Stand-by +timerlist.type.unknown Onbekend +timerlist.type.zapto Zap naar +timerlist.weekdays Dagen van de week +timerlist.weekdays.hint_1 Maan Dins Woens Don Vrij Zat Zon +timerlist.weekdays.hint_2 'X'=timer '-' geen timer +timersettings.record_safety_time_after Opname stop tijd correctie +timersettings.record_safety_time_after.hint_1 Correctie tijd in min. (00=uit). Deze tijd +timersettings.record_safety_time_after.hint_2 word opgeteld bij de stop tijd van elke opname timer. +timersettings.record_safety_time_before Opname start tijd correctie +timersettings.record_safety_time_before.hint_1 Correctie tijd in min. (00=uit). Deze tijd +timersettings.record_safety_time_before.hint_2 word afgetrokken van elke opname timer. +timersettings.separator Timer instellingen +timing.chanlist Kanalenlijst +timing.epg EPG +timing.filebrowser Bestanden browser +timing.head OSD Timeouts +timing.hint_1 Tijd in sec. Na deze tijd zal de +timing.hint_2 infobalk automatisch vervagen. +timing.infobar Infobalk +timing.infobar_movieplayer Infobalk (film modus) +timing.infobar_radio Infobalk (radio modus) +timing.menu Menu +timing.numericzap Numeriek Zap +unicable.lnb Invoer Unicable +unicable.qrg Unicable Frequentie +unicable.scr Unicable SCR +upnpbrowser.head UPnP Browser +upnpbrowser.noservers Geen UPnP servers gevonden +upnpbrowser.rescan Opnieuw scannen +upnpbrowser.scanning Scannen naar UPnP servers +usermenu.button_blue Gebruikersmenu blauw +usermenu.button_green Gebruikersmenu groen +usermenu.button_red Gebruikersmenu rood +usermenu.button_yellow Gebruikersmenu geel +usermenu.head Gebruikersmenu +usermenu.item_bar ---- Boarder ---- +usermenu.item_epg_misc EPG functions +usermenu.item_none (empty) +usermenu.item_vtxt Videotext +usermenu.msg_info_is_empty U heeft geen naam voor dit menu gedefinieerd.\nDe standaard naam wordt gebruikt:\n +usermenu.msg_warning_name U heeft meerdere items gemaakt voor dit menu,\ngeen van de items heeft een naam.\nhet wordt aanbevolen om een naam in te voeren. +usermenu.msg_warning_no_items Geen items gedefinieerd.\n De menu naam is gereset! +usermenu.name Naam +video_mode_ok Functioneert deze video modus naar behoren? +videomenu.43mode 4:3 beeldverhouding +videomenu.analog_hd_rgb_cinch RGB via cinch (HD) +videomenu.analog_hd_rgb_scart RGB via scart (HD) +videomenu.analog_hd_yprpb_cinch YPbPr via cinch (HD) +videomenu.analog_hd_yprpb_scart YPbPr via scart (HD) +videomenu.analog_mode Analog Video Output +videomenu.analog_sd_rgb_cinch RGB via cinch (SD) +videomenu.analog_sd_rgb_scart RGB via scart (SD) +videomenu.analog_sd_yprpb_cinch YPbPr via cinch (SD) +videomenu.analog_sd_yprpb_scart YPbPr via scart (SD) +videomenu.auto Automatisch +videomenu.brightness Helderheid +videomenu.cinch Cinch +videomenu.contrast Contrast +videomenu.dbdr MPEG2 de-block/de-ring +videomenu.dbdr_both de-block+de-ring +videomenu.dbdr_deblock de-block +videomenu.dbdr_none Geen +videomenu.enabled_modes VF toets ingeschakelde modus +videomenu.fullscreen Volledig scherm +videomenu.hdmi_cec CSTLink (HDMI-CEC) +videomenu.hdmi_cec_mode Gebruik ontvanger +videomenu.hdmi_cec_mode_off nee +videomenu.hdmi_cec_mode_recorder als satelliet / kabel PVR +videomenu.hdmi_cec_mode_tuner als satelliet / kabel ontvanger +videomenu.hdmi_cec_standby CEC stand-by inschakelen +videomenu.hdmi_cec_view_on CEC View inschakelen +videomenu.hue Tint +videomenu.letterbox Letterbox +videomenu.panscan Pan&Scan +videomenu.panscan2 14:9 Pan&Scan +videomenu.saturation Verzadiging +videomenu.scart Scart +videomenu.screensetup Scherm instellingen +videomenu.sharpness Scherpheid +videomenu.tv-scart Video +videomenu.vcrsignal VCR Output Signaal Type videomenu.vcrsignal_composite CVBS videomenu.vcrsignal_svideo S-Video -moviebrowser.option_browser Browser Opties -moviebrowser.book_clear_all Alles wissen -moviebrowser.menu_save Veranderingen opslaan -moviebrowser.menu_save_all Start update van film info bestanden -moviebrowser.info_head_update Alle wijzigingen van alle film info bestanden opslaan -moviebrowser.update_if_dest_empty_only Copy if destination is empty only -moviebrowser.serie_auto_create Serie auto create -moviebrowser.load_default Laadt standaard instellingen -moviebrowser.browser_row_head Kolom instellingen -moviebrowser.browser_row_nr Aantal kolommen -moviebrowser.browser_row_item Kolom item -moviebrowser.browser_row_width Kolom breedte [%] -moviebrowser.reload_at_start Opnieuw inladen van film info na starten -moviebrowser.remount_at_start Hermount na opstarten -moviebrowser.dir_head Additional paths -moviebrowser.dir Path -moviebrowser.use_dir Gebruik directory -moviebrowser.use_rec_dir Gebruik record directory -moviebrowser.use_movie_dir Gebruik movie directory -moviebrowser.hide_series Verberg series -moviebrowser.last_record_max_items Aantal regels van laatste opname -moviebrowser.last_play_max_items Aantal regels van laatst gespeelde video -moviebrowser.browser_frame_high Browser hoogte [%] -extra.auto_timeshift Auto-record, sec (0 = uit) -extra.auto_delete Automatiisch wissen -extra.record_time Fast/timeshift opname periode (uren) -subtitles.head Ondertitels -subtitles.stop Stop ondertiteling +videomenu.videoformat Formaat +videomenu.videoformat_149 14:9 +videomenu.videoformat_169 16:9 +videomenu.videoformat_43 4:3 +videomenu.videomode Digital video mode +wanneer u vragen heeft over het gebruik van uw ontvanger. Wilt u beginnen met de installatie? +wizard.initial_settings Initiële instellingen gevonden +wizard.install_settings Wilt u de kanalen van Astra 1 (19.2º oost) inscannen? +wizard.welcome_head Welkom in de installatie wizard +wizard.welcome_text In de volgende stappen zullen we u begeleiden bij de eerste installatie van uw ontvanger.\n +word.from Van +zapit.scantype scan naar services +zapit.scantype.all alle services +zapit.scantype.radio alleen radio +zapit.scantype.tv alleen tv +zapit.scantype.tvradio tv & radio +zapitsetup.head Start kanaal instellingen +zapitsetup.info Start kanaal +zapitsetup.last_radio Radio kanaal +zapitsetup.last_tv TV kanaal +zapitsetup.last_use Van laatste kanaal +zaptotimer.announce Zap naar programma in een ogenblik diff --git a/data/locale/unmaintained/slovak.locale b/data/locale/unmaintained/slovak.locale index 8a37b0b60..f017fcf0c 100644 --- a/data/locale/unmaintained/slovak.locale +++ b/data/locale/unmaintained/slovak.locale @@ -104,7 +104,7 @@ audio.srs_iq SRS TruVolume audio.srs_nmgr Potlačovač šumu audio.srs_volume Východzia hlasitosť audiomenu.PCMOffset Zníženie hlasitosti PCM -audiomenu.analog_mode Analógový mód +audiomenu.analog_mode Analógový režim audiomenu.analog_out Analógový výstup audiomenu.auto_lang Automatický výber zvuku audiomenu.auto_subs Automatický výber titulkov @@ -114,6 +114,8 @@ audiomenu.avsync_am Hlavný zvuk audiomenu.clockrec Vzorkovanie audiomenu.dolbydigital Zvuk Dolby Digital audiomenu.hdmi_dd Zvuk DD na HDMI +audiomenu.hdmi_dd_auto auto +audiomenu.hdmi_dd_force nútene audiomenu.monoleft mono ľavý kanál audiomenu.monoright mono pravý kanál audiomenu.pref_lang Preferovaný jazyk @@ -123,14 +125,16 @@ audiomenu.pref_subs Preferované titulky audiomenu.pref_subs_head Nastavenie jazyku vybraných titulkov audiomenu.spdif_dd Zvuk DD na SPDIF audiomenu.stereo stereo +audiomenu.volume_adjust Nastavená hlasitosť, v % +audiomenu.volume_step Krok hlasitosti audioplayer.add pridaj audioplayer.add_ic Icecast -audioplayer.add_loc Zoznam lokálnych radií +audioplayer.add_loc Webrádio audioplayer.add_sc Shoutcast audioplayer.artist_title Umelec, Názov -audioplayer.building_search_index tvorba vyhľadávacieho indexu -audioplayer.button_select_title_by_id hľadaj poľa ID -audioplayer.button_select_title_by_name hľadaj poľa názvu +audioplayer.building_search_index Tvorenie vyhľadávacieho indexu +audioplayer.button_select_title_by_id hľadaj podľa ID +audioplayer.button_select_title_by_name hľadaj podľa názvu audioplayer.defdir Východzí adresár audioplayer.delete zmaž audioplayer.deleteall zmaž všetko @@ -139,15 +143,15 @@ audioplayer.enable_sc_metadata Použi meta-data pre shoutcast audioplayer.fastforward pretoč dopredu audioplayer.follow Urob výber hraného audioplayer.head Zoznam prehrávania -audioplayer.highprio Veľká priorita dekódovania +audioplayer.highprio Vyššia priorita dekódovania audioplayer.jump_backwards skoč dozadu audioplayer.jump_dialog_hint1 čas skoku audioplayer.jump_dialog_hint2 v sekundách. audioplayer.jump_dialog_title Zadaj čas skoku audioplayer.jump_forwards skoč dopredu audioplayer.keylevel funkcie klávesy -audioplayer.load_radio_stations Nahraj internetové radia -audioplayer.name Prehrávač súborov +audioplayer.load_radio_stations Nahrávam internetové rádia +audioplayer.name Prehrávač hudby audioplayer.pause pauza audioplayer.play spusti audioplayer.playing Prehrávaná skladba @@ -159,10 +163,10 @@ audioplayer.playlist_name_hint1 Zadajte názov súboru do zoznamu prehrávania audioplayer.playlist_name_hint2 Prípona .m3u bude doplnená automaticky audioplayer.reading_files Načítavam súbory audioplayer.receiving_list Načítavam zoznam, čakaj... -audioplayer.repeat_on Spusti mód opakovania +audioplayer.repeat_on Spusti režim opakovania audioplayer.rewind pretoč dozadu audioplayer.save_playlist ulož zoznam -audioplayer.screensaver_timeout Vypnutie obrazu (minúta, 0=vypnuté) +audioplayer.screensaver_timeout Vypnutie obrazu (v minútach, 0=vypnuté) audioplayer.select_title_by_name Vyber titul podľa názvu (SMS) audioplayer.show_playlist Zobraz zoznam audioplayer.shuffle náhodne @@ -179,7 +183,7 @@ bouqueteditor.bouquetname Názov buketu bouqueteditor.delete zmaž bouqueteditor.delete_question Vymazať kanál z buketu? bouqueteditor.discardingchanges Zrušenie zmien. Prosím čakaj... -bouqueteditor.hide skry +bouqueteditor.hide skri bouqueteditor.lock zamkni bouqueteditor.move presuň bouqueteditor.name Úprava buketov @@ -191,35 +195,67 @@ bouqueteditor.savingchanges Ukladám zmeny. Prosím čakaj... bouqueteditor.switch pridaj/odstráň bouqueteditor.switchmode TV/Rádio bouquetlist.head Bukety +bouquetname.hdtv HD programy +bouquetname.new Nové programy +bouquetname.other Neznámy poskytovateľ +bouquetname.removed Odstránené programy cablesetup.provider Káblový poskytovateľ -cam.empty Žiadny modul v šachte -cam.init_ok Inicializácia modulu ukončená -cam.inserted Vložený modul do šachty -cam.removed Odstránený modul zo šachty -cam.reset Resetnúť -cam.reset_standby Resetovať po spustení -cam.settings Podmienený prístup -cam.timeout Čas čakania uplynul,\nvraciam sa do menu -cam.waiting Čakám na odpoveď +channellist.additional Rozšírené informácie +channellist.additional_off VYP +channellist.additional_on ZAP +channellist.additional_on_minitv ZAP (s MiniTV) channellist.current_tp Aktuálny transpondér channellist.edit Uprav channellist.epgtext_align_left do ľava channellist.epgtext_align_right do prava channellist.extended Grafické EPG v zozname channellist.favs Obľúbené +channellist.foot Informácie programu +channellist.foot_freq Informácie kmitočtu +channellist.foot_next ďaľšia udalosť +channellist.foot_off VYP +channellist.foot_sort_alpha triediť[abeceda] +channellist.foot_sort_chnum triediť[číslo] +channellist.foot_sort_freq triediť[kmitočet] +channellist.foot_sort_sat triediť[satelit] channellist.head Všetky kanály channellist.history História +channellist.keep_numbers Zachovať čísla predvolieb channellist.make_hdlist Vytvor zoznam pre HD kanály +channellist.make_newlist Vytvor zoznam pre nové kanály +channellist.make_removedlist Vytvor zoznam pre odstránené kanály +channellist.new_zap_mode Okamžité prepínanie v zozname +channellist.new_zap_mode_active aktívne +channellist.new_zap_mode_allow povolené +channellist.new_zap_mode_off vypnuté channellist.nonefound Nenájdený zoznam kanálov!\nVykonaj vyhľadanie kanálov\n(MENU -> Služby) +channellist.numeric_adjust Zadanie čísla na prepnutie channellist.provs Poskytovatelia +channellist.recording_not_possible Nahrávanie nedostupné! +channellist.reset_flags Resetovať označenie "nový" channellist.sats Satelity channellist.since od channellist.start spúšťa +ci.clock CI taktovanie (MHz) +ci.empty Žiadny modul v šachte +ci.ignore_msg Ignoruj CA správy +ci.init_failed Chybná inicializácia modulu +ci.init_ok Inicializácia modulu ukončená +ci.inserted Vložený modul do šachty +ci.removed Odstránený modul zo šachty +ci.reset Resetnúť +ci.reset_standby Resetovať po spustení +ci.settings Podmienený prístup +ci.timeout Čas čakania uplynul,\nvraciam sa do menu +ci.waiting Čakám na odpoveď +clock_switch_off Skryť hodiny +clock_switch_on Zobraziť hodiny colorchooser.alpha Priehľadnosť colorchooser.blue Modrý colorchooser.green Zelený colorchooser.red Červený colormenu.background Pozadie +colormenu.contrast_fonts Kontrast písma colormenu.fade Miznúce menu colormenu.font Výber písma colormenu.font_ttx Výber teletextového písma @@ -235,16 +271,17 @@ colormenusetup.menucontent_inactive Neaktívne v obsahovom okne colormenusetup.menucontent_selected Vybrané v obsahovom okne colormenusetup.menuhead Hlavička colorstatusbar.text Text stavového riadku -colorthememenu.classic_theme Klasika -colorthememenu.dblue_theme DarkBlue -colorthememenu.dvb2k_theme DVB2000 -colorthememenu.gray Sivá -colorthememenu.head Výber tém +colorthememenu.head Výber vzhľadu +colorthememenu.head2 Nahraj vzhľad +colorthememenu.name Názov vzhľadu colorthememenu.neutrino_theme Neutrino -colorthememenu.red_theme Jednoduchý červený +colorthememenu.question Použiť vybraný vzhľad? +colorthememenu.save Uložiť aktuálny vzhľad +colorthememenu.select1 Uživateľský vzhľad +colorthememenu.select2 Predvolený vzhľad cpu.freq Cpu kmitočet -cpu.freq_default default kmitočet -cpu.freq_normal Normal kmitočet +cpu.freq_default Predvolený kmitočet +cpu.freq_normal Pracovný kmitočet cpu.freq_standby Standby kmitočet date.Apr Apr date.Aug Aug @@ -265,14 +302,16 @@ date.Sun Ne date.Thu Št date.Tue Ut date.Wed St +epg.saving Uloženie EPG epgextended.actors Herci epgextended.director Režisér epgextended.guests Hostia epgextended.original_title Originálny titul -epgextended.presenter Prezentovač +epgextended.presenter Produkcia epgextended.year_of_production Rok výroby -epglist.noevents EPG je nedostupné... +epglist.noevents Programové informácie (EPG) sú nedostupné... epgviewer.More_Screenings Podobné relácie na tomto kanály +epgviewer.More_Screenings_short Viacej relácií epgviewer.nodetailed Detailné informácie sú nedostupné epgviewer.notfound Nenájdené programové informácie (EPG) eventfinder.head Hľadaj v EPG @@ -282,6 +321,8 @@ eventfinder.search_within_epg Hľadaj s EPG eventfinder.search_within_list Hľadaj so zoznamom eventfinder.searching Hľadaj s klávesnicou v EPG... eventfinder.start_search Spusti hľadanie +eventlist.additional Podrobnejšie informácie +eventlist.name Zoznam udalostí eventlistbar.channelswitch prejdi eventlistbar.eventsort triedenie eventlistbar.recordevent nahraj @@ -289,6 +330,7 @@ extra.add_to_bouquet Pridanie do buketu extra.audio_run_player Stlačenie AUDIO spustí prehrávač extra.auto_delete Auto-mazanie extra.auto_timeshift Auto-nahrávanie, sec (0=vypnuté) +extra.bigwindows Veľké okná extra.cache_txt Zachytávanie teletextu extra.chadded Aktuálny kanál bol pridaný do vybraného buketu....\n extra.chalreadyinbq Aktuálny kanál sa už nachádza vo vybranom bukete....\n @@ -319,18 +361,22 @@ extra.fec_s2_qpsk_5_6 5/6 s2 qpsk extra.fec_s2_qpsk_7_8 7/8 s2 qpsk extra.fec_s2_qpsk_8_9 8/9 s2 qpsk extra.fec_s2_qpsk_9_10 9/10 s2 qpsk +extra.key_current_transponder Aktuálny kľúč transpondéra extra.key_list_end Na koniec extra.key_list_start Na začiatok -extra.key_plugin Tlačítko zobrazujúce PLUGIN -extra.key_timeshift Časový posuv +extra.key_pip_close Spustiť/Zastaviť PiP +extra.key_pip_setup Nastavenie PiP +extra.key_pip_swap Prehodiť PiP/Hlavný obraz +extra.key_plugin Tlačítko zobrazujúce doplnky +extra.key_screenshot Tlačítko zosnímania obrazovky +extra.key_timeshift Časový posun extra.key_unlock Odblokuj extra.ladirection Umiestnenie zem.šírky -extra.latitude Zem.šírka +extra.latitude Zem.šírka [N/S] extra.loadconfig Nahraj nastavenia z ... -extra.loadkeys Nahraj nastavenia kláves +extra.loadkeys Nahraj nastavenia kláves z ... extra.lodirection Umiestnenie zem.dľžky -extra.logo Čislo loga(Štartovacie logo?) -extra.longitude Zem.dľžka +extra.longitude Zem.dľžka [E/W] extra.menu_left_exit "Ľavý" = návrat menu extra.north Severne extra.record_time Rýchly čas nahrávania (hodiny) @@ -340,14 +386,13 @@ extra.rounded_corners_off hranatý extra.rounded_corners_on zaoblený extra.saveconfig Ulož nastavenia ako ... extra.savekeys Ulož nastavenia kláves -extra.scan_fast Rýchle prehľadávanie (XML) -extra.scan_full Úplné prehľádávanie (XML+NIT) extra.scrambled_message Správa kódovania +extra.show_mute_icon Ikona umlčania pri hlasitosti 0 extra.sms_channel Mód SMS pre kanál extra.south Južne extra.start_tostandby Spustenie do stavu pripravenosti -extra.temp_timeshift Dočasný časový posuv -extra.timeshift_pause Pozastavenie časového posuvu +extra.temp_timeshift Dočasný časový posun +extra.timeshift_pause Pozastavenie časového posunu extra.tp.pol_v V extra.tp_fec FEC extra.tp_freq Kmitočet @@ -359,20 +404,21 @@ extra.tp_mod_32 QAM/32 extra.tp_mod_64 QAM/64 extra.tp_pol Polarizácia extra.tp_pol_h H +extra.tp_pol_l L +extra.tp_pol_r R extra.tp_rate SymbolRate extra.update_dir Adresár aktualizácie extra.use_gotoxx Použi gotoXX +extra.volume_digits Hlasitoť číselne extra.volume_pos Ukazovateľ hlasitosti extra.west Západne -extra.zap_cycle Vypnúť históriu kanálov +extra.zap_cycle Cyklické prepínanie extra.zapit_fe_timeout Časový limit naladenia (1 = 10 msek) extra.zapit_hvoltage 18V pri točení motora -extra.zapit_make_bouquet Wykonaj pozostałe listy kanałów -extra.zapit_menu Možnosti prepínania +extra.zapit_make_bouquet Vykonaj ostatné zoznamy kanálov extra.zapit_motor_speed Rýchlosť točenia (10 = 1st/sek) extra.zapit_scanpids Vyhľadávanie s PIDmi -extra.zapit_sdt_changed Zmenené kanály, načítanie nastavenia. -extra.zapit_write_names Zapísanie názvov kanálov +extra.zapit_sdt_changed Zmenené kanály, načítavam nastavenia. fan_speed Rýchlosť CPU ventilátora favorites.addchannel Aktuálny kanál bude pridaný \ndo buketu "Obľúbené". \nTo potrvá niekoľko sekúnd... favorites.bouquetname Obľúbené @@ -405,9 +451,11 @@ filesystem.is.utf8 Znaková sada súboru filesystem.is.utf8.option.iso8859.1 ISO-8859-1 filesystem.is.utf8.option.utf8 UTF-8 flashupdate.actionreadflash načítavanie +flashupdate.apply_settings Preniesť aktuálne nastavenia do nového image? flashupdate.cantopenfile Otvorenie súboru nemožné -flashupdate.cantopenmtd Otvorenie MTD-zariadenie nemožné -flashupdate.checkupdate Zisti novú verziu +flashupdate.cantopenmtd Otvorenie MTD-zariadenia nemožné +flashupdate.checkupdate_internet Skontrolovať aktualizácie on-line +flashupdate.checkupdate_local Lokálna aktualizácia flashupdate.currentversion_sep Aktuálna verzia flashupdate.currentversiondate Dátum flashupdate.currentversiontime Hodina @@ -434,7 +482,7 @@ flashupdate.new_notfound Žiadny nový IMAGE flashupdate.programmingflash Programovanie pamäte FLASH flashupdate.proxypassword Heslo flashupdate.proxypassword_hint1 Vloženie hesla servera proxy -flashupdate.proxypassword_hint2 Prázde pole znamená nepoužitie hesla +flashupdate.proxypassword_hint2 Prázdne pole znamená nepoužitie hesla flashupdate.proxyserver Názov servera proxy flashupdate.proxyserver_hint1 Vloženie názovu servera proxy alebo IP (host:port) flashupdate.proxyserver_hint2 Prázdne pole znamená nepoužitie proxy servera @@ -448,12 +496,19 @@ flashupdate.ready Hotovo. flashupdate.reallyflashmtd Naozaj vykonať programovanie?\n\nV prípade výskytu chyby alebo nesprávneho súboru\n box nenabehne.\n\nNázov súboru: %s\nCieľ: %s flashupdate.savesuccess IMAGE bol úspešne uložený \nako %s. flashupdate.selectimage Dostupné súbory +flashupdate.settings Aktualizácia nastavení flashupdate.squashfs.noversion Kontrola SquashFS verzií je podporovaná len počas aktualizácie cez internet.\nSkutočne nainštalovať tento súbor? flashupdate.titlereadflash Načítanie pamäte FLASH flashupdate.titlewriteflash Zapísanie pamäte FLASH +flashupdate.update_with_settings_del_skipped Adresár [%s] nebol vymazaný. Zadanie je preskočené. +flashupdate.update_with_settings_error Chyba FLASH pamäte!\n \nNový IMAGE má len %ld KB (ostáva %ld KB) do konca. \nnedostatok miesta pre dokončenie operácie.\n \nOperácia prerušená! +flashupdate.update_with_settings_processed IMAGE sa spracováva... +flashupdate.update_with_settings_skipped Adresár [%s] nebol uložený. Zadanie je preskočené. +flashupdate.update_with_settings_successfully Nastavenie úspešne prevzaté.\nIMAGE sa môže nahrať. +flashupdate.update_with_settings_warning Pozor nahrávanie!\n \nNový IMAGE má len %ld KB (ostáva %ld KB) do konca. Pravdepodobne \n je málo miesta na dokončenie operácie...\n \nSkutočne chcete pokračovať? flashupdate.updatemode Spôsob aktualizácie flashupdate.updatemode_internet Internet -flashupdate.updatemode_manual ručne +flashupdate.updatemode_manual Lokálny adresár flashupdate.url_file Konfiguračný súbor flashupdate.versioncheck Kontrola verzie flashupdate.writeflash Zapísanie celého IMAGE do pamäte FLASH @@ -464,18 +519,25 @@ fontmenu.epg EPG fontmenu.eventlist Programový sprievodca fontmenu.gamelist Zoznam hier fontmenu.head Nastavenia písma -fontmenu.infobar Stavový riadok +fontmenu.infobar Informačná lišta fontmenu.menu Menu +fontmenu.scaling Faktor zoomu globálneho fontu +fontmenu.scaling_x Vodorovne (v %) +fontmenu.scaling_x_hint2 Vodorovne (v %) min 50 / max 200 +fontmenu.scaling_y Zvislo (v %) +fontmenu.scaling_y_hint2 Zvislo (v %) min 50 / max 200 fontmenu.sizes Veľkosti písma fontsize.channel_num_zap priamy výber fontsize.channellist Zoznam kanálov fontsize.channellist_descr Popis +fontsize.channellist_event Prehľad relácií fontsize.channellist_number Číslo fontsize.epg_date Dátum EPG fontsize.epg_info1 Informácia EPG 1 fontsize.epg_info2 Informácia EPG 2 fontsize.epg_title Titul EPG fontsize.eventlist_datetime Dátum/Čas EPG +fontsize.eventlist_event Udalosť EPG fontsize.eventlist_itemlarge Veľké EPG fontsize.eventlist_itemsmall Malé EPG fontsize.eventlist_title Titul EPG @@ -484,14 +546,13 @@ fontsize.gamelist_itemlarge Veľký zoznam hier fontsize.gamelist_itemsmall Malý zoznam hier fontsize.hint Inicializácia písma,\nprosím čakaj... fontsize.infobar_channame Názov kanálu -fontsize.infobar_info Informácia na stavovom riadku -fontsize.infobar_number Kanál na stavovom riadku -fontsize.infobar_small Malý stavový riadok +fontsize.infobar_info Informácia na informačnej lište +fontsize.infobar_number Kanál na informačnej lište +fontsize.infobar_small Malá informačná lišta fontsize.menu Text menu +fontsize.menu_hint Popis menu fontsize.menu_info Informačné menu fontsize.menu_title Titulok menu -gtxalpha.alpha1 Alfa 1 -gtxalpha.alpha2 Alfa 2 hdd_10min 10 minút hdd_1min 1 minúta hdd_20min 20 minút @@ -502,19 +563,21 @@ hdd_activate Použi nastavenia hdd_check Kontrola súborového systému hdd_check_failed Chyba kontroly disku ! hdd_ext3 Súborový systém Ext3 -hdd_fast minimálne +hdd_extended_settings Rozšírené nastavenia disku +hdd_fast rýchle hdd_format Formátovanie HDD hdd_format_failed Chyba počas formátovania disku ! hdd_format_warn Naozaj formátovať? Všetky dáta budú stratené! hdd_fs Súborový systém hdd_manage Spravovanie HDD hdd_middle stredne -hdd_noise Hlučnosť +hdd_noise Hlučnosť (AAM) hdd_not_found Nenájdený disk hdd_reiser ReiserFS -hdd_settings Nastavenia HDD +hdd_removable_device Odstrániteľné zariadenie +hdd_settings Nastavenia HDD/USB hdd_sleep Čas uspania -hdd_slow maximálne +hdd_slow pomaly hdd_umount_warn Chyba počas odpojenia disku ! imageinfo.creator Vytvoril: imageinfo.date Dátum: @@ -523,9 +586,10 @@ imageinfo.forum Fórum: imageinfo.head Informácia o IMAGE imageinfo.homepage Domov: imageinfo.image Image: +imageinfo.kernel Jadro: imageinfo.license Licencia: imageinfo.version Verzia: -inetradio.name Internetové radio +inetradio.name Internetové rádio infoviewer.epgnotload EPG informácie nie sú načítané... infoviewer.epgwait čakám na informácie EPG... infoviewer.eventlist Prehľad EPG @@ -537,7 +601,7 @@ infoviewer.noepg EPG je nedostupné infoviewer.notavailable Kanál (teraz) nedostupný infoviewer.now Teraz infoviewer.selecttime Časy začatia -infoviewer.streaminfo Informácia +infoviewer.streaminfo Infodoplnky infoviewer.subchan_disp_pos Zobrazenie podkanálov infoviewer.subchan_infobar Celé info infoviewer.subservice Doplnkové služby @@ -559,16 +623,31 @@ keybindingmenu.channellist Zoznam kanálov keybindingmenu.channelup Predchádzajúci kanál keybindingmenu.head Nastavenie klávesov keybindingmenu.lastchannel Späť na posledný kanála +keybindingmenu.misc Rôzne +keybindingmenu.mode_left_right_key_tv Činnosť Ľavého/Pravého kurzora v TV režime +keybindingmenu.mode_left_right_key_tv_infobar Zobraz informačnú lištu +keybindingmenu.mode_left_right_key_tv_volume Ovládanie hlasitosti +keybindingmenu.mode_left_right_key_tv_vzap Virtuálne prepnutie +keybindingmenu.mode_left_right_key_tv_zap Prepnutie keybindingmenu.modechange Zmena spôsobu keybindingmenu.pagedown Nasledujúca strana keybindingmenu.pageup Predchádzajúca strana +keybindingmenu.poweroff Správa napájania keybindingmenu.quickzap Rýchle prepnutie kanálov +keybindingmenu.remotecontrol_hardware Typ ovládača boxu +keybindingmenu.remotecontrol_hardware_coolstream CST +keybindingmenu.remotecontrol_hardware_dbox d-box Nokia +keybindingmenu.remotecontrol_hardware_msg_part1 Diaľkové ovládanie bolo zmenené z ' +keybindingmenu.remotecontrol_hardware_msg_part2 ' na ' +keybindingmenu.remotecontrol_hardware_msg_part3 \nJe to správne ?\nProsím potvrdiť tento výber do 15 sekúnd použitím nového ovládača.\nInak bude výber vrátený. +keybindingmenu.remotecontrol_hardware_philips Philips +keybindingmenu.remotecontrol_hardware_tripledragon Triple Dragon keybindingmenu.repeatblock Základné oneskorenie keybindingmenu.repeatblockgeneric Oneskorenie opakovania keybindingmenu.sort Zmena poradia triedenia keybindingmenu.subchanneldown Predchádzajúci podkanál keybindingmenu.subchannelup Nasledujúci podkanál -keybindingmenu.tvradiomode TV/Radio +keybindingmenu.tvradiomode TV/Rádio keybindingmenu.zaphistory História prepínania buketov keychooser.head Nastvenie nového klávesu keychooser.text1 Stlač kláves @@ -579,27 +658,31 @@ keychoosermenu.setnone Zrušenie priradenia languagesetup.head Nastavenie jazyka languagesetup.osd Jazyk OSD languagesetup.select Jazyk +lcd_info_line Zobrazenie v inforiadku +lcd_info_line_channel Názov kanálu +lcd_info_line_clock Hodiny lcdcontroler.brightness Jas lcdcontroler.brightnessdeepstandby Jas v hlbokom spánku lcdcontroler.brightnessstandby Jas v spánku -lcdcontroler.contrast Kontrast lcdmenu.dim_brightness Jas po zhasnutí lcdmenu.dim_time Čas zhasnutia lcdmenu.head Nastavenie VFD lcdmenu.lcdcontroler Jas lcdmenu.statusline Stavový riadok -lcdmenu.statusline.both hlasitosť/hraný čas +lcdmenu.statusline.both hlasitosť/odohratý čas lcdmenu.statusline.playtime odohratý čas lcdmenu.statusline.volume hlasitosť +ledcontroler.blink Blikať v hlbokom spánku ak je nastavený časovač ledcontroler.menu Podsvietenie Power tlačítka ledcontroler.mode.deepstandby Hlboký spánok +ledcontroler.mode.record Blikať pri nahrávaní ledcontroler.mode.standby Pripravenosť -ledcontroler.mode.tv TV mód +ledcontroler.mode.tv TV režim ledcontroler.off Led1 a Led2 vyp. ledcontroler.on.all Led1 a Led2 zap. ledcontroler.on.led1 Led1 zap. ledcontroler.on.led2 Led2 zap. -mainmenu.audioplayer Prehrávač súborov +mainmenu.audioplayer Prehrávač hudby mainmenu.clearsectionsd Vyčistenie EPG zachytávania mainmenu.games Hry mainmenu.head Hlavné menu @@ -607,17 +690,18 @@ mainmenu.media Média mainmenu.movieplayer Prehrávač filmov mainmenu.pausesectionsd Načítavanie EPG mainmenu.pictureviewer Prehliadač obrázkov -mainmenu.radiomode Radio +mainmenu.radiomode Rádio mainmenu.reboot Reboot mainmenu.recording Nahrávanie -mainmenu.recording_start Spusti -mainmenu.recording_stop Zasatav +mainmenu.recording_start Spustiť +mainmenu.recording_stop Zastaviť mainmenu.scripts Skripty mainmenu.service Služby mainmenu.settings Nastavenia mainmenu.shutdown Vypnúť mainmenu.sleeptimer Časovač vypnutia mainmenu.tvmode TV +mainmenu.tvradio_switch Prepnutie TV-Rádio mainsettings.audio Zvuk mainsettings.head Nastavenia mainsettings.keybinding Nastavenia kláves @@ -629,10 +713,405 @@ mainsettings.network Sieť mainsettings.osd Nastavenia OSD mainsettings.recording Nahrávanie mainsettings.savesettingsnow Uloženie nastavenia -mainsettings.savesettingsnow_hint Zapisovanie nastavení,\nprosím čakaj... +mainsettings.savesettingsnow_hint Ukladanie nastavení,\nprosím čakaj... mainsettings.timezone Časová zóna mainsettings.video Obraz menu.back späť +menu.cancel zrušiť +menu.hint_a_pic Nastavenie prehrávača hudby a obrázkového prehliadača +menu.hint_aplay Prehrávač zvukových súborov +menu.hint_audio Audio výstup, DD, SRS TrueVolume \nVoľby +menu.hint_audio_analog_mode Výber zvukového kanálu pre\nstereo, mono-ľavý, mono-pravý +menu.hint_audio_avsync A/V synchronizácia +menu.hint_audio_dd Automatické prepnutie na DolbyDigital zvukový pid,\nak je dostupný +menu.hint_audio_hdmi_dd DolbyDigital cez HDMI:\nnie - automatické dekódovanie ak je podporované zariadením, nútene - ... +menu.hint_audio_spdif_dd DolbyDigital cez optický výstup +menu.hint_audio_srs SRS TruVolume ovládanie hlasitosti \npoužitím zmien obsahu +menu.hint_audio_srs_algo Účinnosť ovládania, jemná alebo klasická +menu.hint_audio_srs_nmgr Potlačovač šumu +menu.hint_audio_srs_volume Referenčná úroveň citlivosti +menu.hint_audio_volstep Zvýšenie/zníženie kroku pre klávesy VOL +/- +menu.hint_audioplayer_defdir Prednastavený adresár prehrávača hudby +menu.hint_audioplayer_follow Pohyb vybraného ukazovateľa zoznamu prehrávania\nna aktuálne hrajúcu pieseň +menu.hint_audioplayer_highprio Zvýšenie priority prehrávania +menu.hint_audioplayer_order Zmena triedenia zonamu prehrávania +menu.hint_audioplayer_playlist Zobrazenie položiek zoznamu prehrávania +menu.hint_audioplayer_repeat Použiť opakovanie zoznamu prehrávania pri dosiahnutí konca +menu.hint_audioplayer_sc_metadata Použije extrakciu meta-dát z prehrávaného zvuku +menu.hint_audioplayer_screensaver Nastavenie času šetriča, v minútach +menu.hint_audioplayer_title Použije SMS štýl vyhľadávania titulov v zozname prehrávania +menu.hint_auto_lang Automatické prepnutie zvuku na preferovaný jazyk +menu.hint_auto_subs Automatické spustenie titulkov pre preferovaný jazyk +menu.hint_back Návrat do predchádzajúcej položky.\nStlačenie MENU klávesy uzavrie všetky položky +menu.hint_backup Záloha konfigurácií a kanálov do vybraného adresára +menu.hint_bedit Úprava obľúbených a buketov +menu.hint_bigwindows Zoznam kanálov, programové informácie, prehrávač hudby a niektoré ďaľšie okná budú zobrazované na celej obrazovke +menu.hint_cache_txt Spustenie zachytávania teletextu po prepnutí kanála +menu.hint_cec_mode CEC režim +menu.hint_cec_standby Ováldanie externými CEC príkazami v pripravenosti +menu.hint_cec_view_on Ovládanie externými CEC príkazami pri sledovaní +menu.hint_channellist_additional Zobrazenie doplnkových informácií\nv hlavnom boxe +menu.hint_channellist_colored Použitie rozdielnej farby pre aktuálnu a nasledujúcu udalosť +menu.hint_channellist_epg_align Zarovnanie EPG udalostí +menu.hint_channellist_extended Grafické zobrazenie aktuálnej udalosti +menu.hint_channellist_fonts Zmena veľkosti písma zoznamu kanálov +menu.hint_channellist_foot Zobrazenie ďaľších informácií\nv dolnom boxe +menu.hint_channellist_setup Konfigurácia GUI volieb zonamu kanálov +menu.hint_ci Nastavovacie menu podmieneného pristupu\npre váš CI CAM or vloženú Conax kartu +menu.hint_colors Konfigurácia farieb GUI +menu.hint_content_back Zmena farby podkladu GUI okna +menu.hint_content_textcolor Zmena farby textu GUI okna +menu.hint_contrast_fonts Zvýraznenie kontrastu pisma (neúčinné pri podklade) +menu.hint_dboxinfo Informácia o procesore a úložisku +menu.hint_delete_channels Odstránenie všetkých kanálov +menu.hint_delete_removed Vymazanie kanálov v bukete "Odstránené kanaly" +menu.hint_epg_cache Maximum dní pre zachytávanie ďaľších udalostí +menu.hint_epg_dir Výber adresára na disku alebo usb \npre uloženie EPG. +menu.hint_epg_extendedcache Maximálny čas zachytávania\npopisov doplňujúcich udalostí +menu.hint_epg_fonts Zmena veľkosti písma okna EPG podrobností +menu.hint_epg_max_events Maximum udalostí zachytávania. Po dosiahnutí hranice\nEPG cache odstráni nasledujúce udalosti +menu.hint_epg_old_events Hodiny po skončení udalosti aby sa označila\nako stará a odstránila sa zo zachytávania +menu.hint_epg_save Uloženie zachyteného EPG na disk alebo usb\na načítanie po spustení +menu.hint_epg_save_standby Uloženie EPG v režime pripravenosti +menu.hint_event_textcolor Zmena farby udalosti pre nastavenia farebnosti udalosti\nv zozname kanálov a stavovom riadku +menu.hint_eventlist_additional Zobrazí podrobnejšie informácie\nv hlavnom okne +menu.hint_eventlist_fonts Zmena veľkosti písma zoznamu udalostí +menu.hint_eventlist_setup Konfigurácia GUI volieb zoznamu udalostí +menu.hint_extended Správa napájania, voľby ukladania/nahrania EPG \nHDMI-CEC, štartovací kanál, voľby prepínania +menu.hint_factory Reset príjmača do výrobného stavu\nPríjmač sa musí rebotovať po resete +menu.hint_fade Postupné miznutie GUI okien +menu.hint_fan_speed Kontrola rýchlosti ventilátora +menu.hint_filebrowser_denydirectoryleave Nepovoliť prehliadaču súborov odísť z hlavného adresára +menu.hint_filebrowser_showrights Zobrazenie oprávnení súboru v prehliadači súborov +menu.hint_fileplay Prehrávanie rôznych obrazových súborov +menu.hint_filesystem_is_utf8 Kódovanie súborového systemu prehliadača súborov +menu.hint_font_gui Výber súboru písma pre GUI +menu.hint_font_scaling Zvislé a vodorovné nastavenie globálnej mierky písma +menu.hint_font_ttx Výber písma pre teletext +menu.hint_fonts Konfigurácia písma GUI +menu.hint_gamelist_fonts Zmena veľkosti písma zoznamu hier a skriptov +menu.hint_games Zobrazenie zoznamu inštalovaných hier +menu.hint_hdd Formátovanie/kontrola pevného disku +menu.hint_hdd_apply Použitie parametrov uspania/stíšenia +menu.hint_hdd_check Kontrola súborového systému (fsck) +menu.hint_hdd_format Vytvorenie HDD partície a jej formátovanie +menu.hint_hdd_noise Nastavenie Automatic Acoustic Management\nnie je podporované u všetkých zariadení +menu.hint_hdd_sleep Výber času zastavenia disku pri neaktivite +menu.hint_hdd_tools Inicializácia HDD, kontrola súborového systému +menu.hint_head_back Zmena farby podkladu nadpisu hlavičky +menu.hint_head_textcolor Zmena farby nadpisu hlavičky +menu.hint_imageinfo Informácia o inštalovanom programe +menu.hint_inact_timer Vypnutie príjmača pri neaktivite +menu.hint_inactive_back Zmena farby podkladu nektívnej položky +menu.hint_inactive_textcolor Zmena farby textu neaktívnej položky +menu.hint_inet_radio Internetové rádia +menu.hint_info Informácia o IMAGE, systéme, streame a podmienenom prístupe +menu.hint_infobar_back Zmena farby podkladu informačnej lišty +menu.hint_infobar_casys áno: zobrazí všetko farebne,\n CA mini: jedna ikona zámku, CA mód: len aktívne systémy, nie: nezobrazí +menu.hint_infobar_colored_event Použije inú farbu pre aktuálnu alebo nasledujúcu udalosť +menu.hint_infobar_dd Zobrazenie DolbyDigital ikony +menu.hint_infobar_filesys Zobrazenie úrovne obsadenia pamäte a disku +menu.hint_infobar_fonts Zmena veľkosti fontu informačnej lišty +menu.hint_infobar_logo Voľby loga / signálu +menu.hint_infobar_logo_dir Výber adresára pre vyhľadanie loga kanálu +menu.hint_infobar_on_epg Zobrazenie informačnej lišty pri zmene aktuálnej udalosti EPG +menu.hint_infobar_radiotext Zobrazí rádiotext okno +menu.hint_infobar_res Zobrazenie ikony rozlíšenia kanála +menu.hint_infobar_sat Zobrazenie aktuálneho satelitného alebo káblového poskytovateľa +menu.hint_infobar_setup Nastavenie vlastností informačnej lišty +menu.hint_infobar_textcolor Zmena farby textu informačnej lišty +menu.hint_infobar_tuner Zobrazenie číselnej ikony aktívneho tunera +menu.hint_keep_numbers Zachovať čísla kanálov po nasledujúcom vyhľadávaní\na úprave buketov +menu.hint_key_addrecord Priradenie klávesy pre pridanie nahrávania časovača\nz programového sprievodcu +menu.hint_key_addremind Priradenie klávesy pre pridanie prepnutia časovača\nz programového sprievodcu +menu.hint_key_audio áno: 'AUDIO' kláves spustí zobrazenie prehrávania \nnie: 'AUDIO' kláves zobrazí výber zvuku +menu.hint_key_binding Predefinovanie kláves použitých pre príkazové operácie +menu.hint_key_bouquetdown Pridelenie klávesy pre zmenu zoznamu kanálov\ndo predchádzajúceho buketu +menu.hint_key_bouquetup Pridelenie klávesy pre zmenu zoznamu kanálov\ndo nasledujúceho buketu +menu.hint_key_cancel Pridelenie klávesy pre zatvorenie GUI okna +menu.hint_key_channel_sms Ak zapnuté, číselné klávesy v zozname kanálov\nsú použité na hľadanie kanála v SMS štýle +menu.hint_key_channeldown Priradenie klávesy pre rýchlu zmenu na predchádzajúci\nkanál v zozname kanálov +menu.hint_key_channellist Konfigurácia klávesových skratiek pre zoznam kanálov +menu.hint_key_channelup Priradenie klávesy pre rýchlu zmenu na nasledujúci\nkanál v zozname kanálov +menu.hint_key_hardware Zmena typu diaľkového ovládača +menu.hint_key_history Priradenie klávesy pre zobrazenie\nhistórie prepínania kanála +menu.hint_key_lastchannel Priradenie klávesy pre rýchle prepnutie na\npredchádzajúci kanál v histórii +menu.hint_key_left_exit Povolí návrat do predchádzajúceho menu s klávesou 'vľavo' +menu.hint_key_list_end Priradenie klávesy pre skok na koniec zoznamu +menu.hint_key_list_start Priradenie klávesy pre skok na žačiatok zoznamu +menu.hint_key_load Nahrá klávesové skratky zo súboru +menu.hint_key_modechange Zmena TV/Rádio režimu a kláves pripravenosti +menu.hint_key_movieplayer Konfigurácia klávesových skratiek pre prehrávač filmov +menu.hint_key_mpaudio Priradenie klávesy pre zobrazenie výberu zvuku\nv režime nahrávky +menu.hint_key_mpbookmark Priradenie klávesy pre vytvorenie záložky\npočas nahrávky +menu.hint_key_mpforward Priradenie klávesy pre pretáčanie vpred nahrávky +menu.hint_key_mppause Priradenie klávesy pre pozastavenie nahrávky +menu.hint_key_mpplay Priradenie klávesy pre pokračovanie nahrávky +menu.hint_key_mpplugin Priradenie klávesy pre spustenie vybraného doplnku\npočas nahrávky +menu.hint_key_mprewind Priradenie klávesy pre pretáčanie vzad nahrávky +menu.hint_key_mpstop Priradenie klávesy pre zastavenie nahrávky +menu.hint_key_mptime Priradenie klávesy pre zobrazenie časov nahrávky +menu.hint_key_mptimeshift Priradenie klávesy pre spustenie časového posunu +menu.hint_key_pagedown Priradenie klávesy pre zobrazenie nasledujúcej strany položiek +menu.hint_key_pageup Priradenie klávesy pre zobrazenie predchádzajúcej strany položiek +menu.hint_key_pip_close Priradenie klávesy pre ukončenie PiP\nalebo spustenia ho na aktuálnom kanály +menu.hint_key_pip_setup Priradenie klávesy pre konfiguráciu PiP +menu.hint_key_pip_swap Priradenie klávesy pre zmenu PiP a živého kanála +menu.hint_key_poweroff Priradenie klávesy pre zmenu stavu napájania\n (pripravenosť/spánok <-> práca) +menu.hint_key_quickzap Konfigurácia klávesových skratiek pre rýchlu\nzmenu kanála +menu.hint_key_repeatblock Oneskorenie po stlačení klávesy a pred\nprvým opakovním povelu +menu.hint_key_repeatblockgeneric Oneskorenie medzi opakovanim povelov\npočas stlačenia klávesy +menu.hint_key_right Výber 'vpravo' funkcie v živom TV/Rádio režime +menu.hint_key_save Uloží klávesové skratky do súboru +menu.hint_key_screenshot Priradenie klávesy pre uloženie GUI/nalebo zachytenie obrazovky +menu.hint_key_sort Priradenie klávesy pre zmenu triedenia zoznamu kanálov +menu.hint_key_subchanneldown Priradenie klávesy pre rýchlu zmenu\n do predchádzajúceho subkanálu +menu.hint_key_subchannelup Priradenie klávesy pre rýchlu zmenu\n do nasledujúceho subkanálu +menu.hint_key_transponder Priradenie tlačítka pre zobrazenie zoznamu kanálov\nz aktuálneho transpondéra +menu.hint_key_tvradiomode Priradenie tlačítka pre zmenu TV <> Rádio režimu +menu.hint_key_unlock Priradenie tlačitka pre odomknutie poľa ak je zamknuté\nPre odomknutie stlačiť 'RED', potom počas 5 sekúnd to tlačítko +menu.hint_keys Rýchlosť opakovania diaľkového ovládača\nÚprava väzieb tlačítok +menu.hint_lang_pref Konfigurácia preferovaného zvuku, EPG a jazyka titulkov +menu.hint_language OSD jazyk, časové pásmo\nPreferovaný zvuk a jazyk titulkov +menu.hint_last_radio Spustenie príjmača na vybranom kanáli\nak posledný režim je Rádio +menu.hint_last_tv Spustenie príjmača na vybranom kanáli\nak posledný režim je TV +menu.hint_last_use Spustenie príjmača na poslednom použitom kanáli +menu.hint_leds_blink Blikanie LED v režime spánku +menu.hint_leds_deepstandby Stav LED v režime spánku +menu.hint_leds_record Stav LED počas nahrávania +menu.hint_leds_standby Stav LED v režime pripravenosti +menu.hint_leds_tv Funkčný stav LED +menu.hint_load Nahranie GUI nastavení zo súboru +menu.hint_make_hdlist Automaticky vytvorí HD zoznam kanálov na základe\ntypu kanála a názvu +menu.hint_make_newlist Vytvorí zoznam nedávno pridaných kanálov +menu.hint_make_removedlist Vytvorí zoznam nedávno odstránených kanálov +menu.hint_manage_settings Záloha, obnova, východzí stav\nVýrobné nastavenie príjmača +menu.hint_mb Vaše nahrávky +menu.hint_media Prehrávanie filmov a hudby, prezeranie obrázkov +menu.hint_menu_fonts Zmena veľkosti písma menu +menu.hint_menu_hints Zobrazí túto radu. Taktiež môžno zmeniť\nkedykoľvek použitím ´HELP´ tlačítka +menu.hint_menu_pos Výber umiestnenia menu +menu.hint_misc_cec HDMI-CEC voľby +menu.hint_misc_channellist HD/Nové/Odstránené zoznamy kanálov, cyklické prepnutie +menu.hint_misc_energy Použitie pripravenosti, oddialené vypnutie\nčasovače neaktivity +menu.hint_misc_epg Voľby uloženia/nahrania EPG, voľby zachytávania EPG,\nEPG adresár uloženia +menu.hint_misc_filebrowser Kódovanie súborového systemu, oprávnenia súboru,\nzákaz odstrániť adresáre +menu.hint_misc_general Spustenie do pripravenosti, zachytávanie teletextu, zmena motora\nhdd adresár doplnkov +menu.hint_misc_zapit Východzie TV/Radio kanály +menu.hint_movie Prehrávanie filmov +menu.hint_net_broadcast Zadanie adresy vysielania, ak netušíte použite IP adresu s koncom .255 +menu.hint_net_dhcp Použije DHCP server pre automatickú konfiguráciu +menu.hint_net_djmount Pripojenie UPnP zariadení ako filesystem\npodľa /media/00upnp +menu.hint_net_ftpd Použitie prenosu súboru cez FTP +menu.hint_net_gateway Vloženie IP adresy brány smerovača +menu.hint_net_hostname Zmena hosťovacieho názvu príjmača +menu.hint_net_if Výber interface pre konfiguráciu +menu.hint_net_ipaddress Vloženie IP adresy vášho príjmača +menu.hint_net_mount Konfigurácia, pripojenie a odpojenie sieťových zdielaní\nNFS a CIFS podpora +menu.hint_net_nameserver Zadanie IP adresy DNS servera +menu.hint_net_netmask Zadanie sieťovej masky, ak netušíte použite 255.255.255.0 +menu.hint_net_nfs_mount Konfigurácia a pripojenie sieťových zdielaní +menu.hint_net_nfs_umount Odpojenie sieťových zdielaných pripojení +menu.hint_net_ntp Konfigurácia synchronizácie času +menu.hint_net_ntpenable Použije synchronizáciu času pomocou NTP protokolu\nAk NTP synchronizácia nie je úspešná, bude použité DVB +menu.hint_net_ntprefresh Časový interval synchronizácie +menu.hint_net_ntpserver Vloženie názvu NTP servera +menu.hint_net_pass Vloženie kryptovacieho kľúča (WPA-PSK) +menu.hint_net_proxy Ak používate proxy prístup k internetu\nnastavte tu on-line aktualizáciu software +menu.hint_net_proxypass Proxy uživateľské heslo\nak vyžaduje autorizáciu +menu.hint_net_proxyserver Názov proxy servera +menu.hint_net_proxyuser Proxy užívateľský názov\nak vyžaduje autorizáciu +menu.hint_net_services Konfigurácia sieťových služieb:\nftp, Telnet, uPnp +menu.hint_net_setupnow Použitie aktuálnych nastavení +menu.hint_net_setuponstartup Spustenie siete v čase spúštania príjmača +menu.hint_net_show Zobrazenie aktuálneho sieťového nastavenia +menu.hint_net_ssid Zadanie SSID wireless siete\npre pripojenie sa k +menu.hint_net_telnet Použitie telnet prihlásenia do vášho príjmača +menu.hint_net_test Test sieťového pripojenia: ping brány,\n názov servera a externé IP +menu.hint_net_ushare Zdielanie pripojeného HDD cez uPnp +menu.hint_network IP adresa, brána, DNS, Synch. času\nSieťové zdielanie a služby +menu.hint_new_zap_mode Povoliť prepnutie kanála počas prehliadania\n(prepnuť režim s 'MUTE' v zozname kanálov) +menu.hint_numeric_adjust Nastavenie režimu zoznamu kanálov na číselné prepnutie +menu.hint_osd Farby, písma, veľkosť obrazu\nvzhľad a možnosti GUI +menu.hint_osd_language Výber OSD jazyka +menu.hint_osd_preset Prekonfigurovanie okrajov obrazovky pre CRT a LCD TV +menu.hint_parentallock_changepin Zmena PIN kódu +menu.hint_parentallock_lockage Výber povoleného veku pre sledovanie +menu.hint_parentallock_prompt Konfigurácia keď sa Neutrino-HD opýta na PIN kód +menu.hint_personalize Povolenie/zakázanie alebo Položky menu zabezpečenia\nKonfigurácia farebných tlačítok uživateľských ponúk +menu.hint_pictureviewer_defdir Východzí adresár prehliadača obrázkov +menu.hint_pictureviewer_scaling Algoritmus mierky obrázku +menu.hint_pictureviewer_slide_time Interval zmeny obrázka, v sekundách +menu.hint_picview Sledovanie obrázkov +menu.hint_plugins_hdd_dir Výber adresára pre nahranie doplnkov +menu.hint_power_leds Konfigurácia správania LED podsvietenia tlačítka napájania +menu.hint_pref_lang Výber preferovaných jayzkov zvuku a EPG\nvýber 'none' pre nepoužitie +menu.hint_pref_subs Výber preferovaných jazykov titulkov\nvýber 'none' pre nepoužitie +menu.hint_progressbar Výber volieb pre ukazovateľ +menu.hint_progressbar_color Zobrazenie farebného ukazovateľa +menu.hint_progressbar_design Tu je možné vybrať dizajn ukazovateľa s aktívnymi farebnými voľbami +menu.hint_progressbar_infobar_position Vyberie možnosti ukazovateľa v infobare +menu.hint_protection Ochrana obsahu PIN kódom\nVýchodzí PIN 0000 +menu.hint_radiomode Prepne príjmač do rádio režimu +menu.hint_reboot Reboot príjmača\nBez potvrdzovania +menu.hint_record_apid_ac3 Nahrá AC3 zvukové pidy +menu.hint_record_apid_alt Nahrá ostatné zvukové pidy +menu.hint_record_apid_std Nahrá prvý zvukový pid +menu.hint_record_apids Konfigurácia volieb zvukových pidov pre nahrávanie +menu.hint_record_apply Použije voľby nahrávania +menu.hint_record_chandir Vytvorí adresár s názvom kanála\npre uloženie nahrávky +menu.hint_record_data Konfigurácia dátových služieb (TeleText, Titulky) pre nahrávanie +menu.hint_record_data_dvbsub Nahrá pid/stream s titulkami +menu.hint_record_data_vtxt Nahrá pid/stream s teletextom +menu.hint_record_dir Výber adresára pre ukladanie nahrávok +menu.hint_record_end Zastaviť nahrávanie po max. čase alebo\npo čase ukončenia aktuálnej udalosti +menu.hint_record_slow_warn Zobrazenie upozornenia, ak nahrávací buffer je blízko k preplneniu +menu.hint_record_tdir Výber adresára pre uloženie nahrávok časového posunu\nv režime dočasného časového posunu +menu.hint_record_time Čas nahrávania do konca ak\nsa použije nahrávanie s tlačitkom nahrávania (REC) +menu.hint_record_timeafter Zastavenie nahrávania po ukonční udalosti\nv minútach +menu.hint_record_timebefore Spustenie nahrávania pred začatím udalosti\nv minútach +menu.hint_record_timer Konfigurácia volieb časového nahrávania +menu.hint_record_timeshift Konfigurácia volieb časového posunu +menu.hint_record_timeshift_auto Automatické spustenie časového posunu po zmene kanálu, v sekundách +menu.hint_record_timeshift_delete Zmazanie súborov časového posunu po jeho zastavení +menu.hint_record_timeshift_pause Spustenie prehrávania časoveho posunu v pauza móde +menu.hint_record_timeshift_temp Ak NIE, časový posun spustený ako\nnejaké priame nahrávanie +menu.hint_record_zap Prepnutie na kanál nahrávania\na zobrazenie oznámenia +menu.hint_record_zap_pre_time Pri prepnutí časovačov, zmena kanála pred spustením udalosti\nv minútach +menu.hint_recording Voľby nahrávania a časového posunu\nZabezpečenie časovača, voľby zvukových pidov +menu.hint_reload_channels Znovunačítanie kanálov z pamäte +menu.hint_reload_plugins Znovunačítanie doplnkov z pamäte +menu.hint_reset Resetovanie GUI nastavení do východzích hodnôt\nKonfigurácia tunera a kanálov bez zmien +menu.hint_restore Obnova súborov z vybranej zálohy +menu.hint_rotor_swap Výmena umiestnenia motora výchd/západ \nv ovládaní motora +menu.hint_rounded_corners Kruhové vykreslovanie alebo zaoblené rohy okien +menu.hint_save_settings Uloženie všetkých nastavení do pamäte +menu.hint_saveas Uloženie GUI nastavení do súboru +menu.hint_scan_auto Prehľadanie vybraného satelitu +menu.hint_scan_autoall Prehľadanie niektorých vybraných satelitov +menu.hint_scan_autoall_select Pridá vybrané satelity do prehľadávania +menu.hint_scan_bouquet aktualizácia: pridá aktuálne bukety\nzmaž všetky:odstráni staré bukety, bez zmien: nepridá alebo nezmení +menu.hint_scan_cable Výber káblovej siete na prehľadanie +menu.hint_scan_cable_simple Káblové prehľadávanie s možnosťou\nčíslovania kanálov poskytovateľom +menu.hint_scan_commited Výber potvrdeného vstupu pre\ntento satelit +menu.hint_scan_diseqc Výber vstupu DiSEqC prepínača pre\ntento satelit +menu.hint_scan_diseqcorder Vykoná príkaz DiSEqC pre kaskádne prepínače +menu.hint_scan_diseqcrepeat DiSEqC opakovania pre kaskádne prepínače +menu.hint_scan_diseqctype Výber protokolu 'rozšírené' pre DiSEqC prepínač\n môžete použiť na nepotvrdené prepínače +menu.hint_scan_fast CanalDigitaal/TéléSAT/TV Vlaanderen vyhľadanie poskytovateľa\nPOZOR: nastavenie DiSEqC bude prepísané +menu.hint_scan_fastprov Výber poskytovateľa pre vyhľadávanie +menu.hint_scan_fasttype Výber typu rýchleho vyhľadávania +menu.hint_scan_fec Výber FEC transpondéra +menu.hint_scan_felink Výber tuneru pre vzájomné prepojenie +menu.hint_scan_femode Výber typu pripojeného tuneru +menu.hint_scan_fesetup Konfigurácia tuneru(ov) +menu.hint_scan_fetimeout Čas čakania na signál, v desatinách sekundy +menu.hint_scan_freq Zadanie kmitočtu transpondéra +menu.hint_scan_fta Pridá len Free-To-Air (nekódované) kanály +menu.hint_scan_ladirection Výber umiestnenia zemepisnej šírky +menu.hint_scan_latitude Zadanie vašej zemepisnej šírky +menu.hint_scan_lnbconfig Konfigurácia LNB parameterov pre tento satelit +menu.hint_scan_lodirection Výber umiestnenia zemepisnej dĺžky +menu.hint_scan_lofh Kmitočet oscilátora horného pásma LNB +menu.hint_scan_lofl Kmitočet oscilátora spodného pásma LNB +menu.hint_scan_lofs Kmitočet prepnutia pásma LNB +menu.hint_scan_logical Použije číslovanie predvolieb poskytovateľom +menu.hint_scan_logical_hd Ak je dostupná SD a HD verzia kanálu\nvloží HD na začiatok zoznamu +menu.hint_scan_longitude Zadanie vašej zemepisnej dĺžky +menu.hint_scan_manual Použije vybrané parametre na\nmanuálne prehľadanie transpondéra +menu.hint_scan_mod Výber modulácie transpondéra +menu.hint_scan_motor_18v Použije 18V pri pohybe motora +menu.hint_scan_motor_speed Rýchlosť pohybu motora v 1/10 stupňa\nza sekundu +menu.hint_scan_motorpos Výber čísla uloženej pozície pre\ntento satelit +menu.hint_scan_nid Vloženie network ID (dekadicky) +menu.hint_scan_nit Pridanie transpondérov zo sieťovej informácie +menu.hint_scan_pids Hľadanie a uloženie audio/video/PMT pidov +menu.hint_scan_pol Výber polarizácie transpondéra +menu.hint_scan_rate Zadanie symbolovej rýchlosti transpondéra +menu.hint_scan_reset_numbers Resetovanie existujúcich čísel kanálov\na prečíslovanie kanálov po vyhľadaní +menu.hint_scan_satadd Pridanie satelitov pre tento vstupný diel +menu.hint_scan_satellite Výber satelitu pre prehľadávanie +menu.hint_scan_satenable Použije satelit pre tento vstupný diel +menu.hint_scan_satfind Satelitný vyhľadávač: manuálny pohyb vášho motora\npre nastavenie uložených pozícií +menu.hint_scan_satfind_start Spustenie Satelitného vyhľadávača +menu.hint_scan_satscan Prehľadávanie vybraného satelitu +menu.hint_scan_satselect Výber satelitu +menu.hint_scan_satsetup Konfigurácia volieb satelitu +menu.hint_scan_savesettings Uloženie konfigurácie tunera a natavení prehľadania\nTaktiež uložiť, ak spustíte hľadanie služieb +menu.hint_scan_scantype Výber, aké typy kanálov hľadať +menu.hint_scan_setup_fe Konfigurácia volieb vybraného vstupného dielu +menu.hint_scan_start Spustenie hľadania. Môžete použiť 'EXIT' tlačítko na zastavenie +menu.hint_scan_test Otestovanie signálu z tohto transpondéra +menu.hint_scan_tpselect Výber transpondéra pre prehľadanie +menu.hint_scan_uncommited Výber nepotvrdeného vstupu pre\ntento satelit +menu.hint_scan_usals_repeat Opakuje príkazy pohybu motora USALS \nak si myslíte, že pohyb je nestabilný +menu.hint_scan_usalsall Nastavenie USALS označenia pre všetky satelity +menu.hint_scan_useusals Použije USALS pre\ntento satelit +menu.hint_scrambled_message Zobrazenie správy kódovania, pokiaľ kanál nebol dekódovaný +menu.hint_screen_setup Konfigurácia okrajov obrazu +menu.hint_screenshot_count Pokiaľ žiadny GUI na obrazovke, môže byť uložených 1-5\nsériových zosnímaní +menu.hint_screenshot_cover ZAP: Pokiaľ prehráva nahrávky, prepíše jedno\nzachytenie do zobrazenia v Prehliadači filmov +menu.hint_screenshot_dir Výber adresára pre uloženie zachyteného obrázku +menu.hint_screenshot_format Formát súboru pre uloženie zachyteného obrázku +menu.hint_screenshot_res Veľkosť zosnímania: veľkosť obrazového rozmeru aktuálneho kanála\nalebo veľkosť OSD (1280x720) +menu.hint_screenshot_scale Pre obraz+OSD zosnímanie, mierka z obrazového rozlíšenia +menu.hint_screenshot_setup Konfigurácia volieb zosnímania obrázku +menu.hint_screenshot_video Vrátane živého obrazu v zosnímanom obrázku +menu.hint_scripts Spustí zadanie +menu.hint_selected_back Zmena farby podkladu označenej položky +menu.hint_selected_text Zmena farby textu označenej položky +menu.hint_service Nastavenie tuneru, vyhľadanie služieb,\núprava buketov, aktualizácia software +menu.hint_service_scan Nastavenie tuneru, vyhľadanie služieb +menu.hint_settings Konfigurácia Neutrino-HD, sieť, zvuk, obraz, OSD a iné +menu.hint_show_mute_icon Zobrazenie ikony umlčania, ak nastavenie hlasitosťi bude 0 +menu.hint_shutdown Prepne váš príjmač do spánku\nBez potvrdzovania +menu.hint_shutdown_count Čas prepnutia príjmača do spánku\nz režimu pripravenosti +menu.hint_shutdown_rcdelay Použije režim spánku, ak tlačítko zapnutia\nje stlačené viac ako 1 sekundu +menu.hint_shutdown_real Použije režim pripravenosti\nAk sa nepoužije, tlačítko zapnutia prepne príjmač do spánku +menu.hint_sleeptimer Nastavenie časovača pre prechod vašeho príjmača\ndo režimu pripravenosti +menu.hint_soft_restart Reštartovanie Neutrino-HD bez rebootu +menu.hint_softupdate_check Kontrola dostupných aktualizácií, stiahnutie a naprogramovanie firmware +menu.hint_softupdate_check_local Výber a programovanie firmware z lokálneho súboru +menu.hint_softupdate_expert Oddelené partície z pamäte, čítanie/zapisovanie do pamäte +menu.hint_softupdate_expert_read Načítanie oddelených partícií z pamäte (U-Boot 512kB, Kernel 4MB, SystemFS 28MB) +menu.hint_softupdate_expert_write Zápis oddelených partícií do pamäte (U-Boot 512kB, Kernel 4MB, SystemFS 28MB, SystemFS+nastavenia) +menu.hint_softupdate_settings Adresár lokálnej aktualizácie a konfiguračný súbor pre nastavenie +menu.hint_start_tostandby Zostane v režime pripravenosti po spustení +menu.hint_streaminfo Aktuálna informácia kanála: pidy, signál a kvalita,\nBitrate graf +menu.hint_subchannel_pos Pozícia menu výberu sub-kanálov +menu.hint_sw_update Aktualizácia software +menu.hint_theme Výber prednastavených farebných vzhľadov\nUloženie alebo nahranie vzhľadu zo súborov +menu.hint_timeouts Konfigurácia času zmiznutia GUI okien\nv sekundách +menu.hint_timers Pridanie/Odstránenie/Upravenie plánovaného\nnahrávania, pripomienky atď. +menu.hint_timezone Výber časového pásma +menu.hint_tvmode Prepne príjmač do TV režimu +menu.hint_tvradio_switch Prepínanie medzi TV a Rádio režimom +menu.hint_vfd LED-ky predného panelu, VFD voľby +menu.hint_vfd_brightness Jas pri práci +menu.hint_vfd_brightness_setup Konfigurácia jasu zobrazovača predného panelu\npre rôzne režimy +menu.hint_vfd_brightnessdeepstandby Jas v režime spánku +menu.hint_vfd_brightnessdim Jas automatického stmavnutia +menu.hint_vfd_brightnessstandby Jas v režime pripravenosti +menu.hint_vfd_defaults Obnoví prednastavené hodnoty jasu +menu.hint_vfd_dimtime Čas automatického stmavnutia, v sekundách +menu.hint_vfd_infoline Vybrať si zobrazenie na hlavnom riadku VFD +menu.hint_vfd_statusline Vybrať si krátke zobrazenie na \nstavovom riadku VFD +menu.hint_video Obrazový výstup, rozlíšenie, formát\nPomer strán, voľby režimu rýchleho prepnutia +menu.hint_video_43mode Režim obrazovky pre 4:3 obsah na 16:9 TV +menu.hint_video_analog_mode Výber režimu analógového výstupu\npre SCART a CINCH konektory +menu.hint_video_brightness Zmena jasu obrázku +menu.hint_video_cinch_mode Výber režimu analógového výstupu pre\nkompozitný obrazový výstup +menu.hint_video_contrast Zmena kontrastu obrázku +menu.hint_video_dbdr MPEG2 rozšírené filtre +menu.hint_video_format Pomer TV obrazu +menu.hint_video_mode Obrazový režim HDMI výstupu +menu.hint_video_modes VF klávesa bude cyklovať medzi zvolenými režimami +menu.hint_video_pip Veľkosť a umiestneie obrazu v obraze +menu.hint_video_saturation Zmena farebnosti obrázku +menu.hint_video_scart_mode Výber režimu analógového výstupu pre SCART konektory +menu.hint_volume_digits Číselné zobrazenie ukazovateľa hlasitosti ZAP/VYP +menu.hint_volume_pos Výber pozície indikátora hlasitosti +menu.hint_zap_cycle Pri prepínaní kanálov zotrvať v aktuálnom bukete menu.next ďaľej (MENU ukončí) messagebox.back späť messagebox.cancel zruš @@ -643,44 +1122,74 @@ messagebox.no nie messagebox.ok ok messagebox.yes áno miscsettings.channellist Nastavenia zoznamu kanálov +miscsettings.channellist_colored_events Udalosť farebne miscsettings.channellist_epgtext_align Zarovnaj EPG text +miscsettings.colored_events_0 žiadny +miscsettings.colored_events_1 aktuálny +miscsettings.colored_events_2 nasledujúci +miscsettings.energy Energia miscsettings.epg_cache Zachytávanie EPG (dni) miscsettings.epg_cache_hint1 Ako dlho uchovávať dáta EPG v budúcnosti? miscsettings.epg_cache_hint2 Nastavenie v dňoch. miscsettings.epg_dir Adresár EPG -miscsettings.epg_extendedcache Podrobný popis programu (hodiny) +miscsettings.epg_extendedcache Podrobný popis udalosti (hodiny) miscsettings.epg_extendedcache_hint1 Ako dlho zachytávať rozšírený -miscsettings.epg_extendedcache_hint2 popis programu (nastavenie v hodinách) +miscsettings.epg_extendedcache_hint2 popis udalosti (nastavenie v hodinách) miscsettings.epg_head Nastavenia EPG -miscsettings.epg_max_events Maximum programov -miscsettings.epg_max_events_hint1 Koľko programov bude uložených? +miscsettings.epg_max_events Maximum udalostí +miscsettings.epg_max_events_hint1 Koľko udalostí bude uložených? miscsettings.epg_max_events_hint2 normálne 6000, 0 pre zrušenie limitu miscsettings.epg_old_events Odstráň neaktuálne EPG -miscsettings.epg_old_events_hint1 Ako dlho zapisovať dáta EPG po uplinutí doby? +miscsettings.epg_old_events_hint1 Ako dlho zapisovať dáta EPG po skončení? miscsettings.epg_old_events_hint2 Nastavenie v hodinách. miscsettings.epg_save Ulož/Obnov EPG po reštarte +miscsettings.epg_save_standby Ulož EPG pri soft standby miscsettings.general Hlavné nastavenia -miscsettings.head Iné nastavenia +miscsettings.head Rôzne nastavenia miscsettings.infobar Inforiadok miscsettings.infobar_casystem_display Zobrazenie CA-Systému miscsettings.infobar_casystem_mini CA mini miscsettings.infobar_casystem_mode CA mód +miscsettings.infobar_colored_events Farebné udalosti miscsettings.infobar_disp_0 bez Loga -miscsettings.infobar_disp_1 Logo 1 -miscsettings.infobar_disp_2 Logo 2 -miscsettings.infobar_disp_3 Logo 3 -miscsettings.infobar_disp_log Informačné okno +miscsettings.infobar_disp_1 Logo v číselnom boxe +miscsettings.infobar_disp_2 Logo+číslo kanála +miscsettings.infobar_disp_3 Logo+názov kanála+signál +miscsettings.infobar_disp_4 Logo+názov+číslo kanála +miscsettings.infobar_disp_5 Logo+signál +miscsettings.infobar_disp_6 Logo+číslo kanála+signál +miscsettings.infobar_disp_log len Logo +miscsettings.infobar_logo_hdd_dir Adresár loga miscsettings.infobar_sat_display Zobrazenie satelitu v stavovom riadku -miscsettings.infobar_show_var_hdd Zobrazenie zaplnenia (var a hdd) +miscsettings.infobar_show Zobraziť Info pri zmene EPG +miscsettings.infobar_show_dd_available Zobraziť DD ak je dostupné +miscsettings.infobar_show_res Zobraziť rozlišenie v stavovom riadku +miscsettings.infobar_show_res_simple jednoduché +miscsettings.infobar_show_sysfs_hdd Zaplnenie (sysFS & HDD) +miscsettings.infobar_show_tuner Zobraziť aktívny tuner +miscsettings.progressbar Ukazovateľ +miscsettings.progressbar_color Farba +miscsettings.progressbar_design Vzhľad +miscsettings.progressbar_design_0 body +miscsettings.progressbar_design_1 zvyslé pruhy +miscsettings.progressbar_design_2 vodorovné pruhy +miscsettings.progressbar_design_3 farebná škála +miscsettings.progressbar_infobar_position Pozícia +miscsettings.progressbar_infobar_position_0 štandartne +miscsettings.progressbar_infobar_position_1 pod názvom kanála +miscsettings.progressbar_infobar_position_2 úzky pod názvom kanála +miscsettings.progressbar_infobar_position_3 zúžený medzi EPG udalosťami +miscsettings.radiotext RádioText miscsettings.shutdown_count Vypnúť po -miscsettings.shutdown_count_hint1 Čas (v minútach) pre prepnutie zo stavu spánku +miscsettings.shutdown_count_hint1 Čas (v minútach) pre prepnutie zo stavu pripravenosti miscsettings.shutdown_count_hint2 do hlbokého spánku (0=vypnuté) -miscsettings.shutdown_real Umožnenie spánku +miscsettings.shutdown_real Umožnenie pripravenosti miscsettings.shutdown_real_rcdelay Oneskorenie vypnutia -miscsettings.virtual_zap_mode Virtuálne prepínanie +miscsettings.sleeptimer Čas vypnutia pri neaktivite +miscsettings.zapto_pre_time Korekcia času pred prepnutím (minuty) motorcontrol.calc_positions Prepočítaj pozície motorcontrol.disable_limit Vypni (soft) limity -motorcontrol.drive_mode mód pohybu +motorcontrol.drive_mode režim pohybu motorcontrol.drive_mode_auto Zastavenie pohybu Ručne/Auto motorcontrol.east_limit Nastav východný (soft) limit motorcontrol.enable_limit Zapni (soft) limity @@ -691,28 +1200,30 @@ motorcontrol.install_menu Inštalačné menu motorcontrol.motor_pos (a) Pozícia motora: motorcontrol.movement (b) Presun: motorcontrol.msec ms -motorcontrol.no_mode nepoužité +motorcontrol.no_mode nestará sa motorcontrol.notdef Nepoužité motorcontrol.override Nahradiť pozíciu určenú pre motorcontrol.pos_decrease Zníž pozíciu motora (a) motorcontrol.pos_increase Zvýš pozíciu motora (a) motorcontrol.ref_position Choď na referenčnú pozíciu -motorcontrol.sat_pos Pozícia satelitu (krokovací mód): +motorcontrol.sat_pos Pozícia satelitu (krokovací režim): motorcontrol.settings Nastavenia ovládania motora motorcontrol.status Stav motorcontrol.step_decrease Zníž veľkosť kroku (c) motorcontrol.step_drive Prepni spôsob Krok/Posuv (b) motorcontrol.step_east Krok/Posuv motora na Východ (b,c) motorcontrol.step_increase Zvýš veľkosť kroku (c) -motorcontrol.step_mode mód kroku +motorcontrol.step_mode režim kroku motorcontrol.step_size (c) Veľkosť kroku: motorcontrol.step_west Krok/Posuv motora na Západ (b,c) motorcontrol.stop_moving Zastav na signále (pohybovanie) motorcontrol.stop_stopped Zastav na signále (zastavenie) motorcontrol.store Ulož pozíciu motora (a) -motorcontrol.timed_mode čas pre mód kroku +motorcontrol.timed_mode čas pre režim kroku motorcontrol.user_menu Uživateľské menu motorcontrol.west_limit Nastav západný (soft) limit +moviebrowser.ask_rec_to_delete Vymazanie nahrávaných filmových stôp!\n[%s]\nSkutočne vykonať? +moviebrowser.book_add Pridať záložku moviebrowser.book_clear_all Vyčisti všetko moviebrowser.book_head Záložky moviebrowser.book_lastmoviestop Posledné prerušenie: @@ -729,11 +1240,12 @@ moviebrowser.browser_row_head Nastavenia riadku moviebrowser.browser_row_item Položka stĺpca moviebrowser.browser_row_nr Počet stĺpcov moviebrowser.browser_row_width Šírka stĺpca [%] +moviebrowser.delete_info Mazanie súborov, prosim čakajte... moviebrowser.dir Adresár moviebrowser.dir_head Doplnkové adresáre moviebrowser.edit_book Zmeň záložku moviebrowser.edit_book_name_info1 Zadanie nového názovu záložky -moviebrowser.edit_book_name_info2 názov knihy +moviebrowser.edit_book_name_info2 názov záložky moviebrowser.edit_book_pos_info1 Zadanie novej pozície moviebrowser.edit_book_pos_info2 ???? moviebrowser.edit_book_type_info1 Zadanie novej dĺžky skoku @@ -741,7 +1253,10 @@ moviebrowser.edit_book_type_info2 <0 vzad , >0 vpred, 0: nikde moviebrowser.edit_serie Zadanie názvu série moviebrowser.error_no_movies Nenájdené filmy moviebrowser.foot_filter Filtrovať: +moviebrowser.foot_focus Prepnúť okno +moviebrowser.foot_options Voľby moviebrowser.foot_play Štart filmu +moviebrowser.foot_refresh Obnoviť zoznam moviebrowser.foot_sort Triedenie: moviebrowser.head TS prehrávač filmov moviebrowser.head_filter Filtrovanie filmov podľa kategórie: @@ -830,11 +1345,11 @@ moviebrowser.use_movie_dir Použi adresár filmov moviebrowser.use_rec_dir Použi adresár nahrávania movieplayer.bookmark Záložky movieplayer.bookmarkname Názov záložky -movieplayer.bookmarkname_hint1 Vložienie názvu +movieplayer.bookmarkname_hint1 Vloženie názvu movieplayer.bookmarkname_hint2 novej záložky? -movieplayer.defplugin Štarovací PLUGIN +movieplayer.defplugin Spustenie doplnku movieplayer.fileplayback Súbor cez VLC -movieplayer.head Tvorenie filmov +movieplayer.head Prehrávač filmov movieplayer.toomanybookmarks Veľa záložiek.\nJe potrebné vymazať jednu najprv. movieplayer.tshelp1 Zastavenie movieplayer.tshelp10 asi 10 min dozadu @@ -848,20 +1363,26 @@ movieplayer.tshelp6 asi 1 min dozadu movieplayer.tshelp7 asi 1 min dopredu movieplayer.tshelp8 asi 5 min dozadu movieplayer.tshelp9 asi 5 min dopredu -movieplayer.tsplayback Prehrť TS +movieplayer.tsplayback Prehrať TS mpkey.audio Zvuková stpopa mpkey.bookmark Ulož záložku mpkey.forward Dopredu mpkey.pause Preruš mpkey.play Prehraj -mpkey.plugin Spusti PLUGIN +mpkey.plugin Spusti doplnok mpkey.rewind Dozadu mpkey.stop Zastav mpkey.time Zobrazenie času +networkmenu.apply_settings Zmeny sa aplikujú... +networkmenu.apply_settings_now Chcete teraz aplikovať zmeny? networkmenu.broadcast Vysielanie networkmenu.dhcp Prevzatie z DHCP +networkmenu.error_no_address Strata %s adresy! networkmenu.gateway Predvolená brána networkmenu.hostname Názov hostiteľa +networkmenu.hostname_hint1 vložiť hostitela +networkmenu.hostname_hint2 pre zmenu potrebný Reboot +networkmenu.inactive_network Sieť neaktívna! networkmenu.ipaddress Adresa IP networkmenu.mount NFS/CIFS/FTPFS networkmenu.nameserver DNS @@ -874,9 +1395,14 @@ networkmenu.ntpserver NTP server networkmenu.ntpserver_hint1 NTP server napr.: ntpl.ptb.de networkmenu.ntpserver_hint2 Potrebný reštart boxu alebo reštart EPG networkmenu.ntptitle Aktualizácia hodín +networkmenu.password Pre-Shared kľúč (PSK) +networkmenu.reset_settings_now Chcete obnoviť predchádzajúce nastavenia? +networkmenu.select_if Interface +networkmenu.services Sieťové služby networkmenu.setupnow Použi nastavenia siete networkmenu.setuponstartup Nastavenie siete pri štarte networkmenu.show Zobrazenie sieťového nastavenia +networkmenu.ssid Názov siete (SSID) networkmenu.test Otestovanie siete neutrino_starting Spustenie Neutrina... nfs.alreadymounted Adresár je už pripojený @@ -908,14 +1434,19 @@ nvodselector.head Výber času spustenia nvodselector.subservice Výber podkanálu options.default obnov predvolené options.fb FRAMEBUFFER +options.ntp_off DVB +options.ntp_on NTP options.null nič options.off nie options.on áno options.on.without_messages Bez správ options.serial SERIAL +parentallock.bouquetmode Predvolené bukety parentallock.changepin Zmena PIN kódu parentallock.changepin_hint1 Zadanie Vášho nového bezpečnostného PIN kódu! -parentallock.changetolocked zamknuté bukety +parentallock.changetolocked na zamknutie buketov +parentallock.defaultlocked zamknuté +parentallock.defaultunlocked odomknuté parentallock.head Zadanie bezpečnostného PIN kódu parentallock.lockage Blokovanie parentallock.lockage12 od 12 rokov @@ -927,6 +1458,39 @@ parentallock.never nikdy parentallock.onsignal pri zistení zámku parentallock.parentallock Rodičovský zámok parentallock.prompt Použitie PIN kódu +personalize.access Voľby prístupu +personalize.apply_settings Použiť zmeny? +personalize.button_auto auto +personalize.button_blue modrý +personalize.button_green zelený +personalize.button_red červený +personalize.button_yellow žltý +personalize.disabled Nepoužité +personalize.enabled Použité +personalize.head Osobné zohľadnenie +personalize.help Nápoveda +personalize.help_line1 Vytvorenie osobného zohľadnenia umožnuje prispôsobiť +personalize.help_line2 dôležité ponuky, ktoré používate. Ponuky +personalize.help_line3 môžu byť viditelné, skryté, použité, nepoužité +personalize.help_line4 alebo chránené PIN-om. +personalize.help_line5 Prístup k osobnému zohľadneniu môže byť chránený +personalize.help_line6 s PIN-om. PIN je totožný pre všetky chránené ponuky +personalize.help_line7 (neplatí pre vekové obmedzenie). +personalize.help_line8 Prednastavený PIN je: 0000 +personalize.menuconfiguration Konfigurácia menu +personalize.menudisabledhint Požadovaná ponuka je momentálne nepoužitá!\nPre aktiváciu prosímt otvorte ponuku 'Osobné zohľadnenie'\nnájdenú v ponuke 'Nastavenia'! +personalize.notprotected Nie +personalize.notvisible Skryté +personalize.pin PIN +personalize.pin_in_use PIN prístup pre personalizáciu nastavenia +personalize.pincode Osobný PIN +personalize.pinhint Zadanie osobného PIN kódu +personalize.pinprotect Áno +personalize.pinstatus vyžadujú PIN +personalize.plugins Doplnky +personalize.usermenu_preferred_buttons Priradenie preferovaných kláves +personalize.usermenu_show_cancel Zobraziť "Zrušiť" kláves +personalize.visible Viditeľné pictureviewer.defdir Východzí adresár pictureviewer.head Prehliadač obrázkov pictureviewer.help1 Spôsob menu @@ -941,16 +1505,19 @@ pictureviewer.help17 Pohyb doľava pictureviewer.help18 Pohyb doprava pictureviewer.help19 Pohyb nadol pictureviewer.help2 Zobrazenie obrázku -pictureviewer.help20 Zmena poradia triedenia -pictureviewer.help21 Znovunačítanie obrázku (bez orezania) -pictureviewer.help22 Ukončenie pictureviewer.help3 Zmena poradia triedenia +pictureviewer.help30 Mód audio prehrávača +pictureviewer.help31 Spustenia prehrávania +pictureviewer.help32 Pauzy prehrávania +pictureviewer.help33 Zastavenia prehrávania +pictureviewer.help34 Ďaľší titul +pictureviewer.help35 Predošlý titul pictureviewer.help4 Bez mierky obrázku -pictureviewer.help5 Spôsob DIASHOW +pictureviewer.help5 Mód DIASHOW pictureviewer.help6 Predchádzajúci obrázok pictureviewer.help7 Nasledujúci obrázok -pictureviewer.help8 Zmena poradia triedenia -pictureviewer.help9 Ukončenie +pictureviewer.help8 Ukončenie +pictureviewer.help9 Zobrazovací režim pictureviewer.resize.color_average rozšírené pictureviewer.resize.none žiadne pictureviewer.resize.simple jednoduché @@ -967,26 +1534,43 @@ ping.unreachable neodpovedal pinprotection.head Zadanie PIN kódu pinprotection.wrongcode Nespávny PIN kód! Skúste znova. plugins.hdd_dir Plugin adresár na HDD -plugins.result Výstup PLUGINu -progressbar.color Farba stavového riadku +plugins.result Výstup doplnku rclock.lockmsg Váš ovládač boxu bude zablokovaný.\n\nPre odblokovanie stlačte [ČERVENÝ] \na [MENU] na Vašom ovládači. rclock.menueadd Zamknutie DO rclock.title Zamknutie Diaľkového Ovládača rclock.unlockmsg Ovládač opäť funkčný. +recording.is_running Tento kanál sa nahráva. Spustiť nové nahrávanie? +recording.start Spustenie nahrávania, prosím čakajte...! +recording.stop Zastavenie nahrávania, prosím čakajte...! recordingmenu.apids Predvolené zvukové stopy recordingmenu.apids_ac3 Nahraj zvuk AC3 recordingmenu.apids_alt Nahraj ostatné zvukové stopy recordingmenu.apids_std Nahraj štandartný zvuk +recordingmenu.data_pids Dátové stopy recordingmenu.defdir Adresár nahrávania +recordingmenu.dvbsub_pids Nahraj titulky +recordingmenu.end_of_recording_epg EPG akt.udalosť +recordingmenu.end_of_recording_max max. čas nahrávania +recordingmenu.end_of_recording_name Konečný čas nahrávania recordingmenu.file disk (súbor) -recordingmenu.help Nahrávacie zariadenie:\n--------------------------------------\nserver:\npotrebný streamovaci SW na PC\n\(analóg) VCR:\npotrebný VCR (druhý SCART)\n\ndisk (súbor):\npotrebný pripojený sieťový NFS adresár\nalebo vnútorný HDD disk\nTS: použi SPTS mód(dBox2)\nPES: nepouži SPTS mód(dBox2)\n\n\nMaximálna veľkosť súboru:\n---------------------\nNFS V2: 2 GB (2048 MB)\nNFS V3: takmer nekonečné (0 MB)\nFAT: 2 GB (2048 MB)\nFAT32: 4 GB (4096 MB)\n\nPre NFS (UDP) sa doporučuje synchronizovaný zápis +recordingmenu.help Nahrávacie zariadenie:\n--------------------------------------\nserver:\npotrebný streamovaci SW na PC\n\(analóg) VCR:\npotrebný VCR (druhý SCART)\n\ndisk (súbor):\npotrebný pripojený sieťový NFS adresár\nalebo vnútorný HDD disk\nTS: použi SPTS režim(dBox2)\nPES: nepouži SPTS režim(dBox2)\n\n\nMaximálna veľkosť súboru:\n---------------------\nNFS V2: 2 GB (2048 MB)\nNFS V3: takmer nekonečné (0 MB)\nFAT: 2 GB (2048 MB)\nFAT32: 4 GB (4096 MB)\n\nPre NFS (UDP) sa doporučuje synchronizovaný zápis +recordingmenu.multimenu.ask_stop_all skutočne zastaviť všetky %d nahrávania? +recordingmenu.multimenu.info_stop_all %d z %d nahrávaní budú zastavené. +recordingmenu.multimenu.rec_akt nahrať aktuálny kanál +recordingmenu.multimenu.stop_all zastaviť všetky nahrávania +recordingmenu.multimenu.timeshift Časový posun recordingmenu.off vypnuté +recordingmenu.record_is_not_running Žiadne nahrávanie nebeží! +recordingmenu.record_is_running Nahrávanie beží! recordingmenu.save_in_channeldir Zapísanie do adresára kanálu recordingmenu.server server recordingmenu.server_mac Adresa MAC servera recordingmenu.setupnow Použi nastavenia -recordingmenu.tsdir Adresár časového posuvu +recordingmenu.slow_warn Použi pomalé nahrávacie upozornenie +recordingmenu.timeshift Časový posun +recordingmenu.tsdir Adresár časového posunu recordingmenu.vcr videomagnetofón +recordingmenu.vtxt_pid Nahraj teletext recordingmenu.zap_on_announce Informuj o zapnutí nahrávania recordtimer.announce Začatie nahrávania za pár minút. repeatblocker.hint_1 Doba spozdenia (ms) medzi dvoma stlačeniami klávesy @@ -994,9 +1578,12 @@ repeatblocker.hint_2 0 = vypnutie blokovania (červené tlačítko) reset_all Továrenské nastavenie reset_channels Zmazanie všetkych kanálov reset_confirm Skutočne? +reset_removed Zmazanie odstránených kanálov reset_settings Návrat k prednastavenému nastaveniu satsetup.auto_scan Automatické prehľadanie vybraného satelitu satsetup.auto_scan_all Automatické prehľadanie vybraných satelitov +satsetup.cable Káblové vyhľadávanie +satsetup.cable_nid Network ID satsetup.comm_input Potvrdený vstup satsetup.diseqc DiSEqC satsetup.diseqc10 DiSEqC 1.0 @@ -1005,6 +1592,7 @@ satsetup.diseqc12 DiSEqC 1.2 satsetup.diseqc_advanced Rozšírené satsetup.diseqc_com_uncom Potvrdený/Nepotvrdený satsetup.diseqc_input DiSEqC vstup +satsetup.diseqc_order Poradie DiSEqC príkazu satsetup.diseqc_uncom_com Nepotvrdený/Potvrdený satsetup.diseqcrepeat DiSEqC opakovania satsetup.extended Nastavenia DiSEqC @@ -1018,28 +1606,50 @@ satsetup.fastscan_prov_telesat TéléSAT satsetup.fastscan_prov_tvv TV Vlaanderen satsetup.fastscan_sd len SD satsetup.fastscan_type Typ prehľadania +satsetup.fe_mode Mód tuneru +satsetup.fe_mode_independent Nezávislý +satsetup.fe_mode_link_loop Prepojený +satsetup.fe_mode_link_twin Dvojitý +satsetup.fe_mode_master Hlavný +satsetup.fe_mode_unused Nepoužitý +satsetup.fe_setup Nastavenie tuneru satsetup.lofh LNB horné pásmo satsetup.lofl LNB spodné pásmo satsetup.lofs LNB prepnutie pásma +satsetup.logical_hd Preferovať HD kanály +satsetup.logical_numbers Použiť logické čísla satsetup.manual_scan Ručné prehľadávanie satsetup.minidiseqc Mini-DiSEqC satsetup.motor_pos Pozícia v motore satsetup.nodiseqc bez DiSEqC +satsetup.reset_numbers Resetovať čísla kanálu satsetup.sat_setup Nastavenia vstupov a LNB pre satelity satsetup.satellite Satelit +satsetup.select_sat Výber satelitov satsetup.smatvremote SMATV ladenie satsetup.uncomm_input Nepotvrdený vstup +satsetup.uni_settings Nastavenia Unicable +satsetup.unicable Unicable satsetup.usals_repeat Opakovanie USALS príkazu +satsetup.use_bat Použitie BAT satsetup.use_fta_flag Len nekódované satsetup.use_nit Použitie NIT satsetup.use_usals Použitie USALS +sc.empty Žiadna karta v čítačke +sc.init_failed Chyba inicializácie karty +sc.init_ok Inicializácia karty kompletná +sc.inserted Karta vložená do čítačky +sc.removed Karta odstránená z čítačky +sc.reset Reset karty +sc.timeout Vypršanie času menu karty +sc.waiting Čakanie na odpoveď karty scants.abort_body Skutočne prerušiť vyhľadávanie? scants.abort_header Prerušenie vyhľadávania scants.actcable Kábel: scants.actsatellite Satelit: scants.bouquet Bukety scants.bouquet_create vytvor nový -scants.bouquet_erase zmaz všetky +scants.bouquet_erase zmaž všetky scants.bouquet_leave bez zmien scants.bouquet_satellite Satelitný Buket scants.bouquet_update aktualizácia @@ -1049,9 +1659,11 @@ scants.finished Dokončené prehľadávanie transpondérov! scants.freqdata Kmitočet: scants.head Prehľadanie transpondéra scants.numberofdataservices Data -scants.numberofradioservices Radio +scants.numberofradioservices Rádio scants.numberoftotalservices Celkom scants.numberoftvservices TV +scants.preverences_receiving_system Preferencie +scants.preverences_scan Mód hľadania scants.provider Poskytovateľ: scants.select_tp Vyber transpondér scants.startnow Spusti prehľadávanie @@ -1060,12 +1672,23 @@ scants.transponders Transpondéry: scrambled_channel Kódovaný kanál screensetup.lowerright zelený = dolný, pravý okraj screensetup.upperleft červený = horný, ľavý oraj -servicemenu.getplugins Načítanie PLUGINov -servicemenu.getplugins_hint Načítavanie PLUGINov,\nprosím čakaj... +screenshot.count Počet +screenshot.cover Vytvor obálku pre prehliadač filmov +screenshot.defdir Umiestnenie adresára +screenshot.format Formát +screenshot.info Screenshot kláves nepoužitý +screenshot.menu Obrázok obrazovky +screenshot.osd OSD rozlíšenie +screenshot.res Rozlíšenie +screenshot.scale Pomer +screenshot.tv TV rozlíšenie +screenshot.video Obraz na pozadí +servicemenu.getplugins Načítanie doplnkov +servicemenu.getplugins_hint Načítavanie doplnkov,\nprosím čakaj... servicemenu.head Služby servicemenu.imageinfo Informácia o IMAGE servicemenu.reload Načítanie zoznamu kanálov -servicemenu.reload_hint Načítavania zoznamu kanálov,\nprosím čakaj... +servicemenu.reload_hint Načítavanie zoznamu kanálov,\nprosím čakaj... servicemenu.restart Reštart software servicemenu.restart_hint Reštartovanie, prosím čakaj... servicemenu.restart_refused_recording Neumožnené reštartovanie, prebieha nahrávanie @@ -1074,6 +1697,7 @@ servicemenu.update Aktualizácia software settings.backup Záloha nastavení settings.backup_failed Chybná záloha! settings.help Nápoveda +settings.menu_hints Zobrazí rady nápovedy settings.menu_pos Umiestnenie ponuky settings.missingoptionsconffile Nastavenia Neutrino boli aktualizované.\nNové možosti budú mať prednastavené hodnoty. settings.noconffile Nenájdené nastavenia Neutrino.\nPoužité budú prednastavené hodnoty. @@ -1090,7 +1714,9 @@ shutdowntimer.announce Vypnutie boxu za minútu.\nZrušiť vypnutie? sleeptimerbox.announce Do vypnutia ostáva minúta. sleeptimerbox.hint1 Čas do vypnutia v minútach (000=vypnuté) sleeptimerbox.hint2 Po uplinutí tohto času sa vypnem. +sleeptimerbox.hint3 Po uplinutí tohto času sa vypnem, ak sa nepoužije diaľkový ovládač sleeptimerbox.title Časovač vypnutia +sleeptimerbox.title2 Čas vypnutia pri neaktivite streaminfo.aratio Formát obrazu streaminfo.aratio_unknown Formát obrazu: neznámy streaminfo.audiotype Formát zvuku @@ -1104,20 +1730,23 @@ streaminfo.resolution Rolíšenie streaminfo.signal Parametre signálu streaming.busy Nahrávací proces aktívny.\nAk sa správa zobrazuje a nie je nič nahrávané,\nreštartujte Neutrino. streaming.dir_not_writable Do nahrávacieho adresára nie je možné nahrávať.\nNahrávanie nebude pracovať. +streaming.overflow Pretečenie buferu nahrávania, zvážte zastavenie niekterých nahrávaní +streaming.slow System/HDD je pomalý, zvážte zastavenie niekterých nahrávaní streaming.write_error Nahrávanie bolo prerušené\npretože vznikla chybu počas zapisovacieho procesu. stringinput.caps veľké/malé znaky stringinput.clear všetko zmaž subtitles.head Titulky subtitles.stop Vypnúť titulky -timer.eventrecord.msg ... Ukončené, alebo neukončené +timer.eventrecord.msg Udalosť je naplánovaná na nahrávanie.\nPre úpravu plánu otvorte časovač nahrávania. timer.eventrecord.title Plánovač nahrávania timer.eventtimed.msg Táto program je naplánovaný.\nBox bude zapnutý a \nprepnutý na tento kanál v stanovenom čase. -timer.eventtimed.title Plánovač programov +timer.eventtimed.title Plánovač udalostí timerbar.channelswitch prepni timerbar.recordevent nahraj timerlist.alarmtime Čas spustenia timerlist.apids PIDy zvuku timerlist.apids_dflt nahrávanie normálnych zvukových stôp +timerlist.ask_to_delete Zmazanie stôp časovača aktuálneho nahrávania!\nSkutočne vykonať? timerlist.bouquetselect Výber buketu timerlist.channel Kanál timerlist.channelselect Výber kanálu @@ -1125,14 +1754,14 @@ timerlist.delete zmaž timerlist.menumodify upravenie časovača timerlist.menunew nový plán timerlist.message Správa -timerlist.moderadio Radiové kanály +timerlist.moderadio Rádiové kanály timerlist.modeselect Výber typu timerlist.modetv Televízne kanály timerlist.modify uprav timerlist.name Časovač timerlist.new nový plán timerlist.overlapping_timer Konflikt časovača. Vytvoriť plán aj tak? -timerlist.plugin PLUGIN +timerlist.plugin Doplnky timerlist.program.unknown Neznámy program timerlist.recording_dir Adresár nahrávania timerlist.reload obnov @@ -1162,7 +1791,7 @@ timerlist.standby.off zo stavu pripravenosti timerlist.standby.on do stavu pripravenosti timerlist.stoptime Čas vypnutia timerlist.type Typ časovača -timerlist.type.execplugin spustenie PLUGINu +timerlist.type.execplugin spustenie doplnku timerlist.type.nextprogram Nasledujúci program timerlist.type.record nahrávanie timerlist.type.remind pripomenutie @@ -1187,8 +1816,13 @@ timing.filebrowser Prehliadač súborov timing.hint_1 Čas zobrazenia OSD timing.hint_2 na obrazovke TV (v sekundách) timing.infobar Stavový riadok +timing.infobar_movieplayer Stavový riadok (filmový mód) +timing.infobar_radio Stavový riadok (rádio mód) timing.menu Menu timing.numericzap Prepínanie číslami +unicable.lnb Vstup Unicable +unicable.qrg Kmitočet Unicable +unicable.scr SCR Unicable upnpbrowser.head UPnP prehliadač upnpbrowser.noservers Nenájdený UPnP server upnpbrowser.rescan Znova hľadať @@ -1202,40 +1836,50 @@ usermenu.item_bar --- Lemovanie --- usermenu.item_epg_misc Funkcie EPG usermenu.item_none Nič usermenu.item_vtxt Teletext +usermenu.msg_info_is_empty Nenadefinovaný názov pre toto menu!\nPoužije sa prednastavený názov:\n +usermenu.msg_warning_name Máte viac ako jednu položku vytvorené pro toto menu,\nale žiadny definovaný nový názov pro toto menu.\nDoporučujem vytvoriť nový názov! +usermenu.msg_warning_no_items Nedefinované žiadne položky!\nZresetovaný názov menu! usermenu.name Názov -video_mode_ok Video mód pracuje správne? +video_mode_ok Video režim pracuje správne? videomenu.43mode Zobrazenie formátu 4:3 +videomenu.analog_auto AUTO +videomenu.analog_cvbs CVBS +videomenu.analog_hd_rgb RGB (HD) videomenu.analog_hd_rgb_cinch RGB na CINCH (HD) videomenu.analog_hd_rgb_scart RGB na SCART (HD) +videomenu.analog_hd_yprpb YPbPr (HD) videomenu.analog_hd_yprpb_cinch YPbPr na CINCH (HD) videomenu.analog_hd_yprpb_scart YPbPr na SCART (HD) videomenu.analog_mode Analógový výstup +videomenu.analog_sd_rgb RGB (SD) videomenu.analog_sd_rgb_cinch RGB na CINCH (SD) videomenu.analog_sd_rgb_scart RGB na SCART (SD) +videomenu.analog_sd_yprpb YPbPr (SD) videomenu.analog_sd_yprpb_cinch YPbPr na CINCH (SD) videomenu.analog_sd_yprpb_scart YPbPr na SCART (SD) videomenu.auto Automaticky videomenu.brightness Jas videomenu.cinch CINCH videomenu.contrast Kontrast -videomenu.csync korekcia synchronizácie videomenu.dbdr MPEG2 deblock/dering videomenu.dbdr_both deblock+dering videomenu.dbdr_deblock deblock videomenu.dbdr_none nič -videomenu.enabled_modes Nastavenie módov pre VF klávesu +videomenu.enabled_modes Nastavenie režimov pre VF klávesu videomenu.fullscreen Celý obraz videomenu.hdmi_cec Uživateľské ovládanie (HDMI-CEC) videomenu.hdmi_cec_mode Mód HDMI-CEC videomenu.hdmi_cec_mode_off vyp videomenu.hdmi_cec_mode_recorder ako Rekordér videomenu.hdmi_cec_mode_tuner ako Tuner -videomenu.hdmi_cec_standby Použiť CEC v pohotovosti +videomenu.hdmi_cec_standby Použiť CEC v pripravenosti videomenu.hdmi_cec_view_on Použiť CEC pri sledovaní videomenu.hue Nasýtenie videomenu.letterbox Letterbox videomenu.panscan Pan&Scan videomenu.panscan2 14:9 Pan&Scan +videomenu.pip PiP nastavenie +videomenu.pip_error Chybné spustenie PiP videomenu.saturation Farebnosť videomenu.scart SCART videomenu.screensetup Nastavenie zobrazenia OSD @@ -1248,12 +1892,20 @@ videomenu.videoformat Formát obrazu videomenu.videoformat_149 14:9 videomenu.videoformat_169 16:9 videomenu.videoformat_43 4:3 -videomenu.videomode Obrazový mód +videomenu.videomode Obrazový režim +wizard.initial_settings Najdené ininicializačné nastavenia +wizard.install_settings Chcete inštalovať kanály pre Astra 19.2°E? wizard.welcome_head Vitajte v Sprievodcovi nastavenia -wizard.welcome_text Ďaľšie kroky prevedú základnú inštaláciu tohto zariadenia.\nChceš pokračovať?\nBlahoželáme k zakúpeniu Coolstream. Nasledujúce \nkroky ťa prevedú počiatočnou inštaláciou nastavenia prístroja.\nPrajeme ti veľa radosti s týmto príjmačom!\nĎaľší krok ? +wizard.welcome_text Ďaľšie kroky prevedú základnú inštaláciu tohto zariadenia.\nChceš pokračovať?\nBlahoželáme k zakúpeniu CST. Nasledujúce \nkroky ťa prevedú počiatočnou inštaláciou nastavenia prístroja.\nPrajeme ti veľa radosti s týmto príjmačom!\nĎaľší krok ? +word.from z zapit.scantype Vyhľadávanie kanálov zapit.scantype.all všetkých -zapit.scantype.radio len Radio +zapit.scantype.radio len Rádio zapit.scantype.tv len TV -zapit.scantype.tvradio TV a Radio +zapit.scantype.tvradio TV a Rádio +zapitsetup.head Nastavenia kanála spustenia +zapitsetup.info Kanál pri spustení +zapitsetup.last_radio Rádiový kanál +zapitsetup.last_tv TV kanál +zapitsetup.last_use posledný sledovaný kanál zaptotimer.announce Minúta do zmeny kanálu. diff --git a/lib/libconfigfile/configfile.cpp b/lib/libconfigfile/configfile.cpp index d7713ab2e..354d5ec97 100644 --- a/lib/libconfigfile/configfile.cpp +++ b/lib/libconfigfile/configfile.cpp @@ -394,7 +394,7 @@ void CConfigFile::setString(const std::string & key, const std::string & val) unknownKeyQueryedFlag = tmpUnknownKeyQueryedFlag; } -void CConfigFile::setInt32Vector(const std::string & key, const std::vector vec) +void CConfigFile::setInt32Vector(const std::string & key, const std::vector &vec) { bool tmpUnknownKeyQueryedFlag = unknownKeyQueryedFlag; unknownKeyQueryedFlag = false; @@ -419,7 +419,7 @@ void CConfigFile::setInt32Vector(const std::string & key, const std::vector vec) +void CConfigFile::setStringVector(const std::string & key, const std::vector &vec) { bool tmpUnknownKeyQueryedFlag = unknownKeyQueryedFlag; unknownKeyQueryedFlag = false; diff --git a/lib/libconfigfile/configfile.h b/lib/libconfigfile/configfile.h index 9d2c39853..5a247a556 100644 --- a/lib/libconfigfile/configfile.h +++ b/lib/libconfigfile/configfile.h @@ -91,10 +91,10 @@ class CConfigFile // vectors // std::vector getStringVector(const std::string & key); - void setStringVector(const std::string & key, const std::vector vec); + void setStringVector(const std::string & key, const std::vector &vec); std::vector getInt32Vector(const std::string & key); - void setInt32Vector(const std::string & key, const std::vector vec); + void setInt32Vector(const std::string & key, const std::vector &vec); // // flags diff --git a/lib/libcoolstream/ca_cs.h b/lib/libcoolstream/ca_cs.h index b2aa613ca..59bbd2866 100644 --- a/lib/libcoolstream/ca_cs.h +++ b/lib/libcoolstream/ca_cs.h @@ -117,13 +117,13 @@ private: /// Thread method virtual void run(void); public: - /// Returns the number of CI slots - u32 GetNumberCISlots(void); - /// Returns the number of Smartcard slots - u32 GetNumberSmartCardSlots(void); + /// Returns the number of CA slots (CI+SC, CI, SC) + u32 GetNumberSlots(enum CA_SLOT_TYPE SlotType = CA_SLOT_TYPE_ALL); + u32 GetNumberCISlots(void) { return GetNumberSlots(CA_SLOT_TYPE_CI); } + u32 GetNumberSmartCardSlots(void) { return GetNumberSlots(CA_SLOT_TYPE_SMARTCARD); } /// Singleton static cCA *GetInstance(void); - /// Send PMT to a individual or to all available modules + /// Send PMT to a individual or to all available modules (DEPRECATED) bool SendPMT(int Unit, unsigned char *Data, int Len, enum CA_SLOT_TYPE SlotType = CA_SLOT_TYPE_ALL); /// Sends a message to the CA thread bool SendMessage(const CA_MESSAGE *Msg); @@ -154,9 +154,9 @@ public: /// Notify the module we closed the menu void MenuClose(enum CA_SLOT_TYPE, u32 Slot); /// Get the supported CAIDs - int GetCAIDS(CaIdVector & Caids); + int GetCAIDS(CaIdVector & Caids, enum CA_SLOT_TYPE SlotType = CA_SLOT_TYPE_ALL); /// Send a CA-PMT object and Raw unparsed PMT to the CA layer - bool SendCAPMT(u64 Source, u8 DemuxSource, u8 DemuxMask, const unsigned char *CAPMT, u32 CAPMTLen, const unsigned char *RawPMT, u32 RawPMTLen); + bool SendCAPMT(u64 Source, u8 DemuxSource, u8 DemuxMask, const unsigned char *CAPMT, u32 CAPMTLen, const unsigned char *RawPMT, u32 RawPMTLen, enum CA_SLOT_TYPE SlotType = CA_SLOT_TYPE_ALL); /// Virtual destructor virtual ~cCA(); }; diff --git a/lib/libcoolstream/control.h b/lib/libcoolstream/control.h index cc41c6c72..cfce476e6 100644 --- a/lib/libcoolstream/control.h +++ b/lib/libcoolstream/control.h @@ -63,5 +63,13 @@ typedef struct cs_control_data { #define IOC_CONTROL_TSROUTE_SET_HSDP_CONFIG _IOW(CS_CONTROL_MAGIC, 30, tsrouter_tsp_config_t *) #define IOC_CONTROL_TSROUTE_GET_TSP_CONFIG _IOR(CS_CONTROL_MAGIC, 31, tsrouter_hsdp_config_t *) #define IOC_CONTROL_TSROUTE_SET_TSP_CONFIG _IOW(CS_CONTROL_MAGIC, 32, tsrouter_tsp_config_t *) +/* Gets the current TS port frequency of the CI */ +#define IOC_CONTROL_TSROUTE_GET_CI_SPEED _IOR(CS_CONTROL_MAGIC, 33, unsigned int *) +/* Sets the current TS port frequency of the CI in Hz (max=12Mhz) */ +#define IOC_CONTROL_TSROUTE_SET_CI_SPEED _IOW(CS_CONTROL_MAGIC, 34, unsigned int) +/* Gets the current TS port base PLL of the CI */ +#define IOC_CONTROL_TSROUTE_GET_CI_PLL _IOR(CS_CONTROL_MAGIC, 35, unsigned int *) +/* Sets the current TS port base PLL of the CI */ +#define IOC_CONTROL_TSROUTE_SET_CI_PLL _IOW(CS_CONTROL_MAGIC, 36, unsigned int) #endif /* __CONTROL_H */ diff --git a/lib/libcoolstream/cs_api.h b/lib/libcoolstream/cs_api.h index 98c7430c0..f778e149b 100644 --- a/lib/libcoolstream/cs_api.h +++ b/lib/libcoolstream/cs_api.h @@ -5,12 +5,15 @@ /* */ /* (C) 2010 CoolStream International */ /* */ +/* $Id:: $ */ /*******************************************************************************/ #ifndef __CS_API_H_ #define __CS_API_H_ #include #include +#include +#include typedef void (*cs_messenger) (unsigned int msg, unsigned int data); @@ -58,8 +61,12 @@ void cs_log_module_message(enum CS_LOG_MODULE module, const char *fmt, ...); // TS Routing unsigned int cs_get_ts_output(void); int cs_set_ts_output(unsigned int port); +int cs_set_ts_ci_clock(unsigned int speed); +int cs_get_ts_ci_clock(unsigned int *speed); int cs_set_ts_config(unsigned int port, tsrouter_hsdp_config_t *hsdp_config); int cs_get_ts_config(unsigned int port, tsrouter_hsdp_config_t *hsdp_config); +int cs_set_tsp_config(unsigned int port, tsrouter_tsp_config_t *tsp_config); +int cs_get_tsp_config(unsigned int port, tsrouter_tsp_config_t *tsp_config); // Serial nr and revision accessors unsigned long long cs_get_serial(void); diff --git a/lib/libcoolstream/cs_frontpanel.h b/lib/libcoolstream/cs_frontpanel.h new file mode 100644 index 000000000..97c0f577a --- /dev/null +++ b/lib/libcoolstream/cs_frontpanel.h @@ -0,0 +1,116 @@ +/* + * Driver for the Coolstream Frontpanel - public definititons. + * + * Copyright (C) 2008 - 2012 Coolstream International Limited + */ + +#ifndef __CS_FRONTPANEL_H__ +#define __CS_FRONTPANEL_H__ + +#define CS_FP_DISPLAY_DEVICE_NAME "cs_display" +#define CS_FP_DISPLAY_DEVICE_MAJOR 238 + +typedef enum { + /* for all frontpanels with */ + FP_ICON_NONE = 0x00000000, + FP_ICON_BAR8 = 0x00000004, + FP_ICON_BAR7 = 0x00000008, + FP_ICON_BAR6 = 0x00000010, + FP_ICON_BAR5 = 0x00000020, + FP_ICON_BAR4 = 0x00000040, + FP_ICON_BAR3 = 0x00000080, + FP_ICON_BAR2 = 0x00000100, + FP_ICON_BAR1 = 0x00000200, + FP_ICON_FRAME = 0x00000400, + FP_ICON_MUTE = 0x00001000, + FP_ICON_DOLBY = 0x00002000, + FP_ICON_TV = 0x00020000, + FP_ICON_RADIO = 0x00040000, + FP_ICON_HD = 0x01000001, + FP_ICON_1080P = 0x02000001, + FP_ICON_1080I = 0x03000001, + FP_ICON_720P = 0x04000001, + FP_ICON_480P = 0x05000001, + FP_ICON_480I = 0x06000001, + FP_ICON_MP3 = 0x08000001, + FP_ICON_PLAY = 0x09000001, + FP_ICON_PAUSE = 0x0A000001, + FP_ICON_CAM1 = 0x0B000001, /* record */ + /* only for frontpanels with VFD */ + FP_ICON_HDD = 0x00000800, + FP_ICON_POWER = 0x00004000, + FP_ICON_TIMESHIFT = 0x00008000, + FP_ICON_SIGNAL = 0x00010000, + FP_ICON_USB = 0x07000001, + FP_ICON_COL1 = 0x09000002, + FP_ICON_COL2 = 0x0B000002, + FP_ICON_CAM2 = 0x0C000001, + /* only for frontpanels with OLED */ + FP_ICON_SD = 0x01000002, + FP_ICON_576P = 0x02000002, + FP_ICON_576I = 0x03000002, + FP_ICON_MP2 = 0x07000002, + FP_ICON_DTS = 0x08000002 +} fp_icon; + +typedef enum { + FP_FLAG_NONE = 0x00, + FP_FLAG_SCROLL_ON = 0x01, /* switch scrolling on */ + FP_FLAG_SCROLL_LTR = 0x02, /* scroll from left to right instead of default right to left direction (i.e. for arabic text) */ + FP_FLAG_SCROLL_SIO = 0x04, /* start/stop scrolling with empty screen (scroll in/out) */ + FP_FLAG_SCROLL_DELAY = 0x08, /* delayed scroll start */ + FP_FLAG_ALIGN_LEFT = 0x10, /* align the text in display from the left (default) */ + FP_FLAG_ALIGN_RIGHT = 0x20, /* align the text in display from the right (arabic) */ + FP_FLAG_UPDATE_SCROLL_POS = 0x40, /* update the current position for scrolling */ +} fp_flag; + +typedef struct { + unsigned char brightness; + unsigned char flags; + unsigned char current_hour; + unsigned char current_minute; + unsigned char timer_minutes_hi; + unsigned char timer_minutes_lo; +} fp_standby_data_t; + +typedef enum { + FP_LED_1_ON = 0x81, + FP_LED_2_ON = 0x82, + FP_LED_3_ON = 0x83, + FP_LED_1_OFF = 0x01, + FP_LED_2_OFF = 0x02, + FP_LED_3_OFF = 0x03, +} fp_led_ctrl_t; + +typedef struct { + unsigned char source; + unsigned char time_minutes_hi; + unsigned char time_minutes_lo; +} fp_wakeup_data_t; + +typedef enum { + FP_WAKEUP_SOURCE_TIMER = 0x01, + FP_WAKEUP_SOURCE_BUTTON = 0x02, + FP_WAKEUP_SOURCE_REMOTE = 0x04, + FP_WAKEUP_SOURCE_PWLOST = 0x7F, + FP_WAKEUP_SOURCE_POWER = 0xFF +} fp_wakeup_source; + +typedef struct { + unsigned short addr; + unsigned short cmd; +} fp_standby_cmd_data_t; + +#define IOC_FP_SET_BRIGHT _IOW(0xDE, 1, unsigned char) /* set the display brighness in 16 steps between 0 to 15 */ +#define IOC_FP_CLEAR_ALL _IOW(0xDE, 2, unsigned int) /* clear the entire display (both text and icons) */ +#define IOC_FP_SET_TEXT _IOW(0xDE, 3, char*) /* set a text to be displayed on the display. If arg == NULL, the text is cleared */ +#define IOC_FP_SET_ICON _IOW(0xDE, 4, fp_icon) /* switch the given icon on */ +#define IOC_FP_CLEAR_ICON _IOW(0xDE, 5, fp_icon) /* switch the given icon off */ +#define IOC_FP_SET_OUTPUT _IOW(0xDE, 6, unsigned char) /* switch the given output on (supported by the controller, but not used in the hardware) */ +#define IOC_FP_CLEAR_OUTPUT _IOW(0xDE, 7, unsigned char) /* switch the given output off (supported by the controller, but not used in the hardware) */ +#define IOC_FP_STANDBY _IOW(0xDE, 8, fp_standby_data_t *)/* switch the vfd/psu in standby (NEO and above only) */ +#define IOC_FP_LED_CTRL _IOW(0xDE, 9, unsigned char) /* control the Frontpanles LED's (NEO and above only) */ +#define IOC_FP_GET_WAKEUP _IOW(0xDE, 10, fp_wakeup_data_t *) /* get wakeup data (NEO and above only) */ +#define IOC_FP_STANDBY_CMD _IOW(0xDE, 11, fp_standby_cmd_data_t *) /* get wakeup data (NEO and above only) */ + +#endif /* __CS_FRONTPANEL_H__ */ diff --git a/lib/libcoolstream/cs_types.h b/lib/libcoolstream/cs_types.h index a0e17abd4..fae6d086d 100644 --- a/lib/libcoolstream/cs_types.h +++ b/lib/libcoolstream/cs_types.h @@ -1,3 +1,12 @@ +/*******************************************************************************/ +/* */ +/* libcoolstream/cs_types.h */ +/* Public header file for CoolStream Public API */ +/* */ +/* (C) 2010 CoolStream International */ +/* */ +/* $Id:: $ */ +/*******************************************************************************/ #ifndef __CS_TYPES_H_ #define __CS_TYPES_H_ diff --git a/lib/libcoolstream/cs_vfd.h b/lib/libcoolstream/cs_vfd.h index 13b4b933d..4da58296b 100755 --- a/lib/libcoolstream/cs_vfd.h +++ b/lib/libcoolstream/cs_vfd.h @@ -8,46 +8,54 @@ #ifndef __CS_VFD__ #define __CS_VFD__ -typedef enum -{ - VFD_ICON_BAR8 = 0x00000004, - VFD_ICON_BAR7 = 0x00000008, - VFD_ICON_BAR6 = 0x00000010, - VFD_ICON_BAR5 = 0x00000020, - VFD_ICON_BAR4 = 0x00000040, - VFD_ICON_BAR3 = 0x00000080, - VFD_ICON_BAR2 = 0x00000100, - VFD_ICON_BAR1 = 0x00000200, - VFD_ICON_FRAME = 0x00000400, - VFD_ICON_HDD = 0x00000800, - VFD_ICON_MUTE = 0x00001000, - VFD_ICON_DOLBY = 0x00002000, - VFD_ICON_POWER = 0x00004000, - VFD_ICON_TIMESHIFT = 0x00008000, - VFD_ICON_SIGNAL = 0x00010000, - VFD_ICON_TV = 0x00020000, - VFD_ICON_RADIO = 0x00040000, - VFD_ICON_HD = 0x01000001, - VFD_ICON_1080P = 0x02000001, - VFD_ICON_1080I = 0x03000001, - VFD_ICON_720P = 0x04000001, - VFD_ICON_480P = 0x05000001, - VFD_ICON_480I = 0x06000001, - VFD_ICON_USB = 0x07000001, - VFD_ICON_MP3 = 0x08000001, - VFD_ICON_PLAY = 0x09000001, - VFD_ICON_COL1 = 0x09000002, - VFD_ICON_PAUSE = 0x0A000001, - VFD_ICON_CAM1 = 0x0B000001, - VFD_ICON_COL2 = 0x0B000002, - VFD_ICON_CAM2 = 0x0C000001 +typedef enum { + /* for all frontpanels with VFD or OLED */ + VFD_ICON_NONE = 0x00000000, + VFD_ICON_BAR8 = 0x00000004, + VFD_ICON_BAR7 = 0x00000008, + VFD_ICON_BAR6 = 0x00000010, + VFD_ICON_BAR5 = 0x00000020, + VFD_ICON_BAR4 = 0x00000040, + VFD_ICON_BAR3 = 0x00000080, + VFD_ICON_BAR2 = 0x00000100, + VFD_ICON_BAR1 = 0x00000200, + VFD_ICON_FRAME = 0x00000400, + VFD_ICON_MUTE = 0x00001000, + VFD_ICON_DOLBY = 0x00002000, + VFD_ICON_TV = 0x00020000, + VFD_ICON_RADIO = 0x00040000, + VFD_ICON_HD = 0x01000001, + VFD_ICON_1080P = 0x02000001, + VFD_ICON_1080I = 0x03000001, + VFD_ICON_720P = 0x04000001, + VFD_ICON_480P = 0x05000001, + VFD_ICON_480I = 0x06000001, + VFD_ICON_MP3 = 0x08000001, + VFD_ICON_PLAY = 0x09000001, + VFD_ICON_PAUSE = 0x0A000001, + VFD_ICON_CAM1 = 0x0B000001, + /* only for frontpanels with VFD */ + VFD_ICON_HDD = 0x00000800, + VFD_ICON_POWER = 0x00004000, + VFD_ICON_TIMESHIFT = 0x00008000, + VFD_ICON_SIGNAL = 0x00010000, + VFD_ICON_USB = 0x07000001, + VFD_ICON_COL1 = 0x09000002, + VFD_ICON_COL2 = 0x0B000002, + VFD_ICON_CAM2 = 0x0C000001, + /* only for frontpanels with OLED */ + VFD_ICON_SD = 0x01000002, + VFD_ICON_576P = 0x02000002, + VFD_ICON_576I = 0x03000002, + VFD_ICON_MP2 = 0x07000002, + VFD_ICON_DTS = 0x08000002 } vfd_icon; typedef enum { VFD_FLAG_NONE = 0x00, VFD_FLAG_SCROLL_ON = 0x01, /* switch scrolling on */ - VFD_FLAG_SCROLL_LTR = 0x02, /* scroll from left to rightinstead of default right to left direction (i.e. for arabic text) */ + VFD_FLAG_SCROLL_LTR = 0x02, /* scroll from left to right instead of default right to left direction (i.e. for arabic text) */ VFD_FLAG_SCROLL_SIO = 0x04, /* start/stop scrolling with empty screen (scroll in/out) */ VFD_FLAG_SCROLL_DELAY = 0x08, /* delayed scroll start */ VFD_FLAG_ALIGN_LEFT = 0x10, /* align the text in display from the left (default) */ @@ -79,8 +87,7 @@ typedef struct { unsigned char time_minutes_lo; } wakeup_data_t; -typedef enum -{ +typedef enum { WAKEUP_SOURCE_TIMER = 0x01, WAKEUP_SOURCE_BUTTON = 0x02, WAKEUP_SOURCE_REMOTE = 0x04, @@ -88,6 +95,11 @@ typedef enum WAKEUP_SOURCE_POWER = 0xFF } wakeup_source; +typedef struct { + unsigned short addr; + unsigned short cmd; +} standbycmd_data_t; + #define IOC_VFD_SET_BRIGHT _IOW(0xDE, 1, unsigned char) /* set the display brighness in 16 steps between 0 to 15 */ #define IOC_VFD_CLEAR_ALL _IOW(0xDE, 2, unsigned int) /* clear the entire display (both text and icons) */ #define IOC_VFD_SET_TEXT _IOW(0xDE, 3, char*) /* set a text to be displayed on the display. If arg == NULL, the text is cleared */ @@ -98,5 +110,6 @@ typedef enum #define IOC_VFD_STANDBY _IOW(0xDE, 8, standby_data_t *)/* switch the vfd/psu in standby (NEO and above only) */ #define IOC_VFD_LED_CTRL _IOW(0xDE, 9, unsigned char) /* control the Frontpanles LED's (NEO and above only) */ #define IOC_VFD_GET_WAKEUP _IOW(0xDE, 10,wakeup_data_t *) /* get wakeup data (NEO and above only) */ +#define IOC_VFD_STANDBY_CMD _IOW(0xDE, 11,standbycmd_data_t *) /* get wakeup data (NEO and above only) */ #endif /* __CS_VFD__ */ diff --git a/lib/libcoolstream/mmi.h b/lib/libcoolstream/mmi.h index 76ff99279..96266ea44 100644 --- a/lib/libcoolstream/mmi.h +++ b/lib/libcoolstream/mmi.h @@ -1,3 +1,12 @@ +/*******************************************************************************/ +/* */ +/* libcoolstream/mmi.h */ +/* Public header file for CoolStream Public CA MMI API */ +/* */ +/* (C) 2010 CoolStream International */ +/* */ +/* $Id:: $ */ +/*******************************************************************************/ #ifndef __MMI_H_ #define __MMI_H_ @@ -5,6 +14,28 @@ #define MAX_MMI_TEXT_LEN 255 #define MAX_MMI_CHOICE_TEXT_LEN 255 +typedef enum { + MMI_TOP_MENU_SUBS = 1, + MMI_TOP_MENU_EVENTS, + MMI_TOP_MENU_TOKENS, + MMI_TOP_MENU_PIN, + MMI_TOP_MENU_MATURE, + MMI_TOP_MENU_ABOUT +} MMI_MENU_CURRENT; + +typedef enum { + MMI_MENU_LEVEL_MAIN = 0, + MMI_MENU_LEVEL_MATURE, + MMI_MENU_LEVEL_ASK_PIN_MATURE +} MMI_MENU_LEVEL; + +typedef enum { + MMI_PIN_LEVEL_ASK_OLD = 0, + MMI_PIN_LEVEL_CHECK_CURRENT, + MMI_PIN_LEVEL_ASK_REPEAT, + MMI_PIN_LEVEL_CHECK_AND_CHANGE +} MMI_PIN_LEVEL; + typedef struct { int choice_nb; char title[MAX_MMI_TEXT_LEN]; diff --git a/lib/libcoolstream/tsrouter.h b/lib/libcoolstream/tsrouter.h index 672d6721d..bab3899ca 100644 --- a/lib/libcoolstream/tsrouter.h +++ b/lib/libcoolstream/tsrouter.h @@ -1,6 +1,20 @@ +/*******************************************************************************/ +/* */ +/* control\tsrouter.h */ +/* Public header file for CoolStream Kernel TS Router API */ +/* */ +/* (C) 2010 CoolStream International */ +/* */ +/* $Id:: $ */ +/*******************************************************************************/ #ifndef __TSROUTER_H #define __TSROUTER_H +#define HSDP_CI_DATA_OUT 2 +#define HSDP_CI_DATA_IN 3 +#define HSDP_SAT_PORT 4 +#define HSDP_CAB_PORT 5 + typedef struct _tsrouter_hsdp_config { u8 port; u32 port_ctrl; @@ -17,6 +31,7 @@ typedef struct _tsrouter_tsp_config { u32 mux; } tsrouter_tsp_config_t; +#ifdef __KERNEL__ extern int cs_tsrouter_init(void); extern void cs_tsrouter_exit(void); @@ -29,4 +44,11 @@ extern void cs_tsx_tsp_get_port_config(tsrouter_tsp_config_t *conf); extern void cs_tsx_hsdp_set_port_config(const tsrouter_hsdp_config_t *conf); extern void cs_tsx_tsp_set_port_config(const tsrouter_tsp_config_t *conf); +extern void cs_tsx_hsdp_get_port_pll(unsigned int port, unsigned int *pll_index); +extern void cs_tsx_hsdp_set_port_pll(unsigned int port, unsigned int pll_index); + +extern void cs_tsx_hsdp_get_port_speed(unsigned int port, unsigned int *speed); +extern void cs_tsx_hsdp_set_port_speed(unsigned int port, unsigned int speed); +#endif + #endif /* __TSROUTER_H */ diff --git a/lib/libcoolstream/video_cs.h b/lib/libcoolstream/video_cs.h index 11ede4433..f858d0793 100644 --- a/lib/libcoolstream/video_cs.h +++ b/lib/libcoolstream/video_cs.h @@ -11,6 +11,7 @@ #include #include +#include #include "cs_types.h" @@ -154,12 +155,14 @@ private: analog_mode_t analog_mode_cinch; analog_mode_t analog_mode_scart; vfd_icon mode_icon; + unsigned int unit; + cDemux *demux; // int SelectAutoFormat(); void ScalePic(); public: /* constructor & destructor */ - cVideo(int mode, void * hChannel, void * hBuffer); + cVideo(int mode, void * hChannel, void * hBuffer, unsigned int Unit = 0); ~cVideo(void); void * GetDRM(void); @@ -233,6 +236,7 @@ public: int StartVBI(unsigned short pid); int StopVBI(void); bool GetScreenImage(unsigned char * &data, int &xres, int &yres, bool get_video = true, bool get_osd = false, bool scale_to_video = false); + void SetDemux(cDemux *Demux); }; #endif // __VIDEO_CS_H_ diff --git a/lib/libcoolstream2/audio_cs.h b/lib/libcoolstream2/audio_cs.h new file mode 100644 index 000000000..a5aa5d866 --- /dev/null +++ b/lib/libcoolstream2/audio_cs.h @@ -0,0 +1,167 @@ +/*******************************************************************************/ +/* */ +/* libcoolstream/audio_cs.h */ +/* Public header file for audio API */ +/* */ +/* (C) 2008 CoolStream International */ +/* */ +/* $Id:: $ */ +/*******************************************************************************/ +#ifndef __AUDIO_CS_H_ +#define __AUDIO_CS_H_ + +#ifndef CS_AUDIO_PDATA +#define CS_AUDIO_PDATA void +#endif + +#include "cs_types.h" + +typedef enum { + AUDIO_SYNC_WITH_PTS, + AUDIO_NO_SYNC, + AUDIO_SYNC_AUDIO_MASTER +} AUDIO_SYNC_MODE; + +typedef enum { + AUDIO_FMT_AUTO = 0, + AUDIO_FMT_MPEG, + AUDIO_FMT_MP3, + AUDIO_FMT_DOLBY_DIGITAL, + AUDIO_FMT_BASIC = AUDIO_FMT_DOLBY_DIGITAL, + AUDIO_FMT_AAC, + AUDIO_FMT_AAC_PLUS, + AUDIO_FMT_DD_PLUS, + AUDIO_FMT_DTS, + AUDIO_FMT_AVS, + AUDIO_FMT_MLP, + AUDIO_FMT_WMA, + AUDIO_FMT_ADVANCED = AUDIO_FMT_MLP +} AUDIO_FORMAT; + +typedef enum { + HDMI_ENCODED_OFF, + HDMI_ENCODED_AUTO, + HDMI_ENCODED_FORCED +} HDMI_ENCODED_MODE; + +typedef enum +{ + HDMI_AUDIO_FMT_LPCM = 0x1, + HDMI_AUDIO_FMT_AC3 , + HDMI_AUDIO_FMT_MPEG1 , + HDMI_AUDIO_FMT_MP3 , + HDMI_AUDIO_FMT_MPEG2 , + HDMI_AUDIO_FMT_AAC , + HDMI_AUDIO_FMT_DTS , + HDMI_AUDIO_FMT_ATRAC +} HDMI_AUDIO_FORMAT; + +#define CS_MAX_AUDIO_DECODERS 1 +#define CS_MAX_AUDIO_FORMATS 10 + +typedef struct cs_audio_format { + HDMI_AUDIO_FORMAT format; + unsigned int max_channels; +} cs_audio_format_t; + +typedef struct cs_audio_caps { + unsigned char count; + cs_audio_format_t formats[CS_MAX_AUDIO_FORMATS]; +} cs_audio_caps_t; + +class cDemux; +class cVideo; + +class cAudio { +private: + static cAudio *instance[CS_MAX_AUDIO_DECODERS]; + unsigned int unit; + cDemux *demux; + cVideo *video; + CS_AUDIO_PDATA *privateData; + //unsigned int cEncodedDataOnSPDIF, cEncodedDataOnHDMI; + bool muted; + + AUDIO_FORMAT streamType; + AUDIO_SYNC_MODE syncMode; + bool started; + unsigned int uAudioPTSDelay; + unsigned int uAudioDolbyPTSDelay, uAudioMpegPTSDelay; + bool receivedDelay; + + /* internal methods */ + int setBypassMode(bool Disable); + int LipsyncAdjust(void); + int atten; + int volume; + + bool clip_started; + HDMI_ENCODED_MODE hdmiDD; + bool spdifDD; + bool hasMuteScheduled; + bool analogOut; + // + cAudio(unsigned int Unit); +public: + /* construct & destruct */ + cAudio(void *hBuffer, void *encHD, void *encSD); + ~cAudio(void); + + void *GetHandle(void); + void *GetDSP(void); + void HandleAudioMessage(int Event, void *pData); + void HandlePcmMessage(int Event, void *pData); + /* shut up */ + int mute(void); + int unmute(void); + int SetMute(bool Enable); + + /* bypass audio to external decoder */ + int enableBypass(void); + int disableBypass(void); + + /* volume, min = 0, max = 255 */ + int setVolume(unsigned int Left, unsigned int Right); + int getVolume(void) { return volume;} + bool getMuteStatus(void) { return muted; } + + /* start and stop audio */ + int Start(void); + int Stop(void); + bool Pause(bool Pcm = true); + bool Resume(bool Pcm = true); + void SetStreamType(AUDIO_FORMAT StreamType) { streamType = StreamType; }; + AUDIO_FORMAT GetStreamType(void) { return streamType; } + bool ReceivedAudioDelay(void) { return receivedDelay; } + void SetReceivedAudioDelay(bool Set = false) { receivedDelay = Set; } + unsigned int GetAudioDelay(void) { return (streamType == AUDIO_FMT_DOLBY_DIGITAL) ? uAudioDolbyPTSDelay : uAudioMpegPTSDelay; } + void SetSyncMode(AVSYNC_TYPE SyncMode); + + /* stream source */ + int getSource(void); + int setSource(int Source); + int Flush(void); + + /* select channels */ + int setChannel(int Channel); + int getChannel(void); + int PrepareClipPlay(int uNoOfChannels, int uSampleRate, int uBitsPerSample, int bLittleEndian); + int WriteClip(unsigned char *Buffer, int Size); + int StopClip(void); + void getAudioInfo(int &Type, int &Layer, int &Freq, int &Bitrate, int &Mode); + void SetSRS(int iq_enable, int nmgr_enable, int iq_mode, int iq_level); + bool IsHdmiDDSupported(void); + void SetHdmiDD(bool On); + void SetSpdifDD(bool Enable); + void ScheduleMute(bool On); + void EnableAnalogOut(bool Enable); + bool GetHdmiAudioCaps(cs_audio_caps_t &caps); + bool IsHdmiAudioFormatSupported(HDMI_AUDIO_FORMAT format); + void SetHdmiDD(HDMI_ENCODED_MODE type); + bool IsHdmiDTSSupported(void); + void SetDemux(cDemux *Demux); + void SetVideo(cVideo *Video); + static cAudio *GetDecoder(unsigned int Unit); +}; + +#endif //__AUDIO_CS_H_ diff --git a/lib/libcoolstream2/ca_cs.h b/lib/libcoolstream2/ca_cs.h new file mode 100644 index 000000000..d7afc535f --- /dev/null +++ b/lib/libcoolstream2/ca_cs.h @@ -0,0 +1,164 @@ +/*******************************************************************************/ +/* */ +/* libcoolstream/ca.h */ +/* Public header for CA interface */ +/* */ +/* (C) 2010 CoolStream International Ltd. */ +/* */ +/* $Id:: $ */ +/*******************************************************************************/ +#ifndef __CA_CS_H_ +#define __CA_CS_H_ + +#include +#include +#include "cs_types.h" + +enum CA_INIT_MASK { + CA_INIT_SC = 1, + CA_INIT_CI, + CA_INIT_BOTH +}; + +enum CA_SLOT_TYPE { + CA_SLOT_TYPE_SMARTCARD, + CA_SLOT_TYPE_CI, + CA_SLOT_TYPE_ALL, +}; + +enum CA_MESSAGE_FLAGS { + CA_MESSAGE_EMPTY = (1 << 0), + CA_MESSAGE_HAS_PARAM1_DATA = (1 << 1), /// Free after use! + CA_MESSAGE_HAS_PARAM1_INT = (1 << 2), + CA_MESSAGE_HAS_PARAM1_PTR = (1 << 3), + CA_MESSAGE_HAS_PARAM2_INT = (1 << 4), + CA_MESSAGE_HAS_PARAM2_PTR = (1 << 5), + CA_MESSAGE_HAS_PARAM2_DATA = (1 << 6), + CA_MESSAGE_HAS_PARAM3_DATA = (1 << 7), /// Free after use! + CA_MESSAGE_HAS_PARAM3_INT = (1 << 8), + CA_MESSAGE_HAS_PARAM3_PTR = (1 << 9), + CA_MESSAGE_HAS_PARAM4_INT = (1 << 10), + CA_MESSAGE_HAS_PARAM4_PTR = (1 << 11), + CA_MESSAGE_HAS_PARAM4_DATA = (1 << 12), + CA_MESSAGE_HAS_PARAM5_INT = (1 << 13), + CA_MESSAGE_HAS_PARAM5_PTR = (1 << 14), + CA_MESSAGE_HAS_PARAM5_DATA = (1 << 15), + CA_MESSAGE_HAS_PARAM6_INT = (1 << 16), + CA_MESSAGE_HAS_PARAM6_PTR = (1 << 17), + CA_MESSAGE_HAS_PARAM6_DATA = (1 << 18), + CA_MESSAGE_HAS_PARAM1_LONG = (1 << 19), + CA_MESSAGE_HAS_PARAM2_LONG = (1 << 20), + CA_MESSAGE_HAS_PARAM3_LONG = (1 << 21), + CA_MESSAGE_HAS_PARAM4_LONG = (1 << 22), +}; + +enum CA_MESSAGE_MSGID { + CA_MESSAGE_MSG_INSERTED, + CA_MESSAGE_MSG_REMOVED, + CA_MESSAGE_MSG_INIT_OK, + CA_MESSAGE_MSG_INIT_FAILED, + CA_MESSAGE_MSG_MMI_MENU, + CA_MESSAGE_MSG_MMI_MENU_ENTER, + CA_MESSAGE_MSG_MMI_MENU_ANSWER, + CA_MESSAGE_MSG_MMI_LIST, + CA_MESSAGE_MSG_MMI_TEXT, + CA_MESSAGE_MSG_MMI_REQ_INPUT, + CA_MESSAGE_MSG_MMI_CLOSE, + CA_MESSAGE_MSG_INTERNAL, + CA_MESSAGE_MSG_PMT_ARRIVED, + CA_MESSAGE_MSG_CAPMT_ARRIVED, + CA_MESSAGE_MSG_CAT_ARRIVED, + CA_MESSAGE_MSG_ECM_ARRIVED, + CA_MESSAGE_MSG_EMM_ARRIVED, + CA_MESSAGE_MSG_CHANNEL_CHANGE, + CA_MESSAGE_MSG_GUI_READY, + CA_MESSAGE_MSG_EXIT, +}; + +typedef struct CA_MESSAGE { + u32 MsgId; + enum CA_SLOT_TYPE SlotType; + int Slot; + u32 Flags; + union { + u8 *Data[8]; + u32 Param[8]; + void *Ptr[8]; + u64 ParamLong[4]; + } Msg; +} CA_MESSAGE; + +typedef std::vector CaIdVector; +typedef std::vector::iterator CaIdVectorIterator; +typedef std::vector::const_iterator CaIdVectorConstIterator; + +#define CA_MESSAGE_SIZE sizeof(CA_MESSAGE) +#define CA_MESSAGE_ENTRIES 256 +#define CA_MESSAGE_ENTRIES_CI 128 +#define CA_MESSAGE_ENTRIES_SC 64 + +#ifndef CS_CA_PDATA +#define CS_CA_PDATA void +#endif + +/// CA module class +class cCA : public OpenThreads::Thread { +private: + /// Static instance of the CA module + static cCA *inst; + /// Private constructor (singleton method) + cCA(void); + /// Private data for the CA module + CS_CA_PDATA *privateData; + enum CA_INIT_MASK initMask; + bool exit; + bool started; + bool guiReady; + /// Thread method + virtual void run(void); +public: + /// Returns the number of CI slots + u32 GetNumberCISlots(void); + /// Returns the number of Smartcard slots + u32 GetNumberSmartCardSlots(void); + /// Singleton + static cCA *GetInstance(void); + /// Send PMT to a individual or to all available modules + bool SendPMT(int Unit, unsigned char *Data, int Len, enum CA_SLOT_TYPE SlotType = CA_SLOT_TYPE_ALL); + /// Sends a message to the CA thread + bool SendMessage(const CA_MESSAGE *Msg); + /// Sets which modules to initialize. It is only + /// possible to change this once! + void SetInitMask(enum CA_INIT_MASK InitMask); + /// Sets the frequency (in Hz) of the TS stream input (only valid for CI) + void SetTSClock(u32 Speed); + /// Start the CA module + bool Start(void); + /// Stops the CA module + void Stop(void); + /// Notify that the GUI is ready to receive messages + /// (CA messages coming from a module) + void Ready(bool Set); + /// Resets a module (if possible) + void ModuleReset(enum CA_SLOT_TYPE, u32 Slot); + /// Checks if a module is present + bool ModulePresent(enum CA_SLOT_TYPE, u32 Slot); + /// Returns the module name in array Name + void ModuleName(enum CA_SLOT_TYPE, u32 Slot, char *Name); + /// Notify the module we want to enter menu + void MenuEnter(enum CA_SLOT_TYPE, u32 Slot); + /// Notify the module with our answer (choice nr) + void MenuAnswer(enum CA_SLOT_TYPE, u32 Slot, u32 choice); + /// Notify the module with our answer (binary) + void InputAnswer(enum CA_SLOT_TYPE, u32 Slot, u8 * Data, int Len); + /// Notify the module we closed the menu + void MenuClose(enum CA_SLOT_TYPE, u32 Slot); + /// Get the supported CAIDs + int GetCAIDS(CaIdVector & Caids); + /// Send a CA-PMT object and Raw unparsed PMT to the CA layer + bool SendCAPMT(u64 Source, u8 DemuxSource, u8 DemuxMask, const unsigned char *CAPMT, u32 CAPMTLen, const unsigned char *RawPMT, u32 RawPMTLen); + /// Virtual destructor + virtual ~cCA(); +}; + +#endif ///__CA_H_ diff --git a/lib/libcoolstream2/cnxtfb.h b/lib/libcoolstream2/cnxtfb.h new file mode 100644 index 000000000..1f5b34f70 --- /dev/null +++ b/lib/libcoolstream2/cnxtfb.h @@ -0,0 +1,246 @@ +#ifndef __CNXTFB_H__ +#define __CNXTFB_H__ +/****************************************************************************/ +/* $Id: + ****************************************************************************/ +#include +#include +#include +/* + * define the IOCTL to get the frame buffer handle info. + * currently only image handle is returned + */ + +/* define this for testing H/w acceleation funcitons */ +/* #define FB_TEST_HW_ACCELERATION */ + + +/* assign an accelerator type (we have no official, so we do not add them to linux/fb.h */ +#define FB_ACCEL_PNX849X 0x90 /* Trident PNX849X */ + +struct fb_info; + +/* + * structure which contains the image handle + */ +typedef struct _cnxtfb_handles +{ + void *hImage; + void *hVPP_SD; + void *hTvEnc_SD; + void *hVPP; + void *hTvEnc; + void *hImage_SD; +} cnxtfb_handles; + +typedef struct _cnxtfb_resolution +{ + u_int32_t uWidth; + u_int32_t uHeight; + +} cnxtfb_resolution; + +/* To use with ioctl FBIO_CHANGEOUTPUTFORMAT */ +typedef enum { + CNXTFB_VIDEO_STANDARD_ATSC_1080I = 0, + CNXTFB_VIDEO_STANDARD_NTSC_M, + CNXTFB_VIDEO_STANDARD_ATSC_480P, + CNXTFB_VIDEO_STANDARD_ATSC_720P, + CNXTFB_VIDEO_STANDARD_PAL_B_WEUR, + CNXTFB_VIDEO_STANDARD_SECAM_L, + CNXTFB_VIDEO_STANDARD_ATSC_576P, + CNXTFB_VIDEO_STANDARD_ATSC_720P_50HZ, + CNXTFB_VIDEO_STANDARD_ATSC_1080I_50HZ +} CNXTFB_VIDEO_STANDARD; + +typedef enum +{ + CNXTFB_BLEND_MODE_PER_PIXEL = 0, + CNXTFB_BLEND_MODE_UNIFORM_ALPHA, + /* Reordered for compatability .. */ + CNXTFB_BLEND_MODE_ALPHA_MULTIPLIED, +} CNXTFB_BLEND_MODE; + +typedef enum +{ + CNXTFB_INVALID = -1, + CNXTFB_480I = 0, + CNXTFB_480P, + CNXTFB_576I, + CNXTFB_576P, + CNXTFB_720P, + CNXTFB_720P_50, + CNXTFB_1080I, + CNXTFB_1080I_50, + CNXTFB_1080P, + CNXTFB_1080P_50, + CNXTFB_1080P_24, + CNXTFB_1080P_25, + CNXTFB_DISPLAY_MODE_LAST = CNXTFB_1080P_25, +} cnxtfb_displaymode; + +typedef enum +{ + CNXTFB_TYPE_SD = 1, /* 1 << 0 */ + CNXTFB_TYPE_HD = 2 /* 1 << 1 */ +} CNXTFB_FB_TYPE; + +typedef struct +{ + unsigned char Type; /* Bitmask of type CNXTFB_FB_TYPE */ + cnxtfb_displaymode SDMode; + cnxtfb_displaymode HDMode; +} CNXTFB_OUTPUT_FORMAT_CHANGE; + +/* + * structure which contains the image handle + */ +typedef struct _cnxtfb_handle +{ + /* CNXT_IMAGE_HANDLE hImage; */ + void *hImage; +} cnxtfb_handle; + +typedef enum +{ + CNXTFB_VSYNC_NOTIFICATION = 0x1000, + CNXTFB_BUF_REELASE_NOTIFICATION, + CNXTFB_DISPLAY_MODE_NOTIFICATION +}cnxtfb_event; + +typedef struct +{ + u8 uRed; + u8 uGreen; + u8 uBlue; + u8 uAlpha; +} CNXTFB_RGB_COLOR; + +typedef struct +{ + u8 uY; + u8 uCb; + u8 uCr; + u8 uAlpha; +} CNXTFB_YCC_COLOR; + +typedef enum +{ + CNXTFB_COLOR_RGB = 0, /* RGB format */ + CNXTFB_COLOR_YCC, /* YCC format */ + CNXTFB_COLOR_PAL_INDEX, /* Palette index or u_int32 representation of color*/ + CNXTFB_COLOR_TYPE_LAST = CNXTFB_COLOR_PAL_INDEX +} CNXTFB_COLOR_TYPE; + +typedef union +{ + u_int32_t uValue; /* Palette index or u_int32 representation of color */ + CNXTFB_RGB_COLOR RGB; + CNXTFB_YCC_COLOR YCC; +} CNXTFB_COLOR_ENTRY; + +typedef enum +{ + CNXTFB_YCC_BASIC = 0, /* Pure YCbCr for MPEG-1 decodes */ + CNXTFB_YCC_SD_BT470, /* ITU-R BT470-2 System M */ + CNXTFB_YCC_SD_BT470_BG, /* ITU-R BT470-2 System B/G */ + CNXTFB_YCC_SMPTE_170M, /* SMPTE 170M */ + CNXTFB_YCC_SMPTE_240M, /* SMPTE 240M */ + CNXTFB_YCC_GEN_FILM, /* Generic Film(Color filters using Illuminant C) */ + CNXTFB_YCC_HD_BT709, + CNXTFB_RGB, + CNXTFB_COLOR_SPACE_LAST = CNXTFB_RGB +} CNXTFB_COLOR_SPACE; + +typedef struct +{ + CNXTFB_COLOR_SPACE ColorSpace; + CNXTFB_COLOR_ENTRY Color; +} CNXTFB_COLOR_SPEC; + + +/* Enumeration for types of chroma key configurations. */ +typedef enum +{ + CNXTFB_REGION_CHROMAKEY_SRC, + CNXTFB_REGION_CHROMAKEY_DST +} CNXTFB_REGION_CHROMAKEY_TYPE; + +typedef struct +{ + CNXTFB_COLOR_SPEC ColorKeyLower; + CNXTFB_COLOR_SPEC ColorKeyUpper; +} CNXTFB_REGION_CHROMAKEY_CFG; + +typedef struct _cnxtfb_chromakey_cfg{ + bool bEnable; + CNXTFB_REGION_CHROMAKEY_TYPE Type; + CNXTFB_REGION_CHROMAKEY_CFG *pCfg; +} cnxtfb_chromakey_cfg; + +typedef void (*cnxtfb_notify)(cnxtfb_event event, void *cookie); + +extern void cnxtfb_register_client(struct fb_info *fb_info, cnxtfb_notify pfnotify, void *cookie); +extern void cnxtfb_get_image_handle(struct fb_info *fb_info, void **phImage); +extern void cnxtfb_get_handles(struct fb_info *fb_info, cnxtfb_handles *phandles); +extern void cnxtfb_register_evnt_clbk(cnxtfb_notify pfnotify); + +#define CNXTFB_IO(type) _IO('F', type) +#define CNXTFB_IOW(type, dtype) _IOW('F', type, dtype) +#define CNXTFB_IOR(type, dtype) _IOR('F', type, dtype) + + +#define FB_TEST_HW_ACCELERATION + +#define FBIOGET_CNXTFBHANDLE 0x4620 +#define FBIO_WAITFORVSYNC 0x4621 +#define FBIO_STARTDISPLAY 0x4622 +#define FBIO_STOPDISPLAY 0x4623 +#define FBIO_SETBLENDMODE 0x4624 +#define FBIO_CHANGEOUTPUTFORMAT 0x4625 +#define FBIO_GETFBRESOLUTION 0x4626 + +#ifdef FB_TEST_HW_ACCELERATION +#define FBIO_FILL_RECT 0x4627 +#define FBIO_COPY_AREA 0x4628 +#define FBIO_IMAGE_BLT 0x4629 +#define FBIO_STRETCH_COPY 0x4630 +#endif + +#define FBIO_SETOPACITY 0x4631 +#define FBIO_FLIPBUFFER 0x4632 + +#ifdef FB_TEST_HW_ACCELERATION +#define FBIO_JPEG_RENDER 0x4633 +#endif + +#define FBIO_SCALE_SD_OSD 0x4634 +#define FBIO_CHROMAKEY_CFG 0x4635 +#define FBIO_DELAY_BUF_RELEASE 0x4636 +/* CST Mod */ +#define FBIO_GETCNXTFBHANDLES 0x4640 + + +#if 0 +#ifndef FBIO_WAITFORVSYNC +#define FBIO_WAITFORVSYNC _IOW('F', 0x20, u_int32_t) +#endif + +#define FBIO_GETCNXTFBHANDLE CNXTFB_IOR(0x21, cnxtfb_handle) // 0x4620 +#define FBIO_STARTDISPLAY CNXTFB_IO(0x22) +#define FBIO_STOPDISPLAY CNXTFB_IO(0x23) +#define FBIO_SETOPACITY CNXTFB_IOW(0x24, u_int8_t) +#define FBIO_SETBLENDMODE CNXTFB_IOW(0x25, u_int8_t) +#define FBIO_CHANGEOUTPUTFORMAT CNXTFB_IOW(0x26, u_int32_t) +#define FBIO_GETFBRESOLUTION CNXTFB_IOR(0x27, cnxtfb_resolution) +#define FBIO_SETFLICKERFILTER CNXTFB_IOW(0x28, u_int8_t) +#define FBIO_SCALE_SD_OSD CNXTFB_IO(0x28) + +#ifdef FB_TEST_HW_ACCELERATION +#define FBIO_FILL_RECT CNXTFB_IOW(0x29, struct fb_fillrect) +#define FBIO_COPY_AREA CNXTFB_IOW(0x2a, struct fb_copyarea) +#define FBIO_IMAGE_BLT CNXTFB_IOW(0x2b, struct fb_image) +#endif +#endif + +#endif /* __CNXTFB_H__ */ diff --git a/lib/libcoolstream2/control.h b/lib/libcoolstream2/control.h new file mode 100644 index 000000000..20309deab --- /dev/null +++ b/lib/libcoolstream2/control.h @@ -0,0 +1,63 @@ +/******************************************************************** +* Description: Control driver for PWM and Scart +* Author: CoolStream Dev. Team +* Created at: Fri Jun 26 08:11:43 CEST 2009 +* +* Copyright (c) 2009 CoolStream International Ltd. All rights reserved. +* +********************************************************************/ + +#ifndef __CONTROL_H +#define __CONTROL_H + +#ifndef __KERNEL__ +typedef unsigned char u8; +typedef unsigned short u16; +typedef unsigned int u32; +#include + +#else +#include +#include + +#define CS_PIO_LOW 0 +#define CS_PIO_HIGH 1 +int cs_gpio_drive(int gpio, int value); +#endif + +#include "tsrouter.h" + +typedef struct _scart_status { + bool widescreen; + bool function; + bool fastblank; +} scart_status_t; + +/* ioctls */ +#define CS_CONTROL_MAGIC 0xDE +#define IOC_CONTROL_WIDESCREEN _IOW(CS_CONTROL_MAGIC, 20, unsigned int) +#define IOC_CONTROL_TVAV _IOW(CS_CONTROL_MAGIC, 21, unsigned int) +#define IOC_CONTROL_RGB _IOW(CS_CONTROL_MAGIC, 22, unsigned int) +#define IOC_CONTROL_SCART_STATUS _IOR(CS_CONTROL_MAGIC, 23, scart_status_t *) +#define IOC_CONTROL_HDDPOWER _IOW(CS_CONTROL_MAGIC, 25, unsigned int) + +/* ioctl for getting board serial and revision */ +#define IOC_CONTROL_BOARD_SERIAL_LOW _IOR(CS_CONTROL_MAGIC, 26, unsigned int *) +#define IOC_CONTROL_BOARD_SERIAL_HIGH _IOR(CS_CONTROL_MAGIC, 27, unsigned int *) +#define IOC_CONTROL_BOARD_REV _IOR(CS_CONTROL_MAGIC, 28, unsigned int *) + +/* ioctl for setting TS routing */ +#define IOC_CONTROL_TSROUTE_GET_HSDP_CONFIG _IOR(CS_CONTROL_MAGIC, 29, tsrouter_hsdp_config_t *) +#define IOC_CONTROL_TSROUTE_SET_HSDP_CONFIG _IOW(CS_CONTROL_MAGIC, 30, tsrouter_tsp_config_t *) +#define IOC_CONTROL_TSROUTE_GET_TSP_CONFIG _IOR(CS_CONTROL_MAGIC, 31, tsrouter_hsdp_config_t *) +#define IOC_CONTROL_TSROUTE_SET_TSP_CONFIG _IOW(CS_CONTROL_MAGIC, 32, tsrouter_tsp_config_t *) +/* Gets the current TS port frequency of the CI */ +#define IOC_CONTROL_TSROUTE_GET_CI_SPEED _IOR(CS_CONTROL_MAGIC, 33, unsigned int *) +/* Sets the current TS port frequency of the CI in Hz (max=12Mhz) */ +#define IOC_CONTROL_TSROUTE_SET_CI_SPEED _IOW(CS_CONTROL_MAGIC, 34, unsigned int) +/* Gets the current TS port base PLL of the CI */ +#define IOC_CONTROL_TSROUTE_GET_CI_PLL _IOR(CS_CONTROL_MAGIC, 35, unsigned int *) +/* Sets the current TS port base PLL of the CI */ +#define IOC_CONTROL_TSROUTE_SET_CI_PLL _IOW(CS_CONTROL_MAGIC, 36, unsigned int) + +#endif /* __CONTROL_H */ diff --git a/lib/libcoolstream2/cs_api.h b/lib/libcoolstream2/cs_api.h new file mode 100644 index 000000000..9ae38a702 --- /dev/null +++ b/lib/libcoolstream2/cs_api.h @@ -0,0 +1,78 @@ +/*******************************************************************************/ +/* */ +/* libcoolstream/cs_api.h */ +/* Public header file for CoolStream Public API */ +/* */ +/* (C) 2010 CoolStream International */ +/* */ +/* $Id:: $ */ +/*******************************************************************************/ +#ifndef __CS_API_H_ +#define __CS_API_H_ + +#include +#include +#include +#include + +typedef void (*cs_messenger) (unsigned int msg, unsigned int data); + +enum CS_LOG_MODULE { + CS_LOG_CI = 0, + CS_LOG_HDMI_CEC, + CS_LOG_HDMI, + CS_LOG_VIDEO, + CS_LOG_VIDEO_DRM, + CS_LOG_AUDIO, + CS_LOG_DEMUX, + CS_LOG_DENC, + CS_LOG_PVR_RECORD, + CS_LOG_PVR_PLAY, + CS_LOG_FILEPLAYER, + CS_LOG_POWER_CTRL, + CS_LOG_POWER_CLK, + CS_LOG_MEM, + CS_LOG_API, + CS_LOG_CA, +}; + +// Initialization +void cs_api_init(void); +void cs_api_exit(void); + +// Memory helpers +void *cs_malloc_uncached(size_t size); +void cs_free_uncached(void *ptr); +void *cs_phys_addr(void *ptr); + +// Callback function helpers +void cs_register_messenger(cs_messenger messenger); +void cs_deregister_messenger(void); +cs_messenger cs_get_messenger(void); + +// Logging functions +void cs_log_enable(void); +void cs_log_disable(void); +void cs_log_message(const char *prefix, const char *fmt, ...); +void cs_log_module_enable(enum CS_LOG_MODULE module); +void cs_log_module_disable(enum CS_LOG_MODULE module); +void cs_log_module_message(enum CS_LOG_MODULE module, const char *fmt, ...); + +// TS Routing +unsigned int cs_get_ts_output(void); +int cs_set_ts_output(unsigned int port); +int cs_set_ts_ci_clock(unsigned int speed); +int cs_get_ts_ci_clock(unsigned int *speed); +int cs_set_ts_config(unsigned int port, tsrouter_hsdp_config_t *hsdp_config); +int cs_get_ts_config(unsigned int port, tsrouter_hsdp_config_t *hsdp_config); +int cs_set_tsp_config(unsigned int port, tsrouter_tsp_config_t *tsp_config); +int cs_get_tsp_config(unsigned int port, tsrouter_tsp_config_t *tsp_config); + +// Serial nr and revision accessors +unsigned long long cs_get_serial(void); +unsigned int cs_get_revision(void); + +unsigned int cs_get_chip_id(void); +unsigned int cs_get_chip_rev_id(void); + +#endif //__CS_API_H_ diff --git a/lib/libcoolstream2/cs_frontpanel.h b/lib/libcoolstream2/cs_frontpanel.h new file mode 100644 index 000000000..97c0f577a --- /dev/null +++ b/lib/libcoolstream2/cs_frontpanel.h @@ -0,0 +1,116 @@ +/* + * Driver for the Coolstream Frontpanel - public definititons. + * + * Copyright (C) 2008 - 2012 Coolstream International Limited + */ + +#ifndef __CS_FRONTPANEL_H__ +#define __CS_FRONTPANEL_H__ + +#define CS_FP_DISPLAY_DEVICE_NAME "cs_display" +#define CS_FP_DISPLAY_DEVICE_MAJOR 238 + +typedef enum { + /* for all frontpanels with */ + FP_ICON_NONE = 0x00000000, + FP_ICON_BAR8 = 0x00000004, + FP_ICON_BAR7 = 0x00000008, + FP_ICON_BAR6 = 0x00000010, + FP_ICON_BAR5 = 0x00000020, + FP_ICON_BAR4 = 0x00000040, + FP_ICON_BAR3 = 0x00000080, + FP_ICON_BAR2 = 0x00000100, + FP_ICON_BAR1 = 0x00000200, + FP_ICON_FRAME = 0x00000400, + FP_ICON_MUTE = 0x00001000, + FP_ICON_DOLBY = 0x00002000, + FP_ICON_TV = 0x00020000, + FP_ICON_RADIO = 0x00040000, + FP_ICON_HD = 0x01000001, + FP_ICON_1080P = 0x02000001, + FP_ICON_1080I = 0x03000001, + FP_ICON_720P = 0x04000001, + FP_ICON_480P = 0x05000001, + FP_ICON_480I = 0x06000001, + FP_ICON_MP3 = 0x08000001, + FP_ICON_PLAY = 0x09000001, + FP_ICON_PAUSE = 0x0A000001, + FP_ICON_CAM1 = 0x0B000001, /* record */ + /* only for frontpanels with VFD */ + FP_ICON_HDD = 0x00000800, + FP_ICON_POWER = 0x00004000, + FP_ICON_TIMESHIFT = 0x00008000, + FP_ICON_SIGNAL = 0x00010000, + FP_ICON_USB = 0x07000001, + FP_ICON_COL1 = 0x09000002, + FP_ICON_COL2 = 0x0B000002, + FP_ICON_CAM2 = 0x0C000001, + /* only for frontpanels with OLED */ + FP_ICON_SD = 0x01000002, + FP_ICON_576P = 0x02000002, + FP_ICON_576I = 0x03000002, + FP_ICON_MP2 = 0x07000002, + FP_ICON_DTS = 0x08000002 +} fp_icon; + +typedef enum { + FP_FLAG_NONE = 0x00, + FP_FLAG_SCROLL_ON = 0x01, /* switch scrolling on */ + FP_FLAG_SCROLL_LTR = 0x02, /* scroll from left to right instead of default right to left direction (i.e. for arabic text) */ + FP_FLAG_SCROLL_SIO = 0x04, /* start/stop scrolling with empty screen (scroll in/out) */ + FP_FLAG_SCROLL_DELAY = 0x08, /* delayed scroll start */ + FP_FLAG_ALIGN_LEFT = 0x10, /* align the text in display from the left (default) */ + FP_FLAG_ALIGN_RIGHT = 0x20, /* align the text in display from the right (arabic) */ + FP_FLAG_UPDATE_SCROLL_POS = 0x40, /* update the current position for scrolling */ +} fp_flag; + +typedef struct { + unsigned char brightness; + unsigned char flags; + unsigned char current_hour; + unsigned char current_minute; + unsigned char timer_minutes_hi; + unsigned char timer_minutes_lo; +} fp_standby_data_t; + +typedef enum { + FP_LED_1_ON = 0x81, + FP_LED_2_ON = 0x82, + FP_LED_3_ON = 0x83, + FP_LED_1_OFF = 0x01, + FP_LED_2_OFF = 0x02, + FP_LED_3_OFF = 0x03, +} fp_led_ctrl_t; + +typedef struct { + unsigned char source; + unsigned char time_minutes_hi; + unsigned char time_minutes_lo; +} fp_wakeup_data_t; + +typedef enum { + FP_WAKEUP_SOURCE_TIMER = 0x01, + FP_WAKEUP_SOURCE_BUTTON = 0x02, + FP_WAKEUP_SOURCE_REMOTE = 0x04, + FP_WAKEUP_SOURCE_PWLOST = 0x7F, + FP_WAKEUP_SOURCE_POWER = 0xFF +} fp_wakeup_source; + +typedef struct { + unsigned short addr; + unsigned short cmd; +} fp_standby_cmd_data_t; + +#define IOC_FP_SET_BRIGHT _IOW(0xDE, 1, unsigned char) /* set the display brighness in 16 steps between 0 to 15 */ +#define IOC_FP_CLEAR_ALL _IOW(0xDE, 2, unsigned int) /* clear the entire display (both text and icons) */ +#define IOC_FP_SET_TEXT _IOW(0xDE, 3, char*) /* set a text to be displayed on the display. If arg == NULL, the text is cleared */ +#define IOC_FP_SET_ICON _IOW(0xDE, 4, fp_icon) /* switch the given icon on */ +#define IOC_FP_CLEAR_ICON _IOW(0xDE, 5, fp_icon) /* switch the given icon off */ +#define IOC_FP_SET_OUTPUT _IOW(0xDE, 6, unsigned char) /* switch the given output on (supported by the controller, but not used in the hardware) */ +#define IOC_FP_CLEAR_OUTPUT _IOW(0xDE, 7, unsigned char) /* switch the given output off (supported by the controller, but not used in the hardware) */ +#define IOC_FP_STANDBY _IOW(0xDE, 8, fp_standby_data_t *)/* switch the vfd/psu in standby (NEO and above only) */ +#define IOC_FP_LED_CTRL _IOW(0xDE, 9, unsigned char) /* control the Frontpanles LED's (NEO and above only) */ +#define IOC_FP_GET_WAKEUP _IOW(0xDE, 10, fp_wakeup_data_t *) /* get wakeup data (NEO and above only) */ +#define IOC_FP_STANDBY_CMD _IOW(0xDE, 11, fp_standby_cmd_data_t *) /* get wakeup data (NEO and above only) */ + +#endif /* __CS_FRONTPANEL_H__ */ diff --git a/lib/libcoolstream2/cs_ir_generic.h b/lib/libcoolstream2/cs_ir_generic.h new file mode 100644 index 000000000..ec7fbf325 --- /dev/null +++ b/lib/libcoolstream2/cs_ir_generic.h @@ -0,0 +1,73 @@ +/* + * public definitions for the generic IR / input driver. + * + * Copyright (C) 2008-2012 Coolstream International Limited + * + */ +#ifndef __CS_IR_GENERIC_H__ +#define __CS_IR_GENERIC_H__ + +/* Linux character device name */ +#define CS_IR_DEVICE_NAME "cs_ir" +#define CS_IR_DEVICE_MAJOR 240 + +/* max. possible key map size */ +#define CS_IR_MAX_KEY_MAP_SIZE 0x10000 + +/* Possible handled IR protocols */ +typedef enum { + IR_PROTOCOL_UNKNOWN = 0x00000, + IR_PROTOCOL_RMAP = 0x00001, /* Ruwido rMAP */ + IR_PROTOCOL_RMAP_E = 0x00002, /* Ruwido rMAP with extension for MNC Ltd sp. z o.o. */ + IR_PROTOCOL_NRC17 = 0x00004, /* Nokia NRC17 */ + IR_PROTOCOL_JVC = 0x00008, /* JVC */ + IR_PROTOCOL_RCA = 0x00010, /* RCA */ + IR_PROTOCOL_PSD = 0x00020, /* Precision Squared (not yet supported) */ + IR_PROTOCOL_RC5 = 0x00040, /* Philips RC5 */ + IR_PROTOCOL_RCMM = 0x00080, /* Philips RCMM */ + IR_PROTOCOL_RECS80 = 0x00100, /* Philips RECS80 */ + IR_PROTOCOL_NEC = 0x00200, /* NEC */ + IR_PROTOCOL_NECE = 0x00400, /* NEC with 16 bit address capability */ + IR_PROTOCOL_SCA = 0x00800, /* Scientific Atlanta */ + IR_PROTOCOL_MATSUSHITA = 0x01000, /* Matsushita (Technics/Panasonics) */ + IR_PROTOCOL_SONY = 0x02000, /* Sony SIRC 12 bit */ + IR_PROTOCOL_SONY15 = 0x04000, /* Sony SIRC 15 bit */ + IR_PROTOCOL_SONY20 = 0x08000, /* Sony SIRC 20 bit */ + IR_PROTOCOL_SONY24 = 0x10000, /* Sony SIRC 24 bit */ + IR_PROTOCOL_BUTTON = 0x20000, /* Sony SIRC 24 bit */ + IR_PROTOCOL_ALL = 0x2FFFF +} ir_protocol_t; + +/* FP key mode */ +typedef enum { + FP_MODE_KEYS_DISABLED = 0, + FP_MODE_KEYS_ENABLED = 1 +} fp_mode_t; + +/*******************************************************************************/ +/* ioctl's */ +/*******************************************************************************/ + +/* set the IR-protocols to listen for. */ +#define IOC_IR_SET_PRI_PROTOCOL _IOW(0xDD, 1, ir_protocol_t) /* set the primary IR-protocol */ +#define IOC_IR_SET_SEC_PROTOCOL _IOW(0xDD, 2, ir_protocol_t) /* set the secondary IR-protocol */ + +/* some IR-protocols can handle different device addresses. */ +#define IOC_IR_SET_PRI_ADDRESS _IOW(0xDD, 3, unsigned int) /* set the primary IR-address */ +#define IOC_IR_SET_SEC_ADDRESS _IOW(0xDD, 4, unsigned int) /* set the secondary IR-address */ + +/* defines the delay time between two pulses in milliseconds */ +#define IOC_IR_SET_F_DELAY _IOW(0xDD, 5, unsigned int) /* set the delay time before the first repetition */ +#define IOC_IR_SET_X_DELAY _IOW(0xDD, 6, unsigned int) /* set the delay time between all other repetitions */ + +/* load key mappings to translate from raw IR to Linux Input */ +#define IOC_IR_SET_PRI_KEYMAP _IOW(0xDD, 7, unsigned short *) /* set the primary keymap [num entries],[entry 1],[entry 2],...,[entry n] (max 0xFFFF entries) */ +#define IOC_IR_SET_SEC_KEYMAP _IOW(0xDD, 8, unsigned short *) /* set the secondary keymap [num entries],[entry 1],[entry 2],...,[entry n] (max 0xFFFF entries) */ + +/* frontpanel button options */ +#define IOC_IR_SET_FP_MODE _IOW(0xDD, 9, fp_mode_t) /* enable/disable frontpanel buttons */ + +/* informative stuff */ +#define IOC_IR_GET_PROTOCOLS _IOR(0xDD, 10, ir_protocol_t) /* reports a bitmask of all supported ir_protocols */ + +#endif /* __CS_IR_GENERIC_H__ */ diff --git a/lib/libcoolstream2/cs_types.h b/lib/libcoolstream2/cs_types.h new file mode 100644 index 000000000..fae6d086d --- /dev/null +++ b/lib/libcoolstream2/cs_types.h @@ -0,0 +1,29 @@ +/*******************************************************************************/ +/* */ +/* libcoolstream/cs_types.h */ +/* Public header file for CoolStream Public API */ +/* */ +/* (C) 2010 CoolStream International */ +/* */ +/* $Id:: $ */ +/*******************************************************************************/ +#ifndef __CS_TYPES_H_ +#define __CS_TYPES_H_ + +typedef enum +{ + AVSYNC_DISABLED, + AVSYNC_ENABLED, + AVSYNC_AUDIO_IS_MASTER +} AVSYNC_TYPE; + +typedef unsigned long long u64; +typedef unsigned int u32; +typedef unsigned short u16; +typedef unsigned char u8; +typedef signed long long s64; +typedef signed int s32; +typedef signed short s16; +typedef signed char s8; + +#endif // __CS_TYPES_H_ diff --git a/lib/libcoolstream2/cs_vfd.h b/lib/libcoolstream2/cs_vfd.h new file mode 100755 index 000000000..13b4b933d --- /dev/null +++ b/lib/libcoolstream2/cs_vfd.h @@ -0,0 +1,102 @@ +/* + * Driver for the Samsung HCR-13SS22 VF-Display connected to the Conexant + * CX2450x (Nevis) SoC via Coolstream VFD-Controller - public definititons. + * + * Copyright (C) 2008 Coolstream International Limited + */ + +#ifndef __CS_VFD__ +#define __CS_VFD__ + +typedef enum +{ + VFD_ICON_BAR8 = 0x00000004, + VFD_ICON_BAR7 = 0x00000008, + VFD_ICON_BAR6 = 0x00000010, + VFD_ICON_BAR5 = 0x00000020, + VFD_ICON_BAR4 = 0x00000040, + VFD_ICON_BAR3 = 0x00000080, + VFD_ICON_BAR2 = 0x00000100, + VFD_ICON_BAR1 = 0x00000200, + VFD_ICON_FRAME = 0x00000400, + VFD_ICON_HDD = 0x00000800, + VFD_ICON_MUTE = 0x00001000, + VFD_ICON_DOLBY = 0x00002000, + VFD_ICON_POWER = 0x00004000, + VFD_ICON_TIMESHIFT = 0x00008000, + VFD_ICON_SIGNAL = 0x00010000, + VFD_ICON_TV = 0x00020000, + VFD_ICON_RADIO = 0x00040000, + VFD_ICON_HD = 0x01000001, + VFD_ICON_1080P = 0x02000001, + VFD_ICON_1080I = 0x03000001, + VFD_ICON_720P = 0x04000001, + VFD_ICON_480P = 0x05000001, + VFD_ICON_480I = 0x06000001, + VFD_ICON_USB = 0x07000001, + VFD_ICON_MP3 = 0x08000001, + VFD_ICON_PLAY = 0x09000001, + VFD_ICON_COL1 = 0x09000002, + VFD_ICON_PAUSE = 0x0A000001, + VFD_ICON_CAM1 = 0x0B000001, + VFD_ICON_COL2 = 0x0B000002, + VFD_ICON_CAM2 = 0x0C000001 +} vfd_icon; + +typedef enum +{ + VFD_FLAG_NONE = 0x00, + VFD_FLAG_SCROLL_ON = 0x01, /* switch scrolling on */ + VFD_FLAG_SCROLL_LTR = 0x02, /* scroll from left to rightinstead of default right to left direction (i.e. for arabic text) */ + VFD_FLAG_SCROLL_SIO = 0x04, /* start/stop scrolling with empty screen (scroll in/out) */ + VFD_FLAG_SCROLL_DELAY = 0x08, /* delayed scroll start */ + VFD_FLAG_ALIGN_LEFT = 0x10, /* align the text in display from the left (default) */ + VFD_FLAG_ALIGN_RIGHT = 0x20, /* align the text in display from the right (arabic) */ + VFD_FLAG_UPDATE_SCROLL_POS = 0x40, /* update the current position for scrolling */ +} vfd_flag; + +typedef struct { + unsigned char brightness; + unsigned char flags; + unsigned char current_hour; + unsigned char current_minute; + unsigned char timer_minutes_hi; + unsigned char timer_minutes_lo; +} standby_data_t; + +typedef enum { + VFD_LED_1_ON = 0x81, + VFD_LED_2_ON = 0x82, + VFD_LED_3_ON = 0x83, + VFD_LED_1_OFF = 0x01, + VFD_LED_2_OFF = 0x02, + VFD_LED_3_OFF = 0x03, +} vfd_led_ctrl_t; + +typedef struct { + unsigned char source; + unsigned char time_minutes_hi; + unsigned char time_minutes_lo; +} wakeup_data_t; + +typedef enum +{ + WAKEUP_SOURCE_TIMER = 0x01, + WAKEUP_SOURCE_BUTTON = 0x02, + WAKEUP_SOURCE_REMOTE = 0x04, + WAKEUP_SOURCE_PWLOST = 0x7F, + WAKEUP_SOURCE_POWER = 0xFF +} wakeup_source; + +#define IOC_VFD_SET_BRIGHT _IOW(0xDE, 1, unsigned char) /* set the display brighness in 16 steps between 0 to 15 */ +#define IOC_VFD_CLEAR_ALL _IOW(0xDE, 2, unsigned int) /* clear the entire display (both text and icons) */ +#define IOC_VFD_SET_TEXT _IOW(0xDE, 3, char*) /* set a text to be displayed on the display. If arg == NULL, the text is cleared */ +#define IOC_VFD_SET_ICON _IOW(0xDE, 4, vfd_icon) /* switch the given icon on */ +#define IOC_VFD_CLEAR_ICON _IOW(0xDE, 5, vfd_icon) /* switch the given icon off */ +#define IOC_VFD_SET_OUTPUT _IOW(0xDE, 6, unsigned char) /* switch the given output on (supported by the controller, but not used in the hardware) */ +#define IOC_VFD_CLEAR_OUTPUT _IOW(0xDE, 7, unsigned char) /* switch the given output off (supported by the controller, but not used in the hardware) */ +#define IOC_VFD_STANDBY _IOW(0xDE, 8, standby_data_t *)/* switch the vfd/psu in standby (NEO and above only) */ +#define IOC_VFD_LED_CTRL _IOW(0xDE, 9, unsigned char) /* control the Frontpanles LED's (NEO and above only) */ +#define IOC_VFD_GET_WAKEUP _IOW(0xDE, 10,wakeup_data_t *) /* get wakeup data (NEO and above only) */ + +#endif /* __CS_VFD__ */ diff --git a/lib/libcoolstream2/dmx_cs.h b/lib/libcoolstream2/dmx_cs.h new file mode 100644 index 000000000..2e7630508 --- /dev/null +++ b/lib/libcoolstream2/dmx_cs.h @@ -0,0 +1,85 @@ +/*******************************************************************************/ +/* */ +/* libcoolstream/dmx_cs.h */ +/* Public header for demux API */ +/* */ +/* (C) 2008 CoolStream International */ +/* */ +/* $Id:: $ */ +/*******************************************************************************/ +#ifndef __DEMUX_CS_H_ +#define __DEMUX_CS_H_ + +#include + +#include +#include "cs_types.h" + +#define DEMUX_POLL_TIMEOUT 0 // timeout in ms +#define MAX_FILTER_LENGTH 12 // maximum number of filters + +#ifdef DMX_FILTER_SIZE +#error +#endif +#define DMX_FILTER_SIZE MAX_FILTER_LENGTH + +#define MAX_DMX_UNITS 5 + +typedef enum { + DMX_VIDEO_CHANNEL = 1, + DMX_AUDIO_CHANNEL, + DMX_PES_CHANNEL, + DMX_PSI_CHANNEL, + DMX_PIP_CHANNEL, + DMX_TP_CHANNEL, + DMX_PCR_ONLY_CHANNEL +} DMX_CHANNEL_TYPE; + +class cDemuxData; +class cVideo; +class cAudio; + +class cDemux { +friend class cVideo; +friend class cAudio; +private: + DMX_CHANNEL_TYPE type; + int timeout; + unsigned short pid; + AVSYNC_TYPE syncMode; + bool enabled; + int unit; + + cDemuxData * dd; +public: + cDemux(int num = 0); + ~cDemux(); + // + bool Open(DMX_CHANNEL_TYPE pes_type, void * hVideoBuffer = NULL, int uBufferSize = 8192); + void Close(void); + bool Start(bool record = false); + bool Stop(void); + int Read(unsigned char *buff, int len, int Timeout = 0); + + bool SetVideoFormat(VIDEO_FORMAT VideoFormat); + bool SetSource(int source); + + bool sectionFilter(unsigned short Pid, const unsigned char * const Tid, const unsigned char * const Mask, int len, int Timeout = DEMUX_POLL_TIMEOUT, const unsigned char * const nMask = NULL); + bool AddSectionFilter(unsigned short Pid, const unsigned char * const Filter, const unsigned char * const Mask, int len, const unsigned char * const nMask = NULL); + + bool pesFilter(const unsigned short Pid); + bool addPid(unsigned short Pid); + void SetSyncMode(AVSYNC_TYPE SyncMode); + void *getBuffer(void); + void *getChannel(void); + void getSTC(s64 *STC); + + DMX_CHANNEL_TYPE getChannelType(void) { return type; }; + int getUnit(void) { return unit; }; + unsigned short GetPID(void) { return pid; } + + int GetSource(); + static bool SetSource(int unit, int source); + static int GetSource(int unit); +}; +#endif //__DMX_CS_H_ diff --git a/lib/libcoolstream2/mmi.h b/lib/libcoolstream2/mmi.h new file mode 100644 index 000000000..96266ea44 --- /dev/null +++ b/lib/libcoolstream2/mmi.h @@ -0,0 +1,54 @@ +/*******************************************************************************/ +/* */ +/* libcoolstream/mmi.h */ +/* Public header file for CoolStream Public CA MMI API */ +/* */ +/* (C) 2010 CoolStream International */ +/* */ +/* $Id:: $ */ +/*******************************************************************************/ +#ifndef __MMI_H_ +#define __MMI_H_ + +#define MAX_MMI_ITEMS 40 +#define MAX_MMI_TEXT_LEN 255 +#define MAX_MMI_CHOICE_TEXT_LEN 255 + +typedef enum { + MMI_TOP_MENU_SUBS = 1, + MMI_TOP_MENU_EVENTS, + MMI_TOP_MENU_TOKENS, + MMI_TOP_MENU_PIN, + MMI_TOP_MENU_MATURE, + MMI_TOP_MENU_ABOUT +} MMI_MENU_CURRENT; + +typedef enum { + MMI_MENU_LEVEL_MAIN = 0, + MMI_MENU_LEVEL_MATURE, + MMI_MENU_LEVEL_ASK_PIN_MATURE +} MMI_MENU_LEVEL; + +typedef enum { + MMI_PIN_LEVEL_ASK_OLD = 0, + MMI_PIN_LEVEL_CHECK_CURRENT, + MMI_PIN_LEVEL_ASK_REPEAT, + MMI_PIN_LEVEL_CHECK_AND_CHANGE +} MMI_PIN_LEVEL; + +typedef struct { + int choice_nb; + char title[MAX_MMI_TEXT_LEN]; + char subtitle[MAX_MMI_TEXT_LEN]; + char bottom[MAX_MMI_TEXT_LEN]; + char choice_item[MAX_MMI_ITEMS][MAX_MMI_CHOICE_TEXT_LEN]; +} MMI_MENU_LIST_INFO; + +typedef struct { + int blind; + int answerlen; + char enguiryText[MAX_MMI_TEXT_LEN]; +} MMI_ENGUIRY_INFO; + +#endif // __MMI_H_ + diff --git a/lib/libcoolstream2/nevis_ir.h b/lib/libcoolstream2/nevis_ir.h new file mode 100644 index 000000000..0774a150c --- /dev/null +++ b/lib/libcoolstream2/nevis_ir.h @@ -0,0 +1,84 @@ +/* + * public definitions for the CX2450x Infrared receiver driver + * + * Copyright (C) 2008-2011 Coolstream International Limited + * + */ + +#ifndef __NEVIS_IR_H__ +#define __NEVIS_IR_H__ + +typedef enum +{ + IR_PROTOCOL_UNKNOWN = 0x00000, + IR_PROTOCOL_RMAP = 0x00001, /* Ruwido rMAP */ + IR_PROTOCOL_RMAP_E = 0x00002, /* Ruwido rMAP with extension for MNC Ltd sp. z o.o. */ + IR_PROTOCOL_NRC17 = 0x00004, /* Nokia NRC17 */ + IR_PROTOCOL_JVC = 0x00008, /* JVC */ + IR_PROTOCOL_RCA = 0x00010, /* RCA */ + IR_PROTOCOL_PSD = 0x00020, /* Precision Squared (not yet supported) */ + IR_PROTOCOL_RC5 = 0x00040, /* Philips RC5 */ + IR_PROTOCOL_RCMM = 0x00080, /* Philips RCMM */ + IR_PROTOCOL_RECS80 = 0x00100, /* Philips RECS80 */ + IR_PROTOCOL_NEC = 0x00200, /* NEC */ + IR_PROTOCOL_NECE = 0x00400, /* NEC with 16 bit address capability */ + IR_PROTOCOL_SCA = 0x00800, /* Scientific Atlanta */ + IR_PROTOCOL_MATSUSHITA = 0x01000, /* Matsushita (Technics/Panasonics) */ + IR_PROTOCOL_SONY = 0x02000, /* Sony SIRC 12 bit */ + IR_PROTOCOL_SONY15 = 0x04000, /* Sony SIRC 15 bit */ + IR_PROTOCOL_SONY20 = 0x08000, /* Sony SIRC 20 bit */ + IR_PROTOCOL_SONY24 = 0x10000, /* Sony SIRC 24 bit */ + IR_PROTOCOL_ALL = 0x1FFFF +} ir_protocol_t; + +typedef enum +{ + FP_MODE_KEYS_DISABLED = 0, + FP_MODE_KEYS_ENABLED = 1 +} fp_mode_t; + +#define EVENT_KEY_UP 0 +#define EVENT_KEY_DOWN 1 +#define NEVIS_IR_DEVICE_NAME "IR_NEVIS" + +/*******************************************************************************/ +/* DEBUG options */ +/*******************************************************************************/ + +#define DBG_NONE 0x00000000 /* no debug at all */ + +#define DBG_IR_SYSTEM 0x00000001 /* IR: low level informations */ +#define DBG_IR_DECODE 0x00000002 /* IR: informations from the IR protocol decoder */ +#define DBG_OUTPUT_QUEUE 0x00000004 /* IR: show data from the outgoing queue (from driver to the client(s) ) */ +#define DBG_IR_FOPS 0x00000008 /* IR: informations about filoe operations (ioctl's) */ + +#define DBG_VFD_SYSTEM 0x00010000 /* VFD: low level informations */ +#define DBG_VFD_FOPS 0x00080000 /* VFD: informations about filoe operations (ioctl's) */ + +/*******************************************************************************/ +/* ioctl's */ +/*******************************************************************************/ + +/* set the IR-protocols to listen for. */ +#define IOC_IR_SET_PRI_PROTOCOL _IOW(0xDD, 1, ir_protocol_t) /* set the primary IR-protocol */ +#define IOC_IR_SET_SEC_PROTOCOL _IOW(0xDD, 2, ir_protocol_t) /* set the secondary IR-protocol */ + +/* some IR-protocols can handle different device addresses. */ +#define IOC_IR_SET_PRI_ADDRESS _IOW(0xDD, 3, unsigned int) /* set the primary IR-address */ +#define IOC_IR_SET_SEC_ADDRESS _IOW(0xDD, 4, unsigned int) /* set the secondary IR-address */ + +/* defines the delay time between two pulses in milliseconds */ +#define IOC_IR_SET_F_DELAY _IOW(0xDD, 5, unsigned int) /* set the delay time before the first repetition */ +#define IOC_IR_SET_X_DELAY _IOW(0xDD, 6, unsigned int) /* set the delay time between all other repetitions */ + +/* load key mappings to translate from raw IR to Linux Input */ +#define IOC_IR_SET_PRI_KEYMAP _IOW(0xDD, 7, unsigned short *) /* set the primary keymap [num entries],[entry 1],[entry 2],...,[entry n] (max 0xFFFF entries) */ +#define IOC_IR_SET_SEC_KEYMAP _IOW(0xDD, 8, unsigned short *) /* set the secondary keymap [num entries],[entry 1],[entry 2],...,[entry n] (max 0xFFFF entries) */ + +/* frontpanel button options */ +#define IOC_IR_SET_FP_MODE _IOW(0xDD, 9, fp_mode_t) /* enable/disable frontpanel buttons */ + +/* informative stuff */ +#define IOC_IR_GET_PROTOCOLS _IOR(0xDD, 10, ir_protocol_t) /* reports a bitmask of all supported ir_protocols */ + +#endif /* __NEVIS_IR_H__ */ diff --git a/lib/libcoolstream2/playback.h b/lib/libcoolstream2/playback.h new file mode 100644 index 000000000..95ea0884e --- /dev/null +++ b/lib/libcoolstream2/playback.h @@ -0,0 +1 @@ +#include "playback_cs.h" diff --git a/lib/libcoolstream2/playback_cs.h b/lib/libcoolstream2/playback_cs.h new file mode 100644 index 000000000..80ecb4ccd --- /dev/null +++ b/lib/libcoolstream2/playback_cs.h @@ -0,0 +1,68 @@ +/*******************************************************************************/ +/* */ +/* libcoolstream/playback_cs.h */ +/* Public header file for playback API */ +/* */ +/* (C) 2008 CoolStream International */ +/* */ +/* $Id:: $ */ +/*******************************************************************************/ +#ifndef __PLAYBACK_CS_H_ +#define __PLAYBACK_CS_H_ + +#include +#include + +typedef enum { + PLAYMODE_TS = 0, + PLAYMODE_FILE +} playmode_t; + +class cPlaybackData; + +typedef struct { + bool enabled; + uint16_t pid; + uint16_t ac3flags; + std::string lang; + std::string codec_name; +} playback_audio_pid_info_t; + +class cPlayback { +private: + cPlaybackData * pd; + + bool enabled; + bool paused; + bool playing; + int unit; + int nPlaybackFD; + int video_type; + int mSpeed; + playmode_t playMode; + // + void Attach(void); + void Detach(void); + bool SetAVDemuxChannel(bool On, bool Video = true, bool Audio = true); +public: + cPlayback(int num = 0); + ~cPlayback(); + + bool Open(playmode_t PlayMode); + void Close(void); + bool Start(char * filename, unsigned short vpid, int vtype, unsigned short apid, int audio_flag, unsigned int duration = 0); + bool Stop(void); + bool SetAPid(unsigned short pid, int audio_flag); + bool SetSpeed(int speed); + bool GetSpeed(int &speed) const; + bool GetPosition(int &position, int &duration); + bool GetOffset(off64_t &offset); + bool SetPosition(int position, bool absolute = false); + bool IsPlaying(void) const { return playing; } + bool IsEnabled(void) const { return enabled; } + void FindAllPids(playback_audio_pid_info_t *audiopids, uint16_t size, uint16_t *numpida); + void FindAllPids(uint16_t *apids, unsigned short *ac3flags, uint16_t *numpida, std::string *language); + +}; + +#endif // __PLAYBACK_CS_H_ diff --git a/lib/libcoolstream2/pwrmngr.h b/lib/libcoolstream2/pwrmngr.h new file mode 100644 index 000000000..2a59d0ae9 --- /dev/null +++ b/lib/libcoolstream2/pwrmngr.h @@ -0,0 +1,60 @@ +/*******************************************************************************/ +/* */ +/* libcoolstream/pwrmngr.h */ +/* Private header of the Powermanager API */ +/* */ +/* (C) 2010 CoolStream International */ +/* */ +/* $Id:: $ */ +/*******************************************************************************/ +#ifndef __PWRMNGR_H_ +#define __PWRMNGR_H_ + +// -- cCpuFreqManager ---------------------------------------------------------- + +class cCpuFreqManager { +private: + unsigned long startCpuFreq; + unsigned long delta; +public: + void Up(void); + void Down(void); + void Reset(void); + // + bool SetCpuFreq(unsigned long CpuFreq); + bool SetDelta(unsigned long Delta); + unsigned long GetCpuFreq(void); + unsigned long GetDelta(void); + // + cCpuFreqManager(void); + ~cCpuFreqManager(); +}; + +// -- cPowerManageger ---------------------------------------------------------- + +typedef enum { + PWR_INIT = 1, + PWR_FULL_ACTIVE, /* all devices/clocks up */ + PWR_ACTIVE_STANDBY, + PWR_PASSIVE_STANDBY, + PWR_INVALID +} PWR_STATE; + +class cPowerManager { +private: + bool init; + bool opened; + PWR_STATE powerState; + // + bool SetState(PWR_STATE PowerState); +public: + bool Open(void); + void Close(void); + // + bool SetStandby(bool Active, bool Passive); + // + cPowerManager(void); + virtual ~cPowerManager(); +}; + +#endif // __PWRMNGR_H__ diff --git a/lib/libcoolstream2/record_cs.h b/lib/libcoolstream2/record_cs.h new file mode 100644 index 000000000..4ef6f3df0 --- /dev/null +++ b/lib/libcoolstream2/record_cs.h @@ -0,0 +1,40 @@ +/*******************************************************************************/ +/* */ +/* libcoolstream/record_cs.h */ +/* Public header file for record API */ +/* */ +/* (C) 2008 CoolStream International */ +/* */ +/* $Id:: $ */ +/*******************************************************************************/ +#ifndef __RECORD_CS_H_ +#define __RECORD_CS_H_ + +#include + +class cRecordData; + +#define REC_STATUS_OK 0 +#define REC_STATUS_SLOW 1 +#define REC_STATUS_OVERFLOW 2 + +class cRecord { +private: + cRecordData * rd; + bool enabled; + int unit; + +public: + cRecord(int num = 0); + ~cRecord(); + + bool Open(); + void Close(void); + bool Start(int fd, unsigned short vpid, unsigned short * apids, int numapids, uint64_t chid); + bool Stop(void); + bool AddPid(unsigned short pid); + int GetStatus(); + void ResetStatus(); +}; + +#endif // __RECORD_CS_H_ diff --git a/lib/libcoolstream2/tsrouter.h b/lib/libcoolstream2/tsrouter.h new file mode 100644 index 000000000..613b0ffb1 --- /dev/null +++ b/lib/libcoolstream2/tsrouter.h @@ -0,0 +1,37 @@ +#ifndef __TSROUTER_H +#define __TSROUTER_H + +typedef struct _tsrouter_hsdp_config { + u8 port; + u32 port_ctrl; + u32 pkt_ctrl; + u32 clk_ctrl; + u32 mux; + u32 int_en; + /* more ? */ +} tsrouter_hsdp_config_t; + +typedef struct _tsrouter_tsp_config { + u8 port; + u32 port_ctrl; + u32 mux; +} tsrouter_tsp_config_t; + +extern int cs_tsrouter_init(void); +extern void cs_tsrouter_exit(void); + +extern void cs_tsx_hsdp_init_port(u32 port, u32 ctrl); +extern void cs_tsx_tsp_init_port(u32 port, u32 hsdp_port); + +extern void cs_tsx_hsdp_get_port_config(tsrouter_hsdp_config_t *conf); +extern void cs_tsx_tsp_get_port_config(tsrouter_tsp_config_t *conf); + +extern void cs_tsx_hsdp_set_port_config(const tsrouter_hsdp_config_t *conf); +extern void cs_tsx_tsp_set_port_config(const tsrouter_tsp_config_t *conf); + +extern void cs_tsx_hsdp_get_port_pll(unsigned int port, unsigned int *pll_index); +extern void cs_tsx_hsdp_set_port_pll(unsigned int port, unsigned int pll_index); + +extern void cs_tsx_hsdp_get_port_speed(unsigned int port, unsigned int *speed); +extern void cs_tsx_hsdp_set_port_speed(unsigned int port, unsigned int speed); +#endif /* __TSROUTER_H */ diff --git a/lib/libcoolstream2/video_cs.h b/lib/libcoolstream2/video_cs.h new file mode 100644 index 000000000..1d53e6268 --- /dev/null +++ b/lib/libcoolstream2/video_cs.h @@ -0,0 +1,276 @@ +/*******************************************************************************/ +/* */ +/* libcoolstream/video_cs.h */ +/* Public header file for video API */ +/* */ +/* (C) 2008 CoolStream International */ +/* */ +/* $Id:: $ */ +/*******************************************************************************/ +#ifndef __VIDEO_CS_H_ +#define __VIDEO_CS_H_ + +#include +#include + +#include "cs_types.h" + +#define CS_MAX_VIDEO_DECODERS 16 + +#ifndef CS_VIDEO_PDATA +#define CS_VIDEO_PDATA void +#endif + +typedef enum { + // Video modes + ANALOG_xD_CVBS = (1 << 0), // Turns off fastblank on SCART + ANALOG_SD_RGB = (1 << 1), // Output SD in RGB format + ANALOG_SD_YPRPB = (1 << 2), // Output SD in YPbPr format (component) + ANALOG_HD_RGB = (1 << 3), // Output HD in RGB format + ANALOG_HD_YPRPB = (1 << 4), // Output HD in YPbPr format (component) + ANALOG_xD_AUTO = (1 << 5), // Output is automatically determined based on + // content. (TANK/Trinity only) + // Output types + ANALOG_xD_SCART = (1 << 8), // Output is SCART + ANALOG_xD_CINCH = (1 << 9), // Output is Cinch + ANALOG_xD_BOTH = (3 << 8), // Output cannot individually control scart, cinch outputs + // due to limited amount of DACs (ie TANK, Trinity) +} analog_mode_t; + +#define ANALOG_MODE(conn, def, sys) (ANALOG_##def##_##sys | ANALOG_xD_##conn) +#define ANALOG_MODE_VIDEO(mode) (mode & ((1 << 6) - 1)) +#define ANALOG_MODE_OUTPUT(mode) (mode & ANALOG_xD_BOTH) +#define ANALOG_MODE_HD(mode) (mode & (ANALOG_HD_RGB | ANALOG_HD_YPRPB)) + +typedef enum +{ + VIDEO_FORMAT_MPEG2 = 0, + VIDEO_FORMAT_MPEG4, /* H264 */ + VIDEO_FORMAT_VC1, + VIDEO_FORMAT_JPEG, + VIDEO_FORMAT_GIF, + VIDEO_FORMAT_PNG, + VIDEO_FORMAT_DIVX,/* DIVX 3.11 */ + VIDEO_FORMAT_MPEG4PART2,/* MPEG4 SVH, MPEG4 SP, MPEG4 ASP, DIVX4,5,6 */ + VIDEO_FORMAT_REALVIDEO8, + VIDEO_FORMAT_REALVIDEO9, + VIDEO_FORMAT_ON2_VP6, + VIDEO_FORMAT_ON2_VP8, + VIDEO_FORMAT_SORENSON_SPARK, + VIDEO_FORMAT_H263, + VIDEO_FORMAT_H263_ENCODER, + VIDEO_FORMAT_H264_ENCODER, + VIDEO_FORMAT_MPEG4PART2_ENCODER, + VIDEO_FORMAT_AVS, + VIDEO_FORMAT_VIP656, + VIDEO_FORMAT_UNSUPPORTED +} VIDEO_FORMAT; + +typedef enum { + VIDEO_SD = 0, + VIDEO_HD, + VIDEO_120x60i, + VIDEO_320x240i, + VIDEO_1440x800i, + VIDEO_360x288i +} VIDEO_DEFINITION; + +typedef enum { + VIDEO_FRAME_RATE_23_976 = 0, + VIDEO_FRAME_RATE_24, + VIDEO_FRAME_RATE_25, + VIDEO_FRAME_RATE_29_97, + VIDEO_FRAME_RATE_30, + VIDEO_FRAME_RATE_50, + VIDEO_FRAME_RATE_59_94, + VIDEO_FRAME_RATE_60 +} VIDEO_FRAME_RATE; + +typedef enum { + DISPLAY_AR_1_1, + DISPLAY_AR_4_3, + DISPLAY_AR_14_9, + DISPLAY_AR_16_9, + DISPLAY_AR_20_9, + DISPLAY_AR_RAW +} DISPLAY_AR; + +typedef enum { + DISPLAY_AR_MODE_PANSCAN = 0, + DISPLAY_AR_MODE_LETTERBOX, + DISPLAY_AR_MODE_NONE, + DISPLAY_AR_MODE_PANSCAN2 +} DISPLAY_AR_MODE; + +typedef enum { + VIDEO_DB_DR_NEITHER = 0, + VIDEO_DB_ON, + VIDEO_DB_DR_BOTH +} VIDEO_DB_DR; + +typedef enum { + VIDEO_PLAY_STILL = 0, + VIDEO_PLAY_CLIP, + VIDEO_PLAY_TRICK, + VIDEO_PLAY_MOTION, + VIDEO_PLAY_MOTION_NO_SYNC +} VIDEO_PLAY_MODE; + +typedef enum { + VIDEO_STD_NTSC, + VIDEO_STD_SECAM, + VIDEO_STD_PAL, + VIDEO_STD_480P, + VIDEO_STD_576P, + VIDEO_STD_720P60, + VIDEO_STD_1080I60, + VIDEO_STD_720P50, + VIDEO_STD_1080I50, + VIDEO_STD_1080P30, + VIDEO_STD_1080P24, + VIDEO_STD_1080P25, + VIDEO_STD_1080P50, + VIDEO_STD_1080P60, + VIDEO_STD_AUTO, + VIDEO_STD_MAX = VIDEO_STD_AUTO +} VIDEO_STD; + +typedef enum { + VIDEO_HDMI_CEC_MODE_OFF = 0, + VIDEO_HDMI_CEC_MODE_TUNER, + VIDEO_HDMI_CEC_MODE_RECORDER +} VIDEO_HDMI_CEC_MODE; + +typedef enum +{ + VIDEO_CONTROL_BRIGHTNESS = 0, + VIDEO_CONTROL_CONTRAST, + VIDEO_CONTROL_SATURATION, + VIDEO_CONTROL_HUE, + VIDEO_CONTROL_SHARPNESS, + VIDEO_CONTROL_MAX = VIDEO_CONTROL_SHARPNESS +} VIDEO_CONTROL; + +class cDemux; +class cAudio; + +class cVideo { +friend class cAudio; +private: + static cVideo *instance[CS_MAX_VIDEO_DECODERS]; + + unsigned int unit; + CS_VIDEO_PDATA *privateData; + VIDEO_FORMAT streamType; + VIDEO_DEFINITION VideoDefinition; + DISPLAY_AR DisplayAR; + VIDEO_PLAY_MODE playMode; + AVSYNC_TYPE syncMode; + DISPLAY_AR_MODE ARMode; + VIDEO_DB_DR eDbDr; + DISPLAY_AR PictureAR; + VIDEO_FRAME_RATE FrameRate; + VIDEO_HDMI_CEC_MODE hdmiCECMode; + bool Interlaced; + unsigned int uVPPDisplayDelay; + unsigned int uVideoPTSDelay; + int StcPts; + bool started; + unsigned int bStandby; + bool blank; + bool playing; + bool auto_format; + int uFormatIndex; + bool vbi_started; + bool receivedVPPDelay; + bool receivedVideoDelay; + int cfd; // control driver fd + analog_mode_t analog_mode_cinch; + analog_mode_t analog_mode_scart; + fp_icon mode_icon; + cDemux *demux; + // + int SelectAutoFormat(); + void ScalePic(); + cVideo(unsigned int Unit); +public: + /* constructor & destructor */ + cVideo(int mode, void * hChannel, void * hBuffer); + ~cVideo(void); + + void * GetVPP(void); + void * GetTVEnc(); + void * GetTVEncSD(); + void * GetHandle(); + + void SetAudioHandle(void * handle); + /* aspect ratio */ + int getAspectRatio(void); + void getPictureInfo(int &width, int &height, int &rate); + int setAspectRatio(int aspect, int mode); + + /* cropping mode */ + int getCroppingMode(void); + int setCroppingMode(void); + + /* stream source */ + int getSource(void); + int setSource(void); + int GetStreamType(void); + + /* blank on freeze */ + int getBlank(void); + int setBlank(int enable); + + /* get play state */ + int getPlayState(void); + void SetVPPDelay(unsigned int delay) { uVPPDisplayDelay = delay;}; + void SetVideoDelay(unsigned int delay) { uVideoPTSDelay = delay;}; + /* Notification handlers */ + void HandleVPPMessage(int Event, void *pData); + void HandleVideoMessage(void * hHandle, int Event, void *pData); + void HandleEncoderMessage(void *hHandle, int Event, void *pData); + VIDEO_DEFINITION GetVideoDef(void) { return VideoDefinition; } + + /* change video play state */ + int Prepare(void * PcrChannel, unsigned short PcrPid, unsigned short VideoPid, void * hChannel = NULL); + int Start(void * PcrChannel, unsigned short PcrPid, unsigned short VideoPid, void * hChannel = NULL); + int Stop(bool Blank = true); + bool Pause(void); + bool Resume(void); + int LipsyncAdjust(); + int64_t GetPTS(void); + int Flush(void); + + /* set video_system */ + int SetVideoSystem(int video_system, bool remember = true); + int SetStreamType(VIDEO_FORMAT type); + void SetSyncMode(AVSYNC_TYPE mode); + bool SetCECMode(VIDEO_HDMI_CEC_MODE Mode); + void SetCECAutoView(bool OnOff); + void SetCECAutoStandby(bool OnOff); + void ShowPicture(const char * fname); + void StopPicture(); + void Standby(bool bOn); + void Pig(int x, int y, int w, int h, int osd_w = 1064, int osd_h = 600); + void SetControl(int num, int val); + bool ReceivedVPPDelay(void) { return receivedVPPDelay; } + bool ReceivedVideoDelay(void) { return receivedVideoDelay; } + void SetReceivedVPPDelay(bool Received) { receivedVPPDelay = Received; } + void SetReceivedVideoDelay(bool Received) { receivedVideoDelay = Received; } + void SetFastBlank(bool onoff); + void SetTVAV(bool onoff); + void SetWideScreen(bool onoff); + void SetVideoMode(analog_mode_t mode); + void SetDBDR(int dbdr); + void SetAutoModes(int modes[VIDEO_STD_MAX]); + int OpenVBI(int num); + int CloseVBI(void); + int StartVBI(unsigned short pid); + int StopVBI(void); + bool GetScreenImage(unsigned char * &data, int &xres, int &yres, bool get_video = true, bool get_osd = false, bool scale_to_video = false); + void SetDemux(cDemux *Demux); + static cVideo *GetDecoder(unsigned int Unit); +}; + +#endif // __VIDEO_CS_H_ diff --git a/lib/libdvbsub/Makefile.am b/lib/libdvbsub/Makefile.am index fcdfdd216..8e789189b 100644 --- a/lib/libdvbsub/Makefile.am +++ b/lib/libdvbsub/Makefile.am @@ -5,8 +5,12 @@ INCLUDES = \ -I$(top_srcdir)/src/zapit/include if BOXTYPE_COOL +if BOXMODEL_APOLLO +INCLUDES += -I$(top_srcdir)/lib/libcoolstream2 +else INCLUDES += -I$(top_srcdir)/lib/libcoolstream endif +endif if USE_STB_HAL INCLUDES += -I$(STB_HAL_INC) endif diff --git a/lib/libdvbsub/dvbsubtitle.cpp b/lib/libdvbsub/dvbsubtitle.cpp index 59d501299..ac8941605 100644 --- a/lib/libdvbsub/dvbsubtitle.cpp +++ b/lib/libdvbsub/dvbsubtitle.cpp @@ -229,8 +229,11 @@ cDvbSubtitleConverter::cDvbSubtitleConverter(void) cDvbSubtitleConverter::~cDvbSubtitleConverter() { - avcodec_close(avctx); - av_free(avctx); + if (avctx) { + avcodec_close(avctx); + av_free(avctx); + avctx = NULL; + } delete bitmaps; } diff --git a/lib/libdvbsub/tools.h b/lib/libdvbsub/tools.h index 24c72bcfb..caa9bbe14 100644 --- a/lib/libdvbsub/tools.h +++ b/lib/libdvbsub/tools.h @@ -13,7 +13,6 @@ #include #include #include -#include #include #include #include diff --git a/lib/libnet/network_interfaces.cpp b/lib/libnet/network_interfaces.cpp index f97b2b9fe..d1107887f 100644 --- a/lib/libnet/network_interfaces.cpp +++ b/lib/libnet/network_interfaces.cpp @@ -34,7 +34,7 @@ * */ -bool read_file(const std::string filename, std::list &line) +bool read_file(const std::string &filename, std::list &line) { std::string s; std::ifstream in(filename.c_str()); @@ -50,7 +50,7 @@ bool read_file(const std::string filename, std::list &line) return true; } -bool write_file(const std::string filename, const std::list line) +bool write_file(const std::string &filename, const std::list &line) { std::ofstream out(filename.c_str()); @@ -63,7 +63,7 @@ bool write_file(const std::string filename, const std::list line) return true; } -std::list::iterator add_attributes(const std::map attribute, std::list &line, std::list::iterator here) +std::list::iterator add_attributes(const std::map &attribute, std::list &line, std::list::iterator here) { for (std::map::const_iterator it = attribute.begin(); it != attribute.end(); ++it) { @@ -74,7 +74,7 @@ std::list::iterator add_attributes(const std::map attribute) +bool write_interface(const std::string &filename, const std::string &name, const bool automatic_start, const std::string &family, const std::string &method, const std::map &attribute) { std::string s; std::list line; @@ -215,7 +215,7 @@ bool write_interface(const std::string filename, const std::string name, const b return write_file(filename, line); } -bool read_interface(const std::string filename, const std::string name, bool &automatic_start, std::string &family, std::string &method, std::map &attribute) +bool read_interface(const std::string &filename, const std::string &name, bool &automatic_start, std::string &family, std::string &method, std::map &attribute) { std::string s; std::string t; @@ -309,7 +309,7 @@ bool read_interface(const std::string filename, const std::string name, bool &au return true; } -bool getInetAttributes(const std::string name, bool &automatic_start, std::string &address, std::string &netmask, std::string &broadcast, std::string &gateway) +bool getInetAttributes(const std::string &name, bool &automatic_start, std::string &address, std::string &netmask, std::string &broadcast, std::string &gateway) { std::string family; std::string method; @@ -343,14 +343,14 @@ bool getInetAttributes(const std::string name, bool &automatic_start, std::strin return true; } -bool addLoopbackDevice(const std::string name, const bool automatic_start) +bool addLoopbackDevice(const std::string &name, const bool automatic_start) { std::map attribute; return write_interface("/etc/network/interfaces", name, automatic_start, "inet", "loopback", attribute); } -bool setStaticAttributes(const std::string name, const bool automatic_start, const std::string address, const std::string netmask, const std::string broadcast, const std::string gateway, bool wireless) +bool setStaticAttributes(const std::string &name, const bool automatic_start, const std::string &address, const std::string &netmask, const std::string &broadcast, const std::string &gateway, bool wireless) { std::map attribute; @@ -371,7 +371,7 @@ bool setStaticAttributes(const std::string name, const bool automatic_start, con return write_interface("/etc/network/interfaces", name, automatic_start, "inet", "static", attribute); } -bool setDhcpAttributes(const std::string name, const bool automatic_start, bool wireless) +bool setDhcpAttributes(const std::string &name, const bool automatic_start, bool wireless) { std::map attribute; char hostname[100]; diff --git a/lib/libnet/network_interfaces.h b/lib/libnet/network_interfaces.h index a9e526159..457bac3b8 100644 --- a/lib/libnet/network_interfaces.h +++ b/lib/libnet/network_interfaces.h @@ -24,12 +24,12 @@ #include -bool getInetAttributes(const std::string name, bool &automatic_start, std::string &address, std::string &netmask, std::string &broadcast, std::string &gateway); +bool getInetAttributes(const std::string &name, bool &automatic_start, std::string &address, std::string &netmask, std::string &broadcast, std::string &gateway); -bool addLoopbackDevice(const std::string name, const bool automatic_start); +bool addLoopbackDevice(const std::string &name, const bool automatic_start); -bool setStaticAttributes(const std::string name, const bool automatic_start, const std::string address, const std::string netmask, const std::string broadcast, const std::string gateway, bool wireless = false); +bool setStaticAttributes(const std::string &name, const bool automatic_start, const std::string &address, const std::string &netmask, const std::string &broadcast, const std::string &gateway, bool wireless = false); -bool setDhcpAttributes(const std::string name, const bool automatic_start, bool wireless = false); +bool setDhcpAttributes(const std::string &name, const bool automatic_start, bool wireless = false); #endif /* __network_interfaces_h__ */ diff --git a/lib/libtuxtxt/Makefile.am b/lib/libtuxtxt/Makefile.am index f4ac824d9..33ba802a9 100644 --- a/lib/libtuxtxt/Makefile.am +++ b/lib/libtuxtxt/Makefile.am @@ -8,8 +8,13 @@ INCLUDES = \ $(FREETYPE_CFLAGS) if BOXTYPE_COOL +if BOXMODEL_APOLLO +INCLUDES += -I$(top_srcdir)/lib/libcoolstream2 +else INCLUDES += -I$(top_srcdir)/lib/libcoolstream endif +endif + if USE_STB_HAL INCLUDES += -I$(STB_HAL_INC) endif diff --git a/src/Makefile.am b/src/Makefile.am index 83ac19602..8a18e6cec 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -19,8 +19,12 @@ INCLUDES = \ @LIBCS_CFLAGS@ if BOXTYPE_COOL +if BOXMODEL_APOLLO +INCLUDES += -I$(top_srcdir)/lib/libcoolstream2 +else INCLUDES += -I$(top_srcdir)/lib/libcoolstream endif +endif if USE_STB_HAL INCLUDES += -I$(STB_HAL_INC) endif @@ -62,6 +66,7 @@ neutrino_LDADD = \ gui/libneutrino_gui2.a \ gui/components/libneutrino_gui_components.a \ eitd/libsectionsd.a \ + gui/volumebar.o \ driver/libneutrino_driver.a \ driver/audiodec/libneutrino_driver_audiodec.a \ driver/libneutrino_driver_netfile.a \ @@ -113,9 +118,12 @@ endif if BOXTYPE_COOL neutrino_LDADD += \ - $(top_builddir)/lib/libcoolstream/libhwcaps.a \ - -lcoolstream-mt \ - -lnxp + $(top_builddir)/lib/libcoolstream/libhwcaps.a +neutrino_LDADD += -lcoolstream-mt -lca-sc +if ENABLE_TMSDK +else +neutrino_LDADD += -lnxp +endif bin_PROGRAMS += drivertool diff --git a/src/daemonc/Makefile.am b/src/daemonc/Makefile.am index 33d226ef7..b2e233754 100644 --- a/src/daemonc/Makefile.am +++ b/src/daemonc/Makefile.am @@ -13,8 +13,12 @@ INCLUDES = \ @FREETYPE_CFLAGS@ if BOXTYPE_COOL +if BOXMODEL_APOLLO +INCLUDES += -I$(top_srcdir)/lib/libcoolstream2 +else INCLUDES += -I$(top_srcdir)/lib/libcoolstream endif +endif if USE_STB_HAL INCLUDES += -I$(STB_HAL_INC) endif diff --git a/src/driver/Makefile.am b/src/driver/Makefile.am index a8dd695aa..c6fb0138f 100644 --- a/src/driver/Makefile.am +++ b/src/driver/Makefile.am @@ -43,8 +43,11 @@ if BOXTYPE_COOL libneutrino_driver_a_SOURCES += \ vfd.cpp -INCLUDES += \ - -I$(top_srcdir)/lib/libcoolstream +if BOXMODEL_APOLLO +INCLUDES += -I$(top_srcdir)/lib/libcoolstream2 +else +INCLUDES += -I$(top_srcdir)/lib/libcoolstream +endif endif if BOXTYPE_TRIPLE libneutrino_driver_a_SOURCES += \ diff --git a/src/driver/audiodec/Makefile.am b/src/driver/audiodec/Makefile.am index 42580acbb..9e822fd28 100644 --- a/src/driver/audiodec/Makefile.am +++ b/src/driver/audiodec/Makefile.am @@ -12,8 +12,12 @@ INCLUDES = \ @VORBISIDEC_CFLAGS@ if BOXTYPE_COOL +if BOXMODEL_APOLLO +INCLUDES += -I$(top_srcdir)/lib/libcoolstream2 +else INCLUDES += -I$(top_srcdir)/lib/libcoolstream endif +endif if USE_STB_HAL INCLUDES += -I$(STB_HAL_INC) endif diff --git a/src/driver/fade.cpp b/src/driver/fade.cpp index 3368d97ca..85a940e0c 100644 --- a/src/driver/fade.cpp +++ b/src/driver/fade.cpp @@ -26,6 +26,11 @@ #include #include #include +#include + +#ifdef HAVE_COOL_HARDWARE +#include +#endif COSDFader::COSDFader(unsigned char & alpha) : max_alpha(alpha) @@ -49,7 +54,12 @@ void COSDFader::StartFadeIn() fadeIn = true; fadeOut = false; fadeValue = 100; +#ifdef BOXMODEL_APOLLO + frameBuffer->setBlendMode(CNXTFB_BLEND_MODE_UNIFORM_ALPHA); // Global alpha multiplied with pixel alpha +#else frameBuffer->setBlendMode(2); // Global alpha multiplied with pixel alpha +#endif + frameBuffer->setBlendLevel(fadeValue); fadeTimer = g_RCInput->addTimer( FADE_TIME, false ); } @@ -65,7 +75,11 @@ bool COSDFader::StartFadeOut() if ((!fadeOut) && g_settings.widget_fade) { fadeOut = true; fadeTimer = g_RCInput->addTimer( FADE_TIME, false ); +#ifdef BOXMODEL_APOLLO + frameBuffer->setBlendMode(CNXTFB_BLEND_MODE_UNIFORM_ALPHA); // Global alpha multiplied with pixel alpha +#else frameBuffer->setBlendMode(2); // Global alpha multiplied with pixel alpha +#endif ret = true; } return ret; @@ -75,7 +89,12 @@ void COSDFader::Stop() { if ( fadeIn || fadeOut ) { g_RCInput->killTimer(fadeTimer); - frameBuffer->setBlendMode(1); // Set back to per pixel alpha + usleep(40000); +#ifdef BOXMODEL_APOLLO + frameBuffer->setBlendMode(CNXTFB_BLEND_MODE_PER_PIXEL); // Global alpha multiplied with pixel alpha +#else + frameBuffer->setBlendMode(1); // Global alpha multiplied with pixel alpha +#endif fadeIn = fadeOut = false; } } @@ -99,7 +118,11 @@ bool COSDFader::Fade() fadeValue = max_alpha; g_RCInput->killTimer (fadeTimer); fadeIn = false; - frameBuffer->setBlendMode(1); // Set back to per pixel alpha +#ifdef BOXMODEL_APOLLO + frameBuffer->setBlendMode(CNXTFB_BLEND_MODE_PER_PIXEL); // Global alpha multiplied with pixel alpha +#else + frameBuffer->setBlendMode(1); // Global alpha multiplied with pixel alpha +#endif } else frameBuffer->setBlendLevel(fadeValue); } diff --git a/src/driver/framebuffer.cpp b/src/driver/framebuffer.cpp index fc265dee9..e5230a0e3 100644 --- a/src/driver/framebuffer.cpp +++ b/src/driver/framebuffer.cpp @@ -2,8 +2,7 @@ Neutrino-GUI - DBoxII-Project Copyright (C) 2001 Steffen Hehn 'McClean' - 2003 thegoodguy - Copyright (C) 2007-2012 Stefan Seyfried + 2003 thegoodguy License: GPL @@ -39,14 +38,6 @@ #include -//#include - -#ifdef USE_OPENGL -#include -#include "rcinput.h" -#include "glthread.h" -#endif - #include #include #include @@ -63,6 +54,14 @@ extern CPictureViewer * g_PicViewer; #define BACKGROUNDIMAGEWIDTH 720 +#ifdef BOXMODEL_APOLLO +#ifndef FB_HW_ACCELERATION +#define FB_HW_ACCELERATION +#endif +#endif +#if defined(FB_HW_ACCELERATION) && defined(USE_NEVIS_GXA) +#error +#endif //#undef USE_NEVIS_GXA //FIXME /*******************************************************************************/ #ifdef USE_NEVIS_GXA @@ -83,35 +82,37 @@ extern CPictureViewer * g_PicViewer; #undef GXA_CONTENT_ID_REG #endif -#define GXA_POINT(x, y) (((y) & 0x0FFF) << 16) | ((x) & 0x0FFF) -#define GXA_SRC_BMP_SEL(x) (x << 8) -#define GXA_DST_BMP_SEL(x) (x << 5) -#define GXA_PARAM_COUNT(x) (x << 2) +#define GXA_POINT(x, y) (((y) & 0x0FFF) << 16) | ((x) & 0x0FFF) +#define GXA_SRC_BMP_SEL(x) (x << 8) +#define GXA_DST_BMP_SEL(x) (x << 5) +#define GXA_PARAM_COUNT(x) (x << 2) #define GXA_CMD_REG 0x001C #define GXA_FG_COLOR_REG 0x0020 -#define GXA_BG_COLOR_REG 0x0024 -#define GXA_LINE_CONTROL_REG 0x0038 -#define GXA_BMP2_TYPE_REG 0x0050 -#define GXA_BMP2_ADDR_REG 0x0054 +#define GXA_BG_COLOR_REG 0x0024 +#define GXA_LINE_CONTROL_REG 0x0038 +#define GXA_BMP2_TYPE_REG 0x0050 +#define GXA_BMP2_ADDR_REG 0x0054 #define GXA_DEPTH_REG 0x00F4 -#define GXA_CONTENT_ID_REG 0x0144 +#define GXA_CONTENT_ID_REG 0x0144 +#define GXA_BLT_CONTROL_REG 0x0034 -#define GXA_CMD_BLT 0x00010800 -#define GXA_CMD_NOT_ALPHA 0x00011000 -#define GXA_CMD_NOT_TEXT 0x00018000 +#define GXA_CMD_BLT 0x00010800 +#define GXA_CMD_NOT_ALPHA 0x00011000 +#define GXA_CMD_NOT_TEXT 0x00018000 #define GXA_CMD_QMARK 0x00001000 -#define GXA_BMP1_TYPE_REG 0x0048 -#define GXA_BMP1_ADDR_REG 0x004C +#define GXA_BMP1_TYPE_REG 0x0048 +#define GXA_BMP1_ADDR_REG 0x004C +#define GXA_BMP7_TYPE_REG 0x0078 -#define GXA_BLEND_CFG_REG 0x003C -#define GXA_CFG_REG 0x0030 -#define GXA_CFG2_REG 0x00FC +#define GXA_BLEND_CFG_REG 0x003C +#define GXA_CFG_REG 0x0030 +#define GXA_CFG2_REG 0x00FC /* static unsigned int _read_gxa(volatile unsigned char *base_addr, unsigned int offset) { - return *(volatile unsigned int *)(base_addr + offset); + return *(volatile unsigned int *)(base_addr + offset); } */ @@ -119,9 +120,9 @@ static unsigned int _mark = 0; static void _write_gxa(volatile unsigned char *base_addr, unsigned int offset, unsigned int value) { - while( (*(volatile unsigned int *)(base_addr + GXA_DEPTH_REG)) & 0x40000000) - {}; - *(volatile unsigned int *)(base_addr + offset) = value; + while( (*(volatile unsigned int *)(base_addr + GXA_DEPTH_REG)) & 0x40000000) + {}; + *(volatile unsigned int *)(base_addr + offset) = value; } /* this adds a tagged marker into the GXA queue. Once this comes out @@ -156,37 +157,16 @@ void CFrameBuffer::waitForIdle(void) } #endif /* USE_NEVIS_GXA */ -#if HAVE_TRIPLEDRAGON -#include -#include -extern IDirectFB *dfb; -extern IDirectFBSurface *dfbdest; -extern int gfxfd; -void CFrameBuffer::waitForIdle(void) -{ -#if 0 - struct timeval ts, te; - gettimeofday(&ts, NULL); -#endif - /* does not work: DFBResult r = dfb->WaitForSync(dfb); */ - ioctl(gfxfd, STB04GFX_ENGINE_SYNC); -#if 0 - gettimeofday(&te, NULL); - printf("STB04GFX_ENGINE_SYNC took %lld us\n", (te.tv_sec * 1000000LL + te.tv_usec) - (ts.tv_sec * 1000000LL + ts.tv_usec)); -#endif -} -#endif - /*******************************************************************************/ static uint8_t * virtual_fb = NULL; inline unsigned int make16color(uint16_t r, uint16_t g, uint16_t b, uint16_t t, - uint32_t /*rl*/ = 0, uint32_t /*ro*/ = 0, - uint32_t /*gl*/ = 0, uint32_t /*go*/ = 0, - uint32_t /*bl*/ = 0, uint32_t /*bo*/ = 0, - uint32_t /*tl*/ = 0, uint32_t /*to*/ = 0) + uint32_t /*rl*/ = 0, uint32_t /*ro*/ = 0, + uint32_t /*gl*/ = 0, uint32_t /*go*/ = 0, + uint32_t /*bl*/ = 0, uint32_t /*bo*/ = 0, + uint32_t /*tl*/ = 0, uint32_t /*to*/ = 0) { - return ((t << 24) & 0xFF000000) | ((r << 8) & 0xFF0000) | ((g << 0) & 0xFF00) | (b >> 8 & 0xFF); + return ((t << 24) & 0xFF000000) | ((r << 8) & 0xFF0000) | ((g << 0) & 0xFF00) | (b >> 8 & 0xFF); } CFrameBuffer::CFrameBuffer() @@ -207,20 +187,15 @@ CFrameBuffer::CFrameBuffer() backgroundFilename = ""; fd = 0; tty = 0; - bpp = 0; - locked = false; m_transparent_default = CFrameBuffer::TM_BLACK; // TM_BLACK: Transparency when black content ('pseudo' transparency) // TM_NONE: No 'pseudo' transparency // TM_INI: Transparency depends on g_settings.infobar_alpha ??? - m_transparent = m_transparent_default; + m_transparent = m_transparent_default; //FIXME: test memset(red, 0, 256*sizeof(__u16)); memset(green, 0, 256*sizeof(__u16)); memset(blue, 0, 256*sizeof(__u16)); memset(trans, 0, 256*sizeof(__u16)); -#ifdef USE_OPENGL - mpGLThreadObj = NULL; -#endif } CFrameBuffer* CFrameBuffer::getInstance() @@ -239,49 +214,22 @@ CFrameBuffer* CFrameBuffer::getInstance() #ifdef USE_NEVIS_GXA void CFrameBuffer::setupGXA(void) { - // We (re)store the GXA regs here in case DFB override them and was not - // able to restore them. - _write_gxa(gxa_base, GXA_BMP2_TYPE_REG, (3 << 16) | screeninfo.xres); - _write_gxa(gxa_base, GXA_BMP2_ADDR_REG, (unsigned int) fix.smem_start); - _write_gxa(gxa_base, GXA_BLEND_CFG_REG, 0x00089064); + // We (re)store the GXA regs here in case DFB override them and was not + // able to restore them. + _write_gxa(gxa_base, GXA_BMP2_TYPE_REG, (3 << 16) | screeninfo.xres); + _write_gxa(gxa_base, GXA_BMP2_ADDR_REG, (unsigned int) fix.smem_start); + _write_gxa(gxa_base, GXA_BLEND_CFG_REG, 0x00089064); // TODO check mono-flip, bit 8 - _write_gxa(gxa_base, GXA_CFG_REG, 0x100 | (1 << 12) | (1 << 29)); - _write_gxa(gxa_base, GXA_CFG2_REG, 0x1FF); + _write_gxa(gxa_base, GXA_CFG_REG, 0x100 | (1 << 12) | (1 << 29)); + _write_gxa(gxa_base, GXA_CFG2_REG, 0x1FF); _write_gxa(gxa_base, GXA_BG_COLOR_REG, (unsigned int) backgroundColor); + _write_gxa(gxa_base, GXA_BMP7_TYPE_REG, (3 << 16) | screeninfo.xres | (1 << 27)); } #endif void CFrameBuffer::init(const char * const fbDevice) { - int tr = 0xFF; + int tr = 0xFF; -#ifdef USE_OPENGL - fd = -1; - if(!mpGLThreadObj) - { - screeninfo.bits_per_pixel = 32; - screeninfo.xres = 720; - screeninfo.xres_virtual = screeninfo.xres; - screeninfo.yres = 576; - screeninfo.yres_virtual = screeninfo.yres; - screeninfo.bits_per_pixel = 32; - screeninfo.blue.length = 8; - screeninfo.blue.offset = 0; - screeninfo.green.length = 8; - screeninfo.green.offset = 8; - screeninfo.red.length = 8; - screeninfo.red.offset = 16; - screeninfo.transp.length = 8; - screeninfo.transp.offset = 24; - mpGLThreadObj = new GLThreadObj(screeninfo.xres, screeninfo.yres); - if(mpGLThreadObj) - { /* kick off the GL thread for the window */ - mpGLThreadObj->Start(); - mpGLThreadObj->waitInit(); - } - } - lfb = reinterpret_cast(mpGLThreadObj->getOSDBuffer()); - memset(lfb, 0x7f, screeninfo.xres * screeninfo.yres * 4); -#else fd = open(fbDevice, O_RDWR); if(!fd) fd = open(fbDevice, O_RDWR); @@ -331,33 +279,32 @@ void CFrameBuffer::init(const char * const fbDevice) printf("smem_start %x\n", smem_start); setupGXA(); -#endif /* USE_NEVIS_GXA */ -#endif /* USE_OPENGL */ +#endif cache_size = 0; - /* Windows Colors */ - paletteSetColor(0x1, 0x010101, tr); - paletteSetColor(0x2, 0x800000, tr); - paletteSetColor(0x3, 0x008000, tr); - paletteSetColor(0x4, 0x808000, tr); - paletteSetColor(0x5, 0x000080, tr); - paletteSetColor(0x6, 0x800080, tr); - paletteSetColor(0x7, 0x008080, tr); - paletteSetColor(0x8, 0xA0A0A0, tr); - paletteSetColor(0x9, 0x505050, tr); - paletteSetColor(0xA, 0xFF0000, tr); - paletteSetColor(0xB, 0x00FF00, tr); - paletteSetColor(0xC, 0xFFFF00, tr); - paletteSetColor(0xD, 0x0000FF, tr); - paletteSetColor(0xE, 0xFF00FF, tr); - paletteSetColor(0xF, 0x00FFFF, tr); - paletteSetColor(0x10, 0xFFFFFF, tr); - paletteSetColor(0x11, 0x000000, tr); - paletteSetColor(COL_BACKGROUND, 0x000000, 0xffff); + /* Windows Colors */ + paletteSetColor(0x1, 0x010101, tr); + paletteSetColor(0x2, 0x800000, tr); + paletteSetColor(0x3, 0x008000, tr); + paletteSetColor(0x4, 0x808000, tr); + paletteSetColor(0x5, 0x000080, tr); + paletteSetColor(0x6, 0x800080, tr); + paletteSetColor(0x7, 0x008080, tr); + paletteSetColor(0x8, 0xA0A0A0, tr); + paletteSetColor(0x9, 0x505050, tr); + paletteSetColor(0xA, 0xFF0000, tr); + paletteSetColor(0xB, 0x00FF00, tr); + paletteSetColor(0xC, 0xFFFF00, tr); + paletteSetColor(0xD, 0x0000FF, tr); + paletteSetColor(0xE, 0xFF00FF, tr); + paletteSetColor(0xF, 0x00FFFF, tr); + paletteSetColor(0x10, 0xFFFFFF, tr); + paletteSetColor(0x11, 0x000000, tr); + paletteSetColor(COL_BACKGROUND, 0x000000, 0xffff); - paletteSet(); + paletteSet(); - useBackground(false); + useBackground(false); m_transparent = m_transparent_default; #if 0 if ((tty=open("/dev/vc/0", O_RDWR))<0) { @@ -453,14 +400,8 @@ CFrameBuffer::~CFrameBuffer() delete[] virtual_fb; virtual_fb = NULL; } -#ifdef USE_OPENGL - active = false; /* keep people/infoclocks from accessing */ - mpGLThreadObj->shutDown(); - mpGLThreadObj->join(); -#else close(fd); close(tty); -#endif } int CFrameBuffer::getFileHandle() const @@ -518,11 +459,6 @@ fb_pixel_t * CFrameBuffer::getFrameBufferPointer() const return (fb_pixel_t *) virtual_fb; } -fb_pixel_t * CFrameBuffer::getBackBufferPointer() const -{ - return lfb + xRes * yRes; -} - bool CFrameBuffer::getActive() const { return (active || (virtual_fb != NULL)); @@ -543,63 +479,34 @@ int CFrameBuffer::setMode(unsigned int /*nxRes*/, unsigned int /*nyRes*/, unsign if (!available&&!active) return -1; -#ifndef USE_OPENGL -#if HAVE_AZBOX_HARDWARE -#ifndef FBIO_BLIT -#define FBIO_SET_MANUAL_BLIT _IOW('F', 0x21, __u8) -#define FBIO_BLIT 0x22 -#endif - // set manual blit - unsigned char tmp = 1; - if (ioctl(fd, FBIO_SET_MANUAL_BLIT, &tmp)<0) - perror("FBIO_SET_MANUAL_BLIT"); - - const unsigned int nxRes = 1280; - const unsigned int nyRes = 720; - const unsigned int nbpp = 32; +#if 0 screeninfo.xres_virtual=screeninfo.xres=nxRes; - screeninfo.yres_virtual = (screeninfo.yres = nyRes) * 2; + screeninfo.yres_virtual=screeninfo.yres=nyRes; screeninfo.height=0; screeninfo.width=0; screeninfo.xoffset=screeninfo.yoffset=0; screeninfo.bits_per_pixel=nbpp; - screeninfo.transp.offset = 24; - screeninfo.transp.length = 8; - screeninfo.red.offset = 16; - screeninfo.red.length = 8; - screeninfo.green.offset = 8; - screeninfo.green.length = 8; - screeninfo.blue.offset = 0; - screeninfo.blue.length = 8; - if (ioctl(fd, FBIOPUT_VSCREENINFO, &screeninfo)<0) { - // try single buffering - screeninfo.yres_virtual = screeninfo.yres = nyRes; - if (ioctl(fd, FBIOPUT_VSCREENINFO, &screeninfo) < 0) perror("FBIOPUT_VSCREENINFO"); - printf("FB: double buffering not available.\n"); } - else - printf("FB: double buffering available!\n"); - - ioctl(fd, FBIOGET_VSCREENINFO, &screeninfo); + if(1) { + printf("SetMode: %dbits, red %d:%d green %d:%d blue %d:%d transp %d:%d\n", + screeninfo.bits_per_pixel, screeninfo.red.length, screeninfo.red.offset, screeninfo.green.length, screeninfo.green.offset, screeninfo.blue.length, screeninfo.blue.offset, screeninfo.transp.length, screeninfo.transp.offset); + } if ((screeninfo.xres!=nxRes) && (screeninfo.yres!=nyRes) && (screeninfo.bits_per_pixel!=nbpp)) { printf("SetMode failed: wanted: %dx%dx%d, got %dx%dx%d\n", - nxRes, nyRes, nbpp, - screeninfo.xres, screeninfo.yres, screeninfo.bits_per_pixel); + nxRes, nyRes, nbpp, + screeninfo.xres, screeninfo.yres, screeninfo.bits_per_pixel); + return -1; } -#endif #endif xRes = screeninfo.xres; yRes = screeninfo.yres; bpp = screeninfo.bits_per_pixel; -#ifdef USE_OPENGL - stride = 4 * xRes; -#else fb_fix_screeninfo _fix; if (ioctl(fd, FBIOGET_FSCREENINFO, &_fix)<0) { @@ -608,7 +515,6 @@ int CFrameBuffer::setMode(unsigned int /*nxRes*/, unsigned int /*nyRes*/, unsign } stride = _fix.line_length; -#endif printf("FB: %dx%dx%d line length %d. %s nevis GXA accelerator.\n", xRes, yRes, bpp, stride, #ifdef USE_NEVIS_GXA "Using" @@ -619,11 +525,9 @@ int CFrameBuffer::setMode(unsigned int /*nxRes*/, unsigned int /*nyRes*/, unsign //memset(getFrameBufferPointer(), 0, stride * yRes); paintBackground(); -#if HAVE_COOL_HARDWARE - if (ioctl(fd, FBIOBLANK, FB_BLANK_UNBLANK) < 0) { - printf("screen unblanking failed\n"); - } -#endif + if (ioctl(fd, FBIOBLANK, FB_BLANK_UNBLANK) < 0) { + printf("screen unblanking failed\n"); + } return 0; } #if 0 @@ -632,8 +536,6 @@ void CFrameBuffer::setTransparency( int /*tr*/ ) { } #endif - -#if !HAVE_TRIPLEDRAGON void CFrameBuffer::setBlendMode(uint8_t mode) { #ifdef HAVE_COOL_HARDWARE @@ -652,40 +554,12 @@ void CFrameBuffer::setBlendLevel(int level) if (ioctl(fd, FBIO_SETOPACITY, value)) printf("FBIO_SETOPACITY failed.\n"); -#if 1 - if(level == 100) // TODO: sucks. - usleep(20000); +#if 0 + if(level == 100) // TODO: sucks. + usleep(20000); #endif #endif } -#else -/* TRIPLEDRAGON */ -void CFrameBuffer::setBlendMode(uint8_t mode) -{ - Stb04GFXOsdControl g; - ioctl(gfxfd, STB04GFX_OSD_GETCONTROL, &g); - g.use_global_alpha = (mode == 2); /* 1 == pixel alpha, 2 == global alpha */ - ioctl(gfxfd, STB04GFX_OSD_SETCONTROL, &g); -} - -void CFrameBuffer::setBlendLevel(int level) -{ - /* this is bypassing directfb, but faster and easier */ - Stb04GFXOsdControl g; - ioctl(gfxfd, STB04GFX_OSD_GETCONTROL, &g); - if (g.use_global_alpha == 0) - return; - - if (level < 0 || level > 100) - return; - - /* this is the same as convertSetupAlpha2Alpha(), but non-float */ - g.global_alpha = 255 - (255 * level / 100); - ioctl(gfxfd, STB04GFX_OSD_SETCONTROL, &g); - if (level == 100) // sucks - usleep(20000); -} -#endif #if 0 //never used @@ -701,6 +575,7 @@ void CFrameBuffer::paletteFade(int i, __u32 rgb1, __u32 rgb2, int level) __u16 *r = cmap.red+i; __u16 *g = cmap.green+i; __u16 *b = cmap.blue+i; + *r= ((rgb2&0xFF0000)>>16)*level; *g= ((rgb2&0x00FF00)>>8 )*level; *b= ((rgb2&0x0000FF) )*level; @@ -720,10 +595,10 @@ void CFrameBuffer::paletteGenFade(int in, __u32 rgb1, __u32 rgb2, int num, int t void CFrameBuffer::paletteSetColor(int i, __u32 rgb, int tr) { - cmap.red[i] =(rgb&0xFF0000)>>8; - cmap.green[i] =(rgb&0x00FF00) ; - cmap.blue[i] =(rgb&0x0000FF)<<8; - cmap.transp[i] = tr; + cmap.red[i] =(rgb&0xFF0000)>>8; + cmap.green[i] =(rgb&0x00FF00) ; + cmap.blue[i] =(rgb&0x0000FF)<<8; + cmap.transp[i] = tr; } void CFrameBuffer::paletteSet(struct fb_cmap *map) @@ -735,233 +610,206 @@ void CFrameBuffer::paletteSet(struct fb_cmap *map) map = &cmap; if(bpp == 8) { -//printf("Set palette for %dbit\n", bpp); + //printf("Set palette for %dbit\n", bpp); ioctl(fd, FBIOPUTCMAP, map); } + uint32_t rl, ro, gl, go, bl, bo, tl, to; - rl = screeninfo.red.length; - ro = screeninfo.red.offset; - gl = screeninfo.green.length; - go = screeninfo.green.offset; - bl = screeninfo.blue.length; - bo = screeninfo.blue.offset; - tl = screeninfo.transp.length; - to = screeninfo.transp.offset; + + rl = screeninfo.red.length; + ro = screeninfo.red.offset; + gl = screeninfo.green.length; + go = screeninfo.green.offset; + bl = screeninfo.blue.length; + bo = screeninfo.blue.offset; + tl = screeninfo.transp.length; + to = screeninfo.transp.offset; for (int i = 0; i < 256; i++) { - realcolor[i] = make16color(cmap.red[i], cmap.green[i], cmap.blue[i], cmap.transp[i], - rl, ro, gl, go, bl, bo, tl, to); + realcolor[i] = make16color(cmap.red[i], cmap.green[i], cmap.blue[i], cmap.transp[i], + rl, ro, gl, go, bl, bo, tl, to); } } -#if 0 -void CFrameBuffer::paintBoxRel(const int x, const int y, const int dx, const int dy, const fb_pixel_t col) -{ - if (!getActive()) - return; - - uint8_t * pos = ((uint8_t *)getFrameBufferPointer()) + x * sizeof(fb_pixel_t) + stride * y; - for (int count = 0; count < dy; count++) { - fb_pixel_t * dest = (fb_pixel_t *)pos; - for (int i = 0; i < dx; i++) - *(dest++) = col; - pos += stride; - } -} -#endif - void CFrameBuffer::paintBoxRel(const int x, const int y, const int dx, const int dy, const fb_pixel_t col, int radius, int type) { - /* draw a filled rectangle (with additional round corners) */ + /* draw a filled rectangle (with additional round corners) */ - if (!getActive()) - return; - - int corner_tl = (type & CORNER_TOP_LEFT) ? 1 : 0; - int corner_tr = (type & CORNER_TOP_RIGHT) ? 1 : 0; - int corner_bl = (type & CORNER_BOTTOM_LEFT) ? 1 : 0; - int corner_br = (type & CORNER_BOTTOM_RIGHT) ? 1 : 0; - -#if HAVE_TRIPLEDRAGON - char *c = (char *)&col; - dfbdest->SetColor(dfbdest, c[1], c[2], c[3], c[0]); -#else -#ifdef USE_NEVIS_GXA - OpenThreads::ScopedLock m_lock(mutex); -#else - int swidth = stride / sizeof(fb_pixel_t); - fb_pixel_t *fbp = getFrameBufferPointer() + (swidth * y); -#endif -#endif - - /* this table contains the x coordinates for a quarter circle (the bottom right quarter) with fixed - radius of 540 px which is the half of the max HD graphics size of 1080 px. So with that table we - ca draw boxes with round corners and als circles by just setting dx = dy = radius (max 540). */ - static const int q_circle[541] = { - 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, - 539, 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, 537, 537, 537, 537, 537, 537, 537, - 537, 537, 536, 536, 536, 536, 536, 536, 536, 536, 535, 535, 535, 535, 535, 535, 535, 535, 534, 534, - 534, 534, 534, 534, 533, 533, 533, 533, 533, 533, 532, 532, 532, 532, 532, 532, 531, 531, 531, 531, - 531, 531, 530, 530, 530, 530, 529, 529, 529, 529, 529, 529, 528, 528, 528, 528, 527, 527, 527, 527, - 527, 526, 526, 526, 526, 525, 525, 525, 525, 524, 524, 524, 524, 523, 523, 523, 523, 522, 522, 522, - 522, 521, 521, 521, 521, 520, 520, 520, 519, 519, 519, 518, 518, 518, 518, 517, 517, 517, 516, 516, - 516, 515, 515, 515, 515, 514, 514, 514, 513, 513, 513, 512, 512, 512, 511, 511, 511, 510, 510, 510, - 509, 509, 508, 508, 508, 507, 507, 507, 506, 506, 506, 505, 505, 504, 504, 504, 503, 503, 502, 502, - 502, 501, 501, 500, 500, 499, 499, 499, 498, 498, 498, 497, 497, 496, 496, 496, 495, 495, 494, 494, - 493, 493, 492, 492, 491, 491, 490, 490, 490, 489, 489, 488, 488, 487, 487, 486, 486, 485, 485, 484, - 484, 483, 483, 482, 482, 481, 481, 480, 480, 479, 479, 478, 478, 477, 477, 476, 476, 475, 475, 474, - 473, 473, 472, 472, 471, 471, 470, 470, 469, 468, 468, 467, 466, 466, 465, 465, 464, 464, 463, 462, - 462, 461, 460, 460, 459, 459, 458, 458, 457, 456, 455, 455, 454, 454, 453, 452, 452, 451, 450, 450, - 449, 449, 448, 447, 446, 446, 445, 445, 444, 443, 442, 441, 441, 440, 440, 439, 438, 437, 436, 436, - 435, 435, 434, 433, 432, 431, 431, 430, 429, 428, 427, 427, 426, 425, 425, 424, 423, 422, 421, 421, - 420, 419, 418, 417, 416, 416, 415, 414, 413, 412, 412, 411, 410, 409, 408, 407, 406, 405, 404, 403, - 403, 402, 401, 400, 399, 398, 397, 397, 395, 394, 393, 393, 392, 391, 390, 389, 388, 387, 386, 385, - 384, 383, 382, 381, 380, 379, 378, 377, 376, 375, 374, 373, 372, 371, 369, 368, 367, 367, 365, 364, - 363, 362, 361, 360, 358, 357, 356, 355, 354, 353, 352, 351, 350, 348, 347, 346, 345, 343, 342, 341, - 340, 339, 337, 336, 335, 334, 332, 331, 329, 328, 327, 326, 324, 323, 322, 321, 319, 317, 316, 315, - 314, 312, 310, 309, 308, 307, 305, 303, 302, 301, 299, 297, 296, 294, 293, 291, 289, 288, 287, 285, - 283, 281, 280, 278, 277, 275, 273, 271, 270, 268, 267, 265, 263, 261, 259, 258, 256, 254, 252, 250, - 248, 246, 244, 242, 240, 238, 236, 234, 232, 230, 228, 225, 223, 221, 219, 217, 215, 212, 210, 207, - 204, 202, 200, 197, 195, 192, 190, 187, 184, 181, 179, 176, 173, 170, 167, 164, 160, 157, 154, 150, - 147, 144, 140, 136, 132, 128, 124, 120, 115, 111, 105, 101, 95, 89, 83, 77, 69, 61, 52, 40, - 23}; - - int line = 0; -#ifdef USE_NEVIS_GXA - unsigned int cmd = GXA_CMD_NOT_TEXT | GXA_SRC_BMP_SEL(2) | GXA_DST_BMP_SEL(2) | GXA_PARAM_COUNT(2) | GXA_CMD_NOT_ALPHA; - - _write_gxa(gxa_base, GXA_FG_COLOR_REG, (unsigned int) col); /* setup the drawing color */ - _write_gxa(gxa_base, GXA_LINE_CONTROL_REG, 0x00000404); /* X is major axis, skip last pixel */ -#endif - - if ((type) && (radius)) - { - #define MUL 32768 /* just an multiplicator for all math to reduce rounding errors */ - int ofs, scf, scl, ofl, ofr; - - /* limit the radius */ - if (radius > dx) - radius = dx; - if (radius > dy) - radius = dy; - if (radius > 540) - radius = 540; - if (radius < 1) /* dx or dy = 0... */ - radius = 1; /* avoid div by zero below */ - - scf = (540 * MUL) / radius; - - while (line < dy) - { - ofl = ofr = 0; - - if (line < radius && (type & CORNER_TOP)) /* one of the top corners */ - { - /* uper round corners */ - scl = scf * (radius - line) / MUL; - if ((scf * (radius - line) % MUL) >= (MUL / 2)) /* round up */ - scl++; - ofs = radius - (q_circle[scl] * MUL / scf); - // ofl = corner_tl * ofs; // might depend on the arch if multiply is faster or not - ofl = corner_tl ? ofs : 0; - ofr = corner_tr ? ofs : 0; - } - else if ((line >= dy - radius) && (type & CORNER_BOTTOM)) /* one of the bottom corners */ - { - /* lower round corners */ - scl = scf * (radius - (dy - (line + 1))) / MUL; - if ((scf * (radius - (dy - (line + 1))) % MUL) >= (MUL / 2)) /* round up */ - scl++; - ofs = radius - (q_circle[scl] * MUL / scf); - ofl = corner_bl ? ofs : 0; - ofr = corner_br ? ofs : 0; - } -#if HAVE_TRIPLEDRAGON - else - { - int height = dy - ((corner_tl|corner_tr) + (corner_bl|corner_br)) * radius; - dfbdest->FillRectangle(dfbdest, x, y + line, dx, height); - line += height; - continue; - } - dfbdest->DrawLine(dfbdest, x + ofl, y + line, x + dx - ofr - 1, y + line); -#else -#ifdef USE_NEVIS_GXA - _write_gxa(gxa_base, cmd, GXA_POINT(x + dx - ofr, y + line)); /* endig point */ - _write_gxa(gxa_base, cmd, GXA_POINT(x + ofl, y + line)); /* start point */ -#else - for (int pos = x + ofl; pos < x + dx - ofr; pos++) - { - *(fbp + pos) = col; - } - fbp += swidth; -#endif -#endif - line++; - } - } - else - { -#if !HAVE_TRIPLEDRAGON - while (line < dy) - { -#ifdef USE_NEVIS_GXA - _write_gxa(gxa_base, cmd, GXA_POINT(x + dx, y + line)); /* endig point */ - _write_gxa(gxa_base, cmd, GXA_POINT(x, y + line)); /* start point */ -#else - for (int pos = x; pos < x + dx; pos++) - { - *(fbp + pos) = col; - } - fbp += swidth; -#endif - line++; - } -#else - dfbdest->FillRectangle(dfbdest, x, y + line, dx, dy - line); -#endif - } -#ifdef USE_NEVIS_GXA - /* the GXA seems to do asynchronous rendering, so we add a sync marker - to which the fontrenderer code can synchronize */ - add_gxa_sync_marker(); -#endif -} - -#if !HAVE_TRIPLEDRAGON -void CFrameBuffer::paintVLine(int x, int ya, int yb, const fb_pixel_t col) -{ if (!getActive()) return; -#ifdef USE_NEVIS_GXA - OpenThreads::ScopedLock m_lock(mutex); - /* draw a single vertical line from point x/ya to x/yb */ - unsigned int cmd = GXA_CMD_NOT_TEXT | GXA_SRC_BMP_SEL(2) | GXA_DST_BMP_SEL(2) | GXA_PARAM_COUNT(2) | GXA_CMD_NOT_ALPHA; - - _write_gxa(gxa_base, GXA_FG_COLOR_REG, (unsigned int) col); /* setup the drawing color */ - _write_gxa(gxa_base, GXA_LINE_CONTROL_REG, 0x00000404); /* X is major axis, skip last pixel */ - _write_gxa(gxa_base, cmd, GXA_POINT(x, ya + (yb - ya))); /* end point */ - _write_gxa(gxa_base, cmd, GXA_POINT(x, ya)); /* start point */ -#else /* USE_NEVIS_GXA */ - - uint8_t * pos = ((uint8_t *)getFrameBufferPointer()) + x * sizeof(fb_pixel_t) + stride * ya; - - int dy = yb-ya; - for (int count = 0; count < dy; count++) { - *(fb_pixel_t *)pos = col; - pos += stride; - } -#endif /* USE_NEVIS_GXA */ -} - -void CFrameBuffer::paintVLineRel(int x, int y, int dy, const fb_pixel_t col) -{ - if (!getActive()) + if (dx == 0 || dy == 0) { + printf("paintBoxRel: radius %d, start x %d y %d end x %d y %d\n", radius, x, y, x+dx, y+dy); return; - -#ifdef USE_NEVIS_GXA + } +#if defined(FB_HW_ACCELERATION) + fb_fillrect fillrect; + fillrect.color = col; + fillrect.rop = ROP_COPY; +#elif defined(USE_NEVIS_GXA) OpenThreads::ScopedLock m_lock(mutex); + /* solid fill with background color */ + unsigned int cmd = GXA_CMD_BLT | GXA_CMD_NOT_TEXT | GXA_SRC_BMP_SEL(7) | GXA_DST_BMP_SEL(2) | GXA_PARAM_COUNT(2) | GXA_CMD_NOT_ALPHA; + _write_gxa(gxa_base, GXA_BG_COLOR_REG, (unsigned int) col); /* setup the drawing color */ +#endif + + /* this table contains the x coordinates for a quarter circle (the bottom right quarter) with fixed + radius of 540 px which is the half of the max HD graphics size of 1080 px. So with that table we + ca draw boxes with round corners and als circles by just setting dx = dy = radius (max 540). */ + static const int q_circle[541] = { + 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, + 540, 540, 540, 540, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, + 539, 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, 537, 537, 537, 537, 537, 537, 537, + 537, 537, 536, 536, 536, 536, 536, 536, 536, 536, 535, 535, 535, 535, 535, 535, 535, 535, 534, 534, + 534, 534, 534, 534, 533, 533, 533, 533, 533, 533, 532, 532, 532, 532, 532, 532, 531, 531, 531, 531, + 531, 531, 530, 530, 530, 530, 529, 529, 529, 529, 529, 529, 528, 528, 528, 528, 527, 527, 527, 527, + 527, 526, 526, 526, 526, 525, 525, 525, 525, 524, 524, 524, 524, 523, 523, 523, 523, 522, 522, 522, + 522, 521, 521, 521, 521, 520, 520, 520, 519, 519, 519, 518, 518, 518, 518, 517, 517, 517, 516, 516, + 516, 515, 515, 515, 515, 514, 514, 514, 513, 513, 513, 512, 512, 512, 511, 511, 511, 510, 510, 510, + 509, 509, 508, 508, 508, 507, 507, 507, 506, 506, 506, 505, 505, 504, 504, 504, 503, 503, 502, 502, + 502, 501, 501, 500, 500, 499, 499, 499, 498, 498, 498, 497, 497, 496, 496, 496, 495, 495, 494, 494, + 493, 493, 492, 492, 491, 491, 490, 490, 490, 489, 489, 488, 488, 487, 487, 486, 486, 485, 485, 484, + 484, 483, 483, 482, 482, 481, 481, 480, 480, 479, 479, 478, 478, 477, 477, 476, 476, 475, 475, 474, + 473, 473, 472, 472, 471, 471, 470, 470, 469, 468, 468, 467, 466, 466, 465, 465, 464, 464, 463, 462, + 462, 461, 460, 460, 459, 459, 458, 458, 457, 456, 455, 455, 454, 454, 453, 452, 452, 451, 450, 450, + 449, 449, 448, 447, 446, 446, 445, 445, 444, 443, 442, 441, 441, 440, 440, 439, 438, 437, 436, 436, + 435, 435, 434, 433, 432, 431, 431, 430, 429, 428, 427, 427, 426, 425, 425, 424, 423, 422, 421, 421, + 420, 419, 418, 417, 416, 416, 415, 414, 413, 412, 412, 411, 410, 409, 408, 407, 406, 405, 404, 403, + 403, 402, 401, 400, 399, 398, 397, 397, 395, 394, 393, 393, 392, 391, 390, 389, 388, 387, 386, 385, + 384, 383, 382, 381, 380, 379, 378, 377, 376, 375, 374, 373, 372, 371, 369, 368, 367, 367, 365, 364, + 363, 362, 361, 360, 358, 357, 356, 355, 354, 353, 352, 351, 350, 348, 347, 346, 345, 343, 342, 341, + 340, 339, 337, 336, 335, 334, 332, 331, 329, 328, 327, 326, 324, 323, 322, 321, 319, 317, 316, 315, + 314, 312, 310, 309, 308, 307, 305, 303, 302, 301, 299, 297, 296, 294, 293, 291, 289, 288, 287, 285, + 283, 281, 280, 278, 277, 275, 273, 271, 270, 268, 267, 265, 263, 261, 259, 258, 256, 254, 252, 250, + 248, 246, 244, 242, 240, 238, 236, 234, 232, 230, 228, 225, 223, 221, 219, 217, 215, 212, 210, 207, + 204, 202, 200, 197, 195, 192, 190, 187, 184, 181, 179, 176, 173, 170, 167, 164, 160, 157, 154, 150, + 147, 144, 140, 136, 132, 128, 124, 120, 115, 111, 105, 101, 95, 89, 83, 77, 69, 61, 52, 40, + 23}; + + int line = 0; + + if (type && radius) { + bool corner_tl = (type & CORNER_TOP_LEFT) == CORNER_TOP_LEFT; + bool corner_tr = (type & CORNER_TOP_RIGHT) == CORNER_TOP_RIGHT; + bool corner_bl = (type & CORNER_BOTTOM_LEFT) == CORNER_BOTTOM_LEFT; + bool corner_br = (type & CORNER_BOTTOM_RIGHT)== CORNER_BOTTOM_RIGHT; + int ofs, scf, scl, ofl, ofr; + /* just an multiplicator for all math to reduce rounding errors */ +#define MUL 32768 + + /* limit the radius */ + if (radius > dx) + radius = dx; + if (radius > dy) + radius = dy; + if (radius > 540) + radius = 540; + + scf = (540 * MUL) / ((radius < 1) ? 1 : radius); + + while (line < dy) { + ofl = ofr = 0; + + if (line < radius && (type & CORNER_TOP)) {/* one of the top corners */ + //printf("1: x %d y %d dx %d dy %d rad %d line %d\n", x, y, dx, dy, radius, line); + /* uper round corners */ + scl = scf * (radius - line) / MUL; + if ((scf * (radius - line) % MUL) >= (MUL / 2)) /* round up */ + scl++; + ofs = radius - (q_circle[scl] * MUL / scf); + // ofl = corner_tl * ofs; // might depend on the arch if multiply is faster or not + ofl = corner_tl ? ofs : 0; + ofr = corner_tr ? ofs : 0; + } else if ((line >= dy - radius) && (type & CORNER_BOTTOM)) { /* one of the bottom corners */ + //printf("2: x %d y %d dx %d dy %d rad %d line %d\n", x, y, dx, dy, radius, line); + /* lower round corners */ + scl = scf * (radius - (dy - (line + 1))) / MUL; + if ((scf * (radius - (dy - (line + 1))) % MUL) >= (MUL / 2)) /* round up */ + scl++; + ofs = radius - (q_circle[scl] * MUL / scf); + ofl = corner_bl ? ofs : 0; + ofr = corner_br ? ofs : 0; + } else { + //printf("3: x %d y %d dx %d dy %d rad %d line %d\n", x, y, dx, dy, radius, line); +#if defined(FB_HW_ACCELERATION) || defined(USE_NEVIS_GXA) + int rect_height_mult = ((type & CORNER_TOP) && (type & CORNER_BOTTOM)) ? 2 : 1; +#if defined(FB_HW_ACCELERATION) + fillrect.dx = x; + fillrect.dy = y + line; + fillrect.width = dx; + fillrect.height = dy - (radius * rect_height_mult); + + ioctl(fd, FBIO_FILL_RECT, &fillrect); +#elif defined(USE_NEVIS_GXA) + _write_gxa(gxa_base, GXA_BLT_CONTROL_REG, 0); + _write_gxa(gxa_base, cmd, GXA_POINT(x, y + line)); /* destination x/y */ + _write_gxa(gxa_base, cmd, GXA_POINT(dx, dy - (radius * rect_height_mult))); /* width/height */ +#endif + line += dy - (radius * rect_height_mult); + continue; +#endif + } + + if (dx-ofr-ofl == 0) + printf("paintBoxRel: radius %d, start x %d y %d end x %d y %d\n", radius, x, y, dx-ofr-ofl, y+line); +#ifdef USE_NEVIS_GXA + _write_gxa(gxa_base, GXA_BLT_CONTROL_REG, 0); + _write_gxa(gxa_base, cmd, GXA_POINT(x + ofl, y + line)); /* destination x/y */ + _write_gxa(gxa_base, cmd, GXA_POINT(dx-ofl-ofr, 1)); /* width/height */ +#else + paintHLineRelInternal(x+ofl, dx-ofl-ofr, y+line, col); +#endif + line++; + } + } else { +#if defined(FB_HW_ACCELERATION) + /* FIXME small size faster to do by software */ + if (dx > 10 || dy > 10) { + fillrect.dx = x; + fillrect.dy = y; + fillrect.width = dx; + fillrect.height = dy; + ioctl(fd, FBIO_FILL_RECT, &fillrect); + return; + } +#endif +#if defined(USE_NEVIS_GXA) + _write_gxa(gxa_base, GXA_BLT_CONTROL_REG, 0); + _write_gxa(gxa_base, cmd, GXA_POINT(x, y)); /* destination x/y */ + _write_gxa(gxa_base, cmd, GXA_POINT(dx, dy)); /* width/height */ +#else + int swidth = stride / sizeof(fb_pixel_t); + fb_pixel_t *fbp = getFrameBufferPointer() + (swidth * y); + while (line < dy) { + for (int pos = x; pos < x + dx; pos++) + *(fbp + pos) = col; + + fbp += swidth; + line++; + } +#endif + } +#ifdef USE_NEVIS_GXA + _write_gxa(gxa_base, GXA_BG_COLOR_REG, (unsigned int) backgroundColor); //FIXME needed ? + /* the GXA seems to do asynchronous rendering, so we add a sync marker + * to which the fontrenderer code can synchronize + */ + add_gxa_sync_marker(); +#endif +} + +void CFrameBuffer::paintVLineRelInternal(int x, int y, int dy, const fb_pixel_t col) +{ + +#if defined(FB_HW_ACCELERATION) + fb_fillrect fillrect; + fillrect.dx = x; + fillrect.dy = y; + fillrect.width = 1; + fillrect.height = dy; + fillrect.color = col; + fillrect.rop = ROP_COPY; + ioctl(fd, FBIO_FILL_RECT, &fillrect); +#elif defined(USE_NEVIS_GXA) /* draw a single vertical line from point x/y with hight dx */ unsigned int cmd = GXA_CMD_NOT_TEXT | GXA_SRC_BMP_SEL(2) | GXA_DST_BMP_SEL(2) | GXA_PARAM_COUNT(2) | GXA_CMD_NOT_ALPHA; @@ -979,38 +827,33 @@ void CFrameBuffer::paintVLineRel(int x, int y, int dy, const fb_pixel_t col) #endif /* USE_NEVIS_GXA */ } -void CFrameBuffer::paintHLine(int xa, int xb, int y, const fb_pixel_t col) +void CFrameBuffer::paintVLineRel(int x, int y, int dy, const fb_pixel_t col) { if (!getActive()) return; -#ifdef USE_NEVIS_GXA +#if defined(USE_NEVIS_GXA) OpenThreads::ScopedLock m_lock(mutex); - /* draw a single horizontal line from point xa/y to xb/y */ - unsigned int cmd = GXA_CMD_NOT_TEXT | GXA_SRC_BMP_SEL(2) | GXA_DST_BMP_SEL(2) | GXA_PARAM_COUNT(2) | GXA_CMD_NOT_ALPHA; - - _write_gxa(gxa_base, GXA_FG_COLOR_REG, (unsigned int) col); /* setup the drawing color */ - _write_gxa(gxa_base, GXA_LINE_CONTROL_REG, 0x00000404); /* X is major axis, skip last pixel */ - _write_gxa(gxa_base, cmd, GXA_POINT(xa + (xb - xa), y)); /* end point */ - _write_gxa(gxa_base, cmd, GXA_POINT(xa, y)); /* start point */ -#else /* USE_NEVIS_GXA */ - - uint8_t * pos = ((uint8_t *)getFrameBufferPointer()) + xa * sizeof(fb_pixel_t) + stride * y; - - int dx = xb -xa; - fb_pixel_t * dest = (fb_pixel_t *)pos; - for (int i = 0; i < dx; i++) - *(dest++) = col; -#endif /* USE_NEVIS_GXA */ +#endif + paintVLineRelInternal(x, y, dy, col); } -void CFrameBuffer::paintHLineRel(int x, int dx, int y, const fb_pixel_t col) +void CFrameBuffer::paintHLineRelInternal(int x, int dx, int y, const fb_pixel_t col) { - if (!getActive()) +#if defined(FB_HW_ACCELERATION) + if (dx >= 10) { + fb_fillrect fillrect; + fillrect.dx = x; + fillrect.dy = y; + fillrect.width = dx; + fillrect.height = 1; + fillrect.color = col; + fillrect.rop = ROP_COPY; + ioctl(fd, FBIO_FILL_RECT, &fillrect); return; - -#ifdef USE_NEVIS_GXA - OpenThreads::ScopedLock m_lock(mutex); + } +#endif +#if defined(USE_NEVIS_GXA) /* draw a single horizontal line from point x/y with width dx */ unsigned int cmd = GXA_CMD_NOT_TEXT | GXA_SRC_BMP_SEL(2) | GXA_DST_BMP_SEL(2) | GXA_PARAM_COUNT(2) | GXA_CMD_NOT_ALPHA; @@ -1026,44 +869,18 @@ void CFrameBuffer::paintHLineRel(int x, int dx, int y, const fb_pixel_t col) *(dest++) = col; #endif /* USE_NEVIS_GXA */ } -#else /* TRIPLEDRAGON */ -void CFrameBuffer::paintPixel(const int x, const int y, const fb_pixel_t col) -{ - paintLine(x, y, x, y, col); -} -void CFrameBuffer::paintLine(int xa, int ya, int xb, int yb, const fb_pixel_t col) +void CFrameBuffer::paintHLineRel(int x, int dx, int y, const fb_pixel_t col) { if (!getActive()) return; - char *c = (char *)&col; - dfbdest->SetColor(dfbdest, c[1], c[2], c[3], c[0]); - dfbdest->DrawLine(dfbdest, xa, ya, xb, yb); - return; +#if defined(USE_NEVIS_GXA) + OpenThreads::ScopedLock m_lock(mutex); +#endif + paintHLineRelInternal(x, dx, y, col); } -void CFrameBuffer::paintVLine(int x, int ya, int yb, const fb_pixel_t col) -{ - paintLine(x, ya, x, yb, col); -} - -void CFrameBuffer::paintVLineRel(int x, int y, int dy, const fb_pixel_t col) -{ - paintLine(x, y, x, y + dy, col); -} - -void CFrameBuffer::paintHLine(int xa, int xb, int y, const fb_pixel_t col) -{ - paintLine(xa, y, xb, y, col); -} - -void CFrameBuffer::paintHLineRel(int x, int dx, int y, const fb_pixel_t col) -{ - paintLine(x, y, x + dx, y, col); -} -#endif /* TRIPLEDRAGON */ - void CFrameBuffer::setIconBasePath(const std::string & iconPath) { iconBasePath = iconPath; @@ -1103,8 +920,8 @@ bool CFrameBuffer::paintIcon8(const std::string & filename, const int x, const i //printf("%s(file, %d, %d, %d)\n", __FUNCTION__, x, y, offset); struct rawHeader header; - uint16_t width, height; - int lfd; + uint16_t width, height; + int lfd; lfd = open((iconBasePath + filename).c_str(), O_RDONLY); @@ -1138,40 +955,8 @@ bool CFrameBuffer::paintIcon8(const std::string & filename, const int x, const i d += stride; } close(lfd); - blit(); return true; } -#if 0 -//never used -#ifdef USE_NEVIS_GXA -bool CFrameBuffer::blitToPrimary(unsigned int * data, int dx, int dy, int sw, int sh) -{ - u32 cmd; - void * uKva; - - uKva = cs_phys_addr(data); -printf("CFrameBuffer::blitToPrimary: data %x Kva %x\n", (int) data, (int) uKva); - if(uKva == NULL) - return false; - - cmd = GXA_CMD_BLT | GXA_CMD_NOT_TEXT | GXA_SRC_BMP_SEL(1) | GXA_DST_BMP_SEL(2) | GXA_PARAM_COUNT(3); - - _write_gxa(gxa_base, GXA_BMP1_TYPE_REG, (3 << 16) | sw); - _write_gxa(gxa_base, GXA_BMP1_ADDR_REG, (unsigned int) uKva); - - _write_gxa(gxa_base, cmd, GXA_POINT(dx, dy)); /* destination pos */ - _write_gxa(gxa_base, cmd, GXA_POINT(sw, sh)); /* source width */ - _write_gxa(gxa_base, cmd, GXA_POINT(0, 0)); /* source pos */ - - return true; -} -#else -bool CFrameBuffer::blitToPrimary(unsigned int *, int, int, int, int) -{ - return false; -} -#endif -#endif /* paint icon at position x/y, if height h is given, center vertically between y and y+h @@ -1180,8 +965,8 @@ bool CFrameBuffer::paintIcon(const std::string & filename, const int x, const in const int h, const unsigned char offset, bool paint, bool paintBg, const fb_pixel_t colBg) { struct rawHeader header; - int width, height; - int lfd; + int width, height; + int lfd; fb_pixel_t * data; struct rawIcon tmpIcon; std::map::iterator it; @@ -1278,38 +1063,8 @@ _display: paintBoxRel(x, yy, width, height, colBg); blit2FB(data, width, height, x, yy, 0, 0, true); return true; - -#if 0 - uint8_t * d = ((uint8_t *)getFrameBufferPointer()) + x * sizeof(fb_pixel_t) + stride * yy; - fb_pixel_t * d2; - - for (int count = 0; count < height; count++ ) { - fb_pixel_t *pixpos = &data[count * width]; - d2 = (fb_pixel_t *) d; - for (int count2 = 0; count2 < width; count2++ ) { - fb_pixel_t pix = *pixpos; - if (pix != 0) { - *d2 = pix; - } - d2++; - pixpos++; - } - d += stride; - } - - return true; -#endif } -#if 0 -bool CFrameBuffer::paintIcon(const char * const filename, const int x, const int y, - const int h, const unsigned char offset) -{ -//printf("%s(%s, %d, %d, %d)\n", __FUNCTION__, filename, x, y, offset); - return paintIcon(std::string(filename), x, y, h, offset); -} -#endif - void CFrameBuffer::loadPal(const std::string & filename, const unsigned char offset, const unsigned char endidx) { if (!getActive()) @@ -1318,7 +1073,7 @@ void CFrameBuffer::loadPal(const std::string & filename, const unsigned char off //printf("%s()\n", __FUNCTION__); struct rgbData rgbdata; - int lfd; + int lfd; lfd = open((iconBasePath + filename).c_str(), O_RDONLY); @@ -1343,7 +1098,6 @@ void CFrameBuffer::loadPal(const std::string & filename, const unsigned char off close(lfd); } -#if !HAVE_TRIPLEDRAGON void CFrameBuffer::paintPixel(const int x, const int y, const fb_pixel_t col) { if (!getActive()) @@ -1352,8 +1106,6 @@ void CFrameBuffer::paintPixel(const int x, const int y, const fb_pixel_t col) #ifdef USE_NEVIS_GXA paintHLineRel(x, 1, y, col); #else - if (x > xRes || y > yRes || x < 0 || y < 0) - return; fb_pixel_t * pos = getFrameBufferPointer(); pos += (stride / sizeof(fb_pixel_t)) * y; pos += x; @@ -1361,7 +1113,6 @@ void CFrameBuffer::paintPixel(const int x, const int y, const fb_pixel_t col) *pos = col; #endif } -#endif void CFrameBuffer::paintBoxFrame(const int sx, const int sy, const int dx, const int dy, const int px, const fb_pixel_t col, const int rad) { @@ -1371,9 +1122,9 @@ void CFrameBuffer::paintBoxFrame(const int sx, const int sy, const int dx, const int radius = rad; int c_radius = rad << 1; - paintBoxRel(sx + rad , sy , dx - c_radius, px, col); // upper horizontal + paintBoxRel(sx + rad , sy , dx - c_radius, px, col); // upper horizontal paintBoxRel(sx + rad , sy + dy - px, dx - c_radius, px, col); // lower horizontal - paintBoxRel(sx , sy + rad , px, dy - c_radius , col); // left vertical + paintBoxRel(sx , sy + rad , px, dy - c_radius , col); // left vertical paintBoxRel(sx + dx - px, sy + rad , px, dy - c_radius , col); // right vertical if (!radius) @@ -1410,21 +1161,20 @@ void CFrameBuffer::paintBoxFrame(const int sx, const int sy, const int dx, const int width = 0; while (width <= px) { - paintPixel(x2 + x , y1 - y + width, col); // 1. oct - paintPixel(x2 + y - width, y1 - x , col); // 2. oct - paintPixel(x2 + y - width, y2 + x , col); // 3. oct - paintPixel(x2 + x , y2 + y - width, col); // 4. oct - paintPixel(x1 - x , y2 + y - width, col); // 5. oct - paintPixel(x1 - y + width, y2 + x , col); // 6. oct - paintPixel(x1 - y + width, y1 - x , col); // 7. oct - paintPixel(x1 - x , y1 - y + width, col); // 8. oct + paintPixel(x2 + x , y1 - y + width, col); // 1. oct + paintPixel(x2 + y - width, y1 - x , col); // 2. oct + paintPixel(x2 + y - width, y2 + x , col); // 3. oct + paintPixel(x2 + x , y2 + y - width, col); // 4. oct + paintPixel(x1 - x , y2 + y - width, col); // 5. oct + paintPixel(x1 - y + width, y2 + x , col); // 6. oct + paintPixel(x1 - y + width, y1 - x , col); // 7. oct + paintPixel(x1 - x , y1 - y + width, col); // 8. oct width++; } } } -#if !HAVE_TRIPLEDRAGON void CFrameBuffer::paintLine(int xa, int ya, int xb, int yb, const fb_pixel_t col) { if (!getActive()) @@ -1512,8 +1262,6 @@ void CFrameBuffer::paintLine(int xa, int ya, int xb, int yb, const fb_pixel_t co } } } -#endif - #if 0 //never used void CFrameBuffer::setBackgroundColor(const fb_pixel_t color) @@ -1524,7 +1272,7 @@ void CFrameBuffer::setBackgroundColor(const fb_pixel_t color) bool CFrameBuffer::loadPictureToMem(const std::string & filename, const uint16_t width, const uint16_t height, const uint16_t pstride, fb_pixel_t * memp) { struct rawHeader header; - int lfd; + int lfd; //printf("%s(%d, %d, memp)\n", __FUNCTION__, width, height); @@ -1572,8 +1320,8 @@ bool CFrameBuffer::loadPicture2FrameBuffer(const std::string & filename) bool CFrameBuffer::savePictureFromMem(const std::string & filename, const fb_pixel_t * const memp) { struct rawHeader header; - uint16_t width, height; - int lfd; + uint16_t width, height; + int lfd; width = BACKGROUNDIMAGEWIDTH; height = 576; @@ -1582,7 +1330,7 @@ bool CFrameBuffer::savePictureFromMem(const std::string & filename, const fb_pix header.width_hi = width >> 8; header.height_lo = height & 0xFF; header.height_hi = height >> 8; - header.transp = 0; + header.transp = 0; lfd = open((iconBasePath + filename).c_str(), O_WRONLY | O_CREAT, 0644); @@ -1748,7 +1496,6 @@ void CFrameBuffer::paintBackground() { paintBoxRel(0, 0, xRes, yRes, backgroundColor); } - blit(); } void CFrameBuffer::SaveScreen(int x, int y, int dx, int dy, fb_pixel_t * const memp) @@ -1766,7 +1513,7 @@ void CFrameBuffer::SaveScreen(int x, int y, int dx, int dy, fb_pixel_t * const m pos += stride; } #if 0 //FIXME test to flush cache - if (ioctl(fd, 1, FB_BLANK_UNBLANK) < 0); + if (ioctl(fd, 1, FB_BLANK_UNBLANK) < 0); #endif //RestoreScreen(x, y, dx, dy, memp); //FIXME #if 0 @@ -1800,7 +1547,6 @@ void CFrameBuffer::RestoreScreen(int x, int y, int dx, int dy, fb_pixel_t * cons //never used void CFrameBuffer::switch_signal (int signal) { -#ifndef USE_OPENGL /* ignore signals for GL */ CFrameBuffer * thiz = CFrameBuffer::getInstance(); if (signal == SIGUSR1) { if (virtual_fb != NULL) @@ -1822,7 +1568,6 @@ void CFrameBuffer::switch_signal (int signal) else memset(thiz->lfb, 0, thiz->stride * thiz->yRes); } -#endif } #endif @@ -1835,7 +1580,7 @@ void CFrameBuffer::Clear() //never used void CFrameBuffer::showFrame(const std::string & filename) { - std::string varpath = "/var/tuxbox/config/neutrino/icons/"; + std::string varpath = CONFIGDIR "/neutrino/icons/"; if(!access((varpath + filename).c_str(), F_OK)) videoDecoder->ShowPicture((varpath + filename).c_str()); else @@ -1870,9 +1615,9 @@ void * CFrameBuffer::int_convertRGB2FB(unsigned char *rgbbuff, unsigned long x, if (alpha) { for(i = 0; i < count ; i++) fbbuff[i] = ((rgbbuff[i*4+3] << 24) & 0xFF000000) | - ((rgbbuff[i*4] << 16) & 0x00FF0000) | - ((rgbbuff[i*4+1] << 8) & 0x0000FF00) | - ((rgbbuff[i*4+2]) & 0x000000FF); + ((rgbbuff[i*4] << 16) & 0x00FF0000) | + ((rgbbuff[i*4+1] << 8) & 0x0000FF00) | + ((rgbbuff[i*4+2]) & 0x000000FF); } else { switch (m_transparent) { case CFrameBuffer::TM_BLACK: @@ -1907,7 +1652,6 @@ void * CFrameBuffer::convertRGBA2FB(unsigned char *rgbbuff, unsigned long x, uns return int_convertRGB2FB(rgbbuff, x, y, 0, true); } -#if !HAVE_TRIPLEDRAGON void CFrameBuffer::blit2FB(void *fbbuff, uint32_t width, uint32_t height, uint32_t xoff, uint32_t yoff, uint32_t xp, uint32_t yp, bool transp) { int xc, yc; @@ -1915,11 +1659,36 @@ void CFrameBuffer::blit2FB(void *fbbuff, uint32_t width, uint32_t height, uint32 xc = (width > xRes) ? xRes : width; yc = (height > yRes) ? yRes : height; -#ifdef USE_NEVIS_GXA - u32 cmd; - void * uKva; +#if defined(FB_HW_ACCELERATION) + if(!(width%4)) { + fb_image image; + image.dx = xoff; + image.dy = yoff; + image.width = xc; + image.height = yc; + image.cmap.len = 0; + image.depth = 32; +#if 1 + image.data = (const char*)fbbuff; + ioctl(fd, FBIO_IMAGE_BLT, &image); +#else + for (int count = 0; count < yc; count++ ) { + fb_pixel_t* data = (fb_pixel_t *) fbbuff; + fb_pixel_t *pixpos = &data[(count + yp) * width]; + image.data = (const char*) pixpos; //fbbuff +(count + yp)*width; + image.dy = yoff+count; + image.height = 1; + ioctl(fd, FBIO_IMAGE_BLT, &image); + } +#endif + return; + } + +#elif defined(USE_NEVIS_GXA) + u32 cmd; + void * uKva; - uKva = cs_phys_addr(fbbuff); + uKva = cs_phys_addr(fbbuff); //printf("CFrameBuffer::blit2FB: data %x Kva %x\n", (int) fbbuff, (int) uKva); if(uKva != NULL) { @@ -1936,7 +1705,6 @@ void CFrameBuffer::blit2FB(void *fbbuff, uint32_t width, uint32_t height, uint32 return; } #endif - fb_pixel_t* data = (fb_pixel_t *) fbbuff; uint8_t * d = ((uint8_t *)getFrameBufferPointer()) + xoff * sizeof(fb_pixel_t) + stride * yoff; @@ -1947,17 +1715,8 @@ void CFrameBuffer::blit2FB(void *fbbuff, uint32_t width, uint32_t height, uint32 d2 = (fb_pixel_t *) d; for (int count2 = 0; count2 < xc; count2++ ) { fb_pixel_t pix = *(pixpos + xp); - if (!transp || (pix & 0xff000000) == 0xff000000) + if (!transp || (pix != 0)) { *d2 = pix; - else { - uint8_t *in = (uint8_t *)(pixpos + xp); - uint8_t *out = (uint8_t *)d2; - int a = in[3]; /* TODO: big/little endian */ - *out = (*out + ((*in - *out) * a) / 256); - in++; out++; - *out = (*out + ((*in - *out) * a) / 256); - in++; out++; - *out = (*out + ((*in - *out) * a) / 256); } d2++; pixpos++; @@ -1970,105 +1729,32 @@ void CFrameBuffer::blit2FB(void *fbbuff, uint32_t width, uint32_t height, uint32 } #endif } -#else -void CFrameBuffer::blit2FB(void *fbbuff, uint32_t width, uint32_t height, uint32_t xoff, uint32_t yoff, uint32_t xp, uint32_t yp, bool transp) -{ - DFBRectangle src; - DFBResult err; - IDirectFBSurface *surf; - DFBSurfaceDescription dsc; - - src.x = xp; - src.y = yp; - src.w = width - xp; - src.h = height - yp; - - dsc.flags = (DFBSurfaceDescriptionFlags)(DSDESC_CAPS | DSDESC_WIDTH | DSDESC_HEIGHT | DSDESC_PREALLOCATED); - dsc.caps = DSCAPS_NONE; - dsc.width = width; - dsc.height = height; - dsc.preallocated[0].data = fbbuff; - dsc.preallocated[0].pitch = width * sizeof(fb_pixel_t); - err = dfb->CreateSurface(dfb, &dsc, &surf); - /* TODO: maybe we should not die if this fails? */ - if (err != DFB_OK) { - fprintf(stderr, "CFrameBuffer::blit2FB: "); - DirectFBErrorFatal("dfb->CreateSurface(dfb, &dsc, &surf)", err); - } - - if (transp) - { - surf->SetSrcColorKey(surf, 0, 0, 0); - dfbdest->SetBlittingFlags(dfbdest, DSBLIT_SRC_COLORKEY); - } - else - dfbdest->SetBlittingFlags(dfbdest, DSBLIT_NOFX); - dfbdest->Blit(dfbdest, surf, &src, xoff, yoff); - surf->Release(surf); - return; -} -#endif void CFrameBuffer::displayRGB(unsigned char *rgbbuff, int x_size, int y_size, int x_pan, int y_pan, int x_offs, int y_offs, bool clearfb, int transp) { - void *fbbuff = NULL; + void *fbbuff = NULL; - if(rgbbuff == NULL) - return; + if(rgbbuff == NULL) + return; - /* correct panning */ - if(x_pan > x_size - (int)xRes) x_pan = 0; - if(y_pan > y_size - (int)yRes) y_pan = 0; + /* correct panning */ + if(x_pan > x_size - (int)xRes) x_pan = 0; + if(y_pan > y_size - (int)yRes) y_pan = 0; - /* correct offset */ - if(x_offs + x_size > (int)xRes) x_offs = 0; - if(y_offs + y_size > (int)yRes) y_offs = 0; + /* correct offset */ + if(x_offs + x_size > (int)xRes) x_offs = 0; + if(y_offs + y_size > (int)yRes) y_offs = 0; - /* blit buffer 2 fb */ - fbbuff = convertRGB2FB(rgbbuff, x_size, y_size, transp); - if(fbbuff==NULL) - return; + /* blit buffer 2 fb */ + fbbuff = convertRGB2FB(rgbbuff, x_size, y_size, transp); + if(fbbuff==NULL) + return; - /* ClearFB if image is smaller */ - /* if(x_size < (int)xRes || y_size < (int)yRes) */ - if(clearfb) - CFrameBuffer::getInstance()->Clear(); + /* ClearFB if image is smaller */ + /* if(x_size < (int)xRes || y_size < (int)yRes) */ + if(clearfb) + CFrameBuffer::getInstance()->Clear(); - blit2FB(fbbuff, x_size, y_size, x_offs, y_offs, x_pan, y_pan); - cs_free_uncached(fbbuff); -} - -#ifdef HAVE_AZBOX_HARDWARE -#ifndef FBIO_WAITFORVSYNC -#define FBIO_WAITFORVSYNC _IOW('F', 0x20, __u32) -#endif - -void CFrameBuffer::blit() -{ - // blit - if (ioctl(fd, FBIO_BLIT) < 0) - perror("FBIO_BLIT"); -#if 0 - // sync bliter - int c = 0; - if( ioctl(fd, FBIO_WAITFORVSYNC, &c) < 0 ) - perror("FBIO_WAITFORVSYNC"); -#endif -} -#endif - -void CFrameBuffer::paintMuteIcon(bool paint, int ax, int ay, int dx, int dy, bool paintFrame) -{ - if(paint) { - if (paintFrame) { - paintBackgroundBoxRel(ax, ay, dx, dy); - paintBoxRel(ax, ay, dx, dy, COL_MENUCONTENT_PLUS_0, RADIUS_SMALL); - } - int icon_dx=0, icon_dy=0; - getIconSize(NEUTRINO_ICON_BUTTON_MUTE, &icon_dx, &icon_dy); - paintIcon(NEUTRINO_ICON_BUTTON_MUTE, ax+((dx-icon_dx)/2), ay+((dy-icon_dy)/2)); - } - else - paintBackgroundBoxRel(ax, ay, dx, dy); - blit(); + blit2FB(fbbuff, x_size, y_size, x_offs, y_offs, x_pan, y_pan); + cs_free_uncached(fbbuff); } diff --git a/src/driver/framebuffer.h b/src/driver/framebuffer.h index 0a510c7e6..a114d9899 100644 --- a/src/driver/framebuffer.h +++ b/src/driver/framebuffer.h @@ -4,8 +4,6 @@ Copyright (C) 2001 Steffen Hehn 'McClean' Homepage: http://dbox.cyberphoria.org/ - Copyright (C) 2007-2012 Stefan Seyfried - License: GPL This program is free software; you can redistribute it and/or modify @@ -60,13 +58,6 @@ typedef struct fb_var_screeninfo t_fb_var_screeninfo; #define NON_BIG_WINDOWS 85 // % #define ConnectLineBox_Width 16 // px -#if HAVE_GENERIC_HARDWARE -#define USE_OPENGL 1 -#endif -#ifdef USE_OPENGL -class GLThreadObj; -#endif - /** Ausfuehrung als Singleton */ class CFrameBuffer { @@ -131,15 +122,10 @@ class CFrameBuffer std::map icon_cache; int cache_size; void * int_convertRGB2FB(unsigned char *rgbbuff, unsigned long x, unsigned long y, int transp, bool alpha); -#if HAVE_SPARK_HARDWARE - void blitRect(int x, int y, int width, int height, unsigned long color); - void blitIcon(int src_width, int src_height, int fb_x, int fb_y, int width, int height); -#endif int m_transparent_default, m_transparent; -#ifdef USE_OPENGL - GLThreadObj *mpGLThreadObj; /* the thread object */ -#endif - + // Unlocked versions (no mutex) + void paintHLineRelInternal(int x, int dx, int y, const fb_pixel_t col); + void paintVLineRelInternal(int x, int y, int dy, const fb_pixel_t col); public: fb_pixel_t realcolor[256]; @@ -159,7 +145,6 @@ class CFrameBuffer t_fb_var_screeninfo *getScreenInfo(); fb_pixel_t * getFrameBufferPointer() const; // pointer to framebuffer - fb_pixel_t * getBackBufferPointer() const; // pointer to backbuffer unsigned int getStride() const; // size of a single line in the framebuffer (in bytes) unsigned int getScreenWidth(bool real = false); unsigned int getScreenHeight(bool real = false); @@ -195,13 +180,12 @@ class CFrameBuffer void paintBoxFrame(const int x, const int y, const int dx, const int dy, const int px, const fb_pixel_t col, const int rad = 0); void paintLine(int xa, int ya, int xb, int yb, const fb_pixel_t col); - void paintVLine(int x, int ya, int yb, const fb_pixel_t col); + inline void paintVLine(int x, int ya, int yb, const fb_pixel_t col) { paintVLineRel(x, ya, yb - ya, col); } void paintVLineRel(int x, int y, int dy, const fb_pixel_t col); - void paintHLine(int xa, int xb, int y, const fb_pixel_t col); + inline void paintHLine(int xa, int xb, int y, const fb_pixel_t col) { paintHLineRel(xa, xb - xa, y, col); } void paintHLineRel(int x, int dx, int y, const fb_pixel_t col); - void setIconBasePath(const std::string & iconPath); void getIconSize(const char * const filename, int* width, int *height); @@ -242,12 +226,8 @@ class CFrameBuffer #ifdef USE_NEVIS_GXA void add_gxa_sync_marker(void); void waitForIdle(void); -#else -#if HAVE_TRIPLEDRAGON || HAVE_SPARK_HARDWARE - void waitForIdle(void); #else inline void waitForIdle(void) {}; -#endif #endif void* convertRGB2FB(unsigned char *rgbbuff, unsigned long x, unsigned long y, int transp = 0xFF); void* convertRGBA2FB(unsigned char *rgbbuff, unsigned long x, unsigned long y); @@ -255,18 +235,6 @@ class CFrameBuffer void blit2FB(void *fbbuff, uint32_t width, uint32_t height, uint32_t xoff, uint32_t yoff, uint32_t xp = 0, uint32_t yp = 0, bool transp = false); bool blitToPrimary(unsigned int * data, int dx, int dy, int sw, int sh); -#if HAVE_SPARK_HARDWARE - void mark(int x, int y, int dx, int dy); - void blit(void); -#elif HAVE_AZBOX_HARDWARE - void mark(int, int, int, int) {}; - void blit(void); -#else - void mark(int, int, int, int) {}; - void blit(void) {}; -#endif - void paintMuteIcon(bool paint, int ax, int ay, int dx, int dy, bool paintFrame=true); - enum { TM_EMPTY = 0, diff --git a/src/driver/pictureviewer/Makefile.am b/src/driver/pictureviewer/Makefile.am index 1a55d6f56..9b537443c 100644 --- a/src/driver/pictureviewer/Makefile.am +++ b/src/driver/pictureviewer/Makefile.am @@ -10,8 +10,12 @@ INCLUDES = \ @FREETYPE_CFLAGS@ if BOXTYPE_COOL +if BOXMODEL_APOLLO +INCLUDES += -I$(top_srcdir)/lib/libcoolstream2 +else INCLUDES += -I$(top_srcdir)/lib/libcoolstream endif +endif if USE_STB_HAL INCLUDES += -I$(STB_HAL_INC) endif diff --git a/src/driver/pictureviewer/pictureviewer.cpp b/src/driver/pictureviewer/pictureviewer.cpp index 76f7f24ea..0e23374f4 100644 --- a/src/driver/pictureviewer/pictureviewer.cpp +++ b/src/driver/pictureviewer/pictureviewer.cpp @@ -368,6 +368,17 @@ CPictureViewer::CPictureViewer () init_handlers (); } +CPictureViewer::~CPictureViewer () +{ + Cleanup(); + CFormathandler *fh = fh_root; + while (fh) { + CFormathandler *tmp = fh->next; + free(fh); + fh = tmp; + } +} + void CPictureViewer::showBusy (int sx, int sy, int width, char r, char g, char b) { // dbout("Show Busy{\n"); @@ -448,12 +459,6 @@ void CPictureViewer::Cleanup () free (m_CurrentPic_Buffer); m_CurrentPic_Buffer = NULL; } - CFormathandler *fh = fh_root; - while (fh) { - CFormathandler *tmp = fh->next; - free(fh); - fh = tmp; - } } void CPictureViewer::getSize(const char* name, int* width, int *height) diff --git a/src/driver/pictureviewer/pictureviewer.h b/src/driver/pictureviewer/pictureviewer.h index 011fa8bee..bb47b34bd 100644 --- a/src/driver/pictureviewer/pictureviewer.h +++ b/src/driver/pictureviewer/pictureviewer.h @@ -50,7 +50,7 @@ class CPictureViewer COLOR=2 }; CPictureViewer(); - ~CPictureViewer(){Cleanup();}; + ~CPictureViewer(); bool ShowImage(const std::string & filename, bool unscaled=false); bool DecodeImage(const std::string & name, bool showBusySign=false, bool unscaled=false); bool DisplayNextImage(); diff --git a/src/driver/rcinput.cpp b/src/driver/rcinput.cpp index 92a715d00..710a772f1 100644 --- a/src/driver/rcinput.cpp +++ b/src/driver/rcinput.cpp @@ -1549,7 +1549,13 @@ const char * CRCInput::getSpecialKeyName(const unsigned int key) case RC_analog_off: return "analog off"; case RC_www: - return "window print"; + return "www"; + case RC_sub: + return "sub"; + case RC_pos: + return "pos"; + case RC_sleep: + return "sleep"; default: printf("unknown key: %d (0x%x) \n", key, key); return "unknown"; @@ -1628,8 +1634,8 @@ void CRCInput::play_click() } -#ifdef HAVE_COOLSTREAM_NEVIS_IR_H -// hint: ir_protocol_t and other useful things are defined in nevis_ir.h +#ifdef IOC_IR_SET_PRI_PROTOCOL +// hint: ir_protocol_t and other useful things are defined in cs_ir_generic.h void CRCInput::set_rc_hw(ir_protocol_t ir_protocol, unsigned int ir_address) { int ioctl_ret = -1; @@ -1653,7 +1659,7 @@ void CRCInput::set_rc_hw(ir_protocol_t ir_protocol, unsigned int ir_address) } } -// hint: ir_protocol_t and other useful things are defined in nevis_ir.h +// hint: ir_protocol_t and other useful things are defined in cs_ir_generic.h void CRCInput::set_rc_hw(void) { ir_protocol_t ir_protocol = IR_PROTOCOL_UNKNOWN; diff --git a/src/driver/rcinput.h b/src/driver/rcinput.h index 451a8751e..c88bc3495 100644 --- a/src/driver/rcinput.h +++ b/src/driver/rcinput.h @@ -38,9 +38,16 @@ #include #include #include + +#ifdef BOXMODEL_APOLLO +#ifdef HAVE_COOLSTREAM_CS_IR_GENERIC_H +#include +#endif +#else #ifdef HAVE_COOLSTREAM_NEVIS_IR_H #include #endif +#endif #ifndef KEY_OK #define KEY_OK 0x160 @@ -156,7 +163,7 @@ class CRCInput int translate(int code, int num); void calculateMaxFd(void); int checkTimers(); -#ifdef HAVE_COOLSTREAM_NEVIS_IR_H +#ifdef IOC_IR_SET_PRI_PROTOCOL void set_rc_hw(ir_protocol_t ir_protocol, unsigned int ir_address); #endif public: @@ -229,6 +236,9 @@ class CRCInput RC_next = KEY_NEXT, RC_prev = KEY_PREVIOUS, RC_www = KEY_WWW, + RC_sub = KEY_SUBTITLE, + RC_pos = KEY_MOVE, + RC_sleep = KEY_SLEEP, RC_power_on = KEY_POWERON, RC_power_off = KEY_POWEROFF, diff --git a/src/driver/record.cpp b/src/driver/record.cpp index 97fdf84f5..3584f0797 100644 --- a/src/driver/record.cpp +++ b/src/driver/record.cpp @@ -146,7 +146,8 @@ record_error_msg_t CRecordInstance::Start(CZapitChannel * channel) time_t msg_start_time = time(0); CHintBox hintBox(LOCALE_MESSAGEBOX_INFO, g_Locale->getText(LOCALE_RECORDING_START)); - hintBox.paint(); + if (!(autoshift && g_settings.auto_timeshift)) + hintBox.paint(); tsfile = std::string(filename) + ".ts"; @@ -207,8 +208,9 @@ record_error_msg_t CRecordInstance::Start(CZapitChannel * channel) return RECORD_FAILURE; } +printf("CRecordInstance::Start: fe %d demux %d\n", frontend->getNumber(), channel->getRecordDemux()); if(!autoshift) - CFEManager::getInstance()->lockFrontend(frontend);//FIXME testing + CFEManager::getInstance()->lockFrontend(frontend, channel);//FIXME testing start_time = time(0); SaveXml(); @@ -238,7 +240,8 @@ bool CRecordInstance::Stop(bool remove_event) recMovieInfo->length = (int) round((double) (end_time - start_time) / (double) 60); CHintBox hintBox(LOCALE_MESSAGEBOX_INFO, rec_stop_msg.c_str()); - hintBox.paint(); + if (!(autoshift && g_settings.auto_timeshift)) + hintBox.paint(); printf("%s: channel %" PRIx64 " recording_id %d\n", __func__, channel_id, recording_id); SaveXml(); @@ -246,7 +249,7 @@ bool CRecordInstance::Stop(bool remove_event) record->Stop(); if(!autoshift) - CFEManager::getInstance()->unlockFrontend(frontend);//FIXME testing + CFEManager::getInstance()->unlockFrontend(frontend, true);//FIXME testing CCamManager::getInstance()->Stop(channel_id, CCamManager::RECORD); @@ -673,7 +676,10 @@ void CRecordInstance::GetRecordString(std::string &str) char stime[15]; int err = GetStatus(); strftime(stime, sizeof(stime), "%H:%M:%S ", localtime(&start_time)); - str = stime + channel->getName() + ": " + GetEpgTitle() + ((err & REC_STATUS_OVERFLOW) ? " [!]" : ""); + time_t duration = time(0) - start_time; + char dtime[15]; + snprintf(dtime, sizeof(dtime), " (%02d:%02d)", (int) duration/3600, (int) duration/60); + str = stime + channel->getName() + ": " + GetEpgTitle() + ((err & REC_STATUS_OVERFLOW) ? " [!]" : "") + dtime; } //------------------------------------------------------------------------- @@ -862,6 +868,8 @@ bool CRecordManager::Record(const CTimerd::RecordingInfo * const eventinfo, cons printf("%s channel_id %" PRIx64 " epg: %" PRIx64 ", apidmode 0x%X\n", __func__, eventinfo->channel_id, eventinfo->epgID, eventinfo->apids); + if (g_settings.recording_type == CNeutrinoApp::RECORDING_OFF) + return false; #if 0 if(!CheckRecording(eventinfo)) return false; @@ -1310,7 +1318,7 @@ void CRecordManager::StartTimeshift() if(res) { CMoviePlayerGui::getInstance().exec(NULL, tmode); - if(g_settings.temp_timeshift) + if(g_settings.temp_timeshift && !g_settings.auto_timeshift) ShowMenu(); } } @@ -1318,6 +1326,9 @@ void CRecordManager::StartTimeshift() int CRecordManager::exec(CMenuTarget* parent, const std::string & actionKey ) { + if (g_settings.recording_type == CNeutrinoApp::RECORDING_OFF) + return menu_return::RETURN_REPAINT; + if(parent) parent->hide(); @@ -1597,12 +1608,12 @@ bool CRecordManager::CutBackNeutrino(const t_channel_id channel_id, CFrontend * /* first try to get frontend for record with locked live */ bool unlock = true; CFEManager::getInstance()->lockFrontend(live_fe); - frontend = CFEManager::getInstance()->allocateFE(channel); + frontend = CFEManager::getInstance()->allocateFE(channel, true); if (frontend == NULL) { /* no frontend, try again with unlocked live */ unlock = false; CFEManager::getInstance()->unlockFrontend(live_fe); - frontend = CFEManager::getInstance()->allocateFE(channel); + frontend = CFEManager::getInstance()->allocateFE(channel, true); } if (frontend == NULL) return false; @@ -1632,7 +1643,22 @@ bool CRecordManager::CutBackNeutrino(const t_channel_id channel_id, CFrontend * if (unlock) CFEManager::getInstance()->unlockFrontend(live_fe); } +#ifdef DYNAMIC_DEMUX + else { + frontend = CFEManager::getInstance()->allocateFE(channel, true); + } + printf("%s: record demux: %d\n", __FUNCTION__, channel->getRecordDemux()); + if (channel->getRecordDemux() == 0) + ret = false; +#endif if(ret) { +#ifdef ENABLE_PIP + /* FIXME until proper demux management */ + t_channel_id pip_channel_id = CZapit::getInstance()->GetPipChannelID(); + if ((pip_channel_id == channel_id) && (channel->getRecordDemux() == channel->getPipDemux())) + g_Zapit->stopPip(); +#endif + if(StopSectionsd) { printf("%s: g_Sectionsd->setPauseScanning(true)\n", __FUNCTION__); g_Sectionsd->setPauseScanning(true); diff --git a/src/driver/screenshot.cpp b/src/driver/screenshot.cpp index 8d85d6571..ce6c1ab8e 100644 --- a/src/driver/screenshot.cpp +++ b/src/driver/screenshot.cpp @@ -127,8 +127,6 @@ void CScreenShot::run() } /* save file in sync mode, return true if save ok, or false */ -#if 0 -//never used bool CScreenShot::StartSync() { bool ret = false; @@ -139,7 +137,7 @@ bool CScreenShot::StartSync() printf("CScreenShot::StartSync: %s finished: %d\n", filename.c_str(), ret); return ret; } -#endif + /* save file in selected format, free data received from video decoder */ bool CScreenShot::SaveFile() { @@ -216,7 +214,9 @@ bool CScreenShot::SavePng() png_set_compression_level(png_ptr, Z_BEST_SPEED); png_set_bgr(png_ptr); - //png_set_invert_alpha(png_ptr); +#ifdef BOXMODEL_APOLLO + png_set_invert_alpha(png_ptr); +#endif png_write_info(png_ptr, info_ptr); png_write_image(png_ptr, row_pointers); png_write_end(png_ptr, info_ptr); diff --git a/src/driver/streamts.cpp b/src/driver/streamts.cpp index 6b929001e..4cfb69f31 100644 --- a/src/driver/streamts.cpp +++ b/src/driver/streamts.cpp @@ -162,15 +162,21 @@ void CStreamInstance::run() { printf("CStreamInstance::run: %" PRIx64 "\n", channel_id); -#ifndef HAVE_COOL_HARDWARE +#if 0 +// TODO: check if this works... #ifndef HAVE_COOL_HARDWARE /* right now, only one stream is possible anyway and it is not possible * to stream a different channel than the live channel AFAICT, so we can * as well use the live demux */ dmx = new cDemux(0); -#else +#endif +#if 0 dmx = new cDemux(STREAM_DEMUX);//FIXME #endif + CZapitChannel * tmpchan = CServiceManager::getInstance()->FindChannel(channel_id); + if (!tmpchan) + return; + dmx = new cDemux(tmpchan->getRecordDemux());//FIXME dmx->Open(DMX_TP_CHANNEL, NULL, DMX_BUFFER_SIZE); /* pids here cannot be empty */ @@ -357,6 +363,13 @@ bool CStreamManager::Parse(int fd, stream_pids_t &pids, t_channel_id &chid) printf("CStreamManager::Parse: channel %" PRIx64 " recorded, aborting..\n", chid); return false; } +#ifdef ENABLE_PIP + t_channel_id pip_channel_id = CZapit::getInstance()->GetPipChannelID(); + if ((chid == pip_channel_id) && (channel->getRecordDemux() == channel->getPipDemux())) { + printf("CStreamManager::Parse: channel %llx used for pip, aborting..\n", chid); + return false; + } +#endif #endif printf("CStreamManager::Parse: no pids in url, using channel %" PRIx64 " pids\n", chid); diff --git a/src/driver/vfd.cpp b/src/driver/vfd.cpp index 51b6de1e1..80e8f06f4 100644 --- a/src/driver/vfd.cpp +++ b/src/driver/vfd.cpp @@ -171,9 +171,9 @@ void CVFD::setlcdparameter(int dimm, const int power) brightness = dimm; printf("CVFD::setlcdparameter dimm %d power %d\n", dimm, power); - int ret = ioctl(fd, IOC_VFD_SET_BRIGHT, dimm); + int ret = ioctl(fd, IOC_FP_SET_BRIGHT, dimm); if(ret < 0) - perror("IOC_VFD_SET_BRIGHT"); + perror("IOC_FP_SET_BRIGHT"); } void CVFD::setlcdparameter(void) @@ -188,14 +188,14 @@ void CVFD::setled(int led1, int led2){ int ret = -1; if(led1 != -1){ - ret = ioctl(fd, IOC_VFD_LED_CTRL, led1); + ret = ioctl(fd, IOC_FP_LED_CTRL, led1); if(ret < 0) - perror("IOC_VFD_LED_CTRL"); + perror("IOC_FP_LED_CTRL"); } if(led2 != -1){ - ret = ioctl(fd, IOC_VFD_LED_CTRL, led2); + ret = ioctl(fd, IOC_FP_LED_CTRL, led2); if(ret < 0) - perror("IOC_VFD_LED_CTRL"); + perror("IOC_FP_LED_CTRL"); } } @@ -208,13 +208,13 @@ void CVFD::setled(bool on_off) if(on_off){//on switch(g_settings.led_rec_mode){ case 1: - led1 = VFD_LED_1_ON; led2 = VFD_LED_2_ON; + led1 = FP_LED_1_ON; led2 = FP_LED_2_ON; break; case 2: - led1 = VFD_LED_1_ON; + led1 = FP_LED_1_ON; break; case 3: - led2 = VFD_LED_2_ON; + led2 = FP_LED_2_ON; break; default: break; @@ -224,13 +224,13 @@ void CVFD::setled(bool on_off) switch(g_settings.led_rec_mode){ break; case 2: - led1 = VFD_LED_1_OFF; + led1 = FP_LED_1_OFF; break; case 3: - led2 = VFD_LED_2_OFF; + led2 = FP_LED_2_OFF; break; default: - led1 = VFD_LED_1_OFF; led2 = VFD_LED_2_OFF; + led1 = FP_LED_1_OFF; led2 = FP_LED_2_OFF; break; } } @@ -251,16 +251,16 @@ void CVFD::setled(void) switch(select){ case 0: - led1 = VFD_LED_1_OFF; led2 = VFD_LED_2_OFF; + led1 = FP_LED_1_OFF; led2 = FP_LED_2_OFF; break; case 1: - led1 = VFD_LED_1_ON; led2 = VFD_LED_2_ON; + led1 = FP_LED_1_ON; led2 = FP_LED_2_ON; break; case 2: - led1 = VFD_LED_1_ON; led2 = VFD_LED_2_OFF; + led1 = FP_LED_1_ON; led2 = FP_LED_2_OFF; break; case 3: - led1 = VFD_LED_1_OFF; led2 = VFD_LED_2_ON; + led1 = FP_LED_1_OFF; led2 = FP_LED_2_ON; break; default: break; @@ -290,7 +290,7 @@ void CVFD::showTime(bool force) return; #endif if(has_lcd && mode == MODE_SHUTDOWN) { - ShowIcon(VFD_ICON_CAM1, false); + ShowIcon(FP_ICON_CAM1, false); return; } if (has_lcd && showclock) { @@ -316,18 +316,18 @@ void CVFD::showTime(bool force) if(clearClock) { clearClock = 0; if(has_lcd) - ShowIcon(VFD_ICON_CAM1, false); + ShowIcon(FP_ICON_CAM1, false); setled(false);//off } else { clearClock = 1; if(has_lcd) - ShowIcon(VFD_ICON_CAM1, true); + ShowIcon(FP_ICON_CAM1, true); setled(true);//on } } else if(clearClock || (recstatus != tmp_recstatus)) { // in case icon ON after record stopped clearClock = 0; if(has_lcd) - ShowIcon(VFD_ICON_CAM1, false); + ShowIcon(FP_ICON_CAM1, false); setled(); } recstatus = tmp_recstatus; @@ -342,13 +342,13 @@ void CVFD::showVolume(const char vol, const bool /*perform_update*/) static int oldpp = 0; if(!has_lcd) return; - ShowIcon(VFD_ICON_MUTE, muted); + ShowIcon(FP_ICON_MUTE, muted); if(vol == volume) return; volume = vol; wake_up(); - ShowIcon(VFD_ICON_FRAME, true); + ShowIcon(FP_ICON_FRAME, true); if ((mode == MODE_TVRADIO) && g_settings.lcd_setting[SNeutrinoSettings::LCD_SHOW_VOLUME]) { int pp = (vol * 8 + 50) / 100; @@ -359,11 +359,11 @@ printf("CVFD::showVolume: %d, bar %d\n", (int) vol, pp); int i; int j = 0x00000200; for(i = 0; i < pp; i++) { - ShowIcon((vfd_icon) j, true); + ShowIcon((fp_icon) j, true); j /= 2; } for(;i < 8; i++) { - ShowIcon((vfd_icon) j, false); + ShowIcon((fp_icon) j, false); j /= 2; } oldpp = pp; @@ -378,7 +378,7 @@ void CVFD::showPercentOver(const unsigned char perc, const bool /*perform_update if ((mode == MODE_TVRADIO) && !(g_settings.lcd_setting[SNeutrinoSettings::LCD_SHOW_VOLUME])) { //if (g_settings.lcd_setting[SNeutrinoSettings::LCD_SHOW_VOLUME] == 0) { - ShowIcon(VFD_ICON_FRAME, true); + ShowIcon(FP_ICON_FRAME, true); int pp; if(perc == 255) pp = 0; @@ -390,11 +390,11 @@ void CVFD::showPercentOver(const unsigned char perc, const bool /*perform_update int i; int j = 0x00000200; for(i = 0; i < pp; i++) { - ShowIcon((vfd_icon) j, true); + ShowIcon((fp_icon) j, true); j /= 2; } for(;i < 8; i++) { - ShowIcon((vfd_icon) j, false); + ShowIcon((fp_icon) j, false); j /= 2; } percentOver = pp; @@ -434,16 +434,16 @@ void CVFD::showAudioPlayMode(AUDIOMODES m) if(!has_lcd) return; switch(m) { case AUDIO_MODE_PLAY: - ShowIcon(VFD_ICON_PLAY, true); - ShowIcon(VFD_ICON_PAUSE, false); + ShowIcon(FP_ICON_PLAY, true); + ShowIcon(FP_ICON_PAUSE, false); break; case AUDIO_MODE_STOP: - ShowIcon(VFD_ICON_PLAY, false); - ShowIcon(VFD_ICON_PAUSE, false); + ShowIcon(FP_ICON_PLAY, false); + ShowIcon(FP_ICON_PAUSE, false); break; case AUDIO_MODE_PAUSE: - ShowIcon(VFD_ICON_PLAY, false); - ShowIcon(VFD_ICON_PAUSE, true); + ShowIcon(FP_ICON_PLAY, false); + ShowIcon(FP_ICON_PAUSE, true); break; case AUDIO_MODE_FF: break; @@ -476,11 +476,11 @@ void CVFD::setMode(const MODES m, const char * const title) if(!has_lcd) return; if(mode == MODE_AUDIO) - ShowIcon(VFD_ICON_MP3, false); + ShowIcon(FP_ICON_MP3, false); #if 0 else if(mode == MODE_STANDBY) { - ShowIcon(VFD_ICON_COL1, false); - ShowIcon(VFD_ICON_COL2, false); + ShowIcon(FP_ICON_COL1, false); + ShowIcon(FP_ICON_COL2, false); } #endif @@ -513,7 +513,7 @@ void CVFD::setMode(const MODES m, const char * const title) break; case MODE_AUDIO: { - ShowIcon(VFD_ICON_MP3, true); + ShowIcon(FP_ICON_MP3, true); showAudioPlayMode(AUDIO_MODE_STOP); showVolume(volume, false); showclock = true; @@ -535,8 +535,8 @@ void CVFD::setMode(const MODES m, const char * const title) break; case MODE_STANDBY: #if 0 - ShowIcon(VFD_ICON_COL1, true); - ShowIcon(VFD_ICON_COL2, true); + ShowIcon(FP_ICON_COL1, true); + ShowIcon(FP_ICON_COL2, true); #endif showclock = true; showTime(true); /* "showclock = true;" implies that "showTime();" does a "displayUpdate();" */ @@ -671,20 +671,20 @@ void CVFD::Unlock() void CVFD::Clear() { if(!has_lcd) return; - int ret = ioctl(fd, IOC_VFD_CLEAR_ALL, 0); + int ret = ioctl(fd, IOC_FP_CLEAR_ALL, 0); if(ret < 0) - perror("IOC_VFD_SET_TEXT"); + perror("IOC_FP_SET_TEXT"); else text[0] = 0; } -void CVFD::ShowIcon(vfd_icon icon, bool show) +void CVFD::ShowIcon(fp_icon icon, bool show) { if(!has_lcd || fd < 0) return; //printf("CVFD::ShowIcon %s %x\n", show ? "show" : "hide", (int) icon); - int ret = ioctl(fd, show ? IOC_VFD_SET_ICON : IOC_VFD_CLEAR_ICON, icon); + int ret = ioctl(fd, show ? IOC_FP_SET_ICON : IOC_FP_CLEAR_ICON, icon); if(ret < 0) - perror(show ? "IOC_VFD_SET_ICON" : "IOC_VFD_CLEAR_ICON"); + perror(show ? "IOC_FP_SET_ICON" : "IOC_FP_CLEAR_ICON"); } void CVFD::ShowText(const char *str) @@ -709,9 +709,9 @@ printf("CVFD::ShowText: [%s]\n", str); //printf("****************************** CVFD::ShowText: %s\n", str); //FIXME !! - ret = ioctl(fd, IOC_VFD_SET_TEXT, len ? str : NULL); + ret = ioctl(fd, IOC_FP_SET_TEXT, len ? str : NULL); if(ret < 0) - perror("IOC_VFD_SET_TEXT"); + perror("IOC_FP_SET_TEXT"); } #ifdef VFD_UPDATE diff --git a/src/driver/vfd.h b/src/driver/vfd.h index b7265a7a0..b011881ed 100644 --- a/src/driver/vfd.h +++ b/src/driver/vfd.h @@ -42,7 +42,8 @@ #include #include -#include + +#include class CVFD { @@ -144,7 +145,7 @@ class CVFD void Lock(); void Unlock(); void Clear(); - void ShowIcon(vfd_icon icon, bool show); + void ShowIcon(fp_icon icon, bool show); void ShowText(const char *str); void wake_up(); MODES getMode(void) { return mode; }; diff --git a/src/driver/volume.cpp b/src/driver/volume.cpp index fb392038f..816fbab37 100644 --- a/src/driver/volume.cpp +++ b/src/driver/volume.cpp @@ -1,27 +1,25 @@ /* + Based up Neutrino-GUI - Tuxbox-Project + Copyright (C) 2001 by Steffen Hehn 'McClean' + volume bar - Neutrino-GUI - - Copyright (C) 2001 Steffen Hehn 'McClean' - and some other guys - Homepage: http://dbox.cyberphoria.org/ - - Copyright (C) 2011-2012 M. Liebmann (micha-bbg) - Copyright (C) 2012 Stefan Seyfried + Copyright (C) 2011-2013 M. Liebmann (micha-bbg) + Copyright (C) 2012,2013 Stefan Seyfried License: GPL - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public + 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 library is distributed in the hope that it will be useful, + 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 - Library General Public License for more details. + General Public License for more details. - You should have received a copy of the GNU Library General Public - License along with this library; if not, write to the + You should have received a copy of the GNU General Public + License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. */ @@ -40,11 +38,9 @@ #include #include #include +#include #include -#if HAVE_COOL_HARDWARE -#include -#endif #define VOLUME_SCRIPT CONFIGDIR "/volume.sh" @@ -55,21 +51,13 @@ CVolume::CVolume() { frameBuffer = CFrameBuffer::getInstance(); volscale = NULL; -#if 0 - g_Zapit = new CZapitClient; - g_RCInput = new CRCInput; - v_RemoteControl = new CRemoteControl; -#endif - VolumeFont = SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO; - paintShadow = false; // For future On/Off switch shadow - MuteIconFrame = false; // For future On/Off switch IconFrame - ShadowOffset = 4; + mute_ax = 0; mute_ay = 0; + mute_dx = 0; + mute_dy = 0; m_mode = CNeutrinoApp::getInstance()->getMode(); channel_id = 0; apid = 0; - - Init(); } CVolume::~CVolume() @@ -77,120 +65,6 @@ CVolume::~CVolume() delete volscale; } -void CVolume::Init() -{ - paintDigits = g_settings.volume_digits; - mute_ay_old = mute_ay; - int faktor_h = 18; // scale * 10 - int clock_height= 0; - int clock_width = 0; - - pB = 2; // progress border - spacer = 8; - - colBar = COL_MENUCONTENT_PLUS_0; - colFrame = COL_MENUCONTENT_PLUS_3; - colContent = COL_MENUCONTENT; - colShadow = COL_MENUCONTENTDARK_PLUS_0; - - x = frameBuffer->getScreenX(); - y = sy = frameBuffer->getScreenY() + spacer / 2; - sw = g_settings.screen_EndX - spacer; - sh = frameBuffer->getScreenHeight(); - - frameBuffer->getIconSize(NEUTRINO_ICON_VOLUME, &icon_w, &icon_h); - progress_h = icon_h - 2*pB; - progress_w = 200; - vbar_w = spacer + icon_w + spacer + progress_w + spacer; - digit_h = 0; - digit_offset = 0; - if (paintDigits) { - digit_w = g_Font[VolumeFont]->getRenderWidth("100"); - digit_offset = g_Font[VolumeFont]->getDigitOffset(); - digit_h = g_Font[VolumeFont]->getDigitHeight(); - progress_h = std::max(icon_h, digit_h); - vbar_w += digit_w; - } - vbar_h = std::max((icon_h * faktor_h) / 10, digit_h+digit_offset); - if (volscale) - delete volscale; - volscale = new CProgressBar(progress_x, progress_y, progress_w, progress_h, colFrame, colBar, colShadow, COL_MENUCONTENT_PLUS_3, COL_MENUCONTENT_PLUS_1, true); - volscale->setInvert(); - volscale->setFrameThickness(2); - - // mute icon - mute_icon_dx = 0; - mute_icon_dy = 0; - frameBuffer->getIconSize(NEUTRINO_ICON_BUTTON_MUTE, &mute_icon_dx, &mute_icon_dy); - mute_dx = mute_icon_dx; - mute_dy = mute_icon_dy; - mute_dx += mute_icon_dx / 4; - mute_dy += mute_icon_dx / 4; - mute_ax = sw - mute_dx; - mute_ay = y; - - CNeutrinoApp* neutrino = CNeutrinoApp::getInstance(); - - if ((g_settings.mode_clock) && (g_settings.volume_pos == 0)) { - // Clock and MuteIcon in a line. - clock_height = CInfoClock::getInstance(true)->time_height; - clock_width = CInfoClock::getInstance(true)->time_width; - mute_ay += (clock_height - mute_dy) / 2; - } - else { - // Volume level and MuteIcon in a line. - if (mute_dy > vbar_h) - y += (mute_dy - vbar_h) / 2; - else - mute_ay += (vbar_h - mute_dy) / 2; - } - - if ((g_settings.mode_clock) && (!neutrino->isMuted())) - frameBuffer->paintBackgroundBoxRel(sw - clock_width, y, clock_width, clock_height); -//printf("\n##### [volume.cpp Zeile %d] mute_ax %d, mute_dx %d\n \n", __LINE__, mute_ax, mute_dx); - switch (g_settings.volume_pos) - { - case 0:{// upper right - int x_corr = 0; - if (( neutrino->getMode() != CNeutrinoApp::mode_scart ) && ( neutrino->getMode() != CNeutrinoApp::mode_audio) && ( neutrino->getMode() != CNeutrinoApp::mode_pic)) { - if ((neutrino->isMuted()) && (!g_settings.mode_clock)) - x_corr = mute_dx + spacer; - if (g_settings.mode_clock) - y += clock_height + spacer / 2; - } - x = sw - vbar_w - x_corr; - break; - } - case 1:// upper left - break; - case 2:// bottom left - y = sh - vbar_h; - break; - case 3:// bottom right - x = sw - vbar_w; - y = sh - vbar_h; - break; - case 4:// center default - x = ((sw - vbar_w) / 2) + x; - break; - case 5:// center higher - x = ((sw - vbar_w) / 2) + x; - y = sh - sh/15; - break; - } - - icon_x = x + spacer; - icon_y = y + ((vbar_h - icon_h) / 2); - progress_x = icon_x + icon_w + spacer; - progress_y = y + ((vbar_h - progress_h) / 2); - if (paintDigits) { - digit_x = progress_x + progress_w + spacer/2; - digit_y = y + digit_h + digit_offset + ((vbar_h - digit_h) / 2); - digit_b_x = digit_x - spacer/4; - digit_b_w = vbar_w - (digit_b_x - x); - } -} - CVolume* CVolume::getInstance() { static CVolume* Volume = NULL; @@ -199,38 +73,12 @@ CVolume* CVolume::getInstance() return Volume; } -void CVolume::AudioMute(int newValue, bool isEvent) -{ - if (!g_Zapit) /* don't die... */ - return; - CNeutrinoApp* neutrino = CNeutrinoApp::getInstance(); - bool doInit = newValue != (int) neutrino->isMuted(); - - CVFD::getInstance()->setMuted(newValue); - neutrino->setCurrentMuted(newValue); - g_Zapit->muteAudio(newValue); - - if( isEvent && ( neutrino->getMode() != CNeutrinoApp::mode_scart ) && ( neutrino->getMode() != CNeutrinoApp::mode_audio) && ( neutrino->getMode() != CNeutrinoApp::mode_pic)) - { - if ((mute_ay_old != mute_ay) && (mute_ay_old > 0)) - frameBuffer->paintBackgroundBoxRel(mute_ax, mute_ay_old, mute_dx, mute_dy); - if ((g_settings.mode_clock) && (doInit)) - CInfoClock::getInstance(true)->ClearDisplay(); - frameBuffer->paintMuteIcon(newValue, mute_ax, mute_ay, mute_dx, mute_dy, MuteIconFrame); - if (doInit) { - Init(); - CInfoClock::getInstance(true)->Init(true); - } - } -} - void CVolume::setvol(int vol) { - //audioDecoder->setVolume(vol, vol); CZapit::getInstance()->SetVolume(vol); } -void CVolume::setVolume(const neutrino_msg_t key, const bool bDoPaint, bool nowait) +void CVolume::setVolume(const neutrino_msg_t key, bool nowait) { if (!g_RCInput) /* don't die... */ return; @@ -241,34 +89,25 @@ void CVolume::setVolume(const neutrino_msg_t key, const bool bDoPaint, bool nowa if (msg <= CRCInput::RC_MaxRC) { if(m_mode != mode) { m_mode = mode; - Init(); setVolume(msg); return; } } - - int vol = g_settings.current_volume; - fb_pixel_t * pixbuf = NULL; - if (bDoPaint && do_vol) { - pixbuf = new fb_pixel_t[(vbar_w+ShadowOffset) * (vbar_h+ShadowOffset)]; - if(pixbuf!= NULL) - frameBuffer->SaveScreen(x, y, vbar_w+ShadowOffset, vbar_h+ShadowOffset, pixbuf); + if (volscale){ + volscale->hide(); + delete volscale; + volscale = NULL; + } - // volumebar shadow - if (paintShadow) - frameBuffer->paintBoxRel(x+ShadowOffset , y+ShadowOffset , (paintDigits) ? vbar_w - vbar_h : vbar_w + 1, vbar_h, colShadow, ROUNDED, (paintDigits) ? CORNER_TOP_LEFT | CORNER_BOTTOM_LEFT : CORNER_ALL); - // volumebar - frameBuffer->paintBoxRel(x , y , (paintDigits) ? vbar_w - vbar_h : vbar_w + 1, vbar_h, colBar, ROUNDED, (paintDigits) ? CORNER_TOP_LEFT | CORNER_BOTTOM_LEFT : CORNER_ALL); - // volume icon - frameBuffer->paintIcon(NEUTRINO_ICON_VOLUME, icon_x, icon_y, 0, colBar); - - volscale->reset(); - refreshVolumebar(vol); + if (volscale == NULL){ + volscale = new CVolumeBar(); + volscale->paint(); } neutrino_msg_data_t data; uint64_t timeoutEnd; + int vol = g_settings.current_volume; do { if (msg <= CRCInput::RC_MaxRC) @@ -290,18 +129,19 @@ void CVolume::setVolume(const neutrino_msg_t key, const bool bDoPaint, bool nowa } else do_vol = true; if (CNeutrinoApp::getInstance()->isMuted() && (dir > 0 || g_settings.current_volume > 0)) { - if (pixbuf != NULL) { - frameBuffer->RestoreScreen(x, y, vbar_w+ShadowOffset, vbar_h+ShadowOffset, pixbuf); - delete [] pixbuf; + if (volscale){ + if (volscale->isPainted()) + volscale->hide(); + delete volscale; + volscale = NULL; } if (do_vol) { - AudioMute(false, true); - Init(); + CAudioMute::getInstance()->AudioMute(false, true); setVolume(msg); return; } } - + if (do_vol && !CNeutrinoApp::getInstance()->isMuted()) { /* current_volume is char, we need signed to catch v < 0 */ int v = g_settings.current_volume; @@ -312,12 +152,13 @@ void CVolume::setVolume(const neutrino_msg_t key, const bool bDoPaint, bool nowa v = 0; g_settings.current_volume = 0; if (g_settings.show_mute_icon) { - if (pixbuf != NULL) { - frameBuffer->RestoreScreen(x, y, vbar_w+ShadowOffset, vbar_h+ShadowOffset, pixbuf); - delete []pixbuf; + if (volscale) { + if (volscale->isPainted()) + volscale->hide(); + delete volscale; + volscale = NULL; } - AudioMute(true, true); - Init(); + CAudioMute::getInstance()->AudioMute(true, true); setVolume(msg); return; } @@ -344,10 +185,10 @@ void CVolume::setVolume(const neutrino_msg_t key, const bool bDoPaint, bool nowa break; } - if (pixbuf) { + if (volscale) { if(vol != g_settings.current_volume) { vol = g_settings.current_volume; - refreshVolumebar(g_settings.current_volume); + volscale->repaintVolScale(); } } @@ -357,31 +198,14 @@ void CVolume::setVolume(const neutrino_msg_t key, const bool bDoPaint, bool nowa } } while (msg != CRCInput::RC_timeout); - if (pixbuf != NULL) { - frameBuffer->RestoreScreen(x, y, vbar_w+ShadowOffset, vbar_h+ShadowOffset, pixbuf); - delete [] pixbuf; + if (volscale) { + if (volscale->isPainted()) + volscale->hide(); + delete volscale; + volscale = NULL; } } -void CVolume::refreshVolumebar(int current_volume) -{ - if (paintDigits) { - // shadow for erase digits - if (paintShadow) - frameBuffer->paintBoxRel(digit_b_x+ShadowOffset, y+ShadowOffset, digit_b_w, vbar_h, colShadow, ROUNDED, CORNER_TOP_RIGHT | CORNER_BOTTOM_RIGHT); - // erase digits - frameBuffer->paintBoxRel(digit_b_x, y, digit_b_w, vbar_h, colBar, ROUNDED, CORNER_TOP_RIGHT | CORNER_BOTTOM_RIGHT); - // digits - char buff[4]; - snprintf(buff, 4, "%3d", current_volume); - g_Font[VolumeFont]->RenderString(digit_x, digit_y, digit_w, buff, colContent); - } - // progressbar - volscale->setValues(current_volume, 100); - volscale->paint(); - frameBuffer->blit(); -} - bool CVolume::changeNotify(const neutrino_locale_t OptionName, void * data) { bool ret = false; diff --git a/src/driver/volume.h b/src/driver/volume.h index 1acb333b1..06fa956b6 100644 --- a/src/driver/volume.h +++ b/src/driver/volume.h @@ -1,26 +1,24 @@ /* + Based up Neutrino-GUI - Tuxbox-Project + Copyright (C) 2001 by Steffen Hehn 'McClean' + volume bar - Neutrino-GUI - - Copyright (C) 2001 Steffen Hehn 'McClean' - and some other guys - Homepage: http://dbox.cyberphoria.org/ - - Copyright (C) 2011-2012 M. Liebmann (micha-bbg) + Copyright (C) 2011-2013 M. Liebmann (micha-bbg) License: GPL - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public + 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 library is distributed in the hope that it will be useful, + 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 - Library General Public License for more details. + General Public License for more details. - You should have received a copy of the GNU Library General Public - License along with this library; if not, write to the + You should have received a copy of the GNU General Public + License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. */ @@ -29,28 +27,16 @@ #define __CVOLUME__ #include - -#define ROUNDED g_settings.rounded_corners ? vbar_h/2 : 0 +#include class CVolume : public CChangeObserver { private: CFrameBuffer * frameBuffer; - CProgressBar *volscale; - void refreshVolumebar(int current_volume); + CVolumeBar *volscale; - int x, y, sy, sw, sh; - int mute_ax, mute_ay, mute_dy, mute_ay_old; - int mute_icon_dx, mute_icon_dy; - int icon_w, icon_h, icon_x, icon_y; - int vbar_w, vbar_h; - int progress_w, progress_h, progress_x, progress_y, pB; - int digit_w, digit_h, digit_offset, digit_x, digit_y, digit_b_x, digit_b_w; - int VolumeFont, colShadow, colBar, colFrame, colContent; - int ShadowOffset; - int rounded; + int mute_ax, mute_ay, mute_dx, mute_dy; int m_mode; - bool paintShadow, paintDigits, MuteIconFrame; /* volume adjustment variables */ t_channel_id channel_id; int apid; @@ -59,14 +45,9 @@ class CVolume : public CChangeObserver CVolume(); ~CVolume(); static CVolume* getInstance(); - - int spacer, mute_dx; - void Init(); - void AudioMute(int newValue, bool isEvent= false); + void setvol(int vol); - void setVolume(const neutrino_msg_t key, const bool bDoPaint = true, bool nowait = false); - int getStartPosTop(){ return sy; } - int getEndPosRight(){ return sw; } + void setVolume(const neutrino_msg_t key, bool nowait = false); void SetCurrentPid(int pid) { apid = pid; } void SetCurrentChannel(t_channel_id id) { channel_id = id; } diff --git a/src/drivertool.c b/src/drivertool.c index f9fdc7f50..5a0b778f1 100644 --- a/src/drivertool.c +++ b/src/drivertool.c @@ -29,11 +29,18 @@ #include #include -#include +#include +#ifdef BOXMODEL_APOLLO +#ifdef HAVE_COOLSTREAM_CS_IR_GENERIC_H +#include +#endif +#else #ifdef HAVE_COOLSTREAM_NEVIS_IR_H #include #endif +#endif + #ifndef IOC_IR_SET_PRI_PROTOCOL /* unfortunately, the shipped headers seem to be still incomplete... @@ -103,16 +110,16 @@ struct ioctl_list }; static struct ioctl_list n[] = { - { 0, "VFD_SET_BRIGHT", IOC_VFD_SET_BRIGHT, TYPE_CHAR }, - { 0, "VFD_CLEAR_ALL", IOC_VFD_CLEAR_ALL, TYPE_UINT }, - { 0, "VFD_SET_TEXT", IOC_VFD_SET_TEXT, TYPE_CHARP }, - { 0, "VFD_SET_ICON", IOC_VFD_SET_ICON, TYPE_UINT }, - { 0, "VFD_CLEAR_ICON", IOC_VFD_CLEAR_ICON, TYPE_UINT }, - { 0, "VFD_SET_OUTPUT", IOC_VFD_SET_OUTPUT, TYPE_CHAR }, - { 0, "VFD_CLEAR_OUTPUT", IOC_VFD_CLEAR_OUTPUT, TYPE_CHAR }, - { 0, "VFD_STANDBY", IOC_VFD_STANDBY, TYPE_UNSUPP }, - { 0, "VFD_LED_CTRL", IOC_VFD_LED_CTRL, TYPE_CHAR }, - { 0, "VFD_GET_WAKEUP", IOC_VFD_GET_WAKEUP, TYPE_UNSUPP }, + { 0, "FP_SET_BRIGHT", IOC_FP_SET_BRIGHT, TYPE_CHAR }, + { 0, "FP_CLEAR_ALL", IOC_FP_CLEAR_ALL, TYPE_UINT }, + { 0, "FP_SET_TEXT", IOC_FP_SET_TEXT, TYPE_CHARP }, + { 0, "FP_SET_ICON", IOC_FP_SET_ICON, TYPE_UINT }, + { 0, "FP_CLEAR_ICON", IOC_FP_CLEAR_ICON, TYPE_UINT }, + { 0, "FP_SET_OUTPUT", IOC_FP_SET_OUTPUT, TYPE_CHAR }, + { 0, "FP_CLEAR_OUTPUT", IOC_FP_CLEAR_OUTPUT, TYPE_CHAR }, + { 0, "FP_STANDBY", IOC_FP_STANDBY, TYPE_UNSUPP }, + { 0, "FP_LED_CTRL", IOC_FP_LED_CTRL, TYPE_CHAR }, + { 0, "FP_GET_WAKEUP", IOC_FP_GET_WAKEUP, TYPE_UNSUPP }, { 1, "IR_SET_PRI_PROTOCOL", IOC_IR_SET_PRI_PROTOCOL, TYPE_UINT }, { 1, "IR_SET_SEC_PROTOCOL", IOC_IR_SET_SEC_PROTOCOL, TYPE_UINT }, { 1, "IR_SET_PRI_ADDRESS", IOC_IR_SET_PRI_ADDRESS, TYPE_UINT }, @@ -121,7 +128,7 @@ static struct ioctl_list n[] = { { 1, "IR_SET_X_DELAY", IOC_IR_SET_X_DELAY, TYPE_UINT }, { 1, "IR_SET_FP_MODE", IOC_IR_SET_FP_MODE, TYPE_UINT }, { 1, "IR_GET_PROTOCOLS", IOC_IR_GET_PROTOCOLS, TYPE_UINT_GET }, -#ifdef HAVE_COOLSTREAM_NEVIS_IR_H +#ifdef HAVE_COOLSTREAM_CS_IR_GENERIC_H { 1, "IOC_IR_SET_PRI_KEYMAP", IOC_IR_SET_PRI_KEYMAP, TYPE_UNSUPP }, { 1, "IOC_IR_SET_SEC_KEYMAP", IOC_IR_SET_SEC_KEYMAP, TYPE_UNSUPP }, #endif @@ -130,8 +137,8 @@ static struct ioctl_list n[] = { static const char *devices[2] = { - "/dev/display", - "/dev/input/nevis_ir" + "/dev/cs_display", + "/dev/cs_ir" }; void usage(void) diff --git a/src/eitd/Makefile.am b/src/eitd/Makefile.am index 86590dc8a..4fbec41ae 100644 --- a/src/eitd/Makefile.am +++ b/src/eitd/Makefile.am @@ -10,8 +10,12 @@ INCLUDES = \ -I$(top_srcdir)/lib/xmltree if BOXTYPE_COOL +if BOXMODEL_APOLLO +INCLUDES += -I$(top_srcdir)/lib/libcoolstream2 +else INCLUDES += -I$(top_srcdir)/lib/libcoolstream endif +endif if USE_STB_HAL INCLUDES += -I$(STB_HAL_INC) endif diff --git a/src/eitd/SIlanguage.cpp b/src/eitd/SIlanguage.cpp index 4f251710d..6229cf45f 100644 --- a/src/eitd/SIlanguage.cpp +++ b/src/eitd/SIlanguage.cpp @@ -22,7 +22,10 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * */ +#ifdef HAVE_CONFIG_H #include +#endif + #include #include #include diff --git a/src/eitd/sectionsd.cpp b/src/eitd/sectionsd.cpp index 13f8598dc..334243c98 100644 --- a/src/eitd/sectionsd.cpp +++ b/src/eitd/sectionsd.cpp @@ -92,7 +92,7 @@ static bool messaging_zap_detected = false; /*static*/ bool dvb_time_update = false; //NTP-Config -#define CONF_FILE "/var/tuxbox/config/neutrino.conf" +#define CONF_FILE CONFIGDIR "/neutrino.conf" #ifdef USE_BB_NTPD const std::string ntp_system_cmd_prefix = "/sbin/ntpd -q -p "; @@ -1013,7 +1013,11 @@ static void commandDumpStatusInformation(int /*connfd*/, char* /*data*/, const u // resourceUsage.ru_maxrss, resourceUsage.ru_ixrss, resourceUsage.ru_idrss, resourceUsage.ru_isrss, ); printf("%s\n", stati); +#ifdef __UCLIBC__ + malloc_stats(NULL); +#else malloc_stats(); +#endif return ; } @@ -1139,7 +1143,11 @@ static void FreeMemory() unlockEvents(); +#ifdef __UCLIBC__ + malloc_stats(NULL); +#else malloc_stats(); +#endif xprintf("[sectionsd] free memory done\n"); //wakeupAll(); //FIXME should we re-start eit here ? } @@ -1976,7 +1984,11 @@ static void print_meminfo(void) if (!sections_debug) return; +#ifdef __UCLIBC__ + malloc_stats(NULL); +#else malloc_stats(); +#endif } //--------------------------------------------------------------------- diff --git a/src/gui/Makefile.am b/src/gui/Makefile.am index 552bfbcdc..733203482 100644 --- a/src/gui/Makefile.am +++ b/src/gui/Makefile.am @@ -1,9 +1,12 @@ AM_CPPFLAGS = -fno-rtti -fno-exceptions -D__STDC_FORMAT_MACROS #AM_CPPFLAGS = -fno-rtti BUILT_SOURCES = git_version.h -git_version.h: makeversion - @if test -d ../../.git; then \ - echo "#define GITVERSION \"$$(git describe --dirty || echo `date` )\" " > git_version.h.tmp ; \ +git_version.h: + @if test -d $(top_srcdir)/.git ; then \ + pushd $(top_srcdir) ; \ + GITDESCRIBE=$$(git describe --always --dirty || echo `date`) ; \ + popd ; \ + echo "#define GITVERSION \"$${GITDESCRIBE}\" " > git_version.h.tmp ; \ if diff -q git_version.h git_version.h.tmp >/dev/null 2>&1 ; then \ rm -f git_version.h.tmp ; \ else \ @@ -11,13 +14,11 @@ git_version.h: makeversion mv git_version.h.tmp git_version.h ; \ fi; \ else \ - rm git_version.h; echo '#define BUILT_DATE "'`date`'"' > git_version.h ; \ + rm -f git_version.h; \ + echo '#define BUILT_DATE "'`date`'"' > git_version.h ; \ fi noinst_HEADERS = git_version.h -.PHONY: makeversion - - SUBDIRS = bedit components widget INCLUDES = \ @@ -36,8 +37,12 @@ INCLUDES = \ @FREETYPE_CFLAGS@ if BOXTYPE_COOL +if BOXMODEL_APOLLO +INCLUDES += -I$(top_srcdir)/lib/libcoolstream2 +else INCLUDES += -I$(top_srcdir)/lib/libcoolstream endif +endif if USE_STB_HAL INCLUDES += -I$(STB_HAL_INC) @@ -48,6 +53,7 @@ noinst_LIBRARIES = libtimerlist.a libneutrino_gui.a libneutrino_gui2.a libneutrino_gui_a_SOURCES = \ audio_select.cpp \ audio_setup.cpp \ + audiomute.cpp \ audioplayer.cpp \ audioplayer_setup.cpp\ bookmarkmanager.cpp \ @@ -103,6 +109,8 @@ libneutrino_gui_a_SOURCES = \ user_menue_setup.cpp \ vfd_setup.cpp \ videosettings.cpp \ + volumebar.cpp \ + pipsetup.cpp \ zapit_setup.cpp if ENABLE_EXTUPDATE diff --git a/src/gui/audiomute.cpp b/src/gui/audiomute.cpp new file mode 100644 index 000000000..409ca5187 --- /dev/null +++ b/src/gui/audiomute.cpp @@ -0,0 +1,87 @@ +/* + Based up Neutrino-GUI - Tuxbox-Project + Copyright (C) 2001 by Steffen Hehn 'McClean' + + audioMute - Neutrino-GUI + Copyright (C) 2013 M. Liebmann (micha-bbg) + + License: GPL + + 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 Foundation, Inc., 51 Franklin St, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include +#include +#include +#include +#include + +CAudioMute::CAudioMute() +{ + mute_ax = 0; + mute_ay = 0; + mute_dx = 0; + mute_dy = 0; + mute_ay_old = -1; + CVolumeHelper::getInstance()->getMuteIconDimensions(&mute_ax, &mute_ay, &mute_dx, &mute_dy); + mIcon = new CComponentsPicture(mute_ax, mute_ay, mute_dx, mute_dy, NEUTRINO_ICON_BUTTON_MUTE); +} + +CAudioMute::~CAudioMute() +{ + delete mIcon; +} + +CAudioMute* CAudioMute::getInstance() +{ + static CAudioMute* Mute = NULL; + if(!Mute) + Mute = new CAudioMute(); + return Mute; +} + +void CAudioMute::AudioMute(int newValue, bool isEvent) +{ + CNeutrinoApp* neutrino = CNeutrinoApp::getInstance(); + bool doInit = newValue != (int) neutrino->isMuted(); + + CVFD::getInstance()->setMuted(newValue); + neutrino->setCurrentMuted(newValue); + g_Zapit->muteAudio(newValue); + + if( isEvent && ( neutrino->getMode() != CNeutrinoApp::mode_scart ) && ( neutrino->getMode() != CNeutrinoApp::mode_audio) && ( neutrino->getMode() != CNeutrinoApp::mode_pic)) + { + CVolumeHelper::getInstance()->getMuteIconDimensions(&mute_ax, &mute_ay, &mute_dx, &mute_dy); + if ((mIcon) && (mute_ay_old != mute_ay)) { + mIcon->hide(); + mIcon->setYPos(mute_ay); + mute_ay_old = mute_ay; + } + if ((g_settings.mode_clock) && (doInit)) + CInfoClock::getInstance(true)->ClearDisplay(); + + if (newValue) + mIcon->paint(); + else + mIcon->hide(); + + if (doInit) + CInfoClock::getInstance(true)->Init(true); + } +} diff --git a/src/gui/audiomute.h b/src/gui/audiomute.h new file mode 100644 index 000000000..a45fa70e2 --- /dev/null +++ b/src/gui/audiomute.h @@ -0,0 +1,48 @@ +/* + Based up Neutrino-GUI - Tuxbox-Project + Copyright (C) 2001 by Steffen Hehn 'McClean' + + audioMute - Neutrino-GUI + Copyright (C) 2013 M. Liebmann (micha-bbg) + + License: GPL + + 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 Foundation, Inc., 51 Franklin St, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + + +#ifndef __CAUDIOMUTE__ +#define __CAUDIOMUTE__ + +#include + +class CAudioMute +{ + private: + int mute_ay_old; + int mute_ax, mute_ay, mute_dx, mute_dy; + CComponentsPicture *mIcon; + + public: + + CAudioMute(); + ~CAudioMute(); + static CAudioMute* getInstance(); + + void AudioMute(int newValue, bool isEvent= false); +}; + +#endif // __CAUDIOMUTE__ diff --git a/src/gui/audioplayer.cpp b/src/gui/audioplayer.cpp index 8b619e75e..1d7496f10 100644 --- a/src/gui/audioplayer.cpp +++ b/src/gui/audioplayer.cpp @@ -5,7 +5,7 @@ (C) 2002-2008 the tuxbox project contributors (C) 2008 Novell, Inc. Author: Stefan Seyfried - (C) 2011-2012 Stefan Seyfried + (C) 2011-2013 Stefan Seyfried Homepage: http://dbox.cyberphoria.org/ @@ -1739,49 +1739,51 @@ const struct button_label ScondLineButtons[3] = else top = m_y + (m_height - 2 * m_buttonHeight); - //int ButtonWidth2 = (m_width - 50) / 2; + //int ButtonWidth = (m_width - 20) / 5; + m_frameBuffer->paintBoxRel(m_x, top, m_width, 2 * m_buttonHeight, COL_INFOBAR_SHADOW_PLUS_1, c_rad_mid, (m_show_playlist ? CORNER_BOTTOM : CORNER_ALL)); // why? m_frameBuffer->paintHLine(m_x, m_x + m_width, top, COL_INFOBAR_SHADOW_PLUS_1); + int bwidth = m_width - (2*c_rad_mid); if (!m_playlist.empty()) - ::paintButtons(m_x, top+m_buttonHeight, m_width, 3, ScondLineButtons, m_width, m_buttonHeight); + ::paintButtons(m_x + c_rad_mid, top+m_buttonHeight, bwidth, 3, ScondLineButtons, bwidth, m_buttonHeight); if (m_key_level == 0) { if (m_playlist.empty()) { if (m_inetmode) - ::paintButtons(m_x, top, m_width, 2, AudioPlayerButtons[7], m_width, m_buttonHeight); + ::paintButtons(m_x + c_rad_mid, top, bwidth, 2, AudioPlayerButtons[7], bwidth, m_buttonHeight); else - ::paintButtons(m_x, top, m_width, 1, &(AudioPlayerButtons[7][0]), m_width, m_buttonHeight); + ::paintButtons(m_x + c_rad_mid, top, bwidth, 1, &(AudioPlayerButtons[7][0]), bwidth, m_buttonHeight); } else if (m_inetmode) - ::paintButtons(m_x, top, m_width, 4, AudioPlayerButtons[8], m_width, m_buttonHeight); + ::paintButtons(m_x + c_rad_mid, top, bwidth, 4, AudioPlayerButtons[8], bwidth, m_buttonHeight); else - ::paintButtons(m_x, top, m_width, 4, AudioPlayerButtons[1], m_width, m_buttonHeight); + ::paintButtons(m_x + c_rad_mid, top, bwidth, 4, AudioPlayerButtons[1], bwidth, m_buttonHeight); } else if (m_key_level == 1) { if (m_curr_audiofile.FileType != CFile::STREAM_AUDIO) - ::paintButtons(m_x, top, m_width, 4, AudioPlayerButtons[0], m_width, m_buttonHeight); + ::paintButtons(m_x + c_rad_mid, top, bwidth, 4, AudioPlayerButtons[0], bwidth, m_buttonHeight); else - ::paintButtons(m_x, top, m_width, 2, AudioPlayerButtons[6], m_width, m_buttonHeight); + ::paintButtons(m_x + c_rad_mid, top, bwidth, 2, AudioPlayerButtons[6], bwidth, m_buttonHeight); } else { // key_level == 2 if (m_state == CAudioPlayerGui::STOP) { if (m_select_title_by_name) - ::paintButtons(m_x, top, m_width, 2, AudioPlayerButtons[5], m_width, m_buttonHeight); + ::paintButtons(m_x + c_rad_mid, top, bwidth, 2, AudioPlayerButtons[5], bwidth, m_buttonHeight); else - ::paintButtons(m_x, top, m_width, 2, AudioPlayerButtons[4], m_width, m_buttonHeight); + ::paintButtons(m_x + c_rad_mid, top, bwidth, 2, AudioPlayerButtons[4], bwidth, m_buttonHeight); } else { if (m_select_title_by_name) - ::paintButtons(m_x, top, m_width, 2, AudioPlayerButtons[3], m_width, m_buttonHeight); + ::paintButtons(m_x + c_rad_mid, top, bwidth, 2, AudioPlayerButtons[3], bwidth, m_buttonHeight); else - ::paintButtons(m_x, top, m_width, 2, AudioPlayerButtons[2], m_width, m_buttonHeight); + ::paintButtons(m_x + c_rad_mid, top, bwidth, 2, AudioPlayerButtons[2], bwidth, m_buttonHeight); } } m_frameBuffer->blit(); diff --git a/src/gui/bedit/Makefile.am b/src/gui/bedit/Makefile.am index 88e8cd243..a7c67224f 100644 --- a/src/gui/bedit/Makefile.am +++ b/src/gui/bedit/Makefile.am @@ -12,8 +12,12 @@ INCLUDES = \ @FREETYPE_CFLAGS@ if BOXTYPE_COOL +if BOXMODEL_APOLLO +INCLUDES += -I$(top_srcdir)/lib/libcoolstream2 +else INCLUDES += -I$(top_srcdir)/lib/libcoolstream endif +endif if USE_STB_HAL INCLUDES += -I$(STB_HAL_INC) endif diff --git a/src/gui/bouquetlist.cpp b/src/gui/bouquetlist.cpp index bfa48287e..c487e5be0 100644 --- a/src/gui/bouquetlist.cpp +++ b/src/gui/bouquetlist.cpp @@ -603,6 +603,7 @@ void CBouquetList::paint() int numbuttons = sizeof(CBouquetListButtons)/sizeof(CBouquetListButtons[0]); if (favonly) /* this actually shows favorites and providers button, but both are active anyway */ numbuttons = 2; + ::paintButtons(x, y + (height - footerHeight), width, numbuttons, CBouquetListButtons, width, footerHeight); if(!Bouquets.empty()) diff --git a/src/gui/cam_menu.cpp b/src/gui/cam_menu.cpp index cc82a2470..ee75bbf98 100644 --- a/src/gui/cam_menu.cpp +++ b/src/gui/cam_menu.cpp @@ -110,6 +110,7 @@ int CCAMMenuHandler::doMainMenu() if(true /* CiSlots */) { cammenu->addItem( new CMenuOptionChooser(LOCALE_CI_RESET_STANDBY, &g_settings.ci_standby_reset, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true)); cammenu->addItem( new CMenuOptionNumberChooser(LOCALE_CI_CLOCK, &g_settings.ci_clock, true, 6, 12, this)); + cammenu->addItem( new CMenuOptionChooser(LOCALE_CI_IGNORE_MSG, &g_settings.ci_ignore_messages, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true)); cammenu->addItem( GenericMenuSeparatorLine ); } @@ -223,6 +224,9 @@ int CCAMMenuHandler::handleCamMsg (const neutrino_msg_t msg, neutrino_msg_data_t if (msg != NeutrinoMessages::EVT_CA_MESSAGE) return from_menu ? 1 : -1; + if (g_settings.ci_ignore_messages && !from_menu) + return 1; + rMsg = (CA_MESSAGE *)data; if (!rMsg) return -1; @@ -311,6 +315,7 @@ int CCAMMenuHandler::handleCamMsg (const neutrino_msg_t msg, neutrino_msg_data_t int selected = -1; if(pMenu->choice_nb) { CMenuWidget* menu = new CMenuWidget(convertDVBUTF8(pMenu->title, strlen(pMenu->title), 0).c_str(), NEUTRINO_ICON_SETTINGS); + menu->enableSaveScreen(true); CMenuSelectorTarget * selector = new CMenuSelectorTarget(&selected); int slen = strlen(pMenu->subtitle); @@ -403,21 +408,21 @@ int CCAMMenuHandler::handleCamMsg (const neutrino_msg_t msg, neutrino_msg_data_t printf("CCAMMenuHandler::handleCamMsg: slot %d input request, text %s\n", curslot, convertDVBUTF8(pMmiEnquiry->enguiryText, strlen(pMmiEnquiry->enguiryText), 0).c_str()); hideHintBox(); - char cPIN[pMmiEnquiry->answerlen+1]; - cPIN[0] = 0; + char ENQAnswer[pMmiEnquiry->answerlen+1]; + ENQAnswer[0] = 0; - CPINInput* PINInput = new CPINInput((char *) convertDVBUTF8(pMmiEnquiry->enguiryText, strlen(pMmiEnquiry->enguiryText), 0).c_str(), cPIN, 4, NONEXISTANT_LOCALE); - PINInput->exec(NULL, ""); - delete PINInput; + CEnquiryInput *Inquiry = new CEnquiryInput((char *)convertDVBUTF8(pMmiEnquiry->enguiryText, strlen(pMmiEnquiry->enguiryText), 0).c_str(), ENQAnswer, pMmiEnquiry->answerlen, pMmiEnquiry->blind != 0, NONEXISTANT_LOCALE); + Inquiry->exec(NULL, ""); + delete Inquiry; - printf("CCAMMenuHandler::handleCamMsg: input=[%s]\n", cPIN); + printf("CCAMMenuHandler::handleCamMsg: input=[%s]\n", ENQAnswer); - if((int) strlen(cPIN) != pMmiEnquiry->answerlen) { + if((int) strlen(ENQAnswer) != pMmiEnquiry->answerlen) { printf("CCAMMenuHandler::handleCamMsg: wrong input len\n"); - ca->InputAnswer(SlotType, curslot, (unsigned char *) cPIN, 0); + ca->InputAnswer(SlotType, curslot, (unsigned char *)ENQAnswer, 0); return 1; //FIXME } else { - ca->InputAnswer(SlotType, curslot, (unsigned char *) cPIN, pMmiEnquiry->answerlen); + ca->InputAnswer(SlotType, curslot, (unsigned char *)ENQAnswer, pMmiEnquiry->answerlen); return 1; } } diff --git a/src/gui/channellist.cpp b/src/gui/channellist.cpp index 4e18cead8..67cce50d2 100644 --- a/src/gui/channellist.cpp +++ b/src/gui/channellist.cpp @@ -522,19 +522,6 @@ void CChannelList::calcSize() const int pic_h = 39; theight = std::max(theight, pic_h); - int icol_w, icol_h; - frameBuffer->getIconSize(NEUTRINO_ICON_BUTTON_HELP, &icol_w, &icol_h); - theight = std::max(theight, icol_h); - - frameBuffer->getIconSize(NEUTRINO_ICON_BUTTON_MENU, &icol_w, &icol_h); - theight = std::max(theight, icol_h); - - if(new_zap_mode) - { - frameBuffer->getIconSize(NEUTRINO_ICON_BUTTON_MUTE_ZAP_ACTIVE, &icol_w, &icol_h); - theight = std::max(theight, icol_h); - } - // calculate max entrys in mainbox listmaxshow = (height - theight - footerHeight) / fheight; @@ -663,7 +650,7 @@ int CChannelList::show() } #endif - if(SameTP()) { + if((g_settings.recording_type != CNeutrinoApp::RECORDING_OFF) && SameTP()) { printf("[neutrino channellist] start direct recording...\n"); hide(); if (!CRecordManager::getInstance()->Record(chanlist[selected]->channel_id)) { @@ -809,8 +796,11 @@ int CChannelList::show() break; } +#if 0 paintHead(); showChannelLogo(); +#endif + paintButtonBar(SameTP()); } } else if (CRCInput::isNumeric(msg) && (this->historyMode || g_settings.sms_channel)) { @@ -893,11 +883,24 @@ int CChannelList::show() if(g_settings.channellist_sort_mode > SORT_MAX-1) g_settings.channellist_sort_mode = SORT_ALPHA; CNeutrinoApp::getInstance()->SetChannelMode(mode); + oldselected = selected; paintHead(); // update button bar paint(); } } - +#ifdef ENABLE_PIP + else if ((msg == CRCInput::RC_play) || (msg == (neutrino_msg_t) g_settings.key_pip_close)) { + if(SameTP()) { + if (CZapit::getInstance()->GetPipChannelID() == chanlist[selected]->getChannelID()) { + g_Zapit->stopPip(); + paint(); + } else { + if(CNeutrinoApp::getInstance()->StartPip(chanlist[selected]->getChannelID())) + paint(); + } + } + } +#endif else if ((msg == CRCInput::RC_info) || (msg == CRCInput::RC_help)) { hide(); CChannelEvent *p_event=NULL; @@ -1064,7 +1067,6 @@ bool CChannelList::adjustToChannelID(const t_channel_id channel_id, bool bToo) selected_chid = channel_id; printf("CChannelList::adjustToChannelID me %p [%s] list size %d channel_id %" PRIx64 "\n", this, getName(), (int)chanlist.size(), channel_id); - fflush(stdout); for (i = 0; i < chanlist.size(); i++) { if(chanlist[i] == NULL) { printf("CChannelList::adjustToChannelID REPORT BUG !! ******************************** %d is NULL !!\n", i); @@ -1074,35 +1076,55 @@ bool CChannelList::adjustToChannelID(const t_channel_id channel_id, bool bToo) selected = i; tuned = i; - lastChList.store (selected, channel_id, false); + //lastChList.store (selected, channel_id, false); if (bToo) { + lastChList.store (selected, channel_id, false); + int old_mode = CNeutrinoApp::getInstance()->GetChannelMode(); int new_mode = old_mode; bool has_channel; + first_mode_found = -1; if(CNeutrinoApp::getInstance()->getMode() == NeutrinoMessages::mode_tv) { has_channel = TVfavList->adjustToChannelID(channel_id); + if (has_channel && first_mode_found < 0) + first_mode_found = LIST_MODE_FAV; if(!has_channel && old_mode == LIST_MODE_FAV) new_mode = LIST_MODE_PROV; + has_channel = TVbouquetList->adjustToChannelID(channel_id); - if(!has_channel && old_mode == LIST_MODE_PROV) { + if (has_channel && first_mode_found < 0) + first_mode_found = LIST_MODE_PROV; + if(!has_channel && old_mode == LIST_MODE_PROV) new_mode = LIST_MODE_SAT; - } + has_channel = TVsatList->adjustToChannelID(channel_id); + if (has_channel && first_mode_found < 0) + first_mode_found = LIST_MODE_SAT; if(!has_channel && old_mode == LIST_MODE_SAT) new_mode = LIST_MODE_ALL; + has_channel = TVallList->adjustToChannelID(channel_id); } else if(CNeutrinoApp::getInstance()->getMode() == NeutrinoMessages::mode_radio) { has_channel = RADIOfavList->adjustToChannelID(channel_id); + if (has_channel && first_mode_found < 0) + first_mode_found = LIST_MODE_FAV; if(!has_channel && old_mode == LIST_MODE_FAV) new_mode = LIST_MODE_PROV; + has_channel = RADIObouquetList->adjustToChannelID(channel_id); + if (has_channel && first_mode_found < 0) + first_mode_found = LIST_MODE_PROV; if(!has_channel && old_mode == LIST_MODE_PROV) new_mode = LIST_MODE_SAT; + has_channel = RADIOsatList->adjustToChannelID(channel_id); + if (has_channel && first_mode_found < 0) + first_mode_found = LIST_MODE_SAT; if(!has_channel && old_mode == LIST_MODE_SAT) new_mode = LIST_MODE_ALL; + has_channel = RADIOallList->adjustToChannelID(channel_id); } if(old_mode != new_mode) @@ -1155,12 +1177,12 @@ void CChannelList::setSelected( int nChannelNr) } // -- Zap to channel with channel_id -bool CChannelList::zapTo_ChannelID(const t_channel_id channel_id) +bool CChannelList::zapTo_ChannelID(const t_channel_id channel_id, bool force) { printf("**************************** CChannelList::zapTo_ChannelID %" PRIx64 "\n", channel_id); for (unsigned int i = 0; i < chanlist.size(); i++) { if (chanlist[i]->channel_id == channel_id) { - zapTo(i); + zapTo(i, force); return true; } } @@ -1178,7 +1200,7 @@ bool CChannelList::showEmptyError() /* forceStoreToLastChannels defaults to false */ /* TODO make this private to call only from "current" list, where selected/pos not means channel number */ -void CChannelList::zapTo(int pos, bool /* forceStoreToLastChannels */) +void CChannelList::zapTo(int pos, bool force) { if(showEmptyError()) return; @@ -1188,7 +1210,7 @@ void CChannelList::zapTo(int pos, bool /* forceStoreToLastChannels */) } CZapitChannel* chan = chanlist[pos]; - zapToChannel(chan); + zapToChannel(chan, force); tuned = pos; if(new_zap_mode == 2 /* active */) selected_in_new_mode = pos; @@ -1197,7 +1219,7 @@ void CChannelList::zapTo(int pos, bool /* forceStoreToLastChannels */) } /* to replace zapTo_ChannelID and zapTo from "whole" list ? */ -void CChannelList::zapToChannel(CZapitChannel *channel) +void CChannelList::zapToChannel(CZapitChannel *channel, bool force) { if(showEmptyError()) return; @@ -1215,7 +1237,7 @@ void CChannelList::zapToChannel(CZapitChannel *channel) if(tuned < chanlist.size()) selected_chid = chanlist[tuned]->getChannelID(); - if(selected_chid != channel->getChannelID()) { + if(force || (selected_chid != channel->getChannelID())) { if ((g_settings.radiotext_enable) && ((CNeutrinoApp::getInstance()->getMode()) == NeutrinoMessages::mode_radio) && (g_Radiotext)) { // stop radiotext PES decoding before zapping @@ -1260,12 +1282,12 @@ int CChannelList::numericZap(int key) } return res; } - if ((key == g_settings.key_zaphistory) || (key == CRCInput::RC_games)) { - if((!autoshift && CNeutrinoApp::getInstance()->recordingstatus) || (key == CRCInput::RC_games)) { + if ((key == g_settings.key_zaphistory) || (key == g_settings.key_current_transponder)) { + if((!autoshift && CNeutrinoApp::getInstance()->recordingstatus) || (key == g_settings.key_current_transponder)) { CChannelList * orgList = CNeutrinoApp::getInstance()->channelList; CChannelList * channelList = new CChannelList(g_Locale->getText(LOCALE_CHANNELLIST_CURRENT_TP), false, true); - if(key == CRCInput::RC_games) { + if(key == g_settings.key_current_transponder) { t_channel_id recid = chanlist[selected]->channel_id >> 16; for ( unsigned int i = 0 ; i < orgList->chanlist.size(); i++) { if((orgList->chanlist[i]->channel_id >> 16) == recid) @@ -1393,6 +1415,10 @@ int CChannelList::numericZap(int key) if(chan && SameTP(chan)) { zapToChannel(chan); + if (g_settings.channellist_numeric_adjust && first_mode_found >= 0) { + CNeutrinoApp::getInstance()->SetChannelMode(first_mode_found); + CNeutrinoApp::getInstance()->channelList->getLastChannels().set_mode(chan->channel_id); + } res = 0; } else g_InfoViewer->killTitle(); @@ -1549,7 +1575,8 @@ void CChannelList::paintDetails(int index) p_event = &chanlist[index]->currentEvent; } - frameBuffer->paintBoxRel(x+2, y + height + 2, full_width-4, info_height - 4, COL_MENUCONTENTDARK_PLUS_0, RADIUS_LARGE);//round + frameBuffer->paintBoxRel(x+1, y + height + 1, full_width-2, info_height - 2, COL_MENUCONTENTDARK_PLUS_0, RADIUS_LARGE);//round + frameBuffer->paintBoxFrame(x, y + height, full_width, info_height, 2, COL_MENUCONTENT_PLUS_6, RADIUS_LARGE); if (!p_event->description.empty()) { char cNoch[50] = {0}; // UTF-8 @@ -1654,32 +1681,20 @@ void CChannelList::clearItem2DetailsLine() void CChannelList::paintItem2DetailsLine (int pos) { int xpos = x - ConnectLineBox_Width; - int ypos1 = y + theight + pos*fheight; - int ypos2 = y + height; - int ypos1a = ypos1 + (fheight/2)-2; - int ypos2a = ypos2 + (info_height/2)-2; - fb_pixel_t col1 = COL_MENUCONTENT_PLUS_6; + int ypos1 = y + theight + pos*fheight + (fheight/2)-2; + int ypos2 = y + height + (info_height/2)-2; if (dline){ dline->kill(); //kill details line delete dline; dline = NULL; } -// // Clear -// frameBuffer->paintBackgroundBoxRel(xpos,y, ConnectLineBox_Width, height+info_height + 1); // paint Line if detail info (and not valid list pos) - if (pos >= 0) { //pos >= 0 && chanlist[ch_index]->currentEvent.description != "") { - if(1) // FIXME why -> ? (!g_settings.channellist_extended) - { - //details line - if (dline == NULL) - dline = new CComponentsDetailLine(xpos, ypos1a, ypos2a, fheight/2+1, info_height-RADIUS_LARGE*2); - dline->paint(); - - //info box frame - frameBuffer->paintBoxFrame(x, ypos2, full_width, info_height, 2, col1, RADIUS_LARGE); - } + if (pos >= 0) { + if (dline == NULL) + dline = new CComponentsDetailLine(xpos, ypos1, ypos2, fheight/2+1, info_height-RADIUS_LARGE*2); + dline->paint(); } } @@ -1700,107 +1715,115 @@ void CChannelList::showChannelLogo() } } -#define NUM_LIST_BUTTONS 4 -struct button_label SChannelListButtons[NUM_LIST_BUTTONS] = -{ - { NEUTRINO_ICON_BUTTON_RED, LOCALE_INFOVIEWER_EVENTLIST}, - { NEUTRINO_ICON_BUTTON_YELLOW, LOCALE_BOUQUETLIST_HEAD}, - { NEUTRINO_ICON_BUTTON_BLUE, LOCALE_INFOVIEWER_NEXT}, - { NEUTRINO_ICON_BUTTON_RECORD_INACTIVE, NONEXISTANT_LOCALE} -}; -#define NUM_LIST_BUTTONS_SORT 5 +#define NUM_LIST_BUTTONS_SORT 9 struct button_label SChannelListButtons_SMode[NUM_LIST_BUTTONS_SORT] = { - { NEUTRINO_ICON_BUTTON_RED, LOCALE_INFOVIEWER_EVENTLIST}, - { NEUTRINO_ICON_BUTTON_GREEN, LOCALE_CHANNELLIST_FOOT_SORT_ALPHA}, - { NEUTRINO_ICON_BUTTON_YELLOW, LOCALE_BOUQUETLIST_HEAD}, - { NEUTRINO_ICON_BUTTON_BLUE, LOCALE_INFOVIEWER_NEXT}, - { NEUTRINO_ICON_BUTTON_RECORD_INACTIVE, NONEXISTANT_LOCALE} + { NEUTRINO_ICON_BUTTON_RED, LOCALE_INFOVIEWER_EVENTLIST}, + { NEUTRINO_ICON_BUTTON_GREEN, LOCALE_CHANNELLIST_FOOT_SORT_ALPHA}, + { NEUTRINO_ICON_BUTTON_YELLOW, LOCALE_BOUQUETLIST_HEAD}, + { NEUTRINO_ICON_BUTTON_BLUE, LOCALE_INFOVIEWER_NEXT}, + { NEUTRINO_ICON_BUTTON_RECORD_INACTIVE, NONEXISTANT_LOCALE}, + { NEUTRINO_ICON_BUTTON_PLAY, LOCALE_EXTRA_KEY_PIP_CLOSE}, + { NEUTRINO_ICON_BUTTON_INFO, NONEXISTANT_LOCALE}, + { NEUTRINO_ICON_BUTTON_MENU, NONEXISTANT_LOCALE}, + { NEUTRINO_ICON_BUTTON_MUTE_ZAP_ACTIVE, NONEXISTANT_LOCALE} }; void CChannelList::paintButtonBar(bool is_current) { //printf("[neutrino channellist] %s...%d, selected %d\n", __FUNCTION__, __LINE__, selected); unsigned int smode = CNeutrinoApp::getInstance()->GetChannelMode(); - int num_buttons = smode != LIST_MODE_FAV ? NUM_LIST_BUTTONS_SORT : NUM_LIST_BUTTONS; +#if 0 + int num_buttons = smode != LIST_MODE_FAV ? NUM_LIST_BUTTONS_SORT : NUM_LIST_BUTTONS; struct button_label Button[num_buttons]; - const neutrino_locale_t button_ids[] = {LOCALE_INFOVIEWER_NOW,LOCALE_INFOVIEWER_NEXT,LOCALE_MAINMENU_RECORDING,LOCALE_MAINMENU_RECORDING_STOP,NONEXISTANT_LOCALE, + const neutrino_locale_t button_ids[] = {LOCALE_INFOVIEWER_NOW,LOCALE_INFOVIEWER_NEXT,LOCALE_MAINMENU_RECORDING,LOCALE_MAINMENU_RECORDING_STOP,LOCALE_EXTRA_KEY_PIP_CLOSE, LOCALE_CHANNELLIST_FOOT_SORT_ALPHA,LOCALE_CHANNELLIST_FOOT_SORT_FREQ,LOCALE_CHANNELLIST_FOOT_SORT_SAT,LOCALE_CHANNELLIST_FOOT_SORT_CHNUM}; const std::vector buttonID_rest (button_ids, button_ids + sizeof(button_ids) / sizeof(neutrino_locale_t) ); - - for (int i = 0;iRecordingStatus(getActiveChannel_ChannelID()); - if (g_settings.recording_type != RECORDING_OFF && !displayNext){ - if (is_current && !do_record){ - Button[Bindex].locale = LOCALE_MAINMENU_RECORDING; - Button[Bindex].button = NEUTRINO_ICON_BUTTON_RECORD_ACTIVE; - }else if (do_record){ - Button[Bindex].locale = LOCALE_MAINMENU_RECORDING_STOP; - Button[Bindex].button = NEUTRINO_ICON_BUTTON_STOP; - }else{ - Button[Bindex].locale = NONEXISTANT_LOCALE; - Button[Bindex].button = NEUTRINO_ICON_BUTTON_RECORD_INACTIVE; + int bcnt = 0; + for (int i = 0; i < NUM_LIST_BUTTONS_SORT; i++) { + Button[bcnt] = SChannelListButtons_SMode[i]; + if (i == 1) { + /* check green / sort */ + if(smode) { + switch (g_settings.channellist_sort_mode) { + case SORT_ALPHA: + Button[bcnt].locale = LOCALE_CHANNELLIST_FOOT_SORT_ALPHA; + break; + case SORT_TP: + Button[bcnt].locale = LOCALE_CHANNELLIST_FOOT_SORT_FREQ; + break; + case SORT_SAT: + Button[bcnt].locale = LOCALE_CHANNELLIST_FOOT_SORT_SAT; + break; + case SORT_CH_NUMBER: + Button[bcnt].locale = LOCALE_CHANNELLIST_FOOT_SORT_CHNUM; + break; + default: + break; + } + } else + continue; } - } - if(smode) - { - switch (g_settings.channellist_sort_mode) - { - case SORT_ALPHA: - Button[1].locale = LOCALE_CHANNELLIST_FOOT_SORT_ALPHA; - break; - case SORT_TP: - Button[1].locale = LOCALE_CHANNELLIST_FOOT_SORT_FREQ; - break; - case SORT_SAT: - Button[1].locale = LOCALE_CHANNELLIST_FOOT_SORT_SAT; - break; - case SORT_CH_NUMBER: - Button[1].locale = LOCALE_CHANNELLIST_FOOT_SORT_CHNUM; - break; - default: - break; + if (i == 3) { + //manage now/next button + if (g_settings.channellist_additional) { + if (displayList) + Button[bcnt].locale = LOCALE_FONTSIZE_CHANNELLIST_DESCR; + else + Button[bcnt].locale = LOCALE_FONTMENU_EVENTLIST; + } else { + if (displayNext) + Button[bcnt].locale = LOCALE_INFOVIEWER_NOW; + else + Button[bcnt].locale = LOCALE_INFOVIEWER_NEXT; + } + } + if (i == 4) { + //manage record button + if (g_settings.recording_type == RECORDING_OFF) + continue; + if (!displayNext){ + if (do_record){ + Button[bcnt].locale = LOCALE_MAINMENU_RECORDING_STOP; + Button[bcnt].button = NEUTRINO_ICON_BUTTON_STOP; + } else if (is_current) { + Button[bcnt].locale = LOCALE_MAINMENU_RECORDING; + Button[bcnt].button = NEUTRINO_ICON_BUTTON_RECORD_ACTIVE; + } else { + Button[bcnt].locale = NONEXISTANT_LOCALE; + Button[bcnt].button = NEUTRINO_ICON_BUTTON_RECORD_INACTIVE; + } + } + } + if (i == 5) { + //manage pip button +#ifdef ENABLE_PIP + if (!is_current) +#endif + continue; } - } + if (i == 8) { + /* check mute / zap mode */ + if (new_zap_mode) + Button[bcnt].button = new_zap_mode == 2 /* active */ ? + NEUTRINO_ICON_BUTTON_MUTE_ZAP_ACTIVE : NEUTRINO_ICON_BUTTON_MUTE_ZAP_INACTIVE; + else + continue; + } + bcnt++; + } //paint buttons int y_foot = y + (height - footerHeight); -#if 0 - ::paintButtons(x, y_foot, full_width,num_buttons, Button, footerHeight,0,false,COL_INFOBAR_SHADOW,NULL,0,true, buttonID_rest); -#endif - ::paintButtons(x, y_foot, full_width, num_buttons, Button, full_width, footerHeight); + ::paintButtons(x, y_foot, full_width, bcnt, Button, full_width, footerHeight); } -void CChannelList::paintItem(int pos) +void CChannelList::paintItem(int pos, const bool firstpaint) { int ypos = y+ theight + pos*fheight; uint8_t color; @@ -1809,7 +1832,7 @@ void CChannelList::paintItem(int pos) bool paintbuttons = false; unsigned int curr = liststart + pos; int rec_mode; - + fb_pixel_t c_rad_small = 0; #if 0 if(CNeutrinoApp::getInstance()->recordingstatus && !autoshift && curr < chanlist.size()) { iscurrent = (chanlist[curr]->channel_id >> 16) == (rec_channel_id >> 16); @@ -1824,12 +1847,15 @@ void CChannelList::paintItem(int pos) bgcolor = COL_MENUCONTENTSELECTED_PLUS_0; paintItem2DetailsLine (pos); paintDetails(curr); - frameBuffer->paintBoxRel(x,ypos, width- 15, fheight, bgcolor, RADIUS_LARGE); + c_rad_small = RADIUS_LARGE; paintbuttons = true; } else { color = iscurrent ? COL_MENUCONTENT : COL_MENUCONTENTINACTIVE; bgcolor = iscurrent ? COL_MENUCONTENT_PLUS_0 : COL_MENUCONTENTINACTIVE_PLUS_0; - frameBuffer->paintBoxRel(x,ypos, width- 15, fheight, bgcolor, 0); + } + + if(!firstpaint || (curr == selected)){ + frameBuffer->paintBoxRel(x,ypos, width- 15, fheight, bgcolor, c_rad_small); } if(curr < chanlist.size()) { @@ -1890,12 +1916,19 @@ void CChannelList::paintItem(int pos) rec_mode = CRecordManager::getInstance()->GetRecordMode(chanlist[curr]->channel_id); //set recording icon - const char * rec_icon = ""; + std::string rec_icon; if (rec_mode & CRecordManager::RECMODE_REC) rec_icon = NEUTRINO_ICON_REC; else if (rec_mode & CRecordManager::RECMODE_TSHIFT) rec_icon = NEUTRINO_ICON_AUTO_SHIFT; - +#ifdef ENABLE_PIP + else if (chanlist[curr]->channel_id == CZapit::getInstance()->GetPipChannelID()) { + int h; + frameBuffer->getIconSize(NEUTRINO_ICON_PIP, &ChannelList_Rec, &h); + rec_icon = NEUTRINO_ICON_PIP; + ChannelList_Rec += 8; + } +#endif //calculating icons int icon_x = (x+width-15-2) - RADIUS_LARGE/2; int r_icon_w=0; int s_icon_h=0; int s_icon_w=0; @@ -1909,7 +1942,8 @@ void CChannelList::paintItem(int pos) r_icon_x = r_icon_x - s_icon_w; //paint recording icon - if (rec_mode != CRecordManager::RECMODE_OFF) + //if (rec_mode != CRecordManager::RECMODE_OFF) + if (!rec_icon.empty()) frameBuffer->paintIcon(rec_icon, r_icon_x - r_icon_w, ypos, fheight);//ypos + (fheight - 16)/2); //paint buttons @@ -2027,7 +2061,7 @@ void CChannelList::paintHead() strftime(timestr, 10, "%H:%M", tm); timestr_len = g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]->getRenderWidth(timestr, true); // UTF-8 } - +#if 0 int iw1, iw2, iw3, ih = 0; frameBuffer->getIconSize(NEUTRINO_ICON_BUTTON_INFO, &iw1, &ih); frameBuffer->getIconSize(NEUTRINO_ICON_BUTTON_MENU, &iw2, &ih); @@ -2054,6 +2088,13 @@ void CChannelList::paintHead() timestr_len += iw1 + iw2 + 12; if (new_zap_mode) timestr_len += iw3 + 10; +#endif + frameBuffer->paintBoxRel(x,y, full_width,theight+0, COL_MENUHEAD_PLUS_0, RADIUS_LARGE, CORNER_TOP);//round + if (gotTime) { + g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]->RenderString(x + full_width - timestr_len - 10, + y+theight, timestr_len, timestr, COL_MENUHEAD, 0, true); // UTF-8 + timestr_len += 4; + } logo_off = timestr_len + 10; g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]->RenderString(x+10,y+theight+0, full_width - timestr_len, name, COL_MENUHEAD, 0, true); // UTF-8 } @@ -2072,7 +2113,7 @@ void CChannelList::paint() frameBuffer->paintBoxRel(x+width,y+theight,infozone_width,pig_height+infozone_height,COL_MENUCONTENT_PLUS_0); for(unsigned int count = 0; count < listmaxshow; count++) { - paintItem(count); + paintItem(count, true); } const int ypos = y+ theight; const int sb = height - theight - footerHeight; // paint scrollbar over full height of main box @@ -2089,12 +2130,18 @@ void CChannelList::paint() // paint box for miniTV again - important! frameBuffer->paintBoxRel(x+width, y+theight , pig_width, pig_height, COL_MENUCONTENT_PLUS_0); // 5px offset - same value as in list below +#if 0 + /* focus: its possible now to scale video with still image, but on nevis + artifacts possible on SD osd */ + paint_pig(x+width+5, y+theight+5, pig_width-10, pig_height-10); +#else if(CNeutrinoApp::getInstance()->getMode() == NeutrinoMessages::mode_tv) { paint_pig(x+width+5, y+theight+5, pig_width-10, pig_height-10); } else if(CNeutrinoApp::getInstance()->getMode() == NeutrinoMessages::mode_radio) { g_PicViewer->DisplayImage(DATADIR "/neutrino/icons/radiomode.jpg", x+width+5, y+theight+5, pig_width-10, pig_height-10, frameBuffer->TM_NONE); } +#endif } } diff --git a/src/gui/channellist.h b/src/gui/channellist.h index 6c0828f5e..a44e8d417 100644 --- a/src/gui/channellist.h +++ b/src/gui/channellist.h @@ -96,13 +96,14 @@ private: bool vlist; // "virtual" list, not bouquet bool displayNext; bool displayList; + int first_mode_found; int ChannelList_Rec; void paintDetails(int index); void clearItem2DetailsLine (); void paintItem2DetailsLine (int pos); - void paintItem(int pos); + void paintItem(int pos,const bool firstpaint = false); bool updateSelection(int newpos); void paint(); void paintHead(); @@ -151,10 +152,10 @@ public: t_channel_id getActiveChannel_ChannelID(void) const; CZapitChannel* getActiveChannel (void) const; - void zapTo(int pos, bool forceStoreToLastChannels = false); - void zapToChannel(CZapitChannel *channel); + void zapTo(int pos, bool force = false); + void zapToChannel(CZapitChannel *channel, bool force = false); void virtual_zap_mode(bool up); - bool zapTo_ChannelID(const t_channel_id channel_id); + bool zapTo_ChannelID(const t_channel_id channel_id, bool force = false); bool adjustToChannelID(const t_channel_id channel_id, bool bToo = true); bool showInfo(int pos, int epgpos = 0); void updateEvents(unsigned int from, unsigned int to); diff --git a/src/gui/components/Makefile.am b/src/gui/components/Makefile.am index 5fa381be9..6f2420463 100644 --- a/src/gui/components/Makefile.am +++ b/src/gui/components/Makefile.am @@ -12,8 +12,13 @@ INCLUDES = \ @FREETYPE_CFLAGS@ if BOXTYPE_COOL +if BOXMODEL_APOLLO +INCLUDES += -I$(top_srcdir)/lib/libcoolstream2 +else INCLUDES += -I$(top_srcdir)/lib/libcoolstream endif +endif + if USE_STB_HAL INCLUDES += -I$(STB_HAL_INC) endif @@ -24,6 +29,7 @@ noinst_LIBRARIES = libneutrino_gui_components.a libneutrino_gui_components_a_SOURCES = \ cc_base.cpp \ cc_detailsline.cpp \ + cc_frm_button.cpp \ cc_frm.cpp \ cc_frm_header.cpp \ cc_frm_icons.cpp \ diff --git a/src/gui/components/cc.h b/src/gui/components/cc.h index 55a8418a6..8e68473d7 100644 --- a/src/gui/components/cc.h +++ b/src/gui/components/cc.h @@ -15,7 +15,7 @@ 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 - Library General Public License for more details. + 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 @@ -32,20 +32,21 @@ #include #include -// #define DEBUG_CC +//#define DEBUG_CC class CComponents { + private: + bool allowPaint(const int& i); protected: int x, y, height, width, corner_type, shadow_w; - int corner_rad, fr_thickness; + int corner_rad, fr_thickness, fr_thickness_sel; CFrameBuffer * frameBuffer; std::vector v_fbdata; - fb_pixel_t col_body, col_shadow, col_frame; + fb_pixel_t col_body, col_shadow, col_frame, col_frame_sel; bool firstPaint, shadow, is_painted, paint_bg; void initVarBasic(); - bool allowPaint(int i); void paintFbItems(bool do_save_bg = true); virtual fb_pixel_t* getScreen(int ax, int ay, int dx, int dy); comp_screen_data_t saved_screen; @@ -58,6 +59,7 @@ class CComponents inline virtual void setXPos(const int& xpos){x = xpos;}; inline virtual void setYPos(const int& ypos){y = ypos;}; + inline virtual void setPos(const int& xpos, const int& ypos){x = xpos; y = ypos;}; inline virtual void setHeight(const int& h){height = h;}; inline virtual void setWidth(const int& w){width = w;}; inline virtual void setDimensionsAll(const int& xpos, const int& ypos, const int& w, const int& h){x = xpos; y = ypos; width = w; height = h;}; @@ -66,31 +68,38 @@ class CComponents inline virtual int getYPos(){return y;}; inline virtual int getHeight(){return height;}; inline virtual int getWidth(){return width;}; + inline virtual void getSize(int* w, int* h){*w=width; *h=height;}; inline virtual void getDimensions(int* xpos, int* ypos, int* w, int* h){*xpos=x; *ypos=y; *w=width; *h=height;}; -/// set colors: Possible color values are defined in "gui/color.h" and "gui/customcolor.h" + ///set colors: Possible color values are defined in "gui/color.h" and "gui/customcolor.h" inline virtual void setColorFrame(fb_pixel_t color){col_frame = color;}; inline virtual void setColorBody(fb_pixel_t color){col_body = color;}; inline virtual void setColorShadow(fb_pixel_t color){col_shadow = color;}; inline virtual void setColorAll(fb_pixel_t color_frame, fb_pixel_t color_body, fb_pixel_t color_shadow){col_frame = color_frame; col_body = color_body; col_shadow = color_shadow;}; -/// get colors + ///get colors inline virtual fb_pixel_t getColorFrame(){return col_frame;}; inline virtual fb_pixel_t getColorBody(){return col_body;}; inline virtual fb_pixel_t getColorShadow(){return col_shadow;}; -/// set corner types: Possible corner types are defined in CFrameBuffer (see: driver/framebuffer.h). + ///set corner types: Possible corner types are defined in CFrameBuffer (see: driver/framebuffer.h). inline virtual void setCornerType(const int& type){corner_type = type;}; inline virtual void setCornerRadius(const int& radius){corner_rad = radius;}; -/// get corner types: + ///get corner types: inline virtual int getCornerType(){return corner_type;}; inline virtual int getCornerRadius(){return corner_rad;}; inline virtual void setFrameThickness(const int& thickness){fr_thickness = thickness;}; inline virtual void setShadowOnOff(bool has_shadow){shadow = has_shadow;}; - + + ///hide current screen and restore background virtual void hide(); + ///erase current screen without restore of background, as similar to paintBackgroundBoxRel() from CFrameBuffer + virtual void kill(); + ///returns paint mode, true=item was painted virtual bool isPainted(){return is_painted;} + ///allows paint of elemetary item parts (shadow, frame and body), similar as background, set it usually to false, if item used in a form virtual void doPaintBg(bool do_paint){paint_bg = do_paint;}; + }; class CComponentsItem : public CComponents @@ -98,6 +107,14 @@ class CComponentsItem : public CComponents protected: int cc_item_type; int cc_item_index; + bool cc_item_enabled, cc_item_selected; + + ///Pointer to the form object in which this item is embedded. + ///Is typically the type CComponentsForm or derived classes, default intialized with NULL + CComponents *cc_parent; + + ///contains real position and dimensions on screen, + int cc_item_xr, cc_item_yr; void hideCCItem(bool no_restore = false); void paintInit(bool do_save_bg); @@ -105,17 +122,33 @@ class CComponentsItem : public CComponents public: CComponentsItem(); + + ///sets pointer to the form object in which this item is embedded. + virtual void setParent(CComponents *parent){cc_parent = parent;}; + + ///sets real position on screen. Use this, if item contains own render methods and item is added to a form + virtual void setRealPos(const int& xr, const int& yr){cc_item_xr = xr; cc_item_yr = yr;}; + virtual int getRealXPos(){return cc_item_xr;}; + virtual int getRealYPos(){return cc_item_yr;}; virtual void paint(bool do_save_bg = CC_SAVE_SCREEN_YES) = 0; virtual void hide(bool no_restore = false); - virtual void kill(); virtual int getItemType(); virtual void syncSysColors(); + + ///setters for item select stats + virtual void setSelected(bool selected){cc_item_selected = selected;}; + virtual void setEnable(bool enabled){cc_item_enabled = enabled;}; + ///getters for item enable stats + virtual bool isSelected(){return cc_item_selected;}; + virtual bool isEnabled(){return cc_item_enabled;}; }; class CComponentsPicture : public CComponentsItem { - private: + protected: + void initVarPicture(); + enum { CC_PIC_IMAGE_MODE_OFF = 0, //paint pictures in icon mode, mainly not scaled @@ -129,7 +162,6 @@ class CComponentsPicture : public CComponentsItem int pic_align, pic_x, pic_y, pic_width, pic_height; int pic_max_w, pic_max_h, pic_paint_mode; - void initVarPicture(); void init( const int x_pos, const int y_pos, const std::string& image_name, const int alignment, bool has_shadow, fb_pixel_t color_frame, fb_pixel_t color_background, fb_pixel_t color_shadow); @@ -138,18 +170,18 @@ class CComponentsPicture : public CComponentsItem const std::string& image_name, const int alignment = CC_ALIGN_HOR_CENTER | CC_ALIGN_VER_CENTER, bool has_shadow = CC_SHADOW_OFF, fb_pixel_t color_frame = COL_MENUCONTENT_PLUS_6, fb_pixel_t color_background = 0, fb_pixel_t color_shadow = COL_MENUCONTENTDARK_PLUS_0); - inline void setPictureOffset(const unsigned char offset){pic_offset = offset;}; - inline void setPicturePaint(bool paint_p){pic_paint = paint_p;}; - inline void setPicturePaintBackground(bool paintBg){pic_paintBg = paintBg;}; - void setPicture(const std::string& picture_name); - void setPictureAlign(const int alignment); + virtual inline void setPictureOffset(const unsigned char offset){pic_offset = offset;}; + virtual inline void setPicturePaint(bool paint_p){pic_paint = paint_p;}; + virtual inline void setPicturePaintBackground(bool paintBg){pic_paintBg = paintBg;}; + virtual void setPicture(const std::string& picture_name); + virtual void setPictureAlign(const int alignment); - inline bool isPicPainted(){return pic_painted;}; - void paint(bool do_save_bg = CC_SAVE_SCREEN_YES); - void hide(bool no_restore = false); - inline void getPictureSize(int *pwidth, int *pheight){*pwidth=pic_width; *pheight=pic_height;}; - void setMaxWidth(const int w_max){pic_max_w = w_max;}; - void setMaxHeight(const int h_max){pic_max_h = h_max;}; + virtual inline bool isPicPainted(){return pic_painted;}; + virtual void paint(bool do_save_bg = CC_SAVE_SCREEN_YES); + virtual void hide(bool no_restore = false); + virtual inline void getPictureSize(int *pwidth, int *pheight){*pwidth=pic_width; *pheight=pic_height;}; + virtual void setMaxWidth(const int w_max){pic_max_w = w_max;}; + virtual void setMaxHeight(const int h_max){pic_max_h = h_max;}; }; class CComponentsText : public CComponentsItem @@ -161,8 +193,10 @@ class CComponentsText : public CComponentsItem fb_pixel_t ct_col_text; int ct_text_mode; //see textbox.h for possible modes - const char* ct_text; - bool ct_text_sent, ct_paint_textbg; + std::string ct_text, ct_old_text; + bool ct_text_sent, ct_paint_textbg, ct_force_text_paint; + + static std::string iToString(int int_val); //helper to convert int to string void initVarText(); void clearCCText(); @@ -171,32 +205,51 @@ class CComponentsText : public CComponentsItem public: CComponentsText(); CComponentsText( const int x_pos, const int y_pos, const int w, const int h, - const char* text = "", const int mode = CTextBox::AUTO_WIDTH, Font* font_text = NULL, + std::string text = "", const int mode = CTextBox::AUTO_WIDTH, Font* font_text = NULL, bool has_shadow = CC_SHADOW_OFF, fb_pixel_t color_text = COL_MENUCONTENT, fb_pixel_t color_frame = COL_MENUCONTENT_PLUS_6, fb_pixel_t color_body = COL_MENUCONTENT_PLUS_0, fb_pixel_t color_shadow = COL_MENUCONTENTDARK_PLUS_0); virtual ~CComponentsText(); - void hide(bool no_restore = false); - void paint(bool do_save_bg = CC_SAVE_SCREEN_YES); - + //default members to paint a text box and hide painted text + //hide textbox + void hide(bool no_restore = false); + //paint text box, parameter do_save_bg: default = true, causes fill of backckrond pixel buffer + void paint(bool do_save_bg = CC_SAVE_SCREEN_YES); + + //send options for text font (size and type), color and mode (allignment) virtual inline void setTextFont(Font* font_text){ct_font = font_text;}; virtual inline void setTextColor(fb_pixel_t color_text){ ct_col_text = color_text;}; - virtual inline void setTextMode(const int mode){ct_text_mode = mode;};//see textbox.h for possible modes - virtual inline void doPaintTextBoxBg(bool do_paintbox_bg){ ct_paint_textbg = do_paintbox_bg;}; - virtual void setText(const char* ctext, const int mode = ~CTextBox::AUTO_WIDTH, Font* font_text = NULL); - virtual void setText(const std::string& stext, const int mode = ~CTextBox::AUTO_WIDTH, Font* font_text = NULL); - virtual void setText(neutrino_locale_t locale_text, const int mode = ~CTextBox::AUTO_WIDTH, Font* font_text = NULL); - virtual void removeLineBreaks(std::string& str); + //see textbox.h for possible allignment modes + virtual inline void setTextMode(const int mode){ct_text_mode = mode;}; - //get a Text Box object, so it's possible to get access directly to its methods - CTextBox* getCTextBoxObject() { return ct_textbox; }; + //send option to CTextBox object to paint background box behind text or not + virtual inline void doPaintTextBoxBg(bool do_paintbox_bg){ ct_paint_textbg = do_paintbox_bg;}; + + //sets text mainly with string also possible with overloades members for loacales, const char and text file + virtual void setText(const std::string& stext, const int mode = ~CTextBox::AUTO_WIDTH, Font* font_text = NULL); + + virtual void setText(const char* ctext, const int mode = ~CTextBox::AUTO_WIDTH, Font* font_text = NULL); + virtual void setText(neutrino_locale_t locale_text, const int mode = ~CTextBox::AUTO_WIDTH, Font* font_text = NULL); + virtual void setText(const int digit, const int mode = ~CTextBox::AUTO_WIDTH, Font* font_text = NULL); + virtual bool setTextFromFile(const std::string& path_to_textfile, const int mode = ~CTextBox::AUTO_WIDTH, Font* font_text = NULL); + + //helper to remove linebreak chars from a string if needed + virtual void removeLineBreaks(std::string& str); + + //returns true, if text was changed + virtual bool textChanged(){return ct_old_text != ct_text;}; + //force paint of text even if text was changed or not + virtual void forceTextPaint(bool force_text_paint = true){ct_force_text_paint = force_text_paint;}; + + //gets the embedded CTextBox object, so it's possible to get access directly to its methods and properties + virtual CTextBox* getCTextBoxObject() { return ct_textbox; }; }; class CComponentsLabel : public CComponentsText { public: CComponentsLabel( const int x_pos, const int y_pos, const int w, const int h, - const char* text = "", const int mode = CTextBox::AUTO_WIDTH, Font* font_text = NULL, + std::string text = "", const int mode = CTextBox::AUTO_WIDTH, Font* font_text = NULL, bool has_shadow = CC_SHADOW_OFF, fb_pixel_t color_text = COL_MENUCONTENTINACTIVE, fb_pixel_t color_frame = COL_MENUCONTENT_PLUS_6, fb_pixel_t color_body = COL_MENUCONTENT_PLUS_0, fb_pixel_t color_shadow = COL_MENUCONTENTDARK_PLUS_0) :CComponentsText(x_pos, y_pos, w, h, text, mode, font_text, has_shadow, color_text, color_frame, color_body, color_shadow) @@ -228,7 +281,7 @@ class CComponentsInfoBox : public CComponentsText CComponentsInfoBox(); CComponentsInfoBox( const int x_pos, const int y_pos, const int w, const int h, - const char* info_text = NULL, const int mode = CTextBox::AUTO_WIDTH, Font* font_text = NULL, + std::string info_text = "", const int mode = CTextBox::AUTO_WIDTH, Font* font_text = NULL, bool has_shadow = CC_SHADOW_OFF, fb_pixel_t color_text = COL_MENUCONTENT, fb_pixel_t color_frame = COL_MENUCONTENT_PLUS_6, fb_pixel_t color_body = COL_MENUCONTENT_PLUS_0, fb_pixel_t color_shadow = COL_MENUCONTENTDARK_PLUS_0); @@ -295,7 +348,6 @@ class CComponentsDetailLine : public CComponents ~CComponentsDetailLine(); void paint(bool do_save_bg = CC_SAVE_SCREEN_YES); - void kill(); inline void setColors(fb_pixel_t color_line, fb_pixel_t color_shadow){col_body = color_line; col_shadow = color_shadow;}; void syncSysColors(); inline void setYPosDown(const int& y_pos_down){y_down = y_pos_down;}; @@ -303,240 +355,4 @@ class CComponentsDetailLine : public CComponents inline void setHMarkDown(const int& h_mark_down_){h_mark_down = h_mark_down_;}; }; -#define FIRST_ELEMENT_INIT 10000 -#define LOGO_MAX_WIDTH width/4 -class CComponentsItemBox : public CComponentsItem -{ - protected: - int hSpacer; - int hOffset; - int vOffset; - int digit_offset, digit_h; - bool paintElements; - bool onlyOneTextElement; - fb_pixel_t it_col_text; - Font* font_text; - int hMax; - bool has_TextElement; - size_t firstElementLeft; - size_t firstElementRight; - size_t prevElementLeft; - size_t prevElementRight; - std::vector v_element_data; - bool isCalculated; - - void clearElements(); - void initVarItemBox(); - void calSizeOfElements(); - void calPositionOfElements(); - void paintItemBox(bool do_save_bg = CC_SAVE_SCREEN_YES); - void calculateElements(); - bool addElement(int align, int type, const std::string& element="", size_t *index=NULL); - void paintImage(size_t index, bool newElement); - void paintText(size_t index, bool newElement); - - public: - CComponentsItemBox(); - virtual ~CComponentsItemBox(); - - inline virtual void setTextFont(Font* font){font_text = font;}; - inline virtual void setTextColor(fb_pixel_t color_text){ it_col_text = color_text;}; - - virtual void refreshElement(size_t index, const std::string& element); - virtual void paintElement(size_t index, bool newElement= false); - virtual bool addLogoOrText(int align, const std::string& logo, const std::string& text, size_t *index=NULL); - virtual void clearTitlebar(); - virtual void addText(const std::string& s_text, const int align=CC_ALIGN_LEFT, size_t *index=NULL); - virtual void addText(neutrino_locale_t locale_text, const int align=CC_ALIGN_LEFT, size_t *index=NULL); - virtual void addIcon(const std::string& s_icon_name, const int align=CC_ALIGN_LEFT, size_t *index=NULL); - virtual void addPicture(const std::string& s_picture_path, const int align=CC_ALIGN_LEFT, size_t *index=NULL); - virtual void addClock(const int align=CC_ALIGN_RIGHT, size_t *index=NULL); - virtual int getHeight(); -}; - -class CComponentsTitleBar : public CComponentsItemBox -{ - private: - const char* tb_c_text; - std::string tb_s_text, tb_icon_name; - neutrino_locale_t tb_locale_text; - int tb_text_align, tb_icon_align; - - void initText(); - void initIcon(); - void initElements(); - void initVarTitleBar(); - - public: - CComponentsTitleBar(); - CComponentsTitleBar( const int x_pos, const int y_pos, const int w, const int h, const char* c_text = NULL, const std::string& s_icon ="", - fb_pixel_t color_text = COL_MENUHEAD, fb_pixel_t color_body = COL_MENUHEAD_PLUS_0); - CComponentsTitleBar( const int x_pos, const int y_pos, const int w, const int h, const std::string& s_text ="", const std::string& s_icon ="", - fb_pixel_t color_text = COL_MENUHEAD, fb_pixel_t color_body = COL_MENUHEAD_PLUS_0); - CComponentsTitleBar( const int x_pos, const int y_pos, const int w, const int h, neutrino_locale_t locale_text = NONEXISTANT_LOCALE, const std::string& s_icon ="", - fb_pixel_t color_text = COL_MENUHEAD, fb_pixel_t color_body = COL_MENUHEAD_PLUS_0); - - void paint(bool do_save_bg = CC_SAVE_SCREEN_YES); - -}; - - -class CComponentsForm : public CComponentsItem -{ - protected: - std::vector v_cc_items; - void initVarForm(); - void paintForm(bool do_save_bg); - public: - - CComponentsForm(); - CComponentsForm(const int x_pos, const int y_pos, const int w, const int h, bool has_shadow = CC_SHADOW_OFF, - fb_pixel_t color_frame = COL_MENUCONTENT_PLUS_6, fb_pixel_t color_body = COL_MENUCONTENT_PLUS_0, fb_pixel_t color_shadow = COL_MENUCONTENTDARK_PLUS_0); - virtual ~CComponentsForm(); - - void paint(bool do_save_bg = CC_SAVE_SCREEN_YES); - void hide(bool no_restore = false); - virtual void addCCItem(CComponentsItem* cc_Item); - virtual void insertCCItem(const uint& cc_item_id, CComponentsItem* cc_Item); - virtual void removeCCItem(const uint& cc_item_id); - virtual void replaceCCItem(const uint& cc_item_id, CComponentsItem* new_cc_Item); - virtual void replaceCCItem(CComponentsItem* old_cc_Item, CComponentsItem* new_cc_Item); - virtual int getCCItemId(CComponentsItem* cc_Item); - virtual CComponentsItem* getCCItem(const uint& cc_item_id); - virtual void paintCCItems(); - virtual void clearCCItems(); - virtual void cleanCCForm(); -}; - -class CComponentsIconForm : public CComponentsForm -{ - private: - std::vector v_icons; - int ccif_offset, ccif_icon_align; - void initMaxHeight(int *pheight); - - protected: - void initVarIconForm(); - - public: - CComponentsIconForm(); - CComponentsIconForm(const int x_pos, const int y_pos, const int w, const int h, const std::vector v_icon_names, bool has_shadow = CC_SHADOW_OFF, - fb_pixel_t color_frame = COL_MENUCONTENT_PLUS_6, fb_pixel_t color_body = COL_MENUHEAD_PLUS_0, fb_pixel_t color_shadow = COL_MENUCONTENTDARK_PLUS_0); -// ~CComponentsIconForm(); //inherited from CComponentsForm - - void paint(bool do_save_bg = CC_SAVE_SCREEN_YES); - void initCCIcons(); - void addIcon(const std::string& icon_name); - void addIcon(std::vector icon_name); - void removeIcons(){v_icons.clear();}; - void insertIcon(const uint& icon_id, const std::string& icon_name); - void removeIcon(const uint& icon_id); - void removeIcon(const std::string& icon_name); - void removeAllIcons(); - void setIconOffset(const int offset){ccif_offset = offset;}; - - enum //alignements - { - CC_ICONS_FRM_ALIGN_RIGHT , - CC_ICONS_FRM_ALIGN_LEFT - }; - void setIconAlign(int alignment){ccif_icon_align = alignment;}; - - int getIconId(const std::string& icon_name); -}; - - - -class CComponentsHeader : public CComponentsForm -{ - private: - CComponentsPicture * cch_icon_obj; - CComponentsText * cch_text_obj; - CComponentsIconForm * cch_btn_obj; - std::string cch_text; - const char* cch_icon_name; - neutrino_locale_t cch_locale_text; - fb_pixel_t cch_col_text; - Font* cch_font; - int cch_icon_x, cch_items_y, cch_text_x, ccif_width, cch_icon_w, cch_buttons, cch_btn_offset; - std::vector v_cch_btn; - - void initCCHeaderIcon(); - void initCCHeaderText(); - void initCCHeaderButtons(); - void initCCHDefaultButtons(); - void initCCButtonFormSize(); - - protected: - void initVarHeader(); - - public: - enum - { - CC_BTN_HELP = 0x02, - CC_BTN_INFO = 0x04, - CC_BTN_MENU = 0x40, - CC_BTN_EXIT = 0x80 - - }; - - enum - { - CC_HEADER_ITEM_ICON = 0, - CC_HEADER_ITEM_TEXT = 1, - CC_HEADER_ITEM_BUTTONS = 2 - }; - CComponentsHeader(); - CComponentsHeader(const int x_pos, const int y_pos, const int w, const int h = 0, const std::string& caption = "header", const char* icon_name = NULL, const int buttons = 0, bool has_shadow = CC_SHADOW_OFF, - fb_pixel_t color_frame = COL_MENUCONTENT_PLUS_6, fb_pixel_t color_body = COL_MENUHEAD_PLUS_0, fb_pixel_t color_shadow = COL_MENUCONTENTDARK_PLUS_0); - CComponentsHeader(const int x_pos, const int y_pos, const int w, const int h = 0, neutrino_locale_t caption_locale = NONEXISTANT_LOCALE, const char* icon_name = NULL, const int buttons = 0,bool has_shadow = CC_SHADOW_OFF, - fb_pixel_t color_frame = COL_MENUCONTENT_PLUS_6, fb_pixel_t color_body = COL_MENUHEAD_PLUS_0, fb_pixel_t color_shadow = COL_MENUCONTENTDARK_PLUS_0); - ~CComponentsHeader(); - - void paint(bool do_save_bg = CC_SAVE_SCREEN_YES); - void setHeaderText(const std::string& caption); - void setHeaderText(neutrino_locale_t caption_locale); - void setColorHeaderBody(fb_pixel_t text_color){cch_col_text = text_color;}; - void setHeaderButtonOffset(const int offset){cch_btn_offset = offset;}; - void setHeaderIcon(const char* icon_name); - void addHeaderButton(const std::string& button_name); - void removeHeaderButtons(); - void setHeaderDefaultButtons(const int buttons); - void initCCHeaderItems(); -}; - -class CComponentsWindow : public CComponentsForm -{ - private: - CComponentsHeader * ccw_head; - std::string ccw_caption; - const char* ccw_icon_name; - int ccw_start_y; - int ccw_buttons; - - void initHeader(); - void initCCWItems(); - - protected: - void initVarWindow(); - - public: - enum - { - CC_WINDOW_ITEM_HEADER = 0 - }; - CComponentsWindow(); - CComponentsWindow(const std::string& caption, const char* iconname = NULL); - CComponentsWindow(neutrino_locale_t locale_caption, const char* iconname = NULL); - ~CComponentsWindow(); - - void paint(bool do_save_bg = CC_SAVE_SCREEN_YES); - void setWindowCaption(const std::string& text){ccw_caption = text;}; - void setWindowCaption(neutrino_locale_t locale_text); - void setWindowIcon(const char* iconname){ccw_icon_name = iconname;}; - void setWindowHeaderButtons(const int& buttons){ccw_buttons = buttons;}; - - int getStartY(); //y value for start of the area below header -}; - #endif diff --git a/src/gui/components/cc_base.cpp b/src/gui/components/cc_base.cpp index 6872023f8..5cb0a9f7f 100644 --- a/src/gui/components/cc_base.cpp +++ b/src/gui/components/cc_base.cpp @@ -16,7 +16,7 @@ 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 - Library General Public License for more details. + 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 @@ -64,11 +64,13 @@ void CComponents::initVarBasic() col_body = COL_MENUCONTENT_PLUS_0; col_shadow = COL_MENUCONTENTDARK_PLUS_0; col_frame = COL_MENUCONTENT_PLUS_6; + col_frame_sel = COL_MENUCONTENTSELECTED_PLUS_0; corner_type = CORNER_ALL; corner_rad = 0; shadow = CC_SHADOW_OFF; shadow_w = SHADOW_OFFSET; fr_thickness = 0; + fr_thickness_sel = 3; firstPaint = true; is_painted = false; @@ -78,7 +80,7 @@ void CComponents::initVarBasic() saved_screen.pixbuf = NULL; } -bool CComponents::allowPaint(int i) +bool CComponents::allowPaint(const int& i) { if(v_fbdata[i].fbdata_type == CC_FBDATA_TYPE_BOX) return true; @@ -118,6 +120,10 @@ void CComponents::paintFbItems(bool do_save_bg) } for(size_t i=0; i< v_fbdata.size() ;i++){ + // Don't paint if dx or dy are 0 + if ((v_fbdata[i].dx == 0) || (v_fbdata[i].dy == 0)) + continue; + int fbtype = v_fbdata[i].fbdata_type; #ifdef DEBUG_CC printf(" [CComponents]\n [%s - %d], fbdata_[%d] \n x = %d\n y = %d\n dx = %d\n dy = %d\n", __FUNCTION__, __LINE__, i, v_fbdata[i].x, v_fbdata[i].y, v_fbdata[i].dx, v_fbdata[i].dy); @@ -138,7 +144,7 @@ void CComponents::paintFbItems(bool do_save_bg) frameBuffer->paintBoxFrame(v_fbdata[i].x, v_fbdata[i].y, v_fbdata[i].dx, v_fbdata[i].dy, v_fbdata[i].frame_thickness, v_fbdata[i].color, v_fbdata[i].r); else if (fbtype == CC_FBDATA_TYPE_BACKGROUND) frameBuffer->paintBackgroundBoxRel(x, y, v_fbdata[i].dx, v_fbdata[i].dy); - else if( allowPaint(i) ) + else if( allowPaint(i) || fbtype == CC_FBDATA_TYPE_LINE) frameBuffer->paintBoxRel(v_fbdata[i].x, v_fbdata[i].y, v_fbdata[i].dx, v_fbdata[i].dy, v_fbdata[i].color, v_fbdata[i].r, corner_type); } } @@ -168,6 +174,16 @@ inline void CComponents::hide() is_painted = false; } +//erase rendered objects +void CComponents::kill() +{ + for(size_t i =0; i< v_fbdata.size() ;i++) + frameBuffer->paintBackgroundBoxRel(v_fbdata[i].x, v_fbdata[i].y, v_fbdata[i].dx, v_fbdata[i].dy); + clear(); + firstPaint = true; + is_painted = false; +} + //clean old screen buffer inline void CComponents::clear() { diff --git a/src/gui/components/cc_detailsline.cpp b/src/gui/components/cc_detailsline.cpp index bae3e163b..10f6f96a3 100644 --- a/src/gui/components/cc_detailsline.cpp +++ b/src/gui/components/cc_detailsline.cpp @@ -16,7 +16,7 @@ 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 - Library General Public License for more details. + 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 @@ -113,8 +113,8 @@ void CComponentsDetailLine::paint(bool do_save_bg) { /* vertical item mark | */ {CC_FBDATA_TYPE_LINE, x+width-thickness-sw, y_mark_top, thickness, h_mark_top, col_body, 0, 0, NULL, NULL}, - {CC_FBDATA_TYPE_LINE, x+width-sw, y_mark_top, sw, h_mark_top, col_shadow, 0, 0, NULL, NULL}, - {CC_FBDATA_TYPE_LINE, x+width-thickness-sw, y_mark_top+h_mark_top, thickness+sw, sw , col_shadow, 0, 0, NULL, NULL}, + {CC_FBDATA_TYPE_LINE, x+width-sw, y_mark_top+sw, sw, h_mark_top-sw, col_shadow, 0, 0, NULL, NULL}, + {CC_FBDATA_TYPE_LINE, x+width-thickness, y_mark_top+h_mark_top, thickness, sw, col_shadow, 0, 0, NULL, NULL}, /* horizontal item line - */ {CC_FBDATA_TYPE_LINE, x, y, width-thickness-sw, thickness, col_body, 0, 0, NULL, NULL}, @@ -126,12 +126,12 @@ void CComponentsDetailLine::paint(bool do_save_bg) /* horizontal info line - */ {CC_FBDATA_TYPE_LINE, x, y_down, width-thickness-sw, thickness, col_body, 0, 0, NULL, NULL}, - {CC_FBDATA_TYPE_LINE, x, y_down+thickness, width-thickness-sw, sw, col_shadow, 0, 0, NULL, NULL}, + {CC_FBDATA_TYPE_LINE, x+sw, y_down+thickness, width-thickness-2*sw, sw, col_shadow, 0, 0, NULL, NULL}, /* vertical info mark | */ {CC_FBDATA_TYPE_LINE, x+width-thickness-sw, y_mark_down, thickness, h_mark_down, col_body, 0, 0, NULL, NULL}, - {CC_FBDATA_TYPE_LINE, x+width-sw, y_mark_down, sw, h_mark_down, col_shadow, 0, 0, NULL, NULL}, - {CC_FBDATA_TYPE_LINE, x+width-thickness-sw, y_mark_down+h_mark_down,thickness+sw, sw, col_shadow, 0, 0, NULL, NULL}, + {CC_FBDATA_TYPE_LINE, x+width-sw, y_mark_down+sw, sw, h_mark_down-sw, col_shadow, 0, 0, NULL, NULL}, + {CC_FBDATA_TYPE_LINE, x+width-thickness, y_mark_down+h_mark_down,thickness, sw, col_shadow, 0, 0, NULL, NULL}, }; for(size_t i =0; i< (sizeof(fbdata) / sizeof(fbdata[0])) ;i++) @@ -140,24 +140,6 @@ void CComponentsDetailLine::paint(bool do_save_bg) paintFbItems(do_save_bg); } -//remove painted fb items from screen -void CComponentsDetailLine::kill() -{ - //save current colors - fb_pixel_t c_tmp1, c_tmp2; - c_tmp1 = col_body; - c_tmp2 = col_shadow; - - //set background color - col_body = col_shadow = COL_BACKGROUND; - - //paint with background and restore, set last used colors - paint(CC_SAVE_SCREEN_NO); - col_body = c_tmp1; - col_shadow = c_tmp2; - firstPaint = true; -} - //synchronize colors for details line //This is usefull if the system colors are changed during runtime //so you can ensure correct applied system colors in relevant objects with unchanged instances. diff --git a/src/gui/components/cc_frm.cpp b/src/gui/components/cc_frm.cpp index 1a55a32f1..34c1e4d25 100644 --- a/src/gui/components/cc_frm.cpp +++ b/src/gui/components/cc_frm.cpp @@ -16,7 +16,7 @@ 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 - Library General Public License for more details. + 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 @@ -30,7 +30,7 @@ #include #include -#include "cc.h" +#include "cc_frm.h" using namespace std; @@ -129,6 +129,7 @@ void CComponentsForm::addCCItem(CComponentsItem* cc_Item) #ifdef DEBUG_CC printf(" [CComponentsForm] %s-%d add cc_Item [type %d] [current count %d] \n", __FUNCTION__, __LINE__, cc_Item->getItemType(), v_cc_items.size()); #endif + cc_Item->setParent(this); v_cc_items.push_back(cc_Item); } #ifdef DEBUG_CC @@ -233,7 +234,6 @@ void CComponentsForm::paintCCItems() //cache original item position and dimensions int x_item, y_item, w_item, h_item; v_cc_items[i]->getDimensions(&x_item, &y_item, &w_item, &h_item); - int xy_ref = 0+fr_thickness; //allowed minimal x and y start position if (x_item < xy_ref){ @@ -270,6 +270,11 @@ void CComponentsForm::paintCCItems() printf("[CComponentsForm] %s: item %d too large, definied height=%d, possible height=%d \n", __FUNCTION__, i, h_item, v_cc_items[i]->getHeight()); #endif } + + //set real position dimension to item + int real_x = v_cc_items[i]->getXPos(); + int real_y = v_cc_items[i]->getYPos(); + v_cc_items[i]->setRealPos(real_x, real_y); //paint element without saved screen! v_cc_items[i]->paint(CC_SAVE_SCREEN_NO); diff --git a/src/gui/components/cc_frm.h b/src/gui/components/cc_frm.h new file mode 100644 index 000000000..3a916298a --- /dev/null +++ b/src/gui/components/cc_frm.h @@ -0,0 +1,194 @@ +/* + Based up Neutrino-GUI - Tuxbox-Project + Copyright (C) 2001 by Steffen Hehn 'McClean' + + Classes for generic GUI-related components. + Copyright (C) 2012, 2013, Thilo Graf 'dbt' + + License: GPL + + 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 Foundation, Inc., 51 Franklin St, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +#ifndef __CC_FORM_H__ +#define __CC_FORM_H__ + + +#include "config.h" +#include +#include +#include + + +class CComponentsForm : public CComponentsItem +{ + protected: + std::vector v_cc_items; + void initVarForm(); + void paintForm(bool do_save_bg); + public: + + CComponentsForm(); + CComponentsForm(const int x_pos, const int y_pos, const int w, const int h, bool has_shadow = CC_SHADOW_OFF, + fb_pixel_t color_frame = COL_MENUCONTENT_PLUS_6, fb_pixel_t color_body = COL_MENUCONTENT_PLUS_0, fb_pixel_t color_shadow = COL_MENUCONTENTDARK_PLUS_0); + virtual ~CComponentsForm(); + + void paint(bool do_save_bg = CC_SAVE_SCREEN_YES); + void hide(bool no_restore = false); + virtual void addCCItem(CComponentsItem* cc_Item); + virtual void insertCCItem(const uint& cc_item_id, CComponentsItem* cc_Item); + virtual void removeCCItem(const uint& cc_item_id); + virtual void replaceCCItem(const uint& cc_item_id, CComponentsItem* new_cc_Item); + virtual void replaceCCItem(CComponentsItem* old_cc_Item, CComponentsItem* new_cc_Item); + virtual int getCCItemId(CComponentsItem* cc_Item); + virtual CComponentsItem* getCCItem(const uint& cc_item_id); + virtual void paintCCItems(); + virtual void clearCCItems(); + virtual void cleanCCForm(); +}; + +class CComponentsIconForm : public CComponentsForm +{ + private: + std::vector v_icons; + int ccif_offset, ccif_icon_align; + void initMaxHeight(int *pheight); + + protected: + void initVarIconForm(); + + public: + CComponentsIconForm(); + CComponentsIconForm(const int x_pos, const int y_pos, const int w, const int h, const std::vector &v_icon_names, bool has_shadow = CC_SHADOW_OFF, + fb_pixel_t color_frame = COL_MENUCONTENT_PLUS_6, fb_pixel_t color_body = COL_MENUHEAD_PLUS_0, fb_pixel_t color_shadow = COL_MENUCONTENTDARK_PLUS_0); +// ~CComponentsIconForm(); //inherited from CComponentsForm + + void paint(bool do_save_bg = CC_SAVE_SCREEN_YES); + void initCCIcons(); + void addIcon(const std::string& icon_name); + void addIcon(std::vector icon_name); + void removeIcons(){v_icons.clear();}; + void insertIcon(const uint& icon_id, const std::string& icon_name); + void removeIcon(const uint& icon_id); + void removeIcon(const std::string& icon_name); + void removeAllIcons(); + void setIconOffset(const int offset){ccif_offset = offset;}; + + enum //alignements + { + CC_ICONS_FRM_ALIGN_RIGHT , + CC_ICONS_FRM_ALIGN_LEFT + }; + void setIconAlign(int alignment){ccif_icon_align = alignment;}; + + int getIconId(const std::string& icon_name); +}; + + + +class CComponentsHeader : public CComponentsForm +{ + private: + CComponentsPicture * cch_icon_obj; + CComponentsText * cch_text_obj; + CComponentsIconForm * cch_btn_obj; + std::string cch_text; + const char* cch_icon_name; + neutrino_locale_t cch_locale_text; + fb_pixel_t cch_col_text; + Font* cch_font; + int cch_icon_x, cch_items_y, cch_text_x, ccif_width, cch_icon_w, cch_buttons, cch_btn_offset; + std::vector v_cch_btn; + + void initCCHeaderIcon(); + void initCCHeaderText(); + void initCCHeaderButtons(); + void initCCHDefaultButtons(); + void initCCButtonFormSize(); + + protected: + void initVarHeader(); + + public: + enum + { + CC_BTN_HELP = 0x02, + CC_BTN_INFO = 0x04, + CC_BTN_MENU = 0x40, + CC_BTN_EXIT = 0x80 + + }; + + enum + { + CC_HEADER_ITEM_ICON = 0, + CC_HEADER_ITEM_TEXT = 1, + CC_HEADER_ITEM_BUTTONS = 2 + }; + CComponentsHeader(); + CComponentsHeader(const int x_pos, const int y_pos, const int w, const int h = 0, const std::string& caption = "header", const char* icon_name = NULL, const int buttons = 0, bool has_shadow = CC_SHADOW_OFF, + fb_pixel_t color_frame = COL_MENUCONTENT_PLUS_6, fb_pixel_t color_body = COL_MENUHEAD_PLUS_0, fb_pixel_t color_shadow = COL_MENUCONTENTDARK_PLUS_0); + CComponentsHeader(const int x_pos, const int y_pos, const int w, const int h = 0, neutrino_locale_t caption_locale = NONEXISTANT_LOCALE, const char* icon_name = NULL, const int buttons = 0,bool has_shadow = CC_SHADOW_OFF, + fb_pixel_t color_frame = COL_MENUCONTENT_PLUS_6, fb_pixel_t color_body = COL_MENUHEAD_PLUS_0, fb_pixel_t color_shadow = COL_MENUCONTENTDARK_PLUS_0); + ~CComponentsHeader(); + + void paint(bool do_save_bg = CC_SAVE_SCREEN_YES); + void setHeaderText(const std::string& caption); + void setHeaderText(neutrino_locale_t caption_locale); + void setColorHeaderBody(fb_pixel_t text_color){cch_col_text = text_color;}; + void setHeaderButtonOffset(const int offset){cch_btn_offset = offset;}; + void setHeaderIcon(const char* icon_name); + void addHeaderButton(const std::string& button_name); + void removeHeaderButtons(); + void setHeaderDefaultButtons(const int buttons); + void initCCHeaderItems(); +}; + +class CComponentsWindow : public CComponentsForm +{ + private: + CComponentsHeader * ccw_head; + std::string ccw_caption; + const char* ccw_icon_name; + int ccw_start_y; + int ccw_buttons; + + void initHeader(); + void initCCWItems(); + + protected: + void initVarWindow(); + + public: + enum + { + CC_WINDOW_ITEM_HEADER = 0 + }; + CComponentsWindow(); + CComponentsWindow(const std::string& caption, const char* iconname = NULL); + CComponentsWindow(neutrino_locale_t locale_caption, const char* iconname = NULL); + ~CComponentsWindow(); + + void paint(bool do_save_bg = CC_SAVE_SCREEN_YES); + void setWindowCaption(const std::string& text){ccw_caption = text;}; + void setWindowCaption(neutrino_locale_t locale_text); + void setWindowIcon(const char* iconname){ccw_icon_name = iconname;}; + void setWindowHeaderButtons(const int& buttons){ccw_buttons = buttons;}; + + int getStartY(); //y value for start of the area below header +}; + +#endif diff --git a/src/gui/components/cc_frm_button.cpp b/src/gui/components/cc_frm_button.cpp new file mode 100644 index 000000000..b9478d334 --- /dev/null +++ b/src/gui/components/cc_frm_button.cpp @@ -0,0 +1,144 @@ +/* + Based up Neutrino-GUI - Tuxbox-Project + Copyright (C) 2001 by Steffen Hehn 'McClean' + + Classes for generic GUI-related components. + Copyright (C) 2012, 2013, Thilo Graf 'dbt' + + License: GPL + + 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 Foundation, Inc., 51 Franklin St, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include + +#include "cc_frm_button.h" + +#define FRAME_TH 3 + +using namespace std; + +CComponentsButton::CComponentsButton( const int x_pos, const int y_pos, const int w, const int h, + const std::string& caption, const std::string& icon_name, + bool selected, bool enabled, bool has_shadow, + fb_pixel_t color_frame, fb_pixel_t color_body, fb_pixel_t color_shadow) +{ + initVarButton(); + cc_btn_icon = icon_name; + cc_btn_capt = caption; + cc_btn_capt_col = COL_MENUCONTENT; + cc_btn_text_w = cc_btn_font->getRenderWidth(cc_btn_capt, true); + cc_btn_text_h = cc_btn_font->getHeight(); + + x = x_pos; + y = y_pos; + width = max(w, cc_btn_text_w); + height = max(h, cc_btn_text_h); + shadow = has_shadow; + shadow_w = SHADOW_OFFSET; + col_frame = color_frame; + col_body = color_body; + col_shadow = color_shadow; + cc_item_enabled = enabled; + cc_item_selected = selected; + fr_thickness = FRAME_TH; +} + +void CComponentsButton::initVarButton() +{ + initVarForm(); + cc_item_type = CC_ITEMTYPE_BUTTON; + cc_btn_icon_obj = NULL; + cc_btn_capt_obj = NULL; + cc_btn_font = g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]; + cc_btn_icon = ""; + cc_btn_capt = ""; + cc_btn_text_w = 0; + cc_btn_text_h = 0; +} + +void CComponentsButton::initIcon() +{ + //init cch_icon_obj only if an icon available + if (cc_btn_icon.empty()) { + if (cc_btn_icon_obj) + delete cc_btn_icon_obj; + cc_btn_icon_obj = NULL; + return; + } + + if (cc_btn_icon_obj == NULL){ + cc_btn_icon_obj = new CComponentsPicture(0, 0, 0, 0, cc_btn_icon); + + addCCItem(cc_btn_icon_obj); + } + + if (cc_btn_icon_obj){ + cc_btn_icon_obj->setDimensionsAll(this->getRealXPos(), this->getRealYPos(), height/*-2*fr_thickness*/, height-2*fr_thickness); + cc_btn_icon_obj->setPictureAlign(CC_ALIGN_HOR_CENTER | CC_ALIGN_VER_CENTER); + cc_btn_icon_obj->doPaintBg(false); + } +} + +void CComponentsButton::initCaption() +{ + if (cc_btn_capt_obj == NULL){ + cc_btn_capt_obj = new CComponentsLabel(); + + addCCItem(cc_btn_capt_obj); + } + + int cap_x = this->getRealXPos()+(width/2)-(cc_btn_text_w/2); + int cap_h = height/*-2*fr_thickness*/; + int cap_y = this->getRealYPos(); + + if (cc_btn_icon_obj) + cap_x = this->getRealXPos()+cc_btn_icon_obj->getWidth(); + + if (cc_btn_capt_obj){ + cc_btn_capt_obj->setDimensionsAll(cap_x, cap_y, width-cap_x, cap_h); + cc_btn_capt_obj->setTextColor(this->cc_item_enabled ? COL_MENUCONTENT : COL_MENUCONTENTINACTIVE); + cc_btn_capt_obj->setText(cc_btn_capt, CTextBox::NO_AUTO_LINEBREAK, cc_btn_font); + cc_btn_capt_obj->forceTextPaint(); //here required; + cc_btn_capt_obj->doPaintBg(false); + + //corner of text item + cc_btn_capt_obj->setCornerRadius(corner_rad-fr_thickness); + cc_btn_capt_obj->setCornerType(corner_type); + } +} + +void CComponentsButton::initCCBtnItems() +{ + initIcon(); + + initCaption(); +} + + +void CComponentsButton::paint(bool do_save_bg) +{ + //prepare items before paint + initCCBtnItems(); + + //paint form contents + paintForm(do_save_bg); +} diff --git a/src/gui/components/cc_frm_button.h b/src/gui/components/cc_frm_button.h new file mode 100644 index 000000000..b7cac5f2c --- /dev/null +++ b/src/gui/components/cc_frm_button.h @@ -0,0 +1,121 @@ +/* + Based up Neutrino-GUI - Tuxbox-Project + Copyright (C) 2001 by Steffen Hehn 'McClean' + + Classes for generic GUI-related components. + Copyright (C) 2012, 2013, Thilo Graf 'dbt' + + License: GPL + + 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 Foundation, Inc., 51 Franklin St, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +#ifndef __CC_BUTTONS_H__ +#define __CC_BUTTONS_H__ + +#include "config.h" +#include "cc.h" +#include "cc_frm.h" +#include + + +class CComponentsButton : public CComponentsForm +{ + protected: + void initVarButton(); + + ///caption and icon properties + std::string cc_btn_capt; //text + std::string cc_btn_icon; //icon name, only icons supported, to find in gui/widget/icons.h + fb_pixel_t cc_btn_capt_col; //text color + Font* cc_btn_font; //text font + int cc_btn_text_w, cc_btn_text_h; //width and height of text, too long text will be truncated + + ///icon and text objects + CComponentsPicture *cc_btn_icon_obj; + CComponentsLabel *cc_btn_capt_obj; + + ///initialize of objects + void initIcon(); + void initCaption(); + void initCCBtnItems(); + + public: + ///basic constructor for button object with most needed params, no button icon is definied here + CComponentsButton( const int x_pos, const int y_pos, const int w, const int h, + const std::string& caption, const std::string& icon_name, + bool selected = false, bool enabled = true, bool has_shadow = CC_SHADOW_OFF, + fb_pixel_t color_frame = COL_LIGHT_GRAY, fb_pixel_t color_body = COL_MENUCONTENT_PLUS_0, fb_pixel_t color_shadow = COL_MENUCONTENTDARK_PLUS_0); + + virtual void setButtonTextColor(fb_pixel_t caption_color){cc_btn_capt_col = caption_color;}; + void paint(bool do_save_bg = CC_SAVE_SCREEN_YES); +}; + +///sub classes for button objects with most needed params, and predefined color buttons, but functionality is the same as in CComponentsButton +class CComponentsButtonRed : public CComponentsButton +{ + public: + CComponentsButtonRed( const int x_pos, const int y_pos, const int w, const int h, + const std::string& caption, + bool selected = false, bool enabled = true, bool has_shadow = CC_SHADOW_OFF, + fb_pixel_t color_frame = COL_LIGHT_GRAY, fb_pixel_t color_body = COL_MENUCONTENT_PLUS_0, fb_pixel_t color_shadow = COL_MENUCONTENTDARK_PLUS_0) + :CComponentsButton(x_pos, y_pos, w, h, caption, NEUTRINO_ICON_BUTTON_RED, selected, enabled, has_shadow, color_frame, color_body, color_shadow) + { + cc_item_type = CC_ITEMTYPE_BUTTON_RED; + }; +}; + +class CComponentsButtonGreen : public CComponentsButton +{ + public: + CComponentsButtonGreen( const int x_pos, const int y_pos, const int w, const int h, + const std::string& caption, + bool selected = false, bool enabled = true, bool has_shadow = CC_SHADOW_OFF, + fb_pixel_t color_frame = COL_LIGHT_GRAY, fb_pixel_t color_body = COL_MENUCONTENT_PLUS_0, fb_pixel_t color_shadow = COL_MENUCONTENTDARK_PLUS_0) + :CComponentsButton(x_pos, y_pos, w, h, caption, NEUTRINO_ICON_BUTTON_GREEN, selected, enabled, has_shadow, color_frame, color_body, color_shadow) + { + cc_item_type = CC_ITEMTYPE_BUTTON_GREEN; + }; +}; + +class CComponentsButtonYellow : public CComponentsButton +{ + public: + CComponentsButtonYellow( const int x_pos, const int y_pos, const int w, const int h, + const std::string& caption, + bool selected = false, bool enabled = true, bool has_shadow = CC_SHADOW_OFF, + fb_pixel_t color_frame = COL_LIGHT_GRAY, fb_pixel_t color_body = COL_MENUCONTENT_PLUS_0, fb_pixel_t color_shadow = COL_MENUCONTENTDARK_PLUS_0) + :CComponentsButton(x_pos, y_pos, w, h, caption, NEUTRINO_ICON_BUTTON_YELLOW, selected, enabled, has_shadow, color_frame, color_body, color_shadow) + { + cc_item_type = CC_ITEMTYPE_BUTTON_YELLOW; + }; +}; + +class CComponentsButtonBlue : public CComponentsButton +{ + public: + CComponentsButtonBlue( const int x_pos, const int y_pos, const int w, const int h, + const std::string& caption, + bool selected = false, bool enabled = true, bool has_shadow = CC_SHADOW_OFF, + fb_pixel_t color_frame = COL_LIGHT_GRAY, fb_pixel_t color_body = COL_MENUCONTENT_PLUS_0, fb_pixel_t color_shadow = COL_MENUCONTENTDARK_PLUS_0) + :CComponentsButton(x_pos, y_pos, w, h, caption, NEUTRINO_ICON_BUTTON_BLUE, selected, enabled, has_shadow, color_frame, color_body, color_shadow) + { + cc_item_type = CC_ITEMTYPE_BUTTON_BLUE; + }; +}; + + +#endif /*__CC_BUTTONS_H__*/ diff --git a/src/gui/components/cc_frm_header.cpp b/src/gui/components/cc_frm_header.cpp index 72d3168c6..1f5694919 100644 --- a/src/gui/components/cc_frm_header.cpp +++ b/src/gui/components/cc_frm_header.cpp @@ -16,7 +16,7 @@ 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 - Library General Public License for more details. + 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 @@ -30,7 +30,7 @@ #include #include -#include "cc.h" +#include "cc_frm.h" using namespace std; @@ -286,6 +286,7 @@ void CComponentsHeader::initCCHeaderText() //set header text properties if (cch_text_obj){ cch_text_obj->setText(cch_text, CTextBox::AUTO_WIDTH, cch_font); + cch_text_obj->forceTextPaint(); //here required cch_text_obj->setDimensionsAll(cch_text_x, cch_items_y, width-cch_icon_w-fr_thickness, height-2*fr_thickness); cch_text_obj->setTextColor(cch_col_text); cch_text_obj->setColorBody(col_body); diff --git a/src/gui/components/cc_frm_icons.cpp b/src/gui/components/cc_frm_icons.cpp index 5d484a0d7..5bb8fe615 100644 --- a/src/gui/components/cc_frm_icons.cpp +++ b/src/gui/components/cc_frm_icons.cpp @@ -16,7 +16,7 @@ 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 - Library General Public License for more details. + 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 @@ -30,7 +30,7 @@ #include #include -#include "cc.h" +#include "cc_frm.h" using namespace std; @@ -41,7 +41,7 @@ CComponentsIconForm::CComponentsIconForm() } -CComponentsIconForm::CComponentsIconForm(const int x_pos, const int y_pos, const int w, const int h, const std::vector v_icon_names, bool has_shadow, +CComponentsIconForm::CComponentsIconForm(const int x_pos, const int y_pos, const int w, const int h, const std::vector &v_icon_names, bool has_shadow, fb_pixel_t color_frame, fb_pixel_t color_body, fb_pixel_t color_shadow) { initVarIconForm(); diff --git a/src/gui/components/cc_frm_window.cpp b/src/gui/components/cc_frm_window.cpp index 6a46ade97..05a6e222d 100644 --- a/src/gui/components/cc_frm_window.cpp +++ b/src/gui/components/cc_frm_window.cpp @@ -16,7 +16,7 @@ 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 - Library General Public License for more details. + 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 @@ -30,7 +30,7 @@ #include #include -#include "cc.h" +#include "cc_frm.h" #include using namespace std; diff --git a/src/gui/components/cc_item.cpp b/src/gui/components/cc_item.cpp index 92fd55c7c..a50375d10 100644 --- a/src/gui/components/cc_item.cpp +++ b/src/gui/components/cc_item.cpp @@ -16,7 +16,7 @@ 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 - Library General Public License for more details. + 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 @@ -53,7 +53,11 @@ void CComponentsItem::initVarItem() { //CComponents initVarBasic(); - cc_item_index = CC_NO_INDEX; + cc_item_index = CC_NO_INDEX; + cc_item_xr = cc_item_yr = -1; + cc_item_enabled = true; + cc_item_selected = false; + cc_parent = NULL; } // Paint container background in cc-items with shadow, background and frame. @@ -68,13 +72,31 @@ void CComponentsItem::paintInit(bool do_save_bg) int sw = shadow ? shadow_w : 0; int th = fr_thickness; + fb_pixel_t col_frame_cur = col_frame; + //calculate current needed frame thickeness and color, if item selected or not + if (cc_item_selected){ + col_frame_cur = col_frame_sel; + th = max(fr_thickness_sel, fr_thickness); + } + + //calculate current needed corner radius for body box, depends of frame thickness + int rad = (corner_rad>th) ? corner_rad-th : corner_rad; + + //calculate positon of shadow areas + int x_sh = corner_rad>0 ? x+width-2*corner_rad+sw : x+width; //right + int y_sh = corner_rad>0 ? y+height-2*corner_rad+sw : y+height; //bottom + + //calculate current shadow width depends of current corner_rad + int sw_cur = corner_rad>0 ? 2*corner_rad : sw; + comp_fbdata_t fbdata[] = { - {CC_FBDATA_TYPE_BGSCREEN, x, y, width+sw, height+sw, 0, 0, 0, NULL, NULL}, - {CC_FBDATA_TYPE_SHADOW, x+sw, y+sw, width, height, col_shadow, corner_rad, 0, NULL, NULL}, - {CC_FBDATA_TYPE_FRAME, x, y, width, height, col_frame, corner_rad, th, NULL, NULL}, - {CC_FBDATA_TYPE_BOX, x+th, y+th, width-2*th, height-2*th, col_body, corner_rad-th, 0, NULL, NULL}, + {CC_FBDATA_TYPE_BGSCREEN, x, y, width+sw, height+sw, 0, 0, 0, NULL, NULL}, + {CC_FBDATA_TYPE_BOX, x_sh, y+sw, sw_cur, height, col_shadow, corner_rad, 0, NULL, NULL},//shadow right + {CC_FBDATA_TYPE_BOX, x+sw, y_sh, width, sw_cur, col_shadow, corner_rad, 0, NULL, NULL},//shadow bottom + {CC_FBDATA_TYPE_FRAME, x, y, width, height, col_frame_cur, corner_rad, th, NULL, NULL},//frame + {CC_FBDATA_TYPE_BOX, x+th, y+th, width-2*th, height-2*th, col_body, rad, 0, NULL, NULL},//body }; for(size_t i =0; i< (sizeof(fbdata) / sizeof(fbdata[0])) ;i++) @@ -107,28 +129,6 @@ void CComponentsItem::hide(bool no_restore) hideCCItem(no_restore); } - -//hide rendered objects -void CComponentsItem::kill() -{ - //save current colors - fb_pixel_t c_tmp1, c_tmp2, c_tmp3; - c_tmp1 = col_body; - c_tmp2 = col_shadow; - c_tmp3 = col_frame; - - //set background color - col_body = col_frame = col_shadow = COL_BACKGROUND; - - //paint with background and restore last used colors - paint(CC_SAVE_SCREEN_NO); - col_body = c_tmp1; - col_shadow = c_tmp2; - col_frame = c_tmp3; - firstPaint = true; - is_painted = false; -} - //synchronize colors for forms //This is usefull if the system colors are changed during runtime //so you can ensure correct applied system colors in relevant objects with unchanged instances. diff --git a/src/gui/components/cc_item_box.cpp b/src/gui/components/cc_item_box.cpp index 4c95cb168..48809f34e 100644 --- a/src/gui/components/cc_item_box.cpp +++ b/src/gui/components/cc_item_box.cpp @@ -16,7 +16,7 @@ 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 - Library General Public License for more details. + 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 @@ -30,7 +30,7 @@ #include #include -#include "cc.h" +#include "cc_misc.h" using namespace std; diff --git a/src/gui/components/cc_item_infobox.cpp b/src/gui/components/cc_item_infobox.cpp index fb8eaa9c0..2cf17427d 100644 --- a/src/gui/components/cc_item_infobox.cpp +++ b/src/gui/components/cc_item_infobox.cpp @@ -42,7 +42,7 @@ CComponentsInfoBox::CComponentsInfoBox() } CComponentsInfoBox::CComponentsInfoBox(const int x_pos, const int y_pos, const int w, const int h, - const char* info_text, const int mode, Font* font_text, + std::string info_text, const int mode, Font* font_text, bool has_shadow, fb_pixel_t color_text, fb_pixel_t color_frame, fb_pixel_t color_body, fb_pixel_t color_shadow) { @@ -128,13 +128,15 @@ void CComponentsInfoBox::paint(bool do_save_bg) } //set text and paint text lines - if (ct_text){ + if (!ct_text.empty()){ if (cctext) delete cctext; cctext = new CComponentsText(); cctext->setText(ct_text, ct_text_mode, ct_font); - cctext->doPaintTextBoxBg(false); + cctext->doPaintTextBoxBg(ct_paint_textbg); + cctext->doPaintBg(false); + cctext->setTextColor(ct_col_text); cctext->setDimensionsAll(x_text, y+fr_thickness, width-(x_text-x+x_offset+fr_thickness), height-2*fr_thickness); cctext->paint(CC_SAVE_SCREEN_NO); } diff --git a/src/gui/components/cc_item_picture.cpp b/src/gui/components/cc_item_picture.cpp index cd5f8ebf0..215039324 100644 --- a/src/gui/components/cc_item_picture.cpp +++ b/src/gui/components/cc_item_picture.cpp @@ -172,7 +172,11 @@ void CComponentsPicture::paint(bool do_save_bg) initVarPicture(); paintInit(do_save_bg); pic_painted = false; - + +#ifdef DEBUG_CC + printf(" [CComponentsPicture] %s: paint image: %s (do_paint=%d)\n", __FUNCTION__, pic_name.c_str(), do_paint); +#endif + if (do_paint){ if (pic_paint_mode == CC_PIC_IMAGE_MODE_OFF) pic_painted = frameBuffer->paintIcon(pic_name, pic_x, pic_y, 0 /*pic_max_h*/, pic_offset, pic_paint, pic_paintBg, col_body); diff --git a/src/gui/components/cc_item_progressbar.cpp b/src/gui/components/cc_item_progressbar.cpp index b4369a929..c589b5953 100644 --- a/src/gui/components/cc_item_progressbar.cpp +++ b/src/gui/components/cc_item_progressbar.cpp @@ -66,8 +66,8 @@ CProgressBar::CProgressBar( const int x_pos, const int y_pos, const int w, const pb_blink = blinkenlights; pb_invert = inv; pb_red = r; - pb_green = g; - pb_yellow = b; + pb_green = g; + pb_yellow = b; pb_active_col = active_col; pb_passive_col = passive_col; } @@ -85,10 +85,10 @@ void CProgressBar::initVarProgressbar() pb_bl_changed = g_settings.progressbar_color; pb_last_width = -1; pb_red = 40; - pb_green = 100; - pb_yellow = 70; - pb_active_col = COL_INFOBAR_PLUS_7; - pb_passive_col = COL_INFOBAR_PLUS_3; + pb_green = 100; + pb_yellow = 70; + pb_active_col = COL_INFOBAR_PLUS_7; + pb_passive_col = COL_INFOBAR_PLUS_3; pb_value = 0; pb_max_value = 0; pb_paint_zero = false; @@ -113,8 +113,8 @@ void CProgressBar::initDimensions() pb_max_value = pb_value; // start positions x/y active bar - pb_x = x + fr_thickness; - pb_y = y + fr_thickness; + pb_x = (cc_item_xr > -1 ? cc_item_xr : x) + fr_thickness; + pb_y = (cc_item_yr > -1 ? cc_item_yr : y) + fr_thickness; // width for active bar with current value pb_active_width = max(0, pb_last_width); @@ -146,7 +146,7 @@ void CProgressBar::paintSimple() } if (pb_paint_zero && pb_value == 0) - frameBuffer->paintLine(x+fr_thickness , y+fr_thickness, x+width-3, y+height-3, pb_active_col); // zero line + frameBuffer->paintLine(pb_x , pb_y, pb_x+width-3, pb_y+height-3, pb_active_col); // zero line } void CProgressBar::paintAdvanced() diff --git a/src/gui/components/cc_item_text.cpp b/src/gui/components/cc_item_text.cpp index f06380b07..38d5e8d90 100644 --- a/src/gui/components/cc_item_text.cpp +++ b/src/gui/components/cc_item_text.cpp @@ -31,6 +31,9 @@ #include #include #include "cc.h" +#include +#include +#include using namespace std; @@ -42,7 +45,7 @@ CComponentsText::CComponentsText() } CComponentsText::CComponentsText( const int x_pos, const int y_pos, const int w, const int h, - const char* text, const int mode, Font* font_text, + std::string text, const int mode, Font* font_text, bool has_shadow, fb_pixel_t color_text, fb_pixel_t color_frame, fb_pixel_t color_body, fb_pixel_t color_shadow) { @@ -87,11 +90,13 @@ void CComponentsText::initVarText() ct_font = NULL; ct_box = NULL; ct_textbox = NULL; - ct_text = NULL; + ct_text = ""; + ct_old_text = ct_text; ct_text_mode = CTextBox::AUTO_WIDTH; ct_col_text = COL_MENUCONTENT; ct_text_sent = false; - ct_paint_textbg = true; + ct_paint_textbg = false; + ct_force_text_paint = false; } @@ -132,11 +137,12 @@ void CComponentsText::initCCText() ct_textbox->setWindowMaxDimensions(ct_box->iWidth, ct_box->iHeight); ct_textbox->setWindowMinDimensions(ct_box->iWidth, ct_box->iHeight); - //set text - string new_text = static_cast (ct_text); - ct_text_sent = ct_textbox->setText(&new_text, ct_box->iWidth); + //send text to CTextBox object, but paint text only if text has changed or force option is enabled + if ((ct_old_text != ct_text) || ct_force_text_paint) + ct_text_sent = ct_textbox->setText(&ct_text, ct_box->iWidth); + ct_old_text = ct_text; #ifdef DEBUG_CC - printf(" [CComponentsText] [%s - %d] init text: %s [x %d, y %d, h %d, w %d]\n", __FUNCTION__, __LINE__, ct_text, ct_box->iX, ct_box->iY, height, width); + printf(" [CComponentsText] [%s - %d] init text: %s [x %d, y %d, h %d, w %d]\n", __FUNCTION__, __LINE__, ct_text.c_str(), ct_box->iX, ct_box->iY, height, width); #endif } @@ -151,28 +157,56 @@ void CComponentsText::clearCCText() ct_textbox = NULL; } -void CComponentsText::setText(neutrino_locale_t locale_text, int mode, Font* font_text) + +void CComponentsText::setText(const std::string& stext, const int mode, Font* font_text) { - ct_text = g_Locale->getText(locale_text); + ct_old_text = ct_text; + ct_text = stext; ct_text_mode = mode; ct_font = font_text; +#ifdef DEBUG_CC + printf(" [CComponentsText] [%s - %d] ct_text: %s \n", __FUNCTION__, __LINE__, ct_text.c_str()); +#endif +} +void CComponentsText::setText(neutrino_locale_t locale_text, int mode, Font* font_text) +{ + string stext = g_Locale->getText(locale_text); + setText(stext, mode, font_text); } void CComponentsText::setText(const char* ctext, const int mode, Font* font_text) { - ct_text = ctext; - ct_text_mode = mode; - ct_font = font_text; - + setText((string)ctext, mode, font_text); } -void CComponentsText::setText(const std::string& stext, const int mode, Font* font_text) +void CComponentsText::setText(const int digit, const int mode, Font* font_text) { - ct_text = stext.c_str(); - ct_text_mode = mode; - ct_font = font_text; + string s_digit = iToString(digit); + setText(s_digit, mode, font_text); +} + +//set text lines directly from a file, returns true on succsess +bool CComponentsText::setTextFromFile(const string& path_to_textfile, const int mode, Font* font_text) +{ + string file = path_to_textfile; + string txt = ""; + ifstream in (file.c_str(), ios::in); + if (!in){ + printf("[CComponentsText] [%s - %d] error while open %s -> %s\n", __FUNCTION__, __LINE__, file.c_str(), strerror(errno)); + return false; + } + string line; + + while(getline(in, line)){ + txt += line + '\n'; + } + in.close(); + + setText(txt, mode, font_text); + + return true; } void CComponentsText::paintText(bool do_save_bg) @@ -191,9 +225,9 @@ void CComponentsText::paint(bool do_save_bg) void CComponentsText::hide(bool no_restore) { - if (ct_textbox) ct_textbox->hide(); + ct_old_text = ""; hideCCItem(no_restore); } @@ -206,3 +240,13 @@ void CComponentsText::removeLineBreaks(std::string& str) spos = str.find_first_of("\r\n"); } } + + +//helper, converts int to string +string CComponentsText::iToString(int int_val) +{ + ostringstream i_str; + i_str << int_val; + string i_string(i_str.str()); + return i_string; +} diff --git a/src/gui/components/cc_misc.h b/src/gui/components/cc_misc.h new file mode 100644 index 000000000..728019abc --- /dev/null +++ b/src/gui/components/cc_misc.h @@ -0,0 +1,113 @@ +/* + Based up Neutrino-GUI - Tuxbox-Project + Copyright (C) 2001 by Steffen Hehn 'McClean' + + Experimental Classes for generic GUI-related components. Not really used. + Copyright (C) 2012, Michael Liebmann 'micha-bbg + Copyright (C) 2012, Thilo Graf 'dbt' + + License: GPL + + 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 Foundation, Inc., 51 Franklin St, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +#ifndef __CC_MISC__ +#define __CC_MISC__ + +#include "config.h" +#include +#include +#include + + +#define FIRST_ELEMENT_INIT 10000 +#define LOGO_MAX_WIDTH width/4 +class CComponentsItemBox : public CComponentsItem +{ + protected: + int hSpacer; + int hOffset; + int vOffset; + int digit_offset, digit_h; + bool paintElements; + bool onlyOneTextElement; + fb_pixel_t it_col_text; + Font* font_text; + int hMax; + bool has_TextElement; + size_t firstElementLeft; + size_t firstElementRight; + size_t prevElementLeft; + size_t prevElementRight; + std::vector v_element_data; + bool isCalculated; + + void clearElements(); + void initVarItemBox(); + void calSizeOfElements(); + void calPositionOfElements(); + void paintItemBox(bool do_save_bg = CC_SAVE_SCREEN_YES); + void calculateElements(); + bool addElement(int align, int type, const std::string& element="", size_t *index=NULL); + void paintImage(size_t index, bool newElement); + void paintText(size_t index, bool newElement); + + public: + CComponentsItemBox(); + virtual ~CComponentsItemBox(); + + inline virtual void setTextFont(Font* font){font_text = font;}; + inline virtual void setTextColor(fb_pixel_t color_text){ it_col_text = color_text;}; + + virtual void refreshElement(size_t index, const std::string& element); + virtual void paintElement(size_t index, bool newElement= false); + virtual bool addLogoOrText(int align, const std::string& logo, const std::string& text, size_t *index=NULL); + virtual void clearTitlebar(); + virtual void addText(const std::string& s_text, const int align=CC_ALIGN_LEFT, size_t *index=NULL); + virtual void addText(neutrino_locale_t locale_text, const int align=CC_ALIGN_LEFT, size_t *index=NULL); + virtual void addIcon(const std::string& s_icon_name, const int align=CC_ALIGN_LEFT, size_t *index=NULL); + virtual void addPicture(const std::string& s_picture_path, const int align=CC_ALIGN_LEFT, size_t *index=NULL); + virtual void addClock(const int align=CC_ALIGN_RIGHT, size_t *index=NULL); + virtual int getHeight(); +}; + +class CComponentsTitleBar : public CComponentsItemBox +{ + private: + const char* tb_c_text; + std::string tb_s_text, tb_icon_name; + neutrino_locale_t tb_locale_text; + int tb_text_align, tb_icon_align; + + void initText(); + void initIcon(); + void initElements(); + void initVarTitleBar(); + + public: + CComponentsTitleBar(); + CComponentsTitleBar( const int x_pos, const int y_pos, const int w, const int h, const char* c_text = NULL, const std::string& s_icon ="", + fb_pixel_t color_text = COL_MENUHEAD, fb_pixel_t color_body = COL_MENUHEAD_PLUS_0); + CComponentsTitleBar( const int x_pos, const int y_pos, const int w, const int h, const std::string& s_text ="", const std::string& s_icon ="", + fb_pixel_t color_text = COL_MENUHEAD, fb_pixel_t color_body = COL_MENUHEAD_PLUS_0); + CComponentsTitleBar( const int x_pos, const int y_pos, const int w, const int h, neutrino_locale_t locale_text = NONEXISTANT_LOCALE, const std::string& s_icon ="", + fb_pixel_t color_text = COL_MENUHEAD, fb_pixel_t color_body = COL_MENUHEAD_PLUS_0); + + void paint(bool do_save_bg = CC_SAVE_SCREEN_YES); + +}; + +#endif /*__CC_MISC__*/ diff --git a/src/gui/components/cc_types.h b/src/gui/components/cc_types.h index 3ba4d1c14..c416e36b0 100644 --- a/src/gui/components/cc_types.h +++ b/src/gui/components/cc_types.h @@ -15,7 +15,7 @@ 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 - Library General Public License for more details. + 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 @@ -45,6 +45,11 @@ typedef enum CC_ITEMTYPE_FRM_WINDOW, CC_ITEMTYPE_LABEL, CC_ITEMTYPE_PROGRESSBAR, + CC_ITEMTYPE_BUTTON, + CC_ITEMTYPE_BUTTON_RED, + CC_ITEMTYPE_BUTTON_GREEN, + CC_ITEMTYPE_BUTTON_YELLOW, + CC_ITEMTYPE_BUTTON_BLUE, CC_ITEMTYPES }CC_ITEMTYPES_T; @@ -68,7 +73,6 @@ typedef struct comp_fbdata_t typedef enum { CC_FBDATA_TYPE_BGSCREEN, - CC_FBDATA_TYPE_SHADOW, CC_FBDATA_TYPE_BOX, CC_FBDATA_TYPE_FRAME, CC_FBDATA_TYPE_LINE, diff --git a/src/gui/epgview.cpp b/src/gui/epgview.cpp index d3c1a4f53..43770ef2a 100644 --- a/src/gui/epgview.cpp +++ b/src/gui/epgview.cpp @@ -126,6 +126,7 @@ void CEpgData::start() buttonheight = g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->getHeight() + 6; if (buttonheight < 30) buttonheight = 30; // the buttons and icons need space + oy-=buttonheight/2; /* this is the text box height - and the height of the scroll bar */ sb = oy - topboxheight - botboxheight - buttonheight; /* button box is handled separately (why?) */ @@ -135,7 +136,7 @@ void CEpgData::start() toph = topboxheight; sx = getScreenStartX(ox); - sy = getScreenStartY(oy + buttonheight/2); /* button box is handled separately (why?) */ + sy = getScreenStartY(oy + buttonheight); /* button box is handled separately (why?) */ } void CEpgData::addTextToArray(const std::string & text, int screening) // UTF-8 @@ -1130,13 +1131,12 @@ void CEpgData::showTimerEventBar (bool pshow) frameBuffer->getIconSize(NEUTRINO_ICON_BUTTON_RED, &icol_w, &icol_h); h = std::max(fh, icol_h+4); - frameBuffer->paintBackgroundBoxRel(sx,y,ox,h); // hide only? if (! pshow) { + frameBuffer->paintBackgroundBoxRel(sx,y,ox,h); frameBuffer->blit(); return; } - frameBuffer->paintBoxRel(sx,y,ox,h, COL_INFOBAR_SHADOW_PLUS_1, RADIUS_LARGE, CORNER_BOTTOM);//round /* 2 * ICON_LARGE_WIDTH for potential 16:9 and DD icons */ diff --git a/src/gui/eventlist.cpp b/src/gui/eventlist.cpp index 9b1baaebe..dfff70eb4 100644 --- a/src/gui/eventlist.cpp +++ b/src/gui/eventlist.cpp @@ -97,15 +97,14 @@ CNeutrinoEventList::CNeutrinoEventList() m_search_channel_id = 1; m_search_bouquet_id= 1; - full_width = width = fw = 0; - height = fh = 0; + full_width = width = 0; + height = 0; x = y = 0; cc_infozone = NULL; infozone_text = ""; item_event_ID = 0; - FunctionBarHeight = 0; oldIndex = -1; oldEventID = -1; bgRightBoxPaint = false; @@ -240,11 +239,6 @@ int CNeutrinoEventList::exec(const t_channel_id channel_id, const std::string& c neutrino_msg_data_t data; bool in_search = false; showfollow = false; - // Calculate iheight - struct button_label tmp_button[1] = { { NEUTRINO_ICON_BUTTON_RED, NONEXISTANT_LOCALE } }; - - fw = g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->getWidth(); //font width - fh = g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->getHeight(); //font height full_width = frameBuffer->getScreenWidthRel(); x = getScreenStartX(full_width); @@ -255,17 +249,14 @@ int CNeutrinoEventList::exec(const t_channel_id channel_id, const std::string& c width = full_width; height = frameBuffer->getScreenHeightRel(); + // Calculate iheight (we assume the red button is the largest one?) + struct button_label tmp_button[1] = { { NEUTRINO_ICON_BUTTON_RED, LOCALE_EVENTLISTBAR_RECORDEVENT } }; iheight = ::paintButtons(0, 0, 0, 1, tmp_button, 0, 0, "", false, COL_INFOBAR_SHADOW, NULL, 0, false); - if(iheight < fh) - iheight = fh; // Calculate theight - theight = g_Font[SNeutrinoSettings::FONT_TYPE_EVENTLIST_TITLE]->getHeight(); + theight = g_Font[SNeutrinoSettings::FONT_TYPE_EVENTLIST_TITLE]->getHeight(); const int pic_h = 39; theight = std::max(theight, pic_h); - int icol_w = 0, icol_h = 0; - frameBuffer->getIconSize(NEUTRINO_ICON_BUTTON_HELP, &icol_w, &icol_h); - theight = std::max(theight, icol_h); fheight1 = g_Font[SNeutrinoSettings::FONT_TYPE_EVENTLIST_ITEMLARGE]->getHeight(); { @@ -430,11 +421,7 @@ int CNeutrinoEventList::exec(const t_channel_id channel_id, const std::string& c liststart=0; else liststart=(selected/listmaxshow)*listmaxshow; - hide(); - paintHead(channel_id, channelname); paint(channel_id); - showFunctionBar(true, channel_id); - } // -- I commented out the following part (code is working) @@ -694,9 +681,7 @@ int CNeutrinoEventList::exec(const t_channel_id channel_id, const std::string& c void CNeutrinoEventList::hide() { frameBuffer->paintBackgroundBoxRel(x,y, full_width,height); - showFunctionBar (false, 0); frameBuffer->blit(); - } CTimerd::CTimerEventTypes CNeutrinoEventList::isScheduled(t_channel_id channel_id, CChannelEvent * event, int * tID) @@ -721,9 +706,7 @@ void CNeutrinoEventList::paintItem(unsigned int pos, t_channel_id channel_idI) uint8_t color; fb_pixel_t bgcolor; int ypos = y+ theight+0 + pos*fheight; - std::string datetime1_str, datetime2_str, duration_str; unsigned int curpos = liststart + pos; - const char * icontype = 0; if(RADIUS_LARGE) frameBuffer->paintBoxRel(x, ypos, width- 15, fheight, COL_MENUCONTENT_PLUS_0, 0); @@ -744,10 +727,12 @@ void CNeutrinoEventList::paintItem(unsigned int pos, t_channel_id channel_idI) bgcolor = COL_MENUCONTENT_PLUS_0; } - frameBuffer->paintBoxRel(x, ypos, width- 15, fheight, bgcolor, RADIUS_LARGE); + if (!RADIUS_LARGE || (curpos==selected && RADIUS_LARGE) || (curpos==current_event && RADIUS_LARGE)) + frameBuffer->paintBoxRel(x, ypos, width- 15, fheight, bgcolor, RADIUS_LARGE); if(curposgetActualEPGServiceKey(evtlist[index].channelID, &epgData ); if(!epgData.info2.empty()) - infozone_text = epgData.info2.c_str(); + infozone_text = epgData.info2; else infozone_text = g_Locale->getText(LOCALE_EPGLIST_NOEVENTS); cc_infozone->setText(infozone_text, CTextBox::TOP, g_Font[SNeutrinoSettings::FONT_TYPE_EVENTLIST_EVENT]); + cc_infozone->doPaintTextBoxBg(true); cc_infozone->doPaintBg(false); + cc_infozone->forceTextPaint(); cc_infozone->paint(CC_SAVE_SCREEN_NO); } void CNeutrinoEventList::paintHead(std::string _channelname, std::string _channelname_prev, std::string _channelname_next) { - const short font_h = 8; - int iw = 0, ih = 0; - frameBuffer->getIconSize(NEUTRINO_ICON_BUTTON_INFO, &iw, &ih); frameBuffer->paintBoxRel(x,y, full_width,theight+0, COL_MENUHEAD_PLUS_0, RADIUS_LARGE, CORNER_TOP); - int name_width =((full_width-8-iw)/3); + const short font_h = 8 /* FONT_TYPE_EVENTLIST_ITEMLARGE */; + short pn_y_off = std::max((theight - g_Font[font_h]->getHeight()) / 2, 0); short prev_len = g_Font[font_h]->getRenderWidth(_channelname_prev.c_str(),true); short next_len = g_Font[font_h]->getRenderWidth(_channelname_next.c_str(),true); short middle_len = g_Font[SNeutrinoSettings::FONT_TYPE_EVENTLIST_TITLE]->getRenderWidth(_channelname.c_str(),true); - short middle_offset = (full_width- next_len- prev_len- middle_len-iw-8)/2; + short middle_offset = (full_width- next_len- prev_len- middle_len)/2; if(middle_offset < 0){ int fw_h = g_Font[font_h]->getWidth(); int newsize = abs(middle_offset / fw_h) + 1; @@ -878,9 +863,9 @@ void CNeutrinoEventList::paintHead(std::string _channelname, std::string _channe middle_offset = 0; } - g_Font[font_h]->RenderString(x+4,y+theight+1, full_width, _channelname_prev.c_str(), COL_INFOBAR, 0, true); // UTF-8 - g_Font[SNeutrinoSettings::FONT_TYPE_EVENTLIST_TITLE]->RenderString(x+prev_len+middle_offset,y+theight+1, full_width, _channelname.c_str(), COL_MENUHEAD, 0, true); // UTF-8 - g_Font[font_h]->RenderString(x+(name_width*3)- next_len,y+theight+1, full_width, _channelname_next.c_str(), COL_INFOBAR, 0, true); // UTF-8 + g_Font[font_h]->RenderString(x+10,y+theight-pn_y_off+1, prev_len, _channelname_prev.c_str(), COL_INFOBAR, 0, true); // UTF-8 + g_Font[SNeutrinoSettings::FONT_TYPE_EVENTLIST_TITLE]->RenderString(x+prev_len+middle_offset,y+theight+1, middle_len, _channelname.c_str(), COL_MENUHEAD, 0, true); // UTF-8 + g_Font[font_h]->RenderString(x+full_width-next_len-10,y+theight-pn_y_off+1, next_len, _channelname_next.c_str(), COL_INFOBAR, 0, true); // UTF-8 } @@ -906,12 +891,6 @@ void CNeutrinoEventList::paint(t_channel_id channel_id) { liststart = (selected/listmaxshow)*listmaxshow; - int iw = 0, ih = 0; - if (evtlist[0].eventID != 0) { - frameBuffer->getIconSize(NEUTRINO_ICON_BUTTON_INFO, &iw, &ih); - frameBuffer->paintIcon(NEUTRINO_ICON_BUTTON_INFO, x+ full_width - 4 - iw, y, theight); - } - // paint background for right box if (g_settings.eventlist_additional && !bgRightBoxPaint) { frameBuffer->paintBoxRel(x+width,y+theight,infozone_width,listmaxshow*fheight,COL_MENUCONTENT_PLUS_0); @@ -937,56 +916,25 @@ void CNeutrinoEventList::paint(t_channel_id channel_id) } - -#define NUM_EVENTLIST_FIRST_BUTTON 1 -struct button_label EventListFirstButton[NUM_EVENTLIST_FIRST_BUTTON] = -{ - { "", LOCALE_EVENTLISTBAR_RECORDEVENT } // record button -}; - -#define NUM_EVENTLIST_SECOND_BUTTON 1 -struct button_label EventListSecondButton[NUM_EVENTLIST_SECOND_BUTTON] = -{ - { NEUTRINO_ICON_BUTTON_GREEN, LOCALE_EVENTFINDER_SEARCH } // search button -}; - -#define NUM_EVENTLIST_THIRD_BUTTON 1 -struct button_label EventListThirdButton[NUM_EVENTLIST_THIRD_BUTTON] = -{ - { "", LOCALE_EVENTLISTBAR_CHANNELSWITCH } // timer event channel switch button -}; - -#define NUM_EVENTLIST_FOURTH_BUTTON 1 -struct button_label EventListFourthButton[NUM_EVENTLIST_FOURTH_BUTTON] = -{ - { "", LOCALE_EVENTLISTBAR_EVENTSORT } // sort event button -}; - void CNeutrinoEventList::showFunctionBar (bool show, t_channel_id channel_id) { - int border_space = 4; - int bx = x + 2*border_space; - int bw = full_width - 16; + int bx = x; + int bw = full_width; int bh = iheight; - int by = y + height-iheight; + int by = y + height - bh; + + if (! show) { + // -- hide only? + frameBuffer->paintBackgroundBoxRel(bx,by,bw,bh); + return; + } CColorKeyHelper keyhelper; //user_menue.h neutrino_msg_t dummy = CRCInput::RC_nokey; const char * icon = NULL; - struct button_label buttons[4]; + struct button_label buttons[5]; int btn_cnt = 0; - bh = std::max(FunctionBarHeight, bh); - frameBuffer->paintBackgroundBoxRel(x,by,full_width,bh); - // -- hide only? - if (! show) return; - - int icol_w, icol_h; - frameBuffer->getIconSize(NEUTRINO_ICON_BUTTON_RED, &icol_w, &icol_h); -// int fh = g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->getHeight(); - - frameBuffer->paintBoxRel(x, by, full_width, iheight, COL_INFOBAR_SHADOW_PLUS_1, RADIUS_MID, CORNER_BOTTOM); - int tID = -1; //any value, not NULL CTimerd::CTimerEventTypes is_timer = isScheduled(channel_id, &evtlist[selected], &tID); @@ -1034,7 +982,15 @@ void CNeutrinoEventList::showFunctionBar (bool show, t_channel_id channel_id) btn_cnt++; } } - FunctionBarHeight = std::max(::paintButtons(bx, by, bw, btn_cnt, buttons, bw), FunctionBarHeight); + + // info button + if (evtlist[0].eventID != 0) { + buttons[btn_cnt].button = NEUTRINO_ICON_BUTTON_INFO_SMALL; + buttons[btn_cnt].locale = LOCALE_EPGMENU_EVENTINFO; + btn_cnt++; + } + + ::paintButtons(bx, by, bw, btn_cnt, buttons, bw, bh); } int CEventListHandler::exec(CMenuTarget* parent, const std::string &/*actionkey*/) diff --git a/src/gui/imageinfo.cpp b/src/gui/imageinfo.cpp index b1cf1f160..ad33f0d8e 100644 --- a/src/gui/imageinfo.cpp +++ b/src/gui/imageinfo.cpp @@ -36,8 +36,6 @@ #include #include -#include -#include #include #include @@ -255,28 +253,14 @@ void CImageInfo::InitInfos() //prepare license infos void CImageInfo::InitLicenseText() { - license_txt = ""; - char line[1024]; string file = LICENSEDIR; file += g_settings.language; file += ".license"; - ifstream in (file.c_str(), ios::in); - - if (!in){ - printf("[CImageInfo] [%s - %d] error while open %s -> %s\n", __FUNCTION__, __LINE__, file.c_str(), strerror(errno)); - return; - } - - while (in.getline (line, sizeof(line)-1)){ - string lline = (string)line; - license_txt += lline + '\n'; - } - in.close(); //calc y pos of license box to avoid an overlap with pip int y_lic = std::max(item_top, cc_tv->getHeight() + 2*item_offset); cc_lic = new CComponentsInfoBox(item_offset, y_lic, cc_win->getWidth()-2*item_offset, cc_win->getHeight()-item_top-item_offset); - cc_lic->setText(license_txt, CTextBox::AUTO_WIDTH | CTextBox::SCROLL, g_Font[SNeutrinoSettings::FONT_TYPE_MENU_HINT]); + cc_lic->setTextFromFile(file, CTextBox::AUTO_WIDTH | CTextBox::SCROLL, g_Font[SNeutrinoSettings::FONT_TYPE_MENU_HINT]); //add text to container cc_win->addCCItem(cc_lic); diff --git a/src/gui/imageinfo.h b/src/gui/imageinfo.h index 7e1151240..a26399fbf 100644 --- a/src/gui/imageinfo.h +++ b/src/gui/imageinfo.h @@ -28,7 +28,7 @@ #define __imageinfo__ #include -#include +#include #include typedef struct image_info_t diff --git a/src/gui/infoclock.cpp b/src/gui/infoclock.cpp index b1ccf9869..f553ea04f 100644 --- a/src/gui/infoclock.cpp +++ b/src/gui/infoclock.cpp @@ -12,6 +12,7 @@ #include #include #include +#include #include #define YOFF 0 @@ -33,14 +34,18 @@ CInfoClock::~CInfoClock() void CInfoClock::Init(bool noVolume) { - static int mute_dx = 0; - static int spacer = 0; + static int mute_dx = 0, mute_dy = 0, y_org = 0, spacer = 0; + int mute_corrY = 0; if (!noVolume) { - x = CVolume::getInstance()->getEndPosRight(); - y = CVolume::getInstance()->getStartPosTop(); - mute_dx = CVolume::getInstance()->mute_dx; - spacer = CVolume::getInstance()->spacer; + CVolumeHelper *vh = CVolumeHelper::getInstance(); + int dummy; + vh->getDimensions(&dummy, &y, &x, &dummy); + vh->getMuteIconDimensions(&dummy, &dummy, &mute_dx, &mute_dy); + vh->getSpacer(&spacer, &dummy); + y_org = y; } + else + y = y_org; digit_offset = g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_CHANNAME]->getDigitOffset(); digit_h = g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_CHANNAME]->getDigitHeight(); @@ -49,8 +54,14 @@ void CInfoClock::Init(bool noVolume) time_height = digit_h + (int)((float)digit_offset * 1.5); time_width = t1*6 + t2*2; clock_x = x - time_width; - if (CNeutrinoApp::getInstance()->isMuted()) + if (CNeutrinoApp::getInstance()->isMuted()) { clock_x -= (mute_dx + spacer); + if (mute_dy > time_height) + y += (mute_dy - time_height) / 2; + else + mute_corrY = (time_height - mute_dy) / 2; + CVolumeHelper::getInstance()->setMuteIconCorrY(mute_corrY); + } } CInfoClock* CInfoClock::getInstance(bool noVolume) @@ -99,7 +110,6 @@ void CInfoClock::ClearDisplay() void CInfoClock::StartClock() { Init(); - CVolume::getInstance()->Init(); if(!thrTimer) { pthread_create (&thrTimer, NULL, TimerProc, (void*) this) ; @@ -109,7 +119,6 @@ void CInfoClock::StartClock() void CInfoClock::StopClock() { - CVolume::getInstance()->Init(); if(thrTimer) { pthread_cancel(thrTimer); thrTimer = 0; diff --git a/src/gui/infoviewer.cpp b/src/gui/infoviewer.cpp index 3cae3f967..ccdb7da34 100644 --- a/src/gui/infoviewer.cpp +++ b/src/gui/infoviewer.cpp @@ -58,6 +58,9 @@ #include #include #include +#include + +#include #include #include @@ -127,6 +130,7 @@ CInfoViewer::~CInfoViewer() delete snrscale; delete timescale; delete infoViewerBB; + delete infobar_txt; } void CInfoViewer::Init() @@ -157,6 +161,8 @@ void CInfoViewer::Init() channel_id = CZapit::getInstance()->GetCurrentChannelID();; lcdUpdateTimer = 0; rt_x = rt_y = rt_h = rt_w = 0; + + infobar_txt = NULL; } /* @@ -541,29 +547,48 @@ void CInfoViewer::showMovieTitle(const int playState, const std::string &Channel sprintf(runningRest, "%d / %d min", (curr_pos + 30000) / 60000, (duration + 30000) / 60000); display_Info(g_file_epg.c_str(), g_file_epg1.c_str(), true, false, CMoviePlayerGui::getInstance().file_prozent, NULL, runningRest); + int speed = CMoviePlayerGui::getInstance().GetSpeed(); const char *playicon = NULL; switch (playState) { case CMoviePlayerGui::PLAY: playicon = NEUTRINO_ICON_PLAY; + speed = 0; break; case CMoviePlayerGui::PAUSE: playicon = NEUTRINO_ICON_PAUSE; break; case CMoviePlayerGui::REW: playicon = NEUTRINO_ICON_REW; + speed = abs(speed); break; case CMoviePlayerGui::FF: playicon = NEUTRINO_ICON_FF; + speed = abs(speed); break; default: /* NULL crashes in getIconSize, just use something */ playicon = NEUTRINO_ICON_BUTTON_HELP; break; } + int icon_w = 0,icon_h = 0; frameBuffer->getIconSize(playicon, &icon_w, &icon_h); + + int speedw = 0; + if (speed) { + sprintf(runningRest, "%dx", speed); + speedw = 5 + g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]->getRenderWidth(runningRest); + icon_w += speedw; + } + int icon_x = BoxStartX + ChanWidth / 2 - icon_w / 2; int icon_y = BoxStartY + ChanHeight / 2 - icon_h / 2; + if (speed) { + int sh = g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]->getHeight(); + int sy = BoxStartY + ChanHeight/2 - sh/2 + sh; + g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]->RenderString(icon_x, sy, ChanHeight, runningRest, COL_INFOBAR, 0, true); + icon_x += speedw; + } frameBuffer->paintIcon(playicon, icon_x, icon_y); showLcdPercentOver (); @@ -827,6 +852,14 @@ void CInfoViewer::loop(bool show_dot) frameBuffer->blit(); g_RCInput->getMsgAbsoluteTimeout (&msg, &data, &timeoutEnd); +#ifdef ENABLE_PIP + if ((msg == (neutrino_msg_t) g_settings.key_pip_close) || + (msg == (neutrino_msg_t) g_settings.key_pip_setup) || + (msg == (neutrino_msg_t) g_settings.key_pip_swap)) { + g_RCInput->postMsg(msg, data); + res = messages_return::cancel_info; + } else +#endif if (msg == (neutrino_msg_t) g_settings.key_screenshot) { res = CNeutrinoApp::getInstance()->handleMsg(msg, data); @@ -850,6 +883,7 @@ void CInfoViewer::loop(bool show_dot) paintTime (show_dot, false); showRecordIcon (show_dot); show_dot = !show_dot; + showInfoFile(); if ((g_settings.radiotext_enable) && (CNeutrinoApp::getInstance()->getMode() == NeutrinoMessages::mode_radio)) showRadiotext(); @@ -1222,8 +1256,7 @@ int CInfoViewer::handleMsg (const neutrino_msg_t msg, neutrino_msg_data_t data) infoViewerBB->showIcon_SubT(); //infoViewerBB->showIcon_CA_Status(0); infoViewerBB->showIcon_Resolution(); - if (CFEManager::getInstance()->getMode() != CFEManager::FE_MODE_SINGLE) - infoViewerBB->showIcon_Tuner(); + infoViewerBB->showIcon_Tuner(); } } return messages_return::handled; @@ -1245,8 +1278,18 @@ int CInfoViewer::handleMsg (const neutrino_msg_t msg, neutrino_msg_data_t data) return messages_return::handled; } else if (data == lcdUpdateTimer) { //printf("CInfoViewer::handleMsg: lcdUpdateTimer\n"); - if ( is_visible ) - show_Data( true ); + if (is_visible) { + if (fileplay) { + CMoviePlayerGui::getInstance().UpdatePosition(); + char runningRest[32]; // %d can be 10 digits max... + int curr_pos = CMoviePlayerGui::getInstance().GetPosition(); + int duration = CMoviePlayerGui::getInstance().GetDuration(); + sprintf(runningRest, "%d / %d min", (curr_pos + 30000) / 60000, (duration + 30000) / 60000); + display_Info(NULL, NULL, true, false, CMoviePlayerGui::getInstance().file_prozent, NULL, runningRest); + } else { + show_Data( true ); + } + } showLcdPercentOver (); return messages_return::handled; } else if (data == sec_timer_id) { @@ -1388,7 +1431,8 @@ void CInfoViewer::showSNR () newfreq = false; std::string polarisation = ""; - if (g_info.delivery_system == DVB_S) + + if (CFEManager::getInstance()->getLiveFE()->getType() == FE_QPSK) polarisation = transponder::pol(CFEManager::getInstance()->getLiveFE()->getPolarization()); int frequency = CFEManager::getInstance()->getLiveFE()->getFrequency(); @@ -1792,46 +1836,59 @@ void CInfoViewer::show_Data (bool calledFromEvent) #endif } +void CInfoViewer::killInfobarText() +{ + if (infobar_txt){ + if (infobar_txt->isPainted()) + infobar_txt->hide(); + delete infobar_txt; + } + infobar_txt = NULL; +} + + void CInfoViewer::showInfoFile() { - /*if (recordModeActive) - return;*/ - char infotext[80]; - int fd, xStart, yStart, width, height, iOffset, oOffset, tWidth, tIndent, pb_w; - ssize_t cnt; + //read textcontent from this file + std::string infobar_file = "/tmp/infobar.txt"; - fd = open("/tmp/infobar.txt", O_RDONLY); //read textcontent from this file - - if (fd < 0) - return; - - cnt = read(fd, infotext, 79); - close(fd); - if (cnt < 1) { //EOF == 0 - fprintf(stderr, "CInfoViewer::showInfoFile: could not read from infobar.txt: %m"); + //exit if file not found, don't create an info object, delete old instance if required + if (!file_size(infobar_file.c_str())) { + killInfobarText(); return; } - infotext[cnt-1] = '\0'; - iOffset = RADIUS_SMALL; // inner left/right offset - oOffset = 140; // outer left/right offset - pb_w = 112; // same value as int pb_w in display_Info() - xStart = BoxStartX + ChanWidth + oOffset; - yStart = BoxStartY; - width = BoxEndX - xStart - (g_settings.infobar_progressbar ? oOffset : oOffset + pb_w); - height = g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]->getHeight() + 2; - tWidth = g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]->getRenderWidth(infotext); - if (tWidth < (width - (iOffset * 2)) ) - tIndent = (width - (iOffset * 2) - tWidth) / 2; - else - tIndent = 0; - //shadow - frameBuffer->paintBoxRel(xStart + SHADOW_OFFSET, yStart + SHADOW_OFFSET, width, height, COL_INFOBAR_SHADOW_PLUS_0, RADIUS_SMALL, CORNER_ALL); - //background - frameBuffer->paintBoxRel(xStart, yStart, width, height, COL_INFOBAR_PLUS_0, RADIUS_SMALL, CORNER_ALL); - //content - g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]->RenderString( - xStart + iOffset + tIndent, yStart + height, width - iOffset, (std::string)infotext, COL_INFOBAR, height, false); + //set position of info area + const int oOffset = 140; // outer left/right offset + const int pb_w = 112; // same value as int pb_w in display_Info() + const int xStart = BoxStartX + ChanWidth + oOffset; + const int yStart = BoxStartY; + const int width = BoxEndX - xStart - (g_settings.infobar_progressbar ? oOffset : oOffset + pb_w); + const int height = g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO]->getHeight() + 2; + + //create info object + if (infobar_txt == NULL) + infobar_txt = new CComponentsInfoBox(); + + //get text from file and set it to info object, exit and delete object if failed + if (!infobar_txt->setTextFromFile(infobar_file, CTextBox::CENTER, g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO])){ + killInfobarText(); + return; + } + + //set some properties for info object + infobar_txt->setDimensionsAll(xStart, yStart, width, height); + infobar_txt->setCornerRadius(RADIUS_SMALL); + infobar_txt->setShadowOnOff(true); + infobar_txt->setTextColor(COL_INFOBAR); + infobar_txt->setColorBody(COL_INFOBAR_PLUS_0); + infobar_txt->doPaintTextBoxBg(false); + + //paint info, don't save background, if already painted, global hide is also done by killTitle() + bool save_bg = !infobar_txt->isPainted(); + if (infobar_txt->textChanged()) + infobar_txt->paint(save_bg); + } void CInfoViewer::killTitle() @@ -1849,6 +1906,8 @@ void CInfoViewer::killTitle() g_Radiotext->S_RtOsd = g_Radiotext->haveRadiotext() ? 1 : 0; killRadiotext(); } + + killInfobarText(); frameBuffer->blit(); } showButtonBar = false; diff --git a/src/gui/infoviewer.h b/src/gui/infoviewer.h index 3437f2db2..f92123980 100644 --- a/src/gui/infoviewer.h +++ b/src/gui/infoviewer.h @@ -127,7 +127,13 @@ class CInfoViewer int showChannelLogo(const t_channel_id logo_channel_id, const int channel_number_width); void showRadiotext(); void killRadiotext(); + + //small infobox, shows a small textbox with a short message text, + //text must be located in a file named /tmp/infobar.txt + CComponentsInfoBox *infobar_txt; void showInfoFile(); + void killInfobarText(); + //void loop(int fadeValue, bool show_dot ,bool fadeIn); void loop(bool show_dot); std::string eventname; diff --git a/src/gui/infoviewer_bb.cpp b/src/gui/infoviewer_bb.cpp index b435f8966..9e8454954 100644 --- a/src/gui/infoviewer_bb.cpp +++ b/src/gui/infoviewer_bb.cpp @@ -200,11 +200,8 @@ void CInfoViewerBB::getBBIconInfo() iconView = checkBBIcon(NEUTRINO_ICON_SCRAMBLED2, &w, &h); break; case CInfoViewerBB::ICON_TUNER: - if (CFEManager::getInstance()->getMode() != CFEManager::FE_MODE_SINGLE) { - if (g_settings.infobar_show_tuner == 1) { - iconView = checkBBIcon(NEUTRINO_ICON_TUNER_1, &w, &h); - } - } + if (CFEManager::getInstance()->getEnabledCount() > 1 && g_settings.infobar_show_tuner == 1) + iconView = checkBBIcon(NEUTRINO_ICON_TUNER_1, &w, &h); break; default: break; @@ -604,11 +601,20 @@ void CInfoViewerBB::showOne_CAIcon() void CInfoViewerBB::showIcon_Tuner() { + if (CFEManager::getInstance()->getEnabledCount() <= 1 || !g_settings.infobar_show_tuner) + return; + std::string icon_name; switch (CFEManager::getInstance()->getLiveFE()->getNumber()) { case 1: icon_name = NEUTRINO_ICON_TUNER_2; break; + case 2: + icon_name = NEUTRINO_ICON_TUNER_3; + break; + case 3: + icon_name = NEUTRINO_ICON_TUNER_4; + break; case 0: default: icon_name = NEUTRINO_ICON_TUNER_1; diff --git a/src/gui/keybind_setup.cpp b/src/gui/keybind_setup.cpp index 5dd5727fb..bc0dad1b4 100644 --- a/src/gui/keybind_setup.cpp +++ b/src/gui/keybind_setup.cpp @@ -35,20 +35,6 @@ #include -#ifdef HAVE_COOLSTREAM_NEVIS_IR_H -/* define constants instead of #ifdef'ing the corresponding code. - * the compiler will optimize it away anyway, but the syntax is - * still checked */ -#define RC_HW_SELECT true -#else -#define RC_HW_SELECT false -#ifdef HAVE_COOL_HARDWARE -#warning header coolstream/nevis_ir.h not found -#warning you probably have an old driver installation -#warning you´ll be missing the remotecontrol selection feature! -#endif -#endif - #include "keybind_setup.h" #include @@ -67,6 +53,19 @@ #include +#ifdef IOC_IR_SET_PRI_PROTOCOL +/* define constants instead of #ifdef'ing the corresponding code. + * the compiler will optimize it away anyway, but the syntax is + * still checked */ +#define RC_HW_SELECT true +#else +#define RC_HW_SELECT false +#ifdef HAVE_COOL_HARDWARE +#warning header coolstream/cs_ir_generic.h not found +#warning you probably have an old driver installation +#warning you´ll be missing the remotecontrol selection feature! +#endif +#endif CKeybindSetup::CKeybindSetup() { @@ -187,7 +186,10 @@ const key_settings_struct_t key_settings[CKeybindSetup::KEYBINDS_COUNT] = {LOCALE_MPKEY_PLUGIN, &g_settings.mpkey_plugin, LOCALE_MENU_HINT_KEY_MPPLUGIN }, /*{LOCALE_EXTRA_KEY_PLUGIN, &g_settings.key_plugin, },*/ {LOCALE_EXTRA_KEY_UNLOCK, &g_settings.key_unlock, LOCALE_MENU_HINT_KEY_UNLOCK}, - {LOCALE_EXTRA_KEY_SCREENSHOT, &g_settings.key_screenshot, LOCALE_MENU_HINT_KEY_SCREENSHOT } + {LOCALE_EXTRA_KEY_SCREENSHOT, &g_settings.key_screenshot, LOCALE_MENU_HINT_KEY_SCREENSHOT }, + {LOCALE_EXTRA_KEY_PIP_CLOSE, &g_settings.key_pip_close, LOCALE_MENU_HINT_KEY_PIP_CLOSE }, + {LOCALE_EXTRA_KEY_PIP_SETUP, &g_settings.key_pip_setup, LOCALE_MENU_HINT_KEY_PIP_SETUP }, + {LOCALE_EXTRA_KEY_PIP_SWAP, &g_settings.key_pip_swap, LOCALE_MENU_HINT_KEY_PIP_CLOSE } }; @@ -316,6 +318,18 @@ void CKeybindSetup::showKeyBindSetup(CMenuWidget *bindSettings) mf->setHint("", key_settings[KEY_SCREENSHOT].hint); bindSettings->addItem(mf); #endif +#ifdef ENABLE_PIP + // pip + mf = new CMenuDForwarder(key_settings[KEY_PIP_CLOSE].keydescription, true, keychooser[KEY_PIP_CLOSE]->getKeyName(), keychooser[KEY_PIP_CLOSE]); + mf->setHint("", key_settings[KEY_PIP_CLOSE].hint); + bindSettings->addItem(mf); + mf = new CMenuDForwarder(key_settings[KEY_PIP_SETUP].keydescription, true, keychooser[KEY_PIP_SETUP]->getKeyName(), keychooser[KEY_PIP_SETUP]); + mf->setHint("", key_settings[KEY_PIP_SETUP].hint); + bindSettings->addItem(mf); + mf = new CMenuDForwarder(key_settings[KEY_PIP_SWAP].keydescription, true, keychooser[KEY_PIP_SWAP]->getKeyName(), keychooser[KEY_PIP_SWAP]); + mf->setHint("", key_settings[KEY_PIP_SWAP].hint); + bindSettings->addItem(mf); +#endif //bindSettings->addItem(new CMenuOptionChooser(LOCALE_EXTRA_ZAP_CYCLE, &g_settings.zap_cycle, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true)); // left-exit, FIXME is this option really change anything ?? diff --git a/src/gui/keybind_setup.h b/src/gui/keybind_setup.h index e936219cf..2a4c15ae1 100644 --- a/src/gui/keybind_setup.h +++ b/src/gui/keybind_setup.h @@ -76,6 +76,9 @@ class CKeybindSetup : public CMenuTarget, public CChangeObserver /*KEY_PLUGIN,*/ KEY_UNLOCK, KEY_SCREENSHOT, + KEY_PIP_CLOSE, + KEY_PIP_SETUP, + KEY_PIP_SWAP, KEYBINDS_COUNT }; diff --git a/src/gui/mediaplayer.cpp b/src/gui/mediaplayer.cpp index 738926d1a..b7998ca51 100644 --- a/src/gui/mediaplayer.cpp +++ b/src/gui/mediaplayer.cpp @@ -166,10 +166,12 @@ int CMediaPlayerMenu::initMenuMedia(CMenuWidget *m, CPersonalizeGui *p) if (usage_mode == MODE_DEFAULT) { //movieplayer - moviePlayer = new CMenuWidget(LOCALE_MAINMENU_MOVIEPLAYER, NEUTRINO_ICON_MULTIMEDIA, width, MN_WIDGET_ID_MEDIA_MOVIEPLAYER); - personalize->addWidget(moviePlayer); - fw_mp = new CMenuForwarder(LOCALE_MAINMENU_MOVIEPLAYER, true, NULL, moviePlayer, NULL, CRCInput::RC_yellow, NEUTRINO_ICON_BUTTON_YELLOW); - fw_mp->setHint(NEUTRINO_ICON_HINT_MOVIE, LOCALE_MENU_HINT_MOVIE); + if (g_settings.recording_type != CNeutrinoApp::RECORDING_OFF) { + moviePlayer = new CMenuWidget(LOCALE_MAINMENU_MOVIEPLAYER, NEUTRINO_ICON_MULTIMEDIA, width, MN_WIDGET_ID_MEDIA_MOVIEPLAYER); + personalize->addWidget(moviePlayer); + fw_mp = new CMenuForwarder(LOCALE_MAINMENU_MOVIEPLAYER, true, NULL, moviePlayer, NULL, CRCInput::RC_yellow, NEUTRINO_ICON_BUTTON_YELLOW); + fw_mp->setHint(NEUTRINO_ICON_HINT_MOVIE, LOCALE_MENU_HINT_MOVIE); + } //pictureviewer pictureviewergui = new CPictureViewerGui(); @@ -204,8 +206,10 @@ int CMediaPlayerMenu::initMenuMedia(CMenuWidget *m, CPersonalizeGui *p) personalize->addItem(media, fw_inet, &g_settings.personalize[SNeutrinoSettings::P_MEDIA_INETPLAY]); //movieplayer - showMoviePlayer(moviePlayer, personalize); - personalize->addItem(media, fw_mp, &g_settings.personalize[SNeutrinoSettings::P_MEDIA_MPLAYER], false, CPersonalizeGui::PERSONALIZE_SHOW_AS_ACCESS_OPTION); + if (g_settings.recording_type != CNeutrinoApp::RECORDING_OFF) { + showMoviePlayer(moviePlayer, personalize); + personalize->addItem(media, fw_mp, &g_settings.personalize[SNeutrinoSettings::P_MEDIA_MPLAYER], false, CPersonalizeGui::PERSONALIZE_SHOW_AS_ACCESS_OPTION); + } //picture viewer personalize->addItem(media, fw_pviewer, &g_settings.personalize[SNeutrinoSettings::P_MEDIA_PVIEWER]); diff --git a/src/gui/miscsettings_menu.cpp b/src/gui/miscsettings_menu.cpp index 278323b6e..e1ebed087 100644 --- a/src/gui/miscsettings_menu.cpp +++ b/src/gui/miscsettings_menu.cpp @@ -49,6 +49,7 @@ #include #include +#include //#define ONE_KEY_PLUGIN @@ -271,7 +272,7 @@ void CMiscMenue::showMiscSettingsMenuGeneral(CMenuWidget *ms_general) //rotor //don't show rotor settings on cable box - if (g_info.delivery_system == DVB_S) { + if (CFEManager::getInstance()->haveSat()) { mc = new CMenuOptionChooser(LOCALE_EXTRA_ROTOR_SWAP, &g_settings.rotor_swap, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true); mc->setHint("", LOCALE_MENU_HINT_ROTOR_SWAP); ms_general->addItem(mc); @@ -409,6 +410,10 @@ void CMiscMenue::showMiscSettingsMenuChanlist(CMenuWidget *ms_chanlist) mc = new CMenuOptionChooser(LOCALE_CHANNELLIST_NEW_ZAP_MODE, &g_settings.channellist_new_zap_mode, CHANNELLIST_NEW_ZAP_MODE_OPTIONS, CHANNELLIST_NEW_ZAP_MODE_OPTION_COUNT, true ); mc->setHint("", LOCALE_MENU_HINT_NEW_ZAP_MODE); ms_chanlist->addItem(mc); + + mc = new CMenuOptionChooser(LOCALE_CHANNELLIST_NUMERIC_ADJUST, &g_settings.channellist_numeric_adjust, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true); + mc->setHint("", LOCALE_MENU_HINT_NUMERIC_ADJUST); + ms_chanlist->addItem(mc); } #ifdef CPU_FREQ diff --git a/src/gui/motorcontrol.cpp b/src/gui/motorcontrol.cpp index 250f6481d..86cc50c2e 100644 --- a/src/gui/motorcontrol.cpp +++ b/src/gui/motorcontrol.cpp @@ -138,9 +138,9 @@ int CMotorControl::exec(CMenuTarget* parent, const std::string &) #if 0 /* send satellite list to zapit */ for(sit = satellitePositions.begin(); sit != satellitePositions.end(); sit++) { - if(!strcmp(sit->second.name.c_str(),scansettings.satNameNoDiseqc)) { + if(!strcmp(sit->second.name.c_str(),scansettings.satName)) { sat.position = sit->first; - strncpy(sat.satName, scansettings.satNameNoDiseqc, 49); + strncpy(sat.satName, scansettings.satName, 49); satList.push_back(sat); if(sit->second.motor_position) motorPosition = sit->second.motor_position; @@ -149,8 +149,8 @@ int CMotorControl::exec(CMenuTarget* parent, const std::string &) } #endif /* send satellite list to zapit */ - sat.position = CServiceManager::getInstance()->GetSatellitePosition(scansettings.satNameNoDiseqc); - strncpy(sat.satName, scansettings.satNameNoDiseqc, 49); + sat.position = CServiceManager::getInstance()->GetSatellitePosition(scansettings.satName); + strncpy(sat.satName, scansettings.satName, 49); satList.push_back(sat); satellite_map_t & satmap = frontend->getSatellites(); @@ -164,10 +164,10 @@ int CMotorControl::exec(CMenuTarget* parent, const std::string &) g_Zapit->setScanSatelliteList( satList); CZapit::getInstance()->SetLiveFrontend(frontend); - TP.feparams.dvb_feparams.frequency = atoi(scansettings.TP_freq); - TP.feparams.dvb_feparams.u.qpsk.symbol_rate = atoi(scansettings.TP_rate); - TP.feparams.dvb_feparams.u.qpsk.fec_inner = (fe_code_rate_t)scansettings.TP_fec; - TP.polarization = scansettings.TP_pol; + TP.feparams.dvb_feparams.frequency = atoi(scansettings.sat_TP_freq); + TP.feparams.dvb_feparams.u.qpsk.symbol_rate = atoi(scansettings.sat_TP_rate); + TP.feparams.dvb_feparams.u.qpsk.fec_inner = (fe_code_rate_t)scansettings.sat_TP_fec; + TP.polarization = scansettings.sat_TP_pol; g_Zapit->tune_TP(TP); diff --git a/src/gui/moviebrowser.cpp b/src/gui/moviebrowser.cpp index b49e2ef43..24872adf8 100644 --- a/src/gui/moviebrowser.cpp +++ b/src/gui/moviebrowser.cpp @@ -1598,7 +1598,7 @@ void CMovieBrowser::refreshFoot(void) { //TRACE("[mb]->refreshButtonLine \r\n"); int color = (CFBWindow::color_t) COL_INFOBAR_SHADOW; - int iw = 0, ih; + int iw = 0, ih = 0; std::string filter_text = g_Locale->getText(LOCALE_MOVIEBROWSER_FOOT_FILTER); filter_text += m_settings.filter.optionString; @@ -1611,27 +1611,6 @@ void CMovieBrowser::refreshFoot(void) m_cBoxFrameFootRel.iWidth, m_cBoxFrameFootRel.iHeight+ 6, (CFBWindow::color_t)COL_INFOBAR_SHADOW_PLUS_0, RADIUS_LARGE, CORNER_BOTTOM); -// int width = m_cBoxFrameFootRel.iWidth>>2; - - int xpos1 = m_cBoxFrameFootRel.iX+10; - int width = (m_cBoxFrame.iWidth-40-g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getRenderWidth(g_Locale->getText(LOCALE_FILEBROWSER_DELETE)))/3; - // draw Button blue (filter) - //xpos += ButtonWidth + ButtonSpacing; - // draw yellow (sort) - if (m_settings.gui != MB_GUI_LAST_PLAY && m_settings.gui != MB_GUI_LAST_RECORD) - { - m_pcWindow->getIconSize(NEUTRINO_ICON_BUTTON_RED, &iw, &ih); - m_pcWindow->paintIcon(NEUTRINO_ICON_BUTTON_RED, m_cBoxFrame.iX+xpos1, m_cBoxFrame.iY+m_cBoxFrameFootRel.iY, m_cBoxFrameFootRel.iHeight+ 6); - m_pcFontFoot->RenderString(m_cBoxFrame.iX+xpos1 + 10 + iw, m_cBoxFrame.iY+m_cBoxFrameFootRel.iY + m_cBoxFrameFootRel.iHeight + 4 , width-30, sort_text.c_str(), (CFBWindow::color_t)color, 0, true); // UTF-8 - } - - if (m_settings.gui != MB_GUI_LAST_PLAY && m_settings.gui != MB_GUI_LAST_RECORD) - { - m_pcWindow->getIconSize(NEUTRINO_ICON_BUTTON_RED, &iw, &ih); - m_pcWindow->paintIcon(NEUTRINO_ICON_BUTTON_GREEN, m_cBoxFrame.iX+xpos1+width, m_cBoxFrame.iY+m_cBoxFrameFootRel.iY, m_cBoxFrameFootRel.iHeight+ 6); - m_pcFontFoot->RenderString(m_cBoxFrame.iX+ xpos1+width + 10 + iw, m_cBoxFrame.iY+m_cBoxFrameFootRel.iY + m_cBoxFrameFootRel.iHeight + 4 , width -30, filter_text.c_str(), (CFBWindow::color_t)color, 0, true); // UTF-8 - } - //std::string ok_text; if(m_settings.gui == MB_GUI_FILTER && m_windowFocus == MB_FOCUS_FILTER) { ok_text = g_Locale->getText(LOCALE_BOOKMARKMANAGER_SELECT); @@ -1640,13 +1619,54 @@ void CMovieBrowser::refreshFoot(void) { ok_text = g_Locale->getText(LOCALE_MOVIEBROWSER_FOOT_PLAY); } - m_pcWindow->getIconSize(NEUTRINO_ICON_BUTTON_OKAY, &iw, &ih); - m_pcWindow->paintIcon(NEUTRINO_ICON_BUTTON_OKAY, m_cBoxFrame.iX+xpos1+width*2, m_cBoxFrame.iY+m_cBoxFrameFootRel.iY, m_cBoxFrameFootRel.iHeight+ 6); - m_pcFontFoot->RenderString(m_cBoxFrame.iX+xpos1+width*2 + 10 + iw, m_cBoxFrame.iY+m_cBoxFrameFootRel.iY + m_cBoxFrameFootRel.iHeight + 4 , width-30, ok_text.c_str(), (CFBWindow::color_t)color, 0, true); // UTF-8 - m_pcWindow->getIconSize(NEUTRINO_ICON_BUTTON_MUTE_SMALL, &iw, &ih); - m_pcWindow->paintIcon(NEUTRINO_ICON_BUTTON_MUTE_SMALL, m_cBoxFrame.iX+xpos1+width*3, m_cBoxFrame.iY+m_cBoxFrameFootRel.iY, m_cBoxFrameFootRel.iHeight+ 6); - m_pcFontFoot->RenderString(m_cBoxFrame.iX+xpos1+width*3 + 10 + iw , m_cBoxFrame.iY+m_cBoxFrameFootRel.iY + m_cBoxFrameFootRel.iHeight + 4 , width-30, g_Locale->getText(LOCALE_FILEBROWSER_DELETE), (CFBWindow::color_t)color, 0, true); // UTF-8 + const int xoff = 10; + const int ypos_icon = m_cBoxFrame.iY + m_cBoxFrameFootRel.iY; + const int ypos_font = m_cBoxFrame.iY + m_cBoxFrameFootRel.iY + m_cBoxFrameFootRel.iHeight + 4; + int xpos = m_cBoxFrame.iX + m_cBoxFrameFootRel.iX + xoff; + + int max_b = 5; + if (m_settings.gui != MB_GUI_LAST_PLAY && m_settings.gui != MB_GUI_LAST_RECORD) + max_b = 7; + + int width = (m_cBoxFrame.iWidth-2*xoff) / max_b; + + if (m_settings.gui != MB_GUI_LAST_PLAY && m_settings.gui != MB_GUI_LAST_RECORD) + { + m_pcWindow->getIconSize(NEUTRINO_ICON_BUTTON_RED, &iw, &ih); + m_pcWindow->paintIcon(NEUTRINO_ICON_BUTTON_RED, xpos, ypos_icon, m_cBoxFrameFootRel.iHeight+ 6); + m_pcFontFoot->RenderString(xpos + xoff + iw, ypos_font, width - iw - 2*xoff, sort_text.c_str(), (CFBWindow::color_t)color, 0, true); // UTF-8 + xpos += width; + + m_pcWindow->getIconSize(NEUTRINO_ICON_BUTTON_GREEN, &iw, &ih); + m_pcWindow->paintIcon(NEUTRINO_ICON_BUTTON_GREEN, xpos, ypos_icon, m_cBoxFrameFootRel.iHeight+ 6); + m_pcFontFoot->RenderString(xpos + xoff + iw, ypos_font, width - iw - 2*xoff, filter_text.c_str(), (CFBWindow::color_t)color, 0, true); // UTF-8 + xpos += width; + } + + m_pcWindow->getIconSize(NEUTRINO_ICON_BUTTON_YELLOW, &iw, &ih); + m_pcWindow->paintIcon(NEUTRINO_ICON_BUTTON_YELLOW, xpos, ypos_icon, m_cBoxFrameFootRel.iHeight+ 6); + m_pcFontFoot->RenderString(xpos + xoff + iw, ypos_font, width - iw - 2*xoff, g_Locale->getText(LOCALE_MOVIEBROWSER_FOOT_FOCUS), (CFBWindow::color_t)color, 0, true); // UTF-8 + xpos += width; + + m_pcWindow->getIconSize(NEUTRINO_ICON_BUTTON_BLUE, &iw, &ih); + m_pcWindow->paintIcon(NEUTRINO_ICON_BUTTON_BLUE, xpos, ypos_icon, m_cBoxFrameFootRel.iHeight+ 6); + m_pcFontFoot->RenderString(xpos + xoff + iw, ypos_font, width - iw - 2*xoff, g_Locale->getText(LOCALE_MOVIEBROWSER_FOOT_REFRESH), (CFBWindow::color_t)color, 0, true); // UTF-8 + xpos += width; + + m_pcWindow->getIconSize(NEUTRINO_ICON_BUTTON_OKAY, &iw, &ih); + m_pcWindow->paintIcon(NEUTRINO_ICON_BUTTON_OKAY, xpos, ypos_icon, m_cBoxFrameFootRel.iHeight+ 6); + m_pcFontFoot->RenderString(xpos + xoff + iw, ypos_font, width - iw - 2*xoff, ok_text.c_str(), (CFBWindow::color_t)color, 0, true); // UTF-8 + xpos += width; + + m_pcWindow->getIconSize(NEUTRINO_ICON_BUTTON_MUTE_SMALL, &iw, &ih); + m_pcWindow->paintIcon(NEUTRINO_ICON_BUTTON_MUTE_SMALL, xpos, ypos_icon, m_cBoxFrameFootRel.iHeight+ 6); + m_pcFontFoot->RenderString(xpos + xoff + iw , ypos_font, width - iw - 2*xoff, g_Locale->getText(LOCALE_FILEBROWSER_DELETE), (CFBWindow::color_t)color, 0, true); // UTF-8 + xpos += width; + + m_pcWindow->getIconSize(NEUTRINO_ICON_BUTTON_MENU_SMALL, &iw, &ih); + m_pcWindow->paintIcon(NEUTRINO_ICON_BUTTON_MENU_SMALL, xpos, ypos_icon, m_cBoxFrameFootRel.iHeight+ 6); + m_pcFontFoot->RenderString(xpos + xoff + iw , ypos_font, width - iw - 2*xoff, g_Locale->getText(LOCALE_MOVIEBROWSER_FOOT_OPTIONS), (CFBWindow::color_t)color, 0, true); // UTF-8 } bool CMovieBrowser::onButtonPress(neutrino_msg_t msg) @@ -4012,13 +4032,13 @@ static off64_t cut_movie(MI_MOVIE_INFO * minfo, CMovieInfo * cmovie) CFrameBuffer * frameBuffer = CFrameBuffer::getInstance(); if (! timescale) - timescale = new CProgressBar();//new CProgressBar(g_settings.progressbar_color, 200, 15, 0, 100, 0); + timescale = new CProgressBar(); timescale->setBlink(); int dx = 256; int x = (((g_settings.screen_EndX- g_settings.screen_StartX)- dx) / 2) + g_settings.screen_StartX; int y = g_settings.screen_EndY - 50; frameBuffer->paintBoxRel (x + 40, y+12, 200, 15, COL_INFOBAR_PLUS_0);//TODO: remove unneeded box paints - timescale->setProgress(x + 41, y + 12, 200, 15, percent, 200); + timescale->setProgress(x + 41, y + 12, 200, 15, percent, 100); timescale->paint(); int len = minfo->length; off64_t size = minfo->file.Size; @@ -4165,7 +4185,7 @@ if(buf[0] != 0x47) printf("cut: buffer not aligned at %" PRId64 "\n", sdone); sdone += r; spos += r - wptr; percent = spos * 100 / newsize; - timescale->setProgress(x + 41, y + 12, 200, 15, percent, 200); + timescale->setProgress(x + 41, y + 12, 200, 15, percent, 100); timescale->paint(); #if REAL_CUT int wr = write(dstfd, &buf[wptr], r-wptr); @@ -4272,13 +4292,13 @@ printf("copy: len %d minute %" PRId64 " second %" PRId64 "\n", len, len ? size/l CFrameBuffer * frameBuffer = CFrameBuffer::getInstance(); if (! timescale) - timescale = new CProgressBar();//new CProgressBar(g_settings.progressbar_color, 200, 15, 0, 100, 0); + timescale = new CProgressBar(); timescale->setBlink(); int dx = 256; int x = (((g_settings.screen_EndX- g_settings.screen_StartX)- dx) / 2) + g_settings.screen_StartX; int y = g_settings.screen_EndY - 50; frameBuffer->paintBoxRel (x + 40, y+12, 200, 15, COL_INFOBAR_PLUS_0); //TODO: remove unneeded box paints - timescale->setProgress(x + 41, y + 12, 200, 15, percent, 200); + timescale->setProgress(x + 41, y + 12, 200, 15, percent, 100); timescale->paint(); newsize = 0; @@ -4397,7 +4417,7 @@ if(buf[0] != 0x47) printf("copy: buffer not aligned at %" PRId64 "\n", sdone); spos += r - wptr; btotal += r; percent = btotal * 100 / newsize; - timescale->setProgress(x + 41, y + 12, 200, 15, percent, 200); + timescale->setProgress(x + 41, y + 12, 200, 15, percent, 100); timescale->paint(); #if REAL_CUT int wr = write(dstfd, &buf[wptr], r-wptr); diff --git a/src/gui/moviebrowser.h b/src/gui/moviebrowser.h index 154b7364f..70f9523a9 100644 --- a/src/gui/moviebrowser.h +++ b/src/gui/moviebrowser.h @@ -87,7 +87,7 @@ /* percent */ #define MIN_BROWSER_FRAME_HEIGHT 10 #define MAX_BROWSER_FRAME_HEIGHT 80 -void strReplace(std::string& orig, const char* fstr, const std::string rstr); +void strReplace(std::string& orig, const char* fstr, const std::string &rstr); /* !!!! Do NOT change the order of the enum, just add items at the end !!!! */ typedef enum diff --git a/src/gui/movieinfo.cpp b/src/gui/movieinfo.cpp index d91b3e72e..a279b972b 100644 --- a/src/gui/movieinfo.cpp +++ b/src/gui/movieinfo.cpp @@ -614,7 +614,7 @@ int find_next_char(char to_find, char *text, int start_pos, int end_pos) } //void CMovieInfo::strReplace(std::string& orig, const char* fstr, const std::string rstr) -void strReplace(std::string & orig, const char *fstr, const std::string rstr) +void strReplace(std::string & orig, const char *fstr, const std::string &rstr) { // replace all occurrence of fstr with rstr and, and returns a reference to itself size_t index = 0; diff --git a/src/gui/movieplayer.cpp b/src/gui/movieplayer.cpp index d08b9f280..9c33bef42 100644 --- a/src/gui/movieplayer.cpp +++ b/src/gui/movieplayer.cpp @@ -166,6 +166,8 @@ void CMoviePlayerGui::cutNeutrino() CNeutrinoApp::getInstance()->handleMsg(NeutrinoMessages::CHANGEMODE, NeutrinoMessages::mode_ts); m_LastMode = (CNeutrinoApp::getInstance()->getLastMode() | NeutrinoMessages::norezap); + /* set g_InfoViewer update timer to 1 sec, should be reset to default from restoreNeutrino->set neutrino mode */ + g_InfoViewer->setUpdateTimer(1000 * 1000); } void CMoviePlayerGui::restoreNeutrino() @@ -261,14 +263,21 @@ void CMoviePlayerGui::updateLcd() switch (playstate) { case CMoviePlayerGui::PAUSE: - lcd = "|| "; + if (speed < 0) { + sprintf(tmp, "%dx<| ", abs(speed)); + lcd = tmp; + } else if (speed > 0) { + sprintf(tmp, "%dx|> ", abs(speed)); + lcd = tmp; + } else + lcd = "|| "; break; case CMoviePlayerGui::REW: - sprintf(tmp, "%dx<< ", speed); + sprintf(tmp, "%dx<< ", abs(speed)); lcd = tmp; break; case CMoviePlayerGui::FF: - sprintf(tmp, "%dx>> ", speed); + sprintf(tmp, "%dx>> ", abs(speed)); lcd = tmp; break; case CMoviePlayerGui::PLAY: @@ -380,22 +389,22 @@ bool CMoviePlayerGui::SelectFile() ret = true; if(file->getType() == CFile::FILE_PLAYLIST) { std::ifstream infile; - char cLine[256]; - char name[255] = { 0 }; + char cLine[1024]; + char name[1024] = { 0 }; infile.open(file->Name.c_str(), std::ifstream::in); while (infile.good()) { - infile.getline(cLine, 255); + infile.getline(cLine, sizeof(cLine)); if (cLine[strlen(cLine)-1]=='\r') cLine[strlen(cLine)-1]=0; - int duration; - sscanf(cLine, "#EXTINF:%d,%[^\n]\n", &duration, name); + int dur; + sscanf(cLine, "#EXTINF:%d,%[^\n]\n", &dur, name); if (strlen(cLine) > 0 && cLine[0]!='#') { char *url = strstr(cLine, "http://"); if (url != NULL) { - printf("name %s [%d] url: %s\n", name, duration, url); + printf("name %s [%d] url: %s\n", name, dur, url); full_name = url; if(strlen(name)) file_name = name; @@ -430,13 +439,13 @@ void CMoviePlayerGui::PlayFile(void) neutrino_msg_data_t data; menu_ret = menu_return::RETURN_REPAINT; - int position = 0, duration = 0; bool first_start_timeshift = false; bool time_forced = false; bool update_lcd = true; int eof = 0; - CTimeOSD FileTime; + //CTimeOSD FileTime; + position = 0, duration = 0; playstate = CMoviePlayerGui::STOPPED; printf("Startplay at %d seconds\n", startposition/1000); @@ -458,7 +467,7 @@ void CMoviePlayerGui::PlayFile(void) playback->Close(); } else { playstate = CMoviePlayerGui::PLAY; - CVFD::getInstance()->ShowIcon(VFD_ICON_PLAY, true); + CVFD::getInstance()->ShowIcon(FP_ICON_PLAY, true); if(timeshift) { first_start_timeshift = true; startposition = -1; @@ -504,7 +513,7 @@ void CMoviePlayerGui::PlayFile(void) updateLcd(); } if (first_start_timeshift) { - callInfoViewer(duration, position); + callInfoViewer(/*duration, position*/); first_start_timeshift = false; } @@ -519,6 +528,11 @@ void CMoviePlayerGui::PlayFile(void) #endif playback->GetSpeed(speed); + /* at BOF lib set speed 1, check it */ + if ((playstate != CMoviePlayerGui::PLAY) && (speed == 1)) { + playstate = CMoviePlayerGui::PLAY; + update_lcd = true; + } #ifdef DEBUG printf("CMoviePlayerGui::PlayFile: speed %d position %d duration %d (%d, %d%%)\n", speed, position, duration, duration-position, file_prozent); #endif @@ -543,19 +557,19 @@ void CMoviePlayerGui::PlayFile(void) playstate = CMoviePlayerGui::STOPPED; } else if (msg == (neutrino_msg_t) g_settings.mpkey_play) { if (playstate > CMoviePlayerGui::PLAY) { - update_lcd = true; playstate = CMoviePlayerGui::PLAY; speed = 1; playback->SetSpeed(speed); + //update_lcd = true; + updateLcd(); if (!timeshift) - callInfoViewer(duration, position); + callInfoViewer(/*duration, position*/); } if (time_forced) { time_forced = false; FileTime.hide(); } } else if (msg == (neutrino_msg_t) g_settings.mpkey_pause) { - update_lcd = true; if (playstate == CMoviePlayerGui::PAUSE) { playstate = CMoviePlayerGui::PLAY; //CVFD::getInstance()->ShowIcon(VFD_ICON_PAUSE, false); @@ -567,8 +581,10 @@ void CMoviePlayerGui::PlayFile(void) speed = 0; playback->SetSpeed(speed); } + //update_lcd = true; + updateLcd(); if (!timeshift) - callInfoViewer(duration, position); + callInfoViewer(/*duration, position*/); } else if (msg == (neutrino_msg_t) g_settings.mpkey_bookmark) { handleMovieBrowser((neutrino_msg_t) g_settings.mpkey_bookmark, position); @@ -580,19 +596,26 @@ void CMoviePlayerGui::PlayFile(void) } else if ((msg == (neutrino_msg_t) g_settings.mpkey_rewind) || (msg == (neutrino_msg_t) g_settings.mpkey_forward)) { + int newspeed; if (msg == (neutrino_msg_t) g_settings.mpkey_rewind) { - speed = (speed >= 0) ? -1 : speed - 1; - playstate = CMoviePlayerGui::REW; + newspeed = (speed >= 0) ? -1 : speed - 1; + if (playstate != CMoviePlayerGui::PAUSE) + playstate = CMoviePlayerGui::REW; } else { - speed = (speed <= 0) ? 2 : speed + 1; - playstate = CMoviePlayerGui::FF; + newspeed = (speed <= 0) ? 2 : speed + 1; + if (playstate != CMoviePlayerGui::PAUSE) + playstate = CMoviePlayerGui::FF; } /* if paused, playback->SetSpeed() start slow motion */ - playback->SetSpeed(speed); - update_lcd = true; + if (playback->SetSpeed(newspeed)) { + printf("SetSpeed: update speed\n"); + speed = newspeed; + updateLcd(); + } + //update_lcd = true; if (!timeshift) - callInfoViewer(duration, position); + callInfoViewer(/*duration, position*/); if (!FileTime.IsVisible()) { FileTime.show(position); @@ -623,7 +646,7 @@ void CMoviePlayerGui::PlayFile(void) } else if (msg == CRCInput::RC_0) { // cancel bookmark jump handleMovieBrowser(CRCInput::RC_0, position); } else if (msg == CRCInput::RC_help || msg == CRCInput::RC_info) { - callInfoViewer(duration, position); + callInfoViewer(/*duration, position*/); update_lcd = true; //showHelpTS(); } else if(timeshift && (msg == CRCInput::RC_text || msg == CRCInput::RC_epg || msg == NeutrinoMessages::SHOW_EPG)) { @@ -713,8 +736,8 @@ void CMoviePlayerGui::PlayFile(void) playback->SetSpeed(1); playback->Close(); - CVFD::getInstance()->ShowIcon(VFD_ICON_PLAY, false); - CVFD::getInstance()->ShowIcon(VFD_ICON_PAUSE, false); + CVFD::getInstance()->ShowIcon(FP_ICON_PLAY, false); + CVFD::getInstance()->ShowIcon(FP_ICON_PAUSE, false); restoreNeutrino(); @@ -722,7 +745,7 @@ void CMoviePlayerGui::PlayFile(void) InfoClock->StartClock(); } -void CMoviePlayerGui::callInfoViewer(const int duration, const int curr_pos) +void CMoviePlayerGui::callInfoViewer(/*const int duration, const int curr_pos*/) { if(timeshift) { g_InfoViewer->showTitle(CNeutrinoApp::getInstance()->channelList->getActiveChannelNumber(), @@ -736,12 +759,12 @@ void CMoviePlayerGui::callInfoViewer(const int duration, const int curr_pos) if (isMovieBrowser && p_movie_info) { g_InfoViewer->showMovieTitle(playstate, p_movie_info->epgChannel, p_movie_info->epgTitle, p_movie_info->epgInfo1, - duration, curr_pos); + duration, position); return; } /* not moviebrowser => use the filename as title */ - g_InfoViewer->showMovieTitle(playstate, file_name, "", "", duration, curr_pos); + g_InfoViewer->showMovieTitle(playstate, file_name, "", "", duration, position); } bool CMoviePlayerGui::getAudioName(int apid, std::string &apidtitle) @@ -782,7 +805,7 @@ void CMoviePlayerGui::addAudioFormat(int count, std::string &apidtitle, bool fil break; case 6: /*DTS*/ apidtitle.append(" (DTS)"); -#ifndef HAVE_SPARK_HARDWARE +#if ! defined(HAVE_SPARK_HARDWARE) && ! defined (BOXMODEL_APOLLO) enabled = false; #endif break; @@ -899,7 +922,7 @@ void CMoviePlayerGui::selectAudioPid(bool file_player) } } -void CMoviePlayerGui::handleMovieBrowser(neutrino_msg_t msg, int position) +void CMoviePlayerGui::handleMovieBrowser(neutrino_msg_t msg, int /*position*/) { CMovieInfo cMovieInfo; // funktions to save and load movie info @@ -1153,6 +1176,18 @@ void CMoviePlayerGui::handleMovieBrowser(neutrino_msg_t msg, int position) return; } +void CMoviePlayerGui::UpdatePosition() +{ + if(playback->GetPosition(position, duration)) { + if(duration > 100) + file_prozent = (unsigned char) (position / (duration / 100)); + FileTime.update(position, duration); +#ifdef DEBUG + printf("CMoviePlayerGui::PlayFile: speed %d position %d duration %d (%d, %d%%)\n", speed, position, duration, duration-position, file_prozent); +#endif + } +} + void CMoviePlayerGui::showHelpTS() { Helpbox helpbox; diff --git a/src/gui/movieplayer.h b/src/gui/movieplayer.h index 8217045e8..df8434f67 100644 --- a/src/gui/movieplayer.h +++ b/src/gui/movieplayer.h @@ -41,6 +41,7 @@ #include #include #include +#include #include #include @@ -74,6 +75,9 @@ class CMoviePlayerGui : public CMenuTarget CMoviePlayerGui::state playstate; int speed; int startposition; + int position; + int duration; + CTimeOSD FileTime; unsigned short numpida; unsigned short vpid; @@ -109,7 +113,7 @@ class CMoviePlayerGui : public CMenuTarget void restoreNeutrino(); void showHelpTS(void); - void callInfoViewer(const int duration, const int pos); + void callInfoViewer(/*const int duration, const int pos*/); void fillPids(); bool getAudioName(int pid, std::string &apidtitle); void selectAudioPid(bool file_player); @@ -131,6 +135,10 @@ class CMoviePlayerGui : public CMenuTarget int exec(CMenuTarget* parent, const std::string & actionKey); bool Playing() { return playing; }; std::string CurrentAudioName() { return currentaudioname; }; + int GetSpeed() { return speed; } + int GetPosition() { return position; } + int GetDuration() { return duration; } + void UpdatePosition(); int timeshift; int file_prozent; }; diff --git a/src/gui/osd_setup.cpp b/src/gui/osd_setup.cpp index fe117c6db..6125fc8b2 100644 --- a/src/gui/osd_setup.cpp +++ b/src/gui/osd_setup.cpp @@ -826,7 +826,7 @@ void COsdSetup::showOsdInfobarSetup(CMenuWidget *menu_infobar) show_tuner_icon = 0; // show possible option if we in single box mode, but don't touch the real settings int *p_show_tuner_icon = &show_tuner_icon; - if (CFEManager::getInstance()->getMode() != CFEManager::FE_MODE_SINGLE){ + if (CFEManager::getInstance()->getFrontendCount() > 1) { mc_active = true; // use the real value of g_settings.infobar_show_tuner p_show_tuner_icon = &g_settings.infobar_show_tuner; @@ -932,15 +932,9 @@ bool COsdSetup::changeNotify(const neutrino_locale_t OptionName, void * data) g_InfoViewer->changePB(); return true; } - else if ((ARE_LOCALES_EQUAL(OptionName, LOCALE_EXTRA_VOLUME_POS)) || - (ARE_LOCALES_EQUAL(OptionName, LOCALE_EXTRA_VOLUME_DIGITS))){ - CVolume::getInstance()->Init(); - return false; - } else if (ARE_LOCALES_EQUAL(OptionName, LOCALE_EXTRA_ROUNDED_CORNERS)) { osd_menu->hide(); g_settings.rounded_corners = * (int*) data; - CVolume::getInstance()->Init(); return true; } else if(ARE_LOCALES_EQUAL(OptionName, LOCALE_MISCSETTINGS_RADIOTEXT)) { diff --git a/src/gui/pipsetup.cpp b/src/gui/pipsetup.cpp new file mode 100644 index 000000000..505576479 --- /dev/null +++ b/src/gui/pipsetup.cpp @@ -0,0 +1,197 @@ +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include + +#include +#include +#include + +#include +#include +#include +#include + +#define PERCENT 5 +#define XMOVE 10 +#define YMOVE 10 + +#ifdef ENABLE_PIP + +extern cVideo *pipDecoder; + +CPipSetup::CPipSetup() +{ + frameBuffer = CFrameBuffer::getInstance(); + x_coord = g_settings.pip_x; + y_coord = g_settings.pip_y; + width = g_settings.pip_width; + height = g_settings.pip_height; + + maxw = frameBuffer->getScreenWidth(true); + maxh = frameBuffer->getScreenHeight(true); + minw = maxw/8; + minh = minw*1000/1825; +} + +void CPipSetup::move(int x, int y, bool abs) +{ + int newx, newy; + + if(abs) { + newx = x; + newy = y; + } else { + newx = x_coord + x; + newy = y_coord + y; + if(newx < 0) newx = 0; + else if((newx + width) >= maxw) newx = maxw - width; + if(newy < 0) newy = 0; + else if((newy + height) >= maxh) newy = maxh - height; + } + x_coord = newx; + y_coord = newy; + g_settings.pip_x = x_coord; + g_settings.pip_y = y_coord; + + printf("CPipSetup::move: x %d y %d\n", x_coord, y_coord); + pipDecoder->Pig(x_coord, y_coord, width, height, maxw, maxh); +} + +// w and h is percent, if not absolute +void CPipSetup::resize(int w, int h, bool abs) +{ + int neww, newh; + + if(abs) { + width = w; + height = h; + } else { + neww = width + (maxw*w/100); + //newh = neww * 100 / 125; + newh = height + (maxh*h/100); + + if(neww > maxw) neww = maxw; + else if(neww < minw) neww = minw; + + if(newh > maxh) newh = maxh; + else if(newh < minh) newh = minh; + if( (x_coord + neww) > maxw) + return; + if( (y_coord + newh) > maxh) + return; + width = neww; + height = newh; + } + g_settings.pip_width = width; + g_settings.pip_height = height; + + printf("CPipSetup::resize: w %d h %d \n", width, height); + pipDecoder->Pig(x_coord, y_coord, width, height, maxw, maxh); +} + +int CPipSetup::exec(CMenuTarget* parent, const std::string &) +{ + neutrino_msg_t msg; + neutrino_msg_data_t data; + int oldx = x_coord; + int oldy = y_coord; + int oldw = width; + int oldh = height; + + printf("CPipSetup::exec\n"); + int res = menu_return::RETURN_REPAINT; + + if (parent) + parent->hide(); + + paint(); + + uint64_t timeoutEnd = CRCInput::calcTimeoutEnd(g_settings.timing[SNeutrinoSettings::TIMING_MENU] == 0 ? 0xFFFF : g_settings.timing[SNeutrinoSettings::TIMING_MENU]); + + bool loop=true; + while (loop) { + g_RCInput->getMsgAbsoluteTimeout(&msg, &data, &timeoutEnd, true); + + if ( msg <= CRCInput::RC_MaxRC ) + timeoutEnd = CRCInput::calcTimeoutEnd(g_settings.timing[SNeutrinoSettings::TIMING_MENU] == 0 ? 0xFFFF : g_settings.timing[SNeutrinoSettings::TIMING_MENU]); + + if ((msg == (neutrino_msg_t) g_settings.key_pip_setup) || + (msg == CRCInput::RC_timeout) || (msg == CRCInput::RC_ok)) { + loop = false; + break; + } else if ((msg == CRCInput::RC_home) || (msg == CRCInput::RC_spkr)) { + clear(); + move(oldx, oldy, true); + resize(oldw, oldh, true); + paint(); + if (msg == CRCInput::RC_home) + loop = false; + } else if ((msg == CRCInput::RC_up) || (msg == CRCInput::RC_down)) { + clear(); + move(0, (msg == CRCInput::RC_up) ? -YMOVE : YMOVE); + paint(); + } else if ((msg == CRCInput::RC_left) || (msg == CRCInput::RC_right)) { + clear(); + move((msg == CRCInput::RC_left) ? -XMOVE : XMOVE, 0); + paint(); + } else if ((msg == CRCInput::RC_plus) || (msg == CRCInput::RC_minus)) { + clear(); + int percent = (msg == CRCInput::RC_plus) ? PERCENT : -PERCENT; + resize(percent, percent); + paint(); + } else if (msg > CRCInput::RC_MaxRC) { + if ( CNeutrinoApp::getInstance()->handleMsg( msg, data ) & messages_return::cancel_all ) { + loop = false; + res = menu_return::RETURN_EXIT_ALL; + } + } + } + hide(); + return res; +} + +void CPipSetup::hide() +{ + frameBuffer->Clear(); +} + +void CPipSetup::clear() +{ + frameBuffer->paintBackgroundBoxRel(x_coord, y_coord, width, height); +} + +void CPipSetup::paint() +{ + if (!frameBuffer->getActive()) + return; + + char xpos[30]; + char ypos[30]; + char wpos[30]; + char hpos[30]; + + sprintf(xpos, "X: %d", x_coord ); + sprintf(ypos, "Y: %d", y_coord ); + sprintf(wpos, "W: %d", width ); + sprintf(hpos, "H: %d", height ); + + int mheight = g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getHeight(); + int mwidth = 10 + g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getRenderWidth("W: 9999"); + int x = (frameBuffer->getScreenWidth() - mwidth)/2; + int y = (frameBuffer->getScreenHeight() - mheight*4)/2; + + if (pipDecoder->getBlank()) + frameBuffer->paintBoxRel(x_coord, y_coord, width, height, COL_MENUCONTENT_PLUS_0); + + frameBuffer->paintBoxRel(x, y, mwidth, mheight*4, COL_MENUCONTENT_PLUS_0); + + g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(x+5, y+mheight, mwidth, xpos, COL_MENUCONTENT); + g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(x+5, y+mheight*2, mwidth, ypos, COL_MENUCONTENT); + g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(x+5, y+mheight*3, mwidth, wpos, COL_MENUCONTENT); + g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(x+5, y+mheight*4, mwidth, hpos, COL_MENUCONTENT); +} + +#endif //#ifdef ENABLE_PIP diff --git a/src/gui/pipsetup.h b/src/gui/pipsetup.h new file mode 100644 index 000000000..373f3096b --- /dev/null +++ b/src/gui/pipsetup.h @@ -0,0 +1,29 @@ +#ifndef __PIP_SETUP_H_ +#define __PIP_SETUP_H_ + +#include +#include +#include + +class CPipSetup : public CMenuTarget +{ + private: + CFrameBuffer * frameBuffer; + int x_coord; + int y_coord; + int width; + int height; + int maxw; + int maxh; + int minw; + int minh; + void paint(); + void hide(); + void clear(); + public: + CPipSetup(); + void move(int x, int y, bool abs = false); + void resize(int w, int h, bool abs = false); + int exec(CMenuTarget* parent, const std::string & actionKey); +}; +#endif diff --git a/src/gui/scan.cpp b/src/gui/scan.cpp index 09234b75e..3eae23e3f 100644 --- a/src/gui/scan.cpp +++ b/src/gui/scan.cpp @@ -65,13 +65,14 @@ extern cVideo * videoDecoder; #define BAR_WIDTH 150 #define BAR_HEIGHT 16//(13 + BAR_BORDER*2) -CScanTs::CScanTs() +CScanTs::CScanTs(int dtype) { frameBuffer = CFrameBuffer::getInstance(); radar = 0; total = done = 0; freqready = 0; + deltype = dtype; sigscale = new CProgressBar(); sigscale->setBlink(); @@ -90,7 +91,10 @@ void CScanTs::prev_next_TP( bool up) { t_satellite_position position = 0; - position = CServiceManager::getInstance()->GetSatellitePosition(scansettings.satNameNoDiseqc); + if (deltype == FE_QPSK) + position = CServiceManager::getInstance()->GetSatellitePosition(scansettings.satName); + else + position = CServiceManager::getInstance()->GetSatellitePosition(scansettings.cableName); transponder_list_t &select_transponders = CServiceManager::getInstance()->GetSatelliteTransponders(position); transponder_list_t::iterator tI; @@ -116,11 +120,11 @@ void CScanTs::prev_next_TP( bool up) if(next_tp) { TP.feparams.dvb_feparams.frequency = tI->second.feparams.dvb_feparams.frequency; - if(g_info.delivery_system == DVB_S) { + if (deltype == FE_QPSK) { TP.feparams.dvb_feparams.u.qpsk.symbol_rate = tI->second.feparams.dvb_feparams.u.qpsk.symbol_rate; TP.feparams.dvb_feparams.u.qpsk.fec_inner = tI->second.feparams.dvb_feparams.u.qpsk.fec_inner; TP.polarization = tI->second.polarization; - } else if (g_info.delivery_system == DVB_T) { + } else if (deltype == FE_OFDM) { /* DVB-T. TODO: proper menu and parameter setup, not all "AUTO" */ if (TP.feparams.dvb_feparams.frequency < 300000) TP.feparams.dvb_feparams.u.ofdm.bandwidth = BANDWIDTH_7_MHZ; @@ -147,17 +151,17 @@ void CScanTs::testFunc() char buffer[128]; char * f, *s, *m; - CFrontend * frontend = CServiceScan::getInstance()->GetFrontend(); - if(frontend->getInfo()->type == FE_QPSK) { - frontend->getDelSys(TP.feparams.dvb_feparams.u.qpsk.fec_inner, dvbs_get_modulation((fe_code_rate_t)TP.feparams.dvb_feparams.u.qpsk.fec_inner), f, s, m); + if(deltype == FE_QPSK) { + CFrontend::getDelSys(deltype, TP.feparams.dvb_feparams.u.qpsk.fec_inner, dvbs_get_modulation((fe_code_rate_t)TP.feparams.dvb_feparams.u.qpsk.fec_inner), f, s, m); snprintf(buffer,sizeof(buffer), "%u %c %d %s %s %s", TP.feparams.dvb_feparams.frequency/1000, transponder::pol(TP.polarization), TP.feparams.dvb_feparams.u.qpsk.symbol_rate/1000, f, s, m); - } else if(frontend->getInfo()->type == FE_QAM) { - frontend->getDelSys(scansettings.TP_fec, scansettings.TP_mod, f, s, m); - snprintf(buffer,sizeof(buffer), "%u %d %s %s %s", atoi(scansettings.TP_freq)/1000, atoi(scansettings.TP_rate)/1000, f, s, m); - } else if (frontend->getInfo()->type == FE_OFDM) { + } else if (deltype == FE_QAM) { + CFrontend::getDelSys(deltype, TP.feparams.dvb_feparams.u.qam.fec_inner, TP.feparams.dvb_feparams.u.qam.modulation, f, s, m); + snprintf(buffer,sizeof(buffer), "%u %d %s %s %s", TP.feparams.dvb_feparams.frequency/1000, TP.feparams.dvb_feparams.u.qam.symbol_rate/1000, f, s, m); + } else if (deltype == FE_OFDM) { sprintf(buffer, "%u", TP.feparams.dvb_feparams.frequency); /* no way int can overflow the buffer */ } - paintLine(xpos2, ypos_cur_satellite, w - 95, scansettings.satNameNoDiseqc); +printf("CScanTs::testFunc: %s\n", buffer); + paintLine(xpos2, ypos_cur_satellite, w - 95, pname); paintLine(xpos2, ypos_frequency, w, buffer); paintRadar(); success = g_Zapit->tune_TP(TP); @@ -189,6 +193,8 @@ int CScanTs::exec(CMenuTarget* /*parent*/, const std::string & actionKey) bool manual = (actionKey == "manual") || test; bool fast = (actionKey == "fast"); + pname = (deltype == FE_QPSK) ? scansettings.satName : scansettings.cableName; + int scan_pids = CZapit::getInstance()->scanPids(); hheight = g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]->getHeight(); @@ -214,6 +220,9 @@ int CScanTs::exec(CMenuTarget* /*parent*/, const std::string & actionKey) CRecordManager::getInstance()->StopAutoRecord(); g_Zapit->stopPlayBack(); +#ifdef ENABLE_PIP + CZapit::getInstance()->StopPip(); +#endif frameBuffer->paintBackground(); videoDecoder->ShowPicture(DATADIR "/neutrino/icons/scan.jpg"); @@ -228,13 +237,16 @@ int CScanTs::exec(CMenuTarget* /*parent*/, const std::string & actionKey) if(scansettings.scan_nit_manual) scan_flags |= CServiceScan::SCAN_NIT; TP.scan_mode = scan_flags; - TP.feparams.dvb_feparams.frequency = atoi(scansettings.TP_freq); - if(g_info.delivery_system == DVB_S) { - TP.feparams.dvb_feparams.u.qpsk.symbol_rate = atoi(scansettings.TP_rate); - TP.feparams.dvb_feparams.u.qpsk.fec_inner = (fe_code_rate_t) scansettings.TP_fec; - TP.polarization = scansettings.TP_pol; - } else if (g_info.delivery_system == DVB_T) { + if (deltype == FE_QPSK) { + TP.feparams.dvb_feparams.frequency = atoi(scansettings.sat_TP_freq); + TP.feparams.dvb_feparams.u.qpsk.symbol_rate = atoi(scansettings.sat_TP_rate); + TP.feparams.dvb_feparams.u.qpsk.fec_inner = (fe_code_rate_t) scansettings.sat_TP_fec; + TP.polarization = scansettings.sat_TP_pol; +#if 0 +/* TODO: FIXME */ + } else if (deltype == FE_OFDM) { /* DVB-T. TODO: proper menu and parameter setup, not all "AUTO" */ + TP.feparams.dvb_feparams.frequency = atoi(scansettings.terr_TP_freq); if (TP.feparams.dvb_feparams.frequency < 300000) TP.feparams.dvb_feparams.u.ofdm.bandwidth = BANDWIDTH_7_MHZ; else @@ -245,17 +257,19 @@ int CScanTs::exec(CMenuTarget* /*parent*/, const std::string & actionKey) TP.feparams.dvb_feparams.u.ofdm.transmission_mode = TRANSMISSION_MODE_AUTO; TP.feparams.dvb_feparams.u.ofdm.guard_interval = GUARD_INTERVAL_AUTO; TP.feparams.dvb_feparams.u.ofdm.hierarchy_information = HIERARCHY_AUTO; +#endif } else { - TP.feparams.dvb_feparams.u.qam.symbol_rate = atoi(scansettings.TP_rate); - TP.feparams.dvb_feparams.u.qam.fec_inner = (fe_code_rate_t)scansettings.TP_fec; - TP.feparams.dvb_feparams.u.qam.modulation = (fe_modulation_t) scansettings.TP_mod; + TP.feparams.dvb_feparams.frequency = atoi(scansettings.cable_TP_freq); + TP.feparams.dvb_feparams.u.qam.symbol_rate = atoi(scansettings.cable_TP_rate); + TP.feparams.dvb_feparams.u.qam.fec_inner = (fe_code_rate_t)scansettings.cable_TP_fec; + TP.feparams.dvb_feparams.u.qam.modulation = (fe_modulation_t) scansettings.cable_TP_mod; } //printf("[neutrino] freq %d rate %d fec %d pol %d\n", TP.feparams.dvb_feparams.frequency, TP.feparams.dvb_feparams.u.qpsk.symbol_rate, TP.feparams.dvb_feparams.u.qpsk.fec_inner, TP.polarization); } else { if(scansettings.scan_nit) scan_flags |= CServiceScan::SCAN_NIT; } - if(g_info.delivery_system == DVB_C) + if(deltype == FE_QAM) CServiceScan::getInstance()->SetCableNID(scansettings.cable_nid); CZapitClient::commandSetScanSatelliteList sat; @@ -265,8 +279,8 @@ int CScanTs::exec(CMenuTarget* /*parent*/, const std::string & actionKey) if(fast) { } else if(manual || !scan_all) { - sat.position = CServiceManager::getInstance()->GetSatellitePosition(scansettings.satNameNoDiseqc); - strncpy(sat.satName, scansettings.satNameNoDiseqc, 49); + sat.position = CServiceManager::getInstance()->GetSatellitePosition(pname); + strncpy(sat.satName, pname, 49); satList.push_back(sat); } else { satellite_map_t & satmap = CServiceManager::getInstance()->SatelliteList(); @@ -372,6 +386,8 @@ int CScanTs::exec(CMenuTarget* /*parent*/, const std::string & actionKey) videoDecoder->StopPicture(); frameBuffer->Clear(); g_Sectionsd->setPauseScanning(false); + if (CNeutrinoApp::getInstance()->channelList) + CNeutrinoApp::getInstance()->channelList->zapTo_ChannelID(CZapit::getInstance()->GetCurrentChannelID(), true); /* force re-zap */ CVFD::getInstance()->setMode(CVFD::MODE_TVRADIO); return menu_return::RETURN_REPAINT; @@ -467,7 +483,7 @@ neutrino_msg_t CScanTs::handleMsg(neutrino_msg_t msg, neutrino_msg_data_t data) case CRCInput::RC_minus: case CRCInput::RC_left: case CRCInput::RC_right: - CVolume::getInstance()->setVolume(msg, true, true); + CVolume::getInstance()->setVolume(msg, true /*nowait = true*/); break; default: break; @@ -535,12 +551,12 @@ void CScanTs::paint(bool fortest) ypos_cur_satellite = ypos; - if (g_info.delivery_system == DVB_S) + if(deltype == FE_QPSK) { //sat paintLineLocale(xpos1, &ypos, width - xpos1, LOCALE_SCANTS_ACTSATELLITE); xpos2 = xpos1 + 10 + g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getRenderWidth(g_Locale->getText(LOCALE_SCANTS_ACTSATELLITE), true); // UTF-8 } - if (g_info.delivery_system == DVB_C) + if(deltype == FE_QAM) { //cable paintLineLocale(xpos1, &ypos, width - xpos1, LOCALE_SCANTS_ACTCABLE); xpos2 = xpos1 + 10 + g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getRenderWidth(g_Locale->getText(LOCALE_SCANTS_ACTCABLE), true); // UTF-8 diff --git a/src/gui/scan.h b/src/gui/scan.h index 2df4d565d..149ae7291 100644 --- a/src/gui/scan.h +++ b/src/gui/scan.h @@ -80,9 +80,11 @@ class CScanTs : public CMenuTarget void testFunc(); void prev_next_TP(bool); TP_params TP; + int deltype; + char * pname; public: - CScanTs(); + CScanTs(int dtype = FE_QPSK); ~CScanTs(); void hide(); int exec(CMenuTarget* parent, const std::string & actionKey); diff --git a/src/gui/scan_setup.cpp b/src/gui/scan_setup.cpp index c8052ead9..efe375e61 100644 --- a/src/gui/scan_setup.cpp +++ b/src/gui/scan_setup.cpp @@ -45,7 +45,6 @@ #include #include -#include #include #include @@ -170,21 +169,6 @@ const CMenuOptionChooser::keyval OPTIONS_EAST0_WEST1_OPTIONS[OPTIONS_EAST0_WEST1 { 1, LOCALE_EXTRA_WEST } }; -#if 0 -/*Cable*/ -#define CABLESETUP_SCANTP_MOD_COUNT 7 -const CMenuOptionChooser::keyval CABLESETUP_SCANTP_MOD[CABLESETUP_SCANTP_MOD_COUNT] = -{ - {0, LOCALE_EXTRA_TP_MOD_QPSK } , - {1, LOCALE_EXTRA_TP_MOD_QAM_16 } , - {2, LOCALE_EXTRA_TP_MOD_QAM_32 } , - {3, LOCALE_EXTRA_TP_MOD_QAM_64 } , - {4, LOCALE_EXTRA_TP_MOD_QAM_128 } , - {5, LOCALE_EXTRA_TP_MOD_QAM_256 } , - {6, LOCALE_EXTRA_TP_MOD_QAM_AUTO } -}; -#endif - #define SECTIONSD_SCAN_OPTIONS_COUNT 3 const CMenuOptionChooser::keyval SECTIONSD_SCAN_OPTIONS[SECTIONSD_SCAN_OPTIONS_COUNT] = { @@ -200,21 +184,14 @@ const CMenuOptionChooser::keyval DISEQC_ORDER_OPTIONS[DISEQC_ORDER_OPTION_COUNT] { UNCOMMITED_FIRST, LOCALE_SATSETUP_DISEQC_UNCOM_COM } }; -#define SATSETUP_FRONTEND_MODE_COUNT 4 +#define SATSETUP_FRONTEND_MODE_COUNT 5 const CMenuOptionChooser::keyval SATSETUP_FRONTEND_MODE[SATSETUP_FRONTEND_MODE_COUNT] = { - { CFEManager::FE_MODE_SINGLE, LOCALE_SATSETUP_FE_MODE_SINGLE }, - { CFEManager::FE_MODE_LOOP, LOCALE_SATSETUP_FE_MODE_LOOP }, - { CFEManager::FE_MODE_TWIN, LOCALE_SATSETUP_FE_MODE_TWIN }, - { CFEManager::FE_MODE_ALONE, LOCALE_SATSETUP_FE_MODE_ALONE } -}; - -#define SATSETUP_FRONTEND_TYPE_COUNT 3 -const CMenuOptionChooser::keyval_ext SATSETUP_FRONTEND_TYPE[SATSETUP_FRONTEND_TYPE_COUNT] = -{ - { FE_QPSK, NONEXISTANT_LOCALE, "DVB-S" }, - { FE_QAM, NONEXISTANT_LOCALE, "DVB-C" }, - { FE_OFDM, NONEXISTANT_LOCALE, "DVB-T" } + { CFrontend::FE_MODE_UNUSED, LOCALE_SATSETUP_FE_MODE_UNUSED }, + { CFrontend::FE_MODE_INDEPENDENT, LOCALE_SATSETUP_FE_MODE_INDEPENDENT }, + { CFrontend::FE_MODE_MASTER, LOCALE_SATSETUP_FE_MODE_MASTER }, + { CFrontend::FE_MODE_LINK_LOOP, LOCALE_SATSETUP_FE_MODE_LINK_LOOP }, + { CFrontend::FE_MODE_LINK_TWIN, LOCALE_SATSETUP_FE_MODE_LINK_TWIN }, }; CScanSetup::CScanSetup(bool wizard_mode) @@ -242,8 +219,18 @@ CScanSetup::CScanSetup(bool wizard_mode) } satSelect = NULL; + cableSelect = NULL; + satOnOff = NULL; + fautoScanAll = NULL; frontendSetup = NULL; + fsatSetup = NULL; + fsatSelect = NULL; + dtype = NULL; + uniSetup = NULL; + ojDiseqcRepeats = NULL; nid = NULL; + lcnhd = NULL; + linkfe = NULL; } CScanSetup* CScanSetup::getInstance() @@ -271,13 +258,13 @@ int CScanSetup::exec(CMenuTarget* parent, const std::string &actionKey) parent->hide(); printf("[neutrino] CScanSetup::%s: %s \n", __FUNCTION__, actionKey.c_str()); - if(actionKey=="save_scansettings") + if(actionKey == "save_scansettings") { printf("[neutrino] CScanSetup::%s save_scansettings...\n", __FUNCTION__); saveScanSetup(); return res; } - else if(actionKey=="reloadchannels") + else if(actionKey == "reloadchannels") { printf("[neutrino] CScanSetup::%s reloadchannels...\n", __FUNCTION__); if (reloadhintBox) @@ -291,18 +278,22 @@ int CScanSetup::exec(CMenuTarget* parent, const std::string &actionKey) CNeutrinoApp::getInstance ()->SDTreloadChannels = false; return res; } - else if(actionKey=="satsetup") + else if(actionKey == "satsetup") { return showScanMenuLnbSetup(); } - else if(actionKey=="unisetup") + else if(actionKey == "unisetup") { return showUnicableSetup(); } - else if(actionKey=="satfind") + else if(actionKey == "satfind") { return showScanMenuSatFind(); } + else if(actionKey == "setup_frontend") + { + return showScanMenuFrontendSetup(); + } else if((loc = actionKey.find("config_frontend", 0)) != std::string::npos) { int number = actionKey.at(15) - '0'; @@ -311,7 +302,7 @@ int CScanSetup::exec(CMenuTarget* parent, const std::string &actionKey) } //starting scan - if(actionKey=="cable") { + if(actionKey == "cable") { printf("[neutrino] CScanSetup::%s: simple cable scan\n", __FUNCTION__); saveScanSetup(); /* for simple cable scan, force some options */ @@ -322,23 +313,28 @@ int CScanSetup::exec(CMenuTarget* parent, const std::string &actionKey) g_settings.keep_channel_numbers = 1; CServiceManager::getInstance()->KeepNumbers(g_settings.keep_channel_numbers); } - CScanTs scanTs; + CScanTs scanTs(FE_QAM); scanTs.exec(NULL, "manual"); return res; } std::string scants_key[] = {"all", "manual", "test", "fast", "auto"/*doesn't exists in CScanTs!*/}; - for (uint i=0; i< (sizeof(scants_key)/sizeof(scants_key[0])); i++) - { - if (actionKey == scants_key[i]) + if (actionKey.size() > 1) { + int delsys = actionKey[0] == 's' ? FE_QPSK : FE_QAM; + std::string as = actionKey.substr(1); + printf("[neutrino] CScanSetup::%s scan %c in %s mode...\n", __FUNCTION__, actionKey[0], as.c_str()); + for (uint i=0; i< (sizeof(scants_key)/sizeof(scants_key[0])); i++) { - printf("[neutrino] CScanSetup::%s %s...\n", __FUNCTION__, scants_key[i].c_str()); - //ensure that be saved all settings before scan... - saveScanSetup(); - //...then start scan - CScanTs scanTs; - scanTs.exec(NULL, scants_key[i]); - return res; + if (as == scants_key[i]) + { + printf("[neutrino] CScanSetup::%s %s...\n", __FUNCTION__, scants_key[i].c_str()); + //ensure that be saved all settings before scan... + saveScanSetup(); + //...then start scan + CScanTs scanTs(delsys); + scanTs.exec(NULL, scants_key[i]); + return res; + } } } @@ -377,8 +373,7 @@ int CScanSetup::showScanMenu() { printf("[neutrino] CScanSetup call %s...\n", __FUNCTION__); int shortcut = 1; - CMenuOptionChooser::keyval_ext key[SATSETUP_FRONTEND_TYPE_COUNT]; - fe_type_t fetype = CFEManager::getInstance()->getFE(0)->getInfo()->type; + int w = getSatMenuListWidth(); CMenuForwarder * mf; CMenuOptionChooser * mc; @@ -410,62 +405,115 @@ int CScanSetup::showScanMenu() settings->addItem(mc); //sat/provider selector - satSelect = new CMenuOptionStringChooser(satprov_locale, scansettings.satNameNoDiseqc, true, this, CRCInput::RC_red, NEUTRINO_ICON_BUTTON_RED, true); - satOnOff = new CMenuWidget(satprov_locale, NEUTRINO_ICON_SETTINGS, width); - if (r_system == DVB_S) //sat - { - satSelect->setHint("", LOCALE_MENU_HINT_SCAN_SATELLITE); - //settings->addItem(new CMenuSeparator(CMenuSeparator::LINE | CMenuSeparator::STRING, LOCALE_SCANTS_PREVERENCES_RECEIVING_SYSTEM)); + if(CFEManager::getInstance()->haveSat() || CFEManager::getInstance()->getFrontendCount() > 1) { +#if 0 CMenuWidget * setupMenu = new CMenuWidget(LOCALE_SATSETUP_FE_SETUP, NEUTRINO_ICON_SETTINGS, width, MN_WIDGET_ID_SCAN_FE_SETUP); addScanMenuFrontendSetup(setupMenu); - mf = new CMenuDForwarder(LOCALE_SATSETUP_FE_SETUP, true, NULL, setupMenu, "", CRCInput::convertDigitToKey(shortcut++)); + mf = new CMenuDForwarder(LOCALE_SATSETUP_FE_SETUP, allow_start, NULL, setupMenu, "", CRCInput::convertDigitToKey(shortcut++)); +#endif + mf = new CMenuForwarder(LOCALE_SATSETUP_FE_SETUP, allow_start, NULL, this, "setup_frontend", CRCInput::convertDigitToKey(shortcut++)); mf->setHint("", LOCALE_MENU_HINT_SCAN_FESETUP); settings->addItem(mf); + } + + if (CFEManager::getInstance()->haveSat()) { + r_system = DVB_S; + + settings->addItem(new CMenuSeparator(CMenuSeparator::LINE | CMenuSeparator::STRING, LOCALE_SCANTS_PREVERENCES_RECEIVING_SYSTEM)); + + satSelect = new CMenuOptionStringChooser(LOCALE_SATSETUP_SATELLITE, scansettings.satName, true, this, CRCInput::RC_red, NEUTRINO_ICON_BUTTON_RED, true); + satSelect->setHint("", LOCALE_MENU_HINT_SCAN_SATELLITE); + + satOnOff = new CMenuWidget(LOCALE_SATSETUP_SATELLITE, NEUTRINO_ICON_SETTINGS, width); + +#if 0 + CMenuWidget * setupMenu = new CMenuWidget(LOCALE_SATSETUP_FE_SETUP, NEUTRINO_ICON_SETTINGS, width, MN_WIDGET_ID_SCAN_FE_SETUP); + addScanMenuFrontendSetup(setupMenu); + mf = new CMenuDForwarder(LOCALE_SATSETUP_FE_SETUP, allow_start, NULL, setupMenu, "", CRCInput::convertDigitToKey(shortcut++)); + mf->setHint("", LOCALE_MENU_HINT_SCAN_FESETUP); + settings->addItem(mf); +#endif /* add configured satellites to satSelect */ fillSatSelect(satSelect); + + //auto scan + char autoscan[64]; + std::string s_capt_part = g_Locale->getText(LOCALE_SATSETUP_SATELLITE); + snprintf(autoscan, 64, g_Locale->getText(LOCALE_SATSETUP_AUTO_SCAN), s_capt_part.c_str()); + + /* FIXME leak, satSelect added to both auto and manual scan, so one of them cannot be deleted */ + CMenuWidget * autoScan = new CMenuWidget(LOCALE_SERVICEMENU_SCANTS, NEUTRINO_ICON_SETTINGS, w/*width*/, MN_WIDGET_ID_SCAN_AUTO_SCAN); + addScanMenuAutoScan(autoScan); + mf = new CMenuForwarderNonLocalized(autoscan, true, NULL, autoScan, "", CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN); + mf->setHint("", LOCALE_MENU_HINT_SCAN_AUTO); + settings->addItem(mf); + + //manual scan + CMenuWidget * manualScan = new CMenuWidget(LOCALE_SATSETUP_MANUAL_SCAN, NEUTRINO_ICON_SETTINGS, w/*width*/, MN_WIDGET_ID_SCAN_MANUAL_SCAN); + addScanMenuManualScan(manualScan); + mf = new CMenuForwarder(LOCALE_SATSETUP_MANUAL_SCAN, true, NULL, manualScan, "", CRCInput::RC_yellow, NEUTRINO_ICON_BUTTON_YELLOW); + mf->setHint("", LOCALE_MENU_HINT_SCAN_MANUAL); + settings->addItem(mf); + //auto scan all + CMenuWidget * autoScanAll = new CMenuWidget(LOCALE_SATSETUP_AUTO_SCAN_ALL, NEUTRINO_ICON_SETTINGS, w/*width*/, MN_WIDGET_ID_SCAN_AUTO_SCAN_ALL); + addScanMenuAutoScanAll(autoScanAll); + fautoScanAll = new CMenuDForwarder(LOCALE_SATSETUP_AUTO_SCAN_ALL, true /*(dmode != NO_DISEQC)*/, NULL, autoScanAll, "", CRCInput::RC_blue, NEUTRINO_ICON_BUTTON_BLUE); + fautoScanAll->setHint("", LOCALE_MENU_HINT_SCAN_AUTOALL); + settings->addItem(fautoScanAll); +#ifdef ENABLE_FASTSCAN + //fast scan + CMenuWidget * fastScanMenu = new CMenuWidget(LOCALE_SATSETUP_FASTSCAN_HEAD, NEUTRINO_ICON_SETTINGS, MN_WIDGET_ID_SCAN_FAST_SCAN); + addScanMenuFastScan(fastScanMenu); + mf = new CMenuDForwarder(LOCALE_SATSETUP_FASTSCAN_HEAD, true, NULL, fastScanMenu, "", CRCInput::convertDigitToKey(shortcut++)); + mf->setHint("", LOCALE_MENU_HINT_SCAN_FAST); + settings->addItem(mf); +#endif } - else if (r_system == DVB_C || r_system == DVB_T) //cable - { - satSelect->setHint("", LOCALE_MENU_HINT_SCAN_CABLE); + if (CFEManager::getInstance()->haveCable()) { + r_system = DVB_C; + + cableSelect = new CMenuOptionStringChooser(LOCALE_CABLESETUP_PROVIDER, scansettings.cableName, true, this, CRCInput::RC_red, NEUTRINO_ICON_BUTTON_RED, true); + cableSelect->setHint("", LOCALE_MENU_HINT_SCAN_CABLE); //-------------------------------------------------------------- settings->addItem(GenericMenuSeparatorLine); //-------------------------------------------------------------- - fillCableSelect(satSelect); + fillCableSelect(cableSelect); //tune timeout - CMenuOptionNumberChooser * nc = new CMenuOptionNumberChooser(LOCALE_EXTRA_ZAPIT_FE_TIMEOUT, (int *)&zapitCfg.feTimeout, true, 6, 100); - nc->setHint("", LOCALE_MENU_HINT_SCAN_FETIMEOUT); - settings->addItem(nc); - if(CFEManager::getInstance()->getFrontendCount() > 1) { - femode = CFEManager::getInstance()->getMode(); - mc = new CMenuOptionChooser(LOCALE_SATSETUP_FE_MODE, (int *)&femode, SATSETUP_FRONTEND_MODE, 2, true, this); - mc = new CMenuOptionChooser(LOCALE_SCANTS_BOUQUET, (int *)&scansettings.bouquetMode, SCANTS_BOUQUET_OPTIONS, SCANTS_BOUQUET_OPTION_COUNT, true, NULL, CRCInput::convertDigitToKey(shortcut++), "", true); - mc->setHint("", LOCALE_MENU_HINT_SCAN_FEMODE); - settings->addItem(mc); + if(CFEManager::getInstance()->getFrontendCount() <= 1) { + CMenuOptionNumberChooser * nc = new CMenuOptionNumberChooser(LOCALE_EXTRA_ZAPIT_FE_TIMEOUT, (int *)&zapitCfg.feTimeout, true, 6, 100); + nc->setHint("", LOCALE_MENU_HINT_SCAN_FETIMEOUT); + settings->addItem(nc); } nid = new CIntInput(LOCALE_SATSETUP_CABLE_NID, (int&) scansettings.cable_nid, 5, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE); + + //auto scan + char autoscan[64]; + std::string s_capt_part = g_Locale->getText(LOCALE_CABLESETUP_PROVIDER); + snprintf(autoscan, 64, g_Locale->getText(LOCALE_SATSETUP_AUTO_SCAN), s_capt_part.c_str()); + bool have_sat = CFEManager::getInstance()->haveSat(); + + /* FIXME leak, satSelect added to both auto and manual scan, so one of them cannot be deleted */ + CMenuWidget * autoScan = new CMenuWidget(LOCALE_SERVICEMENU_SCANTS, NEUTRINO_ICON_SETTINGS, w/*width*/, MN_WIDGET_ID_SCAN_AUTO_SCAN); + addScanMenuAutoScan(autoScan); + mf = new CMenuForwarderNonLocalized(autoscan, true, NULL, autoScan, "", have_sat ? CRCInput::RC_nokey : CRCInput::RC_green, have_sat ? NULL : NEUTRINO_ICON_BUTTON_GREEN); + mf->setHint("", LOCALE_MENU_HINT_SCAN_AUTO); + settings->addItem(mf); + + //manual scan + CMenuWidget * manualScan = new CMenuWidget(LOCALE_SATSETUP_MANUAL_SCAN, NEUTRINO_ICON_SETTINGS, w/*width*/, MN_WIDGET_ID_SCAN_MANUAL_SCAN); + addScanMenuManualScan(manualScan); + mf = new CMenuForwarder(LOCALE_SATSETUP_MANUAL_SCAN, true, NULL, manualScan, "", have_sat ? CRCInput::RC_nokey : CRCInput::RC_yellow, have_sat ? NULL : NEUTRINO_ICON_BUTTON_YELLOW); + mf->setHint("", LOCALE_MENU_HINT_SCAN_MANUAL); + settings->addItem(mf); + //simple cable scan + CMenuWidget * cableScan = new CMenuWidget(LOCALE_SATSETUP_CABLE, NEUTRINO_ICON_SETTINGS, w/*width*/, MN_WIDGET_ID_SCAN_CABLE_SCAN); + addScanMenuCable(cableScan); + CMenuForwarder * fcableScan = new CMenuDForwarder(LOCALE_SATSETUP_CABLE, true, NULL, cableScan, "", have_sat ? CRCInput::RC_nokey : CRCInput::RC_blue, have_sat ? NULL : NEUTRINO_ICON_BUTTON_BLUE); + fcableScan->setHint("", LOCALE_MENU_HINT_SCAN_CABLE_SIMPLE); + settings->addItem(fcableScan); } - - fe_type_list_t other_fe = CFEManager::getInstance()->getOtherFE(); - if (! other_fe.empty()) - { - int i = 0; - for (int j = 0; j < SATSETUP_FRONTEND_TYPE_COUNT; j++) - { - if ((fe_type_t)SATSETUP_FRONTEND_TYPE[j].key != fetype && - other_fe.find((fe_type_t)SATSETUP_FRONTEND_TYPE[j].key) == other_fe.end()) - continue; - key[i] = SATSETUP_FRONTEND_TYPE[j]; - i++; - } - - if (i > 0) { - mc = new CMenuOptionChooser(LOCALE_SATSETUP_FE_TYPE, (int *)&fetype, key, i, true, this, CRCInput::RC_nokey, "", true); - mc->setHint("", LOCALE_MENU_HINT_FE_TYPE); - settings->addItem(mc); - } - } - +#if 0 //-------------------------------------------------------------- settings->addItem(new CMenuSeparator(CMenuSeparator::LINE | CMenuSeparator::STRING, LOCALE_SCANTS_PREVERENCES_SCAN)); //-------------------------------------------------------------- @@ -516,20 +564,9 @@ int CScanSetup::showScanMenu() fcableScan->setHint("", LOCALE_MENU_HINT_SCAN_CABLE_SIMPLE); settings->addItem(fcableScan); } - +#endif int res = settings->exec(NULL, ""); - if (fetype != CFEManager::getInstance()->getFE(0)->getInfo()->type) - { - int result = ShowLocalizedMessage(LOCALE_SATSETUP_FE_TYPE, LOCALE_SATSETUP_FE_TYPE_CONFIRM, CMessageBox::mbrNo, CMessageBox::mbYes|CMessageBox::mbNo); - - if (result == CMessageBox::mbrYes) - { - CFEManager::getInstance()->setFrontendType(fetype); - CFEManager::getInstance()->saveSettings(true); - CNeutrinoApp::getInstance()->exec(NULL, "restart"); - } - } //delete satSelect; delete satOnOff; delete settings; @@ -537,44 +574,74 @@ int CScanSetup::showScanMenu() return res; } -void CScanSetup::addScanMenuFrontendSetup(CMenuWidget * setupMenu) +neutrino_locale_t CScanSetup::getModeLocale(int mode) +{ + neutrino_locale_t lmode = LOCALE_SATSETUP_FE_MODE_UNUSED; + if (mode == CFrontend::FE_MODE_INDEPENDENT) + lmode = LOCALE_SATSETUP_FE_MODE_INDEPENDENT; + else if (mode == CFrontend::FE_MODE_MASTER) + lmode = LOCALE_SATSETUP_FE_MODE_MASTER; + else if (mode == CFrontend::FE_MODE_LINK_LOOP) + lmode = LOCALE_SATSETUP_FE_MODE_LINK_LOOP; + else if (mode == CFrontend::FE_MODE_LINK_TWIN) + lmode = LOCALE_SATSETUP_FE_MODE_LINK_TWIN; + + return lmode; +} + +int CScanSetup::showScanMenuFrontendSetup() { CMenuForwarder * mf; int shortcut = 1; - femode = CFEManager::getInstance()->getMode(); + fe_restart = false; + CMenuWidget * setupMenu = new CMenuWidget(LOCALE_SATSETUP_FE_SETUP, NEUTRINO_ICON_SETTINGS, width, MN_WIDGET_ID_SCAN_FE_SETUP); setupMenu->addIntroItems(); int count = CFEManager::getInstance()->getFrontendCount(); - CMenuOptionChooser * mc = new CMenuOptionChooser(LOCALE_SATSETUP_FE_MODE, (int *)&femode, SATSETUP_FRONTEND_MODE, SATSETUP_FRONTEND_MODE_COUNT, allow_start && (count > 1), this, CRCInput::RC_red, NEUTRINO_ICON_BUTTON_RED, true); - mc->setHint("", LOCALE_MENU_HINT_SCAN_FEMODE); - setupMenu->addItem(mc); - CMenuOptionNumberChooser * nc = new CMenuOptionNumberChooser(LOCALE_EXTRA_ZAPIT_FE_TIMEOUT, (int *)&zapitCfg.feTimeout, true, 6, 100); - nc->setHint("", LOCALE_MENU_HINT_SCAN_FETIMEOUT); - setupMenu->addItem(nc); - for(int i = 0; i < count; i++) { CFrontend * fe = CFEManager::getInstance()->getFE(i); char tmp[32]; snprintf(tmp, sizeof(tmp), "config_frontend%d", i); + char name[255]; snprintf(name, sizeof(name), "%s %d: %s", g_Locale->getText(LOCALE_SATSETUP_FE_SETUP), i+1, fe->getInfo()->name); - mf = new CMenuForwarderNonLocalized(name, ((i == 0) || (femode == CFEManager::FE_MODE_ALONE)), NULL, this, tmp, - (i == 0) ? CRCInput::RC_green : CRCInput::RC_yellow, (i == 0) ? NEUTRINO_ICON_BUTTON_GREEN : NEUTRINO_ICON_BUTTON_YELLOW); + const char * icon = NULL; + neutrino_msg_t key = CRCInput::RC_nokey; + if (i == 0) { + key = CRCInput::RC_red; + icon = NEUTRINO_ICON_BUTTON_RED; + } else if (i == 1) { + key = CRCInput::RC_green; + icon = NEUTRINO_ICON_BUTTON_GREEN; + } else if (i == 2) { + key = CRCInput::RC_yellow; + icon = NEUTRINO_ICON_BUTTON_YELLOW; + } else if (i == 3) { + key = CRCInput::RC_blue; + icon = NEUTRINO_ICON_BUTTON_BLUE; + } + + modestr[i] = g_Locale->getText(getModeLocale(fe->getMode())); + mf = new CMenuForwarderNonLocalized(name, true, modestr[i], this, tmp, key, icon); mf->setHint("", LOCALE_MENU_HINT_SCAN_SETUP_FE); setupMenu->addItem(mf); if(i != 0) frontendSetup = mf; } + CMenuOptionNumberChooser * nc = new CMenuOptionNumberChooser(LOCALE_EXTRA_ZAPIT_FE_TIMEOUT, (int *)&zapitCfg.feTimeout, true, 6, 100); + nc->setHint("", LOCALE_MENU_HINT_SCAN_FETIMEOUT); + setupMenu->addItem(nc); + sprintf(zapit_lat, "%02.6f", zapitCfg.gotoXXLatitude); sprintf(zapit_long, "%02.6f", zapitCfg.gotoXXLongitude); setupMenu->addItem(new CMenuSeparator(CMenuSeparator::LINE | CMenuSeparator::STRING, LOCALE_SATSETUP_EXTENDED_MOTOR)); - mc = new CMenuOptionChooser(LOCALE_EXTRA_LADIRECTION, (int *)&zapitCfg.gotoXXLaDirection, OPTIONS_SOUTH0_NORTH1_OPTIONS, OPTIONS_SOUTH0_NORTH1_OPTION_COUNT, true, NULL, CRCInput::convertDigitToKey(shortcut++)); + CMenuOptionChooser * mc = new CMenuOptionChooser(LOCALE_EXTRA_LADIRECTION, (int *)&zapitCfg.gotoXXLaDirection, OPTIONS_SOUTH0_NORTH1_OPTIONS, OPTIONS_SOUTH0_NORTH1_OPTION_COUNT, true, NULL, CRCInput::convertDigitToKey(shortcut++)); mc->setHint("", LOCALE_MENU_HINT_SCAN_LADIRECTION); setupMenu->addItem(mc); @@ -595,6 +662,17 @@ void CScanSetup::addScanMenuFrontendSetup(CMenuWidget * setupMenu) nc = new CMenuOptionNumberChooser(LOCALE_SATSETUP_USALS_REPEAT, (int *)&zapitCfg.repeatUsals, true, 0, 10, NULL, 0, 0, LOCALE_OPTIONS_OFF); nc->setHint("", LOCALE_MENU_HINT_SCAN_USALS_REPEAT); setupMenu->addItem(nc); + + int res = setupMenu->exec(NULL, ""); + delete setupMenu; + if (fe_restart) { + fe_restart = false; + CFEManager::getInstance()->linkFrontends(true); + t_channel_id live_channel_id = CZapit::getInstance()->GetCurrentChannelID(); + if (live_channel_id) + CNeutrinoApp::getInstance()->channelList->zapTo_ChannelID(live_channel_id, true); + } + return res; } int CScanSetup::showFrontendSetup(int number) @@ -617,61 +695,142 @@ int CScanSetup::showFrontendSetup(int number) setupMenu->setSelected(feselected); setupMenu->addIntroItems(); - CMenuOptionChooser * mc = new CMenuOptionChooser(LOCALE_SATSETUP_DISEQC, (int *)&dmode, SATSETUP_DISEQC_OPTIONS, SATSETUP_DISEQC_OPTION_COUNT, allow_start, this, CRCInput::convertDigitToKey(shortcut++), "", true); - mc->setHint("", LOCALE_MENU_HINT_SCAN_DISEQCTYPE); - setupMenu->addItem(mc); + int fecount = CFEManager::getInstance()->getFrontendCount(); - ojDiseqcRepeats = new CMenuOptionNumberChooser(LOCALE_SATSETUP_DISEQCREPEAT, (int *)&fe_config.diseqcRepeats, (dmode != NO_DISEQC) && (dmode != DISEQC_ADVANCED) && (dmode != DISEQC_UNICABLE), 0, 2, NULL); - ojDiseqcRepeats->setHint("", LOCALE_MENU_HINT_SCAN_DISEQCREPEAT); - setupMenu->addItem(ojDiseqcRepeats); + femode = fe->getMode(); - CMenuWidget satToSelect(LOCALE_SATSETUP_SELECT_SAT, NEUTRINO_ICON_SETTINGS, width); - satToSelect.addIntroItems(); + char fename[fecount][255]; + CMenuOptionChooser::keyval_ext feselect[fecount]; + feselect[0].key = -1; + feselect[0].value = NONEXISTANT_LOCALE; + feselect[0].valname = "--"; - satellite_map_t & satmap = fe->getSatellites(); - for (sat_iterator_t sit = satmap.begin(); sit != satmap.end(); ++sit) - { - std::string satname = CServiceManager::getInstance()->GetSatelliteName(sit->first); - mc = new CMenuOptionChooser(satname.c_str(), &sit->second.configured, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true); - mc->setHint("", LOCALE_MENU_HINT_SCAN_SATENABLE); - satToSelect.addItem(mc); + femaster = -1; + int select_count = 0; + + /* by default, enable first 2 options */ + int mode_count = 2; + if (fe->getInfo()->type == FE_QPSK) { + /* enable master option, check if we have masters to enable link options */ + mode_count = 3; + for (int i = 0; i < fecount; i++) { + CFrontend * testfe = CFEManager::getInstance()->getFE(i); + if (i != fenumber && (fe->getType() == testfe->getType()) && (testfe->getMode() == CFrontend::FE_MODE_MASTER)) { + int num = testfe->getNumber(); + snprintf(fename[select_count], sizeof(fename[select_count]), "%d: %s", num+1, testfe->getInfo()->name); + feselect[select_count].key = num; + feselect[select_count].value = NONEXISTANT_LOCALE; + feselect[select_count].valname = fename[select_count]; + select_count++; + if (femaster < 0) + femaster = num; + } + } } - CMenuForwarder * mf = new CMenuForwarder(LOCALE_SATSETUP_SELECT_SAT, true, NULL, &satToSelect, "", CRCInput::convertDigitToKey(shortcut++)); - mf->setHint("", LOCALE_MENU_HINT_SCAN_SATADD); - setupMenu->addItem(mf); + /* if there are master(s), enable all options */ + if (select_count) + mode_count = SATSETUP_FRONTEND_MODE_COUNT; + else + select_count = 1; - //FIXME why fsatSetup not local variable ? - fsatSetup = new CMenuForwarder(LOCALE_SATSETUP_SAT_SETUP, true, NULL, this, "satsetup", CRCInput::convertDigitToKey(shortcut++)); - fsatSetup->setHint("", LOCALE_MENU_HINT_SCAN_SATSETUP); - setupMenu->addItem(fsatSetup); + bool enable = true; + /* disable mode option, if fe is master and there are links - prevent master mode change + and hence linked in undefined state */ + if (fe->hasLinks() || fecount == 1) + enable = false; - uniSetup = new CMenuForwarder(LOCALE_SATSETUP_UNI_SETTINGS, (dmode == DISEQC_UNICABLE), NULL, this, "unisetup", CRCInput::convertDigitToKey(shortcut++)); - setupMenu->addItem(uniSetup); + if (CFrontend::linked(femode)) + femaster = fe->getMaster(); - setupMenu->addItem(new CMenuSeparator(CMenuSeparator::LINE | CMenuSeparator::STRING, LOCALE_SATSETUP_EXTENDED_MOTOR)); - CMenuOptionNumberChooser * nc = new CMenuOptionNumberChooser(LOCALE_EXTRA_ZAPIT_MOTOR_SPEED, (int *)&fe_config.motorRotationSpeed, true, 0, 64, NULL); - nc->setHint("", LOCALE_MENU_HINT_SCAN_MOTOR_SPEED); - setupMenu->addItem(nc); - - mc = new CMenuOptionChooser(LOCALE_EXTRA_ZAPIT_HVOLTAGE, (int *)&fe_config.highVoltage, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true); - mc->setHint("", LOCALE_MENU_HINT_SCAN_MOTOR_18V); + CMenuOptionChooser * mc = new CMenuOptionChooser(LOCALE_SATSETUP_FE_MODE, (int *)&femode, SATSETUP_FRONTEND_MODE, mode_count, + enable, this, CRCInput::RC_red, NEUTRINO_ICON_BUTTON_RED, true); + mc->setHint("", LOCALE_MENU_HINT_SCAN_FEMODE); setupMenu->addItem(mc); - mc = new CMenuOptionChooser(LOCALE_SATSETUP_USE_USALS, &all_usals, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true, this); - mc->setHint("", LOCALE_MENU_HINT_SCAN_USALSALL); - setupMenu->addItem(mc); + if (fe->getInfo()->type == FE_QPSK) { + /* disable all but mode option for linked frontends */ + bool allow_moptions = !CFrontend::linked(femode) && femode != CFrontend::FE_MODE_UNUSED; - mf = new CMenuForwarder(LOCALE_MOTORCONTROL_HEAD, true, NULL, this, "satfind", CRCInput::RC_red, NEUTRINO_ICON_BUTTON_RED); - mf->setHint("", LOCALE_MENU_HINT_SCAN_SATFIND); - setupMenu->addItem(mf); + if (fecount > 1) { + /* link to master select */ + linkfe = new CMenuOptionChooser(LOCALE_SATSETUP_FE_MODE_MASTER, &femaster, feselect, select_count, CFrontend::linked(femode), this, CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN, true); + linkfe->setHint("", LOCALE_MENU_HINT_SCAN_FELINK); + setupMenu->addItem(linkfe); + } + /* diseqc type select */ + dtype = new CMenuOptionChooser(LOCALE_SATSETUP_DISEQC, (int *)&dmode, SATSETUP_DISEQC_OPTIONS, SATSETUP_DISEQC_OPTION_COUNT, + femode != CFrontend::FE_MODE_UNUSED && femode != CFrontend::FE_MODE_LINK_LOOP, + this, CRCInput::convertDigitToKey(shortcut++), "", true); + dtype->setHint("", LOCALE_MENU_HINT_SCAN_DISEQCTYPE); + setupMenu->addItem(dtype); + + /* diseqc repeats */ + ojDiseqcRepeats = new CMenuOptionNumberChooser(LOCALE_SATSETUP_DISEQCREPEAT, (int *)&fe_config.diseqcRepeats, allow_moptions && (dmode != NO_DISEQC) && (dmode != DISEQC_ADVANCED), 0, 2, NULL); + ojDiseqcRepeats->setHint("", LOCALE_MENU_HINT_SCAN_DISEQCREPEAT); + setupMenu->addItem(ojDiseqcRepeats); + + /* diseqc cmd order select */ + dorder = new CMenuOptionChooser(LOCALE_SATSETUP_DISEQC_ORDER, (int *)&fe_config.diseqc_order, DISEQC_ORDER_OPTIONS, DISEQC_ORDER_OPTION_COUNT, + allow_moptions && (dmode == DISEQC_ADVANCED), + this, CRCInput::convertDigitToKey(shortcut++), "", true); + dorder->setHint("", LOCALE_MENU_HINT_SCAN_DISEQCORDER); + setupMenu->addItem(dorder); + + CMenuWidget * satToSelect = new CMenuWidget(LOCALE_SATSETUP_SELECT_SAT, NEUTRINO_ICON_SETTINGS, width); + satToSelect->addIntroItems(); + + satellite_map_t & satmap = fe->getSatellites(); + for (sat_iterator_t sit = satmap.begin(); sit != satmap.end(); ++sit) + { + std::string satname = CServiceManager::getInstance()->GetSatelliteName(sit->first); + mc = new CMenuOptionChooser(satname.c_str(), &sit->second.configured, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true); + mc->setHint("", LOCALE_MENU_HINT_SCAN_SATENABLE); + satToSelect->addItem(mc); + } + fsatSelect = new CMenuForwarder(LOCALE_SATSETUP_SELECT_SAT, allow_moptions, NULL, satToSelect, "", CRCInput::convertDigitToKey(shortcut++)); + fsatSelect->setHint("", LOCALE_MENU_HINT_SCAN_SATADD); + setupMenu->addItem(fsatSelect); + + fsatSetup = new CMenuForwarder(LOCALE_SATSETUP_SAT_SETUP, allow_moptions, NULL, this, "satsetup", CRCInput::convertDigitToKey(shortcut++)); + fsatSetup->setHint("", LOCALE_MENU_HINT_SCAN_SATSETUP); + setupMenu->addItem(fsatSetup); + + uniSetup = new CMenuForwarder(LOCALE_SATSETUP_UNI_SETTINGS, (dmode == DISEQC_UNICABLE), NULL, this, "unisetup", CRCInput::convertDigitToKey(shortcut++)); + setupMenu->addItem(uniSetup); + + setupMenu->addItem(new CMenuSeparator(CMenuSeparator::LINE | CMenuSeparator::STRING, LOCALE_SATSETUP_EXTENDED_MOTOR)); + CMenuOptionNumberChooser * nc = new CMenuOptionNumberChooser(LOCALE_EXTRA_ZAPIT_MOTOR_SPEED, (int *)&fe_config.motorRotationSpeed, true, 0, 64, NULL); + nc->setHint("", LOCALE_MENU_HINT_SCAN_MOTOR_SPEED); + setupMenu->addItem(nc); + + mc = new CMenuOptionChooser(LOCALE_EXTRA_ZAPIT_HVOLTAGE, (int *)&fe_config.highVoltage, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true); + mc->setHint("", LOCALE_MENU_HINT_SCAN_MOTOR_18V); + setupMenu->addItem(mc); + + mc = new CMenuOptionChooser(LOCALE_SATSETUP_USE_USALS, &all_usals, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true, this); + mc->setHint("", LOCALE_MENU_HINT_SCAN_USALSALL); + setupMenu->addItem(mc); + + CMenuForwarder * mf = new CMenuForwarder(LOCALE_MOTORCONTROL_HEAD, true, NULL, this, "satfind", CRCInput::RC_blue, NEUTRINO_ICON_BUTTON_BLUE); + mf->setHint("", LOCALE_MENU_HINT_SCAN_SATFIND); + setupMenu->addItem(mf); + } int res = setupMenu->exec(NULL, ""); feselected = setupMenu->getSelected(); /* add configured satellites to satSelect in case they changed */ - fillSatSelect(satSelect); + if (fe->isSat()) + fillSatSelect(satSelect); delete setupMenu; + linkfe = NULL; + /* re-link in case mode changed, without fe init */ + CFEManager::getInstance()->linkFrontends(false); + /* copy settings from master, if it set and fe linked */ + CFEManager::getInstance()->copySettings(fe); + /* apply settings without write file */ + CFEManager::getInstance()->saveSettings(false); return res; } @@ -713,9 +872,9 @@ int CScanSetup::showScanMenuLnbSetup() CFrontend * fe = CFEManager::getInstance()->getFE(fenumber); char name[255]; - snprintf(name, sizeof(name), "%s %d: %s", g_Locale->getText(satprov_locale), fenumber+1, fe->getInfo()->name); + snprintf(name, sizeof(name), "%s %d: %s", g_Locale->getText(LOCALE_SATSETUP_SATELLITE), fenumber+1, fe->getInfo()->name); - CMenuWidget * sat_setup = new CMenuWidget(name /*satprov_locale*/, NEUTRINO_ICON_SETTINGS, width); + CMenuWidget * sat_setup = new CMenuWidget(name, NEUTRINO_ICON_SETTINGS, width); sat_setup->addIntroItems(); satellite_map_t & satmap = fe->getSatellites(); @@ -770,6 +929,10 @@ void CScanSetup::fillSatSelect(CMenuOptionStringChooser * select) int count = CFEManager::getInstance()->getFrontendCount(); for(int i = 0; i < count; i++) { CFrontend * fe = CFEManager::getInstance()->getFE(i); + + if (fe->getInfo()->type != FE_QPSK) + continue; + satellite_map_t & satmap = fe->getSatellites(); for (sat_iterator_t sit = satmap.begin(); sit != satmap.end(); ++sit) { tmpit = satpos.find(sit->first); @@ -778,17 +941,19 @@ void CScanSetup::fillSatSelect(CMenuOptionStringChooser * select) select->addOption(satname.c_str()); satpos.insert(sit->first); - if (!sfound && strcmp(scansettings.satNameNoDiseqc, satname.c_str()) == 0) + if (!sfound && strcmp(scansettings.satName, satname.c_str()) == 0) sfound = true; } } +#if 0 if(CFEManager::getInstance()->getMode() != CFEManager::FE_MODE_ALONE) break; +#endif } if(!sfound && !satpos.empty()) { tmpit = satpos.begin(); std::string satname = CServiceManager::getInstance()->GetSatelliteName(*tmpit); - snprintf(scansettings.satNameNoDiseqc, sizeof(scansettings.satNameNoDiseqc), "%s", satname.c_str()); + snprintf(scansettings.satName, sizeof(scansettings.satName), "%s", satname.c_str()); } satellite_map_t & satmap = CServiceManager::getInstance()->SatelliteList(); for (sat_iterator_t sit = satmap.begin(); sit != satmap.end(); sit++) { @@ -808,20 +973,25 @@ void CScanSetup::fillCableSelect(CMenuOptionStringChooser * select) //don't misunderstand the name "satSelect", in this context it's actually for cable providers satellite_map_t satmap = CServiceManager::getInstance()->SatelliteList(); bool sfound = false; + std::string fname; for (sat_iterator_t sit = satmap.begin(); sit != satmap.end(); sit++) { + if (sit->second.deltype != FE_QAM) + continue; + printf("Adding cable menu for %s position %d\n", sit->second.name.c_str(), sit->first); select->addOption(sit->second.name.c_str()); - if (!sfound && strcmp(scansettings.satNameNoDiseqc, sit->second.name.c_str()) == 0) + if (fname.empty()) + fname = sit->second.name; + + if (!sfound && strcmp(scansettings.cableName, sit->second.name.c_str()) == 0) sfound = true; dprintf(DEBUG_DEBUG, "got scanprovider (cable): %s\n", sit->second.name.c_str()); } - if (!sfound && !satmap.empty()) { - sat_iterator_t sit = satmap.begin(); - snprintf(scansettings.satNameNoDiseqc, sizeof(scansettings.satNameNoDiseqc), "%s", sit->second.name.c_str()); - } + if (!sfound && !fname.empty()) + snprintf(scansettings.cableName, sizeof(scansettings.cableName), "%s", fname.c_str()); } int CScanSetup::showScanMenuSatFind() @@ -830,13 +1000,16 @@ int CScanSetup::showScanMenuSatFind() int count = 0; CFrontend * fe = CFEManager::getInstance()->getFE(fenumber); char name[255]; + + r_system = DVB_S; + snprintf(name, sizeof(name), "%s %d: %s", g_Locale->getText(LOCALE_MOTORCONTROL_HEAD), fenumber+1, fe->getInfo()->name); CMenuWidget* sat_findMenu = new CMenuWidget(name /*LOCALE_MOTORCONTROL_HEAD*/, NEUTRINO_ICON_SETTINGS, width); sat_findMenu->addIntroItems(); - CMenuOptionStringChooser * feSatSelect = new CMenuOptionStringChooser(satprov_locale, scansettings.satNameNoDiseqc, true, NULL, CRCInput::RC_red, NEUTRINO_ICON_BUTTON_RED, true); + CMenuOptionStringChooser * feSatSelect = new CMenuOptionStringChooser(LOCALE_SATSETUP_SATELLITE, scansettings.satName, true, NULL, CRCInput::RC_red, NEUTRINO_ICON_BUTTON_RED, true); feSatSelect->setHint("", LOCALE_MENU_HINT_SCAN_SATSELECT); satellite_map_t & satmap = fe->getSatellites(); @@ -847,19 +1020,19 @@ int CScanSetup::showScanMenuSatFind() continue; std::string satname = CServiceManager::getInstance()->GetSatelliteName(sit->first); feSatSelect->addOption(satname.c_str()); - if (!sfound && strcmp(scansettings.satNameNoDiseqc, satname.c_str()) == 0) + if (!sfound && strcmp(scansettings.satName, satname.c_str()) == 0) sfound = true; if (!sfound && firstname.empty()) firstname = satname; count++; } if(count && !sfound) - snprintf(scansettings.satNameNoDiseqc, sizeof(scansettings.satNameNoDiseqc), "%s", firstname.c_str()); + snprintf(scansettings.satName, sizeof(scansettings.satName), "%s", firstname.c_str()); sat_findMenu->addItem(feSatSelect); CTPSelectHandler tpSelect; - CMenuForwarder * mf = new CMenuForwarder(LOCALE_SCANTS_SELECT_TP, true, NULL, &tpSelect, "test", CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN); + CMenuForwarder * mf = new CMenuForwarder(LOCALE_SCANTS_SELECT_TP, true, NULL, &tpSelect, "sat", CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN); mf->setHint("", LOCALE_MENU_HINT_SCAN_TPSELECT); sat_findMenu->addItem(mf); sat_findMenu->addItem(GenericMenuSeparatorLine); @@ -946,17 +1119,17 @@ void CScanSetup::addScanMenuManualScan(CMenuWidget *manual_Scan) manual_Scan->addIntroItems(); //---------------------------------------------------------------------- - manual_Scan->addItem(satSelect); - if (r_system == DVB_C) { //cable -#if 0 - CIntInput* nid = new CIntInput(LOCALE_SATSETUP_CABLE_NID, (int&) scansettings.cable_nid, 5, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE); - mf = new CMenuDForwarder(LOCALE_SATSETUP_CABLE_NID, true, nid->getValue(), nid); -#endif + if (r_system == DVB_C) { + manual_Scan->addItem(cableSelect); mf = new CMenuForwarder(LOCALE_SATSETUP_CABLE_NID, true, nid->getValue(), nid); mf->setHint("", LOCALE_MENU_HINT_SCAN_NID); manual_Scan->addItem(mf); + mf = new CMenuDForwarder(LOCALE_SCANTS_SELECT_TP, true, NULL, new CTPSelectHandler(), "cable", CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN); + } else { + manual_Scan->addItem(satSelect); + mf = new CMenuDForwarder(LOCALE_SCANTS_SELECT_TP, true, NULL, new CTPSelectHandler(), "sat", CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN); } - mf = new CMenuDForwarder(LOCALE_SCANTS_SELECT_TP, true, NULL, new CTPSelectHandler()/*tpSelect*/, "test", CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN); + mf->setHint("", LOCALE_MENU_HINT_SCAN_TPSELECT); manual_Scan->addItem(mf); @@ -967,11 +1140,11 @@ void CScanSetup::addScanMenuManualScan(CMenuWidget *manual_Scan) //---------------------------------------------------------------------- manual_Scan->addItem(GenericMenuSeparatorLine); - mf = new CMenuForwarder(LOCALE_SCANTS_TEST, allow_start, NULL, this, "test", CRCInput::RC_yellow, NEUTRINO_ICON_BUTTON_YELLOW); + mf = new CMenuForwarder(LOCALE_SCANTS_TEST, allow_start, NULL, this, r_system == DVB_C ? "ctest" : "stest", CRCInput::RC_yellow, NEUTRINO_ICON_BUTTON_YELLOW); mf->setHint("", LOCALE_MENU_HINT_SCAN_TEST); manual_Scan->addItem(mf); - mf = new CMenuForwarder(LOCALE_SCANTS_STARTNOW, allow_start, NULL, this, "manual", CRCInput::RC_blue, NEUTRINO_ICON_BUTTON_BLUE); + mf = new CMenuForwarder(LOCALE_SCANTS_STARTNOW, allow_start, NULL, this, r_system == DVB_C ? "cmanual" : "smanual", CRCInput::RC_blue, NEUTRINO_ICON_BUTTON_BLUE); mf->setHint("", LOCALE_MENU_HINT_SCAN_START); manual_Scan->addItem(mf); } @@ -982,7 +1155,7 @@ void CScanSetup::addScanMenuAutoScanAll(CMenuWidget *auto_ScanAll) printf("[neutrino] CScanSetup call %s...\n", __FUNCTION__); auto_ScanAll->addIntroItems(); //---------------------------------------------------------------------- - CMenuForwarder * mf = new CMenuForwarder(satprov_locale, true, NULL, satOnOff, "", CRCInput::RC_red, NEUTRINO_ICON_BUTTON_RED); + CMenuForwarder * mf = new CMenuForwarder(LOCALE_SATSETUP_SATELLITE, true, NULL, satOnOff, "", CRCInput::RC_red, NEUTRINO_ICON_BUTTON_RED); mf->setHint("", LOCALE_MENU_HINT_SCAN_AUTOALL_SELECT); auto_ScanAll->addItem(mf); @@ -991,7 +1164,7 @@ void CScanSetup::addScanMenuAutoScanAll(CMenuWidget *auto_ScanAll) addListFlagsItems(auto_ScanAll, 1); //---------------------------------------------------------------------- auto_ScanAll->addItem(GenericMenuSeparatorLine); - mf = new CMenuForwarder(LOCALE_SCANTS_STARTNOW, allow_start, NULL, this, "all", CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN); + mf = new CMenuForwarder(LOCALE_SCANTS_STARTNOW, allow_start, NULL, this, "sall", CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN); mf->setHint("", LOCALE_MENU_HINT_SCAN_START); auto_ScanAll->addItem(mf); } @@ -1029,7 +1202,7 @@ void CScanSetup::addScanMenuFastScan(CMenuWidget *fast_ScanMenu) fast_ScanMenu->addItem(fastType); //---------------------------------------------------------------------- fast_ScanMenu->addItem(GenericMenuSeparatorLine); - CMenuForwarder * mf = new CMenuForwarder(LOCALE_SCANTS_STARTNOW, allow_start, NULL, this, "fast", CRCInput::RC_yellow, NEUTRINO_ICON_BUTTON_YELLOW); + CMenuForwarder * mf = new CMenuForwarder(LOCALE_SCANTS_STARTNOW, allow_start, NULL, this, "sfast", CRCInput::RC_yellow, NEUTRINO_ICON_BUTTON_YELLOW); mf->setHint("", LOCALE_MENU_HINT_SCAN_START); fast_ScanMenu->addItem(mf); } @@ -1042,22 +1215,20 @@ void CScanSetup::addScanMenuAutoScan(CMenuWidget *auto_Scan) CMenuForwarder * mf; auto_Scan->addIntroItems(); - auto_Scan->addItem(satSelect); if (r_system == DVB_C) { //cable -#if 0 - CIntInput* nid = new CIntInput(LOCALE_SATSETUP_CABLE_NID, (int&) scansettings.cable_nid, 5, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE); - mf = new CMenuDForwarder(LOCALE_SATSETUP_CABLE_NID, true, nid->getValue(), nid); -#endif + auto_Scan->addItem(cableSelect); mf = new CMenuForwarder(LOCALE_SATSETUP_CABLE_NID, true, nid->getValue(), nid); mf->setHint("", LOCALE_MENU_HINT_SCAN_NID); auto_Scan->addItem(mf); - } + } else + auto_Scan->addItem(satSelect); + auto_Scan->addItem(GenericMenuSeparatorLine); //---------------------------------------------------------------------- addListFlagsItems(auto_Scan, 1); //---------------------------------------------------------------------- auto_Scan->addItem(GenericMenuSeparatorLine); - mf = new CMenuForwarder(LOCALE_SCANTS_STARTNOW, allow_start, NULL, this, "auto", CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN); + mf = new CMenuForwarder(LOCALE_SCANTS_STARTNOW, allow_start, NULL, this, r_system == DVB_C ? "cauto" : "sauto", CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN); mf->setHint("", LOCALE_MENU_HINT_SCAN_START); auto_Scan->addItem(mf); } @@ -1071,7 +1242,7 @@ void CScanSetup::addScanMenuCable(CMenuWidget *menu) menu->addIntroItems(); //---------------------------------------------------------------------- - CMenuOptionStringChooser * select = new CMenuOptionStringChooser(satprov_locale, scansettings.satNameNoDiseqc, true, this, CRCInput::RC_red, NEUTRINO_ICON_BUTTON_RED, true); + CMenuOptionStringChooser * select = new CMenuOptionStringChooser(LOCALE_CABLESETUP_PROVIDER, scansettings.cableName, true, this, CRCInput::RC_red, NEUTRINO_ICON_BUTTON_RED, true); fillCableSelect(select); select->setHint("", LOCALE_MENU_HINT_SCAN_CABLE); menu->addItem(select); @@ -1080,21 +1251,21 @@ void CScanSetup::addScanMenuCable(CMenuWidget *menu) mf->setHint("", LOCALE_MENU_HINT_SCAN_NID); menu->addItem(mf); - mf = new CMenuDForwarder(LOCALE_SCANTS_SELECT_TP, true, NULL, new CTPSelectHandler(), "test", CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN); + mf = new CMenuDForwarder(LOCALE_SCANTS_SELECT_TP, true, NULL, new CTPSelectHandler(), "cable", CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN); mf->setHint("", LOCALE_MENU_HINT_SCAN_TPSELECT); menu->addItem(mf); menu->addItem(GenericMenuSeparatorLine); - CStringInput *freq = new CStringInput(LOCALE_EXTRA_TP_FREQ, (char *) scansettings.TP_freq, freq_length, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE, "0123456789"); - CMenuForwarder *Freq = new CMenuDForwarder(LOCALE_EXTRA_TP_FREQ, true, scansettings.TP_freq, freq, "", CRCInput::convertDigitToKey(shortCut++)); + CStringInput *freq = new CStringInput(LOCALE_EXTRA_TP_FREQ, (char *) scansettings.cable_TP_freq, freq_length, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE, "0123456789"); + CMenuForwarder *Freq = new CMenuDForwarder(LOCALE_EXTRA_TP_FREQ, true, scansettings.cable_TP_freq, freq, "", CRCInput::convertDigitToKey(shortCut++)); Freq->setHint("", LOCALE_MENU_HINT_SCAN_FREQ); - CStringInput *rate = new CStringInput(LOCALE_EXTRA_TP_RATE, (char *) scansettings.TP_rate, 8, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE, "0123456789"); - CMenuForwarder *Rate = new CMenuDForwarder(LOCALE_EXTRA_TP_RATE, true, scansettings.TP_rate, rate, "", CRCInput::convertDigitToKey(shortCut++)); + CStringInput *rate = new CStringInput(LOCALE_EXTRA_TP_RATE, (char *) scansettings.cable_TP_rate, 8, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE, "0123456789"); + CMenuForwarder *Rate = new CMenuDForwarder(LOCALE_EXTRA_TP_RATE, true, scansettings.cable_TP_rate, rate, "", CRCInput::convertDigitToKey(shortCut++)); Rate->setHint("", LOCALE_MENU_HINT_SCAN_RATE); - CMenuOptionChooser * mod_pol = new CMenuOptionChooser(LOCALE_EXTRA_TP_MOD, (int *)&scansettings.TP_mod, SATSETUP_SCANTP_MOD, SATSETUP_SCANTP_MOD_COUNT, true, NULL, CRCInput::convertDigitToKey(shortCut++)); + CMenuOptionChooser * mod_pol = new CMenuOptionChooser(LOCALE_EXTRA_TP_MOD, (int *)&scansettings.cable_TP_mod, SATSETUP_SCANTP_MOD, SATSETUP_SCANTP_MOD_COUNT, true, NULL, CRCInput::convertDigitToKey(shortCut++)); mod_pol->setHint("", LOCALE_MENU_HINT_SCAN_MOD); menu->addItem(Freq); @@ -1126,29 +1297,33 @@ int CScanSetup::addScanOptionsItems(CMenuWidget *options_menu, const int &shortc printf("[neutrino] CScanSetup call %s...\n", __FUNCTION__); int shortCut = shortcut; - CMenuOptionChooser *fec = NULL; - CMenuOptionChooser *mod_pol= NULL; - CStringInput *rate = NULL; - CMenuForwarder *Rate = NULL; - - CStringInput *freq = new CStringInput(LOCALE_EXTRA_TP_FREQ, (char *) scansettings.TP_freq, freq_length, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE, "0123456789"); - CMenuForwarder *Freq = new CMenuDForwarder(LOCALE_EXTRA_TP_FREQ, true, scansettings.TP_freq, freq, "", CRCInput::convertDigitToKey(shortCut++)); - Freq->setHint("", LOCALE_MENU_HINT_SCAN_FREQ); - - if (r_system != DVB_T) { - rate = new CStringInput(LOCALE_EXTRA_TP_RATE, (char *) scansettings.TP_rate, 8, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE, "0123456789"); - Rate = new CMenuDForwarder(LOCALE_EXTRA_TP_RATE, true, scansettings.TP_rate, rate, "", CRCInput::convertDigitToKey(shortCut++)); - Rate->setHint("", LOCALE_MENU_HINT_SCAN_RATE); - } - /* TODO: DVB-T scan options */ + + CMenuOptionChooser *fec = NULL; + CMenuOptionChooser *mod_pol = NULL; + CMenuForwarder *Freq = NULL; + CMenuForwarder *Rate = NULL; if (r_system == DVB_S) { - fec = new CMenuOptionChooser(LOCALE_EXTRA_TP_FEC, (int *)&scansettings.TP_fec, SATSETUP_SCANTP_FEC, fec_count, true, NULL, CRCInput::convertDigitToKey(shortCut++), "", true); + CStringInput *freq = new CStringInput(LOCALE_EXTRA_TP_FREQ, (char *) scansettings.sat_TP_freq, freq_length, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE, "0123456789"); + Freq = new CMenuDForwarder(LOCALE_EXTRA_TP_FREQ, true, scansettings.sat_TP_freq, freq, "", CRCInput::convertDigitToKey(shortCut++)); + Freq->setHint("", LOCALE_MENU_HINT_SCAN_FREQ); + + CStringInput *rate = new CStringInput(LOCALE_EXTRA_TP_RATE, (char *) scansettings.sat_TP_rate, 8, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE, "0123456789"); + Rate = new CMenuDForwarder(LOCALE_EXTRA_TP_RATE, true, scansettings.sat_TP_rate, rate, "", CRCInput::convertDigitToKey(shortCut++)); + Rate->setHint("", LOCALE_MENU_HINT_SCAN_RATE); + fec = new CMenuOptionChooser(LOCALE_EXTRA_TP_FEC, (int *)&scansettings.sat_TP_fec, SATSETUP_SCANTP_FEC, fec_count, true, NULL, CRCInput::convertDigitToKey(shortCut++), "", true); fec->setHint("", LOCALE_MENU_HINT_SCAN_FEC); - mod_pol = new CMenuOptionChooser(LOCALE_EXTRA_TP_POL, (int *)&scansettings.TP_pol, SATSETUP_SCANTP_POL, SATSETUP_SCANTP_POL_COUNT, true, NULL, CRCInput::convertDigitToKey(shortCut++)); + mod_pol = new CMenuOptionChooser(LOCALE_EXTRA_TP_POL, (int *)&scansettings.sat_TP_pol, SATSETUP_SCANTP_POL, SATSETUP_SCANTP_POL_COUNT, true, NULL, CRCInput::convertDigitToKey(shortCut++)); mod_pol->setHint("", LOCALE_MENU_HINT_SCAN_POL); } else if (r_system == DVB_C) { - mod_pol = new CMenuOptionChooser(LOCALE_EXTRA_TP_MOD, (int *)&scansettings.TP_mod, SATSETUP_SCANTP_MOD, SATSETUP_SCANTP_MOD_COUNT, true, NULL, CRCInput::convertDigitToKey(shortCut++)); + CStringInput *freq = new CStringInput(LOCALE_EXTRA_TP_FREQ, (char *) scansettings.cable_TP_freq, freq_length, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE, "0123456789"); + Freq = new CMenuDForwarder(LOCALE_EXTRA_TP_FREQ, true, scansettings.cable_TP_freq, freq, "", CRCInput::convertDigitToKey(shortCut++)); + Freq->setHint("", LOCALE_MENU_HINT_SCAN_FREQ); + + CStringInput *rate = new CStringInput(LOCALE_EXTRA_TP_RATE, (char *) scansettings.cable_TP_rate, 8, NONEXISTANT_LOCALE, NONEXISTANT_LOCALE, "0123456789"); + Rate = new CMenuDForwarder(LOCALE_EXTRA_TP_RATE, true, scansettings.cable_TP_rate, rate, "", CRCInput::convertDigitToKey(shortCut++)); + Rate->setHint("", LOCALE_MENU_HINT_SCAN_RATE); + mod_pol = new CMenuOptionChooser(LOCALE_EXTRA_TP_MOD, (int *)&scansettings.cable_TP_mod, SATSETUP_SCANTP_MOD, SATSETUP_SCANTP_MOD_COUNT, true, NULL, CRCInput::convertDigitToKey(shortCut++)); mod_pol->setHint("", LOCALE_MENU_HINT_SCAN_MOD); } @@ -1219,6 +1394,7 @@ void CScanSetup::saveScanSetup() CZapit::getInstance()->SetConfig(&zapitCfg); CFEManager::getInstance()->saveSettings(true); + //CFEManager::getInstance()->linkFrontends(); } bool CScanSetup::changeNotify(const neutrino_locale_t OptionName, void * /*data*/) @@ -1234,8 +1410,19 @@ bool CScanSetup::changeNotify(const neutrino_locale_t OptionName, void * /*data* } } else if(ARE_LOCALES_EQUAL(OptionName, LOCALE_SATSETUP_DISEQC)) { - printf("[neutrino] CScanSetup::%s: diseqc %d \n", __FUNCTION__, dmode); - //FIXME 2 frontends ?? + printf("[neutrino] CScanSetup::%s: diseqc %d fenumber %d\n", __FUNCTION__, dmode, fenumber); + CFrontend * fe = CFEManager::getInstance()->getFE(fenumber); + if (fe->getDiseqcType() == (diseqc_t)dmode) + return ret; + + fe_restart = true; + fe->setDiseqcType((diseqc_t) dmode); + fe->setTsidOnid(0); + +#if 0 + if(femode != CFEManager::FE_MODE_ALONE) + CFEManager::getInstance()->saveSettings(true); + fautoScanAll->setActive(dmode != NO_DISEQC); uniSetup->setActive(dmode == DISEQC_UNICABLE); if (dmode == NO_DISEQC || dmode == DISEQC_UNICABLE) { @@ -1247,11 +1434,16 @@ bool CScanSetup::changeNotify(const neutrino_locale_t OptionName, void * /*data* else if(dmode == DISEQC_ADVANCED) { ojDiseqcRepeats->setActive(true); } - CFrontend * fe = CFEManager::getInstance()->getFE(fenumber); - fe->setDiseqcType((diseqc_t) dmode); +#endif + uniSetup->setActive(dmode == DISEQC_UNICABLE); + bool enable = (dmode < DISEQC_ADVANCED) && (dmode != NO_DISEQC); + ojDiseqcRepeats->setActive(enable && !CFrontend::linked(femode) && femode != CFrontend::FE_MODE_UNUSED); + dorder->setActive(!CFrontend::linked(femode) && femode != CFrontend::FE_MODE_UNUSED && dmode == DISEQC_ADVANCED); + } else if(ARE_LOCALES_EQUAL(OptionName, LOCALE_SATSETUP_FE_MODE)) { - printf("[neutrino] CScanSetup::%s: fe mode %d \n", __FUNCTION__, femode); + printf("[neutrino] CScanSetup::%s: fe%d mode %d master %d\n", __FUNCTION__, fenumber, femode, femaster); +#if 0 /* cable dont have this menu */ if(frontendSetup) frontendSetup->setActive(femode == CFEManager::FE_MODE_ALONE); @@ -1261,13 +1453,43 @@ bool CScanSetup::changeNotify(const neutrino_locale_t OptionName, void * /*data* CFEManager::getInstance()->saveSettings(true); if (r_system == DVB_S) //sat fillSatSelect(satSelect); +#endif + CFrontend * fe = CFEManager::getInstance()->getFE(fenumber); + if (fe->getMode() == femode) + return ret; + + modestr[fenumber] = g_Locale->getText(getModeLocale(femode)); + fe_restart = true; + fe->setMode(femode); + if (fe && fe->getType() == FE_QPSK) { + if (linkfe) + linkfe->setActive(CFrontend::linked(femode)); + /* leave diseqc type enabled for TWIN in case user need different unicable setup */ + dtype->setActive(femode != CFrontend::FE_MODE_UNUSED && femode != CFrontend::FE_MODE_LINK_LOOP); + uniSetup->setActive(dmode == DISEQC_UNICABLE && femode != CFrontend::FE_MODE_UNUSED && femode != CFrontend::FE_MODE_LINK_LOOP); + dorder->setActive(!CFrontend::linked(femode) && femode != CFrontend::FE_MODE_UNUSED && dmode == DISEQC_ADVANCED); + fsatSelect->setActive(!CFrontend::linked(femode) && femode != CFrontend::FE_MODE_UNUSED); + fsatSetup->setActive(!CFrontend::linked(femode) && femode != CFrontend::FE_MODE_UNUSED); + bool enable = (dmode < DISEQC_ADVANCED) && (dmode != NO_DISEQC); + ojDiseqcRepeats->setActive(!CFrontend::linked(femode) && femode != CFrontend::FE_MODE_UNUSED && enable); + + /* if mode changed, set current master too */ + if (femaster >= 0) + fe->setMaster(femaster); + } + } + else if(ARE_LOCALES_EQUAL(OptionName, LOCALE_SATSETUP_FE_MODE_MASTER)) { + printf("[neutrino] CScanSetup::%s: fe%d link %d \n", __FUNCTION__, fenumber, femaster); + CFrontend * fe = CFEManager::getInstance()->getFE(fenumber); + if (fe) + fe->setMaster(femaster); } else if(ARE_LOCALES_EQUAL(OptionName, LOCALE_CABLESETUP_PROVIDER)) { - printf("[neutrino] CScanSetup::%s: new provider: [%s]\n", __FUNCTION__, scansettings.satNameNoDiseqc); + printf("[neutrino] CScanSetup::%s: new provider: [%s]\n", __FUNCTION__, scansettings.cableName); satellite_map_t & satmap = CServiceManager::getInstance()->SatelliteList(); for (sat_iterator_t sit = satmap.begin(); sit != satmap.end(); sit++) { - if (strcmp(scansettings.satNameNoDiseqc, sit->second.name.c_str()) == 0) { + if (strcmp(scansettings.cableName, sit->second.name.c_str()) == 0) { if(sit->second.cable_nid > 0) { scansettings.cable_nid = sit->second.cable_nid; nid->updateValue(); @@ -1289,23 +1511,26 @@ void CScanSetup::updateManualSettings() { CZapitChannel * channel = CZapit::getInstance()->GetCurrentChannel(); if(channel) { - strncpy(scansettings.satNameNoDiseqc, - CServiceManager::getInstance()->GetSatelliteName(channel->getSatellitePosition()).c_str(), 50); transponder_list_t::iterator tI; tI = transponders.find(channel->getTransponderId()); if(tI != transponders.end()) { - sprintf(scansettings.TP_freq, "%d", tI->second.feparams.dvb_feparams.frequency); CFrontend * frontend = CFEManager::getInstance()->getLiveFE(); - switch (frontend->getInfo()->type) { + switch (frontend->getType()) { case FE_QPSK: - sprintf(scansettings.TP_rate, "%d", tI->second.feparams.dvb_feparams.u.qpsk.symbol_rate); - scansettings.TP_fec = tI->second.feparams.dvb_feparams.u.qpsk.fec_inner; - scansettings.TP_pol = tI->second.polarization; + sprintf(scansettings.sat_TP_freq, "%d", tI->second.feparams.dvb_feparams.frequency); + sprintf(scansettings.sat_TP_rate, "%d", tI->second.feparams.dvb_feparams.u.qpsk.symbol_rate); + scansettings.sat_TP_fec = tI->second.feparams.dvb_feparams.u.qpsk.fec_inner; + scansettings.sat_TP_pol = tI->second.polarization; + strncpy(scansettings.satName, + CServiceManager::getInstance()->GetSatelliteName(channel->getSatellitePosition()).c_str(), 50); break; case FE_QAM: - sprintf(scansettings.TP_rate, "%d", tI->second.feparams.dvb_feparams.u.qam.symbol_rate); - scansettings.TP_fec = tI->second.feparams.dvb_feparams.u.qam.fec_inner; - scansettings.TP_mod = tI->second.feparams.dvb_feparams.u.qam.modulation; + sprintf(scansettings.cable_TP_freq, "%d", tI->second.feparams.dvb_feparams.frequency); + sprintf(scansettings.cable_TP_rate, "%d", tI->second.feparams.dvb_feparams.u.qam.symbol_rate); + scansettings.cable_TP_fec = tI->second.feparams.dvb_feparams.u.qam.fec_inner; + scansettings.cable_TP_mod = tI->second.feparams.dvb_feparams.u.qam.modulation; + strncpy(scansettings.cableName, + CServiceManager::getInstance()->GetSatelliteName(channel->getSatellitePosition()).c_str(), 50); break; case FE_OFDM: case FE_ATSC: @@ -1315,7 +1540,7 @@ void CScanSetup::updateManualSettings() } } -int CTPSelectHandler::exec(CMenuTarget* parent, const std::string &/*actionkey*/) +int CTPSelectHandler::exec(CMenuTarget* parent, const std::string &actionkey) { std::map tmplist; std::map::iterator tmpI; @@ -1329,7 +1554,15 @@ int CTPSelectHandler::exec(CMenuTarget* parent, const std::string &/*actionkey*/ if (parent) parent->hide(); - t_satellite_position position = CServiceManager::getInstance()->GetSatellitePosition(scansettings.satNameNoDiseqc); + t_satellite_position position; + char * name; + if (actionkey == "sat") + name = scansettings.satName; + else + name = scansettings.cableName; + + position = CServiceManager::getInstance()->GetSatellitePosition(name); + INFO("%s: %s\n", actionkey.c_str(), name); if (old_position != position) { old_selected = 0; @@ -1345,7 +1578,6 @@ int CTPSelectHandler::exec(CMenuTarget* parent, const std::string &/*actionkey*/ if(channel) CServiceManager::getInstance()->GetTransponder(channel->getTransponderId(), ct); - CFrontend * frontend = CFEManager::getInstance()->getLiveFE(); int i = 0; transponder_list_t &select_transponders = CServiceManager::getInstance()->GetSatelliteTransponders(position); for (transponder_list_t::iterator tI = select_transponders.begin(); tI != select_transponders.end(); ++tI) { @@ -1366,7 +1598,7 @@ int CTPSelectHandler::exec(CMenuTarget* parent, const std::string &/*actionkey*/ } if (i == 0) { std::string text = "No transponders found for "; - text += scansettings.satNameNoDiseqc; + text += name; ShowHintUTF(LOCALE_MESSAGEBOX_ERROR, text.c_str(), 450, 2); return menu_return::RETURN_REPAINT; } @@ -1384,18 +1616,18 @@ int CTPSelectHandler::exec(CMenuTarget* parent, const std::string &/*actionkey*/ printf("CTPSelectHandler::exec: selected TP: freq %d pol %d SR %d\n", tmpI->second.feparams.dvb_feparams.frequency, tmpI->second.polarization, tmpI->second.feparams.dvb_feparams.u.qpsk.symbol_rate); - sprintf(scansettings.TP_freq, "%d", tmpI->second.feparams.dvb_feparams.frequency); - - switch (frontend->getInfo()->type) { + switch (tmpI->second.deltype) { case FE_QPSK: - sprintf(scansettings.TP_rate, "%d", tmpI->second.feparams.dvb_feparams.u.qpsk.symbol_rate); - scansettings.TP_fec = tmpI->second.feparams.dvb_feparams.u.qpsk.fec_inner; - scansettings.TP_pol = tmpI->second.polarization; + sprintf(scansettings.sat_TP_freq, "%d", tmpI->second.feparams.dvb_feparams.frequency); + sprintf(scansettings.sat_TP_rate, "%d", tmpI->second.feparams.dvb_feparams.u.qpsk.symbol_rate); + scansettings.sat_TP_fec = tmpI->second.feparams.dvb_feparams.u.qpsk.fec_inner; + scansettings.sat_TP_pol = tmpI->second.polarization; break; case FE_QAM: - sprintf(scansettings.TP_rate, "%d", tmpI->second.feparams.dvb_feparams.u.qam.symbol_rate); - scansettings.TP_fec = tmpI->second.feparams.dvb_feparams.u.qam.fec_inner; - scansettings.TP_mod = tmpI->second.feparams.dvb_feparams.u.qam.modulation; + sprintf(scansettings.cable_TP_freq, "%d", tmpI->second.feparams.dvb_feparams.frequency); + sprintf(scansettings.cable_TP_rate, "%d", tmpI->second.feparams.dvb_feparams.u.qam.symbol_rate); + scansettings.cable_TP_fec = tmpI->second.feparams.dvb_feparams.u.qam.fec_inner; + scansettings.cable_TP_mod = tmpI->second.feparams.dvb_feparams.u.qam.modulation; break; case FE_OFDM: case FE_ATSC: diff --git a/src/gui/scan_setup.h b/src/gui/scan_setup.h index 029351ba2..abe24f95c 100644 --- a/src/gui/scan_setup.h +++ b/src/gui/scan_setup.h @@ -51,31 +51,44 @@ class CScanSetup : public CMenuTarget, public CChangeObserver private: CMenuOptionStringChooser *satSelect; + CMenuOptionStringChooser *cableSelect; CMenuWidget *satOnOff; /* global items to be enabled/disabled in notify */ CMenuForwarder *fautoScanAll; CMenuForwarder *frontendSetup; CMenuForwarder *fsatSetup; + CMenuForwarder *fsatSelect; + CMenuOptionChooser * dtype; + CMenuOptionChooser * dorder; CMenuForwarder *uniSetup; CMenuOptionNumberChooser * ojDiseqcRepeats; CIntInput * nid; CMenuOptionChooser * lcnhd; + CMenuOptionChooser * linkfe; + std::string modestr[4]; + /* variables for selected frontend */ /* diseqc mode */ int dmode; + /* frontend setup menu current fe number */ int fenumber; + /* frontend mode */ + int femode; + /* frontend link to number */ + int femaster; /* flag to allow any operations which can damage recordings */ bool allow_start; + /* flag to re-init frontends */ + bool fe_restart; bool is_wizard; int fec_count; int freq_length; int r_system; - int femode; neutrino_locale_t satprov_locale; @@ -84,13 +97,15 @@ class CScanSetup : public CMenuTarget, public CChangeObserver int showScanMenu(); int showFrontendSetup(int number); + int showFrontendSelect(int number); int showScanMenuLnbSetup(); int showUnicableSetup(); int showScanMenuSatFind(); void fillSatSelect(CMenuOptionStringChooser *select); void fillCableSelect(CMenuOptionStringChooser *select); - void addScanMenuFrontendSetup(CMenuWidget *settings); + neutrino_locale_t getModeLocale(int mode); + int showScanMenuFrontendSetup(); void addScanMenuTempSat(CMenuWidget *temp_sat, sat_config_t &satconfig); void addScanMenuManualScan(CMenuWidget *manual_Scan); void addScanMenuAutoScanAll(CMenuWidget *auto_ScanAll); diff --git a/src/gui/start_wizard.cpp b/src/gui/start_wizard.cpp index 17ec7e642..7d8167675 100644 --- a/src/gui/start_wizard.cpp +++ b/src/gui/start_wizard.cpp @@ -102,14 +102,14 @@ int CStartUpWizard::exec(CMenuTarget* parent, const string & /*actionKey*/) CNetworkSetup::getInstance()->setWizardMode(CNetworkSetup::N_SETUP_MODE_WIZARD_NO); } bool init_settings = false; - if (g_info.delivery_system == DVB_S) - init_settings = file_exists("/var/tuxbox/config/initial/"); + if (CFEManager::getInstance()->haveSat()) + init_settings = file_exists(CONFIGDIR "/initial/"); if(init_settings && (res != menu_return::RETURN_EXIT_ALL)) { if (ShowMsgUTF(LOCALE_WIZARD_INITIAL_SETTINGS, g_Locale->getText(LOCALE_WIZARD_INSTALL_SETTINGS), CMessageBox::mbrYes, CMessageBox::mbYes | CMessageBox::mbNo, NULL, 450, 30, false) == CMessageBox::mbrYes) { - system("/bin/cp /var/tuxbox/config/initial/* /var/tuxbox/config/zapit/"); + system("/bin/cp " CONFIGDIR "/initial/* " CONFIGDIR "/zapit/"); CFEManager::getInstance()->loadSettings(); CFEManager::getInstance()->saveSettings(); CZapit::getInstance()->PrepareChannels(); diff --git a/src/gui/streaminfo2.cpp b/src/gui/streaminfo2.cpp index 5b89c230d..9ebfa2af1 100644 --- a/src/gui/streaminfo2.cpp +++ b/src/gui/streaminfo2.cpp @@ -574,9 +574,9 @@ void CStreamInfo2::paint_techinfo(int xpos, int ypos) //satellite ypos += iheight; - if(t.type == FE_QPSK) + if(t.deltype == FE_QPSK) sprintf (buf, "%s:",g_Locale->getText (LOCALE_SATSETUP_SATELLITE));//swiped locale - else if(t.type == FE_QAM) + else if(t.deltype == FE_QAM) sprintf (buf, "%s:",g_Locale->getText (LOCALE_CHANNELLIST_PROVS)); g_Font[font_info]->RenderString(xpos, ypos, box_width, buf, COL_INFOBAR, 0, true); // UTF-8 @@ -596,7 +596,7 @@ void CStreamInfo2::paint_techinfo(int xpos, int ypos) ypos += iheight; scaling = 27000; - if (t.type == FE_QPSK && t.feparams.dvb_feparams.u.qpsk.fec_inner < FEC_S2_QPSK_1_2) + if (t.deltype == FE_QPSK && t.feparams.dvb_feparams.u.qpsk.fec_inner < FEC_S2_QPSK_1_2) scaling = 15000; sprintf (buf, "%s",g_Locale->getText (LOCALE_SCANTS_FREQDATA)); diff --git a/src/gui/test_menu.cpp b/src/gui/test_menu.cpp index cf3e18165..70342d084 100644 --- a/src/gui/test_menu.cpp +++ b/src/gui/test_menu.cpp @@ -72,6 +72,7 @@ CTestMenu::CTestMenu() header = NULL; iconform = NULL; window = NULL; + button = NULL; } CTestMenu::~CTestMenu() @@ -84,6 +85,7 @@ CTestMenu::~CTestMenu() delete header; delete iconform; delete window; + delete button; } int CTestMenu::exec(CMenuTarget* parent, const std::string &actionKey) @@ -97,26 +99,26 @@ int CTestMenu::exec(CMenuTarget* parent, const std::string &actionKey) printf("CTestMenu::exec: %s\n", actionKey.c_str()); - if (actionKey == "vfd") + if (actionKey == "vfd") { CVFD::getInstance()->Clear(); int icon = 0x00040000; while (icon > 0x2) { - CVFD::getInstance()->ShowIcon((vfd_icon) icon, true); + CVFD::getInstance()->ShowIcon((fp_icon) icon, true); icon /= 2; } - for (int i = 0x01000001; i <= 0x0C000001; i+= 0x01000000) + for (int i = 0x01000001; i <= 0x0C000001; i+= 0x01000000) { - CVFD::getInstance()->ShowIcon((vfd_icon) i, true); + CVFD::getInstance()->ShowIcon((fp_icon) i, true); } - CVFD::getInstance()->ShowIcon((vfd_icon) 0x09000002, true); - CVFD::getInstance()->ShowIcon((vfd_icon) 0x0B000002, true); + CVFD::getInstance()->ShowIcon((fp_icon) 0x09000002, true); + CVFD::getInstance()->ShowIcon((fp_icon) 0x0B000002, true); char text[255]; char buf[XML_UTF8_ENCODE_MAX]; int ch = 0x2588; int len = XmlUtf8Encode(ch, buf); - for (int i = 0; i < 12; i++) + for (int i = 0; i < 12; i++) { memmove(&text[i*len], buf, len); } @@ -128,7 +130,7 @@ int CTestMenu::exec(CMenuTarget* parent, const std::string &actionKey) return res; } - else if (actionKey == "network") + else if (actionKey == "network") { int fd, ret; struct ifreq ifr; @@ -147,7 +149,7 @@ int CTestMenu::exec(CMenuTarget* parent, const std::string &actionKey) ret = ioctl(fd, SIOCGIFADDR, &ifr ); if (ret < 0) perror("SIOCGIFADDR"); - else + else { addrp = (struct sockaddr_in *)&(ifr.ifr_addr); ip = inet_ntoa(addrp->sin_addr); @@ -168,11 +170,11 @@ int CTestMenu::exec(CMenuTarget* parent, const std::string &actionKey) return res; } #if HAVE_COOL_HARDWARE - else if (actionKey == "card0") + else if (actionKey == "card0") { char str[255]; int ret = cs_test_card(0, str); - switch(ret) + switch(ret) { case 0: ShowMsgUTF(LOCALE_MESSAGEBOX_INFO, str, CMessageBox::mbrBack, CMessageBox::mbBack, "info.raw"); @@ -191,11 +193,11 @@ int CTestMenu::exec(CMenuTarget* parent, const std::string &actionKey) return res; } - else if (actionKey == "card1") + else if (actionKey == "card1") { char str[255]; int ret = cs_test_card(1, str); - switch(ret) + switch(ret) { case 0: ShowMsgUTF(LOCALE_MESSAGEBOX_INFO, str, CMessageBox::mbrBack, CMessageBox::mbBack, "info.raw"); @@ -215,16 +217,16 @@ int CTestMenu::exec(CMenuTarget* parent, const std::string &actionKey) return res; } #endif - else if (actionKey == "hdd") + else if (actionKey == "hdd") { char buffer[255]; FILE *f = fopen("/proc/mounts", "r"); bool mounted = false; - if (f != NULL) + if (f != NULL) { - while (fgets (buffer, 255, f) != NULL) + while (fgets (buffer, 255, f) != NULL) { - if (strstr(buffer, "/dev/sda1")) + if (strstr(buffer, "/dev/sda1")) { mounted = true; break; @@ -239,24 +241,24 @@ int CTestMenu::exec(CMenuTarget* parent, const std::string &actionKey) return res; } - else if (actionKey == "buttons") + else if (actionKey == "buttons") { neutrino_msg_t msg; neutrino_msg_data_t data; CHintBox * khintBox = NULL; CHintBox * hintBox = new CHintBox(LOCALE_MESSAGEBOX_INFO, "Press button, or press EXIT to return"); hintBox->paint(); - while (1) + while (1) { g_RCInput->getMsg(&msg, &data, 100); if (msg == CRCInput::RC_home) break; - if (msg != CRCInput::RC_timeout && msg <= CRCInput::RC_MaxRC) + if (msg != CRCInput::RC_timeout && msg <= CRCInput::RC_MaxRC) { char keyname[50]; sprintf(keyname, "Button [%s] pressed (EXIT to return)", g_RCInput->getKeyName(msg).c_str()); - if (khintBox) + if (khintBox) { delete khintBox; } @@ -272,55 +274,55 @@ int CTestMenu::exec(CMenuTarget* parent, const std::string &actionKey) return res; } - else if (actionKey == "22kon1" || actionKey == "22koff1") + else if (actionKey == "22kon1" || actionKey == "22koff1") { CScanTs * scanTs = new CScanTs(); int freq = (actionKey == "22kon1") ? 12000*1000: 11000*1000; - sprintf(scansettings.TP_freq, "%d", freq); - strncpy(scansettings.satNameNoDiseqc, - CServiceManager::getInstance()->GetSatelliteName(130).c_str(), 50); + sprintf(scansettings.sat_TP_freq, "%d", freq); + strncpy(scansettings.satName, + CServiceManager::getInstance()->GetSatelliteName(130).c_str(), 50); scanTs->exec(NULL, "test"); delete scanTs; return res; } - else if (actionKey == "22kon2" || actionKey == "22koff2") + else if (actionKey == "22kon2" || actionKey == "22koff2") { int freq = (actionKey == "22kon2") ? 12000*1000: 11000*1000; - sprintf(scansettings.TP_freq, "%d", freq); - strncpy(scansettings.satNameNoDiseqc, - CServiceManager::getInstance()->GetSatelliteName(192).c_str(), 50); + sprintf(scansettings.sat_TP_freq, "%d", freq); + strncpy(scansettings.satName, + CServiceManager::getInstance()->GetSatelliteName(192).c_str(), 50); CScanTs * scanTs = new CScanTs(); scanTs->exec(NULL, "test"); delete scanTs; return res; } - else if (actionKey == "scan1" || actionKey == "scan2") + else if (actionKey == "scan1" || actionKey == "scan2") { int fnum = actionKey == "scan1" ? 0 : 1; - strncpy(scansettings.satNameNoDiseqc, actionKey == "scan1" ? - CServiceManager::getInstance()->GetSatelliteName(130).c_str() : - CServiceManager::getInstance()->GetSatelliteName(192).c_str(), 50); + strncpy(scansettings.satName, actionKey == "scan1" ? + CServiceManager::getInstance()->GetSatelliteName(130).c_str() : + CServiceManager::getInstance()->GetSatelliteName(192).c_str(), 50); CFrontend *frontend = CFEManager::getInstance()->getFE(fnum); CServiceScan::getInstance()->SetFrontend(fnum); int freq = 12538000; - sprintf(scansettings.TP_freq, "%d", freq); + sprintf(scansettings.sat_TP_freq, "%d", freq); //CFrontend * frontend = CFEManager::getInstance()->getFE(0); - switch (frontend->getInfo()->type) + switch (frontend->getInfo()->type) { case FE_QPSK: - sprintf(scansettings.TP_rate, "%d", 41250*1000); - scansettings.TP_fec = 1; - scansettings.TP_pol = 1; + sprintf(scansettings.sat_TP_rate, "%d", 41250*1000); + scansettings.sat_TP_fec = 1; + scansettings.sat_TP_pol = 1; break; case FE_QAM: #if 0 - sprintf(scansettings.TP_rate, "%d", tmpI->second.feparams.u.qam.symbol_rate); - scansettings.TP_fec = tmpI->second.feparams.u.qam.fec_inner; - scansettings.TP_mod = tmpI->second.feparams.u.qam.modulation; + sprintf(scansettings.sat_TP_rate, "%d", tmpI->second.feparams.u.qam.symbol_rate); + scansettings.sat_TP_fec = tmpI->second.feparams.u.qam.fec_inner; + scansettings.TP_mod = tmpI->second.feparams.u.qam.modulation; #endif break; case FE_OFDM: @@ -332,6 +334,21 @@ int CTestMenu::exec(CMenuTarget* parent, const std::string &actionKey) delete scanTs; return res; } + else if (actionKey == "button"){ + if (button == NULL) + button = new CComponentsButtonRed(100, 100, 100, 40, "Test"); + + if (!button->isPainted()){ + if (button->isSelected()) + button->setSelected(false); + else + button->setSelected(true); + button->paint(); + }else + button->hide(); + + return res; + } else if (actionKey == "circle"){ if (circle == NULL) circle = new CComponentsShapeCircle (100, 100, 100, false); @@ -419,8 +436,9 @@ int CTestMenu::exec(CMenuTarget* parent, const std::string &actionKey) else if (actionKey == "header"){ int hh = g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]->getHeight(); if (header == NULL){ - header = new CComponentsHeader (100, 50, 500, hh, "Test-Header", NEUTRINO_ICON_INFO, CComponentsHeader::CC_BTN_HELP | CComponentsHeader::CC_BTN_EXIT | CComponentsHeader::CC_BTN_MENU); - header->addHeaderButton(NEUTRINO_ICON_BUTTON_RED); + header = new CComponentsHeader (100, 50, 500, hh, "Test-Header"/*, NEUTRINO_ICON_INFO, CComponentsHeader::CC_BTN_HELP | CComponentsHeader::CC_BTN_EXIT | CComponentsHeader::CC_BTN_MENU*/); +// header->addHeaderButton(NEUTRINO_ICON_BUTTON_RED); + header->setHeaderDefaultButtons(CComponentsHeader::CC_BTN_HELP | CComponentsHeader::CC_BTN_EXIT | CComponentsHeader::CC_BTN_MENU); } // else //For existing instances it's recommended // //to remove old button icons before add new buttons, otherwise icons will be appended. @@ -553,6 +571,7 @@ void CTestMenu::showCCTests(CMenuWidget *widget) { widget->setSelected(selected); widget->addIntroItems(); + widget->addItem(new CMenuForwarderNonLocalized("Button", true, NULL, this, "button")); widget->addItem(new CMenuForwarderNonLocalized("Circle", true, NULL, this, "circle")); widget->addItem(new CMenuForwarderNonLocalized("Square", true, NULL, this, "square")); widget->addItem(new CMenuForwarderNonLocalized("Picture", true, NULL, this, "picture")); @@ -575,7 +594,7 @@ void CTestMenu::showHWTests(CMenuWidget *widget) #endif widget->addItem(new CMenuForwarderNonLocalized("HDD", true, NULL, this, "hdd")); - CFEManager::getInstance()->setMode(CFEManager::FE_MODE_ALONE); + //CFEManager::getInstance()->setMode(CFEManager::FE_MODE_ALONE); CServiceManager::getInstance()->InitSatPosition(130, NULL, true); CServiceManager::getInstance()->InitSatPosition(192, NULL, true); diff --git a/src/gui/test_menu.h b/src/gui/test_menu.h index b38c92581..1b3e58504 100644 --- a/src/gui/test_menu.h +++ b/src/gui/test_menu.h @@ -32,6 +32,8 @@ #include #include #include +#include +#include // #define TEST_MENU #include @@ -47,6 +49,7 @@ class CTestMenu : public CMenuTarget CComponentsHeader *header; CComponentsIconForm *iconform; CComponentsWindow *window; + CComponentsButton *button; int width, selected; void showTestMenu(); diff --git a/src/gui/timeosd.cpp b/src/gui/timeosd.cpp index 3cc560b48..25e42ad64 100644 --- a/src/gui/timeosd.cpp +++ b/src/gui/timeosd.cpp @@ -31,7 +31,6 @@ #include #include - #define TIMEOSD_FONT SNeutrinoSettings::FONT_TYPE_INFOBAR_CHANNAME #define BARLEN 200 diff --git a/src/gui/timerlist.cpp b/src/gui/timerlist.cpp index b63a74f4a..66c7acc10 100644 --- a/src/gui/timerlist.cpp +++ b/src/gui/timerlist.cpp @@ -1033,15 +1033,15 @@ const CMenuOptionChooser::keyval TIMERLIST_STANDBY_OPTIONS[TIMERLIST_STANDBY_OPT #endif const CMenuOptionChooser::keyval TIMERLIST_TYPE_OPTIONS[TIMERLIST_TYPE_OPTION_COUNT] = { - { CTimerd::TIMER_SHUTDOWN, LOCALE_TIMERLIST_TYPE_SHUTDOWN }, #if 0 { CTimerd::TIMER_NEXTPROGRAM, LOCALE_TIMERLIST_TYPE_NEXTPROGRAM }, #endif + { CTimerd::TIMER_RECORD, LOCALE_TIMERLIST_TYPE_RECORD }, { CTimerd::TIMER_ZAPTO, LOCALE_TIMERLIST_TYPE_ZAPTO }, { CTimerd::TIMER_STANDBY, LOCALE_TIMERLIST_TYPE_STANDBY }, - { CTimerd::TIMER_RECORD, LOCALE_TIMERLIST_TYPE_RECORD }, { CTimerd::TIMER_SLEEPTIMER, LOCALE_TIMERLIST_TYPE_SLEEPTIMER }, { CTimerd::TIMER_REMIND, LOCALE_TIMERLIST_TYPE_REMIND }, + { CTimerd::TIMER_SHUTDOWN, LOCALE_TIMERLIST_TYPE_SHUTDOWN }, { CTimerd::TIMER_EXEC_PLUGIN, LOCALE_TIMERLIST_TYPE_EXECPLUGIN } }; @@ -1135,6 +1135,9 @@ int CTimerList::newTimer() std::vector toDelete; // Defaults timerNew.eventType = CTimerd::TIMER_RECORD ; + if (g_settings.recording_type == CNeutrinoApp::RECORDING_OFF) + timerNew.eventType = CTimerd::TIMER_ZAPTO; + timerNew.eventRepeat = CTimerd::TIMERREPEAT_ONCE ; timerNew.repeatCount = 0; timerNew.alarmTime = (time(NULL)/60)*60; @@ -1179,23 +1182,24 @@ int CTimerList::newTimer() CMenuWidget* mwradio = new CMenuWidget(LOCALE_TIMERLIST_CHANNELSELECT, NEUTRINO_ICON_SETTINGS); toDelete.push_back(mwradio); - ZapitChannelList* channels = &(g_bouquetManager->Bouquets[i]->tvChannels); - for (int j = 0; j < (int) channels->size(); j++) { + ZapitChannelList channels; + g_bouquetManager->Bouquets[i]->getTvChannels(channels); + for (int j = 0; j < (int) channels.size(); j++) { char cChannelId[3+16+1+1]; - sprintf(cChannelId, "SC:" PRINTF_CHANNEL_ID_TYPE_NO_LEADING_ZEROS ",", (*channels)[j]->channel_id); - mwtv->addItem(new CMenuForwarderNonLocalized((*channels)[j]->getName().c_str(), true, NULL, this, (std::string(cChannelId) + (*channels)[j]->getName()).c_str(), CRCInput::RC_nokey, NULL, (*channels)[j]->scrambled ? NEUTRINO_ICON_SCRAMBLED : NULL)); + sprintf(cChannelId, "SC:" PRINTF_CHANNEL_ID_TYPE_NO_LEADING_ZEROS ",", channels[j]->channel_id); + mwtv->addItem(new CMenuForwarderNonLocalized(channels[j]->getName().c_str(), true, NULL, this, (std::string(cChannelId) + channels[j]->getName()).c_str(), CRCInput::RC_nokey, NULL, channels[j]->scrambled ? NEUTRINO_ICON_SCRAMBLED : NULL)); } - if (!channels->empty()) + if (!channels.empty()) mctv.addItem(new CMenuForwarderNonLocalized(g_bouquetManager->Bouquets[i]->bFav ? g_Locale->getText(LOCALE_FAVORITES_BOUQUETNAME) : g_bouquetManager->Bouquets[i]->Name.c_str() /*g_bouquetManager->Bouquets[i]->Name.c_str()*/, true, NULL, mwtv)); - channels = &(g_bouquetManager->Bouquets[i]->radioChannels); - for (int j = 0; j < (int) channels->size(); j++) { + g_bouquetManager->Bouquets[i]->getRadioChannels(channels); + for (int j = 0; j < (int) channels.size(); j++) { char cChannelId[3+16+1+1]; - sprintf(cChannelId, "SC:" PRINTF_CHANNEL_ID_TYPE_NO_LEADING_ZEROS ",", (*channels)[j]->channel_id); - mwradio->addItem(new CMenuForwarderNonLocalized((*channels)[j]->getName().c_str(), true, NULL, this, (std::string(cChannelId) + (*channels)[j]->getName()).c_str(), CRCInput::RC_nokey, NULL, (*channels)[j]->scrambled ? NEUTRINO_ICON_SCRAMBLED : NULL)); + sprintf(cChannelId, "SC:" PRINTF_CHANNEL_ID_TYPE_NO_LEADING_ZEROS ",", channels[j]->channel_id); + mwradio->addItem(new CMenuForwarderNonLocalized(channels[j]->getName().c_str(), true, NULL, this, (std::string(cChannelId) + channels[j]->getName()).c_str(), CRCInput::RC_nokey, NULL, channels[j]->scrambled ? NEUTRINO_ICON_SCRAMBLED : NULL)); } - if (!channels->empty()) + if (!channels.empty()) mcradio.addItem(new CMenuForwarderNonLocalized(g_bouquetManager->Bouquets[i]->Name.c_str(), true, NULL, mwradio)); } } @@ -1221,7 +1225,11 @@ int CTimerList::newTimer() CTimerListNewNotifier notifier2((int *)&timerNew.eventType, &timerNew.stopTime,m2,m6,m8,m9,m10,m7, timerSettings_stopTime.getValue()); - CMenuOptionChooser* m0 = new CMenuOptionChooser(LOCALE_TIMERLIST_TYPE, (int *)&timerNew.eventType, TIMERLIST_TYPE_OPTIONS, TIMERLIST_TYPE_OPTION_COUNT, true, ¬ifier2); + CMenuOptionChooser* m0; + if (g_settings.recording_type != CNeutrinoApp::RECORDING_OFF) + m0 = new CMenuOptionChooser(LOCALE_TIMERLIST_TYPE, (int *)&timerNew.eventType, TIMERLIST_TYPE_OPTIONS, TIMERLIST_TYPE_OPTION_COUNT, true, ¬ifier2); + else + m0 = new CMenuOptionChooser(LOCALE_TIMERLIST_TYPE, (int *)&timerNew.eventType, &TIMERLIST_TYPE_OPTIONS[1], TIMERLIST_TYPE_OPTION_COUNT-1, true, ¬ifier2); timerSettings.addItem( m0); timerSettings.addItem( m1); @@ -1252,7 +1260,7 @@ int CTimerList::newTimer() bool askUserOnTimerConflict(time_t announceTime, time_t stopTime) { - if (CFEManager::getInstance()->getMode() == CFEManager::FE_MODE_SINGLE){ + if (CFEManager::getInstance()->getEnabledCount() == 1) { CTimerdClient Timer; CTimerd::TimerList overlappingTimers = Timer.getOverlappingTimers(announceTime,stopTime); //printf("[CTimerdClient] attention\n%d\t%d\t%d conflicts with:\n",timerNew.announceTime,timerNew.alarmTime,timerNew.stopTime); diff --git a/src/gui/update.cpp b/src/gui/update.cpp index 590cc1a90..221edb2ad 100644 --- a/src/gui/update.cpp +++ b/src/gui/update.cpp @@ -85,7 +85,11 @@ extern int allow_flash; #define FILEBROWSER_UPDATE_FILTER "img" #define MTD_OF_WHOLE_IMAGE 0 -#define MTD_DEVICE_OF_UPDATE_PART "/dev/mtd2" +#ifdef BOXMODEL_APOLLO +#define MTD_DEVICE_OF_UPDATE_PART "/dev/mtd0" +#else +#define MTD_DEVICE_OF_UPDATE_PART "/dev/mtd3" +#endif CFlashUpdate::CFlashUpdate() :CProgressWindow() @@ -93,6 +97,8 @@ CFlashUpdate::CFlashUpdate() width = w_max (40, 10); setTitle(LOCALE_FLASHUPDATE_HEAD); sysfs = CMTDInfo::getInstance()->findMTDsystem(); + if (sysfs.empty()) + sysfs = MTD_DEVICE_OF_UPDATE_PART; printf("Mtd partition to update: %s\n", sysfs.c_str()); } @@ -458,7 +464,6 @@ int CFlashUpdate::exec(CMenuTarget* parent, const std::string &actionKey) #endif if(fileType < '3') { CNeutrinoApp::getInstance()->exec(NULL, "savesettings"); - sleep(2); //flash it... #if ENABLE_EXTUPDATE @@ -488,9 +493,9 @@ int CFlashUpdate::exec(CMenuTarget* parent, const std::string &actionKey) CFSMounter::umount(); ShowHintUTF(LOCALE_MESSAGEBOX_INFO, g_Locale->getText(LOCALE_FLASHUPDATE_FLASHREADYREBOOT)); // UTF-8 + sleep(2); //my_system("/etc/init.d/rcK"); ft.reboot(); - sleep(20000); } else if(fileType == 'T') // display file contents { @@ -606,7 +611,7 @@ void CFlashExpert::writemtd(const std::string & filename, int mtdNumber) } else { showGlobalStatus(100); showStatusMessageUTF(g_Locale->getText(LOCALE_FLASHUPDATE_READY)); // UTF-8 - sleep(1); + sleep(2); hide(); ShowHintUTF(LOCALE_MESSAGEBOX_INFO, g_Locale->getText(LOCALE_FLASHUPDATE_FLASHREADYREBOOT)); // UTF-8 ft.reboot(); @@ -631,9 +636,15 @@ void CFlashExpert::showMTDSelector(const std::string & actionkey) for(int lx=0;lxgetMTDCount();lx++) { char sActionKey[20]; bool enabled = true; +#ifdef BOXMODEL_APOLLO + // disable write uboot / uldr, FIXME correct numbers + if ((actionkey == "writemtd") && (lx == 5 || lx == 6)) + enabled = false; +#else // disable write uboot if ((actionkey == "writemtd") && (lx == 0)) enabled = false; +#endif sprintf(sActionKey, "%s%d", actionkey.c_str(), lx); mtdselector->addItem(new CMenuForwarderNonLocalized(mtdInfo->getMTDName(lx).c_str(), enabled, NULL, this, sActionKey, CRCInput::convertDigitToKey(shortcut++))); } diff --git a/src/gui/user_menue_setup.cpp b/src/gui/user_menue_setup.cpp index b1991d760..5b07acb5f 100644 --- a/src/gui/user_menue_setup.cpp +++ b/src/gui/user_menue_setup.cpp @@ -75,7 +75,6 @@ const CMenuOptionChooser::keyval USERMENU_ITEM_OPTIONS[USERMENU_ITEM_OPTION_COUN { SNeutrinoSettings::ITEM_EPG_MISC, LOCALE_USERMENU_ITEM_EPG_MISC }, { SNeutrinoSettings::ITEM_AUDIO_SELECT, LOCALE_AUDIOSELECTMENUE_HEAD }, { SNeutrinoSettings::ITEM_SUBCHANNEL, LOCALE_INFOVIEWER_SUBSERVICE }, - { SNeutrinoSettings::ITEM_RECORD, LOCALE_TIMERLIST_TYPE_RECORD }, { SNeutrinoSettings::ITEM_MOVIEPLAYER_MB, LOCALE_MOVIEBROWSER_HEAD }, { SNeutrinoSettings::ITEM_TIMERLIST, LOCALE_TIMERLIST_NAME }, { SNeutrinoSettings::ITEM_REMOTE, LOCALE_RCLOCK_MENUEADD }, @@ -88,7 +87,8 @@ const CMenuOptionChooser::keyval USERMENU_ITEM_OPTIONS[USERMENU_ITEM_OPTION_COUN { SNeutrinoSettings::ITEM_CAM, LOCALE_CI_SETTINGS }, { SNeutrinoSettings::ITEM_CLOCK, LOCALE_CLOCK_SWITCH_ON }, { SNeutrinoSettings::ITEM_GAMES, LOCALE_MAINMENU_GAMES }, - { SNeutrinoSettings::ITEM_SCRIPTS, LOCALE_MAINMENU_SCRIPTS } + { SNeutrinoSettings::ITEM_SCRIPTS, LOCALE_MAINMENU_SCRIPTS }, + { SNeutrinoSettings::ITEM_RECORD, LOCALE_TIMERLIST_TYPE_RECORD } }; int CUserMenuSetup::exec(CMenuTarget* parent, const std::string &) @@ -130,7 +130,8 @@ int CUserMenuSetup::showSetup() { snprintf(text,max_char,"%d.",item+1); text[max_char-1]=0;// terminate for sure - ums->addItem(new CMenuOptionChooser(text, &g_settings.usermenu[button][item], USERMENU_ITEM_OPTIONS, USERMENU_ITEM_OPTION_COUNT,true, NULL, CRCInput::RC_nokey, "", true )); + int count = (g_settings.recording_type != CNeutrinoApp::RECORDING_OFF) ? USERMENU_ITEM_OPTION_COUNT : USERMENU_ITEM_OPTION_COUNT - 1; + ums->addItem(new CMenuOptionChooser(text, &g_settings.usermenu[button][item], USERMENU_ITEM_OPTIONS, count,true, NULL, CRCInput::RC_nokey, "", true )); } int res = ums->exec(NULL, ""); diff --git a/src/gui/videosettings.cpp b/src/gui/videosettings.cpp index 0a3c47c8b..d0439b29a 100644 --- a/src/gui/videosettings.cpp +++ b/src/gui/videosettings.cpp @@ -56,6 +56,10 @@ #include extern cVideo *videoDecoder; +#ifdef ENABLE_PIP +extern cVideo *pipDecoder; +#include +#endif extern int prev_video_mode; extern CRemoteControl * g_RemoteControl; /* neutrino.cpp */ @@ -113,17 +117,60 @@ const CMenuOptionChooser::keyval VIDEOMENU_VIDEOSIGNAL_TD_OPTIONS[VIDEOMENU_VIDE { ANALOG_SD_YPRPB_SCART, LOCALE_VIDEOMENU_ANALOG_SD_YPRPB_SCART } }; +#ifdef ANALOG_MODE +#define VIDEOMENU_VIDEOSIGNAL_HD1_OPTION_COUNT 8 +const CMenuOptionChooser::keyval VIDEOMENU_VIDEOSIGNAL_HD1_OPTIONS[VIDEOMENU_VIDEOSIGNAL_HD1_OPTION_COUNT] = +{ + { ANALOG_MODE(SCART,SD,RGB ), LOCALE_VIDEOMENU_ANALOG_SD_RGB_SCART }, /* composite + RGB (for both SCART and Cinch) */ + { ANALOG_MODE(CINCH,SD,RGB ), LOCALE_VIDEOMENU_ANALOG_SD_RGB_CINCH }, /* composite + RGB (for both SCART and Cinch) */ + { ANALOG_MODE(SCART,SD,YPRPB), LOCALE_VIDEOMENU_ANALOG_SD_YPRPB_SCART }, /* YPbPr SCART (with wrongly connected Cinch) */ + { ANALOG_MODE(CINCH,SD,YPRPB), LOCALE_VIDEOMENU_ANALOG_SD_YPRPB_CINCH }, /* YPbPr Cinch (with wrongly connected SCART) */ + { ANALOG_MODE(SCART,HD,RGB ), LOCALE_VIDEOMENU_ANALOG_HD_RGB_SCART }, + { ANALOG_MODE(CINCH,HD,RGB ), LOCALE_VIDEOMENU_ANALOG_HD_RGB_CINCH }, + { ANALOG_MODE(SCART,HD,YPRPB), LOCALE_VIDEOMENU_ANALOG_HD_YPRPB_SCART }, + { ANALOG_MODE(CINCH,HD,YPRPB), LOCALE_VIDEOMENU_ANALOG_HD_YPRPB_CINCH } +}; + +#define VIDEOMENU_VIDEOSIGNAL_TANK_OPTION_COUNT 6 +const CMenuOptionChooser::keyval VIDEOMENU_VIDEOSIGNAL_TANK_OPTIONS[VIDEOMENU_VIDEOSIGNAL_TANK_OPTION_COUNT] = +{ + { ANALOG_MODE(BOTH ,xD,AUTO ),LOCALE_VIDEOMENU_ANALOG_AUTO }, /* Encoder automatically adjusts based on content */ + { ANALOG_MODE(BOTH ,xD,CVBS ),LOCALE_VIDEOMENU_ANALOG_CVBS }, /* CVBS on SCART (disables fastblank, un-used dacs) */ + { ANALOG_MODE(BOTH ,SD,RGB ), LOCALE_VIDEOMENU_ANALOG_SD_RGB }, /* SD RGB on Cinch and SCART */ + { ANALOG_MODE(BOTH ,SD,YPRPB), LOCALE_VIDEOMENU_ANALOG_SD_YPRPB }, /* SD YPrPb on Cinch and SCART */ + { ANALOG_MODE(BOTH ,HD,RGB ), LOCALE_VIDEOMENU_ANALOG_HD_RGB }, /* HD RGB on Cinch and SCART */ + { ANALOG_MODE(BOTH ,HD,YPRPB), LOCALE_VIDEOMENU_ANALOG_HD_YPRPB }, /* HD YPrPb on Cinch and SCART */ +}; + +#define VIDEOMENU_VIDEOSIGNAL_HD1PLUS_SCART_OPTION_COUNT 4 +const CMenuOptionChooser::keyval VIDEOMENU_VIDEOSIGNAL_HD1PLUS_SCART_OPTIONS[VIDEOMENU_VIDEOSIGNAL_HD1PLUS_SCART_OPTION_COUNT] = +{ + { ANALOG_MODE(SCART,SD,RGB ), LOCALE_VIDEOMENU_ANALOG_SD_RGB_SCART }, /* composite + RGB */ + { ANALOG_MODE(SCART,SD,YPRPB), LOCALE_VIDEOMENU_ANALOG_SD_YPRPB_SCART }, /* YPbPr SCART */ + { ANALOG_MODE(SCART,HD,RGB ), LOCALE_VIDEOMENU_ANALOG_HD_RGB_SCART }, + { ANALOG_MODE(SCART,HD,YPRPB), LOCALE_VIDEOMENU_ANALOG_HD_YPRPB_SCART }, +}; + +#define VIDEOMENU_VIDEOSIGNAL_HD1PLUS_CINCH_OPTION_COUNT 4 +const CMenuOptionChooser::keyval VIDEOMENU_VIDEOSIGNAL_HD1PLUS_CINCH_OPTIONS[VIDEOMENU_VIDEOSIGNAL_HD1PLUS_CINCH_OPTION_COUNT] = +{ + { ANALOG_MODE(CINCH,SD,RGB ), LOCALE_VIDEOMENU_ANALOG_SD_RGB_CINCH }, /* composite + RGB (for both SCART and Cinch) */ + { ANALOG_MODE(CINCH,SD,YPRPB), LOCALE_VIDEOMENU_ANALOG_SD_YPRPB_CINCH }, /* YPbPr Cinch (with wrongly connected SCART) */ + { ANALOG_MODE(CINCH,HD,RGB ), LOCALE_VIDEOMENU_ANALOG_HD_RGB_CINCH }, + { ANALOG_MODE(CINCH,HD,YPRPB), LOCALE_VIDEOMENU_ANALOG_HD_YPRPB_CINCH } +}; +#else #define VIDEOMENU_VIDEOSIGNAL_HD1_OPTION_COUNT 8 const CMenuOptionChooser::keyval VIDEOMENU_VIDEOSIGNAL_HD1_OPTIONS[VIDEOMENU_VIDEOSIGNAL_HD1_OPTION_COUNT] = { { ANALOG_SD_RGB_SCART, LOCALE_VIDEOMENU_ANALOG_SD_RGB_SCART }, /* composite + RGB (for both SCART and Cinch) */ - { ANALOG_SD_RGB_CINCH, LOCALE_VIDEOMENU_ANALOG_SD_RGB_CINCH }, /* composite + RGB (for both SCART and Cinch) */ - { ANALOG_SD_YPRPB_SCART, LOCALE_VIDEOMENU_ANALOG_SD_YPRPB_SCART }, /* YPbPr SCART (with wrongly connected Cinch) */ - { ANALOG_SD_YPRPB_CINCH, LOCALE_VIDEOMENU_ANALOG_SD_YPRPB_CINCH }, /* YPbPr Cinch (with wrongly connected SCART) */ - { ANALOG_HD_RGB_SCART, LOCALE_VIDEOMENU_ANALOG_HD_RGB_SCART }, - { ANALOG_HD_RGB_CINCH, LOCALE_VIDEOMENU_ANALOG_HD_RGB_CINCH }, - { ANALOG_HD_YPRPB_SCART, LOCALE_VIDEOMENU_ANALOG_HD_YPRPB_SCART }, - { ANALOG_HD_YPRPB_CINCH, LOCALE_VIDEOMENU_ANALOG_HD_YPRPB_CINCH } + { ANALOG_SD_RGB_CINCH, LOCALE_VIDEOMENU_ANALOG_SD_RGB_CINCH }, /* composite + RGB (for both SCART and Cinch) */ + { ANALOG_SD_YPRPB_SCART, LOCALE_VIDEOMENU_ANALOG_SD_YPRPB_SCART }, /* YPbPr SCART (with wrongly connected Cinch) */ + { ANALOG_SD_YPRPB_CINCH, LOCALE_VIDEOMENU_ANALOG_SD_YPRPB_CINCH }, /* YPbPr Cinch (with wrongly connected SCART) */ + { ANALOG_HD_RGB_SCART, LOCALE_VIDEOMENU_ANALOG_HD_RGB_SCART }, + { ANALOG_HD_RGB_CINCH, LOCALE_VIDEOMENU_ANALOG_HD_RGB_CINCH }, + { ANALOG_HD_YPRPB_SCART, LOCALE_VIDEOMENU_ANALOG_HD_YPRPB_SCART }, + { ANALOG_HD_YPRPB_CINCH, LOCALE_VIDEOMENU_ANALOG_HD_YPRPB_CINCH } }; #define VIDEOMENU_VIDEOSIGNAL_HD1PLUS_SCART_OPTION_COUNT 4 @@ -135,21 +182,15 @@ const CMenuOptionChooser::keyval VIDEOMENU_VIDEOSIGNAL_HD1PLUS_SCART_OPTIONS[VID { ANALOG_HD_YPRPB_SCART, LOCALE_VIDEOMENU_ANALOG_HD_YPRPB_SCART }, }; -// #define VIDEOMENU_VCRSIGNAL_OPTION_COUNT 2 -// const CMenuOptionChooser::keyval VIDEOMENU_VCRSIGNAL_OPTIONS[VIDEOMENU_VCRSIGNAL_OPTION_COUNT] = -// { -// { 2, LOCALE_VIDEOMENU_VCRSIGNAL_SVIDEO }, -// { 0, LOCALE_VIDEOMENU_VCRSIGNAL_COMPOSITE } -// }; - #define VIDEOMENU_VIDEOSIGNAL_HD1PLUS_CINCH_OPTION_COUNT 4 const CMenuOptionChooser::keyval VIDEOMENU_VIDEOSIGNAL_HD1PLUS_CINCH_OPTIONS[VIDEOMENU_VIDEOSIGNAL_HD1PLUS_CINCH_OPTION_COUNT] = { - { ANALOG_SD_RGB_CINCH, LOCALE_VIDEOMENU_ANALOG_SD_RGB_CINCH }, /* composite + RGB (for both SCART and Cinch) */ + { ANALOG_SD_RGB_CINCH, LOCALE_VIDEOMENU_ANALOG_SD_RGB_CINCH }, /* composite + RGB (for both SCART and Cinch) */ { ANALOG_SD_YPRPB_CINCH, LOCALE_VIDEOMENU_ANALOG_SD_YPRPB_CINCH }, /* YPbPr Cinch (with wrongly connected SCART) */ - { ANALOG_HD_RGB_CINCH, LOCALE_VIDEOMENU_ANALOG_HD_RGB_CINCH }, - { ANALOG_HD_YPRPB_CINCH, LOCALE_VIDEOMENU_ANALOG_HD_YPRPB_CINCH } + { ANALOG_HD_RGB_CINCH, LOCALE_VIDEOMENU_ANALOG_HD_RGB_CINCH }, + { ANALOG_HD_YPRPB_CINCH, LOCALE_VIDEOMENU_ANALOG_HD_YPRPB_CINCH } }; +#endif /* * key value of -1 means the mode is not available @@ -181,13 +222,21 @@ CMenuOptionChooser::keyval_ext VIDEOMENU_VIDEOMODE_OPTIONS[VIDEOMENU_VIDEOMODE_O { VIDEO_STD_576P, NONEXISTANT_LOCALE, "576p" }, { VIDEO_STD_720P50, NONEXISTANT_LOCALE, "720p 50Hz" }, { VIDEO_STD_1080I50, NONEXISTANT_LOCALE, "1080i 50Hz" }, +#ifdef BOXMODEL_APOLLO + { VIDEO_STD_1080P50, NONEXISTANT_LOCALE, "1080p 50Hz" }, +#else + { -1, NONEXISTANT_LOCALE, "1080p 50Hz" }, +#endif { VIDEO_STD_1080P24, NONEXISTANT_LOCALE, "1080p 24Hz" }, { VIDEO_STD_1080P25, NONEXISTANT_LOCALE, "1080p 25Hz" }, { VIDEO_STD_NTSC, NONEXISTANT_LOCALE, "NTSC" }, { VIDEO_STD_480P, NONEXISTANT_LOCALE, "480p" }, { VIDEO_STD_720P60, NONEXISTANT_LOCALE, "720p 60Hz" }, { VIDEO_STD_1080I60, NONEXISTANT_LOCALE, "1080i 60Hz" }, - { -1, NONEXISTANT_LOCALE, "1080p 50Hz" }, +#ifdef BOXMODEL_APOLLO + /* TODO: fix this crap */ + { VIDEO_STD_1080P60, NONEXISTANT_LOCALE, "1080p 60Hz" }, +#endif { VIDEO_STD_AUTO, NONEXISTANT_LOCALE, "Auto" } }; #elif HAVE_SPARK_HARDWARE || HAVE_AZBOX_HARDWARE @@ -279,13 +328,20 @@ int CVideoSettings::showVideoSetup() } else if (system_rev > 0x06) { - if(system_rev != 10) { - vs_scart_ch = new CMenuOptionChooser(LOCALE_VIDEOMENU_SCART, &g_settings.analog_mode1, VIDEOMENU_VIDEOSIGNAL_HD1PLUS_SCART_OPTIONS, VIDEOMENU_VIDEOSIGNAL_HD1PLUS_SCART_OPTION_COUNT, true, this); - vs_scart_ch->setHint("", LOCALE_MENU_HINT_VIDEO_SCART_MODE); +#ifdef ANALOG_MODE + if (system_rev == 9 || system_rev == 11) { // Tank, Trinity. + vs_analg_ch = new CMenuOptionChooser(LOCALE_VIDEOMENU_ANALOG_MODE, &g_settings.analog_mode1, VIDEOMENU_VIDEOSIGNAL_TANK_OPTIONS, VIDEOMENU_VIDEOSIGNAL_TANK_OPTION_COUNT, true, this); + vs_analg_ch->setHint("", LOCALE_MENU_HINT_VIDEO_ANALOG_MODE); + } else +#endif + { + if(system_rev != 10) { + vs_scart_ch = new CMenuOptionChooser(LOCALE_VIDEOMENU_SCART, &g_settings.analog_mode1, VIDEOMENU_VIDEOSIGNAL_HD1PLUS_SCART_OPTIONS, VIDEOMENU_VIDEOSIGNAL_HD1PLUS_SCART_OPTION_COUNT, true, this); + vs_scart_ch->setHint("", LOCALE_MENU_HINT_VIDEO_SCART_MODE); + } + vs_chinch_ch = new CMenuOptionChooser(LOCALE_VIDEOMENU_CINCH, &g_settings.analog_mode2, VIDEOMENU_VIDEOSIGNAL_HD1PLUS_CINCH_OPTIONS, VIDEOMENU_VIDEOSIGNAL_HD1PLUS_CINCH_OPTION_COUNT, true, this); + vs_chinch_ch->setHint("", LOCALE_MENU_HINT_VIDEO_CINCH_MODE); } - - vs_chinch_ch = new CMenuOptionChooser(LOCALE_VIDEOMENU_CINCH, &g_settings.analog_mode2, VIDEOMENU_VIDEOSIGNAL_HD1PLUS_CINCH_OPTIONS, VIDEOMENU_VIDEOSIGNAL_HD1PLUS_CINCH_OPTION_COUNT, true, this); - vs_chinch_ch->setHint("", LOCALE_MENU_HINT_VIDEO_CINCH_MODE); } else if (g_info.hw_caps->has_SCART) /* TRIPLEDRAGON hack... :-) TODO: SPARK? */ { @@ -353,6 +409,24 @@ int CVideoSettings::showVideoSetup() if (vs_videomodes_fw != NULL) videosetup->addItem(vs_videomodes_fw); //video modes submenue +#ifdef BOXMODEL_APOLLO + /* values are from -128 to 127, but brightness really no sense after +/- 40. changeNotify multiply contrast and saturation to 3 */ + CMenuOptionNumberChooser * bcont = new CMenuOptionNumberChooser(LOCALE_VIDEOMENU_BRIGHTNESS, &g_settings.brightness, true, -42, 42, this); + bcont->setHint("", LOCALE_MENU_HINT_VIDEO_BRIGHTNESS); + CMenuOptionNumberChooser * ccont = new CMenuOptionNumberChooser(LOCALE_VIDEOMENU_CONTRAST, &g_settings.contrast, true, -42, 42, this); + ccont->setHint("", LOCALE_MENU_HINT_VIDEO_CONTRAST); + CMenuOptionNumberChooser * scont = new CMenuOptionNumberChooser(LOCALE_VIDEOMENU_SATURATION, &g_settings.saturation, true, -42, 42, this); + scont->setHint("", LOCALE_MENU_HINT_VIDEO_SATURATION); + videosetup->addItem(bcont); + videosetup->addItem(ccont); + videosetup->addItem(scont); +#endif +#ifdef ENABLE_PIP + CPipSetup pip; + CMenuForwarder * pipsetup = new CMenuForwarder(LOCALE_VIDEOMENU_PIP, true, NULL, &pip); + pipsetup->setHint("", LOCALE_MENU_HINT_VIDEO_PIP); + videosetup->addItem(pipsetup); +#endif int res = videosetup->exec(NULL, ""); selected = videosetup->getSelected(); delete videosetup; @@ -382,10 +456,21 @@ void CVideoSettings::setVideoSettings() videoDecoder->setAspectRatio(g_settings.video_Format, -1); #endif videoDecoder->setAspectRatio(g_settings.video_Format, g_settings.video_43mode); +#ifdef ENABLE_PIP + pipDecoder->setAspectRatio(g_settings.video_Format, g_settings.video_43mode); +#endif videoDecoder->SetDBDR(g_settings.video_dbdr); CAutoModeNotifier anotify; anotify.changeNotify(NONEXISTANT_LOCALE, 0); +#ifdef BOXMODEL_APOLLO + changeNotify(LOCALE_VIDEOMENU_BRIGHTNESS, NULL); + changeNotify(LOCALE_VIDEOMENU_CONTRAST, NULL); + changeNotify(LOCALE_VIDEOMENU_SATURATION, NULL); +#endif +#ifdef ENABLE_PIP + pipDecoder->Pig(g_settings.pip_x, g_settings.pip_y, g_settings.pip_width, g_settings.pip_height, frameBuffer->getScreenWidth(true), frameBuffer->getScreenHeight(true)); +#endif } void CVideoSettings::setupVideoSystem(bool do_ask) @@ -442,28 +527,33 @@ bool CVideoSettings::changeNotify(const neutrino_locale_t OptionName, void * /* if (g_settings.video_Format != 1 && g_settings.video_Format != 3 && g_settings.video_Format != 2) g_settings.video_Format = 3; videoDecoder->setAspectRatio(g_settings.video_Format, g_settings.video_43mode); +#ifdef ENABLE_PIP + pipDecoder->setAspectRatio(g_settings.video_Format, g_settings.video_43mode); +#endif } else if (ARE_LOCALES_EQUAL(OptionName, LOCALE_VIDEOMENU_VIDEOMODE)) { setupVideoSystem(true/*ask*/); return true; } -#if 0 - else if (ARE_LOCALES_EQUAL(OptionName, LOCALE_VIDEOMENU_CONTRAST)) - { - videoDecoder->SetControl(VIDEO_CONTROL_CONTRAST, val); - } +#ifdef BOXMODEL_APOLLO else if (ARE_LOCALES_EQUAL(OptionName, LOCALE_VIDEOMENU_BRIGHTNESS)) { - videoDecoder->SetControl(VIDEO_CONTROL_BRIGHTNESS, val); + videoDecoder->SetControl(VIDEO_CONTROL_BRIGHTNESS, g_settings.brightness); } - else if (ARE_LOCALES_EQUAL(OptionName, LOCALE_VIDEOMENU_SHARPNESS)) + else if (ARE_LOCALES_EQUAL(OptionName, LOCALE_VIDEOMENU_CONTRAST)) { - videoDecoder->SetControl(VIDEO_CONTROL_SHARPNESS, val); + videoDecoder->SetControl(VIDEO_CONTROL_CONTRAST, g_settings.contrast*3); } else if (ARE_LOCALES_EQUAL(OptionName, LOCALE_VIDEOMENU_SATURATION)) { - videoDecoder->SetControl(VIDEO_CONTROL_SATURATION, val); + videoDecoder->SetControl(VIDEO_CONTROL_SATURATION, g_settings.saturation*3); + } +#endif +#if 0 + else if (ARE_LOCALES_EQUAL(OptionName, LOCALE_VIDEOMENU_SHARPNESS)) + { + videoDecoder->SetControl(VIDEO_CONTROL_SHARPNESS, val); } else if (ARE_LOCALES_EQUAL(OptionName, LOCALE_VIDEOMENU_HUE)) { @@ -492,6 +582,9 @@ void CVideoSettings::next43Mode(void) text = VIDEOMENU_43MODE_OPTIONS[curmode].value; g_settings.video_43mode = VIDEOMENU_43MODE_OPTIONS[curmode].key; videoDecoder->setAspectRatio(-1, g_settings.video_43mode); +#ifdef ENABLE_PIP + pipDecoder->setAspectRatio(-1, g_settings.video_43mode); +#endif ShowHintUTF(LOCALE_VIDEOMENU_43MODE, g_Locale->getText(text), 450, 2); } @@ -515,6 +608,9 @@ void CVideoSettings::SwitchFormat() g_settings.video_Format = VIDEOMENU_VIDEOFORMAT_OPTIONS[curmode].key; videoDecoder->setAspectRatio(g_settings.video_Format, -1); +#ifdef ENABLE_PIP + pipDecoder->setAspectRatio(g_settings.video_Format, -1); +#endif ShowHintUTF(LOCALE_VIDEOMENU_VIDEOFORMAT, g_Locale->getText(text), 450, 2); } diff --git a/src/gui/volumebar.cpp b/src/gui/volumebar.cpp new file mode 100644 index 000000000..65ead0134 --- /dev/null +++ b/src/gui/volumebar.cpp @@ -0,0 +1,317 @@ +/* + Based up Neutrino-GUI - Tuxbox-Project + Copyright (C) 2001 by Steffen Hehn 'McClean' + + Volumebar class for gui. + Copyright (C) 2013, Thilo Graf 'dbt' + Copyright (C) 2013, M. Liebmann (micha-bbg) + + License: GPL + + 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 Foundation, Inc., 51 Franklin St, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +#ifdef HAVE_CONFIG_H +#include +#endif + + +#include "gui/volumebar.h" + +#include +#include +#include + +using namespace std; + +CVolumeBar::CVolumeBar() +{ + initVarVolumeBar(); +} + +void CVolumeBar::initVarVolumeBar() +{ + //init inherited variables + initVarForm(); + col_body = COL_MENUCONTENT_PLUS_0; + height = 36; //default height + + //init variables this + + //assume volume value as pointer to global setting + vb_vol = &g_settings.current_volume; + + //items + //icon object + vb_icon = NULL; + // icon whith / height + int tmp_h = 0; + frameBuffer->getIconSize(NEUTRINO_ICON_VOLUME, &icon_w, &tmp_h); + icon_w += 12; + tmp_h += 4; + height = max(height, tmp_h); + + //progressbar object + vb_pb = NULL; + vb_pbx = 0; + vb_pbw = 0; + vb_pbh = 0; + vb_pby = 0; + // progressbar whith + pb_w = 200; + + //digit + vb_digit = NULL; + vb_digit_mode = CTextBox::CENTER; + VolumeFont = SNeutrinoSettings::FONT_TYPE_INFOBAR_INFO; + vb_font = g_Font[VolumeFont]; + + initVolumeBarSize(); + initVolumeBarPosition(); + initVolumeBarItems(); +} + +//calculates size referred for possible activated clock or/and mute icon +void CVolumeBar::initVolumeBarSize() +{ + int tmp_h = height; + + // digit whith / height + if (g_settings.volume_digits) { + tmp_h = g_Font[VolumeFont]->getDigitHeight() + (g_Font[VolumeFont]->getDigitOffset() * 18) / 10; + height = max(height, tmp_h); + digit_w = g_Font[VolumeFont]->getRenderWidth("100 "); + } + else + digit_w = 0; + + //adapt x-pos + icon_x = corner_rad + 2; + pb_x = icon_x + icon_w + 4; + digit_x = pb_x + pb_w + 5; + + //width + if (g_settings.volume_digits) + width = digit_x + digit_w + corner_rad; + else + width = pb_x + pb_w + corner_rad + 12; + + CVolumeHelper *cvh = CVolumeHelper::getInstance(); + cvh->getSpacer(&h_spacer, &v_spacer); + cvh->getDimensions(&x, &y, &sw, &sh); + + // mute icon + cvh->getMuteIconDimensions(&mute_ax, &mute_ay, &mute_dx, &mute_dy); + + clock_height = 0; + int clock_width = 0; + int mute_corrY = 0; + if ((g_settings.mode_clock) && (g_settings.volume_pos == 0)) { + // Clock and MuteIcon in a line. + clock_height = CInfoClock::getInstance(true)->time_height; + clock_width = CInfoClock::getInstance(true)->time_width; + mute_corrY = (clock_height - mute_dy) / 2; + } + else { + // Volume level and MuteIcon in a line. + if (mute_dy > height) + y += (mute_dy - height) / 2; + else + mute_corrY = (height - mute_dy) / 2; + } + cvh->setMuteIconCorrY(mute_corrY); + + if ((g_settings.mode_clock) && (!CNeutrinoApp::getInstance()->isMuted())) + frameBuffer->paintBackgroundBoxRel(sw - clock_width, y, clock_width, clock_height); + + vb_pbh = height-8; + vb_pby = height/2-vb_pbh/2; +} + +//init current position of form +void CVolumeBar::initVolumeBarPosition() +{ + CNeutrinoApp* neutrino = CNeutrinoApp::getInstance(); + + switch (g_settings.volume_pos) + { + case 0:{// upper right + int x_corr = 0; + if (( neutrino->getMode() != CNeutrinoApp::mode_scart ) && ( neutrino->getMode() != CNeutrinoApp::mode_audio) && ( neutrino->getMode() != CNeutrinoApp::mode_pic)) { + if ((neutrino->isMuted()) && (!g_settings.mode_clock)) + x_corr = mute_dx + h_spacer; + if (g_settings.mode_clock) + y += clock_height + v_spacer / 2; + } + x = sw - width - x_corr; + break; + } + case 1:// upper left + break; + case 2:// bottom left + y = (sh + frameBuffer->getScreenY()) - height - v_spacer; + break; + case 3:// bottom right + x = sw - width; + y = (sh + frameBuffer->getScreenY()) - height - v_spacer; + break; + case 4:// upper center + x = ((sw - width) / 2) + x; + break; + case 5:// bottom center + x = ((sw - width) / 2) + x; + y = (sh + frameBuffer->getScreenY()) - height - v_spacer; + break; + } +} + +void CVolumeBar::initVolumeBarItems() +{ + //icon + initVolumeBarIcon(); + + //scale + initVolumeBarScale(); + + //digits + if (g_settings.volume_digits) + initVolumeBarDigit(); +} + +//init current icon object +void CVolumeBar::initVolumeBarIcon() +{ + vb_icon = new CComponentsPicture(icon_x, 0, icon_w, height, NEUTRINO_ICON_VOLUME); + + vb_icon->setPictureAlign(CC_ALIGN_HOR_CENTER | CC_ALIGN_VER_CENTER); + vb_icon->setColorBody(col_body); + vb_icon->setCornerRadius(corner_rad); + vb_icon->setCornerType(CORNER_LEFT); + + //add icon to container + addCCItem(vb_icon); +} + +//create new scale +void CVolumeBar::initVolumeBarScale() +{ + vb_pb = new CProgressBar(); + + vb_pbx = pb_x; + vb_pbw = pb_w; + + vb_pb->setInvert(); + vb_pb->setBlink(); + vb_pb->setRgb(85, 75, 100); + vb_pb->setFrameThickness(2); + vb_pb->setProgress(vb_pbx, vb_pby, vb_pbw, vb_pbh, *vb_vol, 100); + + //add progressbar to container + addCCItem(vb_pb); +} + +//set digit text with current volume value +void CVolumeBar::initVolumeBarDigitValue() +{ + vb_digit->setText(*vb_vol ,vb_digit_mode, vb_font); +} + +//create digit +void CVolumeBar::initVolumeBarDigit() +{ + vb_digit = new CComponentsLabel(); + + vb_digit->setDimensionsAll(digit_x, 0, digit_w, height); + vb_digit->setTextColor(COL_MENUCONTENT); + initVolumeBarDigitValue(); + + //add digit label to container + addCCItem(vb_digit); +} + +//refresh and paint digit +void CVolumeBar::paintVolumeBarDigit() +{ + // digits + CTextBox* ctb = vb_digit->getCTextBoxObject(); + if (ctb) + ctb->setFontUseDigitHeight(); + int dx = vb_digit->getRealXPos(); + int dy = vb_digit->getRealYPos(); + vb_digit->setDimensionsAll(dx, dy, digit_w, height); + vb_digit->paint(CC_SAVE_SCREEN_NO); +} + + +//refresh progressbar and digit +void CVolumeBar::repaintVolScale() +{ + paintVolScale(); + + if (g_settings.volume_digits) { + initVolumeBarDigitValue(); + paintVolumeBarDigit(); + } +} + +//set current volume value and paint form +void CVolumeBar::paintVolScale() +{ + vb_pb->setValue(*vb_vol); + vb_pb->paint(CC_SAVE_SCREEN_NO); +} + + +//final paint +void CVolumeBar::paint(bool do_save_bg) +{ + //paint form + paintForm(do_save_bg); +} + + +// CVolumeHelper #################################################################################################### + +CVolumeHelper::CVolumeHelper() +{ + h_spacer = 11; + v_spacer = 6; + + CFrameBuffer *frameBuffer = CFrameBuffer::getInstance(); + x = frameBuffer->getScreenX() + h_spacer; + y = frameBuffer->getScreenY() + v_spacer; + sw = g_settings.screen_EndX - h_spacer; + sh = frameBuffer->getScreenHeight(); + + int mute_icon_dx = 0; + int mute_icon_dy = 0; + frameBuffer->getIconSize(NEUTRINO_ICON_BUTTON_MUTE, &mute_icon_dx, &mute_icon_dy); + mute_dx = mute_icon_dx; + mute_dy = mute_icon_dy; + mute_dx += mute_icon_dx / 4; + mute_dy += mute_icon_dx / 4; + mute_ax = sw - mute_dx; + mute_ay = y; + mute_corrY = 0; +} + +CVolumeHelper* CVolumeHelper::getInstance() +{ + static CVolumeHelper* Helper = NULL; + if(!Helper) + Helper = new CVolumeHelper(); + return Helper; +} diff --git a/src/gui/volumebar.h b/src/gui/volumebar.h new file mode 100644 index 000000000..ce78b7f65 --- /dev/null +++ b/src/gui/volumebar.h @@ -0,0 +1,98 @@ +/* + Based up Neutrino-GUI - Tuxbox-Project + Copyright (C) 2001 by Steffen Hehn 'McClean' + + Volumebar class for gui. + Copyright (C) 2013, Thilo Graf 'dbt' + Copyright (C) 2013, M. Liebmann (micha-bbg) + + License: GPL + + 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 Foundation, Inc., 51 Franklin St, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +#ifndef __VOLUMEBAR_H__ +#define __VOLUMEBAR_H__ + +#include //CComponentsForm +#include //CProgressBar + +class CVolumeBar : public CComponentsForm +{ + private: + CProgressBar *vb_pb; + CComponentsPicture *vb_icon; + CComponentsLabel *vb_digit; + int vb_digit_mode; + Font* vb_font; + int VolumeFont; + int sy, sw, sh; + int mute_ax, mute_ay, mute_dx, mute_dy, mute_ay_old; + int h_spacer, v_spacer; + + //clock + int clock_height; + + //volume value + char *vb_vol; + + //scale dimensions + int vb_pbx, vb_pby, vb_pbw, vb_pbh; + int icon_x, pb_x, digit_x; + int icon_w, pb_w, digit_w; + + void initVarVolumeBar(); + void initVolumeBarPosition(); + void initVolumeBarSize(); + + void initVolumeBarIcon(); + void initVolumeBarScale(); + void initVolumeBarDigitValue(); + void initVolumeBarDigit(); + void initVolumeBarItems(); + + void paintVolScale(); + void paintVolumeBarDigit(); + + public: + + CVolumeBar(/*int current_volume*/); +// ~CVolumeBar(); inherited from CComponentsForm + + void repaintVolScale(); + void paint(bool do_save_bg = CC_SAVE_SCREEN_YES); +}; + + +class CVolumeHelper +{ + private: + int x, y, sw, sh; + int mute_ax, mute_ay, mute_dx, mute_dy, mute_corrY; + int h_spacer, v_spacer; + + public: + + CVolumeHelper(); + static CVolumeHelper* getInstance(); + + void getSpacer(int *h, int *v) { *h = h_spacer; *v = v_spacer; } + void getDimensions(int *_x, int *_y, int *_sw, int *_sh) { *_x = x; *_y = y; *_sw = sw; *_sh = sh; } + void getMuteIconDimensions(int *_x, int *_y, int *w, int *h) { *_x = mute_ax; *_y = mute_ay+mute_corrY; *w = mute_dx; *h = mute_dy; } + void setMuteIconCorrY(int corr) { mute_corrY = corr; } +}; + +#endif diff --git a/src/gui/widget/Makefile.am b/src/gui/widget/Makefile.am index 1d2d1009a..08874c785 100644 --- a/src/gui/widget/Makefile.am +++ b/src/gui/widget/Makefile.am @@ -11,8 +11,12 @@ INCLUDES = \ @FREETYPE_CFLAGS@ if BOXTYPE_COOL +if BOXMODEL_APOLLO +INCLUDES += -I$(top_srcdir)/lib/libcoolstream2 +else INCLUDES += -I$(top_srcdir)/lib/libcoolstream endif +endif if USE_STB_HAL INCLUDES += -I$(STB_HAL_INC) endif diff --git a/src/gui/widget/icons.h b/src/gui/widget/icons.h index 8a3685cc2..dbeb07bf3 100644 --- a/src/gui/widget/icons.h +++ b/src/gui/widget/icons.h @@ -116,6 +116,8 @@ #define NEUTRINO_ICON_TIMER "timer" #define NEUTRINO_ICON_TUNER_1 "tuner_1" #define NEUTRINO_ICON_TUNER_2 "tuner_2" +#define NEUTRINO_ICON_TUNER_3 "tuner_3" +#define NEUTRINO_ICON_TUNER_4 "tuner_4" #define NEUTRINO_ICON_UPDATE "softupdate" #define NEUTRINO_ICON_UPNP "upnp" #define NEUTRINO_ICON_VIDEO "video" @@ -163,6 +165,7 @@ #define NEUTRINO_ICON_PERSONALIZE "personalize" #define NEUTRINO_ICON_RECORDING_EVENT_MARKER "rec_event_marker" #define NEUTRINO_ICON_ZAP "zap" +#define NEUTRINO_ICON_PIP "pip" #define DUMMY_ICON "dummy" diff --git a/src/gui/widget/menue.cpp b/src/gui/widget/menue.cpp index ee0feadb2..bbe69a1b7 100644 --- a/src/gui/widget/menue.cpp +++ b/src/gui/widget/menue.cpp @@ -190,9 +190,6 @@ void CMenuItem::paintItemButton(const bool select_mode, const int &item_height, bool selected = select_mode; bool icon_painted = false; - int w = 0; - int h = 0; - std::string icon_name = iconName; int icon_w = 0; int icon_h = 0; @@ -223,11 +220,9 @@ void CMenuItem::paintItemButton(const bool select_mode, const int &item_height, //get data of number icon and paint if (!icon_name.empty()) { - frameBuffer->getIconSize(icon_name.c_str(), &w, &h); - icon_w = w; - icon_h = h; - - if (active && icon_w>0 && icon_h>0) + frameBuffer->getIconSize(icon_name.c_str(), &icon_w, &icon_h); + + if (active && icon_w>0 && icon_h>0 && icon_space_x >= icon_w) { icon_x = icon_space_mid - (icon_w/2); @@ -248,9 +243,7 @@ void CMenuItem::paintItemButton(const bool select_mode, const int &item_height, //get data of number right info icon and paint if (!iconName_Info_right.empty()) { - frameBuffer->getIconSize(iconName_Info_right.c_str(), &w, &h); - icon_w = w; - icon_h = h; + frameBuffer->getIconSize(iconName_Info_right.c_str(), &icon_w, &icon_h); if (active && icon_w>0 && icon_h>0) { @@ -663,6 +656,8 @@ int CMenuWidget::exec(CMenuTarget* parent, const std::string &) if(hasItem() && selected > -1 && (int)items.size() > selected) { //exec this item... CMenuItem* item = items[selected]; + if (!item->isSelectable()) + break; item->msg = msg; fader.Stop(); int rv = item->exec( this ); @@ -975,9 +970,7 @@ void CMenuWidget::setMenuPos(const int& menu_width) } void CMenuWidget::paintItems() -{ - int item_height=height-(item_start_y-y); - +{ //Item not currently on screen if (selected >= 0) { @@ -990,10 +983,13 @@ void CMenuWidget::paintItems() // Scrollbar if(total_pages>1) { + int item_height=height-(item_start_y-y); frameBuffer->paintBoxRel(x+ width,item_start_y, 15, item_height, COL_MENUCONTENT_PLUS_1, RADIUS_MIN); frameBuffer->paintBoxRel(x+ width +2, item_start_y+ 2+ current_page*(item_height-4)/total_pages, 11, (item_height-4)/total_pages, COL_MENUCONTENT_PLUS_3, RADIUS_MIN); + if(current_page==total_pages-1){ + frameBuffer->paintBoxRel(x,item_start_y, width,item_height, COL_MENUCONTENT_PLUS_0); + } } - frameBuffer->paintBoxRel(x,item_start_y, width,item_height, COL_MENUCONTENT_PLUS_0); int ypos=item_start_y; for (unsigned int count = 0; count < items.size(); count++) { @@ -1092,11 +1088,6 @@ void CMenuWidget::paintHint(int pos) if (pos < 0 && !hint_painted) return; - int rad = RADIUS_LARGE; - - int xpos = x - ConnectLineBox_Width; - int ypos2 = y + height + rad + SHADOW_OFFSET + INFO_BOX_Y_OFFSET; - int iwidth = width+sb_width; #if 0 if (hint_painted) { /* clear detailsline line */ @@ -1129,7 +1120,7 @@ void CMenuWidget::paintHint(int pos) } if (pos < 0) return; - + CMenuItem* item = items[pos]; if (item->hintIcon.empty() && item->hint == NONEXISTANT_LOCALE) { @@ -1152,6 +1143,10 @@ void CMenuWidget::paintHint(int pos) return; int iheight = item->getHeight(); + int rad = RADIUS_LARGE; + int xpos = x - ConnectLineBox_Width; + int ypos2 = y + height + rad + SHADOW_OFFSET + INFO_BOX_Y_OFFSET; + int iwidth = width+sb_width; //init details line and infobox dimensions int ypos1 = item->getYPosition(); @@ -1814,6 +1809,15 @@ void CMenuForwarderNonLocalized::setText(const char * const Text) int CMenuForwarderNonLocalized::getWidth(void) { int tw = g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getRenderWidth(the_text, true); + const char * option_text = NULL; + if (option) + option_text = option; + else if (option_string) + option_text = option_string->c_str(); + + if (option_text != NULL) + tw += 10 + g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getRenderWidth(option_text, true); + return tw; } //------------------------------------------------------------------------------------------------------------------------------- @@ -1862,9 +1866,8 @@ int CMenuSeparator::getWidth(void) int CMenuSeparator::paint(bool selected) { - int height; + int height = getHeight(); CFrameBuffer * frameBuffer = CFrameBuffer::getInstance(); - height = getHeight(); if ((type & SUB_HEAD)) { @@ -1885,8 +1888,7 @@ int CMenuSeparator::paint(bool selected) } if ((type & STRING)) { - const char * l_text; - l_text = getString(); + const char * l_text = getString(); if (text != NONEXISTANT_LOCALE || strlen(l_text) != 0) { diff --git a/src/gui/widget/menue.h b/src/gui/widget/menue.h index 8e43475f5..6f78bea21 100644 --- a/src/gui/widget/menue.h +++ b/src/gui/widget/menue.h @@ -194,11 +194,11 @@ public: class CMenuForwarder : public CMenuItem { - const char * option; - const std::string * option_string; std::string actionKey; protected: + const char * option; + const std::string * option_string; CMenuTarget * jumpTarget; neutrino_locale_t text; diff --git a/src/gui/widget/messagebox.cpp b/src/gui/widget/messagebox.cpp index c845161a7..be2e7fda9 100644 --- a/src/gui/widget/messagebox.cpp +++ b/src/gui/widget/messagebox.cpp @@ -40,17 +40,17 @@ #include #include -CMessageBox::CMessageBox(const neutrino_locale_t Caption, const char * const Text, const int Width, const char * const Icon, const CMessageBox::result_ Default, const uint32_t ShowButtons) : CHintBoxExt(Caption, Text, Width, Icon) +CMessageBox::CMessageBox(const neutrino_locale_t Caption, const char * const Text, const int Width, const char * const Icon, const CMessageBox::result_ &Default, const uint32_t ShowButtons) : CHintBoxExt(Caption, Text, Width, Icon) { Init(Default, ShowButtons); } -CMessageBox::CMessageBox(const neutrino_locale_t Caption, ContentLines& Lines, const int Width, const char * const Icon, const CMessageBox::result_ Default, const uint32_t ShowButtons) : CHintBoxExt(Caption, Lines, Width, Icon) +CMessageBox::CMessageBox(const neutrino_locale_t Caption, ContentLines& Lines, const int Width, const char * const Icon, const CMessageBox::result_ &Default, const uint32_t ShowButtons) : CHintBoxExt(Caption, Lines, Width, Icon) { Init(Default, ShowButtons); } -void CMessageBox::Init(const CMessageBox::result_ Default, const uint32_t ShowButtons) +void CMessageBox::Init(const CMessageBox::result_ &Default, const uint32_t ShowButtons) { #define BtnCount 3 returnDefaultOnTimeout = false; @@ -277,7 +277,7 @@ int CMessageBox::exec(int timeout) return res; } -int ShowMsgUTF(const neutrino_locale_t Caption, const char * const Text, const CMessageBox::result_ Default, const uint32_t ShowButtons, const char * const Icon, const int Width, const int timeout, bool returnDefaultOnTimeout) +int ShowMsgUTF(const neutrino_locale_t Caption, const char * const Text, const CMessageBox::result_ &Default, const uint32_t ShowButtons, const char * const Icon, const int Width, const int timeout, bool returnDefaultOnTimeout) { CMessageBox* messageBox = new CMessageBox(Caption, Text, Width, Icon, Default, ShowButtons); messageBox->returnDefaultValueOnTimeout(returnDefaultOnTimeout); @@ -288,12 +288,12 @@ int ShowMsgUTF(const neutrino_locale_t Caption, const char * const Text, const C return res; } -int ShowLocalizedMessage(const neutrino_locale_t Caption, const neutrino_locale_t Text, const CMessageBox::result_ Default, const uint32_t ShowButtons, const char * const Icon, const int Width, const int timeout, bool returnDefaultOnTimeout) +int ShowLocalizedMessage(const neutrino_locale_t Caption, const neutrino_locale_t Text, const CMessageBox::result_ &Default, const uint32_t ShowButtons, const char * const Icon, const int Width, const int timeout, bool returnDefaultOnTimeout) { return ShowMsgUTF(Caption, g_Locale->getText(Text), Default, ShowButtons, Icon, Width, timeout,returnDefaultOnTimeout); } -int ShowMsgUTF(const neutrino_locale_t Caption, const std::string & Text, const CMessageBox::result_ Default, const uint32_t ShowButtons, const char * const Icon, const int Width, const int timeout, bool returnDefaultOnTimeout) +int ShowMsgUTF(const neutrino_locale_t Caption, const std::string & Text, const CMessageBox::result_ &Default, const uint32_t ShowButtons, const char * const Icon, const int Width, const int timeout, bool returnDefaultOnTimeout) { return ShowMsgUTF(Caption, Text.c_str(), Default, ShowButtons, Icon, Width, timeout,returnDefaultOnTimeout); } diff --git a/src/gui/widget/messagebox.h b/src/gui/widget/messagebox.h index ea8a65e26..4dd740875 100644 --- a/src/gui/widget/messagebox.h +++ b/src/gui/widget/messagebox.h @@ -87,21 +87,21 @@ class CMessageBox : public CHintBoxExt } buttons; // Text & Caption are always UTF-8 encoded - CMessageBox(const neutrino_locale_t Caption, const char * const Text, const int Width = 500, const char * const Icon = NULL, const CMessageBox::result_ Default = mbrYes, const uint32_t ShowButtons = mbAll); + CMessageBox(const neutrino_locale_t Caption, const char * const Text, const int Width = 500, const char * const Icon = NULL, const CMessageBox::result_ &Default = mbrYes, const uint32_t ShowButtons = mbAll); - CMessageBox(const neutrino_locale_t Caption, ContentLines& Lines, const int Width = 500, const char * const Icon = NULL, const CMessageBox::result_ Default = mbrYes, const uint32_t ShowButtons = mbAll); + CMessageBox(const neutrino_locale_t Caption, ContentLines& Lines, const int Width = 500, const char * const Icon = NULL, const CMessageBox::result_ &Default = mbrYes, const uint32_t ShowButtons = mbAll); int exec(int timeout = -1); void returnDefaultValueOnTimeout(bool returnDefault); private: - void Init(const CMessageBox::result_ Default, const uint32_t ShowButtons); + void Init(const CMessageBox::result_ &Default, const uint32_t ShowButtons); }; // Text is always UTF-8 encoded -int ShowLocalizedMessage(const neutrino_locale_t Caption, const neutrino_locale_t Text, const CMessageBox::result_ Default, const uint32_t ShowButtons, const char * const Icon = NULL, const int Width = 450, const int timeout = -1, bool returnDefaultOnTimeout = false); -int ShowMsgUTF(const neutrino_locale_t Caption, const char * const Text, const CMessageBox::result_ Default, const uint32_t ShowButtons, const char * const Icon = NULL, const int Width = 450, const int timeout = -1, bool returnDefaultOnTimeout = false); // UTF-8 -int ShowMsgUTF(const neutrino_locale_t Caption, const std::string & Text, const CMessageBox::result_ Default, const uint32_t ShowButtons, const char * const Icon = NULL, const int Width = 450, const int timeout = -1, bool returnDefaultOnTimeout = false); // UTF-8 +int ShowLocalizedMessage(const neutrino_locale_t Caption, const neutrino_locale_t Text, const CMessageBox::result_ &Default, const uint32_t ShowButtons, const char * const Icon = NULL, const int Width = 450, const int timeout = -1, bool returnDefaultOnTimeout = false); +int ShowMsgUTF(const neutrino_locale_t Caption, const char * const Text, const CMessageBox::result_ &Default, const uint32_t ShowButtons, const char * const Icon = NULL, const int Width = 450, const int timeout = -1, bool returnDefaultOnTimeout = false); // UTF-8 +int ShowMsgUTF(const neutrino_locale_t Caption, const std::string & Text, const CMessageBox::result_ &Default, const uint32_t ShowButtons, const char * const Icon = NULL, const int Width = 450, const int timeout = -1, bool returnDefaultOnTimeout = false); // UTF-8 void DisplayErrorMessage(const char * const ErrorMsg); // UTF-8 void DisplayInfoMessage(const char * const InfoMsg); // UTF-8 diff --git a/src/gui/widget/stringinput.cpp b/src/gui/widget/stringinput.cpp index 5e4a6d99a..77e642aa0 100644 --- a/src/gui/widget/stringinput.cpp +++ b/src/gui/widget/stringinput.cpp @@ -6,14 +6,6 @@ Copyright (C) 2009-2012 Stefan Seyfried - Kommentar: - - Diese GUI wurde von Grund auf neu programmiert und sollte nun vom - Aufbau und auch den Ausbaumoeglichkeiten gut aussehen. Neutrino basiert - auf der Client-Server Idee, diese GUI ist also von der direkten DBox- - Steuerung getrennt. Diese wird dann von Daemons uebernommen. - - License: GPL This program is free software; you can redistribute it and/or modify @@ -52,7 +44,6 @@ CStringInput::CStringInput(const neutrino_locale_t Name, char* Value, const int min_value, const int max_value, int Size, const neutrino_locale_t Hint_1, const neutrino_locale_t Hint_2, const char * const Valid_Chars, CChangeObserver* Observ, const char * const Icon) { - frameBuffer = CFrameBuffer::getInstance(); name = Name; head = NULL; value = Value; @@ -72,7 +63,6 @@ CStringInput::CStringInput(const neutrino_locale_t Name, char* Value, const int CStringInput::CStringInput(const neutrino_locale_t Name, char* Value, int Size, const neutrino_locale_t Hint_1, const neutrino_locale_t Hint_2, const char * const Valid_Chars, CChangeObserver* Observ, const char * const Icon) { - frameBuffer = CFrameBuffer::getInstance(); name = Name; head = NULL; value = Value; @@ -93,7 +83,6 @@ CStringInput::CStringInput(const neutrino_locale_t Name, char* Value, int Size, CStringInput::CStringInput(const neutrino_locale_t Name, std::string* Value, int Size, const neutrino_locale_t Hint_1, const neutrino_locale_t Hint_2, const char * const Valid_Chars, CChangeObserver* Observ, const char * const Icon) { - frameBuffer = CFrameBuffer::getInstance(); name = Name; head = NULL; value = new char[Size+1]; @@ -115,7 +104,6 @@ CStringInput::CStringInput(const neutrino_locale_t Name, std::string* Value, int CStringInput::CStringInput(char * Head, char* Value, int Size, const neutrino_locale_t Hint_1, const neutrino_locale_t Hint_2, const char * const Valid_Chars, CChangeObserver* Observ, const char * const Icon) { - frameBuffer = CFrameBuffer::getInstance(); head = strdup(Head); value = Value; valueString = NULL; @@ -143,46 +131,66 @@ CStringInput::~CStringInput() } } +#define CStringInputSMSButtonsCount 2 +const struct button_label CStringInputSMSButtons[CStringInputSMSButtonsCount] = +{ + { NEUTRINO_ICON_BUTTON_RED , LOCALE_STRINGINPUT_CAPS }, + { NEUTRINO_ICON_BUTTON_YELLOW, LOCALE_STRINGINPUT_CLEAR } +}; + void CStringInput::init() { - width = (size*20)+40; - - if (width<420) - width = 420; - - int neededWidth; - if(head) { - neededWidth = g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]->getRenderWidth(head, true); // UTF-8 - } - else - neededWidth = g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]->getRenderWidth(g_Locale->getText(name), true); // UTF-8 - - if (!(iconfile.empty())) - neededWidth += 28; - if (neededWidth+20> width) - width = neededWidth+20; + frameBuffer = CFrameBuffer::getInstance(); +#ifdef DEBUG_STRINGINPUT + printf("HEAD: %s (len: %d)\n", head, strlen(head)); +#endif hheight = g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]->getHeight(); + iheight = g_Font[SNeutrinoSettings::FONT_TYPE_MENU_INFO]->getHeight(); + fheight = g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->getHeight() + 6; // init min buttonbar height + input_h = g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getHeight() + 2; // font height + border + input_w = g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getRenderWidth("M") + 2; // hack font width + border + offset = 20; + + width = std::max(size*input_w + 2*offset, (int) frameBuffer->getScreenWidth() / 100 * 45); + + int tmp_w = 0; + if (head) + tmp_w = g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]->getRenderWidth(head, true); // UTF-8 + else + tmp_w = g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]->getRenderWidth(g_Locale->getText(name), true); // UTF-8 + if (!(iconfile.empty())) { int icol_w, icol_h; frameBuffer->getIconSize(iconfile.c_str(), &icol_w, &icol_h); - hheight = std::max(hheight, icol_h+4); + hheight = std::max(hheight, icol_h + (offset/4)); + tmp_w += icol_w + (offset/2); } - mheight = g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getHeight(); - iheight = g_Font[SNeutrinoSettings::FONT_TYPE_MENU_INFO]->getHeight(); - //footerHeight = g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->getHeight()+8; //initial height value for buttonbar - height = hheight+ mheight + 50; - if (hint_1 != NONEXISTANT_LOCALE) + width = std::max(width, tmp_w + offset); + + bheight = input_h + 2*offset; + if ((hint_1 != NONEXISTANT_LOCALE) || (hint_2 != NONEXISTANT_LOCALE)) { - height += iheight; + if (hint_1 != NONEXISTANT_LOCALE) + { + tmp_w = g_Font[SNeutrinoSettings::FONT_TYPE_MENU_INFO]->getRenderWidth(g_Locale->getText(hint_1), true); + width = std::max(width, tmp_w + 2*offset); + bheight += iheight; + } if (hint_2 != NONEXISTANT_LOCALE) - height += iheight; + { + tmp_w = g_Font[SNeutrinoSettings::FONT_TYPE_MENU_INFO]->getRenderWidth(g_Locale->getText(hint_2), true); + width = std::max(width, tmp_w + 2*offset); + bheight += iheight; + } + bheight += offset; } - height += g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->getHeight()+6; //buttonbar; + + height = hheight+ bheight; // space for the possible numpad and the buttonbar will be added in initSMS() - x = frameBuffer->getScreenX() + ((frameBuffer->getScreenWidth() - width)>>1); - y = frameBuffer->getScreenY() + ((frameBuffer->getScreenHeight()-height)>>1); + x = getScreenStartX(width); + y = getScreenStartY(height); selected = 0; } @@ -433,8 +441,7 @@ int CStringInput::exec( CMenuTarget* parent, const std::string & ) paint(); frameBuffer->blit(); - uint64_t timeoutEnd = CRCInput::calcTimeoutEnd(g_settings.timing[SNeutrinoSettings::TIMING_MENU] == 0 ? 0xFFFF : g_settings.timing[SNeutrinoSettings -::TIMING_MENU]); + uint64_t timeoutEnd = CRCInput::calcTimeoutEnd(g_settings.timing[SNeutrinoSettings::TIMING_MENU] == 0 ? 0xFFFF : g_settings.timing[SNeutrinoSettings::TIMING_MENU]); bool loop=true; while (loop) @@ -449,8 +456,7 @@ int CStringInput::exec( CMenuTarget* parent, const std::string & ) g_RCInput->getMsgAbsoluteTimeout(&msg, &data, &timeoutEnd, true ); if ( msg <= CRCInput::RC_MaxRC ) - timeoutEnd = CRCInput::calcTimeoutEnd(g_settings.timing[SNeutrinoSettings::TIMING_MENU] == 0 ? 0xFFFF : g_settings.timing[SNeutrinoSettings -::TIMING_MENU]); + timeoutEnd = CRCInput::calcTimeoutEnd(g_settings.timing[SNeutrinoSettings::TIMING_MENU] == 0 ? 0xFFFF : g_settings.timing[SNeutrinoSettings::TIMING_MENU]); if (msg==CRCInput::RC_left) { @@ -577,59 +583,66 @@ int CStringInput::handleOthers(const neutrino_msg_t /*msg*/, const neutrino_msg_ void CStringInput::hide() { - frameBuffer->paintBackgroundBoxRel(x, y, width, height + hheight); + frameBuffer->paintBackgroundBoxRel(x, y, width, height); frameBuffer->blit(); } -const char * CStringInput::getHint1(void) +void CStringInput::paint(bool sms) { - return g_Locale->getText(hint_1); -} - -void CStringInput::paint(bool buttons) -{ - int iconoffset; - int icol_w, icol_h; - int radius; - - /* if there's a button bar below the stringinput (SMS), no rounded corners */ - if (buttons) - radius = 0; - else - radius = RADIUS_LARGE; - frameBuffer->paintBoxRel(x, y, width, hheight, COL_MENUHEAD_PLUS_0, RADIUS_LARGE, CORNER_TOP); //round - frameBuffer->paintBoxRel(x, y + hheight, width, height - hheight, COL_MENUCONTENT_PLUS_0, radius, CORNER_BOTTOM); + frameBuffer->paintBoxRel(x, y + hheight, width, bheight, COL_MENUCONTENT_PLUS_0, sms ? 0 : RADIUS_LARGE, CORNER_BOTTOM); + int icol_w = 0, icol_h = 0, icol_o = 0; if (!(iconfile.empty())) { frameBuffer->getIconSize(iconfile.c_str(), &icol_w, &icol_h); - frameBuffer->paintIcon(iconfile, x + 8, y, hheight); - iconoffset = icol_w + 10; + frameBuffer->paintIcon(iconfile, x + (offset/2), y, hheight); + icol_o = icol_w + (offset/2); } - else - iconoffset = 0; - g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]->RenderString(x+ 10+ iconoffset, y+ hheight, width- 10- iconoffset, head ? head : g_Locale->getText(name), COL_MENUHEAD, 0, true); // UTF-8 + g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]->RenderString(x+ (offset/2)+ icol_o, y+ hheight, width- offset- icol_o, head ? head : g_Locale->getText(name), COL_MENUHEAD, 0, true); // UTF-8 - if (hint_1 != NONEXISTANT_LOCALE) + int tmp_y = y+ hheight+ offset+ input_h+ offset; + if ((hint_1 != NONEXISTANT_LOCALE) || (hint_2 != NONEXISTANT_LOCALE)) { - g_Font[SNeutrinoSettings::FONT_TYPE_MENU_INFO]->RenderString(x+ 20, y+ hheight+ mheight+ iheight+ 40, width- 20, getHint1(), COL_MENUCONTENT, 0, true); // UTF-8 + if (hint_1 != NONEXISTANT_LOCALE) + { + tmp_y += iheight; + g_Font[SNeutrinoSettings::FONT_TYPE_MENU_INFO]->RenderString(x+ offset, tmp_y, width- 2*offset, g_Locale->getText(hint_1), COL_MENUCONTENT, 0, true); // UTF-8 + } if (hint_2 != NONEXISTANT_LOCALE) - g_Font[SNeutrinoSettings::FONT_TYPE_MENU_INFO]->RenderString(x+ 20, y+ hheight+ mheight+ iheight* 2+ 40, width- 20, g_Locale->getText(hint_2), COL_MENUCONTENT, 0, true); // UTF-8 + { + tmp_y += iheight; + g_Font[SNeutrinoSettings::FONT_TYPE_MENU_INFO]->RenderString(x+ offset, tmp_y, width- 2*offset, g_Locale->getText(hint_2), COL_MENUCONTENT, 0, true); // UTF-8 + } + tmp_y += offset; + } + + icol_w = icol_h = 0; + if (sms) + { + frameBuffer->getIconSize(NEUTRINO_ICON_NUMERIC_PAD, &icol_w, &icol_h); + frameBuffer->paintIcon(NEUTRINO_ICON_NUMERIC_PAD, x + (width/2) - (icol_w/2), tmp_y, 0, COL_MENUCONTENT); + + //buttonbar + ::paintButtons(x, y+ hheight+ bheight, width, CStringInputSMSButtonsCount, CStringInputSMSButtons, width, fheight); + //::paintButtons(x, y + height, width, 2, CStringInputSMSButtons, width); } for (int count=0;countpaintBoxRel(xpos, ypos, xs, ys, COL_MENUCONTENT_PLUS_4); - frameBuffer->paintBoxRel(xpos+ 1, ypos+ 1, xs- 2, ys- 2, bgcolor); + frameBuffer->paintBoxRel(xpos, ypos, input_w, input_h, COL_MENUCONTENT_PLUS_2); + frameBuffer->paintBoxRel(xpos+ 1, ypos+ 1, input_w- 2, input_h- 2, bgcolor); - int xfpos = xpos + ((xs- g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getRenderWidth(ch))>>1); - - g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(xfpos,ypos+ys, width, ch, color); -} - -void CStringInput::paintChar(int pos) -{ - if(pos<(int)strlen(value)) - paintChar(pos, value[pos]); + int ch_w = g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getRenderWidth(ch); + int ch_x = xpos + std::max(input_w/2 - ch_w/2, 0); + g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(ch_x, ypos+ input_h, ch_w, ch, color); } CStringInputSMS::CStringInputSMS(const neutrino_locale_t Name, std::string* Value, int Size, const neutrino_locale_t Hint_1, const neutrino_locale_t Hint_2, const char * const Valid_Chars, CChangeObserver* Observ, const char * const Icon) @@ -669,7 +676,7 @@ CStringInputSMS::CStringInputSMS(const neutrino_locale_t Name, std::string* Valu CStringInputSMS::CStringInputSMS(const neutrino_locale_t Name, char* Value, int Size, const neutrino_locale_t Hint_1, const neutrino_locale_t Hint_2, const char * const Valid_Chars, CChangeObserver* Observ, const char * const Icon) : CStringInput(Name, Value, Size, Hint_1, Hint_2, Valid_Chars, Observ, Icon) - { +{ initSMS(Valid_Chars); } @@ -698,8 +705,23 @@ void CStringInputSMS::initSMS(const char * const Valid_Chars) arraySizes[i] = j; } - height+=260; - y = ((500-height)>>1); + int icol_w = 0, icol_h = 0; + frameBuffer->getIconSize(NEUTRINO_ICON_NUMERIC_PAD, &icol_w, &icol_h); + bheight += icol_h + offset; + + icol_w = icol_h = 0; + for (int i = 0; i < CStringInputSMSButtonsCount; i++) + { + // get max iconsize in buttonbar + int w = 0, h = 0; + frameBuffer->getIconSize(CStringInputSMSButtons[i].button, &w, &h); + icol_w = std::max(icol_w, w); + icol_h = std::max(icol_h, h); + } + fheight = std::max(fheight, icol_h + offset/5); + + height = hheight + bheight + fheight; + y = getScreenStartY(height); } void CStringInputSMS::NormalKeyPressed(const neutrino_msg_t key) @@ -798,22 +820,9 @@ void CStringInputSMS::keyRightPressed() CStringInput::keyRightPressed(); } -const struct button_label CStringInputSMSButtons[2] = -{ - { NEUTRINO_ICON_BUTTON_RED , LOCALE_STRINGINPUT_CAPS }, - { NEUTRINO_ICON_BUTTON_YELLOW, LOCALE_STRINGINPUT_CLEAR } -}; - void CStringInputSMS::paint(bool /*unused*/) { - CStringInput::paint(true); - - int w = 0, h = 0; - frameBuffer->getIconSize(NEUTRINO_ICON_NUMERIC_PAD, &w, &h); - frameBuffer->paintIcon(NEUTRINO_ICON_NUMERIC_PAD, x + (width/2) - (w/2), y+ hheight+ mheight+ iheight* 3+ 30, 0, COL_MENUCONTENT); - - //buttonbar - ::paintButtons(x, y + height, width, 2, CStringInputSMSButtons, width); + CStringInput::paint(true /* sms */); } void CPINInput::paintChar(int pos) @@ -910,6 +919,14 @@ int CPINInput::exec( CMenuTarget* parent, const std::string & ) return res; } +void CEnquiryInput::paintChar(int pos) +{ + if (blind) + CStringInput::paintChar(pos, (value[pos] == ' ') ? ' ' : '*'); + else + CStringInput::paintChar(pos, value[pos]); +} + int CPLPINInput::handleOthers(neutrino_msg_t msg, neutrino_msg_data_t data) { int res = messages_return::unhandled; @@ -931,7 +948,7 @@ const char * CPLPINInput::getHint1(void) if (fsk == 0x100) { hint_1 = LOCALE_PARENTALLOCK_LOCKEDCHANNEL; - return CStringInput::getHint1(); + return g_Locale->getText(hint_1); } else { diff --git a/src/gui/widget/stringinput.h b/src/gui/widget/stringinput.h index 8834f3914..b0b64fe8e 100644 --- a/src/gui/widget/stringinput.h +++ b/src/gui/widget/stringinput.h @@ -4,13 +4,6 @@ Copyright (C) 2001 Steffen Hehn 'McClean' Homepage: http://dbox.cyberphoria.org/ - Kommentar: - - Diese GUI wurde von Grund auf neu programmiert und sollte nun vom - Aufbau und auch den Ausbaumoeglichkeiten gut aussehen. Neutrino basiert - auf der Client-Server Idee, diese GUI ist also von der direkten DBox- - Steuerung getrennt. Diese wird dann von Daemons uebernommen. - License: GPL @@ -49,8 +42,12 @@ class CStringInput : public CMenuTarget int width; int height; int hheight; // head font height - int mheight; // menu font height int iheight; + int bheight; // body height + int fheight; // footer height + int input_h; // input field height + int input_w; // input field width + int offset; int lower_bound; int upper_bound; @@ -66,9 +63,8 @@ class CStringInput : public CMenuTarget CChangeObserver * observ; virtual void init(); - virtual const char * getHint1(void); - virtual void paint(bool buttons = false); + virtual void paint(bool sms = false); virtual void paintChar(int pos, char c); virtual void paintChar(int pos); @@ -140,6 +136,21 @@ class CPINInput : public CStringInput int exec( CMenuTarget* parent, const std::string & actionKey ); }; +// For CI +class CEnquiryInput : public CPINInput +{ + private: + bool blind; + protected: + virtual void paintChar(int pos); + public: + CEnquiryInput(const neutrino_locale_t Name, char* Value, int Size, bool Blind, const neutrino_locale_t Hint_1 = NONEXISTANT_LOCALE, const neutrino_locale_t Hint_2 = NONEXISTANT_LOCALE, const char * const Valid_Chars= (const char *)"0123456789", CChangeObserver* Observ = NULL) + : CPINInput(Name, (char *)Value, Size, Hint_1, Hint_2, Valid_Chars, Observ) { blind = Blind; } + CEnquiryInput(char * Head, char* Value, int Size, bool Blind, const neutrino_locale_t Hint_1 = NONEXISTANT_LOCALE, const neutrino_locale_t Hint_2 = NONEXISTANT_LOCALE, const char * const Valid_Chars= (const char *)"0123456789", CChangeObserver* Observ = NULL) + : CPINInput(Head, (char *)Value, Size, Hint_1, Hint_2, Valid_Chars, Observ) { blind = Blind; } +}; + + class CPLPINInput : public CPINInput { protected: diff --git a/src/gui/widget/stringinput_ext.cpp b/src/gui/widget/stringinput_ext.cpp index a7cd842c3..04646fb0b 100644 --- a/src/gui/widget/stringinput_ext.cpp +++ b/src/gui/widget/stringinput_ext.cpp @@ -4,13 +4,6 @@ Copyright (C) 2001 Steffen Hehn 'McClean' Homepage: http://dbox.cyberphoria.org/ - Kommentar: - - Diese GUI wurde von Grund auf neu programmiert und sollte nun vom - Aufbau und auch den Ausbaumoeglichkeiten gut aussehen. Neutrino basiert - auf der Client-Server Idee, diese GUI ist also von der direkten DBox- - Steuerung getrennt. Diese wird dann von Daemons uebernommen. - License: GPL @@ -37,6 +30,7 @@ #include #include +#include #include @@ -61,22 +55,41 @@ CExtendedInput::CExtendedInput(const neutrino_locale_t Name, char* Value, const void CExtendedInput::Init(void) { - frameBuffer = CFrameBuffer::getInstance(); + hheight = g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]->getHeight(); - mheight = g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getHeight(); iheight = g_Font[SNeutrinoSettings::FONT_TYPE_MENU_INFO]->getHeight(); + input_h = g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getHeight() + 2; // font height + border + input_w = g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getRenderWidth("M") + 2; // hack font width + border + offset = 20; - width = g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]->getRenderWidth(g_Locale->getText(name), true) + 20; // UTF-8 - height = hheight+ mheight+ 20; + width = frameBuffer->getScreenWidth() / 100 * 45; - if (hint_1 != NONEXISTANT_LOCALE) - height += iheight; - if (hint_2 != NONEXISTANT_LOCALE) - height += iheight; + int tmp_w = g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]->getRenderWidth(g_Locale->getText(name), true); // UTF-8 + width = std::max(width, tmp_w + offset); - x = frameBuffer->getScreenX() + ((frameBuffer->getScreenWidth() - width)>>1); - y = frameBuffer->getScreenY() + ((frameBuffer->getScreenHeight() - height)>>1); + bheight = input_h + 2*offset; + if ((hint_1 != NONEXISTANT_LOCALE) || (hint_2 != NONEXISTANT_LOCALE)) + { + if (hint_1 != NONEXISTANT_LOCALE) + { + tmp_w = g_Font[SNeutrinoSettings::FONT_TYPE_MENU_INFO]->getRenderWidth(g_Locale->getText(hint_1), true); + width = std::max(width, tmp_w + 2*offset); + bheight += iheight; + } + if (hint_2 != NONEXISTANT_LOCALE) + { + tmp_w = g_Font[SNeutrinoSettings::FONT_TYPE_MENU_INFO]->getRenderWidth(g_Locale->getText(hint_2), true); + width = std::max(width, tmp_w + 2*offset); + bheight += iheight; + } + bheight += offset; + } + + height = hheight+ bheight; + + x = getScreenStartX(width); + y = getScreenStartY(height); } CExtendedInput::~CExtendedInput() @@ -107,32 +120,15 @@ void CExtendedInput::calculateDialog() { selectedChar = i; } - maxX = ix > maxX ? ix : maxX; - maxY = iy > maxY ? iy : maxY; + maxX = std::max(ix, maxX); + maxY = std::max(iy, maxY); } - width = width > maxX+40 ? width : maxX+40; - height = height > maxY + hheight + mheight ? height : maxY + hheight + mheight; + width = std::max(width, maxX + 2*offset); + height = std::max(height, maxY + bheight); - hintPosY = height -10; - - if (hint_1 != NONEXISTANT_LOCALE) { - height += iheight; - int hw = g_Font[SNeutrinoSettings::FONT_TYPE_MENU_INFO]->getRenderWidth(g_Locale->getText(hint_1), true); - if(width < hw + 40) - width = hw + 40; - } - if (hint_2 != NONEXISTANT_LOCALE) { - height += iheight; - int hw = g_Font[SNeutrinoSettings::FONT_TYPE_MENU_INFO]->getRenderWidth(g_Locale->getText(hint_2), true); - if(width < hw) - width = hw; - } - - x = frameBuffer->getScreenX() + ((frameBuffer->getScreenWidth() - width)>>1); - y = frameBuffer->getScreenY() + ((frameBuffer->getScreenHeight() - height)>>1); - - hintPosY += y; + x = getScreenStartX(width); + y = getScreenStartY(height); } @@ -163,8 +159,7 @@ int CExtendedInput::exec( CMenuTarget* parent, const std::string & ) paint(); frameBuffer->blit(); - uint64_t timeoutEnd = CRCInput::calcTimeoutEnd(g_settings.timing[SNeutrinoSettings::TIMING_MENU] == 0 ? 0xFFFF : g_settings.timing[SNeutrinoSettings -::TIMING_MENU]); + uint64_t timeoutEnd = CRCInput::calcTimeoutEnd(g_settings.timing[SNeutrinoSettings::TIMING_MENU] == 0 ? 0xFFFF : g_settings.timing[SNeutrinoSettings::TIMING_MENU]); bool loop=true; while (loop) @@ -199,8 +194,8 @@ int CExtendedInput::exec( CMenuTarget* parent, const std::string & ) } } if(found) { - inputFields[oldSelectedChar]->paint( x+20, y+hheight +20, false ); - inputFields[selectedChar]->paint( x+20, y+hheight +20, true ); + inputFields[oldSelectedChar]->paint(x+ offset, y+ hheight+ offset, false ); + inputFields[selectedChar]->paint(x+ offset, y+ hheight+ offset, true ); std::string tmp = value; CVFD::getInstance()->showMenuText(1, tmp.c_str(), selectedChar+1); } @@ -227,8 +222,8 @@ int CExtendedInput::exec( CMenuTarget* parent, const std::string & ) } } if(found) { - inputFields[oldSelectedChar]->paint( x+20, y+hheight +20, false ); - inputFields[selectedChar]->paint( x+20, y+hheight +20, true ); + inputFields[oldSelectedChar]->paint(x+ offset, y+ hheight+ offset, false ); + inputFields[selectedChar]->paint(x+ offset, y+ hheight+ offset, true ); std::string tmp = value; CVFD::getInstance()->showMenuText(1, tmp.c_str(), selectedChar+1); } @@ -237,7 +232,7 @@ int CExtendedInput::exec( CMenuTarget* parent, const std::string & ) || (msg == CRCInput::RC_up) || (msg == CRCInput::RC_down)) { inputFields[selectedChar]->keyPressed(msg); - inputFields[selectedChar]->paint( x+20, y+hheight +20, true ); + inputFields[selectedChar]->paint(x+ offset, y+ hheight+ offset, true ); } else if (msg==CRCInput::RC_ok) { @@ -304,23 +299,29 @@ void CExtendedInput::hide() void CExtendedInput::paint() { frameBuffer->paintBoxRel(x, y, width, hheight, COL_MENUHEAD_PLUS_0, RADIUS_LARGE, CORNER_TOP); - frameBuffer->paintBoxRel(x, y + hheight, width, height - hheight, COL_MENUCONTENT_PLUS_0, RADIUS_LARGE, CORNER_BOTTOM); + frameBuffer->paintBoxRel(x, y + hheight, width, bheight, COL_MENUCONTENT_PLUS_0, RADIUS_LARGE, CORNER_BOTTOM); - g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]->RenderString(x+ 10, y+ hheight, width- 10, g_Locale->getText(name), COL_MENUHEAD, 0, true); // UTF-8 + g_Font[SNeutrinoSettings::FONT_TYPE_MENU_TITLE]->RenderString(x+ (offset/2), y+ hheight, width- offset, g_Locale->getText(name), COL_MENUHEAD, 0, true); // UTF-8 - if (hint_1 != NONEXISTANT_LOCALE) + int tmp_y = y+ hheight+ offset+ input_h+ offset; + + if ((hint_1 != NONEXISTANT_LOCALE) || (hint_2 != NONEXISTANT_LOCALE)) { - g_Font[SNeutrinoSettings::FONT_TYPE_MENU_INFO]->RenderString(x+ 20, hintPosY, width- 20, g_Locale->getText(hint_1), COL_MENUCONTENT, 0, true); // UTF-8 + if (hint_1 != NONEXISTANT_LOCALE) + { + tmp_y += iheight; + g_Font[SNeutrinoSettings::FONT_TYPE_MENU_INFO]->RenderString(x+ offset, tmp_y, width- 2*offset, g_Locale->getText(hint_1), COL_MENUCONTENT, 0, true); // UTF-8 + } if (hint_2 != NONEXISTANT_LOCALE) - g_Font[SNeutrinoSettings::FONT_TYPE_MENU_INFO]->RenderString(x+ 20, hintPosY + iheight, width- 20, g_Locale->getText(hint_2), COL_MENUCONTENT, 0, true); // UTF-8 + { + tmp_y += iheight; + g_Font[SNeutrinoSettings::FONT_TYPE_MENU_INFO]->RenderString(x+ offset, tmp_y, width- 2*offset, g_Locale->getText(hint_2), COL_MENUCONTENT, 0, true); // UTF-8 + } + tmp_y += offset; } for(unsigned int i=0; ipaint( x+20, y+hheight +20, (i== (unsigned int) selectedChar) ); - } - - + inputFields[i]->paint(x+ offset, y+ hheight+ offset, (i== (unsigned int) selectedChar) ); } //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ @@ -329,8 +330,8 @@ void CExtendedInput::paint() CExtendedInput_Item_Char::CExtendedInput_Item_Char(const std::string & Chars, bool Selectable ) { frameBuffer = CFrameBuffer::getInstance(); - idx = 20; - idy = g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getHeight(); + input_h = g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getHeight() + 2; // font height + border + input_w = g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getRenderWidth("M") + 2; // hack font width + border allowedChars = Chars; selectable = Selectable; } @@ -339,7 +340,7 @@ void CExtendedInput_Item_Char::init(int &x, int &y) { ix = x; iy = y; - x += idx; + x += input_w; } void CExtendedInput_Item_Char::setAllowedChars( const std::string & ac ) @@ -349,8 +350,10 @@ void CExtendedInput_Item_Char::setAllowedChars( const std::string & ac ) void CExtendedInput_Item_Char::paint(int x, int y, bool focusGained ) { - int startx = ix + x; - int starty = iy + y; + int xpos = ix + x; + int ypos = iy + y; + + char ch[2] = {*data, 0}; uint8_t color; fb_pixel_t bgcolor; @@ -366,15 +369,12 @@ void CExtendedInput_Item_Char::paint(int x, int y, bool focusGained ) bgcolor = COL_MENUCONTENT_PLUS_0; } - frameBuffer->paintBoxRel( startx, starty, idx, idy, COL_MENUCONTENT_PLUS_4); - frameBuffer->paintBoxRel( startx+1, starty+1, idx-2, idy-2, bgcolor); + frameBuffer->paintBoxRel(xpos, ypos, input_w, input_h, COL_MENUCONTENT_PLUS_2); + frameBuffer->paintBoxRel(xpos+ 1, ypos+ 1, input_w- 2, input_h- 2, bgcolor); - char text[2]; - text[0] = *data; - text[1] = 0; - int xfpos = startx + 1 + ((idx- g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getRenderWidth( text ))>>1); - - g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(xfpos,starty+idy, idx, text, color); + int ch_w = g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getRenderWidth(ch); + int ch_x = xpos + std::max(input_w/2 - ch_w/2, 0); + g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->RenderString(ch_x, ypos+ input_h, ch_w, ch, color); } bool CExtendedInput_Item_Char::isAllowedChar( char ch ) diff --git a/src/gui/widget/stringinput_ext.h b/src/gui/widget/stringinput_ext.h index af11089f1..2fe9d7fea 100644 --- a/src/gui/widget/stringinput_ext.h +++ b/src/gui/widget/stringinput_ext.h @@ -53,8 +53,11 @@ class CExtendedInput : public CMenuTarget int height; int hintPosY; int hheight; // head font height - int mheight; // menu font height int iheight; + int bheight; // body height + int input_h; // input field height + int input_w; // input field width + int offset; std::vector inputFields; int selectedChar; @@ -88,7 +91,9 @@ class CExtendedInput_Item { protected: CFrameBuffer *frameBuffer; - int ix, iy, idx, idy; + int input_h; // input field height + int input_w; // input field width + int ix, iy; char* data; public: diff --git a/src/gui/widget/textbox.cpp b/src/gui/widget/textbox.cpp index cc2223023..07a8c1a1a 100644 --- a/src/gui/widget/textbox.cpp +++ b/src/gui/widget/textbox.cpp @@ -98,7 +98,7 @@ CTextBox::CTextBox(const char * text, Font* font_text, const int pmode, //TRACE(" CTextBox::m_cText: %d, m_nMode %d\t\r\n",m_cText.size(),m_nMode); m_textBackgroundColor = textBackgroundColor; - m_nFontTextHeight = m_pcFontText->getHeight(); + m_nFontTextHeight = getFontTextHeight(); //TRACE("[CTextBox] %s Line %d\r\n", __FUNCTION__, __LINE__); //TRACE(" CTextBox::m_nFontTextHeight: %d\t\r\n",m_nFontTextHeight); @@ -150,8 +150,9 @@ void CTextBox::initVar(void) m_cText = ""; m_nMode = SCROLL; + m_FontUseDigitHeight = false; m_pcFontText = g_Font[SNeutrinoSettings::FONT_TYPE_EPG_INFO1]; - m_nFontTextHeight = m_pcFontText->getHeight(); + m_nFontTextHeight = getFontTextHeight(); m_nMaxTextWidth = 0; m_nNrOfPages = 1; @@ -190,11 +191,28 @@ void CTextBox::initFramesAndTextArray() refreshTextLineArray(); } +int CTextBox::getFontTextHeight() +{ + if (m_FontUseDigitHeight) + return m_pcFontText->getDigitHeight() + (m_pcFontText->getDigitOffset() * 18) / 10; + else + return m_pcFontText->getHeight(); +} + +void CTextBox::setFontUseDigitHeight(bool set/*=true*/) +{ + if (m_FontUseDigitHeight != set) { + m_FontUseDigitHeight = set; + m_nFontTextHeight = getFontTextHeight(); + initFramesAndTextArray(); + } +} + void CTextBox::setTextFont(Font* font_text) { if ((m_pcFontText != font_text) && (font_text != NULL)) { m_pcFontText = font_text; - m_nFontTextHeight = m_pcFontText->getHeight(); + m_nFontTextHeight = getFontTextHeight(); //Initialise the window frames first and than refresh text line array initFramesAndTextArray(); } @@ -202,7 +220,10 @@ void CTextBox::setTextFont(Font* font_text) void CTextBox::setTextBorderWidth(int border) { - text_border_width = border; + /* we need a minimal borderwith of 1px because the edge-smoothing + (or fontrenderer?) otherwise will paint single pixels outside the + defined area. e.g. 'j' is leaving such residues */ + text_border_width = (border > 0) ? border : 1; //Initialise the window frames first and than refresh text line array initFramesAndTextArray(); } diff --git a/src/gui/widget/textbox.h b/src/gui/widget/textbox.h index b3a34971e..0fd0e08c6 100644 --- a/src/gui/widget/textbox.h +++ b/src/gui/widget/textbox.h @@ -109,6 +109,7 @@ class CTextBox void refreshText(void); void reSizeMainFrameWidth(int maxTextWidth); void reSizeMainFrameHeight(int maxTextHeight); + int getFontTextHeight(); /* Variables */ std::string m_cText; @@ -150,6 +151,7 @@ class CTextBox /* int max_width;*/ int text_border_width; + bool m_FontUseDigitHeight; public: /* Constructor */ @@ -170,7 +172,7 @@ class CTextBox void enableBackgroundPaint(bool mode = true){m_nPaintBackground = mode;}; bool setText(const std::string* newText, int max_width = 0); void setTextColor(fb_pixel_t color_text){ m_textColor = color_text;}; - void setBackGroundRadius(const int radius, const int type){m_nBgRadius = radius; m_nBgRadiusType = type;}; + void setBackGroundRadius(const int radius, const int type = CORNER_ALL){m_nBgRadius = radius; m_nBgRadiusType = type;}; void setTextBorderWidth(int border); void setTextFont(Font* font_text); void setTextMode(const int text_mode){m_nMode = text_mode;}; @@ -178,6 +180,7 @@ class CTextBox void setWindowPos(const CBox* position){m_cFrame = *position;}; void setWindowMaxDimensions(const int width, const int height); void setWindowMinDimensions(const int width, const int height); + void setFontUseDigitHeight(bool set=true); inline bool isPainted(void) {if( frameBuffer == NULL) return (false); else return (true);}; inline CBox getWindowsPos(void) {return(m_cFrame);}; diff --git a/src/gui/zapit_setup.cpp b/src/gui/zapit_setup.cpp index db105e7c7..c869c2d41 100644 --- a/src/gui/zapit_setup.cpp +++ b/src/gui/zapit_setup.cpp @@ -46,23 +46,18 @@ CZapitSetup::CZapitSetup() CZapitSetup::~CZapitSetup() { - } int CZapitSetup::exec(CMenuTarget* parent, const std::string &/*actionKey*/) { printf("[neutrino] init zapit menu setup...\n"); - int res = menu_return::RETURN_REPAINT; - if (parent) parent->hide(); - showMenu(); - - return res; + return showMenu(); } -void CZapitSetup::showMenu() +int CZapitSetup::showMenu() { //menue init CMenuWidget *zapit = new CMenuWidget(LOCALE_MAINMENU_SETTINGS, NEUTRINO_ICON_SETTINGS, width, MN_WIDGET_ID_ZAPIT); @@ -88,9 +83,10 @@ void CZapitSetup::showMenu() zapit->addItem(zapit1); zapit->addItem(zapit2); - zapit->exec(NULL, ""); + int res = zapit->exec(NULL, ""); delete miscZapitNotifier; delete zapit; + return res; } //select menu @@ -109,19 +105,15 @@ int CSelectChannelWidget::exec(CMenuTarget* parent, const std::string& actionKey int res = menu_return::RETURN_REPAINT; if (parent) - { parent->hide(); - } if(actionKey == "tv") { - InitZapitChannelHelper(CZapitClient::MODE_TV); - return res; + return InitZapitChannelHelper(CZapitClient::MODE_TV); } else if(actionKey == "radio") { - InitZapitChannelHelper(CZapitClient::MODE_RADIO); - return res; + return InitZapitChannelHelper(CZapitClient::MODE_RADIO); } else if (strncmp(actionKey.c_str(), "ZCT:", 4) == 0 || strncmp(actionKey.c_str(), "ZCR:", 4) == 0) { @@ -149,7 +141,7 @@ int CSelectChannelWidget::exec(CMenuTarget* parent, const std::string& actionKey } extern CBouquetManager *g_bouquetManager; -void CSelectChannelWidget::InitZapitChannelHelper(CZapitClient::channelsMode mode) +int CSelectChannelWidget::InitZapitChannelHelper(CZapitClient::channelsMode mode) { std::vector toDelete; CMenuWidget mctv(LOCALE_TIMERLIST_BOUQUETSELECT, NEUTRINO_ICON_SETTINGS, width); @@ -159,7 +151,11 @@ void CSelectChannelWidget::InitZapitChannelHelper(CZapitClient::channelsMode mod CMenuWidget* mwtv = new CMenuWidget(LOCALE_TIMERLIST_CHANNELSELECT, NEUTRINO_ICON_SETTINGS, width); toDelete.push_back(mwtv); mwtv->addIntroItems(); - ZapitChannelList channels = (mode == CZapitClient::MODE_RADIO) ? g_bouquetManager->Bouquets[i]->radioChannels : g_bouquetManager->Bouquets[i]->tvChannels; + ZapitChannelList channels; + if (mode == CZapitClient::MODE_RADIO) + g_bouquetManager->Bouquets[i]->getRadioChannels(channels); + else + g_bouquetManager->Bouquets[i]->getTvChannels(channels); for(int j = 0; j < (int) channels.size(); j++) { CZapitChannel * channel = channels[j]; char cChannelId[60] = {0}; @@ -175,7 +171,7 @@ void CSelectChannelWidget::InitZapitChannelHelper(CZapitClient::channelsMode mod mctv.addItem(new CMenuForwarderNonLocalized(g_bouquetManager->Bouquets[i]->Name.c_str(), true, NULL, mwtv)); } } - mctv.exec (NULL, ""); + int res = mctv.exec (NULL, ""); // delete dynamic created objects for(unsigned int count=0;count #include +#include "gui/audiomute.h" #include "gui/audioplayer.h" #include "gui/bouquetlist.h" #include "gui/cam_menu.h" @@ -87,6 +88,9 @@ #include "gui/widget/menue.h" #include "gui/widget/messagebox.h" #include "gui/infoclock.h" +#ifdef ENABLE_PIP +#include "gui/pipsetup.h" +#endif #include #include @@ -172,6 +176,7 @@ CRemoteControl * g_RemoteControl; CPictureViewer * g_PicViewer; CCAMMenuHandler * g_CamHandler; CVolume * g_volume; +CAudioMute * g_audioMute; // Globale Variablen - to use import global.h @@ -331,8 +336,13 @@ int CNeutrinoApp::loadSetup(const char * fname) vid_Mode_default = VIDEO_STD_PAL; #endif g_settings.video_Mode = configfile.getInt32("video_Mode", vid_Mode_default); +#ifdef ANALOG_MODE + g_settings.analog_mode1 = configfile.getInt32("analog_mode1", (int)ANALOG_MODE(SCART,SD,RGB)); // default RGB + g_settings.analog_mode2 = configfile.getInt32("analog_mode2", (int)ANALOG_MODE(CINCH,SD,YPRPB)); // default YPBPR +#else g_settings.analog_mode1 = configfile.getInt32("analog_mode1", (int)ANALOG_SD_RGB_SCART); // default RGB g_settings.analog_mode2 = configfile.getInt32("analog_mode2", (int)ANALOG_SD_YPRPB_CINCH); // default YPBPR +#endif g_settings.hdmi_cec_mode = configfile.getInt32("hdmi_cec_mode", 0); // default off g_settings.hdmi_cec_view_on = configfile.getInt32("hdmi_cec_view_on", 0); // default off g_settings.hdmi_cec_standby = configfile.getInt32("hdmi_cec_standby", 0); // default off @@ -372,6 +382,7 @@ int CNeutrinoApp::loadSetup(const char * fname) g_settings.rounded_corners = configfile.getInt32("rounded_corners", 1); g_settings.ci_standby_reset = configfile.getInt32("ci_standby_reset", 0); g_settings.ci_clock = configfile.getInt32("ci_clock", 7); + g_settings.ci_ignore_messages = configfile.getInt32("ci_ignore_messages", 0); #ifndef CPU_FREQ g_settings.cpufreq = 0; @@ -388,9 +399,9 @@ int CNeutrinoApp::loadSetup(const char * fname) g_settings.rotor_swap = configfile.getInt32( "rotor_swap", 0); //led - g_settings.led_tv_mode = configfile.getInt32( "led_tv_mode", 1); - g_settings.led_standby_mode = configfile.getInt32( "led_standby_mode", 1); - g_settings.led_deep_mode = configfile.getInt32( "led_deep_mode", 1); + g_settings.led_tv_mode = configfile.getInt32( "led_tv_mode", 2); + g_settings.led_standby_mode = configfile.getInt32( "led_standby_mode", 3); + g_settings.led_deep_mode = configfile.getInt32( "led_deep_mode", 3); g_settings.led_rec_mode = configfile.getInt32( "led_rec_mode", 1); g_settings.led_blink = configfile.getInt32( "led_blink", 1); @@ -654,13 +665,14 @@ int CNeutrinoApp::loadSetup(const char * fname) g_settings.mode_clock = configfile.getInt32( "mode_clock", 0); g_settings.zapto_pre_time = configfile.getInt32( "zapto_pre_time", 0); g_settings.spectrum = configfile.getBool("spectrum" , false); + g_settings.channellist_additional = configfile.getInt32("channellist_additional", 2); //default minitv g_settings.eventlist_additional = configfile.getInt32("eventlist_additional", 0); - g_settings.channellist_additional = configfile.getInt32("channellist_additional", 0); //default off g_settings.channellist_epgtext_align_right = configfile.getBool("channellist_epgtext_align_right" , false); g_settings.channellist_extended = configfile.getBool("channellist_extended" , true); g_settings.channellist_foot = configfile.getInt32("channellist_foot" , 1);//default next Event g_settings.channellist_new_zap_mode = configfile.getInt32("channellist_new_zap_mode", 1); g_settings.channellist_sort_mode = configfile.getInt32("channellist_sort_mode", 0);//sort mode: alpha, freq, sat + g_settings.channellist_numeric_adjust = configfile.getInt32("channellist_numeric_adjust", 0); //screen configuration g_settings.screen_xres = configfile.getInt32("screen_xres", 100); @@ -816,6 +828,17 @@ int CNeutrinoApp::loadSetup(const char * fname) g_settings.screen_width = frameBuffer->getScreenWidth(true); g_settings.screen_height = frameBuffer->getScreenHeight(true); } +#ifdef BOXMODEL_APOLLO + g_settings.brightness = configfile.getInt32("brightness", 0); + g_settings.contrast = configfile.getInt32("contrast", 0); + g_settings.saturation = configfile.getInt32("saturation", 0); +#endif +#ifdef ENABLE_PIP + g_settings.pip_x = configfile.getInt32("pip_x", 50); + g_settings.pip_y = configfile.getInt32("pip_y", 50); + g_settings.pip_width = configfile.getInt32("pip_width", 365); + g_settings.pip_height = configfile.getInt32("pip_height", 200); +#endif if(erg) configfile.setModifiedFlag(true); return erg; @@ -868,6 +891,7 @@ void CNeutrinoApp::saveSetup(const char * fname) configfile.setInt32("rounded_corners", g_settings.rounded_corners); configfile.setInt32("ci_standby_reset", g_settings.ci_standby_reset); configfile.setInt32("ci_clock", g_settings.ci_clock); + configfile.setInt32("ci_ignore_messages", g_settings.ci_ignore_messages); configfile.setInt32( "make_hd_list", g_settings.make_hd_list); configfile.setInt32( "make_new_list", g_settings.make_new_list); @@ -1096,6 +1120,7 @@ void CNeutrinoApp::saveSetup(const char * fname) configfile.setInt32("remote_control_hardware", g_settings.remote_control_hardware); configfile.setBool ( "audiochannel_up_down_enable", g_settings.audiochannel_up_down_enable ); configfile.setInt32("channellist_sort_mode", g_settings.channellist_sort_mode); + configfile.setInt32("channellist_numeric_adjust", g_settings.channellist_numeric_adjust); //screen configuration configfile.setInt32( "screen_xres", g_settings.screen_xres); @@ -1192,7 +1217,12 @@ void CNeutrinoApp::saveSetup(const char * fname) configfile.setInt32("bigFonts", g_settings.bigFonts); configfile.setInt32("big_windows", g_settings.big_windows); -#if 0 +#ifdef BOXMODEL_APOLLO + configfile.setInt32("brightness", g_settings.brightness ); + configfile.setInt32("contrast", g_settings.contrast ); + configfile.setInt32("saturation", g_settings.saturation ); +#endif +#ifdef ENABLE_PIP configfile.setInt32("pip_x", g_settings.pip_x); configfile.setInt32("pip_y", g_settings.pip_y); configfile.setInt32("pip_width", g_settings.pip_width); @@ -1215,7 +1245,6 @@ extern CBouquetManager *g_bouquetManager; void CNeutrinoApp::channelsInit(bool bOnly) { - int bnum; CBouquet* tmp; printf("[neutrino] Creating channels lists...\n"); @@ -1232,7 +1261,6 @@ void CNeutrinoApp::channelsInit(bool bOnly) if(g_bouquetManager->existsUBouquet(fav_bouquetname, true) == -1) g_bouquetManager->addBouquet(fav_bouquetname, true, true); - if(TVbouquetList) delete TVbouquetList; if(RADIObouquetList) delete RADIObouquetList; @@ -1281,15 +1309,11 @@ void CNeutrinoApp::channelsInit(bool bOnly) tmp = TVallList->addBouquet(g_Locale->getText(LOCALE_CHANNELLIST_HEAD)); delete tmp->channelList; tmp->channelList = new CChannelList(*TVchannelList); - //tmp->channelList->SortAlpha(); RADIOallList = new CBouquetList(g_Locale->getText(LOCALE_CHANNELLIST_HEAD)); tmp = RADIOallList->addBouquet(g_Locale->getText(LOCALE_CHANNELLIST_HEAD)); delete tmp->channelList; tmp->channelList = new CChannelList(*RADIOchannelList); - //tmp->channelList->SortAlpha(); - - TIMER_STOP("[neutrino] sort took"); if(TVsatList) delete TVsatList; TVsatList = new CBouquetList(g_Locale->getText(LOCALE_CHANNELLIST_SATS)); @@ -1300,8 +1324,7 @@ void CNeutrinoApp::channelsInit(bool bOnly) sat_iterator_t sit; satellite_map_t satlist = CServiceManager::getInstance()->SatelliteList(); for(sit = satlist.begin(); sit != satlist.end(); sit++) { - CServiceManager::getInstance()->GetAllSatelliteChannels(zapitList, sit->first); - if( zapitList.empty() ) + if (!CServiceManager::getInstance()->GetAllSatelliteChannels(zapitList, sit->first)) continue; tvi = 0, ri = 0; @@ -1323,36 +1346,42 @@ void CNeutrinoApp::channelsInit(bool bOnly) TVsatList->deleteBouquet(tmp1); if(!ri) RADIOsatList->deleteBouquet(tmp2); - + TIMER_STOP("[neutrino] sat took"); } + /* all HD channels */ + if (g_settings.make_hd_list) { + if (CServiceManager::getInstance()->GetAllHDChannels(zapitList)) { + CBouquet* hdBouquet = new CBouquet(0, g_Locale->getText(LOCALE_BOUQUETNAME_HDTV), false, true); + hdBouquet->channelList->SetChannelList(&zapitList); + TVallList->Bouquets.push_back(hdBouquet); + printf("[neutrino] got %d HD channels\n", zapitList.size()); fflush(stdout); + } + } /* new channels */ if (g_settings.make_new_list) { - CServiceManager::getInstance()->GetAllTvChannels(zapitList, CZapitChannel::NEW); - if (!zapitList.empty()) { + if (CServiceManager::getInstance()->GetAllTvChannels(zapitList, CZapitChannel::NEW)) { CBouquet* newBouquet = new CBouquet(0, g_Locale->getText(LOCALE_BOUQUETNAME_NEW), false, true); newBouquet->channelList->SetChannelList(&zapitList); TVallList->Bouquets.push_back(newBouquet); printf("[neutrino] got %d new TV channels\n", (int)zapitList.size()); fflush(stdout); } - CServiceManager::getInstance()->GetAllRadioChannels(zapitList, CZapitChannel::NEW); - if (!zapitList.empty()) { + if (CServiceManager::getInstance()->GetAllRadioChannels(zapitList, CZapitChannel::NEW)) { CBouquet* newBouquet = new CBouquet(0, g_Locale->getText(LOCALE_BOUQUETNAME_NEW), false, true); newBouquet->channelList->SetChannelList(&zapitList); RADIOallList->Bouquets.push_back(newBouquet); printf("[neutrino] got %d new RADIO channels\n", (int)zapitList.size()); fflush(stdout); } } + /* removed channels */ if (g_settings.make_removed_list) { - CServiceManager::getInstance()->GetAllTvChannels(zapitList, CZapitChannel::REMOVED); - if (!zapitList.empty()) { + if (CServiceManager::getInstance()->GetAllTvChannels(zapitList, CZapitChannel::REMOVED)) { CBouquet* newBouquet = new CBouquet(0, g_Locale->getText(LOCALE_BOUQUETNAME_REMOVED), false, true); newBouquet->channelList->SetChannelList(&zapitList); TVallList->Bouquets.push_back(newBouquet); printf("[neutrino] got %d removed TV channels\n", (int)zapitList.size()); fflush(stdout); } - CServiceManager::getInstance()->GetAllRadioChannels(zapitList, CZapitChannel::REMOVED); - if (!zapitList.empty()) { + if (CServiceManager::getInstance()->GetAllRadioChannels(zapitList, CZapitChannel::REMOVED)) { CBouquet* newBouquet = new CBouquet(0, g_Locale->getText(LOCALE_BOUQUETNAME_REMOVED), false, true); newBouquet->channelList->SetChannelList(&zapitList); RADIOallList->Bouquets.push_back(newBouquet); @@ -1362,66 +1391,37 @@ void CNeutrinoApp::channelsInit(bool bOnly) TIMER_STOP("[neutrino] sats took"); } - /* Favorites and providers TV bouquets */ - bnum = 0; + /* Favorites and providers bouquets */ + tvi = ri = 0; for (i = 0; i < g_bouquetManager->Bouquets.size(); i++) { CZapitBouquet *b = g_bouquetManager->Bouquets[i]; - /* allow empty user bouquets to be added, otherwise they are not - * available from the channellist->add_favorite context menus */ - if (!b->bHidden && (!b->tvChannels.empty() || b->bUser)) - { - if (b->bUser) - tmp = TVfavList->addBouquet(b); - else - tmp = TVbouquetList->addBouquet(b); + if (!b->bHidden) { + if (b->getTvChannels(zapitList) || b->bUser) { + if(b->bUser) + tmp = TVfavList->addBouquet(b); + else + tmp = TVbouquetList->addBouquet(b); - ZapitChannelList* channels = &(b->tvChannels); - tmp->channelList->SetChannelList(channels); - bnum++; + tmp->channelList->SetChannelList(&zapitList); + tvi++; + } + if (b->getRadioChannels(zapitList) || b->bUser) { + if(b->bUser) + tmp = RADIOfavList->addBouquet(b); + else + tmp = RADIObouquetList->addBouquet(b); + + tmp->channelList->SetChannelList(&zapitList); + ri++; + } } } - printf("[neutrino] got %d TV bouquets\n", bnum); fflush(stdout); - - /* all HD channels */ - if (g_settings.make_hd_list) { - CServiceManager::getInstance()->GetAllHDChannels(zapitList); - if (!zapitList.empty()) { - CBouquet* hdBouquet = new CBouquet(0, g_Locale->getText(LOCALE_BOUQUETNAME_HDTV), false, true); - hdBouquet->channelList->SetChannelList(&zapitList); - hdBouquet->channelList->SortSat(); - TVfavList->Bouquets.push_back(hdBouquet); - printf("[neutrino] got %d HD channels\n", (int)zapitList.size()); fflush(stdout); - } - } - TIMER_STOP("[neutrino] tv took"); - - /* Favorites and provides RADIO bouquets */ - bnum = 0; - for (i = 0; i < g_bouquetManager->Bouquets.size(); i++) { - if (!g_bouquetManager->Bouquets[i]->bHidden && !g_bouquetManager->Bouquets[i]->radioChannels.empty() ) - { - if(g_bouquetManager->Bouquets[i]->bUser) - tmp = RADIOfavList->addBouquet(g_bouquetManager->Bouquets[i]); - else - tmp = RADIObouquetList->addBouquet(g_bouquetManager->Bouquets[i]); - - ZapitChannelList* channels = &(g_bouquetManager->Bouquets[i]->radioChannels); - tmp->channelList->SetChannelList(channels); - bnum++; - } - } - printf("[neutrino] got %d RADIO bouquets\n", bnum); fflush(stdout); + printf("[neutrino] got %d TV and %d RADIO bouquets\n", tvi, ri); fflush(stdout); TIMER_STOP("[neutrino] took"); SetChannelMode(lastChannelMode); dprintf(DEBUG_DEBUG, "\nAll bouquets-channels received\n"); -#ifdef DEBUG - struct mallinfo myinfo = mallinfo(); - printf("[neutrino] total memory allocated by malloc, in bytes: %d (%dkb), chunks %d\n", - myinfo.arena, myinfo.arena / 1024, myinfo.uordblks); -#endif - reloadhintBox->hide(); } @@ -1772,7 +1772,7 @@ void CNeutrinoApp::InitSectiondClient() } #if HAVE_COOL_HARDWARE -#include +#include #endif void wake_up(long &wakeup) @@ -1789,11 +1789,11 @@ void wake_up(long &wakeup) if (fd < 0) { perror("/dev/display"); } else { - wakeup_data_t wk; + fp_wakeup_data_t wk; memset(&wk, 0, sizeof(wk)); - int ret = ioctl(fd, IOC_VFD_GET_WAKEUP, &wk); + int ret = ioctl(fd, IOC_FP_GET_WAKEUP, &wk); if(ret >= 0) - wakeup = ((wk.source == WAKEUP_SOURCE_TIMER) /* || (wk.source == WAKEUP_SOURCE_PWLOST)*/); + wakeup = ((wk.source == FP_WAKEUP_SOURCE_TIMER) /* || (wk.source == WAKEUP_SOURCE_PWLOST)*/); close(fd); } printf("[timerd] wakeup from standby: %s\n", wakeup ? "yes" : "no"); @@ -1910,6 +1910,10 @@ fprintf(stderr, "[neutrino start] %d -> %5ld ms\n", __LINE__, time_monotonic_ms init_cec_setting = false; } g_settings.shutdown_timer_record_type = false; + + /* todo: check if this is necessary + pthread_create (&timer_thread, NULL, timerd_main_thread, (void *) (timer_wakeup && g_settings.shutdown_timer_record_type)); + */ pthread_create (&timer_thread, NULL, timerd_main_thread, (void *)&timer_wakeup); timerd_thread_started = true; // timer_wakeup = false; @@ -2009,6 +2013,7 @@ fprintf(stderr, "[neutrino start] %d -> %5ld ms\n", __LINE__, time_monotonic_ms InitTimerdClient(); g_volume = CVolume::getInstance(); + g_audioMute = CAudioMute::getInstance(); if (show_startwizard) { hintBox->hide(); @@ -2037,7 +2042,7 @@ fprintf(stderr, "[neutrino start] %d -> %5ld ms\n", __LINE__, time_monotonic_ms InitZapper(); fprintf(stderr, "[neutrino start] %d -> %5ld ms\n", __LINE__, time_monotonic_ms() - starttime); - g_volume->AudioMute(current_muted, true); + g_audioMute->AudioMute(current_muted, true); SHTDCNT::getInstance()->init(); TIMER_STOP("################################## after all ##################################"); @@ -2147,7 +2152,7 @@ void CNeutrinoApp::RealRun(CMenuWidget &mainMenu) g_RCInput->clearRCMsg(); // restore mute symbol if (current_muted) - g_volume->AudioMute(current_muted, true); + g_audioMute->AudioMute(current_muted, true); if(g_settings.mode_clock) InfoClock->StartClock(); StartSubtitles(); @@ -2160,7 +2165,7 @@ void CNeutrinoApp::RealRun(CMenuWidget &mainMenu) mainMenu.exec(NULL, ""); // restore mute symbol if (current_muted) - g_volume->AudioMute(current_muted, true); + g_audioMute->AudioMute(current_muted, true); if(g_settings.mode_clock) InfoClock->StartClock(); StartSubtitles(); @@ -2249,6 +2254,28 @@ void CNeutrinoApp::RealRun(CMenuWidget &mainMenu) else if (msg == (neutrino_msg_t) g_settings.key_current_transponder){ numericZap( msg ); } +#ifdef ENABLE_PIP + else if (msg == (neutrino_msg_t) g_settings.key_pip_close) { + t_channel_id pip_channel_id = CZapit::getInstance()->GetPipChannelID(); + if (pip_channel_id) + g_Zapit->stopPip(); + else + StartPip(CZapit::getInstance()->GetCurrentChannelID()); + } + else if (msg == (neutrino_msg_t) g_settings.key_pip_setup) { + CPipSetup pipsetup; + pipsetup.exec(NULL, ""); + } + else if (msg == (neutrino_msg_t) g_settings.key_pip_swap) { + t_channel_id pip_channel_id = CZapit::getInstance()->GetPipChannelID(); + t_channel_id live_channel_id = CZapit::getInstance()->GetCurrentChannelID(); + if (pip_channel_id && (pip_channel_id != live_channel_id)) { + g_Zapit->stopPip(); + channelList->zapTo_ChannelID(pip_channel_id); + StartPip(live_channel_id); + } + } +#endif else if (CRCInput::isNumeric(msg)) { numericZap( msg ); } @@ -2260,7 +2287,8 @@ void CNeutrinoApp::RealRun(CMenuWidget &mainMenu) } } else if( msg == CRCInput::RC_record) { - CRecordManager::getInstance()->exec(NULL, "Record"); + if (g_settings.recording_type != CNeutrinoApp::RECORDING_OFF) + CRecordManager::getInstance()->exec(NULL, "Record"); } else if( msg == CRCInput::RC_stop ) { CRecordManager::getInstance()->exec(NULL, "Stop_record"); @@ -2333,7 +2361,8 @@ void CNeutrinoApp::RealRun(CMenuWidget &mainMenu) } else if( msg == CRCInput::RC_video || msg == CRCInput::RC_play ) { //open moviebrowser via media player menu object - CMediaPlayerMenu::getInstance()->exec(NULL,"movieplayer"); + if (g_settings.recording_type != CNeutrinoApp::RECORDING_OFF) + CMediaPlayerMenu::getInstance()->exec(NULL,"movieplayer"); } else if (CRCInput::isNumeric(msg) && g_RemoteControl->director_mode ) { g_RemoteControl->setSubChannel(CRCInput::getNumericValue(msg)); @@ -2443,15 +2472,17 @@ int CNeutrinoApp::handleMsg(const neutrino_msg_t _msg, neutrino_msg_data_t data) _show: int nNewChannel = -1; - int old_num = 0; int old_b = bouquetList->getActiveBouquetNumber(); //int old_mode = g_settings.channel_mode; int old_mode = GetChannelMode(); printf("************************* ZAP START: bouquetList %p size %d old_b %d\n", bouquetList, (int)bouquetList->Bouquets.size(), old_b);fflush(stdout); +#if 0 + int old_num = 0; if(!bouquetList->Bouquets.empty()) { old_num = bouquetList->Bouquets[old_b]->channelList->getSelected(); } +#endif //_show: if(msg == CRCInput::RC_ok) { @@ -2461,7 +2492,7 @@ _show: nNewChannel = bouquetList->exec(true); // restore mute symbol if (current_muted) - g_volume->AudioMute(current_muted, true); + g_audioMute->AudioMute(current_muted, true); } else if(msg == CRCInput::RC_sat) { SetChannelMode(LIST_MODE_SAT); nNewChannel = bouquetList->exec(true); @@ -2478,8 +2509,14 @@ _repeat: * other modes selected bouquet not restored */ SetChannelMode(old_mode); bouquetList->activateBouquet(old_b, false); +#if 0 if(!bouquetList->Bouquets.empty()) bouquetList->Bouquets[bouquetList->getActiveBouquetNumber()]->channelList->setSelected(old_num); +#endif + if(!bouquetList->Bouquets.empty()) { + t_channel_id old_id = bouquetList->Bouquets[bouquetList->getActiveBouquetNumber()]->channelList->getActiveChannel_ChannelID(); + bouquetList->Bouquets[bouquetList->getActiveBouquetNumber()]->channelList->adjustToChannelID(old_id, false); + } StartSubtitles(mode == mode_tv); } else if(nNewChannel == -3) { // list mode changed @@ -2615,16 +2652,16 @@ _repeat: } else { //mute - g_volume->AudioMute(!current_muted, true); + g_audioMute->AudioMute(!current_muted, true); } return messages_return::handled; } else if( msg == CRCInput::RC_mute_on ) { - g_volume->AudioMute(true, true); + g_audioMute->AudioMute(true, true); return messages_return::handled; } else if( msg == CRCInput::RC_mute_off ) { - g_volume->AudioMute(false, true); + g_audioMute->AudioMute(false, true); return messages_return::handled; } else if( msg == CRCInput::RC_analog_on ) { @@ -2713,7 +2750,7 @@ _repeat: } recordingstatus = data; autoshift = CRecordManager::getInstance()->TimeshiftOnly(); - CVFD::getInstance()->ShowIcon(VFD_ICON_CAM1, recordingstatus != 0); + CVFD::getInstance()->ShowIcon(FP_ICON_CAM1, recordingstatus != 0); if( ( !g_InfoViewer->is_visible ) && data && !autoshift) g_RCInput->postMsg( NeutrinoMessages::SHOW_INFOBAR, 0 ); @@ -2729,8 +2766,10 @@ _repeat: g_CamHandler->exec(NULL, "ca_ci_reset1"); } } - CRecordManager::getInstance()->Record((CTimerd::RecordingInfo *) data); - autoshift = CRecordManager::getInstance()->TimeshiftOnly(); + if (g_settings.recording_type != CNeutrinoApp::RECORDING_OFF) { + CRecordManager::getInstance()->Record((CTimerd::RecordingInfo *) data); + autoshift = CRecordManager::getInstance()->TimeshiftOnly(); + } delete[] (unsigned char*) data; return messages_return::handled | messages_return::cancel_all; @@ -2835,7 +2874,7 @@ _repeat: printf("NeutrinoMessages::INACTIVITY SLEEPTIMER: skiping\n"); skipShutdownTimer = false; return messages_return::handled; - } + } }else{ //MAIN-MENU SLEEPTIMER if(skipSleepTimer) { printf("NeutrinoMessages::SLEEPTIMER: skiping\n"); @@ -3068,7 +3107,7 @@ void CNeutrinoApp::ExitRun(const bool /*write_si*/, int retcode) my_system(2,"/bin/umount", "-a"); sleep(1); { - standby_data_t standby; + fp_standby_data_t standby; time_t mtime = time(NULL); struct tm *tmtime = localtime(&mtime); time_t fp_timer = 0; @@ -3114,8 +3153,8 @@ void CNeutrinoApp::ExitRun(const bool /*write_si*/, int retcode) reboot(LINUX_REBOOT_CMD_RESTART); } else { - if (ioctl(fd, IOC_VFD_STANDBY, (standby_data_t *) &standby)) { - perror("IOC_VFD_STANDBY"); + if (ioctl(fd, IOC_FP_STANDBY, (fp_standby_data_t *) &standby)) { + perror("IOC_FP_STANDBY"); reboot(LINUX_REBOOT_CMD_RESTART); } else { while(true) sleep(1); @@ -3211,15 +3250,13 @@ void CNeutrinoApp::tvMode( bool rezap ) } videoDecoder->StopPicture(); - CVFD::getInstance()->ShowIcon(VFD_ICON_RADIO, false); + CVFD::getInstance()->ShowIcon(FP_ICON_RADIO, false); StartSubtitles(!rezap); } g_InfoViewer->setUpdateTimer(LCD_UPDATE_TIME_TV_MODE); - g_volume->Init(); - CVFD::getInstance()->setMode(CVFD::MODE_TVRADIO); - CVFD::getInstance()->ShowIcon(VFD_ICON_TV, true); + CVFD::getInstance()->ShowIcon(FP_ICON_TV, true); if( mode == mode_standby ) { CVFD::getInstance()->setMode(CVFD::MODE_TVRADIO); @@ -3241,11 +3278,10 @@ void CNeutrinoApp::tvMode( bool rezap ) SetChannelMode(g_settings.channel_mode); if( rezap ) { t_channel_id last_chid = CZapit::getInstance()->GetLastTVChannel(); - channelList->setSelected(0xfffffff); /* make sure that zapTo_ChannelID will zap */ if(CServiceManager::getInstance()->FindChannel(last_chid)) - channelList->zapTo_ChannelID(last_chid); + channelList->zapTo_ChannelID(last_chid, true); /* force re-zap */ else - channelList->zapTo(0); + channelList->zapTo(0, true); } #ifdef USEACTIONLOG g_ActionLog->println("mode: tv"); @@ -3322,6 +3358,9 @@ void CNeutrinoApp::standbyMode( bool bOnOff, bool fromDeepStandby ) g_Radiotext->radiotext_stop(); +#ifdef ENABLE_PIP + g_Zapit->stopPip(); +#endif bool stream_status = CStreamManager::getInstance()->StreamStatus(); if(!fromDeepStandby && !CRecordManager::getInstance()->RecordingStatus() && !stream_status) { g_Zapit->setStandby(true); @@ -3369,13 +3408,13 @@ void CNeutrinoApp::standbyMode( bool bOnOff, bool fromDeepStandby ) frameBuffer->setActive(false); // Active standby on - powerManager->SetStandby(true, false); + powerManager->SetStandby(false, false); } else { // Active standby off - cpuFreq->SetCpuFreq(g_settings.cpufreq * 1000 * 1000); powerManager->SetStandby(false, false); CVFD::getInstance()->setMode(CVFD::MODE_TVRADIO); CVFD::getInstance()->ShowText("resume... "); + cpuFreq->SetCpuFreq(g_settings.cpufreq * 1000 * 1000); videoDecoder->Standby(false); CSectionsdClient::CurrentNextInfo dummy; g_InfoViewer->getEPG(0, dummy); @@ -3423,9 +3462,13 @@ void CNeutrinoApp::standbyMode( bool bOnOff, bool fromDeepStandby ) if(!recordingstatus) { //only switch to standby_channel_id when not recording live_channel_id = standby_channel_id; } +#if 0 + /* todo: check parental pin */ videoDecoder->Standby(false); channelList->setSelected(0xfffffff); /* make sure that zapTo_ChannelID will zap */ channelList->zapTo_ChannelID(live_channel_id); +#endif + channelList->zapTo_ChannelID(live_channel_id, true); /* force re-zap */ g_Sectionsd->setPauseScanning(false); //g_Sectionsd->setServiceChanged(live_channel_id, true ); @@ -3433,7 +3476,7 @@ void CNeutrinoApp::standbyMode( bool bOnOff, bool fromDeepStandby ) if(g_settings.mode_clock) InfoClock->StartClock(); - g_volume->AudioMute(current_muted, true); + g_audioMute->AudioMute(current_muted, true); StartSubtitles(); } lockStandbyCall = false; @@ -3444,12 +3487,12 @@ void CNeutrinoApp::radioMode( bool rezap) //printf("radioMode: rezap %s\n", rezap ? "yes" : "no"); INFO("rezap %d current mode %d", rezap, mode); if (mode == mode_tv) { - CVFD::getInstance()->ShowIcon(VFD_ICON_TV, false); + CVFD::getInstance()->ShowIcon(FP_ICON_TV, false); StopSubtitles(); } g_InfoViewer->setUpdateTimer(LCD_UPDATE_TIME_RADIO_MODE); CVFD::getInstance()->setMode(CVFD::MODE_TVRADIO); - CVFD::getInstance()->ShowIcon(VFD_ICON_RADIO, true); + CVFD::getInstance()->ShowIcon(FP_ICON_RADIO, true); if( mode == mode_standby ) { CVFD::getInstance()->setMode(CVFD::MODE_TVRADIO); @@ -3467,11 +3510,10 @@ void CNeutrinoApp::radioMode( bool rezap) if( rezap ) { t_channel_id last_chid = CZapit::getInstance()->GetLastRADIOChannel(); - channelList->setSelected(0xfffffff); /* make sure that zapTo_ChannelID will zap */ if(CServiceManager::getInstance()->FindChannel(last_chid)) - channelList->zapTo_ChannelID(last_chid); + channelList->zapTo_ChannelID(last_chid, true); /* force re-zap */ else - channelList->zapTo(0); + channelList->zapTo(0, true); /* force re-zap */ } videoDecoder->ShowPicture(DATADIR "/neutrino/icons/radiomode.jpg"); } @@ -3704,8 +3746,11 @@ void stop_daemons(bool stopall) printf("zapit shutdown done\n"); CVFD::getInstance()->Clear(); if(stopall) { - if (cpuFreq) + if (cpuFreq) { cpuFreq->SetCpuFreq(g_settings.cpufreq * 1000 * 1000); + delete cpuFreq; + } + if (powerManager) { /* if we were in standby, leave it otherwise, the next start of neutrino will fail in "_write_gxa" in @@ -3800,6 +3845,11 @@ void CNeutrinoApp::loadKeys(const char * fname) g_settings.key_plugin = tconfig.getInt32( "key_plugin", CRCInput::RC_nokey ); g_settings.key_unlock = tconfig.getInt32( "key_unlock", CRCInput::RC_setup ); g_settings.key_screenshot = tconfig.getInt32( "key_screenshot", CRCInput::RC_nokey ); +#ifdef ENABLE_PIP + g_settings.key_pip_close = tconfig.getInt32( "key_pip_close", CRCInput::RC_help ); + g_settings.key_pip_setup = tconfig.getInt32( "key_pip_setup", CRCInput::RC_pos ); + g_settings.key_pip_swap = tconfig.getInt32( "key_pip_swap", CRCInput::RC_recall ); +#endif g_settings.key_current_transponder = tconfig.getInt32( "key_current_transponder", CRCInput::RC_games ); g_settings.key_quickzap_up = tconfig.getInt32( "key_quickzap_up", CRCInput::RC_up ); @@ -3858,6 +3908,11 @@ void CNeutrinoApp::saveKeys(const char * fname) tconfig.setInt32( "key_plugin", g_settings.key_plugin ); tconfig.setInt32( "key_unlock", g_settings.key_unlock ); tconfig.setInt32( "key_screenshot", g_settings.key_screenshot ); +#ifdef ENABLE_PIP + tconfig.setInt32( "key_pip_close", g_settings.key_pip_close ); + tconfig.setInt32( "key_pip_setup", g_settings.key_pip_setup ); + tconfig.setInt32( "key_pip_swap", g_settings.key_pip_swap ); +#endif tconfig.setInt32( "key_current_transponder", g_settings.key_current_transponder ); tconfig.setInt32( "key_quickzap_up", g_settings.key_quickzap_up ); @@ -4009,6 +4064,28 @@ void CNeutrinoApp::getAnnounceEpgName(CTimerd::RecordingInfo * eventinfo, std::s name += zAddData; } +#ifdef ENABLE_PIP +bool CNeutrinoApp::StartPip(const t_channel_id channel_id) +{ + bool ret = false; + CZapitChannel * channel = CServiceManager::getInstance()->FindChannel(channel_id); + if (!channel) + return ret; + + if (channel->getRecordDemux() == channel->getPipDemux()) + CStreamManager::getInstance()->StopStream(channel_id); + + int recmode = CRecordManager::getInstance()->GetRecordMode(channel_id); + if ((recmode == CRecordManager::RECMODE_OFF) || (channel->getRecordDemux() != channel->getPipDemux())) { + if (!g_Zapit->zapTo_pip(channel_id)) + DisplayErrorMessage(g_Locale->getText(LOCALE_VIDEOMENU_PIP_ERROR)); + else + ret = true; + } + return ret; +} +#endif + void CNeutrinoApp::Cleanup() { #ifdef EXIT_CLEANUP @@ -4029,6 +4106,8 @@ void CNeutrinoApp::Cleanup() delete g_CamHandler; g_CamHandler = NULL; printf("cleanup 17\n");fflush(stdout); delete g_volume; g_volume = NULL; + printf("cleanup 17a\n");fflush(stdout); + delete g_audioMute; g_audioMute = NULL; printf("cleanup 18\n");fflush(stdout); delete g_EpgData; g_EpgData = NULL; printf("cleanup 19\n");fflush(stdout); diff --git a/src/neutrino.h b/src/neutrino.h index e67b32e40..76f891516 100644 --- a/src/neutrino.h +++ b/src/neutrino.h @@ -225,6 +225,7 @@ public: void numericZap(int msg); void StopSubtitles(); void StartSubtitles(bool show = true); + bool StartPip(const t_channel_id channel_id); void SelectSubtitles(); void showInfo(void); CConfigFile* getConfigFile() {return &configfile;}; diff --git a/src/neutrino_menue.cpp b/src/neutrino_menue.cpp index c790dea55..422ee0d11 100644 --- a/src/neutrino_menue.cpp +++ b/src/neutrino_menue.cpp @@ -296,9 +296,11 @@ void CNeutrinoApp::InitMenuSettings() personalize.addItem(MENU_SETTINGS, mf, &g_settings.personalize[SNeutrinoSettings::P_MSET_NETWORK]); // record settings - mf = new CMenuForwarder(LOCALE_MAINSETTINGS_RECORDING, true, NULL, new CRecordSetup()); - mf->setHint(NEUTRINO_ICON_HINT_RECORDING, LOCALE_MENU_HINT_RECORDING); - personalize.addItem(MENU_SETTINGS, mf, &g_settings.personalize[SNeutrinoSettings::P_MSET_RECORDING]); + if (g_settings.recording_type != CNeutrinoApp::RECORDING_OFF) { + mf = new CMenuForwarder(LOCALE_MAINSETTINGS_RECORDING, true, NULL, new CRecordSetup()); + mf->setHint(NEUTRINO_ICON_HINT_RECORDING, LOCALE_MENU_HINT_RECORDING); + personalize.addItem(MENU_SETTINGS, mf, &g_settings.personalize[SNeutrinoSettings::P_MSET_RECORDING]); + } // osdlang mf = new CMenuForwarder(LOCALE_MAINSETTINGS_LANGUAGE, true, NULL, new COsdLangSetup()); @@ -318,9 +320,11 @@ void CNeutrinoApp::InitMenuSettings() } // drive settings - mf = new CMenuForwarder(LOCALE_HDD_SETTINGS, true, NULL, new CHDDMenuHandler()); - mf->setHint(NEUTRINO_ICON_HINT_HDD, LOCALE_MENU_HINT_HDD); - personalize.addItem(MENU_SETTINGS, mf, &g_settings.personalize[SNeutrinoSettings::P_MSET_DRIVES]); + if (g_settings.recording_type != CNeutrinoApp::RECORDING_OFF) { + mf = new CMenuForwarder(LOCALE_HDD_SETTINGS, true, NULL, new CHDDMenuHandler()); + mf->setHint(NEUTRINO_ICON_HINT_HDD, LOCALE_MENU_HINT_HDD); + personalize.addItem(MENU_SETTINGS, mf, &g_settings.personalize[SNeutrinoSettings::P_MSET_DRIVES]); + } // cisettings mf = new CMenuForwarder(LOCALE_CI_SETTINGS, true, NULL, g_CamHandler); diff --git a/src/nhttpd/Makefile.am b/src/nhttpd/Makefile.am index c78ebbbf8..1e1ea948d 100644 --- a/src/nhttpd/Makefile.am +++ b/src/nhttpd/Makefile.am @@ -18,5 +18,10 @@ INCLUDES = \ -I$(top_srcdir)/lib/connection \ @FREETYPE_CFLAGS@ + noinst_LIBRARIES = libnhttpd.a libnhttpd_a_SOURCES = yhttpd.cpp + +libnhttpd_adir = @CONFIGDIR@ +libnhttpd_a_DATA = nhttpd.conf +EXTRA_DIST = nhttpd.conf nhttpd.conf.in \ No newline at end of file diff --git a/src/nhttpd/nhttpd.conf b/src/nhttpd/nhttpd.conf.in similarity index 78% rename from src/nhttpd/nhttpd.conf rename to src/nhttpd/nhttpd.conf.in index de955798e..a4d74e924 100644 --- a/src/nhttpd/nhttpd.conf +++ b/src/nhttpd/nhttpd.conf.in @@ -1,8 +1,8 @@ Language.directory=languages -Language.selected=Deutsch -Tuxbox.LogosURL=/usr/share/tuxbox/neutrino/icons/logo -WebsiteMain.directory=/share/tuxbox/neutrino/httpd -WebsiteMain.override_directory=/var/httpd +Language.selected=English +Tuxbox.LogosURL=@TARGET_ICONSDIR@/logo +WebsiteMain.directory=@TARGET_PRIVATE_HTTPDDIR@ +WebsiteMain.override_directory=@TARGET_PUBLIC_HTTPDDIR@ WebsiteMain.port=80 WebsiteMain.hosted_directory=/var/hosted configfile.version=4 @@ -13,7 +13,7 @@ mod_auth.username=root mod_cache.cache_directory=/tmp/.cache mod_sendfile.mime_types=htm:text/html,html:text/html,xml:text/xml,txt:text/plain,jpg:image/jpeg,jpeg:image/jpeg,gif:image/gif,png:image/png,bmp:image/bmp,css:text/css,js:text/plain,img:application/octet-stream,ico:image/x-icon,m3u:application/octet-stream,tar:application/octet-stream,gz:text/x-gzip,ts:application/octet-stream mod_weblog.log_format= -mod_weblog.logfile=/tmp/yhhtpd.log +mod_weblog.logfile=/tmp/yhttpd.log server.chroot= server.group_name= server.log.loglevel=0 diff --git a/src/nhttpd/tuxboxapi/coolstream/Makefile.am b/src/nhttpd/tuxboxapi/coolstream/Makefile.am index a1b91974e..e29925da1 100644 --- a/src/nhttpd/tuxboxapi/coolstream/Makefile.am +++ b/src/nhttpd/tuxboxapi/coolstream/Makefile.am @@ -16,8 +16,12 @@ INCLUDES = \ @FREETYPE_CFLAGS@ if BOXTYPE_COOL +if BOXMODEL_APOLLO +INCLUDES += -I$(top_srcdir)/lib/libcoolstream2 +else INCLUDES += -I$(top_srcdir)/lib/libcoolstream endif +endif if USE_STB_HAL INCLUDES += -I$(STB_HAL_INC) endif diff --git a/src/nhttpd/tuxboxapi/coolstream/controlapi.cpp b/src/nhttpd/tuxboxapi/coolstream/controlapi.cpp index 73536004b..5612153e5 100644 --- a/src/nhttpd/tuxboxapi/coolstream/controlapi.cpp +++ b/src/nhttpd/tuxboxapi/coolstream/controlapi.cpp @@ -603,7 +603,7 @@ void CControlAPI::InfoCGI(CyhookHandler *hh) void CControlAPI::HWInfoCGI(CyhookHandler *hh) { unsigned int system_rev = cs_get_revision(); - std::string boxname = "Coolstream "; + std::string boxname = "CST "; static CNetAdapter netadapter; std::string eth_id = netadapter.getMacAddr(); std::transform(eth_id.begin(), eth_id.end(), eth_id.begin(), ::tolower); @@ -1480,9 +1480,15 @@ void CControlAPI::ScreenshotCGI(CyhookHandler *hh) CScreenShot * sc = new CScreenShot("/tmp/" + filename + ".png", (CScreenShot::screenshot_format_t)0 /*PNG*/); sc->EnableOSD(enableOSD); sc->EnableVideo(enableVideo); +#if 0 sc->Start(); - hh->SendOk(); // FIXME what if sc->Start() failed? +#else + if (sc->StartSync()) + hh->SendOk(); + else + hh->SendError(); +#endif } #endif diff --git a/src/nhttpd/tuxboxapi/coolstream/neutrinoyparser.cpp b/src/nhttpd/tuxboxapi/coolstream/neutrinoyparser.cpp index 972c5d173..b099cebf4 100644 --- a/src/nhttpd/tuxboxapi/coolstream/neutrinoyparser.cpp +++ b/src/nhttpd/tuxboxapi/coolstream/neutrinoyparser.cpp @@ -12,6 +12,10 @@ #include //ntohs #include //ntohs #include //ntohs + +#include +#include +#include // yhttpd #include #include @@ -22,9 +26,6 @@ #include "neutrinoyparser.h" #include "neutrinoapi.h" -#include -#include -#include #include #include @@ -218,9 +219,14 @@ std::string CNeutrinoYParser::func_get_bouquets_as_dropdown(CyhookHandler *, st int mode = NeutrinoAPI->Zapit->getMode(); for (int i = 0; i < (int) g_bouquetManager->Bouquets.size(); i++) { - ZapitChannelList * channels = mode == CZapitClient::MODE_RADIO ? &g_bouquetManager->Bouquets[i]->radioChannels : &g_bouquetManager->Bouquets[i]->tvChannels; + //ZapitChannelList &channels = mode == CZapitClient::MODE_RADIO ? g_bouquetManager->Bouquets[i]->radioChannels : g_bouquetManager->Bouquets[i]->tvChannels; + ZapitChannelList channels; + if (mode == CZapitClient::MODE_RADIO) + g_bouquetManager->Bouquets[i]->getRadioChannels(channels); + else + g_bouquetManager->Bouquets[i]->getTvChannels(channels); sel=(nr==(i+1)) ? "selected=\"selected\"" : ""; - if(!channels->empty() && (!g_bouquetManager->Bouquets[i]->bHidden || do_show_hidden == "true")) + if(!channels.empty() && (!g_bouquetManager->Bouquets[i]->bHidden || do_show_hidden == "true")) yresult += string_printf("\n", i + 1, sel.c_str(), std::string(g_bouquetManager->Bouquets[i]->bFav ? g_Locale->getText(LOCALE_FAVORITES_BOUQUETNAME) :g_bouquetManager->Bouquets[i]->Name.c_str()).c_str()); //yresult += string_printf("\n", i + 1, sel.c_str(), (encodeString(std::string(g_bouquetManager->Bouquets[i]->Name.c_str()))).c_str()); @@ -240,8 +246,13 @@ std::string CNeutrinoYParser::func_get_bouquets_as_templatelist(CyhookHandler * //ytemplate += "\n"; //FIXME add newline to printf int mode = NeutrinoAPI->Zapit->getMode(); for (int i = 0; i < (int) g_bouquetManager->Bouquets.size(); i++) { - ZapitChannelList * channels = mode == CZapitClient::MODE_RADIO ? &g_bouquetManager->Bouquets[i]->radioChannels : &g_bouquetManager->Bouquets[i]->tvChannels; - if(!channels->empty() && (!g_bouquetManager->Bouquets[i]->bHidden || do_show_hidden == "true")) { + //ZapitChannelList &channels = mode == CZapitClient::MODE_RADIO ? g_bouquetManager->Bouquets[i]->radioChannels : g_bouquetManager->Bouquets[i]->tvChannels; + ZapitChannelList channels; + if (mode == CZapitClient::MODE_RADIO) + g_bouquetManager->Bouquets[i]->getRadioChannels(channels); + else + g_bouquetManager->Bouquets[i]->getTvChannels(channels); + if(!channels.empty() && (!g_bouquetManager->Bouquets[i]->bHidden || do_show_hidden == "true")) { yresult += string_printf(ytemplate.c_str(), i + 1, g_bouquetManager->Bouquets[i]->bFav ? g_Locale->getText(LOCALE_FAVORITES_BOUQUETNAME) : g_bouquetManager->Bouquets[i]->Name.c_str()); yresult += "\r\n"; } @@ -279,7 +290,11 @@ std::string CNeutrinoYParser::func_get_channels_as_dropdown(CyhookHandler *, st if(bnumber > 0) { bnumber--; ZapitChannelList channels; - channels = mode == CZapitClient::MODE_RADIO ? g_bouquetManager->Bouquets[bnumber]->radioChannels : g_bouquetManager->Bouquets[bnumber]->tvChannels; + //channels = mode == CZapitClient::MODE_RADIO ? g_bouquetManager->Bouquets[bnumber]->radioChannels : g_bouquetManager->Bouquets[bnumber]->tvChannels; + if (mode == CZapitClient::MODE_RADIO) + g_bouquetManager->Bouquets[bnumber]->getRadioChannels(channels); + else + g_bouquetManager->Bouquets[bnumber]->getTvChannels(channels); for(int j = 0; j < (int) channels.size(); j++) { CEPGData epg; CZapitChannel * channel = channels[j]; @@ -303,7 +318,7 @@ std::string CNeutrinoYParser::func_get_bouquets_with_epg(CyhookHandler *hh, std: int BouquetNr = 0; std::string abnumber, tmp,yresult; ZapitChannelList channels; - int num; + //int num; int mode = NeutrinoAPI->Zapit->getMode(); ySplitString(para," ",abnumber, tmp); @@ -311,13 +326,19 @@ std::string CNeutrinoYParser::func_get_bouquets_with_epg(CyhookHandler *hh, std: BouquetNr = atoi(abnumber.c_str()); if (BouquetNr > 0) { BouquetNr--; +#if 0 channels = mode == CZapitClient::MODE_RADIO ? g_bouquetManager->Bouquets[BouquetNr]->radioChannels : g_bouquetManager->Bouquets[BouquetNr]->tvChannels; num = 1 + (mode == CZapitClient::MODE_RADIO ? g_bouquetManager->radioChannelsBegin().getNrofFirstChannelofBouquet(BouquetNr) : g_bouquetManager->tvChannelsBegin().getNrofFirstChannelofBouquet(BouquetNr)) ; +#endif + if (mode == CZapitClient::MODE_RADIO) + g_bouquetManager->Bouquets[BouquetNr]->getRadioChannels(channels); + else + g_bouquetManager->Bouquets[BouquetNr]->getTvChannels(channels); } else { CBouquetManager::ChannelIterator cit = mode == CZapitClient::MODE_RADIO ? g_bouquetManager->radioChannelsBegin() : g_bouquetManager->tvChannelsBegin(); for (; !(cit.EndOfChannels()); cit++) channels.push_back(*cit); - num = 1; + //num = 1; } NeutrinoAPI->GetChannelEvents(); @@ -377,7 +398,7 @@ std::string CNeutrinoYParser::func_get_bouquets_with_epg(CyhookHandler *hh, std: "')\">%s\n", ((channel->channel_id == current_channel) ? "" : " "), channel->channel_id, - num + j /*channel->nr*/, + channel->number /* num + j */, channel->getName().c_str(), (channel->getServiceType() == ST_NVOD_REFERENCE_SERVICE) ? " (NVOD)" : "", channel->channel_id, @@ -652,7 +673,7 @@ std::string CNeutrinoYParser::func_get_partition_list(CyhookHandler *, std::str std::string CNeutrinoYParser::func_get_boxtype(CyhookHandler *, std::string) { unsigned int system_rev = cs_get_revision(); - std::string boxname = "Coolstream "; + std::string boxname = "CST "; #if HAVE_TRIPLEDRAGON boxname = "Armas "; @@ -949,6 +970,8 @@ std::string CNeutrinoYParser::func_set_timer_form(CyhookHandler *hh, std::strin t_channel_id current_channel = (cmd == "new") ? CZapit::getInstance()->GetCurrentChannelID() : timer.channel_id; CBouquetManager::ChannelIterator cit = g_bouquetManager->tvChannelsBegin(); for (; !(cit.EndOfChannels()); cit++) { + if (((*cit)->flags & CZapitChannel::REMOVED) || (*cit)->flags & CZapitChannel::NOT_FOUND) + continue; sel = ((*cit)->channel_id == current_channel) ? "selected=\"selected\"" : ""; hh->ParamList["program_row"] += string_printf(" - + diff --git a/src/nhttpd/web/Y_Tools_Screenshot.yhtm b/src/nhttpd/web/Y_Tools_Screenshot.yhtm index 2d6c836cc..6adee9bc7 100644 --- a/src/nhttpd/web/Y_Tools_Screenshot.yhtm +++ b/src/nhttpd/web/Y_Tools_Screenshot.yhtm @@ -48,7 +48,7 @@ function do_snapshot() { else loadSyncURL("/control/screenshot?name="+filename+"&osd="+enableOSD+"&video="+enableVideo); - window.setTimeout("do_showshot('"+filename+"');", (enableVideo == 1) ? 6500 : 3000); + do_showshot(filename); } function do_showshot(_filename) { if (_filename == "") diff --git a/src/nhttpd/web/Y_Version.txt b/src/nhttpd/web/Y_Version.txt index 6e468eaee..92c58e2c6 100644 --- a/src/nhttpd/web/Y_Version.txt +++ b/src/nhttpd/web/Y_Version.txt @@ -1,4 +1,4 @@ version=2.8.0.33 date=06.02.2013 type=Release -info=Port Coolstream +info=Port CST diff --git a/src/nhttpd/web/images/hd1.jpg b/src/nhttpd/web/images/hd1.jpg index 2cfd4998c..739b2e7f4 100644 Binary files a/src/nhttpd/web/images/hd1.jpg and b/src/nhttpd/web/images/hd1.jpg differ diff --git a/src/nhttpd/web/languages/Makefile.am b/src/nhttpd/web/languages/Makefile.am index 69930d8ad..ed32f57d3 100644 --- a/src/nhttpd/web/languages/Makefile.am +++ b/src/nhttpd/web/languages/Makefile.am @@ -1,4 +1,4 @@ installdir = $(DATADIR)/neutrino/httpd/languages -install_DATA = Deutsch English Portuguese +install_DATA = Deutsch English Portuguese Slovak diff --git a/src/nhttpd/web/languages/Slovak b/src/nhttpd/web/languages/Slovak new file mode 100644 index 000000000..501032626 --- /dev/null +++ b/src/nhttpd/web/languages/Slovak @@ -0,0 +1,536 @@ +# yWeb language file (Slovensky) by EnoSat +# language version: 1.1 +# $Date: 2013-04-30 22:22:22 +0100 (Ut, 30 Apríla 2013) $ +# $Revision: 212 $ +#========= Hlavné / Celkové nastavenie +global.no_iframes=Váš prehliadač nepodporuje I-rámce. +clear=vyčistiť +submit=Odoslať +action=Akcia +user=Uživateľ +password=Heslo +language=Jazyk +general=Základné +logos=Logá +url=URL +server=Server +refreshing=obnovovanie ... +refresh=obnoviť +record=nahrávanie +zap=prepnúť +lookup=nazrieť +save_values_desc=odoslať a uložiť hodnoty +save_values=Ukladanie hodnôt ... +save=uložiť +save_all=uložiť všetko +administration=Administrácia +normal=Normal +management=Manžment +uninstaller=Odinštalovanie +send=poslať +cancel=zrušiť +answer=Odpoveď +reboot=reBoot +shutdown=vypnutie +status=Stav +restart=reŠtart +on=áno +off=nie +download=Stiahnuť +back=späť +date=dátum +from=od +to=do +program=program +others=Iné +description=popis +color=Farba +tag=Udalosť +empty=Prázdna +check=overiť +help=Nápoveda +attention=Upozornenie! +directory=Adresár +filename=Názov súboru +restriced_by_management_ip=obmedzené Manažmentom-IP + +#======== Hlavná ponuka +main.boxcontrol=Ovládanie zariadenia +main.boxcontrol_desc=Ovládanie zariadenia a Obľúbené +main.live=Naživo +main.live_desc=Živá TV, Synchronizácia časovača & Nastavenia +main.tools=Nástroje +main.tools_desc=Pripojenia, WOL, Rozšírené nástroje +main.settings=Nastavenia +main.settings_desc=Nastavenia zariadenia, Prehliadač, Doplnky ... +main.extensions=Rozšírenia +main.extensions_desc=Uživatelské rozšírenia ... +main.info=Informácia +main.info_desc=Informácia o yWeb, Aktualizácie +main.live_tv_desc=Živá TV +main.live_tv_popup_desc=Okno Živá TV +main.remote_full_desc=Diaľkové ovládanie a OSD +main.stream_to_vlc_client_desc=Stream do VLC klienta +main.version=Verzia + +#========= Ponuka ovládania boxu +bc.menue.bouquets_desc=Prepínanie kanálov +bc.menue.bouquets=Obľúbené +bc.menue.control_desc=funkcie ovládania zariadenia (reBoot , Diaľkové ovládanie, SPTS, ...) +bc.menue.control=Ovládanie +bc.menue.messages_desc=poslať Správu do zariadenia +bc.menue.messages=Správy +bc.menue.remote_desc=Webovský Diaľkový ovládač +bc.menue.remote=Ovládač +bc.menue.lcd_screenshot_desc=vytvorí obrázok OSD zobrazenia v mierke +bc.menue.lcd_screenshot=Zosnímanie OSD obrazovky +bc.menue.lcd_screenshot_desc_ni=lcshot nie je inštalovaný v /bin alebo /var/bin +bc.menue.screenshot=Zosnímanie TV obrazovky +bc.menue.screenshot_desc=vytvorí obrázok z osd a/alebo TV bez mierky + +bc.menue.decrease_volume=znížiť hlasitosť +bc.menue.increase_volume=zvýšiť hlasitosť +bc.menue.mute_volume=umlčať hlasitosť +bc.menue.switch_to_tv=prepnúť do TV +bc.menue.switch_to_radio=prepnúť do Rádio +bc.menue.webinf_slavebox=Webinterface pre podriadené zariadenie +bc.menue.volumen_display=zobrazenie hlasitosti + +#========= Ovládanie +bc.control.freemem=Voľná pamäť +bc.control.lock=zamknuté +bc.control.unlock=odomknuté +bc.control.standby_mode=režim pripravenosti +bc.control.recording_mode=režim nahrávania +bc.control.box=box +bc.control.remote=ovládač +bc.control.playback=režim prehrávania +bc.control.epg_sectiond=EPG Sekcia +bc.control.live_lock=naživo zamknuté +bc.control.reboot.ask=Skutočne reštartovať zariadenie? +bc.control.reboot=reBoot +bc.control.shutdown.ask=Skutočne vypnúť zariadenie? +bc.control.shutdown=vypnúť +bc.control.status=stav +bc.control.restart=reŠtart + +========= Ovládanie - Správa +bc.msg.message_to_screen_desc=vložte správu pre poslanie na TV obrazovku +bc.msg.message_to_screen=Správu na obrazovku +bc.msg.popup_to_screen=Správu do okna +bc.msg.send_message=poslať správu + +======== Ovládanie - Zosnímanie obrazu obrazovky +bc.screenshot.create=Zosnímať obrazovku +bc.screenshot.delete=Vymazať obrazovku +bc.screenshot.zoom=Zoomovať obrazovku +bc.screenshot.wait_text=Vytváram obrázok obrazovky +bc.screenshot.checkenable=OSD a/alebo TV musí byť použitý! + +========= Ovládanie - Iné +bc.channels=Kanály + +====== Rozšírenia +ext.installer_updater=Inštalácia/Aktualizácia +ext.uninstaller=Odinštalovať rozšírenia +ext.search_for_ext=Vyhľadávanie rozšírení ... +ext.installed_extensions=Inštalované rozšírenia +ext.type=Typ +ext.extension=Rozšírenie +ext.tag=Udalosť +ext.version=Verzia +ext.size=Veľkosť +ext.uninstall=Odinštalovať +ext.info=Informácia +ext.free=Voľné +ext.action=Akcia +ext.status=Stav +ext.preview=Nastavenia nového rozšírenia (prehľad) +ext.update_preview=Prehľad zoznamu aktualizácií +ext.your=Vaša +ext.update=Aktuálna +ext.update_install=aktualizovať/inštalovať +ext.site=Stránka +ext.refresh_now=Nastavenia uložené. Teraz obnovte Menu. +ext.ext_saved=Nastavenia rozšírení uložené + +====== Obľúbené +bou.bouquet=Obľúbené +bou.bouquets_must_be_saved=Všetky Obľúbené musia byť uložené! +bou.bouquet_editor=Úprava obľúbených +bou.bouquet_add=pridať obľúbené +bou.name_of_bouquet=Názov pre obľúbené +bou.rename_bouquet=Premenovať obľúbené +bou.move_up=presun nahor +bou.move_down=presun nadol +bou.remove=odstrániť +bou.delete=vymazať +bou.add=pridať +bou.rename=premenovať +bou.bouqets_saved=Obľúbené uložené +bou.delete1=Skutočne vymazať obľúbené? +bou.delete2= +bou.no_bouquet_name=Nezadaný názov obľúbených + +======= EPG +epg.get_epg=načítavanie EPG ... +epg.epg_plus=EPG Plus +epg.select_bouquet=výber obľúbených - kanály budú aktualizované +epg.hover_for_details=Presun ukazovateľa na stanicu pre získanie podrobností +epg.refresh=obnovovanie EPG +epg.past_hours=predchádzajúce hodiny +epg.next_hours=nasledujúce hodiny +epg.set_timer=Nastavenie časovaca. Vykonané. +epg.zap_to=Prepnutie na kanál. Vykonané. + +======= EPG Streaminfo +epg.si.streaminfo=Informácie streamu +epg.si.resolution=Rozlíšenie +epg.si.ratio=Pomer strán +epg.si.fps=Snímok za sekundu +epg.si.audiotype=Druh zvuku +epg.si.frequence=Kmitočet +epg.si.onid=Originálny sieťový ID (ONID) +epg.si.sid=Služba ID (SID) +epg.si.tsid=Transpondér stream ID (TID) +epg.si.vpid=Obrazový PID +epg.si.apid=Zvukový PID +epg.si.vtxtpid=TeleText PID +epg.si.crypt=Kodovací systém + +======= Nastavenia +set.reload_neutrino=reŠtart Neutrina +set.reboot_required=Nutný reBoot +set.sync_with_neutrino_desc=Po zmenách nastavení cez yWeb:
Vybrať na TV "Hlavné Menu-> Služby-> Reštart software", pre prijatie zmien vnútri neutrína.
Po zmenách nastavení vnútri Neutrina:
Vybrať na TV "Hlavné Menu-> Nastavenia-> Uloženie nastavenia", pre použitie týchto zmien a znovu načítať túto stránku. +set.sync_with_neutrino=Synchronizovať s Neutrinom + +====== Hlavné nastavenia a Ponuka +set.menue.webserver=Webserver +set.menue.timer_settings=Nastavenie tvinfo.de +set.menue.zapit=Prepínanie +set.menue.backup_restore=Záloha a Obnova +set.menue.bouquet_editor=Úprava obľúbených +set.menue.video_audio=Obraz/Zvuk +set.menue.parental=Rodičovská kontrola +set.menue.direct_recording=Priame nahrávanie +set.menue.recording=Nahrávanie +set.menue.audio_player=Prehrávač hudby +set.menue.esound_server=Server Esound +set.menue.movieplayer=Prehrávač filmov +set.menue.pictureviewer=Prehliadač obrázkov +set.menue.lcd_display=LCD zobrazovač +set.menue.key_settings=Nákres kľúča +set.menue.boot_options=Voľby zavádzania +set.menue.peronalization=Osobné zohľadnenie +set.menue.plugins=Doplnky +set.menue.others=Ostatné +======= Nastavenie nahrávania v Neutrine +set.rec.rec_dest=Umiestnenie nahrávok +set.rec.device=Nahrávacie zariadenie +set.rec.recmode=Nastavenie režimu nahrávania +set.rec.server=Server +set.rec.recorder=Nahrávanie na videorekordér +set.rec.file=Súbor +set.rec.recserver_ip=IP serveru nahrávania +set.rec.recserver_port=Port serveru nahrávania +set.rec.recserver_wol=WOL serveru nahrávania +set.rec.mac_adress=MAC adresa +set.rec.rec_behavior=Spravovanie nahrávania +set.rec.stop_playback=Zastavenie prehrávania +set.rec.epg_sectionsd_desc=nastavenie nahrávania podľa EPG +set.rec.epg_sectionsd=EPG (Čiastkove) +set.rec.dont_stop=nezastavovať +set.rec.stop=zastaviť +set.rec.restart=reŠtart +set.rec.zap=Oznámenie prepnutia +set.rec.scart=Predchádzať prepnutiu Scartu +set.rec.spts=Nahrávanie v SPTS režime +set.rec.timer_settings=Nastavenia korekcií časovača +set.rec.start_delay=Korekcia štartu nahrávania (sekundy) +set.rec.stop_delay=Korekcia ukončenia nahrávania (sekundy) +set.rec.zap_delay=Korekcia zapnutia prevoľby (sekundy) +set.rec.audio_channels=Zvukové stopy +set.rec.audio_standard=Štandartný kanál nahrávania zvuku +set.rec.audio_alternate=Voliteľný kanál módu nahrávania zvuku +set.rec.audio_ac3=Nahrávanie DolbyDigital (AC3) zvuku +set.rec.channeldir=Uložiť v adresáry kanála +set.rec.epg_end=Nahrávanie až do konca EPG +set.rec.recordtime=Čas nahrávania v hodinách +set.rec.timeshift_desc=Časový posun (Timeshift) +set.rec.timeshift.pause=Spustenie klávesou PAUSE +set.rec.timeshift.auto_record=Automatické nahrávanie (v sek, 0=deaktivované) +set.rec.timeshift.auto_delete=Automatické vymazanie časového posunu +set.rec.timeshift.tmp_timeshift=Dočasný časový posun + +======= Nastavenia Movieplayera v Neutrine +set.mp.sources=Voľba zdroja +set.mp.streamingserver_ip=IP Stream servera +set.mp.streamingserver_port=Port Stream servera +set.mp.streamingserver=Streamovací server +set.mp.dvd_device=DVD zariadenie +set.mp.vlc_dir=Adresár (VLC) +set.mp.transcoding=Transkódovanie +set.mp.video_datarate=Dátová rýchlosť obrazu +set.mp.transcode=Transkódovať +set.mp.video_codec=MPEG obrazový kodek +set.mp.resolution=Rozlíšenie +set.mp.audio_datarate=Dátová rýchlosť zvuku +set.mp.transcode_audio=Transkódovanie zvuku (dvd/vcd/mpg) +set.mp.force_ac3=Ako AC3 pre AVI +set.mp.player=Prehrávač +set.mp.start_directory=Štartovací adresár +set.mp.only_movieplayer=Iba prehrávač filmov +set.mp.used_buffer=Použi buffer (WabberQueue) +set.mp.number_buffersegments=Čislo segmentu buffera +set.mp.picture_in_browser=TV obrázok v prehliadači + +======= Rodičovské nastavenia v Neutrine +set.parental.activate=Aktivácia +set.parental.type.never=Nikdy +set.parental.type.bouquet=Obľubené +set.parental.type.preset=Preddefinovanné +set.parental.minimum_age=Minimálny vek +set.parental.pin=PIN + +======= Nastavenia NHTTP +set.nhttpd.webserver=Webserver +set.nhttpd.authentication=Autorizácia +set.nhttpd.client_without_authentication_desc=Klient bez kontroly autorizácie. Vloženie IP. +set.nhttpd.client_without_authentication=Klient bez autorizácie +set.nhttpd.active_after_boot=aktívne po nabootovaní +set.nhttpd.port=Vydávateľ +set.nhttpd.threading=Prepojené +set.nhttpd.alternate_web_folder=Alternatívny web-adresár +set.nhttpd.allowed_file_extensions=Povolené prípony súboru / MIME +set.nhttpd.allow_all_file_extensions=Povoliť všetky prípony súboru +set.nhttpd.url_of_logos_desc=Vloženie adresára s logami staníc +set.nhttpd.url_of_logos=Adresár s logami staníc +set.nhttpd.server=Server +set.nhttpd.ips_without_keep_alive_desc=(napr. JtG Server, oddelené s COMMAS) +set.nhttpd.ips_without_keep_alive=IP s No keep-alive +set.nhttpd.cache=Cache +set.nhttpd.cache_info=Informácia o Cache +set.nhttpd.clear_cache=vyčistiť cache +set.nhttpd.server_configuration=Konfigurácia servera +set.nhttpd.check_password=Heslo na potvrdenie , minimum 4 písmena +set.nhttpd.check_port=Port je potrebný + +========= Nastavenie yWeb +set.yweb.enter_ip_desc=zadanie IP (xxx.xxx.xxx.xxx) +set.yweb.enter_mac_desc=zadanie MAC adresy (xx:xx:xx:xx:xx:xx) +set.yweb.description=Popis +set.yweb.enter_description_desc=vloženie popisu +set.yweb.management_IPs=Manažovateľné IP +set.yweb.wake_on_lan=Prebudiť na sieti +set.yweb.box_tag_desc=Pomenovanie zariadenia vo vrchnom menu. +set.yweb.box_tag=Názov zariadenia +set.yweb.box_color_desc=Farba názvu zariadenia vo vrchnom menu. napr. vložte 2188e0 bez # +set.yweb.box_color=Farba +set.yweb.start_page=Štartovacia stránka +set.yweb.remote=Ovládač + +======== Nastavenie prehliadača obrázkov +set.pv.pictureviewer=Prehliadač obrázkov +set.pv.scale=Zobrazenie +set.pv.scale.none=Žiadne +set.pv.scale.simple=Jednoduché +set.pv.scale.complex=Kompletné +set.pv.slideshow_duration=Čas prezentácie +set.pv.start_dir=Štartovací adresár +set.pv.decoding_server_ip=IP do Servera -dekodovača +set.pv.decoding_server_port=Port Servera -dekodovača + +======== Nastavenie prehrávača hudby +set.ap.audioplayer=Prehrávač hudby +set.ap.display_order.actor_title=Umelec , Titul +set.ap.display_order.title_actor=Titul, Umelec +set.ap.display_order=Zobrazenie +set.ap.select_actual_track=Voľba stopy +set.ap.search_by_name=Hľadanie podľa názvu +set.ap.repeat_mode=Režim opakovania +set.ap.show_playlist=Zobrazenie zoznamu +set.ap.screensaver=Obrazový setrič (min, 0=vypnute ) +set.ap.decode_priority=Vyššia priorita dekódovania +set.ap.start_dir=Štartovací adresár +set.ap.parse_shoutcast=Shoutcast Meta-Dáta + +======= Nastavenia časovača +set.timer.header=Nastavenie časovača tvinfo.de +set.timer.username=Uživateľ +set.timer.password=Heslo +set.timer.klack.url_desc=("&" bude prevedené do ";" na uloženie) +set.timer.klack.url=Osobný RSS TV-Plánovač URL +set.timer.klack.security_code_desc=váš "klack" bezpečnostný kód dostane vaše dáta bez prihlásenia +set.timer.klack.security_code=Bezpečnostný kód +set.timer.channel_name_replacelist=Názov kanálu výmenného zoznamu + +======= Nastavenia Zálohy/Obnovenia +set.settings.backup=Záloha +set.settings.backup_desc=Zálohovanie vaších nastavení +set.settings.restore=Obnova +set.settings.restore_desc=Nahranie a obnova vaších nastavení. Váš STB bude rebootnutý. +set.settings.warning=Záloha a Obnovenie je možné len pre ten istý Image s rovnakou úrovňou vývoja. + +============ Nástroje Info +tools.info.show_messages=Správy kernelu +tools.info.processes=Procesy +tools.info.memory=Pamäť +tools.info.cpu_info=Informácia o CPU +tools.info.mem_info=Informácia o pamäti +tools.info.partitions=Informácia o partíciach +tools.info.mtd=mtd +tools.info.stat=Stav +tools.info.version=Verzia + +============ Nástroje yInstaller +tools.yinstaller.no_file_given=Nevybraný súbor ! +tools.yinstaller.space.mtd=Celková kapacita +tools.yinstaller.space.used= Použitá +tools.yinstaller.space.free= Voľná +tools.yinstaller.space.percentage= Použitá v percentách +tools.yinstaller.not_determine=Nedá sa určiť voľná kapacita. +tools.yinstaller.head=yInstaller +tools.yinstaller.tar_file=tar-súbor +tools.yinstaller.upload_install=nahrať a inštalovať + +============ Nástroje +tools.automount_desc=spravovanie automaticky pripojených súborov +tools.automount=Automatické pripojenia +tools.mounts_desc=spravovanie pripojených súborov +tools.mounts=Pripojenia +tools.wake_on_lan=Prebudiť na sieti +tools.check_install=Overenie inštalácie +tools.expert=Rozšírené +tools.image_desc=záloha alebo programovanie pamäte +tools.image=Image +tools.command_shell=Príkazy Shell-u +tools.not_installed=Nenainštalované +tools.cmd_shell.output_desc=automatický posun (len IE) +tools.path=Cesta +tools.command=Príkaz +tools.cmd.enter_command=vloženie príkazu pre vykonanie +tools.cmd.execute_command=vykonanie operačného príkazu +tools.boot_logo=Bootovacie logo + +=========== Ponuka ŽIVÁ TV +live.heading=ŽIVÁ TV / Časovač +live.live=ŽIVÁ TV +live.tv_popup_desc=ŽIVÁ TV (okno) +live.tv=TV +live.radio_popup_desc=ŽIVÉ Radio (okno) +live.radio=Rádio +live.double_view=Dvojnásobná veľkosť +live.timer=Časovač +live.epg=EPG +live.epg_plus_popup_desc=EPG+ (okno) +live.epg_plus=EPG Plus +live.timer_sync=Synchronizácia časovača + +=========== ŽIVÉ TV/Rádio +live.get_stream_info=Získavanie
informácii streamovania. +live.getting_bouquets=Získavanie obľúbených .... +live.getting_channels=Získavanie kanálov ... +live.select_resolution=Výber rozlíšenia +live.change_channel=Zmena kanála +live.view_epg=Pozri EPG pre vybraný kanál +live.reload=Aktualizuj kanály +live.getting_subchannels=Choď na subkanály... +live.mute=Zapni/Vypni hlasitosť +live.stop=Zastaviť streamovanie +live.play_or_pause=Prehrať alebo pozastaviť streamovanie +live.lower_volume=Znížiť hlasitosť +live.higher_volume=Zvýšiť hlasitosť +live.fullscreen=Prepnutie na celu obrazovku dvojklikom +live.lock_unlock=Zamknúť/odomknúť TV (mód nahravania, rc, lcd) +live.toggle_udp=UDP Streamovanie Zap/Vyp +live.settings=Nastavenia ŽiváTV +live.snapshot=Urobiť snímku obrazovky +live.record=Nahrávací režim +live.transcode=Transkódovací režim +live.build_vlc=...vstavané riadenie vlc ... +live.select_bouquet=Výber buketu (kanály budú aktualizované) +live.select_channel=Výber kanála (použije na prepnutie) +live.live_popup_msg=V móde Live-View nie je prepínanie kanálov priamo ovládané cez Web, Box - diaľkove ovládanie +live.unlock=odblokovanie RC (diaľkové ovládanie) + +=========== Nahrávanie cez ŽIVÚ Tv +live.rec.record_mode=Režim nahrávania +live.rec.filename=Názov súboru +live.rec.display_on=Zapnúť zobrazenie +live.rec.transcoding_on=Zapnúť transkódovanie +live.rec.record=Spustiť nahrávanie +live.rec.stop_record=Zastaviť nahrávanie +live.rec.tanscode=Transkódovanie nahrávania +live.rec.profile=Profily +live.rec.video=Obraz +live.rec.width=Šírka +live.rec.height=Výška +live.rec.codec=Kodek +live.rec.bitrate=Bitrate +live.rec.scale=Mierka +live.rec.audio=Zvuk +live.rec.channels=Kanály +live.rec.trans_broadcast=Transkódované vysielanie +live.rec.access=Prístup +live.rec.type=Typ +live.rec.ip_port=IP:Port + +=========== Nastavenia ŽIVÁ TV +live.set.vlc_settings=Nastavenia VLC(IE & Mozilla >= 0.8.6.1) +live.set.deinterlace=Deinterlace +live.set.http_caching=Vyrovnávacia pamäť http +live.set.udp_defaul=Prednastaviť UDP port +live.set.slavebox_ip=IP druhého Boxu(2. dbox) +live.set.enter_ip=vložiť IP (xxx.xxx.xxx.xxx) druhého Boxu +live.set.vlc_rec_dir=VLC nahrávací adresár +live.set.refresh_liveview=Obnoviť ŽiváTV + +=========== ŽIVÉ Timer Edit +live.timer_edit.timer=Úprava časovača +live.timer_edit.times=Časy +live.timer_edit.alarm_date=Nastavená doba spustenia +live.timer_edit.time=čas +live.timer_edit.stop_date=Nastavená doba zastavenia +live.timer_edit.repeat=Opakovanie +live.timer_edit.repeat1=opakovanie [0-bez obmedzenia] +live.timer_edit.weekdays.format=(Pon-Ned, X=Timer) +live.timer_edit.weekdays=Týždenne +live.timer_edit.values=Hodnoty +live.timer_edit.channel=Kanál +live.timer_edit.apids=Audio pidy +live.timer_edit.apids.default=Prednastavené +live.timer_edit.apids.standard=Štandartné +live.timer_edit.apids.alt=Alternativné +live.timer_edit.apids.ac3=AC3 +live.timer_edit.standby=Režim spánku +live.timer_edit.plugin=Doplnok +live.timer_edit.rec_dir=Adresár nahrávania +live.timer_edit.description=Popis + +=========== LIVE Timer Sync +live.timer-sync.get_timer=Načítať časovač. +live.timer-sync.header=Synchronizácia TVInfo časovača +live.timer-sync.timer_source=Zdroj časovača +live.timer-sync.rec_dir=Nahrávací adresár +live.timer-sync.settings=Nastavenia +live.timer-sync.debugging=Debugovanie +live.timer-sync.get_selected=načítanie vybraných +live.timer-sync.clear_all=zmazať všetko +live.timer-sync.timer_preview=Prehľadový zoznam časovača +live.timer-sync.start_time=Čas začiatku +live.timer-sync.end_time=Čas konca +live.timer-sync.channel=Kanál +live.timer-sync.programm=Program +live.timer-sync.source=Zdroj +live.timer-sync.set_timer=nastav časovač +live.timer-sync.clear_log=vyčisti log +live.timer-sync.log=Log +live.timer-sync.action=Akcia +live.timer-sync.status=Stav + +========== INFO +info.help=Pomoc +info.About=O programe +info.check_for_updates=Kontrola aktualizácie +info.your_version=Vaša inštalovaná verzia +info.actual_version=Aktuálna verzia diff --git a/src/nhttpd/yconfig.h b/src/nhttpd/yconfig.h index 7790cea2e..675d6a04e 100644 --- a/src/nhttpd/yconfig.h +++ b/src/nhttpd/yconfig.h @@ -7,6 +7,9 @@ #ifndef __yconfig_h__ #define __yconfig_h__ +#ifdef HAVE_CONFIG_H +#include +#endif // c++ #include #include @@ -102,15 +105,15 @@ #define AUTHUSER "root" #define HTTPD_CONFIGDIR CONFIGDIR -#define HTTPD_CONFIGFILE HTTPD_CONFIGDIR "/nhttpd.conf" -#define YWEB_CONFIGFILE HTTPD_CONFIGDIR "/Y-Web.conf" -#define PUBLICDOCUMENTROOT "/var/httpd" -#define NEUTRINO_CONFIGFILE CONFIGDIR "/neutrino.conf" +#define HTTPD_CONFIGFILE HTTPD_CONFIGDIR"/nhttpd.conf" +#define YWEB_CONFIGFILE HTTPD_CONFIGDIR"/Y-Web.conf" +#define PUBLICDOCUMENTROOT PUBLIC_HTTPDDIR +#define NEUTRINO_CONFIGFILE CONFIGDIR"/neutrino.conf" #define HOSTEDDOCUMENTROOT "/mnt/hosted" #define EXTRASDOCUMENTROOT "/mnt/hosted/extras" #define EXTRASDOCUMENTURL "/hosted/extras" -#define ZAPITXMLPATH CONFIGDIR "/zapit" -#define TUXBOX_LOGOS_URL DATADIR "/neutrino/icons/logos" +#define ZAPITXMLPATH CONFIGDIR"/zapit" +#define TUXBOX_LOGOS_URL ICONSDIR"/logo" // switch for Box differences #ifdef CONFIG_SYSTEM_TUXBOX @@ -120,7 +123,7 @@ #ifdef CONFIG_SYSTEM_TUXBOX_COOLSTREAM #define AUTHPASSWORD "coolstream" -#define PRIVATEDOCUMENTROOT DATADIR "/neutrino/httpd" +#define PRIVATEDOCUMENTROOT PRIVATE_HTTPDDIR #undef Y_CONFIG_BUILD_AS_DAEMON // No Daemon #endif //----------------------------------------------------------------------------- diff --git a/src/nhttpd/yhttpd.cpp b/src/nhttpd/yhttpd.cpp index 054971bf6..834299f12 100644 --- a/src/nhttpd/yhttpd.cpp +++ b/src/nhttpd/yhttpd.cpp @@ -55,7 +55,8 @@ static CmodCache mod_cache; // static instance //----------------------------------------------------------------------------- #if defined(CONFIG_SYSTEM_TUXBOX) || defined(CONFIG_SYSTEM_TUXBOX_COOLSTREAM) -#include +#include "neutrinoapi.h" +#include static CNeutrinoAPI *NeutrinoAPI; #endif diff --git a/src/nhttpd/yhttpd_core/Makefile.am b/src/nhttpd/yhttpd_core/Makefile.am index ec562ae50..de0679d2b 100644 --- a/src/nhttpd/yhttpd_core/Makefile.am +++ b/src/nhttpd/yhttpd_core/Makefile.am @@ -1,5 +1,7 @@ INCLUDES = \ -I$(srcdir) \ + -I$(top_builddir) \ + -I$(top_srcdir) \ -I$(top_srcdir)/lib \ -I$(top_srcdir)/src/zapit/include \ -I$(top_srcdir)/src \ diff --git a/src/system/Makefile.am b/src/system/Makefile.am index 9e98a71ea..723e7e91e 100644 --- a/src/system/Makefile.am +++ b/src/system/Makefile.am @@ -15,8 +15,12 @@ INCLUDES = \ @FREETYPE_CFLAGS@ if BOXTYPE_COOL +if BOXMODEL_APOLLO +INCLUDES += -I$(top_srcdir)/lib/libcoolstream2 +else INCLUDES += -I$(top_srcdir)/lib/libcoolstream endif +endif if USE_STB_HAL INCLUDES += -I$(STB_HAL_INC) endif diff --git a/src/system/flashtool.cpp b/src/system/flashtool.cpp index 063827603..13f4a4580 100644 --- a/src/system/flashtool.cpp +++ b/src/system/flashtool.cpp @@ -36,16 +36,6 @@ #include -#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,7) -//#include -#include -#else -#include -//#include -#endif - -//#include - #include @@ -78,58 +68,78 @@ void CFlashTool::setStatusViewer( CProgress_StatusViewer* statusview ) bool CFlashTool::readFromMTD( const std::string & filename, int globalProgressEnd ) { - int fd1, fd2; - long filesize; - int globalProgressBegin = 0; + int fd1; + long filesize; + int globalProgressBegin = 0; if(statusViewer) - { statusViewer->showLocalStatus(0); - } - if (mtdDevice.empty()) - { + if (mtdDevice.empty()) { ErrorMessage = "mtd-device not set"; return false; } - if( (fd1 = open( mtdDevice.c_str(), O_RDONLY )) < 0 ) - { + if( (fd = open( mtdDevice.c_str(), O_RDONLY )) < 0 ) { ErrorMessage = g_Locale->getText(LOCALE_FLASHUPDATE_CANTOPENMTD); return false; } + if (!getInfo()) { + close(fd); + return false; + } - if( (fd2 = open( filename.c_str(), O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH)) < 0 ) - { + if( (fd1 = open( filename.c_str(), O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH)) < 0 ) { ErrorMessage = g_Locale->getText(LOCALE_FLASHUPDATE_CANTOPENFILE); - close(fd1); + close(fd); return false; } if(statusViewer) - { globalProgressBegin = statusViewer->getGlobalStatus(); - } + filesize = CMTDInfo::getInstance()->getMTDSize(mtdDevice); - char buf[1024]; + unsigned char * buf = new unsigned char[meminfo.writesize]; + if (buf == NULL) { + printf("CFlashTool::program: mem alloc failed\n"); + close(fd); + close(fd1); + return false; + } + unsigned mtdoffset = 0; long fsize = filesize; - while(fsize>0) - { - long block = fsize; - if(block>(long)sizeof(buf)) - { - block = sizeof(buf); + while(fsize > 0) { + unsigned block = meminfo.writesize; + if (isnand) { + unsigned blockstart = mtdoffset & ~(meminfo.erasesize - 1); + if (blockstart == mtdoffset) { + while (mtdoffset < meminfo.size) { + printf("CFlashTool::readFromMTD: read block at %x\n", mtdoffset); + loff_t offset = mtdoffset; + int ret = ioctl(fd, MEMGETBADBLOCK, &offset); + if (ret == 0) + break; + printf("CFlashTool::readFromMTD: bad block at %x, skipping..\n", mtdoffset); + mtdoffset += meminfo.erasesize; + fsize -= meminfo.erasesize; + lseek(fd, mtdoffset, SEEK_SET); + continue; + } + if (mtdoffset >= meminfo.size) { + printf("CFlashTool::readFromMTD: end of device...\n"); + break; + } + } } - read( fd1, &buf, block); - write( fd2, &buf, block); + read(fd, buf, block); + write(fd1, buf, block); fsize -= block; + mtdoffset += meminfo.writesize; char prog = char(100-(100./filesize*fsize)); - if(statusViewer) - { + if(statusViewer) { statusViewer->showLocalStatus(prog); - if(globalProgressEnd!=-1) - { + if(globalProgressEnd!=-1) { int globalProg = globalProgressBegin + int((globalProgressEnd-globalProgressBegin) * prog/100. ); statusViewer->showGlobalStatus(globalProg); } @@ -137,34 +147,29 @@ bool CFlashTool::readFromMTD( const std::string & filename, int globalProgressEn } if(statusViewer) - { statusViewer->showLocalStatus(100); - } + delete[] buf; + close(fd); close(fd1); - close(fd2); return true; } bool CFlashTool::program( const std::string & filename, int globalProgressEndErase, int globalProgressEndFlash ) { - int fd1, fd2; - long filesize; - int globalProgressBegin = 0; + int fd1; + ssize_t filesize; + int globalProgressBegin = 0; if(statusViewer) - { statusViewer->showLocalStatus(0); - } - if (mtdDevice.empty()) - { + if (mtdDevice.empty()) { ErrorMessage = "mtd-device not set"; return false; } - if( (fd1 = open( filename.c_str(), O_RDONLY )) < 0 ) - { + if( (fd1 = open( filename.c_str(), O_RDONLY )) < 0 ) { ErrorMessage = g_Locale->getText(LOCALE_FLASHUPDATE_CANTOPENFILE); return false; } @@ -172,65 +177,89 @@ bool CFlashTool::program( const std::string & filename, int globalProgressEndEra filesize = lseek( fd1, 0, SEEK_END); lseek( fd1, 0, SEEK_SET); - if(filesize==0) - { + if(filesize==0) { ErrorMessage = g_Locale->getText(LOCALE_FLASHUPDATE_FILEIS0BYTES); close(fd1); return false; } - if(statusViewer) - { + if(statusViewer) { statusViewer->showLocalStatus(0); statusViewer->showStatusMessageUTF(g_Locale->getText(LOCALE_FLASHUPDATE_ERASING)); // UTF-8 } - //g_Zapit->shutdown(); sleep(2); - if(!erase(globalProgressEndErase)) - { + + if(!erase(globalProgressEndErase)) { close(fd1); return false; } - if(statusViewer) - { + if(statusViewer) { if(globalProgressEndErase!=-1) - { statusViewer->showGlobalStatus(globalProgressEndErase); - } + statusViewer->showLocalStatus(0); statusViewer->showStatusMessageUTF(g_Locale->getText(LOCALE_FLASHUPDATE_PROGRAMMINGFLASH)); // UTF-8 } - if( (fd2 = open( mtdDevice.c_str(), O_WRONLY )) < 0 ) - { + if( (fd = open( mtdDevice.c_str(), O_WRONLY )) < 0 ) { ErrorMessage = g_Locale->getText(LOCALE_FLASHUPDATE_CANTOPENMTD); close(fd1); return false; } if(statusViewer) - { globalProgressBegin = statusViewer->getGlobalStatus(); - } - char buf[1024]; - long fsize = filesize; - while(fsize>0) - { - long block = fsize; - if(block>(long)sizeof(buf)) - { - block = sizeof(buf); + unsigned char * buf = new unsigned char[meminfo.writesize]; + if (buf == NULL) { + printf("CFlashTool::program: mem alloc failed\n"); + close(fd); + close(fd1); + return false; + } + unsigned mtdoffset = 0; + unsigned fsize = filesize; + printf("CFlashTool::program: file %s write size %d, erase size %d\n", filename.c_str(), meminfo.writesize, meminfo.erasesize); + while(fsize > 0) { + unsigned block = meminfo.writesize; + if (block > fsize) + block = fsize; + + unsigned res = read(fd1, buf, block); + if (res != block) { + printf("CFlashTool::program: read from %s failed: %d from %d\n", filename.c_str(), res, block); } - read( fd1, &buf, block); - write( fd2, &buf, block); + if (isnand) { + if (block < (unsigned) meminfo.writesize) { + printf("CFlashTool::program: padding at %x\n", mtdoffset); + memset(buf + res, 0, meminfo.writesize - res); + } + unsigned blockstart = mtdoffset & ~(meminfo.erasesize - 1); + if (blockstart == mtdoffset) { + while (mtdoffset < meminfo.size) { + printf("CFlashTool::program: write block at %x\n", mtdoffset); + loff_t offset = mtdoffset; + int ret = ioctl(fd, MEMGETBADBLOCK, &offset); + if (ret == 0) + break; + printf("CFlashTool::program: bad block at %x, skipping..\n", mtdoffset); + mtdoffset += meminfo.erasesize; + lseek(fd, mtdoffset, SEEK_SET); + continue; + } + if (mtdoffset >= meminfo.size) { + printf("CFlashTool::program: not enough space to write, left: %d\n", fsize); + break; + } + } + } + write(fd, buf, meminfo.writesize); fsize -= block; - char prog = char(100-(100./filesize*fsize)); - if(statusViewer) - { + mtdoffset += meminfo.writesize; + if(statusViewer) { + char prog = char(100-(100./filesize*fsize)); statusViewer->showLocalStatus(prog); - if(globalProgressEndFlash!=-1) - { + if(globalProgressEndFlash!=-1) { int globalProg = globalProgressBegin + int((globalProgressEndFlash-globalProgressBegin) * prog/100. ); statusViewer->showGlobalStatus(globalProg); } @@ -238,53 +267,62 @@ bool CFlashTool::program( const std::string & filename, int globalProgressEndEra } if(statusViewer) - { statusViewer->showLocalStatus(100); - } + delete[] buf; close(fd1); - close(fd2); + close(fd); + // FIXME error message + if (fsize) + return false; + return true; +} + +bool CFlashTool::getInfo() +{ + if (ioctl( fd, MEMGETINFO, &meminfo ) != 0 ) { + // TODO: localize error message + ErrorMessage = "can't get mtd-info"; + return false; + } + if (meminfo.writesize < 1024) + meminfo.writesize = 1024; + + isnand = (meminfo.type == MTD_NANDFLASH); + printf("CFlashTool::getInfo: NAND: %s\n", isnand ? "yes" : "no"); return true; } bool CFlashTool::erase(int globalProgressEnd) { - int fd; - mtd_info_t meminfo; - erase_info_t lerase; - int globalProgressBegin = 0; + erase_info_t lerase; + int globalProgressBegin = 0; if( (fd = open( mtdDevice.c_str(), O_RDWR )) < 0 ) { + printf("CFlashTool::erase: cant open %s\n", mtdDevice.c_str()); ErrorMessage = g_Locale->getText(LOCALE_FLASHUPDATE_CANTOPENMTD); return false; } - if( ioctl( fd, MEMGETINFO, &meminfo ) != 0 ) - { - // TODO: localize error message - ErrorMessage = "can't get mtd-info"; + if (!getInfo()) { close(fd); return false; } if(statusViewer) - { globalProgressBegin = statusViewer->getGlobalStatus(); - } lerase.length = meminfo.erasesize; - for (lerase.start = 0; lerase.start < meminfo.size;lerase.start += meminfo.erasesize) + + for (lerase.start = 0; lerase.start < meminfo.size; lerase.start += meminfo.erasesize) { - printf( "Erasing %s erase size %x start %x size %x\n", + /* printf( "Erasing %s erase size %x start %x size %x\n", mtdDevice.c_str(), meminfo.erasesize, lerase.start, - meminfo.size ); - printf( "\rErasing %u Kbyte @ %x -- %2u %% complete.", - meminfo.erasesize/1024, lerase.start, - lerase.start*100/meminfo.size ); + meminfo.size ); */ + int prog = int(lerase.start*100./meminfo.size); if(statusViewer) { - int prog = int(lerase.start*100./meminfo.size); statusViewer->showLocalStatus(prog); if(globalProgressEnd!=-1) { @@ -292,6 +330,14 @@ bool CFlashTool::erase(int globalProgressEnd) statusViewer->showGlobalStatus(globalProg); } } + if (isnand) { + loff_t offset = lerase.start; + int ret = ioctl(fd, MEMGETBADBLOCK, &offset); + if (ret > 0) { + printf("Erasing: bad block at %x, skipping..\n", lerase.start); + continue; + } + } if(ioctl( fd, MEMERASE, &lerase) != 0) { @@ -299,6 +345,9 @@ bool CFlashTool::erase(int globalProgressEnd) close(fd); return false; } + printf( "Erasing %u Kbyte @ %x -- %2u %% complete.\n", + meminfo.erasesize/1024, lerase.start, + prog /* lerase.start*100/meminfo.size */); } close(fd); diff --git a/src/system/flashtool.h b/src/system/flashtool.h index ea27d198b..1e1fcd625 100644 --- a/src/system/flashtool.h +++ b/src/system/flashtool.h @@ -37,7 +37,7 @@ #include #include - +#include class CFlashTool { @@ -47,6 +47,11 @@ class CFlashTool std::string mtdDevice; std::string ErrorMessage; + int fd; + mtd_info_t meminfo; + bool isnand; + + bool getInfo(); bool erase(int globalProgressEnd=-1); public: diff --git a/src/system/helpers.cpp b/src/system/helpers.cpp index 0167c7123..7796bd34c 100644 --- a/src/system/helpers.cpp +++ b/src/system/helpers.cpp @@ -42,6 +42,18 @@ #include #include +off_t file_size(const char *filename) +{ + struct stat stat_buf; + if(::stat(filename, &stat_buf) == 0) + { + return stat_buf.st_size; + } else + { + return 0; + } +} + bool file_exists(const char *filename) { struct stat stat_buf; diff --git a/src/system/helpers.h b/src/system/helpers.h index c87adb71f..a811edab8 100644 --- a/src/system/helpers.h +++ b/src/system/helpers.h @@ -27,6 +27,7 @@ int my_system(int argc, const char *arg, ...); /* argc is number of arguments in FILE* my_popen( pid_t& pid, const char *cmdstring, const char *type); int safe_mkdir(char * path); +off_t file_size(const char *filename); bool file_exists(const char *filename); void wakeup_hdd(const char *hdd_dir); int check_dir(const char * dir); diff --git a/src/system/locals.h b/src/system/locals.h index 9a4ddd5a1..4f962f3de 100644 --- a/src/system/locals.h +++ b/src/system/locals.h @@ -256,6 +256,7 @@ typedef enum LOCALE_CHANNELLIST_NEW_ZAP_MODE_ALLOW, LOCALE_CHANNELLIST_NEW_ZAP_MODE_OFF, LOCALE_CHANNELLIST_NONEFOUND, + LOCALE_CHANNELLIST_NUMERIC_ADJUST, LOCALE_CHANNELLIST_PROVS, LOCALE_CHANNELLIST_RECORDING_NOT_POSSIBLE, LOCALE_CHANNELLIST_RESET_FLAGS, @@ -264,6 +265,7 @@ typedef enum LOCALE_CHANNELLIST_START, LOCALE_CI_CLOCK, LOCALE_CI_EMPTY, + LOCALE_CI_IGNORE_MSG, LOCALE_CI_INIT_FAILED, LOCALE_CI_INIT_OK, LOCALE_CI_INSERTED, @@ -389,6 +391,9 @@ typedef enum LOCALE_EXTRA_KEY_CURRENT_TRANSPONDER, LOCALE_EXTRA_KEY_LIST_END, LOCALE_EXTRA_KEY_LIST_START, + LOCALE_EXTRA_KEY_PIP_CLOSE, + LOCALE_EXTRA_KEY_PIP_SETUP, + LOCALE_EXTRA_KEY_PIP_SWAP, LOCALE_EXTRA_KEY_PLUGIN, LOCALE_EXTRA_KEY_SCREENSHOT, LOCALE_EXTRA_KEY_TIMESHIFT, @@ -878,6 +883,9 @@ typedef enum LOCALE_MENU_HINT_KEY_MPTIMESHIFT, LOCALE_MENU_HINT_KEY_PAGEDOWN, LOCALE_MENU_HINT_KEY_PAGEUP, + LOCALE_MENU_HINT_KEY_PIP_CLOSE, + LOCALE_MENU_HINT_KEY_PIP_SETUP, + LOCALE_MENU_HINT_KEY_PIP_SWAP, LOCALE_MENU_HINT_KEY_POWEROFF, LOCALE_MENU_HINT_KEY_QUICKZAP, LOCALE_MENU_HINT_KEY_REPEATBLOCK, @@ -952,6 +960,7 @@ typedef enum LOCALE_MENU_HINT_NET_USHARE, LOCALE_MENU_HINT_NETWORK, LOCALE_MENU_HINT_NEW_ZAP_MODE, + LOCALE_MENU_HINT_NUMERIC_ADJUST, LOCALE_MENU_HINT_OSD, LOCALE_MENU_HINT_OSD_LANGUAGE, LOCALE_MENU_HINT_OSD_PRESET, @@ -1012,12 +1021,14 @@ typedef enum LOCALE_MENU_HINT_SCAN_CABLE_SIMPLE, LOCALE_MENU_HINT_SCAN_COMMITED, LOCALE_MENU_HINT_SCAN_DISEQC, + LOCALE_MENU_HINT_SCAN_DISEQCORDER, LOCALE_MENU_HINT_SCAN_DISEQCREPEAT, LOCALE_MENU_HINT_SCAN_DISEQCTYPE, LOCALE_MENU_HINT_SCAN_FAST, LOCALE_MENU_HINT_SCAN_FASTPROV, LOCALE_MENU_HINT_SCAN_FASTTYPE, LOCALE_MENU_HINT_SCAN_FEC, + LOCALE_MENU_HINT_SCAN_FELINK, LOCALE_MENU_HINT_SCAN_FEMODE, LOCALE_MENU_HINT_SCAN_FESETUP, LOCALE_MENU_HINT_SCAN_FETIMEOUT, @@ -1114,11 +1125,15 @@ typedef enum LOCALE_MENU_HINT_VIDEO, LOCALE_MENU_HINT_VIDEO_43MODE, LOCALE_MENU_HINT_VIDEO_ANALOG_MODE, + LOCALE_MENU_HINT_VIDEO_BRIGHTNESS, LOCALE_MENU_HINT_VIDEO_CINCH_MODE, + LOCALE_MENU_HINT_VIDEO_CONTRAST, LOCALE_MENU_HINT_VIDEO_DBDR, LOCALE_MENU_HINT_VIDEO_FORMAT, LOCALE_MENU_HINT_VIDEO_MODE, LOCALE_MENU_HINT_VIDEO_MODES, + LOCALE_MENU_HINT_VIDEO_PIP, + LOCALE_MENU_HINT_VIDEO_SATURATION, LOCALE_MENU_HINT_VIDEO_SCART_MODE, LOCALE_MENU_HINT_VOLUME_DIGITS, LOCALE_MENU_HINT_VOLUME_POS, @@ -1266,7 +1281,10 @@ typedef enum LOCALE_MOVIEBROWSER_EDIT_SERIE, LOCALE_MOVIEBROWSER_ERROR_NO_MOVIES, LOCALE_MOVIEBROWSER_FOOT_FILTER, + LOCALE_MOVIEBROWSER_FOOT_FOCUS, + LOCALE_MOVIEBROWSER_FOOT_OPTIONS, LOCALE_MOVIEBROWSER_FOOT_PLAY, + LOCALE_MOVIEBROWSER_FOOT_REFRESH, LOCALE_MOVIEBROWSER_FOOT_SORT, LOCALE_MOVIEBROWSER_HEAD, LOCALE_MOVIEBROWSER_HEAD_FILTER, @@ -1602,6 +1620,7 @@ typedef enum LOCALE_SATSETUP_DISEQC_ADVANCED, LOCALE_SATSETUP_DISEQC_COM_UNCOM, LOCALE_SATSETUP_DISEQC_INPUT, + LOCALE_SATSETUP_DISEQC_ORDER, LOCALE_SATSETUP_DISEQC_UNCOM_COM, LOCALE_SATSETUP_DISEQCREPEAT, LOCALE_SATSETUP_EXTENDED, @@ -1616,10 +1635,11 @@ typedef enum LOCALE_SATSETUP_FASTSCAN_SD, LOCALE_SATSETUP_FASTSCAN_TYPE, LOCALE_SATSETUP_FE_MODE, - LOCALE_SATSETUP_FE_MODE_ALONE, - LOCALE_SATSETUP_FE_MODE_LOOP, - LOCALE_SATSETUP_FE_MODE_SINGLE, - LOCALE_SATSETUP_FE_MODE_TWIN, + LOCALE_SATSETUP_FE_MODE_INDEPENDENT, + LOCALE_SATSETUP_FE_MODE_LINK_LOOP, + LOCALE_SATSETUP_FE_MODE_LINK_TWIN, + LOCALE_SATSETUP_FE_MODE_MASTER, + LOCALE_SATSETUP_FE_MODE_UNUSED, LOCALE_SATSETUP_FE_SETUP, LOCALE_SATSETUP_FE_TYPE, LOCALE_SATSETUP_FE_TYPE_CONFIRM, @@ -1854,13 +1874,19 @@ typedef enum LOCALE_USERMENU_NAME, LOCALE_VIDEO_MODE_OK, LOCALE_VIDEOMENU_43MODE, + LOCALE_VIDEOMENU_ANALOG_AUTO, + LOCALE_VIDEOMENU_ANALOG_CVBS, + LOCALE_VIDEOMENU_ANALOG_HD_RGB, LOCALE_VIDEOMENU_ANALOG_HD_RGB_CINCH, LOCALE_VIDEOMENU_ANALOG_HD_RGB_SCART, + LOCALE_VIDEOMENU_ANALOG_HD_YPRPB, LOCALE_VIDEOMENU_ANALOG_HD_YPRPB_CINCH, LOCALE_VIDEOMENU_ANALOG_HD_YPRPB_SCART, LOCALE_VIDEOMENU_ANALOG_MODE, + LOCALE_VIDEOMENU_ANALOG_SD_RGB, LOCALE_VIDEOMENU_ANALOG_SD_RGB_CINCH, LOCALE_VIDEOMENU_ANALOG_SD_RGB_SCART, + LOCALE_VIDEOMENU_ANALOG_SD_YPRPB, LOCALE_VIDEOMENU_ANALOG_SD_YPRPB_CINCH, LOCALE_VIDEOMENU_ANALOG_SD_YPRPB_SCART, LOCALE_VIDEOMENU_AUTO, @@ -1884,6 +1910,8 @@ typedef enum LOCALE_VIDEOMENU_LETTERBOX, LOCALE_VIDEOMENU_PANSCAN, LOCALE_VIDEOMENU_PANSCAN2, + LOCALE_VIDEOMENU_PIP, + LOCALE_VIDEOMENU_PIP_ERROR, LOCALE_VIDEOMENU_SATURATION, LOCALE_VIDEOMENU_SCART, LOCALE_VIDEOMENU_SCREENSETUP, diff --git a/src/system/locals_intern.h b/src/system/locals_intern.h index 4d15e3c97..de45cbb75 100644 --- a/src/system/locals_intern.h +++ b/src/system/locals_intern.h @@ -256,6 +256,7 @@ const char * locale_real_names[] = "channellist.new_zap_mode_allow", "channellist.new_zap_mode_off", "channellist.nonefound", + "channellist.numeric_adjust", "channellist.provs", "channellist.recording_not_possible", "channellist.reset_flags", @@ -264,6 +265,7 @@ const char * locale_real_names[] = "channellist.start", "ci.clock", "ci.empty", + "ci.ignore_msg", "ci.init_failed", "ci.init_ok", "ci.inserted", @@ -389,6 +391,9 @@ const char * locale_real_names[] = "extra.key_current_transponder", "extra.key_list_end", "extra.key_list_start", + "extra.key_pip_close", + "extra.key_pip_setup", + "extra.key_pip_swap", "extra.key_plugin", "extra.key_screenshot", "extra.key_timeshift", @@ -878,6 +883,9 @@ const char * locale_real_names[] = "menu.hint_key_mptimeshift", "menu.hint_key_pagedown", "menu.hint_key_pageup", + "menu.hint_key_pip_close", + "menu.hint_key_pip_setup", + "menu.hint_key_pip_swap", "menu.hint_key_poweroff", "menu.hint_key_quickzap", "menu.hint_key_repeatblock", @@ -952,6 +960,7 @@ const char * locale_real_names[] = "menu.hint_net_ushare", "menu.hint_network", "menu.hint_new_zap_mode", + "menu.hint_numeric_adjust", "menu.hint_osd", "menu.hint_osd_language", "menu.hint_osd_preset", @@ -1012,12 +1021,14 @@ const char * locale_real_names[] = "menu.hint_scan_cable_simple", "menu.hint_scan_commited", "menu.hint_scan_diseqc", + "menu.hint_scan_diseqcorder", "menu.hint_scan_diseqcrepeat", "menu.hint_scan_diseqctype", "menu.hint_scan_fast", "menu.hint_scan_fastprov", "menu.hint_scan_fasttype", "menu.hint_scan_fec", + "menu.hint_scan_felink", "menu.hint_scan_femode", "menu.hint_scan_fesetup", "menu.hint_scan_fetimeout", @@ -1114,11 +1125,15 @@ const char * locale_real_names[] = "menu.hint_video", "menu.hint_video_43mode", "menu.hint_video_analog_mode", + "menu.hint_video_brightness", "menu.hint_video_cinch_mode", + "menu.hint_video_contrast", "menu.hint_video_dbdr", "menu.hint_video_format", "menu.hint_video_mode", "menu.hint_video_modes", + "menu.hint_video_pip", + "menu.hint_video_saturation", "menu.hint_video_scart_mode", "menu.hint_volume_digits", "menu.hint_volume_pos", @@ -1266,7 +1281,10 @@ const char * locale_real_names[] = "moviebrowser.edit_serie", "moviebrowser.error_no_movies", "moviebrowser.foot_filter", + "moviebrowser.foot_focus", + "moviebrowser.foot_options", "moviebrowser.foot_play", + "moviebrowser.foot_refresh", "moviebrowser.foot_sort", "moviebrowser.head", "moviebrowser.head_filter", @@ -1602,6 +1620,7 @@ const char * locale_real_names[] = "satsetup.diseqc_advanced", "satsetup.diseqc_com_uncom", "satsetup.diseqc_input", + "satsetup.diseqc_order", "satsetup.diseqc_uncom_com", "satsetup.diseqcrepeat", "satsetup.extended", @@ -1616,10 +1635,11 @@ const char * locale_real_names[] = "satsetup.fastscan_sd", "satsetup.fastscan_type", "satsetup.fe_mode", - "satsetup.fe_mode_alone", - "satsetup.fe_mode_loop", - "satsetup.fe_mode_single", - "satsetup.fe_mode_twin", + "satsetup.fe_mode_independent", + "satsetup.fe_mode_link_loop", + "satsetup.fe_mode_link_twin", + "satsetup.fe_mode_master", + "satsetup.fe_mode_unused", "satsetup.fe_setup", "satsetup.fe_type", "satsetup.fe_type_confirm", @@ -1854,13 +1874,19 @@ const char * locale_real_names[] = "usermenu.name", "video_mode_ok", "videomenu.43mode", + "videomenu.analog_auto", + "videomenu.analog_cvbs", + "videomenu.analog_hd_rgb", "videomenu.analog_hd_rgb_cinch", "videomenu.analog_hd_rgb_scart", + "videomenu.analog_hd_yprpb", "videomenu.analog_hd_yprpb_cinch", "videomenu.analog_hd_yprpb_scart", "videomenu.analog_mode", + "videomenu.analog_sd_rgb", "videomenu.analog_sd_rgb_cinch", "videomenu.analog_sd_rgb_scart", + "videomenu.analog_sd_yprpb", "videomenu.analog_sd_yprpb_cinch", "videomenu.analog_sd_yprpb_scart", "videomenu.auto", @@ -1884,6 +1910,8 @@ const char * locale_real_names[] = "videomenu.letterbox", "videomenu.panscan", "videomenu.panscan2", + "videomenu.pip", + "videomenu.pip_error", "videomenu.saturation", "videomenu.scart", "videomenu.screensetup", diff --git a/src/system/setting_helpers.cpp b/src/system/setting_helpers.cpp index 38efa967b..8c0a033a7 100644 --- a/src/system/setting_helpers.cpp +++ b/src/system/setting_helpers.cpp @@ -184,12 +184,6 @@ void CColorSetupNotifier::setPalette() bool CColorSetupNotifier::changeNotify(const neutrino_locale_t, void *) { setPalette(); -#if 0 - /* recalculate volumebar */ - CVolume::getInstance()->Init(); - /* recalculate infoclock */ - CInfoClock::getInstance()->Init(); -#endif return false; } @@ -249,8 +243,6 @@ bool CFontSizeNotifier::changeNotify(const neutrino_locale_t, void *) CNeutrinoApp::getInstance()->SetupFonts(); hintBox.hide(); - /* recalculate volumebar */ - CVolume::getInstance()->Init(); /* recalculate infoclock */ CInfoClock::getInstance()->Init(); return true; @@ -448,8 +440,11 @@ bool CTZChangeNotifier::changeNotify(const neutrino_locale_t, void * Data) perror("unlink failed"); if (symlink(cmd.c_str(), "/etc/localtime")) perror("symlink failed"); +#if 0 cmd = ":" + zone; setenv("TZ", cmd.c_str(), 1); +#endif + tzset(); } return false; @@ -511,10 +506,9 @@ int CDataResetNotifier::exec(CMenuTarget* /*parent*/, const std::string& actionK #if HAVE_COOL_HARDWARE void CFanControlNotifier::setSpeed(unsigned int speed) { - int cfd; - printf("FAN Speed %d\n", speed); - cfd = open("/dev/cs_control", O_RDONLY); +#ifndef BOXMODEL_APOLLO + int cfd = open("/dev/cs_control", O_RDONLY); if(cfd < 0) { perror("Cannot open /dev/cs_control"); return; @@ -523,6 +517,7 @@ void CFanControlNotifier::setSpeed(unsigned int speed) perror("IOC_CONTROL_PWM_SPEED"); close(cfd); +#endif } bool CFanControlNotifier::changeNotify(const neutrino_locale_t, void * data) diff --git a/src/system/settings.cpp b/src/system/settings.cpp index d9d45c3e9..1f75181e6 100644 --- a/src/system/settings.cpp +++ b/src/system/settings.cpp @@ -109,7 +109,8 @@ CScanSettings::CScanSettings(void) delivery_system = DVB_S; bouquetMode = CZapitClient::BM_UPDATEBOUQUETS; scanType = CServiceScan::SCAN_TVRADIO; - strcpy(satNameNoDiseqc, "none"); + strcpy(satName, "none"); + strcpy(cableName, "none"); } bool CScanSettings::loadSettings(const char * const fileName, const delivery_system_t dsys) @@ -126,7 +127,6 @@ bool CScanSettings::loadSettings(const char * const fileName, const delivery_sys bouquetMode = (CZapitClient::bouquetMode) configfile.getInt32("bouquetMode" , bouquetMode); scanType = (CZapitClient::scanType) configfile.getInt32("scanType", scanType); - strcpy(satNameNoDiseqc, configfile.getString("satNameNoDiseqc", satNameNoDiseqc).c_str()); scan_fta_flag = configfile.getInt32("scan_fta_flag", 0); scan_nit = configfile.getInt32("scan_nit", 1); @@ -135,19 +135,20 @@ bool CScanSettings::loadSettings(const char * const fileName, const delivery_sys scan_reset_numbers = configfile.getInt32("scan_reset_numbers", 0); scan_logical_numbers = configfile.getInt32("scan_logical_numbers", 0); scan_logical_hd = configfile.getInt32("scan_logical_hd", 1); - TP_fec = configfile.getInt32("TP_fec", 1); - TP_pol = configfile.getInt32("TP_pol", 0); - TP_mod = configfile.getInt32("TP_mod", 3); - if(delivery_system == DVB_S) { - strcpy(TP_freq, configfile.getString("TP_freq", "10100000").c_str()); - strcpy(TP_rate, configfile.getString("TP_rate", "27500000").c_str()); - } else { - strcpy(TP_freq, configfile.getString("TP_freq", "369000").c_str()); - strcpy(TP_rate, configfile.getString("TP_rate", "6875000").c_str()); - } + strcpy(satName, configfile.getString("satName", satName).c_str()); + sat_TP_fec = configfile.getInt32("sat_TP_fec", 1); + sat_TP_pol = configfile.getInt32("sat_TP_pol", 0); + strcpy(sat_TP_freq, configfile.getString("sat_TP_freq", "10100000").c_str()); + strcpy(sat_TP_rate, configfile.getString("sat_TP_rate", "27500000").c_str()); + + strcpy(cableName, configfile.getString("cableName", cableName).c_str()); + cable_TP_mod = configfile.getInt32("cable_TP_mod", 3); + cable_TP_fec = configfile.getInt32("cable_TP_fec", 1); + strcpy(cable_TP_freq, configfile.getString("cable_TP_freq", "369000").c_str()); + strcpy(cable_TP_rate, configfile.getString("cable_TP_rate", "6875000").c_str()); #if 1 - if(TP_fec == 4) TP_fec = 5; + if(sat_TP_fec == 4) sat_TP_fec = 5; #endif fast_type = configfile.getInt32("fast_type", 1); fast_op = configfile.getInt32("fast_op", 0); @@ -161,7 +162,6 @@ bool CScanSettings::saveSettings(const char * const fileName) configfile.setInt32("delivery_system", delivery_system); configfile.setInt32("bouquetMode", bouquetMode); configfile.setInt32("scanType", scanType); - configfile.setString("satNameNoDiseqc", satNameNoDiseqc); configfile.setInt32("scan_fta_flag", scan_fta_flag); configfile.setInt32("scan_nit", scan_nit); @@ -170,15 +170,22 @@ bool CScanSettings::saveSettings(const char * const fileName) configfile.setInt32("scan_reset_numbers", scan_reset_numbers); configfile.setInt32("scan_logical_numbers", scan_logical_numbers); configfile.setInt32("scan_logical_hd", scan_logical_hd); - configfile.setInt32("TP_fec", TP_fec); - configfile.setInt32("TP_pol", TP_pol); - configfile.setInt32("TP_mod", TP_mod); - configfile.setString("TP_freq", TP_freq); - configfile.setString("TP_rate", TP_rate); configfile.setInt32("fast_type", fast_type); configfile.setInt32("fast_op", fast_op); configfile.setInt32("cable_nid", cable_nid); + configfile.setString("satName", satName); + configfile.setInt32("sat_TP_fec", sat_TP_fec); + configfile.setInt32("sat_TP_pol", sat_TP_pol); + configfile.setString("sat_TP_freq", sat_TP_freq); + configfile.setString("sat_TP_rate", sat_TP_rate); + + configfile.setString("cableName", cableName); + configfile.setInt32("cable_TP_fec", cable_TP_fec); + configfile.setInt32("cable_TP_mod", cable_TP_mod); + configfile.setString("cable_TP_freq", cable_TP_freq); + configfile.setString("cable_TP_rate", cable_TP_rate); + if(configfile.getModifiedFlag()) configfile.saveConfig(fileName); diff --git a/src/system/settings.h b/src/system/settings.h index c8aace42d..867d54cdc 100644 --- a/src/system/settings.h +++ b/src/system/settings.h @@ -44,7 +44,11 @@ #include +#ifdef BOXMODEL_APOLLO +#define VIDEOMENU_VIDEOMODE_OPTION_COUNT 14 +#else #define VIDEOMENU_VIDEOMODE_OPTION_COUNT 13 +#endif struct SNeutrinoSettings { @@ -54,6 +58,11 @@ struct SNeutrinoSettings int analog_mode1; int analog_mode2; int video_43mode; +#ifdef BOXMODEL_APOLLO + int brightness; + int contrast; + int saturation; +#endif char current_volume; int current_volume_step; int channel_mode; @@ -117,6 +126,7 @@ struct SNeutrinoSettings int rounded_corners; int ci_standby_reset; int ci_clock; + int ci_ignore_messages; int radiotext_enable; //vcr @@ -403,6 +413,9 @@ struct SNeutrinoSettings std::string screenshot_dir; int key_current_transponder; + int key_pip_close; + int key_pip_setup; + int key_pip_swap; int cacheTXT; int minimode; @@ -431,6 +444,7 @@ struct SNeutrinoSettings int channellist_foot; int channellist_new_zap_mode; int channellist_sort_mode; + int channellist_numeric_adjust; char repeat_blocker[4]; char repeat_genericblocker[4]; int remote_control_hardware; @@ -692,34 +706,40 @@ const int PARENTALLOCK_PROMPT_ONSIGNAL = 3; class CScanSettings { -public: - CConfigFile configfile; - int bouquetMode; - int scanType; + public: + CConfigFile configfile; + int bouquetMode; + int scanType; - char satNameNoDiseqc[50]; - delivery_system_t delivery_system; - int scan_nit; - int scan_nit_manual; - int scan_bat; - int scan_fta_flag; - int scan_reset_numbers; - int scan_logical_numbers; - int scan_logical_hd; - int TP_fec; - int TP_pol; - int TP_mod; - char TP_freq[10]; - char TP_rate[9]; - int fast_type; - int fast_op; - int cable_nid; + delivery_system_t delivery_system; + int scan_nit; + int scan_nit_manual; + int scan_bat; + int scan_fta_flag; + int scan_reset_numbers; + int scan_logical_numbers; + int scan_logical_hd; + int fast_type; + int fast_op; + int cable_nid; - CScanSettings(); + char satName[50]; + int sat_TP_fec; + int sat_TP_pol; + char sat_TP_freq[10]; + char sat_TP_rate[9]; - //void useDefaults(const delivery_system_t _delivery_system); - bool loadSettings(const char * const fileName, const delivery_system_t _delivery_system); - bool saveSettings(const char * const fileName); + char cableName[50]; + int cable_TP_mod; + int cable_TP_fec; + char cable_TP_freq[10]; + char cable_TP_rate[9]; + + CScanSettings(); + + //void useDefaults(const delivery_system_t _delivery_system); + bool loadSettings(const char * const fileName, const delivery_system_t _delivery_system); + bool saveSettings(const char * const fileName); }; diff --git a/src/timerd/timermanager.cpp b/src/timerd/timermanager.cpp index 583ec2211..3b11dfdec 100644 --- a/src/timerd/timermanager.cpp +++ b/src/timerd/timermanager.cpp @@ -61,6 +61,7 @@ void CTimerManager::Init(void) eventServer = new CEventServer; m_saveEvents = false; m_isTimeSet = false; + timer_is_rec = false; wakeup = 0; loadRecordingSafety(); @@ -706,6 +707,8 @@ bool CTimerManager::shutdown() dprintf("shutdown: nextAnnounceTime %ld\n", nextAnnounceTime); if ( event->eventType == CTimerd::TIMER_RECORD ) timer_is_rec = true; + else + timer_is_rec = false; } } } @@ -1103,7 +1106,7 @@ CTimerEvent_Record::CTimerEvent_Record(time_t announce_Time, time_t alarm_Time, event_id_t epgID, time_t epg_starttime, unsigned char apids, CTimerd::CTimerEventRepeat evrepeat, - uint32_t repeatcount, const std::string recDir) : + uint32_t repeatcount, const std::string &recDir) : CTimerEvent(getEventType(), announce_Time, alarm_Time, stop_Time, evrepeat, repeatcount) { eventInfo.epgID = epgID; diff --git a/src/timerd/timermanager.h b/src/timerd/timermanager.h index db2224311..76b4b2749 100644 --- a/src/timerd/timermanager.h +++ b/src/timerd/timermanager.h @@ -123,7 +123,7 @@ class CTimerEvent_Record : public CTimerEvent time_t epg_starttime = 0, unsigned char apids = TIMERD_APIDS_STD, CTimerd::CTimerEventRepeat evrepeat = CTimerd::TIMERREPEAT_ONCE, - uint32_t repeatcount = 1, const std::string recDir = ""); + uint32_t repeatcount = 1, const std::string &recDir = ""); CTimerEvent_Record(CConfigFile *config, int iId); virtual ~CTimerEvent_Record(){}; virtual CTimerd::CTimerEventTypes getEventType(void) const { return CTimerd::TIMER_RECORD; }; diff --git a/src/zapit/Makefile.am b/src/zapit/Makefile.am index 9f195e0e4..2ec97d007 100644 --- a/src/zapit/Makefile.am +++ b/src/zapit/Makefile.am @@ -1,3 +1,4 @@ AUTOMAKE_OPTIONS = gnu -SUBDIRS = lib src +SUBDIRS = lib src data + diff --git a/src/zapit/data/Makefile.am b/src/zapit/data/Makefile.am new file mode 100644 index 000000000..56710b294 --- /dev/null +++ b/src/zapit/data/Makefile.am @@ -0,0 +1,4 @@ +configdir = $(CONFIGDIR)/zapit +config_DATA = frontend.conf + + diff --git a/src/zapit/data/frontend.conf b/src/zapit/data/frontend.conf new file mode 100644 index 000000000..e69de29bb diff --git a/src/zapit/include/zapit/bouquets.h b/src/zapit/include/zapit/bouquets.h index 5b8e7f971..c9eeb272e 100644 --- a/src/zapit/include/zapit/bouquets.h +++ b/src/zapit/include/zapit/bouquets.h @@ -57,6 +57,8 @@ class CZapitBouquet CZapitChannel* getChannelByChannelID(const t_channel_id channel_id, const unsigned char serviceType = ST_RESERVED); void sortBouquet(void); void sortBouquetByNumber(void); + bool getTvChannels(ZapitChannelList &list, int flags = CZapitChannel::PRESENT); + bool getRadioChannels(ZapitChannelList &list, int flags = CZapitChannel::PRESENT); }; typedef vector BouquetList; @@ -115,7 +117,7 @@ class CBouquetManager void moveBouquet(const unsigned int oldId, const unsigned int newId); bool existsChannelInBouquet(unsigned int bq_id, const t_channel_id channel_id); - void clearAll(); + void clearAll(bool user = true); void sortBouquets(void); }; diff --git a/src/zapit/include/zapit/capmt.h b/src/zapit/include/zapit/capmt.h index 674429940..b16180262 100644 --- a/src/zapit/include/zapit/capmt.h +++ b/src/zapit/include/zapit/capmt.h @@ -28,6 +28,7 @@ #include #include #include +#include #define DEMUX_DECODE_0 1 #define DEMUX_DECODE_1 2 @@ -40,6 +41,7 @@ #define LIVE_DEMUX 0 #define STREAM_DEMUX 1 #define RECORD_DEMUX 2 +#define PIP_DEMUX 3 class CCam : public CBasicClient @@ -47,7 +49,7 @@ class CCam : public CBasicClient private: virtual unsigned char getVersion(void) const; virtual const char *getSocketName(void) const; - int camask, demuxes[3]; + int camask, demuxes[MAX_DMX_UNITS]; int source_demux; uint8_t cabuf[2048]; int calen; @@ -84,7 +86,8 @@ class CCamManager enum runmode { PLAY, RECORD, - STREAM + STREAM, + PIP }; private: cammap_t channel_map; diff --git a/src/zapit/include/zapit/channel.h b/src/zapit/include/zapit/channel.h index 41de92036..d8f1225bf 100644 --- a/src/zapit/include/zapit/channel.h +++ b/src/zapit/include/zapit/channel.h @@ -160,6 +160,7 @@ class CZapitChannel std::string ttx_language_code; uint8_t record_demux; + uint8_t pip_demux; void Init(); friend class CChannelList; @@ -168,7 +169,10 @@ class CZapitChannel typedef enum channel_flags { NEW = 0x01, REMOVED = 0x02, - UPDATED = 0x04 + UPDATED = 0x04, + NOT_FOUND = 0x08, + PRESENT = 0x05, // NEW + UPDATED + ANY = 0xFF } channel_flags_t; casys_map_t camap; @@ -183,6 +187,7 @@ class CZapitChannel bool has_bouquet; uint8_t polarization; int flags; + int deltype; /* constructor, desctructor */ CZapitChannel(const std::string & p_name, t_service_id p_sid, t_transport_stream_id p_tsid, t_original_network_id p_onid, unsigned char p_service_type, t_satellite_position p_satellite_position, freq_id_t freq); @@ -252,7 +257,9 @@ class CZapitChannel void dumpServiceXml(FILE * fd, const char * action = NULL); void dumpBouquetXml(FILE * fd); void setRecordDemux(int num) { record_demux = num; }; + void setPipDemux(int num) { pip_demux = num; }; int getRecordDemux() { return record_demux; }; + int getPipDemux() { return pip_demux; }; static t_channel_id makeChannelId(t_satellite_position sat, freq_id_t freq, t_transport_stream_id tsid, t_original_network_id onid, t_service_id sid) { diff --git a/src/zapit/include/zapit/client/msgtypes.h b/src/zapit/include/zapit/client/msgtypes.h index 691457316..1da5b0eb9 100644 --- a/src/zapit/include/zapit/client/msgtypes.h +++ b/src/zapit/include/zapit/client/msgtypes.h @@ -148,7 +148,8 @@ class CZapitMessages CMD_GET_ASPECTRATIO = 107, CMD_SET_ASPECTRATIO = 108, CMD_GET_MODE43 = 109, - CMD_SET_MODE43 = 110 + CMD_SET_MODE43 = 110, + CMD_STOP_PIP = 111 }; @@ -188,6 +189,7 @@ class CZapitMessages { t_channel_id channel_id; bool record; + bool pip; }; struct commandSetAudioChannel diff --git a/src/zapit/include/zapit/client/zapitclient.h b/src/zapit/include/zapit/client/zapitclient.h index 726441d6f..479a1cc69 100644 --- a/src/zapit/include/zapit/client/zapitclient.h +++ b/src/zapit/include/zapit/client/zapitclient.h @@ -273,6 +273,7 @@ class CZapitClient:public CBasicClient /* zaps to channel, returns the "zap-status" */ unsigned int zapTo_serviceID(const t_channel_id channel_id); unsigned int zapTo_record(const t_channel_id channel_id); + unsigned int zapTo_pip(const t_channel_id channel_id); /* zaps to subservice, returns the "zap-status" */ unsigned int zapTo_subServiceID(const t_channel_id channel_id); @@ -486,6 +487,7 @@ class CZapitClient:public CBasicClient void setStandby(const bool enable); void startPlayBack(const bool sendpmt = false); void stopPlayBack(const bool sendpmt = false); + void stopPip(); void lockPlayBack(const bool sendpmt = true); void unlockPlayBack(const bool sendpmt = true); bool tune_TP(TP_params TP); diff --git a/src/zapit/include/zapit/femanager.h b/src/zapit/include/zapit/femanager.h index 2d0dfcee1..b28884000 100644 --- a/src/zapit/include/zapit/femanager.h +++ b/src/zapit/include/zapit/femanager.h @@ -33,7 +33,8 @@ #define MAX_FE 4 #define MAX_ADAPTERS 1 -#define MAKE_FE_KEY(adapter, number) ((adapter << 8) | (number & 0xFF)) +//#define DYNAMIC_DEMUX +//#define MAKE_FE_KEY(adapter, number) ((adapter << 8) | (number & 0xFF)) #define FECONFIGFILE CONFIGDIR "/zapit/frontend.conf" @@ -52,6 +53,20 @@ typedef struct common_fe_config { int feTimeout; } common_fe_config_t; +class CFeDmx +{ + private: + int num; + transponder_id_t tpid; + int usecount; + + friend class CFEManager; + public: + CFeDmx(int i); + void Lock(transponder_id_t id); + void Unlock(); +}; + class CFEManager { public: @@ -64,26 +79,29 @@ class CFEManager private: fe_map_t femap; fe_mode_t mode; - int fe_type; /* fe_type_t, but -1 for "take what's there" */ - fe_type_list_t other_fe; + int enabled_count; CConfigFile configfile; common_fe_config_t config; bool config_exist; - /* loop cache */ - bool high_band; - uint8_t polarization; + bool have_sat; + bool have_cable; bool have_locked; OpenThreads::Mutex mutex; + std::vector dmap; + CFrontend * livefe; - CFrontend * findFrontend(CZapitChannel * channel); uint32_t getConfigValue(CFrontend * fe, const char * name, uint32_t defval); void setConfigValue(CFrontend * fe, const char * name, uint32_t val); void setSatelliteConfig(CFrontend * fe, sat_config_t &satconfig); bool getSatelliteConfig(CFrontend * fe, sat_config_t &satconfig); + bool loopCanTune(CFrontend * fe, CZapitChannel * channel); + CFrontend * getFrontend(CZapitChannel * channel); + void copySettings(CFrontend * from, CFrontend * to); + static CFEManager * manager; CFEManager(); public: @@ -98,16 +116,13 @@ class CFEManager CFrontend * getLiveFE() { return livefe; }; void setLiveFE(CFrontend * fe); - transponder * getChannelTransponder(CZapitChannel * channel); - CFrontend * allocateFE(CZapitChannel * channel); - bool loopCanTune(CFrontend * fe, CZapitChannel * channel); - CFrontend * getLoopFE(CZapitChannel * channel); - CFrontend * getIndependentFE(CZapitChannel * channel); + CFrontend * allocateFE(CZapitChannel * channel, bool forrecord = false); fe_mode_t getMode() { return mode; }; void setMode(fe_mode_t newmode, bool initial = false); int getFrontendCount() { return femap.size(); }; + int getEnabledCount(); CFrontend * getScanFrontend(t_satellite_position satellitePosition); bool canTune(CZapitChannel * channel); @@ -116,10 +131,18 @@ class CFEManager bool loadSettings(); void saveSettings(bool write = true); - bool lockFrontend(CFrontend * fe); - bool unlockFrontend(CFrontend * fe); + bool lockFrontend(CFrontend * fe, CZapitChannel * channel = NULL); + bool unlockFrontend(CFrontend * fe, bool unlock_demux = false); bool haveFreeFrontend(); - fe_type_list_t getOtherFE() { return other_fe; }; - void setFrontendType(fe_type_t f) { fe_type = (int)f; }; + void linkFrontends(bool init = true); + void copySettings(CFrontend * fe); + int getDemux(transponder_id_t id); + bool lockDemux(int i, transponder_id_t id); + void unlockDemux(int i); + bool haveFreeDemux(); + bool haveSat() { return have_sat; } + bool haveCable() { return have_cable; } + bool satOnly() { return (have_sat && !have_cable); } + bool cableOnly() { return (have_cable && !have_sat); } }; #endif /* __femanager_h__ */ diff --git a/src/zapit/include/zapit/frontend_c.h b/src/zapit/include/zapit/frontend_c.h index 55fdf32b1..79c00233c 100644 --- a/src/zapit/include/zapit/frontend_c.h +++ b/src/zapit/include/zapit/frontend_c.h @@ -27,6 +27,7 @@ #include #include + #include #include #include @@ -56,6 +57,8 @@ #define FEC_S2_8PSK_9_10 (fe_code_rate_t)(FEC_S2_8PSK_BASE+8) //27 #define FEC_S2_AUTO (fe_code_rate_t)(FEC_S2_8PSK_BASE+9) //28 +#define MAKE_FE_KEY(adapter, number) ((adapter << 8) | (number & 0xFF)) + static inline fe_modulation_t dvbs_get_modulation(fe_code_rate_t fec) { if((fec < FEC_S2_QPSK_1_2) || (fec < FEC_S2_8PSK_1_2)) @@ -82,8 +85,20 @@ static inline fe_rolloff_t dvbs_get_rolloff(fe_delivery_system_t delsys) class CFEManager; +class CFrontend; +typedef std::vector fe_linkmap_t; + class CFrontend { + public: + typedef enum { + FE_MODE_UNUSED, + FE_MODE_INDEPENDENT, + FE_MODE_MASTER, + FE_MODE_LINK_LOOP, + FE_MODE_LINK_TWIN + } fe_work_mode_t; + private: /* frontend filedescriptor */ int fd; @@ -122,6 +137,9 @@ class CFrontend /* current Transponderdata */ TP_params currentTransponder; bool slave; + fe_work_mode_t femode; + int masterkey; + fe_linkmap_t linkmap; int fenumber; int feindex; /* the index (starts with 0) of this FE, not always the same as fenumber */ bool standby; @@ -131,12 +149,12 @@ class CFrontend void secSetTone(const fe_sec_tone_mode_t mode, const uint32_t ms); void secSetVoltage(const fe_sec_voltage_t voltage, const uint32_t ms); void sendDiseqcCommand(const struct dvb_diseqc_master_cmd *cmd, const uint32_t ms); - void sendDiseqcPowerOn(void); - void sendDiseqcReset(void); + void sendDiseqcStandby(uint32_t ms = 100); + void sendDiseqcPowerOn(uint32_t ms = 100); + void sendDiseqcReset(uint32_t ms = 40); void sendDiseqcSmatvRemoteTuningCommand(const uint32_t frequency); uint32_t sendEN50494TuningCommand(const uint32_t frequency, const int high_band, const int horizontal, const int bank); - void sendDiseqcStandby(void); - void sendDiseqcZeroByteCommand(const uint8_t frm, const uint8_t addr, const uint8_t cmd); + void sendDiseqcZeroByteCommand(const uint8_t frm, const uint8_t addr, const uint8_t cmd, uint32_t ms = 15); void sendToneBurst(const fe_sec_mini_cmd_t burst, const uint32_t ms); int setFrontend(const FrontendParameters *feparams, bool nowait = false); void setSec(const uint8_t sat_no, const uint8_t pol, const bool high_band); @@ -178,13 +196,13 @@ class CFrontend void setDiseqcType(const diseqc_t type, bool force = false); void setTimeout(int timeout) { feTimeout = timeout; }; void configUsals(double Latitude, double Longitude, int LaDirection, int LoDirection, bool _repeatUsals) - { - gotoXXLatitude = Latitude; - gotoXXLongitude = Longitude; - gotoXXLaDirection = LaDirection; - gotoXXLoDirection = LoDirection; - repeatUsals = _repeatUsals; - }; + { + gotoXXLatitude = Latitude; + gotoXXLongitude = Longitude; + gotoXXLaDirection = LaDirection; + gotoXXLoDirection = LoDirection; + repeatUsals = _repeatUsals; + }; void configRotor(int _motorRotationSpeed, bool _highVoltage) { config.motorRotationSpeed = _motorRotationSpeed; config.highVoltage = _highVoltage; }; @@ -206,10 +224,10 @@ class CFrontend fe_code_rate_t getCFEC (); transponder_id_t getTsidOnid() { return currentTransponder.TP_id; } bool sameTsidOnid(transponder_id_t tpid) - { - return (currentTransponder.TP_id == 0) - || (tpid == currentTransponder.TP_id); - } + { + return (currentTransponder.TP_id == 0) + || (tpid == currentTransponder.TP_id); + } void setTsidOnid(transponder_id_t newid) { currentTransponder.TP_id = newid; } uint32_t getRate (); @@ -233,5 +251,19 @@ class CFrontend int getNumber(bool real = false) { return real?fenumber:feindex; } void setIndex(int i) { feindex = i; }; static void getDelSys(uint8_t type, int f, int m, char * &fec, char * &sys, char * &mod); + fe_work_mode_t getMode() { return femode; } + void setMode(int mode) {femode = (fe_work_mode_t) mode; } + int getMaster() { return masterkey; } + void setMaster(int key) { masterkey = key; } + bool hasLinks() { return (femode == FE_MODE_MASTER) && (linkmap.size() > 1); } + static bool linked(int mode) + { + if ((mode == FE_MODE_LINK_LOOP) || (mode == FE_MODE_LINK_TWIN)) + return true; + return false; + } + bool isCable() { return (info.type == FE_QAM); } + bool isSat() { return (info.type == FE_QPSK); } + fe_type_t getType() { return info.type; } }; #endif /* __zapit_frontend_h__ */ diff --git a/src/zapit/include/zapit/frontend_types.h b/src/zapit/include/zapit/frontend_types.h index 85e86729a..edb7e4ede 100644 --- a/src/zapit/include/zapit/frontend_types.h +++ b/src/zapit/include/zapit/frontend_types.h @@ -38,6 +38,7 @@ typedef struct frontend_config { int uni_pin; int motorRotationSpeed; int highVoltage; + int diseqc_order; } frontend_config_t; #endif // __FRONTEND_TYPES_H__ diff --git a/src/zapit/include/zapit/getservices.h b/src/zapit/include/zapit/getservices.h index 8fb26d083..2dc1cd0dc 100644 --- a/src/zapit/include/zapit/getservices.h +++ b/src/zapit/include/zapit/getservices.h @@ -68,6 +68,7 @@ class CServiceManager int tp_count; uint32_t fake_tid; uint32_t fake_nid; + uint32_t fake_pos; int newfound; tallchans allchans; @@ -87,13 +88,15 @@ class CServiceManager satellite_map_t satellitePositions; sat_transponder_map_t satelliteTransponders; - bool ParseScanXml(); - void ParseTransponders(xmlNodePtr node, t_satellite_position satellitePosition, fe_type fe); - void ParseChannels(xmlNodePtr node, const t_transport_stream_id transport_stream_id, const t_original_network_id original_network_id, t_satellite_position satellitePosition, freq_id_t freq, uint8_t polarization); + bool ParseScanXml(fe_type_t delsys); + void ParseTransponders(xmlNodePtr node, t_satellite_position satellitePosition, fe_type_t delsys); + void ParseChannels(xmlNodePtr node, const t_transport_stream_id transport_stream_id, const t_original_network_id original_network_id, t_satellite_position satellitePosition, freq_id_t freq, uint8_t polarization, fe_type_t delsys); void FindTransponder(xmlNodePtr search); void ParseSatTransponders(fe_type_t frontendType, xmlNodePtr search, t_satellite_position satellitePosition); int LoadMotorPositions(void); + bool LoadScanXml(fe_type_t delsys); + void WriteSatHeader(FILE * fd, sat_config_t &config); void WriteCurrentService(FILE * fd, bool &satfound, bool &tpdone, bool &updated, char * satstr, transponder &tp, CZapitChannel &channel, const char * action); @@ -107,7 +110,7 @@ class CServiceManager static void CopyFile(char * from, char * to); - bool InitSatPosition(t_satellite_position position, char * name = NULL, bool force = false); + bool InitSatPosition(t_satellite_position position, char * name = NULL, bool force = false, int deltype = FE_QPSK); bool LoadServices(bool only_current); void SaveServices(bool tocopy, bool if_changed = false, bool no_deleted = false); void SaveMotorPositions(); @@ -134,12 +137,12 @@ class CServiceManager std::string GetServiceName(t_channel_id channel_id); tallchans* GetAllChannels(){ return &allchans; }; - bool GetAllRadioChannels(ZapitChannelList &list, int flags = 0); - bool GetAllTvChannels(ZapitChannelList &list, int flags = 0); - bool GetAllHDChannels(ZapitChannelList &list); - bool GetAllSatelliteChannels(ZapitChannelList &list, t_satellite_position position); - bool GetAllTransponderChannels(ZapitChannelList &list, transponder_id_t tpid); - bool GetAllUnusedChannels(ZapitChannelList &list); + bool GetAllRadioChannels(ZapitChannelList &list, int flags = CZapitChannel::PRESENT); + bool GetAllTvChannels(ZapitChannelList &list, int flags = CZapitChannel::PRESENT); + bool GetAllHDChannels(ZapitChannelList &list, int flags = CZapitChannel::PRESENT); + bool GetAllSatelliteChannels(ZapitChannelList &list, t_satellite_position position, int flags = CZapitChannel::PRESENT); + bool GetAllTransponderChannels(ZapitChannelList &list, transponder_id_t tpid, int flags = CZapitChannel::PRESENT); + bool GetAllUnusedChannels(ZapitChannelList &list, int flags = CZapitChannel::PRESENT); bool IsChannelTVChannel(const t_channel_id channel_id); diff --git a/src/zapit/include/zapit/satconfig.h b/src/zapit/include/zapit/satconfig.h index 28921dee5..5dc5c2f3f 100644 --- a/src/zapit/include/zapit/satconfig.h +++ b/src/zapit/include/zapit/satconfig.h @@ -38,6 +38,7 @@ typedef struct sat_config { int input; int configured; int cable_nid; + int deltype; } sat_config_t; typedef enum diseqc_cmd_order { diff --git a/src/zapit/include/zapit/transponder.h b/src/zapit/include/zapit/transponder.h index 298d3fe52..3902aa6be 100644 --- a/src/zapit/include/zapit/transponder.h +++ b/src/zapit/include/zapit/transponder.h @@ -33,7 +33,7 @@ public: t_original_network_id original_network_id; transponder_id_t transponder_id; t_satellite_position satellitePosition; - uint8_t type; + uint8_t deltype; FrontendParameters feparams; unsigned char polarization; diff --git a/src/zapit/include/zapit/types.h b/src/zapit/include/zapit/types.h index 10fe5a60a..6ec6994e0 100644 --- a/src/zapit/include/zapit/types.h +++ b/src/zapit/include/zapit/types.h @@ -47,6 +47,13 @@ typedef uint64_t t_channel_id; #define CREATE_CHANNEL_ID(service_id,original_network_id,transport_stream_id) ((((t_channel_id)transport_stream_id) << 32) | (((t_channel_id)original_network_id) << 16) | (t_channel_id)service_id) #define CREATE_CHANNEL_ID64 (((uint64_t)(satellitePosition+freq*4) << 48) | ((uint64_t) transport_stream_id << 32) | ((uint64_t)original_network_id << 16) | (uint64_t)service_id) +#ifndef PRIx64 +#define PRIx64 "llx" +#define PRId64 "lld" +#define SCNx64 "llx" +#define SCNd64 "lld" +#endif + #define PRINTF_CHANNEL_ID_TYPE "%16" PRIx64 #define PRINTF_CHANNEL_ID_TYPE_NO_LEADING_ZEROS "%" PRIx64 #define SCANF_CHANNEL_ID_TYPE "%" SCNx64 diff --git a/src/zapit/include/zapit/zapit.h b/src/zapit/include/zapit/zapit.h index a74ec82d3..231c80e63 100644 --- a/src/zapit/include/zapit/zapit.h +++ b/src/zapit/include/zapit/zapit.h @@ -129,11 +129,13 @@ class CZapit : public OpenThreads::Thread CZapitChannel * current_channel; t_channel_id live_channel_id; + t_channel_id pip_channel_id; /* scan params */ TP_params TP; fast_scan_type_t scant; CFrontend * live_fe; + CFrontend * pip_fe; audio_map_t audio_map; volume_map_t vol_map; @@ -237,6 +239,7 @@ class CZapit : public OpenThreads::Thread CZapitChannel * GetCurrentChannel() { return current_channel; }; t_channel_id GetCurrentChannelID() { return live_channel_id; }; + t_channel_id GetPipChannelID() { return pip_channel_id; }; t_channel_id GetLastTVChannel() { return lastChannelTV; } t_channel_id GetLastRADIOChannel() { return lastChannelRadio; } void SetCurrentChannelID(const t_channel_id channel_id) { live_channel_id = channel_id; }; @@ -248,5 +251,7 @@ class CZapit : public OpenThreads::Thread void SetVolume(int vol); int GetVolume() { return current_volume; }; int SetVolumePercent(int percent); + bool StartPip(const t_channel_id channel_id); + bool StopPip(); }; #endif /* __zapit_h__ */ diff --git a/src/zapit/lib/zapitclient.cpp b/src/zapit/lib/zapitclient.cpp index 90b6a5331..da0902d36 100644 --- a/src/zapit/lib/zapitclient.cpp +++ b/src/zapit/lib/zapitclient.cpp @@ -162,6 +162,7 @@ unsigned int CZapitClient::zapTo_serviceID(const t_channel_id channel_id) msg.channel_id = channel_id; msg.record = false; + msg.pip = false; send(CZapitMessages::CMD_ZAPTO_SERVICEID, (const char *) & msg, sizeof(msg)); @@ -180,6 +181,25 @@ unsigned int CZapitClient::zapTo_record(const t_channel_id channel_id) msg.channel_id = channel_id; msg.record = true; + msg.pip = false; + + send(CZapitMessages::CMD_ZAPTO_SERVICEID, (const char *) & msg, sizeof(msg)); + + CZapitMessages::responseZapComplete response; + CBasicClient::receive_data((char* )&response, sizeof(response)); + + close_connection(); + + return response.zapStatus; +} + +unsigned int CZapitClient::zapTo_pip(const t_channel_id channel_id) +{ + CZapitMessages::commandZaptoServiceID msg; + + msg.channel_id = channel_id; + msg.record = false; + msg.pip = true; send(CZapitMessages::CMD_ZAPTO_SERVICEID, (const char *) & msg, sizeof(msg)); @@ -1007,6 +1027,14 @@ void CZapitClient::stopPlayBack(const bool sendpmt) close_connection(); } +void CZapitClient::stopPip() +{ + send(CZapitMessages::CMD_STOP_PIP); + CZapitMessages::responseCmd response; + CBasicClient::receive_data((char* )&response, sizeof(response)); + close_connection(); +} + void CZapitClient::lockPlayBack(const bool sendpmt) { CZapitMessages::commandBoolean msg; diff --git a/src/zapit/lib/zapittools.cpp b/src/zapit/lib/zapittools.cpp index 677aeb67e..b85a9caab 100644 --- a/src/zapit/lib/zapittools.cpp +++ b/src/zapit/lib/zapittools.cpp @@ -128,7 +128,7 @@ namespace ZapitTools { void replace_char(char * p_act) { - const char repchars[]="/ \"%&-\t`'~<>!,:;?^$\\=*#@|"; + const char repchars[]="/ \"%&-\t`'~<>!,:;?^$\\=*#@|"; do { p_act += strcspn(p_act, repchars ); if (*p_act) { diff --git a/src/zapit/src/Makefile.am b/src/zapit/src/Makefile.am index 2510cd181..d8048a98c 100644 --- a/src/zapit/src/Makefile.am +++ b/src/zapit/src/Makefile.am @@ -12,8 +12,12 @@ INCLUDES = \ -I$(top_srcdir)/lib/xmltree if BOXTYPE_COOL +if BOXMODEL_APOLLO +INCLUDES += -I$(top_srcdir)/lib/libcoolstream2 +else INCLUDES += -I$(top_srcdir)/lib/libcoolstream endif +endif if USE_STB_HAL INCLUDES += -I$(STB_HAL_INC) diff --git a/src/zapit/src/bouquets.cpp b/src/zapit/src/bouquets.cpp index f4c260fcb..482f1a033 100644 --- a/src/zapit/src/bouquets.cpp +++ b/src/zapit/src/bouquets.cpp @@ -159,6 +159,26 @@ void CZapitBouquet::moveService(const unsigned int oldPosition, const unsigned i } } +bool CZapitBouquet::getTvChannels(ZapitChannelList &list, int flags) +{ + list.clear(); + for (ZapitChannelList::iterator it = tvChannels.begin(); it != tvChannels.end(); ++it) { + if ((*it)->flags & flags) + list.push_back(*it); + } + return (!list.empty()); +} + +bool CZapitBouquet::getRadioChannels(ZapitChannelList &list, int flags) +{ + list.clear(); + for (ZapitChannelList::iterator it = radioChannels.begin(); it != radioChannels.end(); ++it) { + if ((*it)->flags & flags) + list.push_back(*it); + } + return (!list.empty()); +} + #if 0 size_t CZapitBouquet::recModeRadioSize(const transponder_id_t transponder_id) { @@ -264,7 +284,7 @@ void CBouquetManager::saveBouquets(const CZapitClient::bouquetMode bouquetMode, if (bouquetMode == CZapitClient::BM_DELETEBOUQUETS) { INFO("removing existing bouquets"); //unlink(BOUQUETS_XML); - g_bouquetManager->clearAll(); + g_bouquetManager->clearAll(false); } if (bouquetMode == CZapitClient::BM_DONTTOUCHBOUQUETS) return; @@ -281,7 +301,7 @@ void CBouquetManager::saveBouquets(const CZapitClient::bouquetMode bouquetMode, Bouquets[0]->Name = providerName; } - if ((bouquetMode == CZapitClient::BM_UPDATEBOUQUETS) || (bouquetMode == CZapitClient::BM_CREATESATELLITEBOUQUET)) { + if ((bouquetMode == CZapitClient::BM_UPDATEBOUQUETS) || (bouquetMode == CZapitClient::BM_DELETEBOUQUETS)) { while (!(Bouquets.empty())) { CZapitBouquet* bouquet; int dest = g_bouquetManager->existsBouquet(Bouquets[0]->Name.c_str()); @@ -366,7 +386,8 @@ void CBouquetManager::parseBouquetsXml(const char *fname, bool bUser) CZapitChannel* chan; t_channel_id chid = CREATE_CHANNEL_ID64; - if(bUser) + /* FIXME to load old cable settings with new cable "positions" started from 0xF00 */ + if(bUser || CFEManager::getInstance()->cableOnly()) chan = CServiceManager::getInstance()->FindChannelFuzzy(chid, satellitePosition, freq); else chan = CServiceManager::getInstance()->FindChannel(chid); @@ -381,6 +402,13 @@ void CBouquetManager::parseBouquetsXml(const char *fname, bool bUser) chan->bAlwaysLocked = newBouquet->bLocked; newBouquet->addService(chan); + } else if (bUser) { + chan = new CZapitChannel(name2, CREATE_CHANNEL_ID64, 1 /*service_type*/, + satellitePosition, freq); + CServiceManager::getInstance()->AddChannel(chan); + chan->flags = CZapitChannel::NOT_FOUND; + chan->bAlwaysLocked = newBouquet->bLocked; + newBouquet->addService(chan); } channel_node = channel_node->xmlNextNode; @@ -619,12 +647,19 @@ void CBouquetManager::moveBouquet(const unsigned int oldId, const unsigned int n } } -void CBouquetManager::clearAll() +void CBouquetManager::clearAll(bool user) { - for (unsigned int i =0; i < Bouquets.size(); i++) - delete Bouquets[i]; + BouquetList tmplist; + for (unsigned int i =0; i < Bouquets.size(); i++) { + if (!user || !Bouquets[i]->bFav) + delete Bouquets[i]; + else + tmplist.push_back(Bouquets[i]); + } Bouquets.clear(); + if (!user) + Bouquets = tmplist; remainChannels = NULL; } diff --git a/src/zapit/src/capmt.cpp b/src/zapit/src/capmt.cpp index a48c9943d..a6aa1e4c5 100644 --- a/src/zapit/src/capmt.cpp +++ b/src/zapit/src/capmt.cpp @@ -26,6 +26,7 @@ #include #include /* CAMD_UDS_NAME */ #include +#include #include #include @@ -41,7 +42,8 @@ CCam::CCam() { camask = 0; - demuxes[0] = demuxes[1] = demuxes[2] = 0; + for(int i = 0; i < MAX_DMX_UNITS; i++) + demuxes[i] = 0; source_demux = -1; calen = 0; } @@ -139,7 +141,8 @@ bool CCam::setCaPmt(bool update) bool CCam::sendCaPmt(uint64_t tpid, uint8_t *rawpmt, int rawlen) { - return cCA::GetInstance()->SendCAPMT(tpid, source_demux, camask, cabuf, calen, rawpmt, rawlen); + return cCA::GetInstance()->SendCAPMT(tpid, source_demux, camask, + rawpmt ? cabuf : NULL, rawpmt ? calen : 0, rawpmt, rawlen); } int CCam::makeMask(int demux, bool add) @@ -151,11 +154,11 @@ int CCam::makeMask(int demux, bool add) else if(demuxes[demux] > 0) demuxes[demux]--; - for(int i = 0; i < 3; i++) { + for(int i = 0; i < MAX_DMX_UNITS; i++) { if(demuxes[i] > 0) mask |= 1 << i; } - DBG("demuxes %d:%d:%d old mask %d new mask %d", demuxes[0], demuxes[1], demuxes[2], camask, mask); + //DBG("demuxes %d:%d:%d:%d old mask %d new mask %d", demuxes[0], demuxes[1], demuxes[2], demuxes[3], camask, mask); return mask; } @@ -208,6 +211,7 @@ bool CCamManager::SetMode(t_channel_id channel_id, enum runmode mode, bool start return false; } + /* FIXME until proper demux management */ switch(mode) { case PLAY: #if HAVE_COOL_HARDWARE @@ -215,22 +219,30 @@ bool CCamManager::SetMode(t_channel_id channel_id, enum runmode mode, bool start demux = LIVE_DEMUX; #else /* see the comment in src/driver/streamts.cpp:CStreamInstance::run() */ + /* TODO: FIXME */ case STREAM: /* this might be SPARK-specific, not tested elsewhere */ source = cDemux::GetSource(0); /* demux0 is always the live demux */ demux = source; #endif break; - case RECORD: - source = channel->getRecordDemux(); //DEMUX_SOURCE_0;//FIXME - demux = channel->getRecordDemux(); //RECORD_DEMUX;//FIXME - break; #if HAVE_COOL_HARDWARE case STREAM: +#endif + case RECORD: + source = channel->getRecordDemux(); + demux = channel->getRecordDemux(); + break; +#if 0 + case STREAM: source = DEMUX_SOURCE_0; - demux = STREAM_DEMUX;//FIXME + demux = STREAM_DEMUX; break; #endif + case PIP: + source = channel->getRecordDemux(); + demux = channel->getPipDemux(); + break; } oldmask = cam->getCaMask(); @@ -250,6 +262,7 @@ bool CCamManager::SetMode(t_channel_id channel_id, enum runmode mode, bool start cam->setSource(source); if(newmask == 0) { cam->sendMessage(NULL, 0, false); + cam->sendCaPmt(channel->getChannelID(), NULL, 0); } else { cam->makeCaPmt(channel, true); cam->setCaPmt(true); @@ -285,7 +298,7 @@ bool CCamManager::SetMode(t_channel_id channel_id, enum runmode mode, bool start cam->makeCaPmt(channel, false, list, caids); int len; unsigned char * buffer = channel->getRawPmt(len); - cam->sendCaPmt(channel->getTransponderId(), buffer, len); + cam->sendCaPmt(channel->getChannelID(), buffer, len); //list = CCam::CAPMT_MORE; } mutex.unlock(); diff --git a/src/zapit/src/channel.cpp b/src/zapit/src/channel.cpp index 72374d4ad..0bdc95695 100644 --- a/src/zapit/src/channel.cpp +++ b/src/zapit/src/channel.cpp @@ -65,8 +65,10 @@ void CZapitChannel::Init() last_unlocked_time = 0; has_bouquet = false; record_demux = 2; + pip_demux = 2; polarization = 0; flags = 0; + deltype = FE_QPSK; } CZapitChannel::~CZapitChannel(void) diff --git a/src/zapit/src/fastscan.cpp b/src/zapit/src/fastscan.cpp index 9c2cefde4..83a8f33a6 100644 --- a/src/zapit/src/fastscan.cpp +++ b/src/zapit/src/fastscan.cpp @@ -317,10 +317,12 @@ bool CServiceScan::ParseFst(unsigned short pid, fast_scan_operator_t * op) channel_id, service_type, satellitePosition, - freq - ); + freq); + newchannel->deltype = FE_QPSK; CServiceManager::getInstance()->AddChannel(newchannel); } + // FIXME detect new/removed + newchannel->flags = CZapitChannel::UPDATED; newchannel->setName(serviceName); newchannel->setServiceType(service_type); newchannel->setVideoPid(video_pid); diff --git a/src/zapit/src/femanager.cpp b/src/zapit/src/femanager.cpp index 374686d9a..d8b2d50ec 100644 --- a/src/zapit/src/femanager.cpp +++ b/src/zapit/src/femanager.cpp @@ -37,9 +37,41 @@ #include #include #include +#include #include +#include -extern transponder_list_t transponders; +static int fedebug = 0; +#define FEDEBUG(fmt, args...) \ + do { \ + if (fedebug) \ + fprintf(stdout, "[%s:%s:%d] " fmt "\n", \ + __FILE__, __FUNCTION__, \ + __LINE__ , ## args); \ + } while (0) + +CFeDmx::CFeDmx(int i) +{ + num = i; + tpid = 0; + usecount = 0; +} + +void CFeDmx::Lock(transponder_id_t id) +{ + tpid = id; + usecount++; + INFO("[dmx%d] lock, usecount %d tp %llx", num, usecount, tpid); +} + +void CFeDmx::Unlock() +{ + if(usecount > 0) + usecount--; + else + tpid = 0; + INFO("[dmx%d] unlock, usecount %d tp %llx", num, usecount, tpid); +} CFEManager * CFEManager::manager = NULL; @@ -49,9 +81,7 @@ CFEManager::CFEManager() : configfile(',', true) mode = FE_MODE_SINGLE; config_exist = false; have_locked = false; - fe_type = -1; - loadSettings(); /* set fe_type */ - other_fe.clear(); + enabled_count = 0; } bool CFEManager::Init() @@ -59,38 +89,32 @@ bool CFEManager::Init() CFrontend * fe; unsigned short fekey; - int idx = 0; - other_fe.clear(); + OpenThreads::ScopedLock m_lock(mutex); + have_sat = have_cable = false; for(int i = 0; i < MAX_ADAPTERS; i++) { for(int j = 0; j < MAX_FE; j++) { fe = new CFrontend(j, i); if(fe->Open()) { - if (fe_type == -1) - fe_type = (int)fe->getInfo()->type; - if (fe_type == (int)fe->getInfo()->type) { - fekey = MAKE_FE_KEY(i, j); - femap.insert(std::pair (fekey, fe)); - INFO("add fe %d", fe->fenumber); - if(livefe == NULL) - livefe = fe; - fe->setIndex(idx++); - } else { - /* neutrino can not yet handle differing mixed frontend types... */ - INFO("not adding fe %d of different type", fe->fenumber); - other_fe.insert(fe->getInfo()->type); - delete fe; - } + fekey = MAKE_FE_KEY(i, j); + femap.insert(std::pair (fekey, fe)); + INFO("add fe %d", fe->fenumber); + if(livefe == NULL) + livefe = fe; + if (fe->getInfo()->type == FE_QPSK) + have_sat = true; + else if (fe->getInfo()->type == FE_QAM) + have_cable = true; } else delete fe; } } - INFO("found %d frontends", (int)femap.size()); - if( femap.empty() ) + for (int i = 0; i < MAX_DMX_UNITS; i++) + dmap.push_back(CFeDmx(i)); + + INFO("found %d frontends, %d demuxes\n", (int)femap.size(), (int)dmap.size()); + if (femap.empty()) return false; -#if 0 - if(femap.size() == 1) - mode = FE_MODE_SINGLE; -#endif + return true; } @@ -98,6 +122,7 @@ CFEManager::~CFEManager() { for(fe_map_iterator_t it = femap.begin(); it != femap.end(); it++) delete it->second; + dmap.clear(); } CFEManager * CFEManager::getInstance() @@ -177,16 +202,26 @@ bool CFEManager::loadSettings() if (!configfile.loadConfig(FECONFIGFILE)) { WARN("%s not found", FECONFIGFILE); config_exist = false; - //return false; } - fe_type = configfile.getInt32("fe_type", -1); - if (fe_type < -1 || fe_type > (int)FE_OFDM) - fe_type = -1; /* invalid value => default */ - if (femap.empty()) /* first call from constructor */ - return false; - - fe_mode_t newmode = (fe_mode_t) configfile.getInt32("mode", (int) FE_MODE_SINGLE); + int def_mode0 = CFrontend::FE_MODE_INDEPENDENT; + int def_modeX = CFrontend::FE_MODE_UNUSED; + int newmode = (fe_mode_t) configfile.getInt32("mode", -1); + if (newmode >= 0) { + INFO("old mode param: %d\n", newmode); + if (newmode == FE_MODE_LOOP) { + def_mode0 = CFrontend::FE_MODE_MASTER; + def_modeX = CFrontend::FE_MODE_LINK_LOOP; + } else if (newmode == FE_MODE_TWIN) { + def_mode0 = CFrontend::FE_MODE_MASTER; + def_modeX = CFrontend::FE_MODE_LINK_TWIN; + } else if (newmode == FE_MODE_ALONE) { + def_mode0 = CFrontend::FE_MODE_INDEPENDENT; + def_modeX = CFrontend::FE_MODE_INDEPENDENT; + } + } + bool fsat = true; + bool fcable = true; for(fe_map_iterator_t it = femap.begin(); it != femap.end(); it++) { CFrontend * fe = it->second; frontend_config_t & fe_config = fe->getConfig(); @@ -199,27 +234,41 @@ bool CFEManager::loadSettings() fe_config.uni_scr = getConfigValue(fe, "uni_scr", 0); fe_config.uni_qrg = getConfigValue(fe, "uni_qrg", 0); fe_config.uni_pin = getConfigValue(fe, "uni_pin", -1); + fe_config.diseqc_order = getConfigValue(fe, "diseqc_order", UNCOMMITED_FIRST); fe->setRotorSatellitePosition(getConfigValue(fe, "lastSatellitePosition", 0)); - //fe->setDiseqcType((diseqc_t) fe_config.diseqcType); -#if 0 - diseqc_t diseqcType = (diseqc_t) getConfigValue(fe, "diseqcType", NO_DISEQC); - fe->setDiseqcType(diseqcType); -#endif + /* default mode for first / next frontends */ + int def_mode = def_modeX; + if (fe->isSat() && fsat) { + fsat = false; + def_mode = def_mode0; + } + if (fe->isCable()) { + if (fcable) { + fcable = false; + def_mode = def_mode0; + } + if (def_mode > CFrontend::FE_MODE_INDEPENDENT) + def_mode = CFrontend::FE_MODE_INDEPENDENT; + } + if (femap.size() == 1) + def_mode = CFrontend::FE_MODE_INDEPENDENT; + + fe->setMode(getConfigValue(fe, "mode", def_mode)); + fe->setMaster(getConfigValue(fe, "master", 0)); char cfg_key[81]; sprintf(cfg_key, "fe%d_satellites", fe->fenumber); satellite_map_t & satmap = fe->getSatellites(); satmap.clear(); -#if 0 - std::vector satList = configfile.getInt32Vector(cfg_key); - for(unsigned int i = 0; i < satList.size(); i++) - t_satellite_position position = satList[i]; -#endif + satellite_map_t satlist = CServiceManager::getInstance()->SatelliteList(); for(sat_iterator_t sit = satlist.begin(); sit != satlist.end(); ++sit) { + if (fe->getInfo()->type != sit->second.deltype) + continue; + t_satellite_position position = sit->first; sat_config_t satconfig; /* defaults, to replace CServiceManager::InitSatPosition/LoadMotorPositions @@ -245,16 +294,13 @@ bool CFEManager::loadSettings() } } - if (configfile.getUnknownKeyQueryedFlag()) - configfile.saveConfig(FECONFIGFILE); - setMode(newmode, true); + linkFrontends(); return true; } void CFEManager::saveSettings(bool write) { - configfile.setInt32("mode", (int) mode); - configfile.setInt32("fe_type", fe_type); + configfile.clear(); for(fe_map_iterator_t it = femap.begin(); it != femap.end(); it++) { CFrontend * fe = it->second; frontend_config_t & fe_config = fe->getConfig(); @@ -273,13 +319,18 @@ void CFEManager::saveSettings(bool write) setConfigValue(fe, "uni_scr", fe_config.uni_scr); setConfigValue(fe, "uni_qrg", fe_config.uni_qrg); setConfigValue(fe, "uni_pin", fe_config.uni_pin); + setConfigValue(fe, "diseqc_order", fe_config.diseqc_order); setConfigValue(fe, "lastSatellitePosition", fe->getRotorSatellitePosition()); + setConfigValue(fe, "mode", fe->getMode()); + setConfigValue(fe, "master", fe->getMaster()); std::vector satList; satellite_map_t satellites = fe->getSatellites(); for(sat_iterator_t sit = satellites.begin(); sit != satellites.end(); ++sit) { - satList.push_back(sit->first); - setSatelliteConfig(fe, sit->second); + if (sit->second.configured) { + satList.push_back(sit->first); + setSatelliteConfig(fe, sit->second); + } } char cfg_key[81]; sprintf(cfg_key, "fe%d_satellites", fe->fenumber); @@ -291,6 +342,97 @@ void CFEManager::saveSettings(bool write) } } +void CFEManager::copySettings(CFrontend * from, CFrontend * to) +{ + INFO("Copy settings fe %d -> fe %d", from->fenumber, to->fenumber); + if (to->config.diseqcType != DISEQC_UNICABLE || to->getMode() == CFrontend::FE_MODE_LINK_LOOP) + to->config.diseqcType = from->config.diseqcType; + + to->config.diseqcRepeats = from->config.diseqcRepeats; + to->config.motorRotationSpeed = from->config.motorRotationSpeed; + to->config.highVoltage = from->config.highVoltage; + to->setSatellites(from->getSatellites()); +} + +void CFEManager::copySettings(CFrontend * fe) +{ + if (CFrontend::linked(fe->getMode())) { + for(fe_map_iterator_t it = femap.begin(); it != femap.end(); it++) { + if (it->second->fenumber == fe->getMaster()) { + copySettings(it->second, fe); + break; + } + } + } else if (fe->getMode() == CFrontend::FE_MODE_MASTER) { + for (unsigned int i = 1; i < fe->linkmap.size(); i++) { + CFrontend * lfe = fe->linkmap[i]; + copySettings(fe, lfe); + } + } +} + +void CFEManager::linkFrontends(bool init) +{ + INFO("linking.."); + OpenThreads::ScopedLock m_lock(mutex); + enabled_count = 0; + for(fe_map_iterator_t it = femap.begin(); it != femap.end(); it++) { + CFrontend * fe = it->second; +#if 0 + if (fe->getInfo()->type != FE_QPSK) + fe->setMode(CFrontend::FE_MODE_INDEPENDENT); +#endif + int femode = fe->getMode(); + fe->slave = false; + fe->linkmap.clear(); + if (femode == CFrontend::FE_MODE_MASTER) { + INFO("Frontend #%d: is master", fe->fenumber); + fe->linkmap.push_back(fe); + /* fe is master, find all linked */ + for(fe_map_iterator_t it2 = femap.begin(); it2 != femap.end(); it2++) { + CFrontend * fe2 = it2->second; + if (!CFrontend::linked(fe2->getMode())) + continue; + if (fe2->getType() != fe->getType() || (fe2->getMaster() != fe->fenumber)) + continue; +#if 0 + int mnum = fe2->getMaster(); + if (mnum != fe->fenumber) + continue; + CFrontend * mfe = getFE(mnum); + if (!mfe) { + INFO("Frontend %d: master %d not found", fe->fenumber, mnum); + continue; + } + + mfe->linkmap.push_back(fe2); +#endif + fe->linkmap.push_back(fe2); + if (fe2->getMode() == CFrontend::FE_MODE_LINK_LOOP) { + INFO("Frontend #%d: link to master %d as LOOP", fe2->fenumber, fe->fenumber); + } else { + INFO("Frontend #%d: link to master %d as TWIN", fe2->fenumber, fe->fenumber); + } + + } + } else if (femode == CFrontend::FE_MODE_LINK_LOOP) { + INFO("Frontend #%d: is LOOP, master %d", fe->fenumber, fe->getMaster()); + if (init) + fe->setMasterSlave(true); + //fe->slave = true; + } else if (femode == CFrontend::FE_MODE_LINK_TWIN) { + INFO("Frontend #%d: is TWIN, master %d", fe->fenumber, fe->getMaster()); + } else if (femode == CFrontend::FE_MODE_INDEPENDENT) { + INFO("Frontend #%d: is independent", fe->fenumber); + } + if (init && femode != CFrontend::FE_MODE_UNUSED) + fe->Init(); + if (femode != CFrontend::FE_MODE_UNUSED) + enabled_count++; + } +} + +#if 0 void CFEManager::setMode(fe_mode_t newmode, bool initial) { if(!initial && (newmode == mode)) @@ -317,15 +459,8 @@ void CFEManager::setMode(fe_mode_t newmode, bool initial) } else fe->Init(); } -#if 0 - if(setslave && !initial) { - CFrontend * fe = getFE(0); - fe->Close(); - fe->Open(true); - } -#endif } - +#endif void CFEManager::Open() { for(fe_map_iterator_t it = femap.begin(); it != femap.end(); it++) { @@ -339,7 +474,7 @@ void CFEManager::Open() void CFEManager::Close() { - if(have_locked && (mode == FE_MODE_LOOP)) + if(have_locked) return; for(fe_map_iterator_t it = femap.begin(); it != femap.end(); it++) { @@ -363,41 +498,6 @@ CFrontend * CFEManager::getFE(int index) INFO("Frontend #%d not found", index); return NULL; } -#if 0 -//never used -transponder * CFEManager::getChannelTransponder(CZapitChannel * channel) -{ - transponder_list_t::iterator tpI = transponders.find(channel->getTransponderId()); - if(tpI != transponders.end()) - return &tpI->second; - - INFO("Transponder %llx not found", channel->getTransponderId()); - return NULL; -} -#endif - -/* try to find fe with same tid, or unlocked. fe with same tid is preffered */ -CFrontend * CFEManager::findFrontend(CZapitChannel * channel) -{ - CFrontend * same_tid_fe = NULL; - CFrontend * free_frontend = NULL; - transponder_id_t channel_tid = channel->getTransponderId(); - - for(fe_map_iterator_t it = femap.begin(); it != femap.end(); it++) { - CFrontend * fe = it->second; - INFO("Check fe%d: locked %d TP %" PRIx64 " - channel TP %" PRIx64 "", fe->fenumber, fe->Locked(), fe->getTsidOnid(), channel_tid); - if(fe->tuned && fe->sameTsidOnid(channel->getTransponderId())) { - same_tid_fe = fe; - break; - } - else if(!fe->Locked() && !free_frontend) - free_frontend = fe; - } - - CFrontend * ret = same_tid_fe ? same_tid_fe : free_frontend; - INFO("Selected fe: %d", ret ? ret->fenumber : -1); - return ret; -} /* compare polarization and band with fe values */ bool CFEManager::loopCanTune(CFrontend * fe, CZapitChannel * channel) @@ -408,17 +508,8 @@ bool CFEManager::loopCanTune(CFrontend * fe, CZapitChannel * channel) if(fe->tuned && (fe->getCurrentSatellitePosition() != channel->getSatellitePosition())) return false; -#if 0 - transponder * tp = getChannelTransponder(channel); - if(tp == NULL) - return false; - - bool tp_band = ((int)tp->feparams.frequency >= fe->lnbSwitch); - uint8_t tp_pol = tp->polarization & 1; -#else bool tp_band = ((int)channel->getFreqId()*1000 >= fe->lnbSwitch); uint8_t tp_pol = channel->polarization & 1; -#endif uint8_t fe_pol = fe->getPolarization() & 1; DBG("Check fe%d: locked %d pol:band %d:%d vs %d:%d (%d:%d)", fe->fenumber, fe->Locked(), fe_pol, fe->getHighBand(), tp_pol, tp_band, fe->getFrequency(), channel->getFreqId()*1000); @@ -427,226 +518,255 @@ bool CFEManager::loopCanTune(CFrontend * fe, CZapitChannel * channel) return false; } -CFrontend * CFEManager::getLoopFE(CZapitChannel * channel) +CFrontend * CFEManager::getFrontend(CZapitChannel * channel) { CFrontend * free_frontend = NULL; - CFrontend * same_tid_fe = NULL; + //CFrontend * same_tid_fe = NULL; - /* check is there any locked fe, remember fe with same transponder */ - for(fe_map_iterator_t it = femap.begin(); it != femap.end(); it++) { - CFrontend * fe = it->second; - INFO("Check fe%d: locked %d freq %d TP %" PRIx64 " - channel freq %d TP %" PRIx64 "", fe->fenumber, fe->Locked(), fe->getFrequency(), fe->getTsidOnid(), channel->getFreqId(), channel->getTransponderId()); -#if 0 - if(fe->tuned && fe->sameTsidOnid(channel->getTransponderId())) { - same_tid_fe = fe; // first with same tp id - break; - } -#endif - if(fe->Locked() /* && !same_tid_fe*/) { - INFO("fe %d locked", fe->fenumber); - if(!loopCanTune(fe, channel)) { - free_frontend = NULL; - break; - } - if(fe->tuned && fe->sameTsidOnid(channel->getTransponderId())) { - same_tid_fe = fe; // first with same tp id - } - } else if(!free_frontend) - free_frontend = fe; // first unlocked - } - - CFrontend * ret = same_tid_fe ? same_tid_fe : free_frontend; - INFO("Selected fe: %d", ret ? ret->fenumber : -1); - return ret; -} - -CFrontend * CFEManager::getIndependentFE(CZapitChannel * channel) -{ - CFrontend * free_frontend = NULL; - CFrontend * same_tid_fe = NULL; + if (livefe && livefe->tuned && livefe->sameTsidOnid(channel->getTransponderId())) + return livefe; t_satellite_position satellitePosition = channel->getSatellitePosition(); for(fe_map_iterator_t it = femap.begin(); it != femap.end(); it++) { - CFrontend * fe = it->second; - satellite_map_t & satmap = fe->getSatellites(); - sat_iterator_t sit = satmap.find(satellitePosition); - bool configured = ((sit != satmap.end()) && sit->second.configured); - INFO("Check fe%d: locked %d freq %d TP %" PRIx64 " - channel freq %d TP %" PRIx64 " has sat %d: %s", - fe->fenumber, fe->Locked(), fe->getFrequency(), fe->getTsidOnid(), - channel->getFreqId(), channel->getTransponderId(), satellitePosition, configured ? "yes" : "no"); - if(!configured) + CFrontend * mfe = it->second; + + if (mfe->getType() != channel->deltype) + continue; + if (mfe->getMode() == CFrontend::FE_MODE_UNUSED || CFrontend::linked(mfe->getMode())) continue; - if(fe->tuned && fe->sameTsidOnid(channel->getTransponderId())) { - same_tid_fe = fe; - break; + if (mfe->getInfo()->type == FE_QPSK) { + satellite_map_t & satmap = mfe->getSatellites(); + sat_iterator_t sit = satmap.find(satellitePosition); + if ((sit == satmap.end()) || !sit->second.configured) + continue; + } + + if (mfe->getMode() == CFrontend::FE_MODE_MASTER) { + bool have_loop = false; + for (unsigned int i = 0; i < mfe->linkmap.size(); i++) { + CFrontend * fe = mfe->linkmap[i]; + if (fe->getMode() == CFrontend::FE_MODE_LINK_LOOP) { + have_loop = true; + break; + } + } + CFrontend * free_twin = NULL; + bool loop_busy = false; + for (unsigned int i = 0; i < mfe->linkmap.size(); i++) { + CFrontend * fe = mfe->linkmap[i]; + FEDEBUG("Check fe%d: mode %d locked %d freq %d TP %llx - channel freq %d TP %llx", fe->fenumber, fe->getMode(), + fe->Locked(), fe->getFrequency(), fe->getTsidOnid(), channel->getFreqId(), channel->getTransponderId()); + + if(fe->Locked()) { + if (fe->isSat() && (fe->getCurrentSatellitePosition() != satellitePosition)) { + free_frontend = NULL; + free_twin = NULL; + break; + } + if (fe->tuned && fe->sameTsidOnid(channel->getTransponderId())) { + FEDEBUG("fe %d on the same TP", fe->fenumber); + return fe; + } + if (!loop_busy && fe->getMode() != CFrontend::FE_MODE_LINK_TWIN) { + if (have_loop && !loopCanTune(fe, channel)) { + free_frontend = NULL; + loop_busy = true; + } + } + } else { + if (fe->getMode() == CFrontend::FE_MODE_LINK_TWIN) { + if (!free_twin) + free_twin = fe; + } else if(!loop_busy && !free_frontend) { + free_frontend = fe; + } + } + } + if (!free_frontend) + free_frontend = free_twin; + } + if (mfe->getMode() == CFrontend::FE_MODE_INDEPENDENT) { + FEDEBUG("Check fe%d: mode %d locked %d freq %d TP %llx - channel freq %d TP %llx", mfe->fenumber, mfe->getMode(), + mfe->Locked(), mfe->getFrequency(), mfe->getTsidOnid(), channel->getFreqId(), channel->getTransponderId()); + if(mfe->Locked()) { + if(mfe->tuned && mfe->sameTsidOnid(channel->getTransponderId())) { + FEDEBUG("fe %d on the same TP", mfe->fenumber); + return mfe; + } + } else if(!free_frontend) + free_frontend = mfe; } - else if(!fe->Locked() && !free_frontend) - free_frontend = fe; } - CFrontend * ret = same_tid_fe ? same_tid_fe : free_frontend; - INFO("Selected fe: %d", ret ? ret->fenumber : -1); - return ret; + FEDEBUG("Selected fe: %d", free_frontend ? free_frontend->fenumber : -1); + return free_frontend; } -CFrontend * CFEManager::allocateFE(CZapitChannel * channel) +#ifdef DYNAMIC_DEMUX +int CFEManager::getDemux(transponder_id_t id) { - CFrontend * frontend = NULL, *fe; - - mutex.lock(); - switch(mode) { - case FE_MODE_SINGLE: - if((fe = getFE(0))) { - if(!fe->Locked() || fe->sameTsidOnid(channel->getTransponderId())) - frontend = fe; - } - break; - case FE_MODE_LOOP: - frontend = getLoopFE(channel); - break; - case FE_MODE_TWIN: - frontend = findFrontend(channel); - break; - case FE_MODE_ALONE: - frontend = getIndependentFE(channel); - break; + for (unsigned int i = 1; i < dmap.size(); i++) { + if((dmap[i].usecount == 0) || dmap[i].tpid == id) + return i; } - //FIXME for testing only - if(frontend) { + return 0; +} + +bool CFEManager::lockDemux(int i, transponder_id_t id) +{ + OpenThreads::ScopedLock m_lock(mutex); + if ((unsigned int) i < dmap.size()) { + if ((dmap[i].usecount == 0) || (dmap[i].tpid == id)) { + dmap[i].Lock(id); + return true; + } + INFO("faled to lock demux %d (on tp %llx, new %llx)", i, dmap[i].tpid, id); + } + return false; +} + +void CFEManager::unlockDemux(int i) +{ + OpenThreads::ScopedLock m_lock(mutex); + if ((unsigned int) i < dmap.size()) + dmap[i].Unlock(); +} + +bool CFEManager::haveFreeDemux() +{ + OpenThreads::ScopedLock m_lock(mutex); + for (unsigned int i = 1; i < dmap.size(); i++) { + if (dmap[i].usecount == 0) + return true; + } + return false; +} +#endif // DYNAMIC_DEMUX + +CFrontend * CFEManager::allocateFE(CZapitChannel * channel, bool forrecord) +{ + OpenThreads::ScopedLock m_lock(mutex); + + fedebug = 1; + if (forrecord) + fedebug = 1; + CFrontend * frontend = getFrontend(channel); + if (frontend) { +#ifdef DYNAMIC_DEMUX + int dnum = getDemux(channel->getTransponderId()); + INFO("record demux: %d", dnum); + channel->setRecordDemux(dnum); + if (forrecord && !dnum) { + frontend = NULL; + } else { + cDemux::SetSource(dnum, frontend->fenumber); + } +#else channel->setRecordDemux(frontend->fenumber+1); + channel->setPipDemux(frontend->fenumber+1); #if HAVE_COOL_HARDWARE /* I don't know if this check is necessary on cs, but it hurts on other hardware */ if(femap.size() > 1) #endif cDemux::SetSource(frontend->fenumber+1, frontend->fenumber); +#ifdef ENABLE_PIP + /* FIXME until proper demux management */ + if (enabled_count < 4) { + channel->setPipDemux(PIP_DEMUX); + //cDemux::SetSource(PIP_DEMUX, frontend->fenumber); + } + INFO("pip demux: %d", channel->getPipDemux()); +#endif +#endif + } - mutex.unlock(); return frontend; } void CFEManager::setLiveFE(CFrontend * fe) { - mutex.lock(); + OpenThreads::ScopedLock m_lock(mutex); livefe = fe; #if HAVE_COOL_HARDWARE if(femap.size() > 1) #endif cDemux::SetSource(0, livefe->fenumber); - mutex.unlock(); } bool CFEManager::canTune(CZapitChannel * channel) { - /* TODO: for faster processing, cache ? FE_MODE_LOOP: pol and band, - * is there unlocked or not, what else ? - */ - CFrontend * fe; - bool ret = false; -#if 0 - if(!have_locked) - return true; -#endif - switch(mode) { - case FE_MODE_SINGLE: - if((fe = getFE(0))) { - if(!fe->Locked() || fe->sameTsidOnid(channel->getTransponderId())) - ret = true; - } - break; - case FE_MODE_LOOP: -#if 1 - for(fe_map_iterator_t it = femap.begin(); it != femap.end(); it++) { - fe = it->second; - if(fe->tuned && fe->sameTsidOnid(channel->getTransponderId())) - return true; - if(fe->Locked()) { - if(!loopCanTune(fe, channel)) { - return false; - } - } else - ret = true; - } -#else - ret = (getLoopFE(channel) != NULL); -#endif - break; - case FE_MODE_TWIN: - for(fe_map_iterator_t it = femap.begin(); it != femap.end(); it++) { - fe = it->second; - if(!fe->Locked() || fe->sameTsidOnid(channel->getTransponderId())) - return true; - } - break; - case FE_MODE_ALONE: - for(fe_map_iterator_t it = femap.begin(); it != femap.end(); it++) { - fe = it->second; - satellite_map_t & satmap = fe->getSatellites(); - sat_iterator_t sit = satmap.find(channel->getSatellitePosition()); - if(((sit != satmap.end()) && sit->second.configured)) { - if(!fe->Locked() || fe->sameTsidOnid(channel->getTransponderId())) - return true; - } - } - break; - } - return ret; + fedebug = 0; + CFrontend * fe = getFrontend(channel); + return (fe != NULL); } CFrontend * CFEManager::getScanFrontend(t_satellite_position satellitePosition) { CFrontend * frontend = NULL; - switch(mode) { - case FE_MODE_SINGLE: - case FE_MODE_LOOP: - //FIXME scan while recording ? - case FE_MODE_TWIN: - frontend = getFE(0); - break; - case FE_MODE_ALONE: - for(fe_map_iterator_t it = femap.begin(); it != femap.end(); it++) { - CFrontend * fe = it->second; - satellite_map_t & satmap = fe->getSatellites(); - sat_iterator_t sit = satmap.find(satellitePosition); - if(((sit != satmap.end()) && sit->second.configured)) { - frontend = fe; - break; - } + for(fe_map_iterator_t it = femap.begin(); it != femap.end(); it++) { + CFrontend * mfe = it->second; + if(mfe->isCable()) { + if ((satellitePosition & 0xF00) == 0xF00) { + frontend = mfe; + break; } - break; + } else { + if (mfe->getMode() == CFrontend::FE_MODE_UNUSED || CFrontend::linked(mfe->getMode())) + continue; + satellite_map_t & satmap = mfe->getSatellites(); + sat_iterator_t sit = satmap.find(satellitePosition); + if ((sit != satmap.end()) && sit->second.configured) { + frontend = mfe; + break; + } + } } INFO("Selected fe: %d", frontend ? frontend->fenumber : -1); return frontend; } -bool CFEManager::lockFrontend(CFrontend * frontend) +bool CFEManager::lockFrontend(CFrontend * frontend, CZapitChannel * channel) { - mutex.lock(); + OpenThreads::ScopedLock m_lock(mutex); frontend->Lock(); have_locked = true; - polarization = frontend->getPolarization() & 1; - high_band = frontend->getHighBand(); - mutex.unlock(); + + if (channel) { +#ifdef DYNAMIC_DEMUX + int di = channel->getRecordDemux(); + if ((unsigned int) di < dmap.size()) + dmap[di].Lock(channel->getTransponderId()); +#endif + } return true; } -bool CFEManager::unlockFrontend(CFrontend * frontend) +bool CFEManager::unlockFrontend(CFrontend * frontend, bool unlock_demux) { - mutex.lock(); + OpenThreads::ScopedLock m_lock(mutex); have_locked = false; frontend->Unlock(); + if (unlock_demux) { +#ifdef DYNAMIC_DEMUX + for (unsigned int i = 1; i < dmap.size(); i++) { + if(dmap[i].tpid == frontend->getTsidOnid()) { + dmap[i].Unlock(); + break; + } + } +#endif + } for(fe_map_iterator_t it = femap.begin(); it != femap.end(); it++) { CFrontend * fe = it->second; if(fe->Locked()) { have_locked = true; - polarization = fe->getPolarization() & 1; - high_band = fe->getHighBand(); break; } } - mutex.unlock(); return true; } +// FIXME bool CFEManager::haveFreeFrontend() { if(have_locked) { @@ -659,11 +779,13 @@ bool CFEManager::haveFreeFrontend() return true; } } -#if 0 - if(mode == FE_MODE_LOOP) - return false; -#endif return false; } return true; } + +int CFEManager::getEnabledCount() +{ + OpenThreads::ScopedLock m_lock(mutex); + return enabled_count; +} diff --git a/src/zapit/src/frontend.cpp b/src/zapit/src/frontend.cpp index 08d0ee6ab..e1ed7a5fe 100644 --- a/src/zapit/src/frontend.cpp +++ b/src/zapit/src/frontend.cpp @@ -169,11 +169,14 @@ CFrontend::CFrontend(int Number, int Adapter) fd = -1; fenumber = Number; adapter = Adapter; - slave = false; /* is set in frontend->setMode() */ + slave = false; /* is set in frontend->setMasterSlave() */ standby = true; locked = false; usecount = 0; + femode = FE_MODE_INDEPENDENT; + masterkey = 0; + tuned = false; uncommitedInput = 255; @@ -223,7 +226,7 @@ bool CFrontend::Open(bool init) INFO("[fe%d] %s fd %d type %d", fenumber, filename, fd, info.type); } - //FIXME info.type = FE_QAM; + //FIXME if (fenumber > 1) info.type = FE_QAM; if (init) Init(); @@ -238,9 +241,12 @@ bool CFrontend::Open(bool init) void CFrontend::Init(void) { mutex.lock(); + // Set the voltage to On, and wait voltage to become stable + // and wait for diseqc equipment to be ready. secSetVoltage(SEC_VOLTAGE_13, 100); - secSetTone(SEC_TONE_OFF, 15); + secSetTone(SEC_TONE_OFF, 20); setDiseqcType((diseqc_t) config.diseqcType, true); + setTsidOnid(0); mutex.unlock(); } @@ -253,11 +259,15 @@ void CFrontend::Close(void) if (!slave && config.diseqcType > MINI_DISEQC) sendDiseqcStandby(); + // Disable tone first as it's imposed on voltage + secSetTone(SEC_TONE_OFF, 20); + // Disable voltage immediately and wait 50ms to prevent + // a fast power-off -> power-on sequence where diseqc equipment + // might not reset properly. + secSetVoltage(SEC_VOLTAGE_OFF, 50); - secSetVoltage(SEC_VOLTAGE_OFF, 0); - secSetTone(SEC_TONE_OFF, 15); - tuned = false; - standby = true;; + tuned = false; + standby = true;; close(fd); fd = -1; } @@ -268,8 +278,12 @@ void CFrontend::setMasterSlave(bool _slave) return; if(_slave) { - secSetVoltage(SEC_VOLTAGE_OFF, 0); - secSetTone(SEC_TONE_OFF, 15); + // Disable tone first as it's imposed on voltage + secSetTone(SEC_TONE_OFF, 20); + // Disable voltage immediately and wait 50ms to prevent + // a fast power-off -> power-on sequence where diseqc equipment + // might not reset properly. + secSetVoltage(SEC_VOLTAGE_OFF, 50); } slave = _slave; if(!slave) @@ -427,6 +441,7 @@ uint16_t CFrontend::getSignalNoiseRatio(void) const fop(ioctl, FE_READ_SNR, &snr); return snr; } + #if 0 //never used uint32_t CFrontend::getUncorrectedBlocks(void) const @@ -437,6 +452,7 @@ uint32_t CFrontend::getUncorrectedBlocks(void) const return blocks; } #endif + struct dvb_frontend_event CFrontend::getEvent(void) { struct dvb_frontend_event event; @@ -905,6 +921,7 @@ void CFrontend::sendDiseqcCommand(const struct dvb_diseqc_master_cmd *cmd, const for (int i = 0; i < cmd->msg_len; i++) printf("0x%X ", cmd->msg[i]); printf("\n"); + if (fop(ioctl, FE_DISEQC_SEND_MASTER_CMD, cmd) == 0) usleep(1000 * ms); } @@ -964,12 +981,12 @@ void CFrontend::setDiseqcType(const diseqc_t newDiseqcType, bool force) secSetTone(SEC_TONE_OFF, 0); secSetVoltage(SEC_VOLTAGE_13, 0); } - else if ((force && (newDiseqcType != NO_DISEQC)) || ((config.diseqcType <= MINI_DISEQC) - && (newDiseqcType > MINI_DISEQC))) { + else if ((force && (newDiseqcType != NO_DISEQC)) || + ((config.diseqcType <= MINI_DISEQC) && (newDiseqcType > MINI_DISEQC))) { secSetTone(SEC_TONE_OFF, 15); - sendDiseqcPowerOn(); sendDiseqcReset(); - secSetTone(SEC_TONE_ON, 20); + sendDiseqcPowerOn(); + secSetTone(SEC_TONE_ON, 50); } config.diseqcType = newDiseqcType; @@ -1077,7 +1094,7 @@ void CFrontend::setInput(t_satellite_position satellitePosition, uint32_t freque setDiseqc(sit->second.diseqc, polarization, frequency); return; } - if (sit->second.diseqc_order == COMMITED_FIRST) { + if (config.diseqc_order /*sit->second.diseqc_order*/ == COMMITED_FIRST) { if (setDiseqcSimple(sit->second.commited, polarization, frequency)) uncommitedInput = 255; sendUncommittedSwitchesCommand(sit->second.uncommited); @@ -1219,7 +1236,7 @@ bool CFrontend::sendUncommittedSwitchesCommand(int input) }; printf("[fe%d] uncommitted %d -> %d\n", fenumber, uncommitedInput, input); - if ((input < 0) || (uncommitedInput == input)) + if ((input < 0) /* || (uncommitedInput == input) */) return false; uncommitedInput = input; @@ -1250,7 +1267,6 @@ bool CFrontend::setDiseqcSimple(int sat_no, const uint8_t pol, const uint32_t fr secSetTone(SEC_TONE_OFF, 20); secSetVoltage(v, 100); - sendDiseqcCommand(&cmd, 100); return true; } @@ -1281,29 +1297,32 @@ void CFrontend::setDiseqc(int sat_no, const uint8_t pol, const uint32_t frequenc if (slave) return; + // Disable tone for at least 15ms secSetTone(SEC_TONE_OFF, 20); -#if 1 - fe_sec_voltage_t v = (pol & 1) ? SEC_VOLTAGE_13 : SEC_VOLTAGE_18; - secSetVoltage(v, 100); -#endif - sendDiseqcReset(); - usleep(50*1000); /* sleep at least 50 milli seconds */ - for (loop = 0; loop <= config.diseqcRepeats; loop++) { - if (config.diseqcType == MINI_DISEQC) - sendToneBurst(b, 1); + // Set wanted voltage and wait at least 100 ms, in case voltage was off. + secSetVoltage((pol & 1) ? SEC_VOLTAGE_13 : SEC_VOLTAGE_18, 100); +#if 0 /* FIXME: is this necessary ? */ + sendDiseqcReset(); + sendDiseqcPowerOn(); +#endif + + for (loop = 0; loop <= config.diseqcRepeats; loop++) { delay = 0; + if (config.diseqcType == DISEQC_1_1) { /* setup the uncommited switch first */ - delay = 60; // delay for 1.0 after 1.1 command + delay = 100; // delay for 1.0 after 1.1 command cmd.msg[2] = 0x39; /* port group = uncommited switches */ #if 1 /* for 16 inputs */ cmd.msg[3] = 0xF0 | ((sat_no / 4) & 0x03); - sendDiseqcCommand(&cmd, 100); /* send the command to setup second uncommited switch and wait 100 ms !!! */ + //send the command to setup second uncommited switch and + // wait 100 ms. + sendDiseqcCommand(&cmd, 100); #else /* for 64 inputs */ - uint8_t cascade_input[16] = { 0xF0, 0xF4, 0xF8, 0xFC, 0xF1, 0xF5, 0xF9, 0xFD, 0xF2, 0xF6, 0xFA, + uint8_t cascade_input[16] = {0xF0, 0xF4, 0xF8, 0xFC, 0xF1, 0xF5, 0xF9, 0xFD, 0xF2, 0xF6, 0xFA, 0xFE, 0xF3, 0xF7, 0xFB, 0xFF }; cmd.msg[3] = cascade_input[(sat_no / 4) & 0xFF]; @@ -1312,22 +1331,30 @@ void CFrontend::setDiseqc(int sat_no, const uint8_t pol, const uint32_t frequenc sendDiseqcCommand(&cmd, 100); /* send the command to setup second uncommited switch and wait 100 ms !!! */ #endif } - if (config.diseqcType >= DISEQC_1_0) { /* DISEQC 1.0 */ + if (config.diseqcType >= DISEQC_1_0) { /* DISEQC 1.0 */ usleep(delay * 1000); //cmd.msg[0] |= 0x01; /* repeated transmission */ cmd.msg[2] = 0x38; /* port group = commited switches */ - cmd.msg[3] = 0xF0 | ((sat_no % 4) << 2) | ((pol & 1) ? 0 : 2) | (high_band ? 1 : 0); + cmd.msg[3] = 0xF0 | ((sat_no & 0x0F) << 2) | ((pol & 1) ? 0 : 2) | (high_band ? 1 : 0); sendDiseqcCommand(&cmd, 100); /* send the command to setup second commited switch */ } cmd.msg[0] = 0xE1; usleep(50 * 1000); /* sleep at least 50 milli seconds */ } + // Toneburst should not be repeated and should be sent AFTER + // all diseqc, this means we don't support a toneburst switch + // before any diseqc equipment. + if (config.diseqcType == MINI_DISEQC) + sendToneBurst(b, 1); + usleep(25 * 1000); if (config.diseqcType == SMATV_REMOTE_TUNING) sendDiseqcSmatvRemoteTuningCommand(frequency); + + usleep(25 * 1000); } void CFrontend::setSec(const uint8_t /*sat_no*/, const uint8_t pol, const bool high_band) @@ -1336,46 +1363,45 @@ void CFrontend::setSec(const uint8_t /*sat_no*/, const uint8_t pol, const bool h fe_sec_tone_mode_t t = high_band ? SEC_TONE_ON : SEC_TONE_OFF; currentTransponder.polarization = pol; - secSetTone(t, 15); + // set tone off first + secSetTone(SEC_TONE_OFF, 20); + // set the desired voltage secSetVoltage(v, 100); + // set tone according to what's needed. + secSetTone(t, 15); } -void CFrontend::sendDiseqcPowerOn(void) +void CFrontend::sendDiseqcPowerOn(uint32_t ms) { - // FIXME power on can take a while. Should be wait - // more time here ? 15 ms enough for some switches ? printf("[fe%d] diseqc power on\n", fenumber); - sendDiseqcZeroByteCommand(0xe0, 0x10, 0x03); + // Send power on to 'all' equipment + sendDiseqcZeroByteCommand(0xe0, 0x00, 0x03, ms); } -void CFrontend::sendDiseqcReset(void) +void CFrontend::sendDiseqcReset(uint32_t ms) { printf("[fe%d] diseqc reset\n", fenumber); -#if 0 - /* Reset && Clear Reset */ - sendDiseqcZeroByteCommand(0xe0, 0x10, 0x00); - sendDiseqcZeroByteCommand(0xe0, 0x10, 0x01); -#else - sendDiseqcZeroByteCommand(0xe0, 0x00, 0x00); // enigma -#endif + // Send reset to 'all' equipment + sendDiseqcZeroByteCommand(0xe0, 0x00, 0x00, ms); } -void CFrontend::sendDiseqcStandby(void) +void CFrontend::sendDiseqcStandby(uint32_t ms) { printf("[fe%d] diseqc standby\n", fenumber); if (config.diseqcType == DISEQC_UNICABLE) sendEN50494TuningCommand(0, 0, 0, 2); /* en50494 switches don't seem to be hurt by this */ - sendDiseqcZeroByteCommand(0xe0, 0x10, 0x02); + // Send power off to 'all' equipment + sendDiseqcZeroByteCommand(0xe0, 0x00, 0x02, ms); } -void CFrontend::sendDiseqcZeroByteCommand(uint8_t framing_byte, uint8_t address, uint8_t command) +void CFrontend::sendDiseqcZeroByteCommand(uint8_t framing_byte, uint8_t address, uint8_t command, uint32_t ms) { struct dvb_diseqc_master_cmd diseqc_cmd = { {framing_byte, address, command, 0x00, 0x00, 0x00}, 3 }; - sendDiseqcCommand(&diseqc_cmd, 15); + sendDiseqcCommand(&diseqc_cmd, ms); } void CFrontend::sendDiseqcSmatvRemoteTuningCommand(const uint32_t frequency) diff --git a/src/zapit/src/getservices.cpp b/src/zapit/src/getservices.cpp index e33f06417..a506351f1 100644 --- a/src/zapit/src/getservices.cpp +++ b/src/zapit/src/getservices.cpp @@ -59,14 +59,14 @@ CServiceManager * CServiceManager::getInstance() return manager; } -bool CServiceManager::ParseScanXml(void) +bool CServiceManager::ParseScanXml(fe_type_t delsys) { if(scanInputParser) { delete scanInputParser; scanInputParser = NULL; } - frontendType = CFEManager::getInstance()->getLiveFE()->getInfo()->type; - switch (frontendType) { + //frontendType = CFEManager::getInstance()->getLiveFE()->getInfo()->type; + switch (delsys) { case FE_QPSK: scanInputParser = parseXmlFile(SATELLITES_XML); break; @@ -238,7 +238,7 @@ CZapitChannel* CServiceManager::FindChannelFuzzy(const t_channel_id channel_id, * to choose from and people are wondering why their ubouquets are no longer * working => because they had the wrong 's="x"' attribute. * TODO: think about mixed-mode (sat/cable/terrestrial) operation */ - if (frontendType == FE_QPSK && pos != ret->getSatellitePosition()) + if (ret->deltype == FE_QPSK && pos != ret->getSatellitePosition()) continue; /* match +-2MHz to make old ubouquets work with updated satellites.xml */ if (abs((int)ret->getFreqId() - (int)freq) < 3) @@ -252,7 +252,7 @@ bool CServiceManager::GetAllRadioChannels(ZapitChannelList &list, int flags) list.clear(); for (channel_map_iterator_t it = allchans.begin(); it != allchans.end(); ++it) { if (it->second.getServiceType() == ST_DIGITAL_RADIO_SOUND_SERVICE && - ((flags == 0) || (it->second.flags & flags))) + (it->second.flags & flags)) list.push_back(&(it->second)); } return (!list.empty()); @@ -263,47 +263,47 @@ bool CServiceManager::GetAllTvChannels(ZapitChannelList &list, int flags) list.clear(); for (channel_map_iterator_t it = allchans.begin(); it != allchans.end(); ++it) { if (it->second.getServiceType() != ST_DIGITAL_RADIO_SOUND_SERVICE && - ((flags == 0) || (it->second.flags & flags))) + (it->second.flags & flags)) list.push_back(&(it->second)); } return (!list.empty()); } -bool CServiceManager::GetAllHDChannels(ZapitChannelList &list) +bool CServiceManager::GetAllHDChannels(ZapitChannelList &list, int flags) { list.clear(); for (channel_map_iterator_t it = allchans.begin(); it != allchans.end(); ++it) { - if (it->second.isHD()) + if ((it->second.flags & flags) && it->second.isHD()) list.push_back(&(it->second)); } return (!list.empty()); } -bool CServiceManager::GetAllUnusedChannels(ZapitChannelList &list) +bool CServiceManager::GetAllUnusedChannels(ZapitChannelList &list, int flags) { list.clear(); for (channel_map_iterator_t it = allchans.begin(); it != allchans.end(); ++it) { - if (it->second.has_bouquet == false) + if ((it->second.flags & flags) && it->second.has_bouquet == false) list.push_back(&(it->second)); } return (!list.empty()); } -bool CServiceManager::GetAllSatelliteChannels(ZapitChannelList &list, t_satellite_position position) +bool CServiceManager::GetAllSatelliteChannels(ZapitChannelList &list, t_satellite_position position, int flags) { list.clear(); for (channel_map_iterator_t it = allchans.begin(); it != allchans.end(); ++it) { - if(it->second.getSatellitePosition() == position) + if((it->second.flags & flags) && it->second.getSatellitePosition() == position) list.push_back(&(it->second)); } return (!list.empty()); } -bool CServiceManager::GetAllTransponderChannels(ZapitChannelList &list, transponder_id_t tpid) +bool CServiceManager::GetAllTransponderChannels(ZapitChannelList &list, transponder_id_t tpid, int flags) { list.clear(); for (channel_map_iterator_t it = allchans.begin(); it != allchans.end(); ++it) { - if(it->second.getTransponderId() == tpid) + if((it->second.flags & flags) && it->second.getTransponderId() == tpid) list.push_back(&(it->second)); } return (!list.empty()); @@ -318,7 +318,7 @@ std::string CServiceManager::GetServiceName(t_channel_id channel_id) return ""; } -void CServiceManager::ParseTransponders(xmlNodePtr node, t_satellite_position satellitePosition, fe_type fe) +void CServiceManager::ParseTransponders(xmlNodePtr node, t_satellite_position satellitePosition, fe_type_t delsys) { uint8_t polarization = 0; @@ -331,7 +331,8 @@ void CServiceManager::ParseTransponders(xmlNodePtr node, t_satellite_position sa feparams.dvb_feparams.frequency = xmlGetNumericAttribute(node, "frq", 0); feparams.dvb_feparams.inversion = (fe_spectral_inversion) xmlGetNumericAttribute(node, "inv", 0); - switch (fe) { + switch (delsys) { + case FE_OFDM: case FE_QAM: feparams.dvb_feparams.u.qam.symbol_rate = xmlGetNumericAttribute(node, "sr", 0); feparams.dvb_feparams.u.qam.fec_inner = (fe_code_rate_t) xmlGetNumericAttribute(node, "fec", 0); @@ -340,8 +341,6 @@ void CServiceManager::ParseTransponders(xmlNodePtr node, t_satellite_position sa if (feparams.dvb_feparams.frequency > 1000*1000) feparams.dvb_feparams.frequency = feparams.dvb_feparams.frequency/1000; //transponderlist was read from tuxbox break; - case FE_OFDM: - break; default: feparams.dvb_feparams.u.qpsk.fec_inner = (fe_code_rate_t) xmlGetNumericAttribute(node, "fec", 0); feparams.dvb_feparams.u.qpsk.symbol_rate = xmlGetNumericAttribute(node, "sr", 0); @@ -356,11 +355,10 @@ void CServiceManager::ParseTransponders(xmlNodePtr node, t_satellite_position sa else feparams.dvb_feparams.frequency = (int) 1000 * (int) round ((double) feparams.dvb_feparams.frequency / (double) 1000); } - - freq_id_t freq = CREATE_FREQ_ID(feparams.dvb_feparams.frequency, fe != FE_QPSK); + freq_id_t freq = CREATE_FREQ_ID(feparams.dvb_feparams.frequency, delsys != FE_QPSK); transponder_id_t tid = CREATE_TRANSPONDER_ID64(freq, satellitePosition,original_network_id,transport_stream_id); - transponder t(frontendType, tid, feparams, polarization); + transponder t(delsys, tid, feparams, polarization); pair::iterator,bool> ret; ret = transponders.insert(transponder_pair_t(tid, t)); @@ -368,7 +366,7 @@ void CServiceManager::ParseTransponders(xmlNodePtr node, t_satellite_position sa t.dump("[zapit] duplicate in all transponders:"); /* read channels that belong to the current transponder */ - ParseChannels(node->xmlChildrenNode, transport_stream_id, original_network_id, satellitePosition, freq, polarization); + ParseChannels(node->xmlChildrenNode, transport_stream_id, original_network_id, satellitePosition, freq, polarization, delsys); /* hop to next transponder */ node = node->xmlNextNode; @@ -377,7 +375,7 @@ void CServiceManager::ParseTransponders(xmlNodePtr node, t_satellite_position sa return; } -void CServiceManager::ParseChannels(xmlNodePtr node, const t_transport_stream_id transport_stream_id, const t_original_network_id original_network_id, t_satellite_position satellitePosition, freq_id_t freq, uint8_t polarization) +void CServiceManager::ParseChannels(xmlNodePtr node, const t_transport_stream_id transport_stream_id, const t_original_network_id original_network_id, t_satellite_position satellitePosition, freq_id_t freq, uint8_t polarization, fe_type_t delsys) { int dummy = 0; int * have_ptr = &dummy; @@ -400,6 +398,9 @@ void CServiceManager::ParseChannels(xmlNodePtr node, const t_transport_stream_id uint16_t scrambled = xmlGetNumericAttribute(node, "s", 16); int number = xmlGetNumericAttribute(node, "num", 10); int flags = xmlGetNumericAttribute(node, "f", 10); + /* default if no flags present */ + if (flags == 0) + flags = CZapitChannel::UPDATED; t_channel_id chid = CREATE_CHANNEL_ID64; char *ptr = xmlGetAttribute(node, "action"); @@ -420,6 +421,7 @@ void CServiceManager::ParseChannels(xmlNodePtr node, const t_transport_stream_id CZapitChannel * channel = new CZapitChannel(name, chid, service_type, satellitePosition, freq); + channel->deltype = delsys; service_number_map_t * channel_numbers = (service_type == ST_DIGITAL_RADIO_SOUND_SERVICE) ? &radio_numbers : &tv_numbers; @@ -470,19 +472,23 @@ void CServiceManager::ParseChannels(xmlNodePtr node, const t_transport_stream_id void CServiceManager::FindTransponder(xmlNodePtr search) { while (search) { - bool sat = false; + fe_type_t delsys = FE_QPSK; - if (!(strcmp(xmlGetName(search), "sat"))) - sat = true; - else if (strcmp(xmlGetName(search), "cable") && strcmp(xmlGetName(search), "terrestrial")) { + if (!(strcmp(xmlGetName(search), "cable"))) + delsys = FE_QAM; + else if (!strcmp(xmlGetName(search), "terrestrial")) + delsys = FE_OFDM; + else if ((strcmp(xmlGetName(search), "sat"))) { search = search->xmlNextNode; continue; } - t_satellite_position satellitePosition = xmlGetSignedNumericAttribute(search, "position", 10); + //t_satellite_position satellitePosition = xmlGetSignedNumericAttribute(search, "position", 10); + char * name = xmlGetAttribute(search, "name"); + t_satellite_position satellitePosition = GetSatellitePosition(name); + DBG("going to parse dvb-%c provider %s\n", xmlGetName(search)[0], xmlGetAttribute(search, "name")); - /* ParseTransponders is only interested in sat / not sat, sp the real type does not matter */ - ParseTransponders(search->xmlChildrenNode, satellitePosition, sat ? FE_QPSK : FE_QAM); + ParseTransponders(search->xmlChildrenNode, satellitePosition, delsys); newfound++; search = search->xmlNextNode; } @@ -625,7 +631,7 @@ void CServiceManager::SaveMotorPositions() fclose(fd); } #endif -bool CServiceManager::InitSatPosition(t_satellite_position position, char * name, bool force) +bool CServiceManager::InitSatPosition(t_satellite_position position, char * name, bool force, int deltype) { if(force || (satellitePositions.find(position) == satellitePositions.end())) { satellitePositions[position].position = position; @@ -642,6 +648,7 @@ bool CServiceManager::InitSatPosition(t_satellite_position position, char * name satellitePositions[position].input = 0; satellitePositions[position].configured = 0; satellitePositions[position].cable_nid = 0; + satellitePositions[position].deltype = deltype; if(name) satellitePositions[position].name = name; return true; @@ -649,17 +656,55 @@ bool CServiceManager::InitSatPosition(t_satellite_position position, char * name return false; } +bool CServiceManager::LoadScanXml(fe_type_t delsys) +{ + if (ParseScanXml(delsys)) { + /* fake position for non-satellite */ + t_satellite_position position = 0; + + xmlNodePtr search = xmlDocGetRootElement(scanInputParser)->xmlChildrenNode; + while (search) { + if (!(strcmp(xmlGetName(search), "sat"))) { + position = xmlGetSignedNumericAttribute(search, "position", 10); + char * name = xmlGetAttribute(search, "name"); + InitSatPosition(position, name, false, delsys); + } else if(!(strcmp(xmlGetName(search), "cable"))) { + char * name = xmlGetAttribute(search, "name"); + position = fake_pos++; + InitSatPosition(position, name, false, delsys); + satellitePositions[position].cable_nid = xmlGetNumericAttribute(search, "nid", 0); + } + ParseSatTransponders(delsys, search, position); + search = search->xmlNextNode; + } + delete scanInputParser; + scanInputParser = NULL; + return true; + } + return false; +} + bool CServiceManager::LoadServices(bool only_current) { + if(CFEManager::getInstance()->getLiveFE() == NULL) + return false; + xmlDocPtr parser; - static bool satcleared = 0;//clear only once, because menu is static service_count = 0; printf("[zapit] Loading services, channel size %d ..\n", (int)sizeof(CZapitChannel)); - frontendType = CFEManager::getInstance()->getLiveFE()->getInfo()->type; + //frontendType = CFEManager::getInstance()->getLiveFE()->getInfo()->type; if(only_current) goto do_current; +#if 0 // FIXME: obsolete ? + static bool satcleared = 0;//clear only once, because menu is static + if(!satcleared) { + satellitePositions.clear(); + satcleared = 1; + } +#endif + TIMER_START(); allchans.clear(); transponders.clear(); @@ -669,40 +714,31 @@ bool CServiceManager::LoadServices(bool only_current) dup_numbers = false; fake_tid = fake_nid = 0; + fake_pos = 0xF00; - if (ParseScanXml()) { - t_satellite_position position = 0; - if(!satcleared) { - satellitePositions.clear(); - } - satcleared = 1; - - xmlNodePtr search = xmlDocGetRootElement(scanInputParser)->xmlChildrenNode; - while (search) { - if (!(strcmp(xmlGetName(search), "sat"))) { - position = xmlGetSignedNumericAttribute(search, "position", 10); - char * name = xmlGetAttribute(search, "name"); - InitSatPosition(position, name); - } else if (!strcmp(xmlGetName(search), "cable") || - !strcmp(xmlGetName(search), "terrestrial")) { - char * name = xmlGetAttribute(search, "name"); - InitSatPosition(position, name); - satellitePositions[position].cable_nid = xmlGetNumericAttribute(search, "nid", 0); - } - ParseSatTransponders(frontendType, search, position); - position++; - search = search->xmlNextNode; - } + if (CFEManager::getInstance()->haveSat()) { + INFO("Loading satellites..."); + LoadScanXml(FE_QPSK); + } + if (CFEManager::getInstance()->haveCable()) { + INFO("Loading cables..."); + LoadScanXml(FE_QAM); } parser = parseXmlFile(SERVICES_XML); if (parser != NULL) { xmlNodePtr search = xmlDocGetRootElement(parser)->xmlChildrenNode; while (search) { + char * name = xmlGetAttribute(search, "name"); + t_satellite_position position; if (!(strcmp(xmlGetName(search), "sat"))) { - t_satellite_position position = xmlGetSignedNumericAttribute(search, "position", 10); - char * name = xmlGetAttribute(search, "name"); - InitSatPosition(position, name); + position = xmlGetSignedNumericAttribute(search, "position", 10); + InitSatPosition(position, name, false, FE_QPSK); + } else { + position = GetSatellitePosition(name); + if (!position) + position = fake_pos++; + InitSatPosition(position, name, false, FE_QAM); } search = search->xmlNextNode; @@ -711,9 +747,11 @@ bool CServiceManager::LoadServices(bool only_current) xmlFreeDoc(parser); } - if(frontendType == FE_QPSK) { +#if 0 + if (CFEManager::getInstance()->haveSat()) { LoadMotorPositions(); } +#endif LoadProviderMap(); printf("[zapit] %d services loaded (%d)...\n", service_count, (int)allchans.size()); @@ -767,7 +805,7 @@ void CServiceManager::CopyFile(char * from, char * to) void CServiceManager::WriteSatHeader(FILE * fd, sat_config_t &config) { - switch (frontendType) { + switch (config.deltype) { case FE_QPSK: /* satellite */ fprintf(fd, "\t\n", config.name.c_str(), config.position, config.diseqc, config.uncommited); @@ -816,6 +854,8 @@ void CServiceManager::SaveServices(bool tocopy, bool if_changed, bool no_deleted continue; } for (channel_map_iterator_t ccI = allchans.begin(); ccI != allchans.end(); ++ccI) { + if(ccI->second.flags & CZapitChannel::NOT_FOUND) + continue; if(ccI->second.getTransponderId() == tI->first) { if(!satdone) { WriteSatHeader(fd, spos_it->second); @@ -838,7 +878,7 @@ void CServiceManager::SaveServices(bool tocopy, bool if_changed, bool no_deleted if(tpdone) fprintf(fd, "\t\t\n"); } if(satdone) { - switch (frontendType) { + switch (spos_it->second.deltype) { case FE_QPSK: fprintf(fd, "\t\n"); break; @@ -880,16 +920,16 @@ bool CServiceManager::CopyCurrentServices(transponder_id_t tpid) aI = allchans.find(cI->second.getChannelID()); if(aI == allchans.end()) { channel_insert_res_t ret = allchans.insert(channel_pair_t (cI->second.getChannelID(), cI->second)); - ret.first->second.flags |= CZapitChannel::NEW; + ret.first->second.flags = CZapitChannel::NEW; updated = true; -printf("CServiceManager::CopyCurrentServices: [%s] add\n", cI->second.getName().c_str()); + printf("CServiceManager::CopyCurrentServices: [%s] add\n", cI->second.getName().c_str()); } else { if(cI->second.scrambled != aI->second.scrambled || cI->second.getName() != aI->second.getName()) { aI->second.setName(cI->second.getName()); aI->second.scrambled = cI->second.scrambled; - aI->second.flags |= CZapitChannel::UPDATED; + aI->second.flags = CZapitChannel::UPDATED; updated = true; -printf("CServiceManager::CopyCurrentServices: [%s] replace\n", cI->second.getName().c_str()); + printf("CServiceManager::CopyCurrentServices: [%s] replace\n", cI->second.getName().c_str()); } } } @@ -897,12 +937,12 @@ printf("CServiceManager::CopyCurrentServices: [%s] replace\n", cI->second.getNam if(aI->second.getTransponderId() == tpid) { channel_map_iterator_t dI = curchans.find(aI->second.getChannelID()); if(dI == curchans.end()) { - aI->second.flags |= CZapitChannel::REMOVED; + aI->second.flags = CZapitChannel::REMOVED; updated = true; -printf("CServiceManager::CopyCurrentServices: [%s] remove\n", aI->second.getName().c_str()); + printf("CServiceManager::CopyCurrentServices: [%s] remove\n", aI->second.getName().c_str()); } else if(aI->second.flags & CZapitChannel::REMOVED) { -printf("CServiceManager::CopyCurrentServices: [%s] restore\n", aI->second.getName().c_str()); - aI->second.flags = 0; + printf("CServiceManager::CopyCurrentServices: [%s] restore\n", aI->second.getName().c_str()); + aI->second.flags = CZapitChannel::UPDATED; updated = true; } } @@ -961,15 +1001,19 @@ bool CServiceManager::SaveCurrentServices(transponder_id_t tpid) return false; } - switch (frontendType) { + const char * footer = ""; + switch (tI->second.deltype) { case FE_QPSK: /* satellite */ sprintf(satstr, "\t<%s name=\"%s\" position=\"%hd\">\n", "sat", spos_it->second.name.c_str(), satellitePosition); + footer = ""; break; case FE_QAM: /* cable */ sprintf(satstr, "\t<%s name=\"%s\"\n", "cable", spos_it->second.name.c_str()); + footer = ""; break; case FE_OFDM: sprintf(satstr, "\t<%s name=\"%s\"\n", "terrestrial", spos_it->second.name.c_str()); + footer = ""; break; default: break; @@ -979,7 +1023,7 @@ bool CServiceManager::SaveCurrentServices(transponder_id_t tpid) fprintf(fd, "\n\n"); } else { fgets(buffer, 255, fd1); - while(!feof(fd1) && !strstr(buffer, satfound ? "" : "")) { + while(!feof(fd1) && !strstr(buffer, satfound ? footer : "")) { if(!satfound && !strcmp(buffer, satstr)) satfound = 1; fputs(buffer, fd); @@ -1006,9 +1050,9 @@ bool CServiceManager::SaveCurrentServices(transponder_id_t tpid) } if(tpdone) { fprintf(fd, "\t\t\n"); - fprintf(fd, "\t\n"); + fprintf(fd, "\t%s\n", footer); } else if(satfound) - fprintf(fd, "\t\n"); + fprintf(fd, "\t%s\n", footer); if(fd1) { fgets(buffer, 255, fd1); while(!feof(fd1)) { diff --git a/src/zapit/src/scan.cpp b/src/zapit/src/scan.cpp index 3c3614d2f..785a28a8d 100644 --- a/src/zapit/src/scan.cpp +++ b/src/zapit/src/scan.cpp @@ -575,8 +575,10 @@ bool CServiceScan::ScanProviders() } else { Cleanup(false); frontend->setTsidOnid(0); +#if 0 t_channel_id live_channel_id = CZapit::getInstance()->GetCurrentChannelID(); CZapit::getInstance()->ZapIt(live_channel_id, false); +#endif } return (found_channels != 0); @@ -638,8 +640,10 @@ bool CServiceScan::ScanTransponder() } else { Cleanup(false); frontend->setTsidOnid(0); +#if 0 t_channel_id live_channel_id = CZapit::getInstance()->GetCurrentChannelID(); CZapit::getInstance()->ZapIt(live_channel_id, false); +#endif } return (found_channels != 0); diff --git a/src/zapit/src/scansdt.cpp b/src/zapit/src/scansdt.cpp index 1d1b5b538..cfd7939f0 100644 --- a/src/zapit/src/scansdt.cpp +++ b/src/zapit/src/scansdt.cpp @@ -49,6 +49,7 @@ CSdt::CSdt(t_satellite_position spos, freq_id_t frq, bool curr, int dnum) current = curr; transport_stream_id = 0; original_network_id = 0; + //FIXME sdt update ?? cable = (CServiceScan::getInstance()->GetFrontend()->getInfo()->type == FE_QAM); } @@ -277,6 +278,7 @@ bool CSdt::ParseServiceDescriptor(ServiceDescription * service, ServiceDescripto CZapitChannel * channel = new CZapitChannel(serviceName, channel_id, real_type, satellitePosition, freq_id); + channel->deltype = cable ? FE_QAM : FE_QPSK; CServiceManager::getInstance()->AddCurrentChannel(channel); @@ -319,13 +321,13 @@ bool CSdt::ParseServiceDescriptor(ServiceDescription * service, ServiceDescripto if (channel) { channel->setName(serviceName); channel->setServiceType(real_type); - channel->flags &= ~CZapitChannel::REMOVED; - channel->flags |= CZapitChannel::UPDATED; + channel->flags = CZapitChannel::UPDATED; } else { channel = new CZapitChannel(serviceName, channel_id, real_type, satellitePosition, freq_id); - CServiceManager::getInstance()->AddChannel(channel); + channel->deltype = cable ? FE_QAM : FE_QPSK; + channel->flags = CZapitChannel::UPDATED; /* mark channel as new, if this satellite already have channels */ if (CServiceScan::getInstance()->SatHaveChannels()) channel->flags = CZapitChannel::NEW; diff --git a/src/zapit/src/transponder.cpp b/src/zapit/src/transponder.cpp index a5531982f..431d4dff7 100644 --- a/src/zapit/src/transponder.cpp +++ b/src/zapit/src/transponder.cpp @@ -37,7 +37,7 @@ transponder::transponder(fe_type_t fType, const transponder_id_t t_id, const Fro satellitePosition = -(satellitePosition & 0xFFF); else satellitePosition = satellitePosition & 0xFFF; - type = fType; + deltype = fType; } transponder::transponder() @@ -48,12 +48,12 @@ transponder::transponder() original_network_id = 0; polarization = 0; satellitePosition = 0; - type = FE_QPSK; + deltype = FE_QPSK; } bool transponder::operator==(const transponder& t) const { - if (type != FE_OFDM) + if (deltype != FE_OFDM) return ( (satellitePosition == t.satellitePosition) && //(transport_stream_id == t.transport_stream_id) && @@ -75,7 +75,7 @@ bool transponder::compare(const transponder& t) const const struct dvb_frontend_parameters *dvb_feparams1 = &feparams.dvb_feparams; const struct dvb_frontend_parameters *dvb_feparams2 = &t.feparams.dvb_feparams; - if (type == FE_QAM) { + if (deltype == FE_QAM) { ret = ( (t == (*this)) && (dvb_feparams1->u.qam.symbol_rate == dvb_feparams2->u.qam.symbol_rate) && @@ -84,14 +84,14 @@ bool transponder::compare(const transponder& t) const (dvb_feparams1->u.qam.modulation == dvb_feparams2->u.qam.modulation || dvb_feparams1->u.qam.modulation == QAM_AUTO || dvb_feparams2->u.qam.modulation == QAM_AUTO) ); - } else if (type == FE_QPSK) { + } else if (deltype == FE_QPSK) { ret = ( (t == (*this)) && (dvb_feparams1->u.qpsk.symbol_rate == dvb_feparams2->u.qpsk.symbol_rate) && (dvb_feparams1->u.qpsk.fec_inner == dvb_feparams2->u.qpsk.fec_inner || dvb_feparams1->u.qpsk.fec_inner == FEC_AUTO || dvb_feparams2->u.qpsk.fec_inner == FEC_AUTO) ); - } else if (type == FE_OFDM) { + } else if (deltype == FE_OFDM) { ret = ( (t == (*this)) && (dvb_feparams1->u.ofdm.bandwidth == dvb_feparams2->u.ofdm.bandwidth) && (dvb_feparams1->u.ofdm.code_rate_HP == dvb_feparams2->u.ofdm.code_rate_HP || @@ -109,20 +109,20 @@ void transponder::dumpServiceXml(FILE * fd) { struct dvb_frontend_parameters *dvb_feparams = &feparams.dvb_feparams; - if (type == FE_QAM) { + if (deltype == FE_QAM) { fprintf(fd, "\t\t\n", transport_stream_id, original_network_id, dvb_feparams->frequency, dvb_feparams->inversion, dvb_feparams->u.qam.symbol_rate, dvb_feparams->u.qam.fec_inner, dvb_feparams->u.qam.modulation); - } else if (type == FE_QPSK) { + } else if (deltype == FE_QPSK) { fprintf(fd, "\t\t\n", transport_stream_id, original_network_id, dvb_feparams->frequency, dvb_feparams->inversion, dvb_feparams->u.qpsk.symbol_rate, dvb_feparams->u.qpsk.fec_inner, polarization); - } else if (type == FE_OFDM) { + } else if (deltype == FE_OFDM) { fprintf(fd, "\t\t\n", transport_stream_id, original_network_id, dvb_feparams->frequency, dvb_feparams->inversion, @@ -137,15 +137,15 @@ void transponder::dump(std::string label) { struct dvb_frontend_parameters *dvb_feparams = &feparams.dvb_feparams; - if (type == FE_QAM) + if (deltype == FE_QAM) printf("%s tp-id %016" PRIx64 " freq %d rate %d fec %d mod %d\n", label.c_str(), transponder_id, dvb_feparams->frequency, dvb_feparams->u.qam.symbol_rate, dvb_feparams->u.qam.fec_inner, dvb_feparams->u.qam.modulation); - else if (type == FE_QPSK) + else if (deltype == FE_QPSK) printf("%s tp-id %016" PRIx64 " freq %d rate %d fec %d pol %d\n", label.c_str(), transponder_id, dvb_feparams->frequency, dvb_feparams->u.qpsk.symbol_rate, dvb_feparams->u.qpsk.fec_inner, polarization); - else if (type == FE_OFDM) + else if (deltype == FE_OFDM) printf("%s tp-id %016" PRIx64 " freq %d bw %d coderate %d\n", label.c_str(), transponder_id, dvb_feparams->frequency, dvb_feparams->u.ofdm.bandwidth, dvb_feparams->u.ofdm.code_rate_HP); @@ -178,18 +178,18 @@ std::string transponder::description() const char *bw[4] = { "8MHz", "7MHz", "6MHz", "auto" }; int b; - switch(type) { + switch(deltype) { case FE_QPSK: - CFrontend::getDelSys(type, dvb_feparams->u.qpsk.fec_inner, dvbs_get_modulation(dvb_feparams->u.qpsk.fec_inner), f, s, m); + CFrontend::getDelSys(deltype, dvb_feparams->u.qpsk.fec_inner, dvbs_get_modulation(dvb_feparams->u.qpsk.fec_inner), f, s, m); snprintf(buf, sizeof(buf), "%d %c %d %s %s %s ", dvb_feparams->frequency/1000, pol(polarization), dvb_feparams->u.qpsk.symbol_rate/1000, f, s, m); break; case FE_QAM: - CFrontend::getDelSys(type, dvb_feparams->u.qam.fec_inner, dvb_feparams->u.qam.modulation, f, s, m); + CFrontend::getDelSys(deltype, dvb_feparams->u.qam.fec_inner, dvb_feparams->u.qam.modulation, f, s, m); snprintf(buf, sizeof(buf), "%d %d %s %s %s ", dvb_feparams->frequency/1000, dvb_feparams->u.qam.symbol_rate/1000, f, s, m); break; case FE_OFDM: - CFrontend::getDelSys(type, dvb_feparams->u.ofdm.code_rate_HP, dvb_feparams->u.ofdm.constellation, f, s, m); - CFrontend::getDelSys(type, dvb_feparams->u.ofdm.code_rate_LP, dvb_feparams->u.ofdm.constellation, f2, s, m); + CFrontend::getDelSys(deltype, dvb_feparams->u.ofdm.code_rate_HP, dvb_feparams->u.ofdm.constellation, f, s, m); + CFrontend::getDelSys(deltype, dvb_feparams->u.ofdm.code_rate_LP, dvb_feparams->u.ofdm.constellation, f2, s, m); b = dvb_feparams->u.ofdm.bandwidth; if (b > 3) b = 3; diff --git a/src/zapit/src/zapit.cpp b/src/zapit/src/zapit.cpp index fc76c2539..d60b7afad 100644 --- a/src/zapit/src/zapit.cpp +++ b/src/zapit/src/zapit.cpp @@ -93,6 +93,11 @@ extern cAudio *audioDecoder; extern cDemux *audioDemux; extern cDemux *videoDemux; +#ifdef ENABLE_PIP +extern cVideo *pipDecoder; +cDemux *pipDemux; +#endif + cDemux *pcrDemux = NULL; /* the map which stores the wanted cable/satellites */ @@ -130,6 +135,8 @@ CZapit::CZapit() currentMode = 0; current_volume = 100; volume_percent = 0; + pip_channel_id = 0; + pip_fe = NULL; } CZapit::~CZapit() @@ -483,7 +490,19 @@ bool CZapit::ZapIt(const t_channel_id channel_id, bool forupdate, bool startplay INFO("[zapit] zap to %s (%" PRIx64 " tp %" PRIx64 ")", newchannel->getName().c_str(), newchannel->getChannelID(), newchannel->getTransponderId()); +#ifdef ENABLE_PIP + if (pip_fe) + CFEManager::getInstance()->lockFrontend(pip_fe); CFrontend * fe = CFEManager::getInstance()->allocateFE(newchannel); + if (pip_fe) + CFEManager::getInstance()->unlockFrontend(pip_fe); + if (fe == NULL) { + StopPip(); + fe = CFEManager::getInstance()->allocateFE(newchannel); + } +#else + CFrontend * fe = CFEManager::getInstance()->allocateFE(newchannel); +#endif if(fe == NULL) { ERROR("Cannot get frontend\n"); return false; @@ -533,6 +552,11 @@ bool CZapit::ZapIt(const t_channel_id channel_id, bool forupdate, bool startplay } SendEvent(CZapitClient::EVT_TUNE_COMPLETE, &live_channel_id, sizeof(t_channel_id)); +#if 0 // def ENABLE_PIP + if (transponder_change && (live_fe == pip_fe)) + StopPip(); +#endif + if (current_channel->getServiceType() == ST_NVOD_REFERENCE_SERVICE) { current_is_nvod = true; return true; @@ -582,6 +606,79 @@ bool CZapit::ZapIt(const t_channel_id channel_id, bool forupdate, bool startplay return true; } +#ifdef ENABLE_PIP +bool CZapit::StopPip() +{ + if (pip_channel_id) { + INFO("[pip] stop %llx", pip_channel_id); + CCamManager::getInstance()->Stop(pip_channel_id, CCamManager::PIP); + pipDemux->Stop(); + pipDecoder->Stop(); + pip_fe = NULL; + pip_channel_id = 0; + return true; + } + return false; +} + +bool CZapit::StartPip(const t_channel_id channel_id) +{ + CZapitChannel* newchannel; + bool transponder_change; + + + if((newchannel = CServiceManager::getInstance()->FindChannel(channel_id)) == NULL) { + printf("zapit_to_record: channel_id " PRINTF_CHANNEL_ID_TYPE " not found", channel_id); + return false; + } + INFO("[pip] zap to %s (%llx tp %llx)", newchannel->getName().c_str(), newchannel->getChannelID(), newchannel->getTransponderId()); + + CFEManager::getInstance()->lockFrontend(live_fe); + CFrontend * frontend = CFEManager::getInstance()->allocateFE(newchannel); + CFEManager::getInstance()->unlockFrontend(live_fe); + if(frontend == NULL) { + ERROR("Cannot get frontend\n"); + return false; + } + StopPip(); + if(!TuneChannel(frontend, newchannel, transponder_change)) + return false; + + if(!ParsePatPmt(newchannel)) + return false; + + pip_fe = frontend; + + INFO("[pip] vpid %X apid %X pcr %X", newchannel->getVideoPid(), newchannel->getAudioPid(), newchannel->getPcrPid()); + /* FIXME until proper demux management */ + int dnum = newchannel->getPipDemux(); + if (pipDemux && (pipDemux->getUnit() != dnum)) { + pipDecoder->SetDemux(NULL); + delete pipDemux; + pipDemux = new cDemux(dnum); + pipDemux->Open(DMX_PIP_CHANNEL); + pipDecoder->SetDemux(pipDemux); + } + if (CFEManager::getInstance()->getFrontendCount() > 1) + cDemux::SetSource(dnum, pip_fe->getNumber()); +#if 0 + pipDecoder->SetSyncMode(AVSYNC_DISABLED); + pipDemux->SetSyncMode(AVSYNC_DISABLED); +#endif + + pipDecoder->SetStreamType((VIDEO_FORMAT)newchannel->type); + pipDemux->pesFilter(newchannel->getVideoPid()); + pipDecoder->Start(0, newchannel->getPcrPid(), newchannel->getVideoPid()); + pipDemux->Start(); + pip_channel_id = channel_id; + + //pipDecoder->setBlank(false); + + CCamManager::getInstance()->Start(newchannel->getChannelID(), CCamManager::PIP); + return true; +} +#endif + bool CZapit::ZapForRecord(const t_channel_id channel_id) { CZapitChannel* newchannel; @@ -611,6 +708,10 @@ bool CZapit::ZapForRecord(const t_channel_id channel_id) goto again; } +#ifdef ENABLE_PIP + if (transponder_change && (frontend == pip_fe)) + StopPip(); +#endif if(!ParsePatPmt(newchannel)) { if (retry < 1) @@ -916,11 +1017,15 @@ bool CZapit::ParseCommand(CBasicMessage::Header &rmsg, int connfd) CZapitMessages::responseZapComplete msgResponseZapComplete; VALGRIND_PARANOIA(msgResponseZapComplete); CBasicServer::receive_data(connfd, &msgZaptoServiceID, sizeof(msgZaptoServiceID)); - if(msgZaptoServiceID.record) { + if(msgZaptoServiceID.record) msgResponseZapComplete.zapStatus = ZapForRecord(msgZaptoServiceID.channel_id); - } else { +#ifdef ENABLE_PIP + else if(msgZaptoServiceID.pip) + msgResponseZapComplete.zapStatus = StartPip(msgZaptoServiceID.channel_id); +#endif + else msgResponseZapComplete.zapStatus = ZapTo(msgZaptoServiceID.channel_id, (rmsg.cmd == CZapitMessages::CMD_ZAPTO_SUBSERVICEID)); - } + CBasicServer::send_data(connfd, &msgResponseZapComplete, sizeof(msgResponseZapComplete)); break; } @@ -1130,7 +1235,7 @@ bool CZapit::ParseCommand(CBasicMessage::Header &rmsg, int connfd) DBG("[zapit] sending EVT_SERVICES_CHANGED\n"); SendEvent(CZapitClient::EVT_SERVICES_CHANGED); live_fe->setTsidOnid(0); - ZapIt(live_channel_id, current_is_nvod); + //ZapIt(live_channel_id, current_is_nvod); //SendEvent(CZapitClient::EVT_BOUQUETS_CHANGED); break; } @@ -1485,6 +1590,13 @@ bool CZapit::ParseCommand(CBasicMessage::Header &rmsg, int connfd) break; } +#ifdef ENABLE_PIP + case CZapitMessages::CMD_STOP_PIP: + StopPip(); + SendCmdReady(connfd); + break; +#endif + case CZapitMessages::CMD_SB_LOCK_PLAYBACK: { CZapitMessages::commandBoolean msgBool; @@ -1631,6 +1743,7 @@ bool CZapit::ParseCommand(CBasicMessage::Header &rmsg, int connfd) satellitePosition, 0 ); + channel->deltype = live_fe->getType(); CServiceManager::getInstance()->AddNVODChannel(channel); } @@ -2061,6 +2174,9 @@ void CZapit::enterStandby(void) SaveAudioMap(); SaveVolumeMap(); StopPlayBack(true); +#ifdef ENABLE_PIP + StopPip(); +#endif if(!(currentMode & RECORD_MODE)) { pmt_stop_update_filter(&pmt_update_fd); @@ -2166,10 +2282,42 @@ bool CZapit::Start(Z_start_arg *ZapStart_arg) audioDemux = new cDemux(); audioDemux->Open(DMX_AUDIO_CHANNEL); - videoDecoder = new cVideo(video_mode, videoDemux->getChannel(), videoDemux->getBuffer()); +#ifdef ENABLE_PIP + /* FIXME until proper demux management */ + int dnum = 1; + if (CFEManager::getInstance()->getFrontendCount() < MAX_DMX_UNITS) + dnum = PIP_DEMUX; +#endif +#ifdef BOXMODEL_APOLLO + videoDecoder = cVideo::GetDecoder(0); + audioDecoder = cAudio::GetDecoder(0); + + videoDecoder->SetDemux(videoDemux); + videoDecoder->SetVideoSystem(video_mode); videoDecoder->Standby(false); - audioDecoder = new cAudio(audioDemux->getBuffer(), videoDecoder->GetTVEnc(), NULL /*videoDecoder->GetTVEncSD()*/); + audioDecoder->SetDemux(audioDemux); + audioDecoder->SetVideo(videoDecoder); + +#ifdef ENABLE_PIP + pipDemux = new cDemux(dnum); + pipDemux->Open(DMX_PIP_CHANNEL); + pipDecoder = cVideo::GetDecoder(1); + pipDecoder->SetDemux(pipDemux); +#endif +#else + videoDecoder = new cVideo(video_mode, videoDemux->getChannel(), videoDemux->getBuffer()); + videoDecoder->Standby(false); + + audioDecoder = new cAudio(audioDemux->getBuffer(), videoDecoder->GetTVEnc(), NULL /*videoDecoder->GetTVEncSD()*/); + +#ifdef ENABLE_PIP + pipDemux = new cDemux(dnum); + pipDemux->Open(DMX_PIP_CHANNEL); + pipDecoder = new cVideo(video_mode, pipDemux->getChannel(), pipDemux->getBuffer(), 1); +#endif +#endif + videoDecoder->SetAudioHandle(audioDecoder->GetHandle()); /* set initial volume with 100% */ @@ -2377,6 +2525,11 @@ void CZapit::run() delete pmtDemux; delete audioDecoder; delete audioDemux; +#ifdef ENABLE_PIP + StopPip(); + delete pipDecoder; + delete pipDemux; +#endif INFO("demuxes/decoders deleted");