diff options
Diffstat (limited to 'channels.c')
-rw-r--r-- | channels.c | 225 |
1 files changed, 153 insertions, 72 deletions
@@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: channels.c 1.60 2008/03/05 16:42:50 kls Exp $ + * $Id: channels.c 2.2 2008/04/12 13:49:12 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 OldTransponderData = TransponderDataToString(); 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 %s to %s", Number(), *OldTransponderData, *TransponderDataToString()); + 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 OldTransponderData = TransponderDataToString(); source = Source; frequency = Frequency; modulation = Modulation; srate = Srate; coderateH = CoderateH; schedule = NULL; + if (Number()) { + dsyslog("changing transponder data of channel %d from %s to %s", Number(), *OldTransponderData, *TransponderDataToString()); + 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 OldTransponderData = TransponderDataToString(); 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 %s to %s", Number(), *OldTransponderData, *TransponderDataToString()); + modification |= CHANNELMOD_TRANSP; + Channels.SetModified(); + } } return true; } @@ -587,6 +652,13 @@ static int PrintParameter(char *p, char Name, int Value) return Value >= 0 && Value != 999 ? sprintf(p, "%c%d", Name, Value) : 0; } +cString cChannel::TransponderDataToString(void) const +{ + if (cSource::IsTerr(source)) + return cString::sprintf("%d:%s:%s", frequency, *ParametersToString(), *cSource::ToString(source)); + return cString::sprintf("%d:%s:%s:%d", frequency, *ParametersToString(), *cSource::ToString(source), srate); +} + cString cChannel::ParametersToString(void) const { char type = **cSource::ToString(source); @@ -597,13 +669,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 +704,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 +713,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; |