2009-02-24 12:40:16 +01:00
diff -Nru vdr-1.7.4-vanilla/channels.c vdr-1.7.4-pluginparam/channels.c
--- vdr-1.7.4-vanilla/channels.c 2009-01-26 11:44:48.000000000 +0200
+++ vdr-1.7.4-pluginparam/channels.c 2009-02-24 13:31:33.000000000 +0200
2008-12-14 19:27:45 +01:00
@@ -188,6 +188,7 @@
2008-04-13 18:04:03 +02:00
shortName = strdup("");
provider = strdup("");
portalName = strdup("");
+ pluginParam = strdup("");
memset(&__BeginData__, 0, (char *)&__EndData__ - (char *)&__BeginData__);
2008-12-14 19:27:45 +01:00
inversion = INVERSION_AUTO;
bandwidth = 8000000;
@@ -211,6 +212,7 @@
2008-04-13 18:04:03 +02:00
shortName = NULL;
provider = NULL;
portalName = NULL;
+ pluginParam = NULL;
schedule = NULL;
linkChannels = NULL;
refChannel = NULL;
2008-12-14 19:27:45 +01:00
@@ -239,6 +241,7 @@
2008-04-13 18:04:03 +02:00
free(shortName);
free(provider);
free(portalName);
+ free(pluginParam);
}
cChannel& cChannel::operator= (const cChannel &Channel)
2008-12-14 19:27:45 +01:00
@@ -247,6 +250,7 @@
2008-04-13 18:04:03 +02:00
shortName = strcpyrealloc(shortName, Channel.shortName);
provider = strcpyrealloc(provider, Channel.provider);
portalName = strcpyrealloc(portalName, Channel.portalName);
+ pluginParam = strcpyrealloc(pluginParam, Channel.pluginParam);
memcpy(&__BeginData__, &Channel.__BeginData__, (char *)&Channel.__EndData__ - (char *)&Channel.__BeginData__);
return *this;
}
2008-12-14 19:27:45 +01:00
@@ -306,9 +310,26 @@
guard = Channel->guard;
hierarchy = Channel->hierarchy;
2008-04-13 18:04:03 +02:00
rollOff = Channel->rollOff;
+ if (IsPlug()) pluginParam = strcpyrealloc(pluginParam, Channel->pluginParam);
}
}
+bool cChannel::SetPlugTransponderData(int Source, int Frequency, const char *PluginParam)
+{
+ if (source != Source || frequency != Frequency || (strcmp(pluginParam, PluginParam) != 0)) {
+ if (Number()) {
+ dsyslog("changing transponder data of channel %d from %s:%d:%s to %s:%d:%s", Number(), *cSource::ToString(source), frequency, pluginParam, *cSource::ToString(Source), Frequency, PluginParam);
+ modification |= CHANNELMOD_TRANSP;
+ Channels.SetModified();
+ }
+ source = Source;
+ frequency = Frequency;
+ pluginParam = strcpyrealloc(pluginParam, PluginParam);
+ schedule = NULL;
+ }
+ return true;
+}
+
bool cChannel::SetSatTransponderData(int Source, int Frequency, char Polarization, int Srate, int CoderateH, int Modulation, int System, int RollOff)
{
// Workarounds for broadcaster stupidity:
2008-12-14 19:27:45 +01:00
@@ -438,6 +459,18 @@
2008-04-13 18:04:03 +02:00
}
}
+void cChannel::SetPluginParam(const char *PluginParam)
+{
+ if (!isempty(PluginParam) && strcmp(pluginParam, PluginParam) != 0) {
+ if (Number()) {
+ dsyslog("changing plugin parameters of channel %d from '%s' to '%s'", Number(), pluginParam, PluginParam);
+ modification |= CHANNELMOD_TRANSP;
+ Channels.SetModified();
+ }
+ pluginParam = strcpyrealloc(pluginParam, PluginParam);
+ }
+}
+
#define STRDIFF 0x01
#define VALDIFF 0x02
2008-12-14 19:27:45 +01:00
@@ -632,7 +665,7 @@
2008-04-13 18:04:03 +02:00
if (isdigit(type))
type = 'S';
#define ST(s) if (strchr(s, type))
- char buffer[64];
+ char buffer[256];
char *q = buffer;
*q = 0;
ST(" S ") q += sprintf(q, "%c", polarization);
2008-12-14 19:27:45 +01:00
@@ -646,6 +679,7 @@
2008-04-13 18:04:03 +02:00
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));
+ ST("P ") snprintf(buffer, sizeof(buffer), "%s", pluginParam);
return buffer;
}
2008-12-14 19:27:45 +01:00
@@ -674,7 +708,7 @@
2008-04-13 18:04:03 +02:00
bool cChannel::StringToParameters(const char *s)
{
- while (s && *s) {
+ while (s && *s && !IsPlug()) {
switch (toupper(*s)) {
2008-12-14 19:27:45 +01:00
case 'A': s = SkipDigits(s); break; // for compatibility with the "multiproto" approach - may be removed in future versions
2008-04-13 18:04:03 +02:00
case 'B': s = ParseParameter(s, bandwidth, BandwidthValues); break;
2008-12-14 19:27:45 +01:00
@@ -792,7 +826,7 @@
2008-04-13 18:04:03 +02:00
dpids[0] = 0;
ok = false;
if (parambuf && sourcebuf && vpidbuf && apidbuf) {
- ok = StringToParameters(parambuf) && (source = cSource::FromString(sourcebuf)) >= 0;
+ ok = ((source = cSource::FromString(sourcebuf)) >= 0) && StringToParameters(parambuf);
2008-12-14 19:27:45 +01:00
char *p;
if ((p = strchr(vpidbuf, '=')) != NULL) {
@@ -887,6 +921,7 @@
2008-04-13 18:04:03 +02:00
shortName = strcpyrealloc(shortName, p);
}
name = strcpyrealloc(name, namebuf);
+ if (IsPlug()) pluginParam = strcpyrealloc(pluginParam, parambuf);
free(parambuf);
free(sourcebuf);
2009-02-24 12:40:16 +01:00
diff -Nru vdr-1.7.4-vanilla/channels.h vdr-1.7.4-pluginparam/channels.h
--- vdr-1.7.4-vanilla/channels.h 2009-01-26 11:44:48.000000000 +0200
+++ vdr-1.7.4-pluginparam/channels.h 2009-02-24 13:31:33.000000000 +0200
2008-12-14 19:27:45 +01:00
@@ -116,6 +116,7 @@
2008-04-13 18:04:03 +02:00
char *shortName;
char *provider;
char *portalName;
+ char *pluginParam;
int __BeginData__;
int frequency; // MHz
int source;
2008-12-14 19:27:45 +01:00
@@ -171,6 +172,7 @@
2008-04-13 18:04:03 +02:00
int Frequency(void) const { return frequency; } ///< Returns the actual frequency, as given in 'channels.conf'
int Transponder(void) const; ///< Returns the transponder frequency in MHz, plus the polarization in case of sat
static int Transponder(int Frequency, char Polarization); ///< builds the transponder from the given Frequency and Polarization
+ const char *PluginParam(void) const { return pluginParam; }
int Source(void) const { return source; }
int Srate(void) const { return srate; }
int Vpid(void) const { return vpid; }
2008-12-14 19:27:45 +01:00
@@ -208,6 +210,7 @@
2008-04-13 18:04:03 +02:00
int RollOff(void) const { return rollOff; }
const cLinkChannels* LinkChannels(void) const { return linkChannels; }
const cChannel *RefChannel(void) const { return refChannel; }
+ bool IsPlug(void) const { return cSource::IsPlug(source); }
bool IsCable(void) const { return cSource::IsCable(source); }
bool IsSat(void) const { return cSource::IsSat(source); }
bool IsTerr(void) const { return cSource::IsTerr(source); }
2008-12-14 19:27:45 +01:00
@@ -215,12 +218,14 @@
2008-04-13 18:04:03 +02:00
bool HasTimer(void) const;
int Modification(int Mask = CHANNELMOD_ALL);
void CopyTransponderData(const cChannel *Channel);
+ bool SetPlugTransponderData(int Source, int Frequency, const char *PluginParam);
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);
2008-12-14 19:27:45 +01:00
bool SetTerrTransponderData(int Source, int Frequency, int Bandwidth, int Modulation, int Hierarchy, int CodeRateH, int CodeRateL, int Guard, int Transmission);
2008-04-13 18:04:03 +02:00
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);
+ void SetPluginParam(const char *PluginParam);
2008-12-14 19:27:45 +01:00
void SetPids(int Vpid, int Ppid, int Vtype, int *Apids, char ALangs[][MAXLANGCODE2], int *Dpids, char DLangs[][MAXLANGCODE2], int *Spids, char SLangs[][MAXLANGCODE2], int Tpid);
2008-04-13 18:04:03 +02:00
void SetCaIds(const int *CaIds); // list must be zero-terminated
void SetCaDescriptors(int Level);
2009-02-24 12:40:16 +01:00
diff -Nru vdr-1.7.4-vanilla/config.h vdr-1.7.4-pluginparam/config.h
--- vdr-1.7.4-vanilla/config.h 2009-01-26 11:44:48.000000000 +0200
+++ vdr-1.7.4-pluginparam/config.h 2009-02-24 13:31:33.000000000 +0200
2008-04-13 18:04:03 +02:00
@@ -30,6 +30,8 @@
2009-02-24 12:40:16 +01:00
#define APIVERSION "1.7.4"
#define APIVERSNUM 10704 // Version * 10000 + Major * 100 + Minor
2008-04-13 18:04:03 +02:00
+#define PLUGINPARAMPATCHVERSNUM 1
+
// When loading plugins, VDR searches them by their APIVERSION, which
// may be smaller than VDRVERSION in case there have been no changes to
// VDR header files since the last APIVERSION. This allows compiled
2009-02-24 12:40:16 +01:00
diff -Nru vdr-1.7.4-vanilla/menu.c vdr-1.7.4-pluginparam/menu.c
--- vdr-1.7.4-vanilla/menu.c 2009-01-26 11:44:48.000000000 +0200
+++ vdr-1.7.4-pluginparam/menu.c 2009-02-24 13:31:33.000000000 +0200
@@ -190,6 +190,7 @@
2008-04-13 18:04:03 +02:00
cChannel *channel;
cChannel data;
char name[256];
+ char pluginParam[256];
void Setup(void);
public:
cMenuEditChannel(cChannel *Channel, bool New = false);
2009-02-24 12:40:16 +01:00
@@ -222,6 +223,7 @@
2008-04-13 18:04:03 +02:00
// Parameters for all types of sources:
strn0cpy(name, data.name, sizeof(name));
+ strn0cpy(pluginParam, data.pluginParam, sizeof(pluginParam));
Add(new cMenuEditStrItem( tr("Name"), name, sizeof(name)));
Add(new cMenuEditSrcItem( tr("Source"), &data.source));
Add(new cMenuEditIntItem( tr("Frequency"), &data.frequency));
2009-02-24 12:40:16 +01:00
@@ -254,6 +256,7 @@
2008-12-14 19:27:45 +01:00
ST(" T") Add(new cMenuEditMapItem( tr("Guard"), &data.guard, GuardValues));
ST(" T") Add(new cMenuEditMapItem( tr("Hierarchy"), &data.hierarchy, HierarchyValues));
2008-04-13 18:04:03 +02:00
ST(" S ") Add(new cMenuEditMapItem( tr("Rolloff"), &data.rollOff, RollOffValues));
+ ST("P ") Add(new cMenuEditStrItem( tr("Parameters"), pluginParam, sizeof(pluginParam), tr(FileNameChars)));
SetCurrent(Get(current));
Display();
2009-02-24 12:40:16 +01:00
@@ -268,6 +271,7 @@
2008-04-13 18:04:03 +02:00
if (Key == kOk) {
if (Channels.HasUniqueChannelID(&data, channel)) {
data.name = strcpyrealloc(data.name, name);
+ data.pluginParam = strcpyrealloc(data.pluginParam, pluginParam);
if (channel) {
*channel = data;
isyslog("edited channel %d %s", channel->Number(), *data.ToText());
2009-02-24 12:40:16 +01:00
diff -Nru vdr-1.7.4-vanilla/po/fi_FI.po vdr-1.7.4-pluginparam/po/fi_FI.po
--- vdr-1.7.4-vanilla/po/fi_FI.po 2009-01-26 11:44:48.000000000 +0200
+++ vdr-1.7.4-pluginparam/po/fi_FI.po 2009-02-24 13:31:33.000000000 +0200
2008-12-14 19:27:45 +01:00
@@ -1010,3 +1010,6 @@
2008-04-13 18:04:03 +02:00
#, c-format
msgid "VDR will shut down in %s minutes"
msgstr "VDR sammuu %s minuutin kuluttua"
+
+msgid "Parameters"
+msgstr "Parametrit"
2009-02-24 12:40:16 +01:00
diff -Nru vdr-1.7.4-vanilla/po/fr_FR.po vdr-1.7.4-pluginparam/po/fr_FR.po
--- vdr-1.7.4-vanilla/po/fr_FR.po 2009-01-26 11:44:48.000000000 +0200
+++ vdr-1.7.4-pluginparam/po/fr_FR.po 2009-02-24 13:31:33.000000000 +0200
2008-12-14 19:27:45 +01:00
@@ -1013,3 +1013,6 @@
2008-04-13 18:04:03 +02:00
#, c-format
msgid "VDR will shut down in %s minutes"
msgstr "VDR s'arr<72> tera dans %s minutes"
+
+msgid "Parameters"
+msgstr "Param<61> tres"
2009-02-24 12:40:16 +01:00
diff -Nru vdr-1.7.4-vanilla/sources.c vdr-1.7.4-pluginparam/sources.c
--- vdr-1.7.4-vanilla/sources.c 2009-01-26 11:44:48.000000000 +0200
+++ vdr-1.7.4-pluginparam/sources.c 2009-02-24 13:31:33.000000000 +0200
2008-04-13 18:04:03 +02:00
@@ -37,6 +37,7 @@
char buffer[16];
char *q = buffer;
switch (Code & st_Mask) {
+ case stPlug: *q++ = 'P'; break;
case stCable: *q++ = 'C'; break;
case stSat: *q++ = 'S';
{
@@ -56,6 +57,7 @@
{
int type = stNone;
switch (toupper(*s)) {
+ case 'P': type = stPlug; break;
case 'C': type = stCable; break;
case 'S': type = stSat; break;
case 'T': type = stTerr; break;
2009-02-24 12:40:16 +01:00
diff -Nru vdr-1.7.4-vanilla/sources.conf vdr-1.7.4-pluginparam/sources.conf
--- vdr-1.7.4-vanilla/sources.conf 2009-01-26 11:44:48.000000000 +0200
+++ vdr-1.7.4-pluginparam/sources.conf 2009-02-24 13:31:33.000000000 +0200
2008-12-14 19:27:45 +01:00
@@ -194,3 +194,7 @@
2008-04-13 18:04:03 +02:00
# Terrestrial
T Terrestrial
+
+# Plugin
+
+P Plugin
2009-02-24 12:40:16 +01:00
diff -Nru vdr-1.7.4-vanilla/sources.h vdr-1.7.4-pluginparam/sources.h
--- vdr-1.7.4-vanilla/sources.h 2009-01-26 11:44:48.000000000 +0200
+++ vdr-1.7.4-pluginparam/sources.h 2009-02-24 13:31:33.000000000 +0200
2008-04-13 18:04:03 +02:00
@@ -16,10 +16,11 @@
public:
enum eSourceType {
stNone = 0x0000,
+ stPlug = 0x2000,
stCable = 0x4000,
stSat = 0x8000,
stTerr = 0xC000,
- st_Mask = 0xC000,
+ st_Mask = 0xE000,
st_Neg = 0x0800,
st_Pos = 0x07FF,
};
@@ -35,6 +36,7 @@
static cString ToString(int Code);
static int FromString(const char *s);
static int FromData(eSourceType SourceType, int Position = 0, bool East = false);
+ static bool IsPlug(int Code) { return (Code & st_Mask) == stPlug; }
static bool IsCable(int Code) { return (Code & st_Mask) == stCable; }
static bool IsSat(int Code) { return (Code & st_Mask) == stSat; }
static bool IsTerr(int Code) { return (Code & st_Mask) == stTerr; }