From e3887083391d10f8cfcd1d8ac65a99d9978f05f2 Mon Sep 17 00:00:00 2001 From: Klaus Schmidinger Date: Sun, 27 Jan 2008 18:00:00 +0100 Subject: =?UTF-8?q?Version=201.5.14=20-=20Fixed=20the=20Play=20function=20?= =?UTF-8?q?in=20the=20pictures=20plugin.=20-=20Updated=20the=20Finnish=20O?= =?UTF-8?q?SD=20texts=20(thanks=20to=20Rolf=20Ahrenberg).=20-=20Updated=20?= =?UTF-8?q?the=20Makefile=20of=20the=20skincurses=20plugin=20(thanks=20to?= =?UTF-8?q?=20Rolf=20Ahrenberg).=20-=20The=20new=20option=20--localedir=20?= =?UTF-8?q?can=20be=20used=20to=20set=20the=20locale=20directory=20at=20ru?= =?UTF-8?q?ntime=20=20=20(based=20on=20a=20patch=20from=20Stefan=20Huelswi?= =?UTF-8?q?tt).=20-=20Fixed=20finding=20new=20transponders=20(thanks=20to?= =?UTF-8?q?=20Winfried=20K=C3=B6hler).=20-=20Implemented=20handling=20of?= =?UTF-8?q?=20DVB-S2=20(thanks=20to=20Marco=20Schl=C3=BC=C3=9Fler=20and=20?= =?UTF-8?q?Reinhard=20Nissl=20=20=20for=20a=20patch=20that=20was=20used=20?= =?UTF-8?q?to=20implement=20this).=20VDR=20now=20requires=20the=20"multipr?= =?UTF-8?q?oto"=20=20=20DVB=20driver,=20e.g.=20from=20http://jusst.de/hg/m?= =?UTF-8?q?ultiproto.=20-=20Removed=20switching=20to=20the=20next=20higher?= =?UTF-8?q?=20or=20lower=20channel=20if=20the=20current=20channel=20=20=20?= =?UTF-8?q?is=20not=20available,=20in=20order=20to=20allow=20staying=20on?= =?UTF-8?q?=20an=20encrypted=20channel=20that=20takes=20=20=20a=20while=20?= =?UTF-8?q?for=20the=20CAM=20to=20start=20decrypting.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CONTRIBUTORS | 7 + HISTORY | 15 ++ PLUGINS/src/pictures/HISTORY | 6 + PLUGINS/src/pictures/entry.c | 7 +- PLUGINS/src/pictures/pictures.c | 4 +- PLUGINS/src/pictures/player.c | 3 +- PLUGINS/src/pictures/po/fi_FI.po | 32 +++++ PLUGINS/src/skincurses/HISTORY | 4 + PLUGINS/src/skincurses/Makefile | 15 +- channels.c | 218 ++++++++++++++++++---------- channels.h | 22 ++- config.h | 10 +- device.c | 23 ++- device.h | 8 +- dvbdevice.c | 301 ++++++++++++++++++++++++--------------- dvbdevice.h | 10 +- i18n.c | 6 +- i18n.h | 6 +- menu.c | 80 ++--------- menuitems.c | 60 +++++++- menuitems.h | 13 +- nit.c | 44 +++--- pat.c | 3 +- po/ca_ES.po | 44 ++++-- po/cs_CZ.po | 44 ++++-- po/da_DK.po | 44 ++++-- po/de_DE.po | 44 ++++-- po/el_GR.po | 44 ++++-- po/es_ES.po | 44 ++++-- po/et_EE.po | 44 ++++-- po/fi_FI.po | 46 ++++-- po/fr_FR.po | 44 ++++-- po/hr_HR.po | 44 ++++-- po/hu_HU.po | 44 ++++-- po/it_IT.po | 44 ++++-- po/nl_NL.po | 44 ++++-- po/nn_NO.po | 44 ++++-- po/pl_PL.po | 44 ++++-- po/pt_PT.po | 44 ++++-- po/ro_RO.po | 44 ++++-- po/ru_RU.po | 44 ++++-- po/sl_SI.po | 44 ++++-- po/sv_SE.po | 44 ++++-- po/tr_TR.po | 44 ++++-- po/uk_UA.po | 44 ++++-- sdt.c | 3 +- vdr.5 | 18 ++- vdr.c | 21 ++- 48 files changed, 1298 insertions(+), 611 deletions(-) create mode 100644 PLUGINS/src/pictures/po/fi_FI.po diff --git a/CONTRIBUTORS b/CONTRIBUTORS index 7f5acb8..d79f152 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -223,6 +223,7 @@ Stefan Huelswitt for suggesting to increase the APIVERSION to allow plugins that relied on the cStatus::MsgSetVolume() bug to react properly for improving the 'i18n' target in the Makefile to avoid unnecessary work + for a patch that was used to implement the --localedir option Ulrich Röder for pointing out that there are channels that have a symbol rate higher than 27500 @@ -1037,6 +1038,7 @@ Rolf Ahrenberg for implementing cDevice::CloseFilter() for some fixes to PLUGINS.html for fixing handling CONFDIR + for updating the Makefile of the skincurses plugin Ralf Klueber for reporting a bug in cutting a recording if there is only a single editing mark @@ -1155,6 +1157,7 @@ Reinhard Nissl for fixing assembling PS1 packets in cTS2PES::instant_repack() for a patch that was used to fix handling small PES packets that caused subtitles to be displayed late in live mode + for a patch that was used to implement handling of DVB-S2 Richard Robson for reporting freezing replay if a timer starts while in Transfer Mode from the @@ -1443,6 +1446,7 @@ Marco Schl for fixing the description of DeviceSetAvailableTrack() and cReceiver(), and adding an example ~cMyReceiver() in PLUGINS.html (thanks to Marco Schlüßler). for fixing checking compatibility mode for old subtitles plugin + for a patch that was used to implement handling of DVB-S2 Jürgen Schmitz for reporting a bug in displaying the current channel when switching via the SVDRP @@ -2263,3 +2267,6 @@ Jiri Dobry Benjamin Hess for enhancing the SVDRP command CLRE to allow clearing the EPG data of a particular channel + +Winfried Koehler + for fixing finding new transponders diff --git a/HISTORY b/HISTORY index 3c95325..1400840 100644 --- a/HISTORY +++ b/HISTORY @@ -5563,3 +5563,18 @@ Video Disk Recorder Revision History - Added a section about "Logging" to PLUGINS.html (suggested by Torsten Kunkel). - Enhanced the SVDRP command CLRE to allow clearing the EPG data of a particular channel (thanks to Benjamin Hess). + +2008-01-27: Version 1.5.14 + +- Fixed the Play function in the pictures plugin. +- Updated the Finnish OSD texts (thanks to Rolf Ahrenberg). +- Updated the Makefile of the skincurses plugin (thanks to Rolf Ahrenberg). +- The new option --localedir can be used to set the locale directory at runtime + (based on a patch from Stefan Huelswitt). +- Fixed finding new transponders (thanks to Winfried Köhler). +- Implemented handling of DVB-S2 (thanks to Marco Schlüßler and Reinhald Nissl + for a patch that was used to implement this). VDR now requires the "multiproto" + DVB driver, e.g. from http://jusst.de/hg/multiproto. +- Removed switching to the next higher or lower channel if the current channel + is not available, in order to allow staying on an encrypted channel that takes + a while for the CAM to start decrypting. diff --git a/PLUGINS/src/pictures/HISTORY b/PLUGINS/src/pictures/HISTORY index c04a628..462c02f 100644 --- a/PLUGINS/src/pictures/HISTORY +++ b/PLUGINS/src/pictures/HISTORY @@ -4,3 +4,9 @@ VDR Plugin 'pictures' Revision History 2008-01-13: Version 0.0.1 - Initial revision. + +2008-01-19: Version 0.0.2 + +- Fixed the Play function (when used from a directory in the pictures menu + it always started with the next directory). +- Added Finnish texts (thanks to Rolf Ahrenberg ). diff --git a/PLUGINS/src/pictures/entry.c b/PLUGINS/src/pictures/entry.c index 006a359..e03858c 100644 --- a/PLUGINS/src/pictures/entry.c +++ b/PLUGINS/src/pictures/entry.c @@ -3,7 +3,7 @@ * * See the README file for copyright information and how to reach the author. * - * $Id: entry.c 1.1 2008/01/06 09:52:41 kls Exp $ + * $Id: entry.c 1.2 2008/01/18 15:49:51 kls Exp $ */ #include "entry.h" @@ -138,6 +138,11 @@ const cPictureEntry *cPictureEntry::NextPicture(const cPictureEntry *This) const return pe; } } + else if (IsDirectory()) { + const cPictureEntry *p = FirstPicture(); + if (p) + return p; + } if (parent) return parent->NextPicture(this); return NULL; diff --git a/PLUGINS/src/pictures/pictures.c b/PLUGINS/src/pictures/pictures.c index aa06c98..e3015e4 100644 --- a/PLUGINS/src/pictures/pictures.c +++ b/PLUGINS/src/pictures/pictures.c @@ -3,7 +3,7 @@ * * See the README file for copyright information and how to reach the author. * - * $Id: pictures.c 1.1 2008/01/12 14:46:52 kls Exp $ + * $Id: pictures.c 1.2 2008/01/19 11:20:03 kls Exp $ */ #include @@ -11,7 +11,7 @@ #include "menu.h" #include "player.h" -static const char *VERSION = "0.0.1"; +static const char *VERSION = "0.0.2"; static const char *DESCRIPTION = trNOOP("A simple picture viewer"); static const char *MAINMENUENTRY = trNOOP("Pictures"); diff --git a/PLUGINS/src/pictures/player.c b/PLUGINS/src/pictures/player.c index 9e07fc5..b942be5 100644 --- a/PLUGINS/src/pictures/player.c +++ b/PLUGINS/src/pictures/player.c @@ -3,7 +3,7 @@ * * See the README file for copyright information and how to reach the author. * - * $Id: player.c 1.1 2008/01/13 11:29:27 kls Exp $ + * $Id: player.c 1.2 2008/01/19 11:01:58 kls Exp $ */ #include "player.h" @@ -95,6 +95,7 @@ cPictureControl::cPictureControl(cPictureEntry *Pictures, const cPictureEntry *P pictureEntry = PictureEntry; osd = NULL; lastPath = "/"; + slideShowDelay.Set(SlideShowDelay * 1000); slideShow = SlideShow; alwaysDisplayCaption = false; NextPicture(slideShow && pictureEntry->IsDirectory() ? 1 : 0); diff --git a/PLUGINS/src/pictures/po/fi_FI.po b/PLUGINS/src/pictures/po/fi_FI.po new file mode 100644 index 0000000..df5a4a1 --- /dev/null +++ b/PLUGINS/src/pictures/po/fi_FI.po @@ -0,0 +1,32 @@ +# VDR plugin language source file. +# Copyright (C) 2008 Klaus Schmidinger +# This file is distributed under the same license as the VDR package. +# Rolf Ahrenberg , 2008. +# +msgid "" +msgstr "" +"Project-Id-Version: pictures 0.0.1\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-01-12 17:38+0100\n" +"PO-Revision-Date: 2008-01-12 17:41+0100\n" +"Last-Translator: Rolf Ahrenberg \n" +"Language-Team: Finnish\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-15\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Pictures" +msgstr "Kuvat" + +msgid "A simple picture viewer" +msgstr "Yksinkertainen kuvaselain" + +msgid "Picture directory" +msgstr "Kuvahakemisto" + +msgid "Slide show delay (s)" +msgstr "Diaesityksen viive (s)" + +msgid "No picture directory has been defined!" +msgstr "Kuvahakemistoa ei ole määritelty!" diff --git a/PLUGINS/src/skincurses/HISTORY b/PLUGINS/src/skincurses/HISTORY index 34efba9..e5bfa49 100644 --- a/PLUGINS/src/skincurses/HISTORY +++ b/PLUGINS/src/skincurses/HISTORY @@ -61,3 +61,7 @@ VDR Plugin 'skincurses' Revision History 2007-08-26: Version 0.1.4 - Adapted to the new Level parameter of cOsd. + +2008-01-19: + +- Updated the Makefile of the skincurses plugin (thanks to Rolf Ahrenberg). diff --git a/PLUGINS/src/skincurses/Makefile b/PLUGINS/src/skincurses/Makefile index 17f8540..4dc4e28 100644 --- a/PLUGINS/src/skincurses/Makefile +++ b/PLUGINS/src/skincurses/Makefile @@ -1,11 +1,13 @@ # # Makefile for a Video Disk Recorder plugin # -# $Id: Makefile 1.14 2007/11/04 10:52:13 kls Exp $ +# $Id: Makefile 1.15 2008/01/19 11:40:33 kls Exp $ # The official name of this plugin. # This name will be used in the '-P...' option of VDR to load the plugin. # By default the main source file also carries this name. +# IMPORTANT: the presence of this macro is important for the Make.config +# file. So it must be defined, even if it is not used here! # PLUGIN = skincurses @@ -16,7 +18,7 @@ VERSION = $(shell grep 'static const char \*VERSION *=' $(PLUGIN).c | awk '{ pri ### The C++ compiler and options: CXX ?= g++ -CXXFLAGS ?= -fPIC -g -O2 -Wall -Woverloaded-virtual +CXXFLAGS ?= -fPIC -g -O2 -Wall -Woverloaded-virtual -Wno-parentheses ### The directory environment: @@ -56,9 +58,9 @@ all: libvdr-$(PLUGIN).so i18n %.o: %.c $(CXX) $(CXXFLAGS) -c $(DEFINES) $(INCLUDES) $< -# Dependencies: +### Dependencies: -MAKEDEP = g++ -MM -MG +MAKEDEP = $(CXX) -MM -MG DEPFILE = .dependencies $(DEPFILE): Makefile @$(MAKEDEP) $(DEFINES) $(INCLUDES) $(OBJS:%.o=%.c) > $@ @@ -88,7 +90,7 @@ $(I18Nmsgs): $(LOCALEDIR)/%/LC_MESSAGES/vdr-$(PLUGIN).mo: $(PODIR)/%.mo cp $< $@ .PHONY: i18n -i18n: $(I18Nmsgs) +i18n: $(I18Nmsgs) $(I18Npot) ### Targets: @@ -105,5 +107,4 @@ dist: clean @echo Distribution package created as $(PACKAGE).tgz clean: - @-rm -f $(PODIR)/*.mo $(PODIR)/*.pot - @-rm -f $(OBJS) $(DEPFILE) *.so *.tgz core* *~ + @-rm -f $(OBJS) $(DEPFILE) *.so *.tgz core* *~ $(PODIR)/*.mo $(PODIR)/*.pot diff --git a/channels.c b/channels.c index b01bb93..dd1967f 100644 --- a/channels.c +++ b/channels.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: channels.c 1.55 2007/10/12 14:40:53 kls Exp $ + * $Id: channels.c 1.56 2008/01/27 13:59:53 kls Exp $ */ #include "channels.h" @@ -21,67 +21,114 @@ // -- Channel Parameter Maps ------------------------------------------------- const tChannelParameterMap InversionValues[] = { - { 0, INVERSION_OFF }, - { 1, INVERSION_ON }, - { 999, INVERSION_AUTO }, + { 0, DVBFE_INVERSION_OFF, trNOOP("off") }, + { 1, DVBFE_INVERSION_ON, trNOOP("on") }, + { 999, DVBFE_INVERSION_AUTO }, { -1 } }; const tChannelParameterMap BandwidthValues[] = { - { 6, BANDWIDTH_6_MHZ }, - { 7, BANDWIDTH_7_MHZ }, - { 8, BANDWIDTH_8_MHZ }, - { 999, BANDWIDTH_AUTO }, + { 5, DVBFE_BANDWIDTH_5_MHZ, "5 MHz" }, + { 6, DVBFE_BANDWIDTH_6_MHZ, "6 MHz" }, + { 7, DVBFE_BANDWIDTH_7_MHZ, "7 MHz" }, + { 8, DVBFE_BANDWIDTH_8_MHZ, "8 MHz" }, + { 999, DVBFE_BANDWIDTH_AUTO }, { -1 } }; const tChannelParameterMap CoderateValues[] = { - { 0, FEC_NONE }, - { 12, FEC_1_2 }, - { 23, FEC_2_3 }, - { 34, FEC_3_4 }, - { 45, FEC_4_5 }, - { 56, FEC_5_6 }, - { 67, FEC_6_7 }, - { 78, FEC_7_8 }, - { 89, FEC_8_9 }, - { 999, FEC_AUTO }, + { 0, DVBFE_FEC_NONE, trNOOP("none") }, + { 12, DVBFE_FEC_1_2, "1/2" }, + { 13, DVBFE_FEC_1_3, "1/3" }, + { 14, DVBFE_FEC_1_4, "1/4" }, + { 23, DVBFE_FEC_2_3, "2/3" }, + { 25, DVBFE_FEC_2_5, "2/5" }, + { 34, DVBFE_FEC_3_4, "3/4" }, + { 35, DVBFE_FEC_3_5, "3/5" }, + { 45, DVBFE_FEC_4_5, "4/5" }, + { 56, DVBFE_FEC_5_6, "5/6" }, + { 67, DVBFE_FEC_6_7, "6/7" }, + { 78, DVBFE_FEC_7_8, "7/8" }, + { 89, DVBFE_FEC_8_9, "8/9" }, + { 910, DVBFE_FEC_9_10, "9/10" }, + { 999, DVBFE_FEC_AUTO }, { -1 } }; const tChannelParameterMap ModulationValues[] = { - { 0, QPSK }, - { 16, QAM_16 }, - { 32, QAM_32 }, - { 64, QAM_64 }, - { 128, QAM_128 }, - { 256, QAM_256 }, - { 999, QAM_AUTO }, + { 0, DVBFE_MOD_NONE, trNOOP("none") }, + { 4, DVBFE_MOD_QAM4, "QAM4" }, + { 16, DVBFE_MOD_QAM16, "QAM16" }, + { 32, DVBFE_MOD_QAM32, "QAM32" }, + { 64, DVBFE_MOD_QAM64, "QAM64" }, + { 128, DVBFE_MOD_QAM128, "QAM128" }, + { 256, DVBFE_MOD_QAM256, "QAM256" }, + { 512, DVBFE_MOD_QAM512, "QAM512" }, + {1024, DVBFE_MOD_QAM1024, "QAM1024" }, + { 1, DVBFE_MOD_BPSK, "BPSK" }, + { 2, DVBFE_MOD_QPSK, "QPSK" }, + { 3, DVBFE_MOD_OQPSK, "OQPSK" }, + { 5, DVBFE_MOD_8PSK, "8PSK" }, + { 6, DVBFE_MOD_16APSK, "16APSK" }, + { 7, DVBFE_MOD_32APSK, "32APSK" }, + { 8, DVBFE_MOD_OFDM, "OFDM" }, + { 9, DVBFE_MOD_COFDM, "COFDM" }, + { 10, DVBFE_MOD_VSB8, "VSB8" }, + { 11, DVBFE_MOD_VSB16, "VSB16" }, + { 998, DVBFE_MOD_QAMAUTO, "QAMAUTO" }, + { 999, DVBFE_MOD_AUTO }, + { -1 } + }; + +const tChannelParameterMap SystemValues[] = { + { 0, DVBFE_DELSYS_DVBS, "DVB-S" }, + { 1, DVBFE_DELSYS_DVBS2, "DVB-S2" }, { -1 } }; const tChannelParameterMap TransmissionValues[] = { - { 2, TRANSMISSION_MODE_2K }, - { 8, TRANSMISSION_MODE_8K }, - { 999, TRANSMISSION_MODE_AUTO }, + { 2, DVBFE_TRANSMISSION_MODE_2K, "2K" }, + { 4, DVBFE_TRANSMISSION_MODE_4K, "4K" }, + { 8, DVBFE_TRANSMISSION_MODE_8K, "8K" }, + { 999, DVBFE_TRANSMISSION_MODE_AUTO }, { -1 } }; const tChannelParameterMap GuardValues[] = { - { 4, GUARD_INTERVAL_1_4 }, - { 8, GUARD_INTERVAL_1_8 }, - { 16, GUARD_INTERVAL_1_16 }, - { 32, GUARD_INTERVAL_1_32 }, - { 999, GUARD_INTERVAL_AUTO }, + { 4, DVBFE_GUARD_INTERVAL_1_4, "1/4" }, + { 8, DVBFE_GUARD_INTERVAL_1_8, "1/8" }, + { 16, DVBFE_GUARD_INTERVAL_1_16, "1/16" }, + { 32, DVBFE_GUARD_INTERVAL_1_32, "1/32" }, + { 999, DVBFE_GUARD_INTERVAL_AUTO }, { -1 } }; const tChannelParameterMap HierarchyValues[] = { - { 0, HIERARCHY_NONE }, - { 1, HIERARCHY_1 }, - { 2, HIERARCHY_2 }, - { 4, HIERARCHY_4 }, - { 999, HIERARCHY_AUTO }, + { 0, DVBFE_HIERARCHY_OFF, trNOOP("off") }, + { 1, DVBFE_HIERARCHY_ON, trNOOP("on") }, + { 999, DVBFE_HIERARCHY_AUTO }, + { -1 } + }; + +const tChannelParameterMap AlphaValues[] = { + { 0, 0 }, + { 1, DVBFE_ALPHA_1 }, + { 2, DVBFE_ALPHA_2 }, + { 4, DVBFE_ALPHA_4 }, + { -1 } + }; + +const tChannelParameterMap PriorityValues[] = { + { 0, DVBFE_STREAM_PRIORITY_HP, trNOOP("high") }, + { 1, DVBFE_STREAM_PRIORITY_LP, trNOOP("low") }, + { -1 } + }; + +const tChannelParameterMap RollOffValues[] = { + { 0, DVBFE_ROLLOFF_UNKNOWN }, + { 20, DVBFE_ROLLOFF_20, "0.20" }, + { 25, DVBFE_ROLLOFF_25, "0.25" }, + { 35, DVBFE_ROLLOFF_35, "0.35" }, { -1 } }; @@ -107,11 +154,14 @@ int DriverIndex(int Value, const tChannelParameterMap *Map) return -1; } -int MapToUser(int Value, const tChannelParameterMap *Map) +int MapToUser(int Value, const tChannelParameterMap *Map, const char **String) { int n = DriverIndex(Value, Map); - if (n >= 0) + if (n >= 0) { + if (String) + *String = tr(Map[n].userString); return Map[n].userValue; + } return -1; } @@ -167,14 +217,18 @@ cChannel::cChannel(void) provider = strdup(""); portalName = strdup(""); memset(&__BeginData__, 0, (char *)&__EndData__ - (char *)&__BeginData__); - inversion = INVERSION_AUTO; - bandwidth = BANDWIDTH_AUTO; - coderateH = FEC_AUTO; - coderateL = FEC_AUTO; - modulation = QAM_AUTO; - transmission = TRANSMISSION_MODE_AUTO; - guard = GUARD_INTERVAL_AUTO; - hierarchy = HIERARCHY_AUTO; + inversion = DVBFE_INVERSION_AUTO; + bandwidth = DVBFE_BANDWIDTH_AUTO; + coderateH = DVBFE_FEC_AUTO; + coderateL = DVBFE_FEC_AUTO; + modulation = DVBFE_MOD_AUTO; + system = DVBFE_DELSYS_DVBS; + transmission = DVBFE_TRANSMISSION_MODE_AUTO; + guard = DVBFE_GUARD_INTERVAL_AUTO; + hierarchy = DVBFE_HIERARCHY_AUTO; + alpha = 0; + priority = DVBFE_STREAM_PRIORITY_HP; + rollOff = DVBFE_ROLLOFF_UNKNOWN; modification = CHANNELMOD_NONE; schedule = NULL; linkChannels = NULL; @@ -277,13 +331,17 @@ void cChannel::CopyTransponderData(const cChannel *Channel) coderateH = Channel->coderateH; coderateL = Channel->coderateL; modulation = Channel->modulation; + system = Channel->system; transmission = Channel->transmission; guard = Channel->guard; hierarchy = Channel->hierarchy; + alpha = Channel->alpha; + priority = Channel->priority; + rollOff = Channel->rollOff; } } -bool cChannel::SetSatTransponderData(int Source, int Frequency, char Polarization, int Srate, int CoderateH) +bool cChannel::SetSatTransponderData(int Source, int Frequency, char Polarization, int Srate, int CoderateH, int Modulation, int System, int RollOff) { // Workarounds for broadcaster stupidity: // Some providers broadcast the transponder frequency of their channels with two different @@ -297,19 +355,22 @@ bool cChannel::SetSatTransponderData(int Source, int Frequency, char Polarizatio if (abs(srate - Srate) <= 1) Srate = srate; - if (source != Source || frequency != Frequency || polarization != Polarization || srate != Srate || coderateH != CoderateH) { - if (Number()) { - dsyslog("changing transponder data of channel %d from %s:%d:%c:%d:%d to %s:%d:%c:%d:%d", Number(), *cSource::ToString(source), frequency, polarization, srate, coderateH, *cSource::ToString(Source), Frequency, Polarization, Srate, CoderateH); - modification |= CHANNELMOD_TRANSP; - Channels.SetModified(); - } + if (source != Source || frequency != Frequency || polarization != Polarization || srate != Srate || coderateH != CoderateH || modulation != Modulation || system != System || rollOff != RollOff) { + cString OldParameters = ParametersToString(); source = Source; frequency = Frequency; polarization = Polarization; srate = Srate; coderateH = CoderateH; - modulation = QPSK; + modulation = Modulation; + system = System; + rollOff = RollOff; schedule = NULL; + if (Number()) { + dsyslog("changing transponder data of channel %d from %d:%s:%s:%d to %d:%s:%s:%d", Number(), frequency, *OldParameters, *cSource::ToString(source), srate, Frequency, *ParametersToString(), *cSource::ToString(Source), Srate); + modification |= CHANNELMOD_TRANSP; + Channels.SetModified(); + } } return true; } @@ -317,29 +378,26 @@ bool cChannel::SetSatTransponderData(int Source, int Frequency, char Polarizatio bool cChannel::SetCableTransponderData(int Source, int Frequency, int Modulation, int Srate, int CoderateH) { if (source != Source || frequency != Frequency || modulation != Modulation || srate != Srate || coderateH != CoderateH) { - if (Number()) { - dsyslog("changing transponder data of channel %d from %s:%d:%d:%d:%d to %s:%d:%d:%d:%d", Number(), *cSource::ToString(source), frequency, modulation, srate, coderateH, *cSource::ToString(Source), Frequency, Modulation, Srate, CoderateH); - modification |= CHANNELMOD_TRANSP; - Channels.SetModified(); - } + cString OldParameters = ParametersToString(); source = Source; frequency = Frequency; modulation = Modulation; srate = Srate; coderateH = CoderateH; schedule = NULL; + if (Number()) { + dsyslog("changing transponder data of channel %d from %d:%s:%s:%d to %d:%s:%s:%d", Number(), frequency, *OldParameters, *cSource::ToString(source), srate, Frequency, *ParametersToString(), *cSource::ToString(Source), Srate); + modification |= CHANNELMOD_TRANSP; + Channels.SetModified(); + } } return true; } -bool cChannel::SetTerrTransponderData(int Source, int Frequency, int Bandwidth, int Modulation, int Hierarchy, int CoderateH, int CoderateL, int Guard, int Transmission) +bool cChannel::SetTerrTransponderData(int Source, int Frequency, int Bandwidth, int Modulation, int Hierarchy, int CoderateH, int CoderateL, int Guard, int Transmission, int Alpha, int Priority) { - if (source != Source || frequency != Frequency || bandwidth != Bandwidth || modulation != Modulation || hierarchy != Hierarchy || coderateH != CoderateH || coderateL != CoderateL || guard != Guard || transmission != Transmission) { - if (Number()) { - dsyslog("changing transponder data of channel %d from %s:%d:%d:%d:%d:%d:%d:%d:%d to %s:%d:%d:%d:%d:%d:%d:%d:%d", Number(), *cSource::ToString(source), frequency, bandwidth, modulation, hierarchy, coderateH, coderateL, guard, transmission, *cSource::ToString(Source), Frequency, Bandwidth, Modulation, Hierarchy, CoderateH, CoderateL, Guard, Transmission); - modification |= CHANNELMOD_TRANSP; - Channels.SetModified(); - } + if (source != Source || frequency != Frequency || bandwidth != Bandwidth || modulation != Modulation || hierarchy != Hierarchy || coderateH != CoderateH || coderateL != CoderateL || guard != Guard || transmission != Transmission || alpha != Alpha || priority != Priority) { + cString OldParameters = ParametersToString(); source = Source; frequency = Frequency; bandwidth = Bandwidth; @@ -349,7 +407,14 @@ bool cChannel::SetTerrTransponderData(int Source, int Frequency, int Bandwidth, coderateL = CoderateL; guard = Guard; transmission = Transmission; + alpha = Alpha; + priority = Priority; schedule = NULL; + if (Number()) { + dsyslog("changing transponder data of channel %d from %d:%s:%s to %d:%s:%s", Number(), frequency, *OldParameters, *cSource::ToString(source), Frequency, *ParametersToString(), *cSource::ToString(Source)); + modification |= CHANNELMOD_TRANSP; + Channels.SetModified(); + } } return true; } @@ -597,13 +662,17 @@ cString cChannel::ParametersToString(void) const char *q = buffer; *q = 0; ST(" S ") q += sprintf(q, "%c", polarization); - ST("CST") q += PrintParameter(q, 'I', MapToUser(inversion, InversionValues)); + ST(" T") q += PrintParameter(q, 'A', MapToUser(alpha, AlphaValues)); + ST(" T") q += PrintParameter(q, 'B', MapToUser(bandwidth, BandwidthValues)); ST("CST") q += PrintParameter(q, 'C', MapToUser(coderateH, CoderateValues)); ST(" T") q += PrintParameter(q, 'D', MapToUser(coderateL, CoderateValues)); - ST("C T") q += PrintParameter(q, 'M', MapToUser(modulation, ModulationValues)); - ST(" T") q += PrintParameter(q, 'B', MapToUser(bandwidth, BandwidthValues)); - ST(" T") q += PrintParameter(q, 'T', MapToUser(transmission, TransmissionValues)); ST(" T") q += PrintParameter(q, 'G', MapToUser(guard, GuardValues)); + ST("CST") q += PrintParameter(q, 'I', MapToUser(inversion, InversionValues)); + ST("CST") q += PrintParameter(q, 'M', MapToUser(modulation, ModulationValues)); + ST(" S ") q += PrintParameter(q, 'O', MapToUser(rollOff, RollOffValues)); + ST(" T") q += PrintParameter(q, 'P', MapToUser(priority, PriorityValues)); + ST(" S ") q += PrintParameter(q, 'S', MapToUser(system, SystemValues)); + ST(" T") q += PrintParameter(q, 'T', MapToUser(transmission, TransmissionValues)); ST(" T") q += PrintParameter(q, 'Y', MapToUser(hierarchy, HierarchyValues)); return buffer; } @@ -628,6 +697,7 @@ bool cChannel::StringToParameters(const char *s) { while (s && *s) { switch (toupper(*s)) { + case 'A': s = ParseParameter(s, alpha, AlphaValues); break; case 'B': s = ParseParameter(s, bandwidth, BandwidthValues); break; case 'C': s = ParseParameter(s, coderateH, CoderateValues); break; case 'D': s = ParseParameter(s, coderateL, CoderateValues); break; @@ -636,7 +706,11 @@ bool cChannel::StringToParameters(const char *s) case 'I': s = ParseParameter(s, inversion, InversionValues); break; case 'L': polarization = *s++; break; case 'M': s = ParseParameter(s, modulation, ModulationValues); break; + case 'Z':// for compatibility with the original DVB-S2 patch - may be removed in future versions + case 'O': s = ParseParameter(s, rollOff, RollOffValues); break; + case 'P': s = ParseParameter(s, priority, PriorityValues); break; case 'R': polarization = *s++; break; + case 'S': s = ParseParameter(s, system, SystemValues); break; case 'T': s = ParseParameter(s, transmission, TransmissionValues); break; case 'V': polarization = *s++; break; case 'Y': s = ParseParameter(s, hierarchy, HierarchyValues); break; diff --git a/channels.h b/channels.h index 6eaa66f..e698678 100644 --- a/channels.h +++ b/channels.h @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: channels.h 1.45 2007/09/02 10:23:11 kls Exp $ + * $Id: channels.h 1.46 2008/01/26 16:04:26 kls Exp $ */ #ifndef __CHANNELS_H @@ -50,10 +50,10 @@ struct tChannelParameterMap { int userValue; int driverValue; + const char *userString; }; -//XXX into cChannel??? -int MapToUser(int Value, const tChannelParameterMap *Map); +int MapToUser(int Value, const tChannelParameterMap *Map, const char **String = NULL); int MapToDriver(int Value, const tChannelParameterMap *Map); int UserIndex(int Value, const tChannelParameterMap *Map); int DriverIndex(int Value, const tChannelParameterMap *Map); @@ -62,9 +62,13 @@ extern const tChannelParameterMap InversionValues[]; extern const tChannelParameterMap BandwidthValues[]; extern const tChannelParameterMap CoderateValues[]; extern const tChannelParameterMap ModulationValues[]; +extern const tChannelParameterMap SystemValues[]; extern const tChannelParameterMap TransmissionValues[]; extern const tChannelParameterMap GuardValues[]; extern const tChannelParameterMap HierarchyValues[]; +extern const tChannelParameterMap AlphaValues[]; +extern const tChannelParameterMap PriorityValues[]; +extern const tChannelParameterMap RollOffValues[]; struct tChannelID { private: @@ -140,9 +144,13 @@ private: int coderateH; int coderateL; int modulation; + int system; int transmission; int guard; int hierarchy; + int alpha; + int priority; + int rollOff; int __EndData__; int modification; mutable const cSchedule *schedule; @@ -194,9 +202,13 @@ public: int CoderateH(void) const { return coderateH; } int CoderateL(void) const { return coderateL; } int Modulation(void) const { return modulation; } + int System(void) const { return system; } int Transmission(void) const { return transmission; } int Guard(void) const { return guard; } int Hierarchy(void) const { return hierarchy; } + int Alpha(void) const { return alpha; } + int Priority(void) const { return priority; } + int RollOff(void) const { return rollOff; } const cLinkChannels* LinkChannels(void) const { return linkChannels; } const cChannel *RefChannel(void) const { return refChannel; } bool IsCable(void) const { return cSource::IsCable(source); } @@ -206,9 +218,9 @@ public: bool HasTimer(void) const; int Modification(int Mask = CHANNELMOD_ALL); void CopyTransponderData(const cChannel *Channel); - bool SetSatTransponderData(int Source, int Frequency, char Polarization, int Srate, int CoderateH); + bool SetSatTransponderData(int Source, int Frequency, char Polarization, int Srate, int CoderateH, int Modulation, int System, int RollOff); bool SetCableTransponderData(int Source, int Frequency, int Modulation, int Srate, int CoderateH); - bool SetTerrTransponderData(int Source, int Frequency, int Bandwidth, int Modulation, int Hierarchy, int CodeRateH, int CodeRateL, int Guard, int Transmission); + bool SetTerrTransponderData(int Source, int Frequency, int Bandwidth, int Modulation, int Hierarchy, int CodeRateH, int CodeRateL, int Guard, int Transmission, int Alpha, int Priority); void SetId(int Nid, int Tid, int Sid, int Rid = 0); void SetName(const char *Name, const char *ShortName, const char *Provider); void SetPortalName(const char *PortalName); diff --git a/config.h b/config.h index ba3a384..e0a0284 100644 --- a/config.h +++ b/config.h @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: config.h 1.303 2007/11/25 13:45:48 kls Exp $ + * $Id: config.h 1.304 2008/01/19 12:08:29 kls Exp $ */ #ifndef __CONFIG_H @@ -22,13 +22,13 @@ // VDR's own version number: -#define VDRVERSION "1.5.13" -#define VDRVERSNUM 10513 // Version * 10000 + Major * 100 + Minor +#define VDRVERSION "1.5.14" +#define VDRVERSNUM 10514 // Version * 10000 + Major * 100 + Minor // The plugin API's version number: -#define APIVERSION "1.5.13" -#define APIVERSNUM 10513 // Version * 10000 + Major * 100 + Minor +#define APIVERSION "1.5.14" +#define APIVERSNUM 10514 // Version * 10000 + Major * 100 + Minor // When loading plugins, VDR searches them by their APIVERSION, which // may be smaller than VDRVERSION in case there have been no changes to diff --git a/device.c b/device.c index 84473af..e1c654d 100644 --- a/device.c +++ b/device.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: device.c 1.148 2007/11/17 15:39:28 kls Exp $ + * $Id: device.c 1.149 2008/01/27 10:40:46 kls Exp $ */ #include "device.h" @@ -359,6 +359,21 @@ cDevice *cDevice::GetDevice(int Index) return (0 <= Index && Index < numDevices) ? device[Index] : NULL; } +static int GetClippedNumProvidedSystems(int AvailableBits, cDevice *Device) +{ + int MaxNumProvidedSystems = 1 << AvailableBits; + int NumProvidedSystems = Device->NumProvidedSystems(); + if (NumProvidedSystems > MaxNumProvidedSystems) { + esyslog("ERROR: device %d supports %d modulation systems but cDevice::GetDevice() currently only supports %d delivery systems which should be fixed", Device->CardIndex() + 1, NumProvidedSystems, MaxNumProvidedSystems); + NumProvidedSystems = MaxNumProvidedSystems; + } + else if (NumProvidedSystems <= 0) { + esyslog("ERROR: device %d reported an invalid number (%d) of supported delivery systems - assuming 1", Device->CardIndex() + 1, NumProvidedSystems); + NumProvidedSystems = 1; + } + return NumProvidedSystems; +} + cDevice *cDevice::GetDevice(const cChannel *Channel, int Priority, bool LiveView) { // Collect the current priorities of all CAM slots that can decrypt the channel: @@ -408,6 +423,7 @@ cDevice *cDevice::GetDevice(const cChannel *Channel, int Priority, bool LiveView imp <<= 1; imp |= LiveView ? !device[i]->IsPrimaryDevice() || ndr : 0; // prefer the primary device for live viewing if we don't need to detach existing receivers imp <<= 1; imp |= !device[i]->Receiving() && (device[i] != cTransferControl::ReceiverDevice() || device[i]->IsPrimaryDevice()) || ndr; // use receiving devices if we don't need to detach existing receivers, but avoid primary device in local transfer mode imp <<= 1; imp |= device[i]->Receiving(); // avoid devices that are receiving + imp <<= 2; imp |= GetClippedNumProvidedSystems(2, device[i]) - 1; // avoid cards which support multiple delivery systems imp <<= 1; imp |= device[i] == cTransferControl::ReceiverDevice(); // avoid the Transfer Mode receiver device imp <<= 8; imp |= min(max(device[i]->Priority() + MAXPRIORITY, 0), 0xFF); // use the device with the lowest priority (+MAXPRIORITY to assure that values -99..99 can be used) imp <<= 8; imp |= min(max((NumUsableSlots ? SlotPriority[j] : 0) + MAXPRIORITY, 0), 0xFF); // use the CAM slot with the lowest priority (+MAXPRIORITY to assure that values -99..99 can be used) @@ -696,6 +712,11 @@ bool cDevice::ProvidesChannel(const cChannel *Channel, int Priority, bool *Needs return false; } +int cDevice::NumProvidedSystems(void) const +{ + return 0; +} + bool cDevice::IsTunedToTransponder(const cChannel *Channel) { return false; diff --git a/device.h b/device.h index 9bd823e..5f53d1a 100644 --- a/device.h +++ b/device.h @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: device.h 1.86 2007/10/21 09:21:52 kls Exp $ + * $Id: device.h 1.87 2008/01/27 10:35:18 kls Exp $ */ #ifndef __DEVICE_H @@ -224,6 +224,12 @@ public: ///< function itself actually returns true. ///< The default implementation always returns false, so a derived cDevice ///< class that can provide channels must implement this function. + virtual int NumProvidedSystems(void) const; + ///< Returns the number of individual "delivery systems" this device provides. + ///< The default implementation returns 0, so any derived class that can + ///< actually provide channels must implement this function. + ///< The result of this function is used when selecting a device, in order + ///< to avoid devices that provide more than one system. virtual bool IsTunedToTransponder(const cChannel *Channel); ///< Returns true if this device is currently tuned to the given Channel's ///< transponder. diff --git a/dvbdevice.c b/dvbdevice.c index 1a39606..5680cbb 100644 --- a/dvbdevice.c +++ b/dvbdevice.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: dvbdevice.c 1.167 2007/10/14 12:56:03 kls Exp $ + * $Id: dvbdevice.c 1.168 2008/01/27 14:35:54 kls Exp $ */ #include "dvbdevice.h" @@ -76,7 +76,7 @@ private: int tuneTimeout; int lockTimeout; time_t lastTimeoutReport; - fe_type_t frontendType; + dvbfe_delsys frontendType; cChannel channel; const char *diseqcCommands; eTunerStatus tunerStatus; @@ -87,14 +87,14 @@ private: bool SetFrontend(void); virtual void Action(void); public: - cDvbTuner(int Fd_Frontend, int CardIndex, fe_type_t FrontendType); + cDvbTuner(int Fd_Frontend, int CardIndex, dvbfe_delsys FrontendType); virtual ~cDvbTuner(); bool IsTunedTo(const cChannel *Channel) const; void Set(const cChannel *Channel, bool Tune); bool Locked(int TimeoutMs = 0); }; -cDvbTuner::cDvbTuner(int Fd_Frontend, int CardIndex, fe_type_t FrontendType) +cDvbTuner::cDvbTuner(int Fd_Frontend, int CardIndex, dvbfe_delsys FrontendType) { fd_frontend = Fd_Frontend; cardIndex = CardIndex; @@ -104,7 +104,7 @@ cDvbTuner::cDvbTuner(int Fd_Frontend, int CardIndex, fe_type_t FrontendType) lastTimeoutReport = 0; diseqcCommands = NULL; tunerStatus = tsIdle; - if (frontendType == FE_QPSK) + if (frontendType & (DVBFE_DELSYS_DVBS | DVBFE_DELSYS_DVBS2)) CHECK(ioctl(fd_frontend, FE_SET_VOLTAGE, SEC_VOLTAGE_13)); // must explicitly turn on LNB power SetDescription("tuner on device %d", cardIndex + 1); Start(); @@ -120,7 +120,26 @@ cDvbTuner::~cDvbTuner() bool cDvbTuner::IsTunedTo(const cChannel *Channel) const { - return tunerStatus != tsIdle && channel.Source() == Channel->Source() && channel.Transponder() == Channel->Transponder(); + if (tunerStatus == tsIdle) + return false; // not tuned to + if (channel.Source() != Channel->Source() || channel.Transponder() != Channel->Transponder()) + return false; // sufficient mismatch + char Type = **cSource::ToString(Channel->Source()); +#define ST(s, p) if (strchr(s, Type)) if (channel.p() != Channel->p()) return false; + // Polarization is already checked as part of the Transponder. + ST(" T", Alpha); + ST(" T", Bandwidth); + ST("CST", CoderateH); + ST(" T", CoderateL); + ST(" T", Guard); + ST("CST", Inversion); + ST("CST", Modulation); + ST(" S ", RollOff); + ST(" T", Priority); + ST(" S ", System); + ST(" T", Transmission); + ST(" T", Hierarchy); + return true; } void cDvbTuner::Set(const cChannel *Channel, bool Tune) @@ -173,114 +192,126 @@ static unsigned int FrequencyToHz(unsigned int f) bool cDvbTuner::SetFrontend(void) { - dvb_frontend_parameters Frontend; - + dvbfe_params Frontend; memset(&Frontend, 0, sizeof(Frontend)); - switch (frontendType) { - case FE_QPSK: { // DVB-S - - unsigned int frequency = channel.Frequency(); - - if (Setup.DiSEqC) { - cDiseqc *diseqc = Diseqcs.Get(channel.Source(), channel.Frequency(), channel.Polarization()); - if (diseqc) { - if (diseqc->Commands() && (!diseqcCommands || strcmp(diseqcCommands, diseqc->Commands()) != 0)) { - cDiseqc::eDiseqcActions da; - for (char *CurrentAction = NULL; (da = diseqc->Execute(&CurrentAction)) != cDiseqc::daNone; ) { - switch (da) { - case cDiseqc::daNone: break; - case cDiseqc::daToneOff: CHECK(ioctl(fd_frontend, FE_SET_TONE, SEC_TONE_OFF)); break; - case cDiseqc::daToneOn: CHECK(ioctl(fd_frontend, FE_SET_TONE, SEC_TONE_ON)); break; - case cDiseqc::daVoltage13: CHECK(ioctl(fd_frontend, FE_SET_VOLTAGE, SEC_VOLTAGE_13)); break; - case cDiseqc::daVoltage18: CHECK(ioctl(fd_frontend, FE_SET_VOLTAGE, SEC_VOLTAGE_18)); break; - case cDiseqc::daMiniA: CHECK(ioctl(fd_frontend, FE_DISEQC_SEND_BURST, SEC_MINI_A)); break; - case cDiseqc::daMiniB: CHECK(ioctl(fd_frontend, FE_DISEQC_SEND_BURST, SEC_MINI_B)); break; - case cDiseqc::daCodes: { - int n = 0; - uchar *codes = diseqc->Codes(n); - if (codes) { - struct dvb_diseqc_master_cmd cmd; - memcpy(cmd.msg, codes, min(n, int(sizeof(cmd.msg)))); - cmd.msg_len = n; - CHECK(ioctl(fd_frontend, FE_DISEQC_SEND_MASTER_CMD, &cmd)); - } - } - break; - } - } - diseqcCommands = diseqc->Commands(); + if (frontendType & (DVBFE_DELSYS_DVBS | DVBFE_DELSYS_DVBS2)) { + unsigned int frequency = channel.Frequency(); + if (Setup.DiSEqC) { + cDiseqc *diseqc = Diseqcs.Get(channel.Source(), channel.Frequency(), channel.Polarization()); + if (diseqc) { + if (diseqc->Commands() && (!diseqcCommands || strcmp(diseqcCommands, diseqc->Commands()) != 0)) { + cDiseqc::eDiseqcActions da; + for (char *CurrentAction = NULL; (da = diseqc->Execute(&CurrentAction)) != cDiseqc::daNone; ) { + switch (da) { + case cDiseqc::daNone: break; + case cDiseqc::daToneOff: CHECK(ioctl(fd_frontend, FE_SET_TONE, SEC_TONE_OFF)); break; + case cDiseqc::daToneOn: CHECK(ioctl(fd_frontend, FE_SET_TONE, SEC_TONE_ON)); break; + case cDiseqc::daVoltage13: CHECK(ioctl(fd_frontend, FE_SET_VOLTAGE, SEC_VOLTAGE_13)); break; + case cDiseqc::daVoltage18: CHECK(ioctl(fd_frontend, FE_SET_VOLTAGE, SEC_VOLTAGE_18)); break; + case cDiseqc::daMiniA: CHECK(ioctl(fd_frontend, FE_DISEQC_SEND_BURST, SEC_MINI_A)); break; + case cDiseqc::daMiniB: CHECK(ioctl(fd_frontend, FE_DISEQC_SEND_BURST, SEC_MINI_B)); break; + case cDiseqc::daCodes: { + int n = 0; + uchar *codes = diseqc->Codes(n); + if (codes) { + struct dvb_diseqc_master_cmd cmd; + memcpy(cmd.msg, codes, min(n, int(sizeof(cmd.msg)))); + cmd.msg_len = n; + CHECK(ioctl(fd_frontend, FE_DISEQC_SEND_MASTER_CMD, &cmd)); + } + } + break; + } } - frequency -= diseqc->Lof(); - } - else { - esyslog("ERROR: no DiSEqC parameters found for channel %d", channel.Number()); - return false; - } - } - else { - int tone = SEC_TONE_OFF; - - if (frequency < (unsigned int)Setup.LnbSLOF) { - frequency -= Setup.LnbFrequLo; - tone = SEC_TONE_OFF; - } - else { - frequency -= Setup.LnbFrequHi; - tone = SEC_TONE_ON; - } - int volt = (channel.Polarization() == 'v' || channel.Polarization() == 'V' || channel.Polarization() == 'r' || channel.Polarization() == 'R') ? SEC_VOLTAGE_13 : SEC_VOLTAGE_18; - CHECK(ioctl(fd_frontend, FE_SET_VOLTAGE, volt)); - CHECK(ioctl(fd_frontend, FE_SET_TONE, tone)); - } - - frequency = abs(frequency); // Allow for C-band, where the frequency is less than the LOF - Frontend.frequency = frequency * 1000UL; - Frontend.inversion = fe_spectral_inversion_t(channel.Inversion()); - Frontend.u.qpsk.symbol_rate = channel.Srate() * 1000UL; - Frontend.u.qpsk.fec_inner = fe_code_rate_t(channel.CoderateH()); - - tuneTimeout = DVBS_TUNE_TIMEOUT; - lockTimeout = DVBS_LOCK_TIMEOUT; - } - break; - case FE_QAM: { // DVB-C - - // Frequency and symbol rate: + diseqcCommands = diseqc->Commands(); + } + frequency -= diseqc->Lof(); + } + else { + esyslog("ERROR: no DiSEqC parameters found for channel %d", channel.Number()); + return false; + } + } + else { + int tone = SEC_TONE_OFF; + if (frequency < (unsigned int)Setup.LnbSLOF) { + frequency -= Setup.LnbFrequLo; + tone = SEC_TONE_OFF; + } + else { + frequency -= Setup.LnbFrequHi; + tone = SEC_TONE_ON; + } + int volt = (channel.Polarization() == 'v' || channel.Polarization() == 'V' || channel.Polarization() == 'r' || channel.Polarization() == 'R') ? SEC_VOLTAGE_13 : SEC_VOLTAGE_18; + CHECK(ioctl(fd_frontend, FE_SET_VOLTAGE, volt)); + CHECK(ioctl(fd_frontend, FE_SET_TONE, tone)); + } + frequency = abs(frequency); // Allow for C-band, where the frequency is less than the LOF + + Frontend.delivery = dvbfe_delsys(channel.System()); + Frontend.frequency = frequency * 1000UL; + Frontend.inversion = fe_spectral_inversion_t(channel.Inversion()); + if (Frontend.delivery == DVBFE_DELSYS_DVBS) { + Frontend.delsys.dvbs.modulation = dvbfe_modulation(channel.Modulation()); + Frontend.delsys.dvbs.symbol_rate = channel.Srate() * 1000UL; + Frontend.delsys.dvbs.fec = dvbfe_fec(channel.CoderateH()); + } + else { + Frontend.delsys.dvbs2.modulation = dvbfe_modulation(channel.Modulation()); + Frontend.delsys.dvbs2.symbol_rate = channel.Srate() * 1000UL; + Frontend.delsys.dvbs2.fec = dvbfe_fec(channel.CoderateH()); + Frontend.delsys.dvbs2.rolloff = dvbfe_rolloff(channel.RollOff()); + } - Frontend.frequency = FrequencyToHz(channel.Frequency()); - Frontend.inversion = fe_spectral_inversion_t(channel.Inversion()); - Frontend.u.qam.symbol_rate = channel.Srate() * 1000UL; - Frontend.u.qam.fec_inner = fe_code_rate_t(channel.CoderateH()); - Frontend.u.qam.modulation = fe_modulation_t(channel.Modulation()); + tuneTimeout = DVBS_TUNE_TIMEOUT; + lockTimeout = DVBS_LOCK_TIMEOUT; - tuneTimeout = DVBC_TUNE_TIMEOUT; - lockTimeout = DVBC_LOCK_TIMEOUT; - } - break; - case FE_OFDM: { // DVB-T - - // Frequency and OFDM paramaters: - - Frontend.frequency = FrequencyToHz(channel.Frequency()); - Frontend.inversion = fe_spectral_inversion_t(channel.Inversion()); - Frontend.u.ofdm.bandwidth = fe_bandwidth_t(channel.Bandwidth()); - Frontend.u.ofdm.code_rate_HP = fe_code_rate_t(channel.CoderateH()); - Frontend.u.ofdm.code_rate_LP = fe_code_rate_t(channel.CoderateL()); - Frontend.u.ofdm.constellation = fe_modulation_t(channel.Modulation()); - Frontend.u.ofdm.transmission_mode = fe_transmit_mode_t(channel.Transmission()); - Frontend.u.ofdm.guard_interval = fe_guard_interval_t(channel.Guard()); - Frontend.u.ofdm.hierarchy_information = fe_hierarchy_t(channel.Hierarchy()); - - tuneTimeout = DVBT_TUNE_TIMEOUT; - lockTimeout = DVBT_LOCK_TIMEOUT; - } - break; - default: - esyslog("ERROR: attempt to set channel with unknown DVB frontend type"); - return false; + dvbfe_info feinfo; + feinfo.delivery = Frontend.delivery; + CHECK(ioctl(fd_frontend, DVBFE_GET_INFO, &feinfo)); //switch system + } + else if (frontendType & DVBFE_DELSYS_DVBC) { + Frontend.delivery = DVBFE_DELSYS_DVBC; + Frontend.frequency = FrequencyToHz(channel.Frequency()); + Frontend.inversion = fe_spectral_inversion_t(channel.Inversion()); + Frontend.delsys.dvbc.symbol_rate = channel.Srate() * 1000UL; + Frontend.delsys.dvbc.fec = dvbfe_fec(channel.CoderateH()); + Frontend.delsys.dvbc.modulation = dvbfe_modulation(channel.Modulation()); + + tuneTimeout = DVBC_TUNE_TIMEOUT; + lockTimeout = DVBC_LOCK_TIMEOUT; + + dvbfe_info feinfo; + feinfo.delivery = Frontend.delivery; + CHECK(ioctl(fd_frontend, DVBFE_GET_INFO, &feinfo)); //switch system + } + else if (frontendType & DVBFE_DELSYS_DVBT) { + Frontend.delivery = DVBFE_DELSYS_DVBT; + Frontend.frequency = FrequencyToHz(channel.Frequency()); + Frontend.inversion = fe_spectral_inversion_t(channel.Inversion()); + Frontend.delsys.dvbt.bandwidth = dvbfe_bandwidth(channel.Bandwidth()); + Frontend.delsys.dvbt.code_rate_HP = dvbfe_fec(channel.CoderateH()); + Frontend.delsys.dvbt.code_rate_LP = dvbfe_fec(channel.CoderateL()); + Frontend.delsys.dvbt.constellation = dvbfe_modulation(channel.Modulation()); + Frontend.delsys.dvbt.transmission_mode = dvbfe_transmission_mode(channel.Transmission()); + Frontend.delsys.dvbt.guard_interval = dvbfe_guard_interval(channel.Guard()); + Frontend.delsys.dvbt.hierarchy = dvbfe_hierarchy(channel.Hierarchy()); + Frontend.delsys.dvbt.alpha = dvbfe_alpha(channel.Alpha()); + Frontend.delsys.dvbt.priority = dvbfe_stream_priority(channel.Priority()); + + tuneTimeout = DVBT_TUNE_TIMEOUT; + lockTimeout = DVBT_LOCK_TIMEOUT; + + dvbfe_info feinfo; + feinfo.delivery = Frontend.delivery; + CHECK(ioctl(fd_frontend, DVBFE_GET_INFO, &feinfo)); //switch system + } + else { + esyslog("ERROR: attempt to set channel with unknown DVB frontend type"); + return false; } - if (ioctl(fd_frontend, FE_SET_FRONTEND, &Frontend) < 0) { + if (ioctl(fd_frontend, DVBFE_SET_PARAMS, &Frontend) < 0) { esyslog("ERROR: frontend %d: %m", cardIndex); return false; } @@ -351,11 +382,23 @@ void cDvbTuner::Action(void) int cDvbDevice::devVideoOffset = -1; int cDvbDevice::setTransferModeForDolbyDigital = 1; +const char *DeliverySystems[] = { + "DVBS", + "DSS", + "DVBS2", + "DVBC", + "DVBT", + "DVBH", + "ATSC", + NULL + }; + cDvbDevice::cDvbDevice(int n) { ciAdapter = NULL; dvbTuner = NULL; - frontendType = fe_type_t(-1); // don't know how else to initialize this - there is no FE_UNKNOWN + frontendType = DVBFE_DELSYS_DUMMY; + numProvidedSystems = 0; spuDecoder = NULL; digitalAudio = false; playMode = pmNone; @@ -417,9 +460,22 @@ cDvbDevice::cDvbDevice(int n) // We only check the devices that must be present - the others will be checked before accessing them://XXX if (fd_frontend >= 0) { - dvb_frontend_info feinfo; - if (ioctl(fd_frontend, FE_GET_INFO, &feinfo) >= 0) { - frontendType = feinfo.type; + if (ioctl(fd_frontend, DVBFE_GET_DELSYS, &frontendType) >= 0) { + const char **DeliverySystem = DeliverySystems; + cString ds; + for (int i = 0; i < 32; i++) { + if (frontendType & (1u << i)) { + numProvidedSystems++; + if (*DeliverySystem) + ds = cString::sprintf("%s %s", *ds ? *ds : "", *DeliverySystem); + else + esyslog("ERROR: unknown delivery system %d", i); + } + if (*DeliverySystem) + DeliverySystem++; + } + if (*ds) + isyslog("device %d provides:%s", CardIndex() + 1, *ds); dvbTuner = new cDvbTuner(fd_frontend, CardIndex(), frontendType); } else @@ -743,14 +799,20 @@ bool cDvbDevice::ProvidesSource(int Source) const { int type = Source & cSource::st_Mask; return type == cSource::stNone - || type == cSource::stCable && frontendType == FE_QAM - || type == cSource::stSat && frontendType == FE_QPSK - || type == cSource::stTerr && frontendType == FE_OFDM; + || type == cSource::stCable && (frontendType & DVBFE_DELSYS_DVBC) + || type == cSource::stSat && (frontendType & (DVBFE_DELSYS_DVBS | DVBFE_DELSYS_DVBS2)) + || type == cSource::stTerr && (frontendType & DVBFE_DELSYS_DVBT); } bool cDvbDevice::ProvidesTransponder(const cChannel *Channel) const { - return ProvidesSource(Channel->Source()) && (!cSource::IsSat(Channel->Source()) || !Setup.DiSEqC || Diseqcs.Get(Channel->Source(), Channel->Frequency(), Channel->Polarization())); + if (!ProvidesSource(Channel->Source())) + return false; // doesn't provide source + if (!cSource::IsSat(Channel->Source())) + return true; // source is sufficient for non sat + if (!(frontendType & Channel->System())) + return false; // requires modulation system which frontend doesn't provide + return !Setup.DiSEqC || Diseqcs.Get(Channel->Source(), Channel->Frequency(), Channel->Polarization()); } bool cDvbDevice::ProvidesChannel(const cChannel *Channel, int Priority, bool *NeedsDetachReceivers) const @@ -759,7 +821,7 @@ bool cDvbDevice::ProvidesChannel(const cChannel *Channel, int Priority, bool *Ne bool hasPriority = Priority < 0 || Priority > this->Priority(); bool needsDetachReceivers = false; - if (ProvidesSource(Channel->Source())) { + if (ProvidesTransponder(Channel)) { result = hasPriority; if (Priority >= 0 && Receiving(true)) { if (dvbTuner->IsTunedTo(Channel)) { @@ -791,6 +853,11 @@ bool cDvbDevice::ProvidesChannel(const cChannel *Channel, int Priority, bool *Ne return result; } +int cDvbDevice::NumProvidedSystems(void) const +{ + return numProvidedSystems; +} + bool cDvbDevice::IsTunedToTransponder(const cChannel *Channel) { return dvbTuner->IsTunedTo(Channel); diff --git a/dvbdevice.h b/dvbdevice.h index 7557276..eca00dd 100644 --- a/dvbdevice.h +++ b/dvbdevice.h @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: dvbdevice.h 1.45 2007/10/14 13:01:25 kls Exp $ + * $Id: dvbdevice.h 1.46 2008/01/27 10:21:02 kls Exp $ */ #ifndef __DVBDEVICE_H @@ -15,8 +15,8 @@ #include "device.h" #include "dvbspu.h" -#if DVB_API_VERSION != 3 -#error VDR requires Linux DVB driver API version 3! +#if DVB_API_VERSION != 3 || DVB_API_VERSION_MINOR != 3 +#error VDR requires Linux DVB driver API version 3.3! #endif #define MAXDVBDEVICES 8 @@ -35,7 +35,8 @@ public: ///< Must be called before accessing any DVB functions. ///< \return True if any devices are available. private: - fe_type_t frontendType; + dvbfe_delsys frontendType; + int numProvidedSystems; int fd_osd, fd_audio, fd_video, fd_dvr, fd_stc, fd_ca; protected: virtual void MakePrimaryDevice(bool On); @@ -66,6 +67,7 @@ public: virtual bool ProvidesSource(int Source) const; virtual bool ProvidesTransponder(const cChannel *Channel) const; virtual bool ProvidesChannel(const cChannel *Channel, int Priority = -1, bool *NeedsDetachReceivers = NULL) const; + virtual int NumProvidedSystems(void) const; virtual bool IsTunedToTransponder(const cChannel *Channel); protected: virtual bool SetChannelDevice(const cChannel *Channel, bool LiveView); diff --git a/i18n.c b/i18n.c index a018f23..66111f4 100644 --- a/i18n.c +++ b/i18n.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: i18n.c 1.318 2007/11/01 10:38:27 kls Exp $ + * $Id: i18n.c 1.319 2008/01/19 12:07:11 kls Exp $ * * */ @@ -100,8 +100,10 @@ static void SetEnvLanguage(const char *Locale) ++_nl_msg_cat_cntr; } -void I18nInitialize(void) +void I18nInitialize(const char *LocaleDir) { + if (LocaleDir) + I18nLocaleDir = LocaleDir; LanguageLocales.Append(strdup(I18N_DEFAULT_LOCALE)); LanguageNames.Append(strdup(SkipContext(LanguageName))); LanguageCodes.Append(strdup(LanguageCodeList[0])); diff --git a/i18n.h b/i18n.h index cbe42b9..8f960ea 100644 --- a/i18n.h +++ b/i18n.h @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: i18n.h 1.24 2007/08/24 13:35:18 kls Exp $ + * $Id: i18n.h 1.25 2008/01/19 11:56:19 kls Exp $ */ #ifndef __I18N_H @@ -19,8 +19,10 @@ typedef const char *tI18nPhrase[22]; ///< obsolete - switch to 'gettext'! #define I18N_MAX_LOCALE_LEN 16 // for buffers that hold en_US etc. #define I18N_MAX_LANGUAGES 256 // for buffers that hold all available languages -void I18nInitialize(void); +void I18nInitialize(const char *LocaleDir = NULL); ///< Detects all available locales and loads the language names and codes. + ///< If LocaleDir is given, it must point to a static string that lives + ///< for the entire lifetime of the program. void I18nRegister(const char *Plugin); ///< Registers the named plugin, so that it can use internationalized texts. void I18nSetLocale(const char *Locale); diff --git a/menu.c b/menu.c index b7ecf2a..4499b5f 100644 --- a/menu.c +++ b/menu.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: menu.c 1.469 2008/01/13 13:59:33 kls Exp $ + * $Id: menu.c 1.470 2008/01/26 16:29:05 kls Exp $ */ #include "menu.h" @@ -148,70 +148,6 @@ eOSState cMenuEditSrcItem::ProcessKey(eKeys Key) return state; } -// --- cMenuEditMapItem ------------------------------------------------------ - -class cMenuEditMapItem : public cMenuEditItem { -protected: - int *value; - const tChannelParameterMap *map; - const char *zeroString; - virtual void Set(void); -public: - cMenuEditMapItem(const char *Name, int *Value, const tChannelParameterMap *Map, const char *ZeroString = NULL); - virtual eOSState ProcessKey(eKeys Key); - }; - -cMenuEditMapItem::cMenuEditMapItem(const char *Name, int *Value, const tChannelParameterMap *Map, const char *ZeroString) -:cMenuEditItem(Name) -{ - value = Value; - map = Map; - zeroString = ZeroString; - Set(); -} - -void cMenuEditMapItem::Set(void) -{ - int n = MapToUser(*value, map); - if (n == 999) - SetValue(tr("auto")); - else if (n == 0 && zeroString) - SetValue(zeroString); - else if (n >= 0) { - char buf[16]; - snprintf(buf, sizeof(buf), "%d", n); - SetValue(buf); - } - else - SetValue("???"); -} - -eOSState cMenuEditMapItem::ProcessKey(eKeys Key) -{ - eOSState state = cMenuEditItem::ProcessKey(Key); - - if (state == osUnknown) { - int newValue = *value; - int n = DriverIndex(*value, map); - if (NORMALKEY(Key) == kLeft) { // TODO might want to increase the delta if repeated quickly? - if (n-- > 0) - newValue = map[n].driverValue; - } - else if (NORMALKEY(Key) == kRight) { - if (map[++n].userValue >= 0) - newValue = map[n].driverValue; - } - else - return state; - if (newValue != *value) { - *value = newValue; - Set(); - } - state = osContinue; - } - return state; -} - // --- cMenuEditChannel ------------------------------------------------------ class cMenuEditChannel : public cOsdMenu { @@ -272,15 +208,19 @@ void cMenuEditChannel::Setup(void) XXX*/ // Parameters for specific types of sources: ST(" S ") Add(new cMenuEditChrItem( tr("Polarization"), &data.polarization, "hvlr")); + ST(" S ") Add(new cMenuEditMapItem( tr("System"), &data.system, SystemValues)); ST("CS ") Add(new cMenuEditIntItem( tr("Srate"), &data.srate)); - ST("CST") Add(new cMenuEditMapItem( tr("Inversion"), &data.inversion, InversionValues, tr("off"))); - ST("CST") Add(new cMenuEditMapItem( tr("CoderateH"), &data.coderateH, CoderateValues, tr("none"))); - ST(" T") Add(new cMenuEditMapItem( tr("CoderateL"), &data.coderateL, CoderateValues, tr("none"))); - ST("C T") Add(new cMenuEditMapItem( tr("Modulation"), &data.modulation, ModulationValues, "QPSK")); + ST("CST") Add(new cMenuEditMapItem( tr("Inversion"), &data.inversion, InversionValues)); + ST("CST") Add(new cMenuEditMapItem( tr("CoderateH"), &data.coderateH, CoderateValues)); + ST(" T") Add(new cMenuEditMapItem( tr("CoderateL"), &data.coderateL, CoderateValues)); + ST("CST") Add(new cMenuEditMapItem( tr("Modulation"), &data.modulation, ModulationValues)); ST(" T") Add(new cMenuEditMapItem( tr("Bandwidth"), &data.bandwidth, BandwidthValues)); ST(" T") Add(new cMenuEditMapItem( tr("Transmission"), &data.transmission, TransmissionValues)); ST(" T") Add(new cMenuEditMapItem( tr("Guard"), &data.guard, GuardValues)); - ST(" T") Add(new cMenuEditMapItem( tr("Hierarchy"), &data.hierarchy, HierarchyValues, tr("none"))); + ST(" T") Add(new cMenuEditMapItem( tr("Hierarchy"), &data.hierarchy, HierarchyValues)); + ST(" T") Add(new cMenuEditMapItem( tr("Alpha"), &data.alpha, AlphaValues)); + ST(" T") Add(new cMenuEditMapItem( tr("Priority"), &data.priority, PriorityValues)); + ST(" S ") Add(new cMenuEditMapItem( tr("Rolloff"), &data.rollOff, RollOffValues)); SetCurrent(Get(current)); Display(); diff --git a/menuitems.c b/menuitems.c index a7ceef2..15f729b 100644 --- a/menuitems.c +++ b/menuitems.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: menuitems.c 1.55 2007/11/03 15:01:01 kls Exp $ + * $Id: menuitems.c 1.56 2008/01/26 16:07:07 kls Exp $ */ #include "menuitems.h" @@ -937,6 +937,64 @@ eOSState cMenuEditTimeItem::ProcessKey(eKeys Key) return state; } +// --- cMenuEditMapItem ------------------------------------------------------ + +cMenuEditMapItem::cMenuEditMapItem(const char *Name, int *Value, const tChannelParameterMap *Map, const char *ZeroString) +:cMenuEditItem(Name) +{ + value = Value; + map = Map; + zeroString = ZeroString; + Set(); +} + +void cMenuEditMapItem::Set(void) +{ + const char *s = NULL; + int n = MapToUser(*value, map, &s); + if (n == 999) + SetValue(tr("auto")); + else if (n == 0 && zeroString) + SetValue(zeroString); + else if (n >= 0) { + if (s) + SetValue(s); + else { + char buf[16]; + snprintf(buf, sizeof(buf), "%d", n); + SetValue(buf); + } + } + else + SetValue("???"); +} + +eOSState cMenuEditMapItem::ProcessKey(eKeys Key) +{ + eOSState state = cMenuEditItem::ProcessKey(Key); + + if (state == osUnknown) { + int newValue = *value; + int n = DriverIndex(*value, map); + if (NORMALKEY(Key) == kLeft) { // TODO might want to increase the delta if repeated quickly? + if (n-- > 0) + newValue = map[n].driverValue; + } + else if (NORMALKEY(Key) == kRight) { + if (map[++n].userValue >= 0) + newValue = map[n].driverValue; + } + else + return state; + if (newValue != *value) { + *value = newValue; + Set(); + } + state = osContinue; + } + return state; +} + // --- cMenuSetupPage -------------------------------------------------------- cMenuSetupPage::cMenuSetupPage(void) diff --git a/menuitems.h b/menuitems.h index 21890a3..0fe4713 100644 --- a/menuitems.h +++ b/menuitems.h @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: menuitems.h 1.22 2007/11/03 14:59:47 kls Exp $ + * $Id: menuitems.h 1.23 2008/01/26 15:52:53 kls Exp $ */ #ifndef __MENUITEMS_H @@ -159,6 +159,17 @@ public: virtual eOSState ProcessKey(eKeys Key); }; +class cMenuEditMapItem : public cMenuEditItem { +protected: + int *value; + const tChannelParameterMap *map; + const char *zeroString; + virtual void Set(void); +public: + cMenuEditMapItem(const char *Name, int *Value, const tChannelParameterMap *Map, const char *ZeroString = NULL); + virtual eOSState ProcessKey(eKeys Key); + }; + class cPlugin; class cMenuSetupPage : public cOsdMenu { diff --git a/nit.c b/nit.c index ba80a68..32ac18a 100644 --- a/nit.c +++ b/nit.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: nit.c 1.15 2007/08/17 14:02:45 kls Exp $ + * $Id: nit.c 1.17 2008/01/26 15:08:01 kls Exp $ */ #include "nit.h" @@ -127,8 +127,13 @@ void cNitFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length int Frequency = Frequencies[0] = BCD2INT(sd->getFrequency()) / 100; static char Polarizations[] = { 'h', 'v', 'l', 'r' }; char Polarization = Polarizations[sd->getPolarization()]; - static int CodeRates[] = { FEC_NONE, FEC_1_2, FEC_2_3, FEC_3_4, FEC_5_6, FEC_7_8, FEC_AUTO, FEC_AUTO, FEC_AUTO, FEC_AUTO, FEC_AUTO, FEC_AUTO, FEC_AUTO, FEC_AUTO, FEC_AUTO, FEC_NONE }; + static int CodeRates[] = { DVBFE_FEC_NONE, DVBFE_FEC_1_2, DVBFE_FEC_2_3, DVBFE_FEC_3_4, DVBFE_FEC_5_6, DVBFE_FEC_7_8, DVBFE_FEC_8_9, DVBFE_FEC_3_5, DVBFE_FEC_4_5, DVBFE_FEC_9_10, DVBFE_FEC_AUTO, DVBFE_FEC_AUTO, DVBFE_FEC_AUTO, DVBFE_FEC_AUTO, DVBFE_FEC_AUTO, DVBFE_FEC_NONE }; int CodeRate = CodeRates[sd->getFecInner()]; + static int Modulations[] = { DVBFE_MOD_AUTO, DVBFE_MOD_QPSK, DVBFE_MOD_8PSK, DVBFE_MOD_QAM16 }; + int Modulation = Modulations[sd->getModulationType()]; + int System = sd->getModulationSystem() ? DVBFE_DELSYS_DVBS2 : DVBFE_DELSYS_DVBS; + static int RollOffs[] = { DVBFE_ROLLOFF_35, DVBFE_ROLLOFF_25, DVBFE_ROLLOFF_20, DVBFE_ROLLOFF_UNKNOWN }; + int RollOff = sd->getModulationSystem() ? RollOffs[sd->getRollOff()] : DVBFE_ROLLOFF_UNKNOWN; int SymbolRate = BCD2INT(sd->getSymbolRate()) / 10; if (ThisNIT >= 0) { for (int n = 0; n < NumFrequencies; n++) { @@ -145,6 +150,7 @@ void cNitFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length for (cChannel *Channel = Channels.First(); Channel; Channel = Channels.Next(Channel)) { if (!Channel->GroupSep() && Channel->Source() == Source && Channel->Nid() == ts.getOriginalNetworkId() && Channel->Tid() == ts.getTransportStreamId()) { int transponder = Channel->Transponder(); + found = true; if (!ISTRANSPONDER(cChannel::Transponder(Frequency, Polarization), transponder)) { for (int n = 0; n < NumFrequencies; n++) { if (ISTRANSPONDER(cChannel::Transponder(Frequencies[n], Polarization), transponder)) { @@ -154,15 +160,14 @@ void cNitFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length } } if (ISTRANSPONDER(cChannel::Transponder(Frequency, Polarization), Transponder())) // only modify channels if we're actually receiving this transponder - Channel->SetSatTransponderData(Source, Frequency, Polarization, SymbolRate, CodeRate); + Channel->SetSatTransponderData(Source, Frequency, Polarization, SymbolRate, CodeRate, Modulation, System, RollOff); } - found = true; } if (!found) { for (int n = 0; n < NumFrequencies; n++) { cChannel *Channel = new cChannel; Channel->SetId(ts.getOriginalNetworkId(), ts.getTransportStreamId(), 0, 0); - if (Channel->SetSatTransponderData(Source, Frequencies[n], Polarization, SymbolRate, CodeRate)) + if (Channel->SetSatTransponderData(Source, Frequencies[n], Polarization, SymbolRate, CodeRate, Modulation, System, RollOff)) EITScanner.AddTransponder(Channel); else delete Channel; @@ -176,9 +181,9 @@ void cNitFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length int Source = cSource::FromData(cSource::stCable); int Frequency = Frequencies[0] = BCD2INT(sd->getFrequency()) / 10; //XXX FEC_outer??? - static int CodeRates[] = { FEC_NONE, FEC_1_2, FEC_2_3, FEC_3_4, FEC_5_6, FEC_7_8, FEC_AUTO, FEC_AUTO, FEC_AUTO, FEC_AUTO, FEC_AUTO, FEC_AUTO, FEC_AUTO, FEC_AUTO, FEC_AUTO, FEC_NONE }; + static int CodeRates[] = { DVBFE_FEC_NONE, DVBFE_FEC_1_2, DVBFE_FEC_2_3, DVBFE_FEC_3_4, DVBFE_FEC_5_6, DVBFE_FEC_7_8, DVBFE_FEC_8_9, DVBFE_FEC_3_5, DVBFE_FEC_4_5, DVBFE_FEC_9_10, DVBFE_FEC_AUTO, DVBFE_FEC_AUTO, DVBFE_FEC_AUTO, DVBFE_FEC_AUTO, DVBFE_FEC_AUTO, DVBFE_FEC_NONE }; int CodeRate = CodeRates[sd->getFecInner()]; - static int Modulations[] = { QPSK, QAM_16, QAM_32, QAM_64, QAM_128, QAM_256, QAM_AUTO }; + static int Modulations[] = { DVBFE_MOD_NONE, DVBFE_MOD_QAM16, DVBFE_MOD_QAM32, DVBFE_MOD_QAM64, DVBFE_MOD_QAM128, DVBFE_MOD_QAM256, QAM_AUTO }; int Modulation = Modulations[min(sd->getModulation(), 6)]; int SymbolRate = BCD2INT(sd->getSymbolRate()) / 10; if (ThisNIT >= 0) { @@ -196,6 +201,7 @@ void cNitFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length for (cChannel *Channel = Channels.First(); Channel; Channel = Channels.Next(Channel)) { if (!Channel->GroupSep() && Channel->Source() == Source && Channel->Nid() == ts.getOriginalNetworkId() && Channel->Tid() == ts.getTransportStreamId()) { int transponder = Channel->Transponder(); + found = true; if (!ISTRANSPONDER(Frequency / 1000, transponder)) { for (int n = 0; n < NumFrequencies; n++) { if (ISTRANSPONDER(Frequencies[n] / 1000, transponder)) { @@ -207,7 +213,6 @@ void cNitFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length if (ISTRANSPONDER(Frequency / 1000, Transponder())) // only modify channels if we're actually receiving this transponder Channel->SetCableTransponderData(Source, Frequency, Modulation, SymbolRate, CodeRate); } - found = true; } if (!found) { for (int n = 0; n < NumFrequencies; n++) { @@ -226,19 +231,22 @@ void cNitFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length SI::TerrestrialDeliverySystemDescriptor *sd = (SI::TerrestrialDeliverySystemDescriptor *)d; int Source = cSource::FromData(cSource::stTerr); int Frequency = Frequencies[0] = sd->getFrequency() * 10; - static int Bandwidths[] = { BANDWIDTH_8_MHZ, BANDWIDTH_7_MHZ, BANDWIDTH_6_MHZ, BANDWIDTH_AUTO, BANDWIDTH_AUTO, BANDWIDTH_AUTO, BANDWIDTH_AUTO, BANDWIDTH_AUTO }; + static int Bandwidths[] = { DVBFE_BANDWIDTH_8_MHZ, DVBFE_BANDWIDTH_7_MHZ, DVBFE_BANDWIDTH_6_MHZ, DVBFE_BANDWIDTH_5_MHZ, DVBFE_BANDWIDTH_AUTO, DVBFE_BANDWIDTH_AUTO, DVBFE_BANDWIDTH_AUTO, DVBFE_BANDWIDTH_AUTO }; int Bandwidth = Bandwidths[sd->getBandwidth()]; - static int Constellations[] = { QPSK, QAM_16, QAM_64, QAM_AUTO }; + static int Constellations[] = { DVBFE_MOD_QPSK, DVBFE_MOD_QAM16, DVBFE_MOD_QAM64, DVBFE_MOD_AUTO }; int Constellation = Constellations[sd->getConstellation()]; - static int Hierarchies[] = { HIERARCHY_NONE, HIERARCHY_1, HIERARCHY_2, HIERARCHY_4, HIERARCHY_AUTO, HIERARCHY_AUTO, HIERARCHY_AUTO, HIERARCHY_AUTO }; - int Hierarchy = Hierarchies[sd->getHierarchy()]; - static int CodeRates[] = { FEC_1_2, FEC_2_3, FEC_3_4, FEC_5_6, FEC_7_8, FEC_AUTO, FEC_AUTO, FEC_AUTO }; + static int CodeRates[] = { DVBFE_FEC_1_2, DVBFE_FEC_2_3, DVBFE_FEC_3_4, DVBFE_FEC_5_6, DVBFE_FEC_7_8, DVBFE_FEC_AUTO, DVBFE_FEC_AUTO, DVBFE_FEC_AUTO }; int CodeRateHP = CodeRates[sd->getCodeRateHP()]; int CodeRateLP = CodeRates[sd->getCodeRateLP()]; - static int GuardIntervals[] = { GUARD_INTERVAL_1_32, GUARD_INTERVAL_1_16, GUARD_INTERVAL_1_8, GUARD_INTERVAL_1_4 }; + static int GuardIntervals[] = { DVBFE_GUARD_INTERVAL_1_32, DVBFE_GUARD_INTERVAL_1_16, DVBFE_GUARD_INTERVAL_1_8, DVBFE_GUARD_INTERVAL_1_4 }; int GuardInterval = GuardIntervals[sd->getGuardInterval()]; - static int TransmissionModes[] = { TRANSMISSION_MODE_2K, TRANSMISSION_MODE_8K, TRANSMISSION_MODE_AUTO, TRANSMISSION_MODE_AUTO }; + static int TransmissionModes[] = { DVBFE_TRANSMISSION_MODE_2K, DVBFE_TRANSMISSION_MODE_8K, DVBFE_TRANSMISSION_MODE_4K, DVBFE_TRANSMISSION_MODE_AUTO }; int TransmissionMode = TransmissionModes[sd->getTransmissionMode()]; + static int Priorities[] = { DVBFE_STREAM_PRIORITY_LP, DVBFE_STREAM_PRIORITY_HP }; + int Priority = Priorities[sd->getPriority()]; + static int Alphas[] = { 0, DVBFE_ALPHA_1, DVBFE_ALPHA_2, DVBFE_ALPHA_4 }; + int Alpha = Alphas[sd->getHierarchy() & 3]; + int Hierarchy = Alpha ? DVBFE_HIERARCHY_ON : DVBFE_HIERARCHY_OFF; if (ThisNIT >= 0) { for (int n = 0; n < NumFrequencies; n++) { if (ISTRANSPONDER(Frequencies[n] / 1000000, Transponder())) { @@ -254,6 +262,7 @@ void cNitFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length for (cChannel *Channel = Channels.First(); Channel; Channel = Channels.Next(Channel)) { if (!Channel->GroupSep() && Channel->Source() == Source && Channel->Nid() == ts.getOriginalNetworkId() && Channel->Tid() == ts.getTransportStreamId()) { int transponder = Channel->Transponder(); + found = true; if (!ISTRANSPONDER(Frequency / 1000000, transponder)) { for (int n = 0; n < NumFrequencies; n++) { if (ISTRANSPONDER(Frequencies[n] / 1000000, transponder)) { @@ -263,15 +272,14 @@ void cNitFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length } } if (ISTRANSPONDER(Frequency / 1000000, Transponder())) // only modify channels if we're actually receiving this transponder - Channel->SetTerrTransponderData(Source, Frequency, Bandwidth, Constellation, Hierarchy, CodeRateHP, CodeRateLP, GuardInterval, TransmissionMode); + Channel->SetTerrTransponderData(Source, Frequency, Bandwidth, Constellation, Hierarchy, CodeRateHP, CodeRateLP, GuardInterval, TransmissionMode, Alpha, Priority); } - found = true; } if (!found) { for (int n = 0; n < NumFrequencies; n++) { cChannel *Channel = new cChannel; Channel->SetId(ts.getOriginalNetworkId(), ts.getTransportStreamId(), 0, 0); - if (Channel->SetTerrTransponderData(Source, Frequencies[n], Bandwidth, Constellation, Hierarchy, CodeRateHP, CodeRateLP, GuardInterval, TransmissionMode)) + if (Channel->SetTerrTransponderData(Source, Frequencies[n], Bandwidth, Constellation, Hierarchy, CodeRateHP, CodeRateLP, GuardInterval, TransmissionMode, Alpha, Priority)) EITScanner.AddTransponder(Channel); else delete Channel; diff --git a/pat.c b/pat.c index a71f2d5..bc84e43 100644 --- a/pat.c +++ b/pat.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: pat.c 1.18 2007/09/02 10:44:19 kls Exp $ + * $Id: pat.c 1.19 2008/01/27 13:53:43 kls Exp $ */ #include "pat.h" @@ -343,6 +343,7 @@ void cPatFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length switch (stream.getStreamType()) { case 1: // STREAMTYPE_11172_VIDEO case 2: // STREAMTYPE_13818_VIDEO +//TODO case 0x1B: // MPEG4 Vpid = stream.getPid(); break; case 3: // STREAMTYPE_11172_AUDIO diff --git a/po/ca_ES.po b/po/ca_ES.po index fa5c847..90d6ae9 100644 --- a/po/ca_ES.po +++ b/po/ca_ES.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.5.7\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2007-11-25 14:59+0100\n" +"POT-Creation-Date: 2008-01-27 15:00+0100\n" "PO-Revision-Date: 2007-08-12 14:17+0200\n" "Last-Translator: Jordi Vilà \n" "Language-Team: \n" @@ -17,6 +17,21 @@ msgstr "" "Content-Type: text/plain; charset=ISO-8859-1\n" "Content-Transfer-Encoding: 8bit\n" +msgid "off" +msgstr "off" + +msgid "on" +msgstr "" + +msgid "none" +msgstr "cap" + +msgid "high" +msgstr "" + +msgid "low" +msgstr "" + msgid "*** Invalid Channel ***" msgstr "*** Canal incorrecte ***" @@ -221,9 +236,6 @@ msgstr "" msgid "encrypted" msgstr "" -msgid "auto" -msgstr "auto" - msgid "Edit channel" msgstr "Editar canal" @@ -272,21 +284,18 @@ msgstr "Sid" msgid "Polarization" msgstr "Polarització" +msgid "System" +msgstr "" + msgid "Srate" msgstr "Srate" msgid "Inversion" msgstr "Inversió" -msgid "off" -msgstr "off" - msgid "CoderateH" msgstr "CoderateH" -msgid "none" -msgstr "cap" - msgid "CoderateL" msgstr "CoderateL" @@ -305,6 +314,15 @@ msgstr "Protegir" msgid "Hierarchy" msgstr "Jerarquia" +msgid "Alpha" +msgstr "" + +msgid "Priority" +msgstr "Prioritat" + +msgid "Rolloff" +msgstr "" + msgid "Channel settings are not unique!" msgstr "Propietats del canal duplicades!" @@ -350,9 +368,6 @@ msgstr "Fi" msgid "VPS" msgstr "" -msgid "Priority" -msgstr "Prioritat" - msgid "Lifetime" msgstr "Durada" @@ -893,6 +908,9 @@ msgstr "Sobrescriure" msgid "Button$Insert" msgstr "Inserir" +msgid "auto" +msgstr "auto" + msgid "Plugin" msgstr "Plugin" diff --git a/po/cs_CZ.po b/po/cs_CZ.po index c3ae43c..812c1fc 100644 --- a/po/cs_CZ.po +++ b/po/cs_CZ.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.5.7\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2007-11-25 14:59+0100\n" +"POT-Creation-Date: 2008-01-27 15:00+0100\n" "PO-Revision-Date: 2007-08-12 14:17+0200\n" "Last-Translator: Vladimír Bárta \n" "Language-Team: \n" @@ -15,6 +15,21 @@ msgstr "" "Content-Type: text/plain; charset=ISO-8859-2\n" "Content-Transfer-Encoding: 8bit\n" +msgid "off" +msgstr "vyp." + +msgid "on" +msgstr "" + +msgid "none" +msgstr "¾ádný" + +msgid "high" +msgstr "" + +msgid "low" +msgstr "" + msgid "*** Invalid Channel ***" msgstr "*** Neplatný kanál ***" @@ -219,9 +234,6 @@ msgstr "voln msgid "encrypted" msgstr "kódovaný" -msgid "auto" -msgstr "auto" - msgid "Edit channel" msgstr "Editace kanálu" @@ -270,21 +282,18 @@ msgstr "Sid" msgid "Polarization" msgstr "Polarizace" +msgid "System" +msgstr "" + msgid "Srate" msgstr "Srate" msgid "Inversion" msgstr "Inversion" -msgid "off" -msgstr "vyp." - msgid "CoderateH" msgstr "CoderateH" -msgid "none" -msgstr "¾ádný" - msgid "CoderateL" msgstr "CoderateL" @@ -303,6 +312,15 @@ msgstr "Guard" msgid "Hierarchy" msgstr "Hierarchy" +msgid "Alpha" +msgstr "" + +msgid "Priority" +msgstr "Priorita" + +msgid "Rolloff" +msgstr "" + msgid "Channel settings are not unique!" msgstr "Nastavení kanálù nejsou unikátní!" @@ -348,9 +366,6 @@ msgstr "Konec" msgid "VPS" msgstr "VPS" -msgid "Priority" -msgstr "Priorita" - msgid "Lifetime" msgstr "®ivotnost" @@ -891,6 +906,9 @@ msgstr "P msgid "Button$Insert" msgstr "Vlo¾it" +msgid "auto" +msgstr "auto" + msgid "Plugin" msgstr "Modul" diff --git a/po/da_DK.po b/po/da_DK.po index e08e7e4..53b1bee 100644 --- a/po/da_DK.po +++ b/po/da_DK.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.5.7\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2007-11-25 14:59+0100\n" +"POT-Creation-Date: 2008-01-27 15:00+0100\n" "PO-Revision-Date: 2007-08-12 14:17+0200\n" "Last-Translator: Mogens Elneff \n" "Language-Team: \n" @@ -15,6 +15,21 @@ msgstr "" "Content-Type: text/plain; charset=ISO-8859-15\n" "Content-Transfer-Encoding: 8bit\n" +msgid "off" +msgstr "fra" + +msgid "on" +msgstr "" + +msgid "none" +msgstr "ingen" + +msgid "high" +msgstr "" + +msgid "low" +msgstr "" + msgid "*** Invalid Channel ***" msgstr "*** Ugyldig kanal! ***" @@ -219,9 +234,6 @@ msgstr "Free To Air" msgid "encrypted" msgstr "kodet" -msgid "auto" -msgstr "automatisk" - msgid "Edit channel" msgstr "Rediger kanal" @@ -270,21 +282,18 @@ msgstr "Sid" msgid "Polarization" msgstr "Polarisation" +msgid "System" +msgstr "" + msgid "Srate" msgstr "Srate" msgid "Inversion" msgstr "Inversion" -msgid "off" -msgstr "fra" - msgid "CoderateH" msgstr "CoderateH" -msgid "none" -msgstr "ingen" - msgid "CoderateL" msgstr "CoderateL" @@ -303,6 +312,15 @@ msgstr "Guard" msgid "Hierarchy" msgstr "Hierarki" +msgid "Alpha" +msgstr "" + +msgid "Priority" +msgstr "Prioritet" + +msgid "Rolloff" +msgstr "" + msgid "Channel settings are not unique!" msgstr "Kanalindstillinger er ikke entydige!" @@ -348,9 +366,6 @@ msgstr "Stop" msgid "VPS" msgstr "VPS" -msgid "Priority" -msgstr "Prioritet" - msgid "Lifetime" msgstr "Levetid" @@ -891,6 +906,9 @@ msgstr "Overskriv" msgid "Button$Insert" msgstr "Indsæt" +msgid "auto" +msgstr "automatisk" + msgid "Plugin" msgstr "Plugin" diff --git a/po/de_DE.po b/po/de_DE.po index 05f139e..4ead23b 100644 --- a/po/de_DE.po +++ b/po/de_DE.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.5.7\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2007-11-25 14:59+0100\n" +"POT-Creation-Date: 2008-01-27 15:00+0100\n" "PO-Revision-Date: 2007-11-25 15:19+0200\n" "Last-Translator: Klaus Schmidinger \n" "Language-Team: \n" @@ -15,6 +15,21 @@ msgstr "" "Content-Type: text/plain; charset=ISO-8859-15\n" "Content-Transfer-Encoding: 8bit\n" +msgid "off" +msgstr "aus" + +msgid "on" +msgstr "ein" + +msgid "none" +msgstr "keine" + +msgid "high" +msgstr "hoch" + +msgid "low" +msgstr "niedrig" + msgid "*** Invalid Channel ***" msgstr "*** Ungültiger Kanal ***" @@ -219,9 +234,6 @@ msgstr "frei empfangbar" msgid "encrypted" msgstr "verschlüsselt" -msgid "auto" -msgstr "auto" - msgid "Edit channel" msgstr "Kanal editieren" @@ -270,21 +282,18 @@ msgstr "Sid" msgid "Polarization" msgstr "Polarisation" +msgid "System" +msgstr "System" + msgid "Srate" msgstr "Srate" msgid "Inversion" msgstr "Inversion" -msgid "off" -msgstr "aus" - msgid "CoderateH" msgstr "CoderateH" -msgid "none" -msgstr "keine" - msgid "CoderateL" msgstr "CoderateL" @@ -303,6 +312,15 @@ msgstr "Guard" msgid "Hierarchy" msgstr "Hierarchie" +msgid "Alpha" +msgstr "Alpha" + +msgid "Priority" +msgstr "Priorität" + +msgid "Rolloff" +msgstr "Rolloff" + msgid "Channel settings are not unique!" msgstr "Kanaleinstellungen sind nicht eindeutig!" @@ -348,9 +366,6 @@ msgstr "Ende" msgid "VPS" msgstr "VPS" -msgid "Priority" -msgstr "Priorität" - msgid "Lifetime" msgstr "Lebensdauer" @@ -891,6 +906,9 @@ msgstr " msgid "Button$Insert" msgstr "Einfügen" +msgid "auto" +msgstr "auto" + msgid "Plugin" msgstr "Plugin" diff --git a/po/el_GR.po b/po/el_GR.po index 4595fb1..3655d6d 100644 --- a/po/el_GR.po +++ b/po/el_GR.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.5.7\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2007-11-25 14:59+0100\n" +"POT-Creation-Date: 2008-01-27 15:00+0100\n" "PO-Revision-Date: 2007-08-12 14:17+0200\n" "Last-Translator: Dimitrios Dimitrakos \n" "Language-Team: \n" @@ -15,6 +15,21 @@ msgstr "" "Content-Type: text/plain; charset=ISO-8859-7\n" "Content-Transfer-Encoding: 8bit\n" +msgid "off" +msgstr "êëåéóôü" + +msgid "on" +msgstr "" + +msgid "none" +msgstr "êáíÝíá" + +msgid "high" +msgstr "" + +msgid "low" +msgstr "" + msgid "*** Invalid Channel ***" msgstr "*** Áêõñï êáíÜëç ***" @@ -219,9 +234,6 @@ msgstr "" msgid "encrypted" msgstr "" -msgid "auto" -msgstr "áõôüìáôï" - msgid "Edit channel" msgstr "Ôñïðïðïßçóç Êáíáëéïý" @@ -270,21 +282,18 @@ msgstr "Sid" msgid "Polarization" msgstr "Ðüëùóç" +msgid "System" +msgstr "" + msgid "Srate" msgstr "Srate" msgid "Inversion" msgstr "ÁíôéóôñïöÞ" -msgid "off" -msgstr "êëåéóôü" - msgid "CoderateH" msgstr "Ñõèìüò Êþäéêá H" -msgid "none" -msgstr "êáíÝíá" - msgid "CoderateL" msgstr "Ñõèìüò Êþäéêá L" @@ -303,6 +312,15 @@ msgstr " msgid "Hierarchy" msgstr "Éåñáñ÷åßá" +msgid "Alpha" +msgstr "" + +msgid "Priority" +msgstr "Ðñïôåñáéüôçôá" + +msgid "Rolloff" +msgstr "" + msgid "Channel settings are not unique!" msgstr "Ïé ñéèìýóåéò ôïí êáíáëéþí áëëõëïóõìðßðôïõí!" @@ -348,9 +366,6 @@ msgstr " msgid "VPS" msgstr "VPS" -msgid "Priority" -msgstr "Ðñïôåñáéüôçôá" - msgid "Lifetime" msgstr "ÄéÝñêåéá ÐáñáìïíÞò" @@ -891,6 +906,9 @@ msgstr " msgid "Button$Insert" msgstr "ÅéóáãùãÞ" +msgid "auto" +msgstr "áõôüìáôï" + msgid "Plugin" msgstr "ÅðÝêôáóç" diff --git a/po/es_ES.po b/po/es_ES.po index a90a74e..ee8a94f 100644 --- a/po/es_ES.po +++ b/po/es_ES.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.5.7\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2007-11-25 14:59+0100\n" +"POT-Creation-Date: 2008-01-27 15:00+0100\n" "PO-Revision-Date: 2007-08-12 14:17+0200\n" "Last-Translator: Ruben Nunez Francisco \n" "Language-Team: \n" @@ -15,6 +15,21 @@ msgstr "" "Content-Type: text/plain; charset=ISO-8859-15\n" "Content-Transfer-Encoding: 8bit\n" +msgid "off" +msgstr "off" + +msgid "on" +msgstr "" + +msgid "none" +msgstr "ninguno" + +msgid "high" +msgstr "" + +msgid "low" +msgstr "" + msgid "*** Invalid Channel ***" msgstr "*** Canal no válido ***" @@ -219,9 +234,6 @@ msgstr "en abierto" msgid "encrypted" msgstr "cifrado" -msgid "auto" -msgstr "auto" - msgid "Edit channel" msgstr "Modificar canal" @@ -270,21 +282,18 @@ msgstr "Sid" msgid "Polarization" msgstr "Polarización" +msgid "System" +msgstr "" + msgid "Srate" msgstr "T.símbolos" msgid "Inversion" msgstr "Inversion" -msgid "off" -msgstr "off" - msgid "CoderateH" msgstr "CoderateH" -msgid "none" -msgstr "ninguno" - msgid "CoderateL" msgstr "CoderateL" @@ -303,6 +312,15 @@ msgstr "Int.Guarda" msgid "Hierarchy" msgstr "Jerarquía" +msgid "Alpha" +msgstr "" + +msgid "Priority" +msgstr "Prioridad" + +msgid "Rolloff" +msgstr "" + msgid "Channel settings are not unique!" msgstr "!Propiedades de canal duplicadas!" @@ -348,9 +366,6 @@ msgstr "Fin" msgid "VPS" msgstr "VPS" -msgid "Priority" -msgstr "Prioridad" - msgid "Lifetime" msgstr "Duración" @@ -891,6 +906,9 @@ msgstr "Sobreescribir" msgid "Button$Insert" msgstr "Insertar" +msgid "auto" +msgstr "auto" + msgid "Plugin" msgstr "Plugin" diff --git a/po/et_EE.po b/po/et_EE.po index d5c47cd..878db21 100644 --- a/po/et_EE.po +++ b/po/et_EE.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.5.7\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2007-11-25 14:59+0100\n" +"POT-Creation-Date: 2008-01-27 15:00+0100\n" "PO-Revision-Date: 2007-08-12 14:17+0200\n" "Last-Translator: Arthur Konovalov \n" "Language-Team: \n" @@ -15,6 +15,21 @@ msgstr "" "Content-Type: text/plain; charset=ISO-8859-13\n" "Content-Transfer-Encoding: 8bit\n" +msgid "off" +msgstr "väljas" + +msgid "on" +msgstr "" + +msgid "none" +msgstr "puudu" + +msgid "high" +msgstr "" + +msgid "low" +msgstr "" + msgid "*** Invalid Channel ***" msgstr "*** Vigane kanal ***" @@ -219,9 +234,6 @@ msgstr "FTA" msgid "encrypted" msgstr "krüptitud" -msgid "auto" -msgstr "automaatne" - msgid "Edit channel" msgstr "Kanali muutmine" @@ -270,21 +282,18 @@ msgstr "Sid" msgid "Polarization" msgstr "Polarisatsioon" +msgid "System" +msgstr "" + msgid "Srate" msgstr "Srate" msgid "Inversion" msgstr "Inversioon" -msgid "off" -msgstr "väljas" - msgid "CoderateH" msgstr "CoderateH" -msgid "none" -msgstr "puudu" - msgid "CoderateL" msgstr "CoderateL" @@ -303,6 +312,15 @@ msgstr "Guard" msgid "Hierarchy" msgstr "Hierarhia" +msgid "Alpha" +msgstr "" + +msgid "Priority" +msgstr "Prioriteet" + +msgid "Rolloff" +msgstr "" + msgid "Channel settings are not unique!" msgstr "Kanaliseaded ei ole unikaalsed!" @@ -348,9 +366,6 @@ msgstr "Stopp" msgid "VPS" msgstr "VPS" -msgid "Priority" -msgstr "Prioriteet" - msgid "Lifetime" msgstr "Eluiga" @@ -891,6 +906,9 @@ msgstr "Asenda (OVR)" msgid "Button$Insert" msgstr "Lisa (INS)" +msgid "auto" +msgstr "automaatne" + msgid "Plugin" msgstr "Laiendusmoodul" diff --git a/po/fi_FI.po b/po/fi_FI.po index b0de1e5..4ac17cf 100644 --- a/po/fi_FI.po +++ b/po/fi_FI.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.5.7\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2007-11-25 14:59+0100\n" +"POT-Creation-Date: 2008-01-27 15:00+0100\n" "PO-Revision-Date: 2007-08-15 15:52+0200\n" "Last-Translator: Rolf Ahrenberg \n" "Language-Team: \n" @@ -18,6 +18,21 @@ msgstr "" "Content-Type: text/plain; charset=ISO-8859-15\n" "Content-Transfer-Encoding: 8bit\n" +msgid "off" +msgstr "pois" + +msgid "on" +msgstr "" + +msgid "none" +msgstr "tyhjä" + +msgid "high" +msgstr "" + +msgid "low" +msgstr "" + msgid "*** Invalid Channel ***" msgstr "*** Virheellinen kanavavalinta ***" @@ -222,9 +237,6 @@ msgstr "vapaa" msgid "encrypted" msgstr "salattu" -msgid "auto" -msgstr "auto" - msgid "Edit channel" msgstr "Muokkaa kanavaa" @@ -273,21 +285,18 @@ msgstr "Palvelu-ID" msgid "Polarization" msgstr "Polarisaatio" +msgid "System" +msgstr "" + msgid "Srate" msgstr "Symbolinopeus" msgid "Inversion" msgstr "Inversio" -msgid "off" -msgstr "pois" - msgid "CoderateH" msgstr "Suojaustaso (HP)" -msgid "none" -msgstr "tyhjä" - msgid "CoderateL" msgstr "Suojaustaso (LP)" @@ -306,6 +315,15 @@ msgstr "Suojav msgid "Hierarchy" msgstr "Hierarkia" +msgid "Alpha" +msgstr "" + +msgid "Priority" +msgstr "Prioriteetti" + +msgid "Rolloff" +msgstr "" + msgid "Channel settings are not unique!" msgstr "Kanava-asetukset eivät ole yksilölliset!" @@ -351,9 +369,6 @@ msgstr "Lopetus" msgid "VPS" msgstr "VPS" -msgid "Priority" -msgstr "Prioriteetti" - msgid "Lifetime" msgstr "Elinikä" @@ -780,7 +795,7 @@ msgid "Setup.Miscellaneous$Initial volume" msgstr "Äänenvoimakkuus käynnistettäessä" msgid "Setup.Miscellaneous$Emergency exit" -msgstr "" +msgstr "Käytä hätäsammutusta" msgid "Plugins" msgstr "Laajennokset" @@ -894,6 +909,9 @@ msgstr "Korvaa" msgid "Button$Insert" msgstr "Lisää" +msgid "auto" +msgstr "auto" + msgid "Plugin" msgstr "Laajennos" diff --git a/po/fr_FR.po b/po/fr_FR.po index 35d35af..8466941 100644 --- a/po/fr_FR.po +++ b/po/fr_FR.po @@ -13,7 +13,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.5.7\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2007-11-25 14:59+0100\n" +"POT-Creation-Date: 2008-01-27 15:00+0100\n" "PO-Revision-Date: 2007-10-18 16:12+0100\n" "Last-Translator: Michael Nival \n" "Language-Team: \n" @@ -21,6 +21,21 @@ msgstr "" "Content-Type: text/plain; charset=ISO-8859-1\n" "Content-Transfer-Encoding: 8bit\n" +msgid "off" +msgstr "off" + +msgid "on" +msgstr "" + +msgid "none" +msgstr "aucun" + +msgid "high" +msgstr "" + +msgid "low" +msgstr "" + msgid "*** Invalid Channel ***" msgstr "*** Chaîne invalide ! ***" @@ -225,9 +240,6 @@ msgstr "Aucun cryptage" msgid "encrypted" msgstr "Crypté" -msgid "auto" -msgstr "auto" - msgid "Edit channel" msgstr "Modifier une chaîne" @@ -276,21 +288,18 @@ msgstr "Sid" msgid "Polarization" msgstr "Polarisation" +msgid "System" +msgstr "" + msgid "Srate" msgstr "Fréq. Symbole" msgid "Inversion" msgstr "Inversion" -msgid "off" -msgstr "off" - msgid "CoderateH" msgstr "CoderateH" -msgid "none" -msgstr "aucun" - msgid "CoderateL" msgstr "CoderateL" @@ -309,6 +318,15 @@ msgstr "Guard" msgid "Hierarchy" msgstr "Hiérarchie" +msgid "Alpha" +msgstr "" + +msgid "Priority" +msgstr "Priorité" + +msgid "Rolloff" +msgstr "" + msgid "Channel settings are not unique!" msgstr "Caractéristiques des chaînes non uniques" @@ -354,9 +372,6 @@ msgstr "Fin" msgid "VPS" msgstr "VPS" -msgid "Priority" -msgstr "Priorité" - msgid "Lifetime" msgstr "Durée de vie" @@ -897,6 +912,9 @@ msgstr "Ecraser" msgid "Button$Insert" msgstr "Insérer" +msgid "auto" +msgstr "auto" + msgid "Plugin" msgstr "Plugin" diff --git a/po/hr_HR.po b/po/hr_HR.po index a7bf2e1..421d8c3 100644 --- a/po/hr_HR.po +++ b/po/hr_HR.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.5.7\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2007-11-25 14:59+0100\n" +"POT-Creation-Date: 2008-01-27 15:00+0100\n" "PO-Revision-Date: 2007-08-12 14:17+0200\n" "Last-Translator: Drazen Dupor \n" "Language-Team: \n" @@ -16,6 +16,21 @@ msgstr "" "Content-Type: text/plain; charset=ISO-8859-2\n" "Content-Transfer-Encoding: 8bit\n" +msgid "off" +msgstr "ugasi" + +msgid "on" +msgstr "" + +msgid "none" +msgstr "nijedan" + +msgid "high" +msgstr "" + +msgid "low" +msgstr "" + msgid "*** Invalid Channel ***" msgstr "*** Neispravan program ***" @@ -220,9 +235,6 @@ msgstr "" msgid "encrypted" msgstr "" -msgid "auto" -msgstr "automatski" - msgid "Edit channel" msgstr "Ureðivanje programa" @@ -271,21 +283,18 @@ msgstr "Sid" msgid "Polarization" msgstr "Polarizacija" +msgid "System" +msgstr "" + msgid "Srate" msgstr "Srate" msgid "Inversion" msgstr "Inverzija" -msgid "off" -msgstr "ugasi" - msgid "CoderateH" msgstr "CoderateH" -msgid "none" -msgstr "nijedan" - msgid "CoderateL" msgstr "CoderateL" @@ -304,6 +313,15 @@ msgstr "Za msgid "Hierarchy" msgstr "Hijerarhija" +msgid "Alpha" +msgstr "" + +msgid "Priority" +msgstr "Prioritet" + +msgid "Rolloff" +msgstr "" + msgid "Channel settings are not unique!" msgstr "Parametri programa nisu jednoznaèni!" @@ -349,9 +367,6 @@ msgstr "Kraj" msgid "VPS" msgstr "VPS" -msgid "Priority" -msgstr "Prioritet" - msgid "Lifetime" msgstr "Trajanje" @@ -892,6 +907,9 @@ msgstr "Prepi msgid "Button$Insert" msgstr "Umetni" +msgid "auto" +msgstr "automatski" + msgid "Plugin" msgstr "Plugin" diff --git a/po/hu_HU.po b/po/hu_HU.po index ebd244f..e2f674e 100644 --- a/po/hu_HU.po +++ b/po/hu_HU.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.5.7\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-01-13 14:21+0100\n" +"POT-Creation-Date: 2008-01-27 15:00+0100\n" "PO-Revision-Date: 2007-12-01 21:42+0200\n" "Last-Translator: István Füley \n" "Language-Team: \n" @@ -18,6 +18,21 @@ msgstr "" "Content-Type: text/plain; charset=ISO-8859-2\n" "Content-Transfer-Encoding: 8bit\n" +msgid "off" +msgstr "ki" + +msgid "on" +msgstr "" + +msgid "none" +msgstr "semmi" + +msgid "high" +msgstr "" + +msgid "low" +msgstr "" + msgid "*** Invalid Channel ***" msgstr "*** Érvénytelen csatorna ***" @@ -222,9 +237,6 @@ msgstr "K msgid "encrypted" msgstr "Kódolt" -msgid "auto" -msgstr "auto" - msgid "Edit channel" msgstr "Csatornák beállítása" @@ -273,21 +285,18 @@ msgstr "Sid" msgid "Polarization" msgstr "Polarizáció" +msgid "System" +msgstr "" + msgid "Srate" msgstr "Srate" msgid "Inversion" msgstr "Inversion" -msgid "off" -msgstr "ki" - msgid "CoderateH" msgstr "CoderateH" -msgid "none" -msgstr "semmi" - msgid "CoderateL" msgstr "CoderateL" @@ -306,6 +315,15 @@ msgstr "Guard" msgid "Hierarchy" msgstr "Hierarhia" +msgid "Alpha" +msgstr "" + +msgid "Priority" +msgstr "Prioritás" + +msgid "Rolloff" +msgstr "" + msgid "Channel settings are not unique!" msgstr "Az adóbeállítások nem egyértelmûek" @@ -351,9 +369,6 @@ msgstr "V msgid "VPS" msgstr "VPS" -msgid "Priority" -msgstr "Prioritás" - msgid "Lifetime" msgstr "Élettartam" @@ -895,6 +910,9 @@ msgstr " msgid "Button$Insert" msgstr "Beilleszteni" +msgid "auto" +msgstr "auto" + msgid "Plugin" msgstr "Plugin" diff --git a/po/it_IT.po b/po/it_IT.po index 2f88680..d93f206 100644 --- a/po/it_IT.po +++ b/po/it_IT.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.5.7\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2007-11-25 14:59+0100\n" +"POT-Creation-Date: 2008-01-27 15:00+0100\n" "PO-Revision-Date: 2007-10-16 02:15+0100\n" "Last-Translator: Diego Pierotto \n" "Language-Team: \n" @@ -18,6 +18,21 @@ msgstr "" "Content-Type: text/plain; charset=ISO-8859-15\n" "Content-Transfer-Encoding: 8bit\n" +msgid "off" +msgstr "off" + +msgid "on" +msgstr "" + +msgid "none" +msgstr "nessuno" + +msgid "high" +msgstr "" + +msgid "low" +msgstr "" + msgid "*** Invalid Channel ***" msgstr "*** Canale NON valido ***" @@ -222,9 +237,6 @@ msgstr "in chiaro" msgid "encrypted" msgstr "criptato" -msgid "auto" -msgstr "automatico" - msgid "Edit channel" msgstr "Modifica canale" @@ -273,21 +285,18 @@ msgstr "Sid" msgid "Polarization" msgstr "Polarizzazione" +msgid "System" +msgstr "" + msgid "Srate" msgstr "SymbolRate" msgid "Inversion" msgstr "Inversion" -msgid "off" -msgstr "off" - msgid "CoderateH" msgstr "CoderateH" -msgid "none" -msgstr "nessuno" - msgid "CoderateL" msgstr "CoderateL" @@ -306,6 +315,15 @@ msgstr "Guard" msgid "Hierarchy" msgstr "Hierarchy" +msgid "Alpha" +msgstr "" + +msgid "Priority" +msgstr "Priorità" + +msgid "Rolloff" +msgstr "" + msgid "Channel settings are not unique!" msgstr "Parametri canale non univoci!" @@ -351,9 +369,6 @@ msgstr "Fine" msgid "VPS" msgstr "VPS" -msgid "Priority" -msgstr "Priorità" - msgid "Lifetime" msgstr "Durata" @@ -894,6 +909,9 @@ msgstr "Sovrascrivi" msgid "Button$Insert" msgstr "Inserisci" +msgid "auto" +msgstr "automatico" + msgid "Plugin" msgstr "Plugin" diff --git a/po/nl_NL.po b/po/nl_NL.po index e945bef..9fc1177 100644 --- a/po/nl_NL.po +++ b/po/nl_NL.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.5.7\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2007-11-25 14:59+0100\n" +"POT-Creation-Date: 2008-01-27 15:00+0100\n" "PO-Revision-Date: 2007-08-12 14:17+0200\n" "Last-Translator: Maarten Wisse \n" "Language-Team: \n" @@ -17,6 +17,21 @@ msgstr "" "Content-Type: text/plain; charset=ISO-8859-15\n" "Content-Transfer-Encoding: 8bit\n" +msgid "off" +msgstr "uit" + +msgid "on" +msgstr "" + +msgid "none" +msgstr "geen" + +msgid "high" +msgstr "" + +msgid "low" +msgstr "" + msgid "*** Invalid Channel ***" msgstr "*** Ongeldig kanaal ***" @@ -221,9 +236,6 @@ msgstr "" msgid "encrypted" msgstr "" -msgid "auto" -msgstr "auto" - msgid "Edit channel" msgstr "Kanaal aanpassen" @@ -272,21 +284,18 @@ msgstr "Sid" msgid "Polarization" msgstr "Polarisatie" +msgid "System" +msgstr "" + msgid "Srate" msgstr "Srate" msgid "Inversion" msgstr "Inversion" -msgid "off" -msgstr "uit" - msgid "CoderateH" msgstr "CoderateH" -msgid "none" -msgstr "geen" - msgid "CoderateL" msgstr "CoderateL" @@ -305,6 +314,15 @@ msgstr "Guard" msgid "Hierarchy" msgstr "Hierarchy" +msgid "Alpha" +msgstr "" + +msgid "Priority" +msgstr "Prioriteit" + +msgid "Rolloff" +msgstr "" + msgid "Channel settings are not unique!" msgstr "Kanaalinstellingen zijn niet uniek!" @@ -350,9 +368,6 @@ msgstr "Einde" msgid "VPS" msgstr "VPS" -msgid "Priority" -msgstr "Prioriteit" - msgid "Lifetime" msgstr "Bewaarduur" @@ -893,6 +908,9 @@ msgstr "Overschrijven" msgid "Button$Insert" msgstr "Invoegen" +msgid "auto" +msgstr "auto" + msgid "Plugin" msgstr "Plugin" diff --git a/po/nn_NO.po b/po/nn_NO.po index bd2238e..4c4c267 100644 --- a/po/nn_NO.po +++ b/po/nn_NO.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.5.7\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2007-11-25 14:59+0100\n" +"POT-Creation-Date: 2008-01-27 15:00+0100\n" "PO-Revision-Date: 2007-08-12 14:17+0200\n" "Last-Translator: Truls Slevigen \n" "Language-Team: \n" @@ -16,6 +16,21 @@ msgstr "" "Content-Type: text/plain; charset=ISO-8859-1\n" "Content-Transfer-Encoding: 8bit\n" +msgid "off" +msgstr "" + +msgid "on" +msgstr "" + +msgid "none" +msgstr "" + +msgid "high" +msgstr "" + +msgid "low" +msgstr "" + msgid "*** Invalid Channel ***" msgstr "*** Ugyldig Kanal! ***" @@ -220,9 +235,6 @@ msgstr "" msgid "encrypted" msgstr "" -msgid "auto" -msgstr "" - msgid "Edit channel" msgstr "Editer kanal" @@ -271,21 +283,18 @@ msgstr "Sid" msgid "Polarization" msgstr "Polarisasjon" +msgid "System" +msgstr "" + msgid "Srate" msgstr "Srate" msgid "Inversion" msgstr "Inversion" -msgid "off" -msgstr "" - msgid "CoderateH" msgstr "CoderateH" -msgid "none" -msgstr "" - msgid "CoderateL" msgstr "CoderateL" @@ -304,6 +313,15 @@ msgstr "Guard" msgid "Hierarchy" msgstr "Hierarchy" +msgid "Alpha" +msgstr "" + +msgid "Priority" +msgstr "Prioritet" + +msgid "Rolloff" +msgstr "" + msgid "Channel settings are not unique!" msgstr "" @@ -349,9 +367,6 @@ msgstr "Slutt" msgid "VPS" msgstr "" -msgid "Priority" -msgstr "Prioritet" - msgid "Lifetime" msgstr "Levetid" @@ -892,6 +907,9 @@ msgstr "" msgid "Button$Insert" msgstr "" +msgid "auto" +msgstr "" + msgid "Plugin" msgstr "Plugin" diff --git a/po/pl_PL.po b/po/pl_PL.po index d8be877..3ffef6a 100644 --- a/po/pl_PL.po +++ b/po/pl_PL.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.5.7\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2007-11-25 14:59+0100\n" +"POT-Creation-Date: 2008-01-27 15:00+0100\n" "PO-Revision-Date: 2007-08-12 14:17+0200\n" "Last-Translator: Michael Rakowski \n" "Language-Team: \n" @@ -15,6 +15,21 @@ msgstr "" "Content-Type: text/plain; charset=ISO-8859-2\n" "Content-Transfer-Encoding: 8bit\n" +msgid "off" +msgstr "wy³±cz" + +msgid "on" +msgstr "" + +msgid "none" +msgstr "brak" + +msgid "high" +msgstr "" + +msgid "low" +msgstr "" + msgid "*** Invalid Channel ***" msgstr "*** Niepoprawny kana³ ***" @@ -219,9 +234,6 @@ msgstr "nieszyfrowany" msgid "encrypted" msgstr "szyfrowany" -msgid "auto" -msgstr "auto" - msgid "Edit channel" msgstr "Edycja kana³u" @@ -270,21 +282,18 @@ msgstr "Sid" msgid "Polarization" msgstr "Polaryzacja" +msgid "System" +msgstr "" + msgid "Srate" msgstr "Srate" msgid "Inversion" msgstr "Inwersja" -msgid "off" -msgstr "wy³±cz" - msgid "CoderateH" msgstr "CoderateH" -msgid "none" -msgstr "brak" - msgid "CoderateL" msgstr "CoderateL" @@ -303,6 +312,15 @@ msgstr "Guard" msgid "Hierarchy" msgstr "Hierarchia" +msgid "Alpha" +msgstr "" + +msgid "Priority" +msgstr "Priorytet" + +msgid "Rolloff" +msgstr "" + msgid "Channel settings are not unique!" msgstr "Ustawienia kana³u nie s± unikalne!" @@ -348,9 +366,6 @@ msgstr "Koniec" msgid "VPS" msgstr "VPS" -msgid "Priority" -msgstr "Priorytet" - msgid "Lifetime" msgstr "Czas ¿ycia" @@ -891,6 +906,9 @@ msgstr "Nadpisz" msgid "Button$Insert" msgstr "Wstaw" +msgid "auto" +msgstr "auto" + msgid "Plugin" msgstr "Wtyczka" diff --git a/po/pt_PT.po b/po/pt_PT.po index 1786077..1d78201 100644 --- a/po/pt_PT.po +++ b/po/pt_PT.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.5.7\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2007-11-25 14:59+0100\n" +"POT-Creation-Date: 2008-01-27 15:00+0100\n" "PO-Revision-Date: 2007-08-12 14:17+0200\n" "Last-Translator: Paulo Lopes \n" "Language-Team: \n" @@ -15,6 +15,21 @@ msgstr "" "Content-Type: text/plain; charset=ISO-8859-1\n" "Content-Transfer-Encoding: 8bit\n" +msgid "off" +msgstr "off" + +msgid "on" +msgstr "" + +msgid "none" +msgstr "" + +msgid "high" +msgstr "" + +msgid "low" +msgstr "" + msgid "*** Invalid Channel ***" msgstr "*** Canal Inválido! ***" @@ -219,9 +234,6 @@ msgstr "" msgid "encrypted" msgstr "" -msgid "auto" -msgstr "" - msgid "Edit channel" msgstr "Modificar canal" @@ -270,21 +282,18 @@ msgstr "Sid" msgid "Polarization" msgstr "Polarização" +msgid "System" +msgstr "" + msgid "Srate" msgstr "Srate" msgid "Inversion" msgstr "Inversion" -msgid "off" -msgstr "off" - msgid "CoderateH" msgstr "CoderateH" -msgid "none" -msgstr "" - msgid "CoderateL" msgstr "CoderateL" @@ -303,6 +312,15 @@ msgstr "Guard" msgid "Hierarchy" msgstr "Hierarchy" +msgid "Alpha" +msgstr "" + +msgid "Priority" +msgstr "Prioridade" + +msgid "Rolloff" +msgstr "" + msgid "Channel settings are not unique!" msgstr "" @@ -348,9 +366,6 @@ msgstr "Fim" msgid "VPS" msgstr "" -msgid "Priority" -msgstr "Prioridade" - msgid "Lifetime" msgstr "Duração" @@ -891,6 +906,9 @@ msgstr "" msgid "Button$Insert" msgstr "" +msgid "auto" +msgstr "" + msgid "Plugin" msgstr "Plugin" diff --git a/po/ro_RO.po b/po/ro_RO.po index 72fc8b9..21bc1b8 100644 --- a/po/ro_RO.po +++ b/po/ro_RO.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.5.7\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2007-11-25 14:59+0100\n" +"POT-Creation-Date: 2008-01-27 15:00+0100\n" "PO-Revision-Date: 2007-08-12 14:17+0200\n" "Last-Translator: Lucian Muresan \n" "Language-Team: \n" @@ -16,6 +16,21 @@ msgstr "" "Content-Type: text/plain; charset=ISO-8859-2\n" "Content-Transfer-Encoding: 8bit\n" +msgid "off" +msgstr "inactiv" + +msgid "on" +msgstr "" + +msgid "none" +msgstr "niciuna(ul)" + +msgid "high" +msgstr "" + +msgid "low" +msgstr "" + msgid "*** Invalid Channel ***" msgstr "*** Canal invalid ***" @@ -220,9 +235,6 @@ msgstr "FTA (necriptat)" msgid "encrypted" msgstr "criptat" -msgid "auto" -msgstr "automat" - msgid "Edit channel" msgstr "Modificare canal" @@ -271,21 +283,18 @@ msgstr "Sid" msgid "Polarization" msgstr "Polarizare" +msgid "System" +msgstr "" + msgid "Srate" msgstr "Ratã simboluri" msgid "Inversion" msgstr "Inversiune" -msgid "off" -msgstr "inactiv" - msgid "CoderateH" msgstr "CoderateH" -msgid "none" -msgstr "niciuna(ul)" - msgid "CoderateL" msgstr "CoderateL" @@ -304,6 +313,15 @@ msgstr "Guard" msgid "Hierarchy" msgstr "Ierarhie" +msgid "Alpha" +msgstr "" + +msgid "Priority" +msgstr "Prioritate" + +msgid "Rolloff" +msgstr "" + msgid "Channel settings are not unique!" msgstr "Parametrii canalului nu sunt univoci!" @@ -349,9 +367,6 @@ msgstr "Sf msgid "VPS" msgstr "VPS" -msgid "Priority" -msgstr "Prioritate" - msgid "Lifetime" msgstr "Timp de pãstrare" @@ -892,6 +907,9 @@ msgstr "Suprascrie" msgid "Button$Insert" msgstr "Insereazã" +msgid "auto" +msgstr "automat" + msgid "Plugin" msgstr "Plugin (modul adiþional)" diff --git a/po/ru_RU.po b/po/ru_RU.po index 6f6038e..2fe55ad 100644 --- a/po/ru_RU.po +++ b/po/ru_RU.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.5.7\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2007-11-25 14:59+0100\n" +"POT-Creation-Date: 2008-01-27 15:00+0100\n" "PO-Revision-Date: 2007-11-05 14:24+0100\n" "Last-Translator: Oleg Roitburd \n" "Language-Team: \n" @@ -16,6 +16,21 @@ msgstr "" "Content-Type: text/plain; charset=ISO-8859-5\n" "Content-Transfer-Encoding: 8bit\n" +msgid "off" +msgstr "ÒëÚÛ" + +msgid "on" +msgstr "" + +msgid "none" +msgstr "ÝØçÕÓÞ" + +msgid "high" +msgstr "" + +msgid "low" +msgstr "" + msgid "*** Invalid Channel ***" msgstr "*** ½ÕßàÐÒØÛìÝëÙ ÚÐÝÐÛ ***" @@ -220,9 +235,6 @@ msgstr "FTA ( msgid "encrypted" msgstr "×ÐÚÞÔØàÞÒÐÝÞ" -msgid "auto" -msgstr "ÐÒâÞ" - msgid "Edit channel" msgstr "ÀÕÔÐÚâØàÞÒÐÝØÕ ÚÐÝÐÛÐ" @@ -271,21 +283,18 @@ msgstr "Sid" msgid "Polarization" msgstr "¿ÞÛïàØ×ÐæØï" +msgid "System" +msgstr "" + msgid "Srate" msgstr "ÁØÜÒ. áÚÞàÞáâì" msgid "Inversion" msgstr "¸ÝÒÕàáØï" -msgid "off" -msgstr "ÒëÚÛ" - msgid "CoderateH" msgstr "CoderateH" -msgid "none" -msgstr "ÝØçÕÓÞ" - msgid "CoderateL" msgstr "CoderateL" @@ -304,6 +313,15 @@ msgstr " msgid "Hierarchy" msgstr "¸ÕàÐàåØï" +msgid "Alpha" +msgstr "" + +msgid "Priority" +msgstr "¿àØÞàØâÕâ" + +msgid "Rolloff" +msgstr "" + msgid "Channel settings are not unique!" msgstr "½ÐáâàÞÙÚØ ÚÐÝÐÛÐ ÝÕ ãÝØÚÐÛìÝë!" @@ -349,9 +367,6 @@ msgstr " msgid "VPS" msgstr "VPS ßÞßàÐÒÚÐ" -msgid "Priority" -msgstr "¿àØÞàØâÕâ" - msgid "Lifetime" msgstr "ÁàÞÚ åàÐÝÕÝØï" @@ -892,6 +907,9 @@ msgstr " msgid "Button$Insert" msgstr "²áâÐÒÚÐ" +msgid "auto" +msgstr "ÐÒâÞ" + msgid "Plugin" msgstr "¼ÞÔãÛì" diff --git a/po/sl_SI.po b/po/sl_SI.po index 002b82c..584838b 100644 --- a/po/sl_SI.po +++ b/po/sl_SI.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.5.7\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2007-11-25 14:59+0100\n" +"POT-Creation-Date: 2008-01-27 15:00+0100\n" "PO-Revision-Date: 2007-08-12 14:17+0200\n" "Last-Translator: Matjaz Thaler \n" "Language-Team: \n" @@ -16,6 +16,21 @@ msgstr "" "Content-Type: text/plain; charset=ISO-8859-2\n" "Content-Transfer-Encoding: 8bit\n" +msgid "off" +msgstr "izklop" + +msgid "on" +msgstr "" + +msgid "none" +msgstr "nobeden" + +msgid "high" +msgstr "" + +msgid "low" +msgstr "" + msgid "*** Invalid Channel ***" msgstr "*** Neznan kanal ***" @@ -220,9 +235,6 @@ msgstr "nekodiran" msgid "encrypted" msgstr "kodiran" -msgid "auto" -msgstr "avtomatsko" - msgid "Edit channel" msgstr "Uredi kanal" @@ -271,21 +283,18 @@ msgstr "Sid" msgid "Polarization" msgstr "Polarizacija" +msgid "System" +msgstr "" + msgid "Srate" msgstr "Srate" msgid "Inversion" msgstr "Inverzija" -msgid "off" -msgstr "izklop" - msgid "CoderateH" msgstr "CoderateH" -msgid "none" -msgstr "nobeden" - msgid "CoderateL" msgstr "CoderateL" @@ -304,6 +313,15 @@ msgstr "Za msgid "Hierarchy" msgstr "Hierarhija" +msgid "Alpha" +msgstr "" + +msgid "Priority" +msgstr "Prioriteta" + +msgid "Rolloff" +msgstr "" + msgid "Channel settings are not unique!" msgstr "Nastavitve kanala niso edinstvene!" @@ -349,9 +367,6 @@ msgstr "Konec" msgid "VPS" msgstr "VPS" -msgid "Priority" -msgstr "Prioriteta" - msgid "Lifetime" msgstr "Veljavnost" @@ -892,6 +907,9 @@ msgstr "Prepi msgid "Button$Insert" msgstr "Vstavi" +msgid "auto" +msgstr "avtomatsko" + msgid "Plugin" msgstr "Vstavek" diff --git a/po/sv_SE.po b/po/sv_SE.po index 40d3c25..68920f2 100644 --- a/po/sv_SE.po +++ b/po/sv_SE.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.5.7\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2007-11-25 14:59+0100\n" +"POT-Creation-Date: 2008-01-27 15:00+0100\n" "PO-Revision-Date: 2007-08-12 14:17+0200\n" "Last-Translator: Tomas Prybil \n" "Language-Team: \n" @@ -16,6 +16,21 @@ msgstr "" "Content-Type: text/plain; charset=ISO-8859-1\n" "Content-Transfer-Encoding: 8bit\n" +msgid "off" +msgstr "av" + +msgid "on" +msgstr "" + +msgid "none" +msgstr "ingen" + +msgid "high" +msgstr "" + +msgid "low" +msgstr "" + msgid "*** Invalid Channel ***" msgstr "*** Felaktig kanal ***" @@ -220,9 +235,6 @@ msgstr "Okodad" msgid "encrypted" msgstr "krypterad" -msgid "auto" -msgstr "automatisk" - msgid "Edit channel" msgstr "Ändra kanal" @@ -271,21 +283,18 @@ msgstr "Sid" msgid "Polarization" msgstr "Polarisation" +msgid "System" +msgstr "" + msgid "Srate" msgstr "Srate" msgid "Inversion" msgstr "Inversion" -msgid "off" -msgstr "av" - msgid "CoderateH" msgstr "CoderateH" -msgid "none" -msgstr "ingen" - msgid "CoderateL" msgstr "CoderateL" @@ -304,6 +313,15 @@ msgstr "Guard" msgid "Hierarchy" msgstr "Hierarchy" +msgid "Alpha" +msgstr "" + +msgid "Priority" +msgstr "Prioritet" + +msgid "Rolloff" +msgstr "" + msgid "Channel settings are not unique!" msgstr "Kanalinställningarna är ej unika!" @@ -349,9 +367,6 @@ msgstr "Slutar" msgid "VPS" msgstr "VPS" -msgid "Priority" -msgstr "Prioritet" - msgid "Lifetime" msgstr "Livstid" @@ -892,6 +907,9 @@ msgstr "Skriv msgid "Button$Insert" msgstr "Infoga" +msgid "auto" +msgstr "automatisk" + msgid "Plugin" msgstr "Modul" diff --git a/po/tr_TR.po b/po/tr_TR.po index 57a7309..0b25c72 100644 --- a/po/tr_TR.po +++ b/po/tr_TR.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.5.7\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2007-11-25 14:59+0100\n" +"POT-Creation-Date: 2008-01-27 15:00+0100\n" "PO-Revision-Date: 2007-08-24 14:37+0200\n" "Last-Translator: Oktay Yolgeçen \n" "Language-Team: \n" @@ -15,6 +15,21 @@ msgstr "" "Content-Type: text/plain; charset=ISO-8859-9\n" "Content-Transfer-Encoding: 8bit\n" +msgid "off" +msgstr "kapalý" + +msgid "on" +msgstr "" + +msgid "none" +msgstr "hiç" + +msgid "high" +msgstr "" + +msgid "low" +msgstr "" + msgid "*** Invalid Channel ***" msgstr "*** Geçersiz kanal ***" @@ -219,9 +234,6 @@ msgstr " msgid "encrypted" msgstr "Þifreli" -msgid "auto" -msgstr "otomatik" - msgid "Edit channel" msgstr "Kanal ayarlarýný deðiþtir" @@ -270,21 +282,18 @@ msgstr "Sid" msgid "Polarization" msgstr "Kutuplaþma" +msgid "System" +msgstr "" + msgid "Srate" msgstr "Srate" msgid "Inversion" msgstr "Ýnversiyon" -msgid "off" -msgstr "kapalý" - msgid "CoderateH" msgstr "CoderateH" -msgid "none" -msgstr "hiç" - msgid "CoderateL" msgstr "CoderateL" @@ -303,6 +312,15 @@ msgstr "Koruma" msgid "Hierarchy" msgstr "Hiyerarþi" +msgid "Alpha" +msgstr "" + +msgid "Priority" +msgstr "Öncelik" + +msgid "Rolloff" +msgstr "" + msgid "Channel settings are not unique!" msgstr "Kanal ayarlarý belli deðýl!" @@ -348,9 +366,6 @@ msgstr "Biti msgid "VPS" msgstr "VPS" -msgid "Priority" -msgstr "Öncelik" - msgid "Lifetime" msgstr "Ömrü" @@ -891,6 +906,9 @@ msgstr " msgid "Button$Insert" msgstr "Ekle" +msgid "auto" +msgstr "otomatik" + msgid "Plugin" msgstr "Eklenti" diff --git a/po/uk_UA.po b/po/uk_UA.po index 70afcaf..62ec8cf 100644 --- a/po/uk_UA.po +++ b/po/uk_UA.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.5.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2007-11-25 14:59+0100\n" +"POT-Creation-Date: 2008-01-27 15:00+0100\n" "PO-Revision-Date: 2007-08-12 14:17+0200\n" "Last-Translator: Yarema Aka Knedlyk \n" "Language-Team: \n" @@ -15,6 +15,21 @@ msgstr "" "Content-Type: text/plain; charset=ISO-8859-5\n" "Content-Transfer-Encoding: 8bit\n" +msgid "off" +msgstr "ÒØÚÛ" + +msgid "on" +msgstr "" + +msgid "none" +msgstr "ÝöçÞÓÞ" + +msgid "high" +msgstr "" + +msgid "low" +msgstr "" + msgid "*** Invalid Channel ***" msgstr "*** ½ÕßàÐÒØÛìÝØÙ ÚÐÝÐÛ ***" @@ -219,9 +234,6 @@ msgstr "FTA ( msgid "encrypted" msgstr "×ÐÚÞÔÞÒÐÝÞ" -msgid "auto" -msgstr "ÐÒâÞ" - msgid "Edit channel" msgstr "ÀÕÔÐÚâãÒÐÝÝï ÚÐÝÐÛã" @@ -270,21 +282,18 @@ msgstr "Sid" msgid "Polarization" msgstr "¿ÞÛïàØ×Ðæöï" +msgid "System" +msgstr "" + msgid "Srate" msgstr "ÁØÜÒ. èÒØÔÚöáâì" msgid "Inversion" msgstr "¦ÝÒÕàáöï" -msgid "off" -msgstr "ÒØÚÛ" - msgid "CoderateH" msgstr "CoderateH" -msgid "none" -msgstr "ÝöçÞÓÞ" - msgid "CoderateL" msgstr "CoderateL" @@ -303,6 +312,15 @@ msgstr " msgid "Hierarchy" msgstr "¦ôàÐàåöï" +msgid "Alpha" +msgstr "" + +msgid "Priority" +msgstr "¿àöÞàØâÕâ" + +msgid "Rolloff" +msgstr "" + msgid "Channel settings are not unique!" msgstr "½ÐáâàÞÙÚØ ÚÐÝÐÛã ÝÕ ôÔØÝö!" @@ -348,9 +366,6 @@ msgstr " msgid "VPS" msgstr "VPS ßÞßàÐÒÚÐ" -msgid "Priority" -msgstr "¿àöÞàØâÕâ" - msgid "Lifetime" msgstr "ÁâàÞÚ ×ÑÕàöÓÐÝÝï" @@ -893,6 +908,9 @@ msgstr " msgid "Button$Insert" msgstr "²áâÐÒÚÐ" +msgid "auto" +msgstr "ÐÒâÞ" + msgid "Plugin" msgstr "¼ÞÔãÛì" diff --git a/sdt.c b/sdt.c index 29422d8..2ddd7e3 100644 --- a/sdt.c +++ b/sdt.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: sdt.c 1.17 2007/06/10 08:50:49 kls Exp $ + * $Id: sdt.c 1.18 2008/01/27 13:24:25 kls Exp $ */ #include "sdt.h" @@ -55,6 +55,7 @@ void cSdtFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length case 0x02: // digital radio sound service case 0x04: // NVOD reference service case 0x05: // NVOD time-shifted service + case 0x19: // digital HD television service { char NameBuf[Utf8BufSize(1024)]; char ShortNameBuf[Utf8BufSize(1024)]; diff --git a/vdr.5 b/vdr.5 index e01b277..3c83610 100644 --- a/vdr.5 +++ b/vdr.5 @@ -8,7 +8,7 @@ .\" License as specified in the file COPYING that comes with the .\" vdr distribution. .\" -.\" $Id: vdr.5 1.64 2007/08/26 10:57:08 kls Exp $ +.\" $Id: vdr.5 1.65 2008/01/26 14:16:51 kls Exp $ .\" .TH vdr 5 "07 Jan 2007" "1.4.5" "Video Disk Recorder Files" .SH NAME @@ -83,19 +83,23 @@ meaning (and allowed values) are .TS tab (@); l l. -\fBB\fR@Bandwidth (6, 7, 8) -\fBC\fR@Code rate high priority (0, 12, 23, 34, 45, 56, 67, 78, 89) -\fBD\fR@Code rate low priority (0, 12, 23, 34, 45, 56, 67, 78, 89) +\fBA\fR@Alpha (0, 1, 2, 4) +\fBB\fR@Bandwidth (5, 6, 7, 8) +\fBC\fR@Code rate high priority (0, 12, 13, 14, 23, 25, 34, 35, 45, 56, 67, 78, 89, 910) +\fBD\fR@coDe rate low priority (0, 12, 13, 14, 23, 25, 34, 35, 45, 56, 67, 78, 89, 910) \fBG\fR@Guard interval (4, 8, 16, 32) \fBH\fR@Horizontal polarization \fBI\fR@Inversion (0, 1) \fBL\fR@Left circular polarization -\fBM\fR@Modulation (0, 16, 32, 64, 128, 256) +\fBM\fR@Modulation (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 16, 32, 64, 128, 256, 512, 998, 1024) +\fBO\fR@rollOff (0, 20, 25, 35) +\fBP\fR@Priority (0, 1) \fBR\fR@Right circular polarization -\fBT\fR@Transmission mode (2, 8) +\fBT\fR@Transmission mode (2, 4, 8) \fBV\fR@Vertical polarization -\fBY\fR@Hierarchy (0, 1, 2, 4) +\fBY\fR@hierarchY (0, 1) .TE + The polarization parameters have no integer numbers following them. This is for compatibility with files from older versions and also to keep the DVB-S entries as simple as possible. diff --git a/vdr.c b/vdr.c index 05b9e48..2ad3973 100644 --- a/vdr.c +++ b/vdr.c @@ -22,7 +22,7 @@ * * The project's page is at http://www.cadsoft.de/vdr * - * $Id: vdr.c 1.305 2008/01/13 11:51:53 kls Exp $ + * $Id: vdr.c 1.307 2008/01/27 14:38:45 kls Exp $ */ #include @@ -198,6 +198,7 @@ int main(int argc, char *argv[]) bool MuteAudio = false; int WatchdogTimeout = DEFAULTWATCHDOG; const char *Terminal = NULL; + const char *LocaleDir = NULL; bool UseKbd = true; const char *LircDevice = NULL; @@ -229,6 +230,7 @@ int main(int argc, char *argv[]) { "help", no_argument, NULL, 'h' }, { "lib", required_argument, NULL, 'L' }, { "lirc", optional_argument, NULL, 'l' | 0x100 }, + { "localedir",required_argument, NULL, 'l' | 0x200 }, { "log", required_argument, NULL, 'l' }, { "mute", no_argument, NULL, 'm' }, { "no-kbd", no_argument, NULL, 'n' | 0x100 }, @@ -306,6 +308,14 @@ int main(int argc, char *argv[]) case 'l' | 0x100: LircDevice = optarg ? optarg : LIRC_DEVICE; break; + case 'l' | 0x200: + if (access(optarg, R_OK | X_OK) == 0) + LocaleDir = optarg; + else { + fprintf(stderr, "vdr: can't access locale directory: %s\n", optarg); + return 2; + } + break; case 'm': MuteAudio = true; break; case 'n' | 0x100: @@ -407,6 +417,8 @@ int main(int argc, char *argv[]) " -L DIR, --lib=DIR search for plugins in DIR (default is %s)\n" " --lirc[=PATH] use a LIRC remote control device, attached to PATH\n" " (default: %s)\n" + " --localedir=DIR search for locale files in DIR (default is\n" + " %s)\n" " -m, --mute mute audio of the primary DVB device at startup\n" " --no-kbd don't use the keyboard as an input device\n" " -p PORT, --port=PORT use PORT for SVDRP (default: %d)\n" @@ -430,6 +442,7 @@ int main(int argc, char *argv[]) DEFAULTEPGDATAFILENAME, DEFAULTPLUGINDIR, LIRC_DEVICE, + LOCDIR, DEFAULTSVDRPPORT, RCU_DEVICE, VideoDirectory, @@ -515,7 +528,7 @@ int main(int argc, char *argv[]) // Initialize internationalization: - I18nInitialize(); + I18nInitialize(LocaleDir); // Main program loop variables - need to be here to have them initialized before any EXIT(): @@ -717,9 +730,7 @@ int main(int argc, char *argv[]) cChannel *Channel = Channels.GetByNumber(cDevice::CurrentChannel()); if (Channel && (Channel->Vpid() || Channel->Apid(0))) { if (!Channels.SwitchTo(cDevice::CurrentChannel()) // try to switch to the original channel... - && !(LastTimerChannel > 0 && Channels.SwitchTo(LastTimerChannel)) // ...or the one used by the last timer... - && !cDevice::SwitchChannel(1) // ...or the next higher available one... - && !cDevice::SwitchChannel(-1)) // ...or the next lower available one + && !(LastTimerChannel > 0 && Channels.SwitchTo(LastTimerChannel))) // ...or the one used by the last timer... ; } lastTime = Now; // don't do this too often -- cgit v1.2.3