5ff12475151eb723454ae61bae85372decec2725
[vuplus_openvuplus_3.0] / meta-bsp / recipes-vuplus / enigma2 / enigma2 / enigma2_vuplus_dvbs2x.patch
1 commit 8b323facfe629645939134a6422e4850425009ce
2 Author: hschang <chang@dev3>
3 Date:   Mon Nov 27 11:45:33 2017 +0900
4
5     Support DVB-S2X
6
7 diff --git a/lib/dvb/db.cpp b/lib/dvb/db.cpp
8 index 0f367be..ca43546 100755
9 --- a/lib/dvb/db.cpp
10 +++ b/lib/dvb/db.cpp
11 @@ -512,7 +512,7 @@ void eDVBDB::saveServicelist(const char *file)
12                 ch.m_frontendParameters->getFlags(flags);
13                 if (!ch.m_frontendParameters->getDVBS(sat))
14                 {
15 -                       if (sat.system == eDVBFrontendParametersSatellite::System_DVB_S2)
16 +                       if ((sat.system == eDVBFrontendParametersSatellite::System_DVB_S2) || (sat.system == eDVBFrontendParametersSatellite::System_DVB_S2X))
17                         {
18                                 fprintf(f, "\ts %d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d\n",
19                                         sat.frequency, sat.symbol_rate,
20 diff --git a/lib/dvb/dvb.cpp b/lib/dvb/dvb.cpp
21 index 852c403..67c3aa9 100644
22 --- a/lib/dvb/dvb.cpp
23 +++ b/lib/dvb/dvb.cpp
24 @@ -414,6 +414,10 @@ bool eDVBResourceManager::frontendIsCompatible(int index, const char *type)
25         {
26                 if (i->m_frontend->getSlotID() == index)
27                 {
28 +                       if (!strcmp(type, "DVB-S2X"))
29 +                       {
30 +                               return i->m_frontend->supportsDeliverySystem(SYS_DVBS2X, false);
31 +                       }
32                         if (!strcmp(type, "DVB-S2"))
33                         {
34                                 return i->m_frontend->supportsDeliverySystem(SYS_DVBS2, false);
35 @@ -456,6 +460,8 @@ void eDVBResourceManager::setFrontendType(int index, const char *type)
36                         {
37                                 whitelist.push_back(SYS_DVBS);
38                                 whitelist.push_back(SYS_DVBS2);
39 +                               if (!strcmp(type, "DVB-S2X"))
40 +                                       whitelist.push_back(SYS_DVBS2X);
41                         }
42                         else if (!strcmp(type, "DVB-T2") || !strcmp(type, "DVB-T"))
43                         {
44 diff --git a/lib/dvb/frontend.cpp b/lib/dvb/frontend.cpp
45 index 91c866c..a2eb0e8 100755
46 --- a/lib/dvb/frontend.cpp
47 +++ b/lib/dvb/frontend.cpp
48 @@ -38,6 +38,9 @@
49  #define FEC_S2_QPSK_4_5 (fe_code_rate_t)(FEC_4_5)
50  #define FEC_S2_QPSK_9_10 (fe_code_rate_t)(FEC_9_10)
51  
52 +/* DVB-S2X */
53 +#define FEC_S2_QPSK_13_45 (fe_code_rate_t)(FEC_13_45)
54 +
55  #include <dvbsi++/satellite_delivery_system_descriptor.h>
56  #include <dvbsi++/cable_delivery_system_descriptor.h>
57  #include <dvbsi++/terrestrial_delivery_system_descriptor.h>
58 @@ -132,23 +135,23 @@ void eDVBFrontendParametersSatellite::set(const SatelliteDeliverySystemDescripto
59                 modulation=eDVBFrontendParametersSatellite::Modulation_QPSK;
60         }
61         rolloff = descriptor.getRollOff();
62 -       if (system == eDVBFrontendParametersSatellite::System_DVB_S2)
63 +       if (system == eDVBFrontendParametersSatellite::System_DVB_S)
64         {
65 -               eDebug("SAT DVB-S2 freq %d, %s, pos %d, sr %d, fec %d, modulation %d, rolloff %d",
66 +               eDebug("SAT DVB-S freq %d, %s, pos %d, sr %d, fec %d",
67                         frequency,
68                         polarisation ? "hor" : "vert",
69                         orbital_position,
70 -                       symbol_rate, fec,
71 -                       modulation,
72 -                       rolloff);
73 +                       symbol_rate, fec);
74         }
75 -       else
76 +       else // System_DVB_S2 or System_DVB_S2X
77         {
78 -               eDebug("SAT DVB-S freq %d, %s, pos %d, sr %d, fec %d",
79 +               eDebug("SAT DVB-S2 freq %d, %s, pos %d, sr %d, fec %d, modulation %d, rolloff %d",
80                         frequency,
81                         polarisation ? "hor" : "vert",
82                         orbital_position,
83 -                       symbol_rate, fec);
84 +                       symbol_rate, fec,
85 +                       modulation,
86 +                       rolloff);
87         }
88  }
89  
90 @@ -1018,7 +1021,7 @@ void PutSatelliteDataToDict(ePyObject &dict, eDVBFrontendParametersSatellite &fe
91         PutToDict(dict, "fec_inner", feparm.fec);
92         PutToDict(dict, "modulation", feparm.modulation);
93         PutToDict(dict, "polarization", feparm.polarisation);
94 -       if (feparm.system == eDVBFrontendParametersSatellite::System_DVB_S2)
95 +       if ((feparm.system == eDVBFrontendParametersSatellite::System_DVB_S2) || (feparm.system == eDVBFrontendParametersSatellite::System_DVB_S2X))
96         {
97                 PutToDict(dict, "rolloff", feparm.rolloff);
98                 PutToDict(dict, "pilot", feparm.pilot);
99 @@ -1084,6 +1087,7 @@ static void fillDictWithSatelliteData(ePyObject dict, struct dtv_property *p, lo
100         case FEC_7_8: tmp = eDVBFrontendParametersSatellite::FEC_7_8; break;
101         case FEC_8_9: tmp = eDVBFrontendParametersSatellite::FEC_8_9; break;
102         case FEC_9_10: tmp = eDVBFrontendParametersSatellite::FEC_9_10; break;
103 +       case FEC_13_45 ... FEC_26_45_L: tmp = eDVBFrontendParametersSatellite::FEC_13_45 + (long)(p_inner_fec - FEC_13_45); break;
104         case FEC_NONE: tmp = eDVBFrontendParametersSatellite::FEC_None; break;
105         case FEC_AUTO: tmp = eDVBFrontendParametersSatellite::FEC_Auto; break;
106         default: eDebug("got unsupported FEC from frontend! report as FEC_AUTO!\n");
107 @@ -1094,7 +1098,12 @@ static void fillDictWithSatelliteData(ePyObject dict, struct dtv_property *p, lo
108         {
109         default: eDebug("got unsupported system from frontend! report as DVBS!");
110         case SYS_DVBS: tmp = eDVBFrontendParametersSatellite::System_DVB_S; break;
111 -       case SYS_DVBS2:
112 +       case SYS_DVBS2: tmp = eDVBFrontendParametersSatellite::System_DVB_S2; break;
113 +       case SYS_DVBS2X: tmp = eDVBFrontendParametersSatellite::System_DVB_S2X; break;
114 +       }
115 +       PutToDict(dict, "system", tmp);
116 +
117 +       if ((p_system == SYS_DVBS2) || (p_system == SYS_DVBS2X))
118         {
119                 switch (p_rolloff)
120                 {
121 @@ -1112,17 +1121,16 @@ static void fillDictWithSatelliteData(ePyObject dict, struct dtv_property *p, lo
122                 case PILOT_AUTO: tmp = eDVBFrontendParametersSatellite::Pilot_Unknown; break;
123                 }
124                 PutToDict(dict, "pilot", tmp);
125 -
126 -               tmp = eDVBFrontendParametersSatellite::System_DVB_S2; break;
127         }
128 -       }
129 -       PutToDict(dict, "system", tmp);
130  
131         switch (p_modulation)
132         {
133         default: eDebug("got unsupported modulation from frontend! report as QPSK!");
134         case QPSK: tmp = eDVBFrontendParametersSatellite::Modulation_QPSK; break;
135         case PSK_8: tmp = eDVBFrontendParametersSatellite::Modulation_8PSK; break;
136 +       case APSK_8: tmp = eDVBFrontendParametersSatellite::Modulation_8APSK; break;
137 +       case APSK_16: tmp = eDVBFrontendParametersSatellite::Modulation_16APSK; break;
138 +       case APSK_32: tmp = eDVBFrontendParametersSatellite::Modulation_32APSK; break;
139         }
140         PutToDict(dict, "modulation", tmp);
141  
142 @@ -1475,7 +1483,7 @@ void eDVBFrontend::getFrontendData(ePyObject dest)
143                 const char *tmp=0;
144                 PutToDict(dest, "tuner_number", m_slotid);
145  
146 -               if (supportsDeliverySystem(SYS_DVBS, true) || supportsDeliverySystem(SYS_DVBS2, true))
147 +               if (supportsDeliverySystem(SYS_DVBS, true) || supportsDeliverySystem(SYS_DVBS2, true) || supportsDeliverySystem(SYS_DVBS2X, true))
148                 {
149                         tmp = "DVB-S";
150                 }
151 @@ -1973,12 +1981,16 @@ void eDVBFrontend::setFrontend(bool recvEvents)
152                         {
153                         case eDVBFrontendParametersSatellite::System_DVB_S: system = SYS_DVBS; break;
154                         case eDVBFrontendParametersSatellite::System_DVB_S2: system = SYS_DVBS2; break;
155 +                       case eDVBFrontendParametersSatellite::System_DVB_S2X: system = SYS_DVBS2X; break;
156                         };
157                         switch(sparm.modulation)
158                         {
159                         case eDVBFrontendParametersSatellite::Modulation_QPSK: modulation = QPSK; break;
160                         case eDVBFrontendParametersSatellite::Modulation_8PSK: modulation = PSK_8; break;
161                         case eDVBFrontendParametersSatellite::Modulation_QAM16: modulation = QAM_16; break;
162 +                       case eDVBFrontendParametersSatellite::Modulation_8APSK: modulation = APSK_8; break;
163 +                       case eDVBFrontendParametersSatellite::Modulation_16APSK: modulation = APSK_16; break;
164 +                       case eDVBFrontendParametersSatellite::Modulation_32APSK: modulation = APSK_32; break;
165                         };
166                         switch(sparm.pilot)
167                         {
168 @@ -2002,7 +2014,7 @@ void eDVBFrontend::setFrontend(bool recvEvents)
169                         p[4].cmd = DTV_SYMBOL_RATE,     p[4].u.data = parm_u_qpsk_symbol_rate;
170                         p[5].cmd = DTV_INNER_FEC,       p[5].u.data = parm_u_qpsk_fec_inner;
171                         p[6].cmd = DTV_INVERSION,       p[6].u.data = parm_inversion;
172 -                       if (system == SYS_DVBS2)
173 +                       if ((system == SYS_DVBS2) || (system == SYS_DVBS2X))
174                         {
175                                 p[7].cmd = DTV_ROLLOFF,         p[7].u.data = rolloff;
176                                 p[8].cmd = DTV_PILOT,           p[8].u.data = pilot;
177 @@ -2116,8 +2128,7 @@ RESULT eDVBFrontend::prepare_sat(const eDVBFrontendParametersSatellite &feparm,
178         res = m_sec->prepare(*this, parm, feparm, 1 << m_slotid, tunetimeout);
179         if (!res)
180         {
181 -               eDebugNoSimulate("prepare_sat System %d Freq %d Pol %d SR %d INV %d FEC %d orbpos %d system %d modulation %d pilot %d, rolloff %d",
182 -                       feparm.system,
183 +               eDebugNoSimulate("prepare_sat Freq %d Pol %d SR %d INV %d FEC %d orbpos %d system %d modulation %d pilot %d, rolloff %d",
184                         feparm.frequency,
185                         feparm.polarisation,
186                         feparm.symbol_rate,
187 @@ -2171,7 +2182,7 @@ RESULT eDVBFrontend::prepare_sat(const eDVBFrontendParametersSatellite &feparm,
188                                         break;
189                         }
190                 }
191 -               else // DVB_S2
192 +               else if (feparm.system == eDVBFrontendParametersSatellite::System_DVB_S2)
193                 {
194                         switch (feparm.fec)
195                         {
196 @@ -2207,6 +2218,45 @@ RESULT eDVBFrontend::prepare_sat(const eDVBFrontendParametersSatellite &feparm,
197                                         return -EINVAL;
198                         }
199                 }
200 +               else // DVB_S2X
201 +               {
202 +                       switch (feparm.fec)
203 +                       {
204 +                               case eDVBFrontendParametersSatellite::FEC_1_2:
205 +                                       parm_u_qpsk_fec_inner = FEC_S2_QPSK_1_2;
206 +                                       break;
207 +                               case eDVBFrontendParametersSatellite::FEC_2_3:
208 +                                       parm_u_qpsk_fec_inner = FEC_S2_QPSK_2_3;
209 +                                       break;
210 +                               case eDVBFrontendParametersSatellite::FEC_3_4:
211 +                                       parm_u_qpsk_fec_inner = FEC_S2_QPSK_3_4;
212 +                                       break;
213 +                               case eDVBFrontendParametersSatellite::FEC_3_5:
214 +                                       parm_u_qpsk_fec_inner = FEC_S2_QPSK_3_5;
215 +                                       break;
216 +                               case eDVBFrontendParametersSatellite::FEC_4_5:
217 +                                       parm_u_qpsk_fec_inner = FEC_S2_QPSK_4_5;
218 +                                       break;
219 +                               case eDVBFrontendParametersSatellite::FEC_5_6:
220 +                                       parm_u_qpsk_fec_inner = FEC_S2_QPSK_5_6;
221 +                                       break;
222 +                               case eDVBFrontendParametersSatellite::FEC_7_8:
223 +                                       parm_u_qpsk_fec_inner = FEC_S2_QPSK_7_8;
224 +                                       break;
225 +                               case eDVBFrontendParametersSatellite::FEC_8_9:
226 +                                       parm_u_qpsk_fec_inner = FEC_S2_QPSK_8_9;
227 +                                       break;
228 +                               case eDVBFrontendParametersSatellite::FEC_9_10:
229 +                                       parm_u_qpsk_fec_inner = FEC_S2_QPSK_9_10;
230 +                                       break;
231 +                               case eDVBFrontendParametersSatellite::FEC_13_45 ... eDVBFrontendParametersSatellite::FEC_26_45_L:
232 +                                       parm_u_qpsk_fec_inner = (fe_code_rate_t)((int)FEC_S2_QPSK_13_45 + (feparm.fec-eDVBFrontendParametersSatellite::FEC_13_45));
233 +                                       break;
234 +                               default:
235 +                                       eDebugNoSimulate("no valid fec for DVB-S2X set.. abort !!");
236 +                                       return -EINVAL;
237 +                       }
238 +               }
239                 // FIXME !!! get frequency range from tuner
240                 if ( parm_frequency < 900000 || parm_frequency > 2200000 )
241                 {
242 @@ -2791,13 +2841,18 @@ int eDVBFrontend::isCompatibleWith(ePtr<iDVBFrontendParameters> &feparm)
243         if (type == eDVBFrontend::feSatellite)
244         {
245                 eDVBFrontendParametersSatellite sat_parm;
246 -               bool can_handle_dvbs, can_handle_dvbs2;
247 +               bool can_handle_dvbs, can_handle_dvbs2, can_handle_dvbs2x;
248                 can_handle_dvbs = supportsDeliverySystem(SYS_DVBS, true);
249                 can_handle_dvbs2 = supportsDeliverySystem(SYS_DVBS2, true);
250 +               can_handle_dvbs2x = supportsDeliverySystem(SYS_DVBS2X, true);
251                 if (feparm->getDVBS(sat_parm) < 0)
252                 {
253                         return 0;
254                 }
255 +               if (sat_parm.system == eDVBFrontendParametersSatellite::System_DVB_S2X && !can_handle_dvbs2x)
256 +               {
257 +                       return 0;
258 +               }
259                 if (sat_parm.system == eDVBFrontendParametersSatellite::System_DVB_S2 && !can_handle_dvbs2)
260                 {
261                         return 0;
262 @@ -2897,17 +2952,18 @@ void eDVBFrontend::setDeliverySystemWhitelist(const std::vector<fe_delivery_syst
263  
264  bool eDVBFrontend::setSlotInfo(ePyObject obj)
265  {
266 -       ePyObject Id, Descr, Enabled, IsDVBS2, IsDVBT2, frontendId;
267 -       if (!PyTuple_Check(obj) || PyTuple_Size(obj) != 6)
268 +       ePyObject Id, Descr, Enabled, IsDVBS2, IsDVBT2, IsDVBS2X, frontendId;
269 +       if (!PyTuple_Check(obj) || PyTuple_Size(obj) != 7)
270                 goto arg_error;
271         Id = PyTuple_GET_ITEM(obj, 0);
272         Descr = PyTuple_GET_ITEM(obj, 1);
273         Enabled = PyTuple_GET_ITEM(obj, 2);
274         IsDVBS2 = PyTuple_GET_ITEM(obj, 3);
275         IsDVBT2 = PyTuple_GET_ITEM(obj, 4);
276 -       frontendId = PyTuple_GET_ITEM(obj, 5);
277 +       IsDVBS2X = PyTuple_GET_ITEM(obj, 5);
278 +       frontendId = PyTuple_GET_ITEM(obj, 6);
279         m_slotid = PyInt_AsLong(Id);
280 -       if (!PyInt_Check(Id) || !PyString_Check(Descr) || !PyBool_Check(Enabled) || !PyBool_Check(IsDVBS2) || !PyBool_Check(IsDVBT2) || !PyInt_Check(frontendId))
281 +       if (!PyInt_Check(Id) || !PyString_Check(Descr) || !PyBool_Check(Enabled) || !PyBool_Check(IsDVBS2) || !PyBool_Check(IsDVBT2) || !PyBool_Check(IsDVBS2X) || !PyInt_Check(frontendId))
282                 goto arg_error;
283         strcpy(m_description, PyString_AS_STRING(Descr));
284         if (PyInt_AsLong(frontendId) == -1 || PyInt_AsLong(frontendId) != m_dvbid) {
285 @@ -2931,9 +2987,14 @@ bool eDVBFrontend::setSlotInfo(ePyObject obj)
286                 /* HACK for legacy dvb api without DELSYS support */
287                 m_delsys[SYS_DVBT2] = true;
288         }
289 +       if (IsDVBS2X == Py_True)
290 +       {
291 +               /* HACK for legacy dvb api without DELSYS support */
292 +               m_delsys[SYS_DVBS2X] = true;
293 +       }
294  
295 -       eDebugNoSimulate("setSlotInfo for dvb frontend %d to slotid %d, descr %s, need rotorworkaround %s, enabled %s, DVB-S2 %s, DVB-T2 %s",
296 -               m_dvbid, m_slotid, m_description, m_need_rotor_workaround ? "Yes" : "No", Enabled == Py_True ? "Yes" : "No", IsDVBS2 == Py_True ? "Yes" : "No", IsDVBT2 == Py_True ? "Yes" : "No" );
297 +       eDebugNoSimulate("setSlotInfo for dvb frontend %d to slotid %d, descr %s, need rotorworkaround %s, enabled %s, DVB-S2 %s, DVB-T2 %s, DVB-S2X %s",
298 +               m_dvbid, m_slotid, m_description, m_need_rotor_workaround ? "Yes" : "No", Enabled == Py_True ? "Yes" : "No", IsDVBS2 == Py_True ? "Yes" : "No", IsDVBT2 == Py_True ? "Yes" : "No", IsDVBS2X == Py_True ? "Yes" : "No");
299         return true;
300  arg_error:
301         PyErr_SetString(PyExc_StandardError,
302 diff --git a/lib/dvb/frontendparms.h b/lib/dvb/frontendparms.h
303 index c4989fb..c941ca6 100644
304 --- a/lib/dvb/frontendparms.h
305 +++ b/lib/dvb/frontendparms.h
306 @@ -21,15 +21,19 @@ struct eDVBFrontendParametersSatellite
307         };
308  
309         enum {
310 -               FEC_Auto, FEC_1_2, FEC_2_3, FEC_3_4, FEC_5_6, FEC_7_8, FEC_8_9, FEC_3_5, FEC_4_5, FEC_9_10, FEC_None=15
311 +               FEC_Auto=0, FEC_1_2=1, FEC_2_3=2, FEC_3_4=3, FEC_5_6=4, FEC_7_8=5, FEC_8_9=6, FEC_3_5=7, FEC_4_5=8, FEC_9_10=9, FEC_None=15,
312 +               FEC_13_45=16, FEC_9_20=17, FEC_11_20=18, FEC_23_36=19, FEC_25_36=20,
313 +               FEC_13_18=21, FEC_26_45=22, FEC_28_45=23, FEC_7_9=24, FEC_77_90=25,
314 +               FEC_32_45=26, FEC_11_15=27, FEC_1_2_L=28, FEC_8_15_L=29, FEC_3_5_L=30,
315 +               FEC_2_3_L=31, FEC_5_9_L=32, FEC_26_45_L=33
316         };
317  
318         enum {
319 -               System_DVB_S, System_DVB_S2
320 +               System_DVB_S, System_DVB_S2, System_DVB_S2X
321         };
322  
323         enum {
324 -               Modulation_Auto, Modulation_QPSK, Modulation_8PSK, Modulation_QAM16
325 +               Modulation_Auto, Modulation_QPSK, Modulation_8PSK, Modulation_QAM16, Modulation_16APSK, Modulation_32APSK, Modulation_8APSK
326         };
327  
328         // dvb-s2
329 diff --git a/lib/dvb/scan.cpp b/lib/dvb/scan.cpp
330 index 969ed9f..1f045df 100644
331 --- a/lib/dvb/scan.cpp
332 +++ b/lib/dvb/scan.cpp
333 @@ -832,15 +832,41 @@ void eDVBScan::channelDone()
334                         {
335                                 case iDVBFrontend::feSatellite:
336                                 {
337 +                                       char system_name[255];
338 +                                       char modulation_name[255];
339 +                                       memset(system_name, 0, sizeof(system_name));
340 +                                       memset(modulation_name, 0, sizeof(modulation_name));
341 +
342                                         eDVBFrontendParametersSatellite parm;
343                                         m_ch_current->getDVBS(parm);
344 +
345 +                                       if (parm.system == eDVBFrontendParametersSatellite::System_DVB_S2)
346 +                                               strcpy(system_name, "DVB-S2");
347 +                                       else if (parm.system == eDVBFrontendParametersSatellite::System_DVB_S2X)
348 +                                               strcpy(system_name, "DVB-S2X");
349 +                                       else
350 +                                               strcpy(system_name, "DVB-S");
351 +
352 +                                       if (parm.modulation == eDVBFrontendParametersSatellite::Modulation_QPSK)
353 +                                               strcpy(modulation_name, "QPSK");
354 +                                       else if (parm.modulation == eDVBFrontendParametersSatellite::Modulation_8PSK)
355 +                                               strcpy(modulation_name, "8PSK");
356 +                                       else if (parm.modulation == eDVBFrontendParametersSatellite::Modulation_8APSK)
357 +                                               strcpy(modulation_name, "8APSK");
358 +                                       else if (parm.modulation == eDVBFrontendParametersSatellite::Modulation_16APSK)
359 +                                               strcpy(modulation_name, "16APSK");
360 +                                       else if (parm.modulation == eDVBFrontendParametersSatellite::Modulation_32APSK)
361 +                                               strcpy(modulation_name, "32APSK");
362 +                                       else
363 +                                               strcpy(modulation_name, "8PSK");
364 +
365                                         snprintf(sname, 255, "%d%c SID 0x%02x",
366                                                         parm.frequency/1000,
367                                                         parm.polarisation ? 'V' : 'H',
368                                                         m_pmt_in_progress->first);
369                                         snprintf(pname, 255, "%s %s %d%c %d.%d°%c",
370 -                                               parm.system ? "DVB-S2" : "DVB-S",
371 -                                               parm.modulation == 1 ? "QPSK" : "8PSK",
372 +                                               system_name,
373 +                                               modulation_name,
374                                                 parm.frequency/1000,
375                                                 parm.polarisation ? 'V' : 'H',
376                                                 parm.orbital_position/10,
377 diff --git a/lib/python/Components/NimManager.py b/lib/python/Components/NimManager.py
378 index b92ad92..d726fec 100755
379 --- a/lib/python/Components/NimManager.py
380 +++ b/lib/python/Components/NimManager.py
381 @@ -153,7 +153,7 @@ class SecConfigure:
382  
383                 for slot in nim_slots:
384                         if slot.type is not None:
385 -                               used_nim_slots.append((slot.slot, slot.description, slot.config.configMode.value != "nothing" and True or False, slot.isCompatible("DVB-S2"), slot.isCompatible("DVB-T2"), slot.frontend_id is None and -1 or slot.frontend_id))
386 +                               used_nim_slots.append((slot.slot, slot.description, slot.config.configMode.value != "nothing" and True or False, slot.isCompatible("DVB-S2"), slot.isCompatible("DVB-T2"), slot.isCompatible("DVB-S2X"), slot.frontend_id is None and -1 or slot.frontend_id))
387                 eDVBResourceManager.getInstance().setFrontendSlotInformations(used_nim_slots)
388  
389                 for slot in nim_slots:
390 @@ -510,7 +510,7 @@ class NIM(object):
391         def __init__(self, slot, type, description, has_outputs = True, internally_connectable = None, multi_type = {}, frontend_id = None, i2c = None, is_empty = False):
392                 self.slot = slot
393  
394 -               if type not in ("DVB-S", "DVB-C", "DVB-T", "DVB-S2", "DVB-T2", None):
395 +               if type not in ("DVB-S", "DVB-C", "DVB-T", "DVB-S2", "DVB-T2", "DVB-S2X", None):
396                         print "warning: unknown NIM type %s, not using." % type
397                         type = None
398  
399 @@ -528,7 +528,8 @@ class NIM(object):
400                                 "DVB-C": ("DVB-C", None),
401                                 "DVB-T": ("DVB-T", None),
402                                 "DVB-S2": ("DVB-S", "DVB-S2", None),
403 -                               "DVB-T2": ("DVB-T", "DVB-T2", None)
404 +                               "DVB-T2": ("DVB-T", "DVB-T2", None),
405 +                               "DVB-S2X": ("DVB-S", "DVB-S2", "DVB-S2X", None),
406                         }
407  
408         def getType(self):
409 @@ -558,7 +559,8 @@ class NIM(object):
410                                 "DVB-C": ("DVB-C",),
411                                 "DVB-T": ("DVB-T",),
412                                 "DVB-S2": ("DVB-S", "DVB-S2"),
413 -                               "DVB-T2": ("DVB-T", "DVB-T2",)
414 +                               "DVB-T2": ("DVB-T", "DVB-T2",),
415 +                               "DVB-S2X": ("DVB-S", "DVB-S2", "DVB-S2X"),
416                         }
417                 return connectable[self.getType()]
418  
419 @@ -615,6 +617,7 @@ class NIM(object):
420                         "DVB-C": "DVB-C",
421                         "DVB-S2": "DVB-S2",
422                         "DVB-T2": "DVB-T2",
423 +                       "DVB-S2X": "DVB-S2X",
424                         None: _("empty")
425                         }[self.getType()]
426  
427 @@ -798,13 +801,20 @@ class NimManager:
428  
429                         # get MultiType from DTV_ENUM_DELSYS
430                         if entry["frontend_device"] is not None:
431 -                               types = [type for type in ["DVB-C", "DVB-T2", "DVB-T", "DVB-S2", "DVB-S", "ATSC"] if eDVBResourceManager.getInstance().frontendIsCompatible(entry["frontend_device"], type)]
432 +                               types = [type for type in ["DVB-C", "DVB-T2", "DVB-T", "DVB-S2", "DVB-S", "ATSC", "DVB-S2X"] if eDVBResourceManager.getInstance().frontendIsCompatible(entry["frontend_device"], type)]
433                                 if "DVB-T2" in types and "DVB-T" in types:
434                                         # DVB-T2 implies DVB-T support
435                                         types.remove("DVB-T")
436                                 if "DVB-S2" in types and "DVB-S" in types:
437                                         # DVB-S2 implies DVB-S support
438                                         types.remove("DVB-S")
439 +                               if "DVB-S2X" in types:
440 +                                       if "DVB-S" in types:
441 +                                               # DVB-S2X implies DVB-S support
442 +                                               types.remove("DVB-S")
443 +                                       if "DVB-S2" in types:
444 +                                               # DVB-S2X implies DVB-S2 support
445 +                                               types.remove("DVB-S2")
446                                 if len(types) > 1:
447                                         entry["multi_type"] = {}
448                                         for type in types:
449 @@ -908,6 +918,8 @@ class NimManager:
450                         type = "DVB-S"
451                 elif type == "DVB-T2":
452                         type = "DVB-T"
453 +               elif type == "DVB-S2X":
454 +                       type = "DVB-S"
455                 nimList = self.getNimListOfType(type, slotid)
456                 for nim in nimList[:]:
457                         mode = self.getNimConfig(nim)
458 @@ -921,6 +933,8 @@ class NimManager:
459                         type = "DVB-S"
460                 elif type == "DVB-T2":
461                         type = "DVB-T"
462 +               elif type == "DVB-S2X":
463 +                       type = "DVB-S"
464                 nimList = self.getNimListOfType(type, slotid)
465                 positionerList = []
466                 for nim in nimList[:]:
467 diff --git a/lib/python/Components/ServiceScan.py b/lib/python/Components/ServiceScan.py
468 index 6a82ade..7412386 100644
469 --- a/lib/python/Components/ServiceScan.py
470 +++ b/lib/python/Components/ServiceScan.py
471 @@ -54,9 +54,11 @@ class ServiceScan:
472                                                 else:
473                                                         network = ("%s %d.%d %s") % (sat_name, orb_pos / 10, orb_pos % 10, h)
474                                                 tp_text = ("%s %s %d%c / %d / %s") %( { tp.System_DVB_S : "DVB-S",
475 -                                                       tp.System_DVB_S2 : "DVB-S2" }.get(tp.system, tp.System_DVB_S),
476 +                                                       tp.System_DVB_S2 : "DVB-S2" , tp.System_DVB_S2X : "DVB-S2X"}.get(tp.system, tp.System_DVB_S),
477                                                         { tp.Modulation_Auto : "Auto", tp.Modulation_QPSK : "QPSK",
478 -                                                               tp.Modulation_8PSK : "8PSK", tp.Modulation_QAM16 : "QAM16" }.get(tp.modulation, tp.Modulation_QPSK),
479 +                                                               tp.Modulation_8PSK : "8PSK", tp.Modulation_QAM16 : "QAM16",
480 +                                                               tp.Modulation_8APSK : "8APSK", tp.Modulation_16APSK : "16APSK",
481 +                                                               tp.Modulation_32APSK : "32APSK"}.get(tp.modulation, tp.Modulation_QPSK),
482                                                         tp.frequency/1000,
483                                                         { tp.Polarisation_Horizontal : 'H', tp.Polarisation_Vertical : 'V', tp.Polarisation_CircularLeft : 'L',
484                                                                 tp.Polarisation_CircularRight : 'R' }.get(tp.polarisation, tp.Polarisation_Horizontal),
485 @@ -64,7 +66,11 @@ class ServiceScan:
486                                                         { tp.FEC_Auto : "AUTO", tp.FEC_1_2 : "1/2", tp.FEC_2_3 : "2/3",
487                                                                 tp.FEC_3_4 : "3/4", tp.FEC_5_6 : "5/6", tp.FEC_7_8 : "7/8",
488                                                                 tp.FEC_8_9 : "8/9", tp.FEC_3_5 : "3/5", tp.FEC_4_5 : "4/5",
489 -                                                               tp.FEC_9_10 : "9/10", tp.FEC_None : "NONE" }.get(tp.fec, tp.FEC_Auto))
490 +                                                               tp.FEC_9_10 : "9/10", tp.FEC_None : "NONE",
491 +                                                               tp.FEC_13_45 : "13/45", tp.FEC_9_20 : "9/20", tp.FEC_11_20 : "11/20", tp.FEC_23_36 : "23/36", tp.FEC_25_36 : "25/36",
492 +                                                               tp.FEC_13_18 : "13/18", tp.FEC_26_45 : "26/45", tp.FEC_28_45 : "28/45", tp.FEC_7_9 : "7/9", tp.FEC_77_90 : "77/90",
493 +                                                               tp.FEC_32_45 : "32/45", tp.FEC_11_15 : "11/15", tp.FEC_1_2_L : "1/2-L", tp.FEC_8_15_L : "8/15-L", tp.FEC_3_5_L : "3/5-L",
494 +                                                               tp.FEC_2_3_L : "2/3-L", tp.FEC_5_9_L : "5/9-L", tp.FEC_26_45_L : "26/45-L"}.get(tp.fec, tp.FEC_Auto))
495                                         elif tp_type == iDVBFrontend.feCable:
496                                                 network = _("Cable")
497                                                 tp = transponder.getDVBC()
498 diff --git a/lib/python/Plugins/SystemPlugins/Blindscan/plugin.py b/lib/python/Plugins/SystemPlugins/Blindscan/plugin.py
499 index 82ce819..5215a4b 100644
500 --- a/lib/python/Plugins/SystemPlugins/Blindscan/plugin.py
501 +++ b/lib/python/Plugins/SystemPlugins/Blindscan/plugin.py
502 @@ -199,7 +199,7 @@ class Blindscan(ConfigListScreen, Screen):
503                                 defaultSat["inversion"] = frontendData.get("inversion", eDVBFrontendParametersSatellite.Inversion_Unknown)
504                                 defaultSat["symbolrate"] = frontendData.get("symbol_rate", 0) / 1000
505                                 defaultSat["polarization"] = frontendData.get("polarization", eDVBFrontendParametersSatellite.Polarisation_Horizontal)
506 -                               if defaultSat["system"] == eDVBFrontendParametersSatellite.System_DVB_S2:
507 +                               if defaultSat["system"] in (eDVBFrontendParametersSatellite.System_DVB_S2, eDVBFrontendParametersSatellite.System_DVB_S2X):
508                                         defaultSat["fec_s2"] = frontendData.get("fec_inner", eDVBFrontendParametersSatellite.FEC_Auto)
509                                         defaultSat["rolloff"] = frontendData.get("rolloff", eDVBFrontendParametersSatellite.RollOff_alpha_0_35)
510                                         defaultSat["pilot"] = frontendData.get("pilot", eDVBFrontendParametersSatellite.Pilot_Unknown)
511 @@ -305,7 +305,7 @@ class Blindscan(ConfigListScreen, Screen):
512                 print "cur is", cur
513                 if cur == self.tunerEntry or \
514                         cur == self.systemEntry or \
515 -                       (self.modulationEntry and self.systemEntry[1].value == eDVBFrontendParametersSatellite.System_DVB_S2 and cur == self.modulationEntry):
516 +                       (self.modulationEntry and (self.systemEntry[1].value in (eDVBFrontendParametersSatellite.System_DVB_S2, eDVBFrontendParametersSatellite.System_DVB_S2X)) and cur == self.modulationEntry):
517                         self.createSetup()
518  
519         def checkSettings(self):
520 @@ -506,7 +506,8 @@ class Blindscan(ConfigListScreen, Screen):
521                                 if data[0] == 'OK':
522                                         parm = eDVBFrontendParametersSatellite()
523                                         sys = { "DVB-S" : eDVBFrontendParametersSatellite.System_DVB_S,
524 -                                               "DVB-S2" : eDVBFrontendParametersSatellite.System_DVB_S2}
525 +                                               "DVB-S2" : eDVBFrontendParametersSatellite.System_DVB_S2,
526 +                                               "DVB-S2X" : eDVBFrontendParametersSatellite.System_DVB_S2X}
527                                         qam = { "QPSK" : parm.Modulation_QPSK,
528                                                 "8PSK" : parm.Modulation_8PSK}
529                                         inv = { "INVERSION_OFF" : parm.Inversion_Off,
530 @@ -521,7 +522,11 @@ class Blindscan(ConfigListScreen, Screen):
531                                                 "FEC_8_9" : parm.FEC_8_9,
532                                                 "FEC_3_5" : parm.FEC_3_5,
533                                                 "FEC_9_10" : parm.FEC_9_10,
534 -                                               "FEC_NONE" : parm.FEC_None}
535 +                                               "FEC_NONE" : parm.FEC_None, 
536 +                                               "FEC_13_45" : parm.FEC_13_45, "FEC_9_20" : parm.FEC_9_20, "FEC_11_20" : parm.FEC_11_20, "FEC_23_36" : parm.FEC_23_36, "FEC_25_36" : parm.FEC_25_36,
537 +                                               "FEC_13_18" : parm.FEC_13_18, "FEC_26_45" : parm.FEC_26_45, "FEC_28_45" : parm.FEC_28_45, "FEC_7_9" : parm.FEC_7_9, "FEC_77_90" : parm.FEC_77_90,
538 +                                               "FEC_32_45" : parm.FEC_32_45, "FEC_11_15" : parm.FEC_11_15, "FEC_1_2_L" : parm.FEC_1_2_L, "FEC_8_15_L" : parm.FEC_8_15_L, "FEC_3_5_L" : parm.FEC_3_5_L,
539 +                                               "FEC_2_3_L" : parm.FEC_2_3_L, "FEC_5_9_L" : parm.FEC_5_9_L, "FEC_26_45_L" : parm.FEC_26_45_L}
540                                         roll ={ "ROLLOFF_20" : parm.RollOff_alpha_0_20,
541                                                 "ROLLOFF_25" : parm.RollOff_alpha_0_25,
542                                                 "ROLLOFF_35" : parm.RollOff_alpha_0_35}
543 diff --git a/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py b/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py
544 index e097117..eb0fe51 100644
545 --- a/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py
546 +++ b/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py
547 @@ -451,6 +451,21 @@ class TunerScreen(ScanSetup):
548                                 self.list.append(self.modulationEntry)
549                                 self.list.append(getConfigListEntry(_('Roll-off'), self.scan_sat.rolloff))
550                                 self.list.append(getConfigListEntry(_('Pilot'), self.scan_sat.pilot))
551 +                       elif self.scan_sat.system.value == eDVBFrontendParametersSatellite.System_DVB_S2X:
552 +                               if self.scan_sat.modulation_dvbs2x.value == eDVBFrontendParametersSatellite.Modulation_QPSK:
553 +                                       self.list.append(getConfigListEntry(_("FEC"), self.scan_sat.fec_s2x_qpsk))
554 +                               elif self.scan_sat.modulation_dvbs2x.value == eDVBFrontendParametersSatellite.Modulation_8PSK:
555 +                                       self.list.append(getConfigListEntry(_("FEC"), self.scan_sat.fec_s2x_8psk))
556 +                               elif self.scan_sat.modulation_dvbs2x.value == eDVBFrontendParametersSatellite.Modulation_8APSK:
557 +                                       self.list.append(getConfigListEntry(_("FEC"), self.scan_sat.fec_s2x_8apsk))
558 +                               elif self.scan_sat.modulation_dvbs2x.value == eDVBFrontendParametersSatellite.Modulation_16APSK:
559 +                                       self.list.append(getConfigListEntry(_("FEC"), self.scan_sat.fec_s2x_16apsk))
560 +                               elif self.scan_sat.modulation_dvbs2x.value == eDVBFrontendParametersSatellite.Modulation_32APSK:
561 +                                       self.list.append(getConfigListEntry(_("FEC"), self.scan_sat.fec_s2x_32apsk))
562 +                               self.modulationEntry = getConfigListEntry(_('Modulation'), self.scan_sat.modulation_dvbs2x)
563 +                               self.list.append(self.modulationEntry)
564 +                               self.list.append(getConfigListEntry(_('Roll-off'), self.scan_sat.rolloff))
565 +                               self.list.append(getConfigListEntry(_('Pilot'), self.scan_sat.pilot))
566                 elif tuning.type.value == "predefined_transponder":
567                         self.list.append(getConfigListEntry(_("Transponder"), tuning.transponder))
568                 self["config"].list = self.list
569 @@ -499,30 +514,17 @@ class TunerScreen(ScanSetup):
570                                         pol = "CR"
571                                 else:
572                                         pol = "??"
573 -                               if x[4] == 0:
574 -                                       fec = "FEC Auto"
575 -                               elif x[4] == 1:
576 -                                       fec = "FEC 1/2"
577 -                               elif x[4] == 2:
578 -                                       fec = "FEC 2/3"
579 -                               elif x[4] == 3:
580 -                                       fec = "FEC 3/4"
581 -                               elif x[4] == 4:
582 -                                       fec = "FEC 5/6"
583 -                               elif x[4] == 5:
584 -                                       fec = "FEC 7/8"
585 -                               elif x[4] == 6:
586 -                                       fec = "FEC 8/9"
587 -                               elif x[4] == 7:
588 -                                       fec = "FEC 3/5"
589 -                               elif x[4] == 8:
590 -                                       fec = "FEC 4/5"
591 -                               elif x[4] == 9:
592 -                                       fec = "FEC 9/10"
593 -                               elif x[4] == 15:
594 -                                       fec = "FEC None"
595 -                               else:
596 +
597 +                               fec_desc = ("FEC Auto", "FEC 1/2", "FEC 2/3", "FEC 3/4", "FEC 5/6", "FEC 7/8", "FEC 8/9", "FEC 3/5", "FEC 4/5", "FEC 9/10", \
598 +                                                       "FEC Unknown", "FEC Unknown", "FEC Unknown", "FEC Unknown", "FEC Unknown", "FEC None", \
599 +                                                       "FEC_13_45", "FEC_9_20", "FEC_11_20", "FEC_23_36", "FEC_25_36", \
600 +                                                       "FEC_13_18", "FEC_26_45", "FEC_28_45", "FEC_7_9", "FEC_77_90", \
601 +                                                       "FEC_32_45", "FEC_11_15", "FEC_1_2_L", "FEC_8_15_L", "FEC_3_5_L", \
602 +                                                       "FEC_2_3_L", "FEC_5_9_L", "FEC_26_45_L")
603 +                               if x[4] > len(fec_desc)-1:
604                                         fec = "FEC Unknown"
605 +                               else:
606 +                                       fec = fec_desc[x[4]]
607                                 tps.append(str(x[1]) + "," + str(x[2]) + "," + pol + "," + fec)
608                         tuning.transponder = ConfigSelection(choices=tps)
609  
610 @@ -530,10 +532,26 @@ class TunerScreen(ScanSetup):
611                 returnvalue = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
612                 satpos = int(tuning.sat.value)
613                 if tuning.type.value == "manual_transponder":
614 -                       if self.scan_sat.system.value == eDVBFrontendParametersSatellite.System_DVB_S2:
615 +                       modulation = self.scan_sat.modulation.value
616 +                       if self.scan_sat.system.value == eDVBFrontendParametersSatellite.System_DVB_S:
617 +                               fec = self.scan_sat.fec.value
618 +                       elif self.scan_sat.system.value == eDVBFrontendParametersSatellite.System_DVB_S2:
619                                 fec = self.scan_sat.fec_s2.value
620 +                       elif self.scan_sat.system.value == eDVBFrontendParametersSatellite.System_DVB_S2X
621 +                               modulation = self.scan_sat.modulation_dvbs2x.value
622 +                               if modulation == eDVBFrontendParametersSatellite.Modulation_QPSK:
623 +                                       fec = self.scan_sat.fec_s2x_qpsk.value
624 +                               elif modulation == eDVBFrontendParametersSatellite.Modulation_8PSK:
625 +                                       fec = self.scan_sat.fec_s2x_8psk.value
626 +                               elif modulation == eDVBFrontendParametersSatellite.Modulation_8APSK:
627 +                                       fec = self.scan_sat.fec_s2x_8apsk.value
628 +                               elif modulation == eDVBFrontendParametersSatellite.Modulation_16APSK:
629 +                                       fec = self.scan_sat.fec_s2x_16apsk.value
630 +                               elif modulation == eDVBFrontendParametersSatellite.Modulation_32APSK:
631 +                                       fec = self.scan_sat.fec_s2x_32apsk.value
632                         else:
633 -                               fec = self.scan_sat.fec.value
634 +                               fec = self.scan_sat.fec_s2.value
635 +
636                         returnvalue = (
637                                 self.scan_sat.frequency.value,
638                                 self.scan_sat.symbolrate.value,
639 @@ -542,7 +560,7 @@ class TunerScreen(ScanSetup):
640                                 self.scan_sat.inversion.value,
641                                 satpos,
642                                 self.scan_sat.system.value,
643 -                               self.scan_sat.modulation.value,
644 +                               modulation,
645                                 self.scan_sat.rolloff.value,
646                                 self.scan_sat.pilot.value)
647                 elif tuning.type.value == "predefined_transponder":
648 diff --git a/lib/python/Plugins/SystemPlugins/Satfinder/plugin.py b/lib/python/Plugins/SystemPlugins/Satfinder/plugin.py
649 index e611ca5..3e4a043 100644
650 --- a/lib/python/Plugins/SystemPlugins/Satfinder/plugin.py
651 +++ b/lib/python/Plugins/SystemPlugins/Satfinder/plugin.py
652 @@ -89,6 +89,21 @@ class Satfinder(ScanSetup):
653                                 self.list.append(self.modulationEntry)
654                                 self.list.append(getConfigListEntry(_('Roll-off'), self.scan_sat.rolloff))
655                                 self.list.append(getConfigListEntry(_('Pilot'), self.scan_sat.pilot))
656 +                       elif self.scan_sat.system.value == eDVBFrontendParametersSatellite.System_DVB_S2X:
657 +                               if self.scan_sat.modulation_dvbs2x.value == eDVBFrontendParametersSatellite.Modulation_QPSK:
658 +                                       self.list.append(getConfigListEntry(_("FEC"), self.scan_sat.fec_s2x_qpsk))
659 +                               elif self.scan_sat.modulation_dvbs2x.value == eDVBFrontendParametersSatellite.Modulation_8PSK:
660 +                                       self.list.append(getConfigListEntry(_("FEC"), self.scan_sat.fec_s2x_8psk))
661 +                               elif self.scan_sat.modulation_dvbs2x.value == eDVBFrontendParametersSatellite.Modulation_8APSK:
662 +                                       self.list.append(getConfigListEntry(_("FEC"), self.scan_sat.fec_s2x_8apsk))
663 +                               elif self.scan_sat.modulation_dvbs2x.value == eDVBFrontendParametersSatellite.Modulation_16APSK:
664 +                                       self.list.append(getConfigListEntry(_("FEC"), self.scan_sat.fec_s2x_16apsk))
665 +                               elif self.scan_sat.modulation_dvbs2x.value == eDVBFrontendParametersSatellite.Modulation_32APSK:
666 +                                       self.list.append(getConfigListEntry(_("FEC"), self.scan_sat.fec_s2x_32apsk))
667 +                               self.modulationEntry = getConfigListEntry(_('Modulation'), self.scan_sat.modulation_dvbs2x)
668 +                               self.list.append(self.modulationEntry)
669 +                               self.list.append(getConfigListEntry(_('Roll-off'), self.scan_sat.rolloff))
670 +                               self.list.append(getConfigListEntry(_('Pilot'), self.scan_sat.pilot))
671                 elif self.tuning_transponder and self.tuning_type.value == "predefined_transponder":
672                         self.list.append(getConfigListEntry(_("Transponder"), self.tuning_transponder))
673                 self["config"].list = self.list
674 @@ -110,10 +125,23 @@ class Satfinder(ScanSetup):
675                 returnvalue = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
676                 satpos = int(self.tuning_sat.value)
677                 if self.tuning_type.value == "manual_transponder":
678 -                       if self.scan_sat.system.value == eDVBFrontendParametersSatellite.System_DVB_S2:
679 -                               fec = self.scan_sat.fec_s2.value
680 -                       else:
681 +                       modulation = self.scan_sat.modulation.value
682 +                       if self.scan_sat.system.value == eDVBFrontendParametersSatellite.System_DVB_S:
683                                 fec = self.scan_sat.fec.value
684 +                       elif self.scan_sat.system.value == eDVBFrontendParametersSatellite.System_DVB_S2:
685 +                               fec = self.scan_sat.fec_s2.value
686 +                       elif self.scan_sat.system.value == eDVBFrontendParametersSatellite.System_DVB_S2X:
687 +                               modulation = modulation = self.scan_sat.modulation_dvbs2x.value
688 +                               if modulation == eDVBFrontendParametersSatellite.Modulation_QPSK:
689 +                                       fec = self.scan_sat.fec_s2x_qpsk.value
690 +                               elif modulation == eDVBFrontendParametersSatellite.Modulation_8PSK:
691 +                                       fec = self.scan_sat.fec_s2x_8psk.value
692 +                               elif modulation == eDVBFrontendParametersSatellite.Modulation_8APSK:
693 +                                       fec = self.scan_sat.fec_s2x_8apsk.value
694 +                               elif modulation == eDVBFrontendParametersSatellite.Modulation_16APSK:
695 +                                       fec = self.scan_sat.fec_s2x_16apsk.value
696 +                               elif modulation == eDVBFrontendParametersSatellite.Modulation_32APSK:
697 +                                       fec = self.scan_sat.fec_s2x_32apsk.value
698                         returnvalue = (
699                                 self.scan_sat.frequency.value,
700                                 self.scan_sat.symbolrate.value,
701 @@ -122,7 +150,7 @@ class Satfinder(ScanSetup):
702                                 self.scan_sat.inversion.value,
703                                 satpos,
704                                 self.scan_sat.system.value,
705 -                               self.scan_sat.modulation.value,
706 +                               modulation,
707                                 self.scan_sat.rolloff.value,
708                                 self.scan_sat.pilot.value)
709                         self.tune(returnvalue)
710 diff --git a/lib/python/Screens/ScanSetup.py b/lib/python/Screens/ScanSetup.py
711 index 9cc6dea..b7f5788 100644
712 --- a/lib/python/Screens/ScanSetup.py
713 +++ b/lib/python/Screens/ScanSetup.py
714 @@ -7,6 +7,7 @@ from Components.ActionMap import NumberActionMap, ActionMap
715  from Components.ConfigList import ConfigListScreen
716  from Components.NimManager import nimmanager, getConfigSatlist
717  from Components.Label import Label
718 +from Components.SystemInfo import SystemInfo
719  from Tools.Directories import resolveFilename, SCOPE_DEFAULTPARTITIONMOUNTDIR, SCOPE_DEFAULTDIR, SCOPE_DEFAULTPARTITION
720  from Tools.HardwareInfo import HardwareInfo
721  from Screens.MessageBox import MessageBox
722 @@ -601,7 +602,13 @@ class ScanSetup(ConfigListScreen, Screen, CableTransponderSearchSupport, Terrest
723                 if nim.isCompatible("DVB-S"):
724                         if self.scan_type.value == "single_transponder":
725                                 self.updateSatList()
726 -                               if nim.isCompatible("DVB-S2"):
727 +
728 +                               scan_sat_system_value = self.scan_sat.system.value
729 +                               if nim.isCompatible("DVB-S2X"):
730 +                                       scan_sat_system_value = self.scan_sat.system_dvbs2x.value
731 +                                       self.systemEntry = getConfigListEntry(_('System'), self.scan_sat.system_dvbs2x)
732 +                                       self.list.append(self.systemEntry)
733 +                               elif nim.isCompatible("DVB-S2"):
734                                         self.systemEntry = getConfigListEntry(_('System'), self.scan_sat.system)
735                                         self.list.append(self.systemEntry)
736                                 else:
737 @@ -612,14 +619,34 @@ class ScanSetup(ConfigListScreen, Screen, CableTransponderSearchSupport, Terrest
738                                 self.list.append(getConfigListEntry(_('Inversion'), self.scan_sat.inversion))
739                                 self.list.append(getConfigListEntry(_('Symbol rate'), self.scan_sat.symbolrate))
740                                 self.list.append(getConfigListEntry(_('Polarization'), self.scan_sat.polarization))
741 -                               if self.scan_sat.system.value == eDVBFrontendParametersSatellite.System_DVB_S:
742 -                                       self.list.append(getConfigListEntry(_("FEC"), self.scan_sat.fec))
743 -                               elif self.scan_sat.system.value == eDVBFrontendParametersSatellite.System_DVB_S2:
744 -                                       self.list.append(getConfigListEntry(_("FEC"), self.scan_sat.fec_s2))
745 +
746 +                               if scan_sat_system_value == eDVBFrontendParametersSatellite.System_DVB_S2:
747                                         self.modulationEntry = getConfigListEntry(_('Modulation'), self.scan_sat.modulation)
748                                         self.list.append(self.modulationEntry)
749                                         self.list.append(getConfigListEntry(_('Roll-off'), self.scan_sat.rolloff))
750                                         self.list.append(getConfigListEntry(_('Pilot'), self.scan_sat.pilot))
751 +                               elif scan_sat_system_value == eDVBFrontendParametersSatellite.System_DVB_S2X:
752 +                                       self.modulationEntry = getConfigListEntry(_('Modulation'), self.scan_sat.modulation_dvbs2x)
753 +                                       self.list.append(self.modulationEntry)
754 +                                       self.list.append(getConfigListEntry(_('Roll-off'), self.scan_sat.rolloff))
755 +                                       self.list.append(getConfigListEntry(_('Pilot'), self.scan_sat.pilot))
756 +
757 +                               if scan_sat_system_value == eDVBFrontendParametersSatellite.System_DVB_S:
758 +                                       self.list.append(getConfigListEntry(_("FEC"), self.scan_sat.fec))
759 +                               elif scan_sat_system_value == eDVBFrontendParametersSatellite.System_DVB_S2:
760 +                                       self.list.append(getConfigListEntry(_("FEC"), self.scan_sat.fec_s2))
761 +                               elif scan_sat_system_value == eDVBFrontendParametersSatellite.System_DVB_S2X:
762 +                                       if self.scan_sat.modulation_dvbs2x.value == eDVBFrontendParametersSatellite.Modulation_QPSK:
763 +                                               self.list.append(getConfigListEntry(_("FEC"), self.scan_sat.fec_s2x_qpsk))
764 +                                       elif self.scan_sat.modulation_dvbs2x.value == eDVBFrontendParametersSatellite.Modulation_8PSK:
765 +                                               self.list.append(getConfigListEntry(_("FEC"), self.scan_sat.fec_s2x_8psk))
766 +                                       elif self.scan_sat.modulation_dvbs2x.value == eDVBFrontendParametersSatellite.Modulation_8APSK:
767 +                                               self.list.append(getConfigListEntry(_("FEC"), self.scan_sat.fec_s2x_8apsk))
768 +                                       elif self.scan_sat.modulation_dvbs2x.value == eDVBFrontendParametersSatellite.Modulation_16APSK:
769 +                                               self.list.append(getConfigListEntry(_("FEC"), self.scan_sat.fec_s2x_16apsk))
770 +                                       elif self.scan_sat.modulation_dvbs2x.value == eDVBFrontendParametersSatellite.Modulation_32APSK:
771 +                                               self.list.append(getConfigListEntry(_("FEC"), self.scan_sat.fec_s2x_32apsk))
772 +
773                         elif self.scan_type.value == "single_satellite":
774                                 self.updateSatList()
775                                 print self.scan_satselection[index_to_scan]
776 @@ -686,43 +713,18 @@ class ScanSetup(ConfigListScreen, Screen, CableTransponderSearchSupport, Terrest
777         def newConfig(self):
778                 cur = self["config"].getCurrent()
779                 print "cur is", cur
780 +               if cur is None:
781 +                       return
782 +
783                 if cur == self.typeOfScanEntry or \
784                         cur == self.tunerEntry or \
785                         cur == self.systemEntry or \
786 -                       (self.modulationEntry and self.systemEntry[1].value == eDVBFrontendParametersSatellite.System_DVB_S2 and cur == self.modulationEntry):
787 +                       (self.modulationEntry and \
788 +                       (self.systemEntry[1].value in (eDVBFrontendParametersSatellite.System_DVB_S2, eDVBFrontendParametersSatellite.System_DVB_S2X)) and \
789 +                       cur == self.modulationEntry):
790                         self.createSetup()
791  
792         def createConfig(self, frontendData):
793 -                                                          #("Type", frontendData["system"], TYPE_TEXT),
794 -                                          #("Modulation", frontendData["modulation"], TYPE_TEXT),
795 -                                          #("Orbital position", frontendData["orbital_position"], TYPE_VALUE_DEC),
796 -                                          #("Frequency", frontendData["frequency"], TYPE_VALUE_DEC),
797 -                                          #("Symbolrate", frontendData["symbol_rate"], TYPE_VALUE_DEC),
798 -                                          #("Polarization", frontendData["polarization"], TYPE_TEXT),
799 -                                          #("Inversion", frontendData["inversion"], TYPE_TEXT),
800 -                                          #("FEC inner", frontendData["fec_inner"], TYPE_TEXT),
801 -                                               #)
802 -               #elif frontendData["tuner_type"] == "DVB-C":
803 -                       #return ( ("NIM", ['A', 'B', 'C', 'D'][frontendData["tuner_number"]], TYPE_TEXT),
804 -                                          #("Type", frontendData["tuner_type"], TYPE_TEXT),
805 -                                          #("Frequency", frontendData["frequency"], TYPE_VALUE_DEC),
806 -                                          #("Symbolrate", frontendData["symbol_rate"], TYPE_VALUE_DEC),
807 -                                          #("Modulation", frontendData["modulation"], TYPE_TEXT),
808 -                                          #("Inversion", frontendData["inversion"], TYPE_TEXT),
809 -                       #                  ("FEC inner", frontendData["fec_inner"], TYPE_TEXT),
810 -                                               #)
811 -               #elif frontendData["tuner_type"] == "DVB-T":
812 -                       #return ( ("NIM", ['A', 'B', 'C', 'D'][frontendData["tuner_number"]], TYPE_TEXT),
813 -                                          #("Type", frontendData["tuner_type"], TYPE_TEXT),
814 -                                          #("Frequency", frontendData["frequency"], TYPE_VALUE_DEC),
815 -                                          #("Inversion", frontendData["inversion"], TYPE_TEXT),
816 -                                          #("Bandwidth", frontendData["bandwidth"], TYPE_VALUE_DEC),
817 -                                          #("CodeRateLP", frontendData["code_rate_lp"], TYPE_TEXT),
818 -                                          #("CodeRateHP", frontendData["code_rate_hp"], TYPE_TEXT),
819 -                                          #("Constellation", frontendData["constellation"], TYPE_TEXT),
820 -                                          #("Transmission Mode", frontendData["transmission_mode"], TYPE_TEXT),
821 -                                          #("Guard Interval", frontendData["guard_interval"], TYPE_TEXT),
822 -                                          #("Hierarchy Inform.", frontendData["hierarchy_information"], TYPE_TEXT),
823                         defaultSat = {
824                                 "orbpos": 192,
825                                 "system": eDVBFrontendParametersSatellite.System_DVB_S,
826 @@ -732,7 +734,13 @@ class ScanSetup(ConfigListScreen, Screen, CableTransponderSearchSupport, Terrest
827                                 "polarization": eDVBFrontendParametersSatellite.Polarisation_Horizontal,
828                                 "fec": eDVBFrontendParametersSatellite.FEC_Auto,
829                                 "fec_s2": eDVBFrontendParametersSatellite.FEC_9_10,
830 -                               "modulation": eDVBFrontendParametersSatellite.Modulation_QPSK }
831 +                               "fec_s2x_qpsk": eDVBFrontendParametersSatellite.FEC_13_45,
832 +                               "fec_s2x_8psk": eDVBFrontendParametersSatellite.FEC_23_36,
833 +                               "fec_s2x_8apsk": eDVBFrontendParametersSatellite.FEC_5_9_L,
834 +                               "fec_s2x_16apsk": eDVBFrontendParametersSatellite.FEC_1_2_L,
835 +                               "fec_s2x_32apsk": eDVBFrontendParametersSatellite.FEC_2_3_L,
836 +                               "modulation": eDVBFrontendParametersSatellite.Modulation_QPSK,
837 +                               "modulation_s2x": eDVBFrontendParametersSatellite.Modulation_QPSK}
838                         defaultCab = {
839                                 "frequency": 466,
840                                 "inversion": eDVBFrontendParametersCable.Inversion_Unknown,
841 @@ -760,14 +768,34 @@ class ScanSetup(ConfigListScreen, Screen, CableTransponderSearchSupport, Terrest
842                                         defaultSat["inversion"] = frontendData.get("inversion", eDVBFrontendParametersSatellite.Inversion_Unknown)
843                                         defaultSat["symbolrate"] = frontendData.get("symbol_rate", 0) / 1000
844                                         defaultSat["polarization"] = frontendData.get("polarization", eDVBFrontendParametersSatellite.Polarisation_Horizontal)
845 +                                       defaultSat["orbpos"] = frontendData.get("orbital_position", 0)
846 +
847 +                                       defaultSat["modulation"] = frontendData.get("modulation", eDVBFrontendParametersSatellite.Modulation_QPSK)
848 +                                       defaultSat["modulation_s2x"] = frontendData.get("modulation", eDVBFrontendParametersSatellite.Modulation_QPSK)
849 +
850 +                                       if defaultSat["modulation"] > eDVBFrontendParametersSatellite.Modulation_8PSK:
851 +                                               defaultSat["modulation"] = eDVBFrontendParametersSatellite.Modulation_8PSK
852 +
853                                         if defaultSat["system"] == eDVBFrontendParametersSatellite.System_DVB_S2:
854                                                 defaultSat["fec_s2"] = frontendData.get("fec_inner", eDVBFrontendParametersSatellite.FEC_Auto)
855 -                                               defaultSat["rolloff"] = frontendData.get("rolloff", eDVBFrontendParametersSatellite.RollOff_alpha_0_35)
856 -                                               defaultSat["pilot"] = frontendData.get("pilot", eDVBFrontendParametersSatellite.Pilot_Unknown)
857 +                                       elif defaultSat["system"] == eDVBFrontendParametersSatellite.System_DVB_S2X:
858 +                                               if defaultSat["modulation_s2x"] == eDVBFrontendParametersSatellite.Modulation_QPSK:
859 +                                                       defaultSat["fec_s2x_qpsk"] = frontendData.get("fec_inner", eDVBFrontendParametersSatellite.FEC_13_45)
860 +                                               elif defaultSat["modulation_s2x"] == eDVBFrontendParametersSatellite.Modulation_8PSK:
861 +                                                       defaultSat["fec_s2x_8psk"] = frontendData.get("fec_inner", eDVBFrontendParametersSatellite.FEC_23_36)
862 +                                               elif defaultSat["modulation_s2x"] == eDVBFrontendParametersSatellite.Modulation_8APSK:
863 +                                                       defaultSat["fec_s2x_8apsk"] = frontendData.get("fec_inner", eDVBFrontendParametersSatellite.FEC_5_9_L)
864 +                                               elif defaultSat["modulation_s2x"] == eDVBFrontendParametersSatellite.Modulation_16APSK:
865 +                                                       defaultSat["fec_s2x_16apsk"] = frontendData.get("fec_inner", eDVBFrontendParametersSatellite.FEC_1_2_L)
866 +                                               elif defaultSat["modulation_s2x"] == eDVBFrontendParametersSatellite.Modulation_32APSK:
867 +                                                       defaultSat["fec_s2x_32apsk"] = frontendData.get("fec_inner", eDVBFrontendParametersSatellite.FEC_2_3_L)
868                                         else:
869                                                 defaultSat["fec"] = frontendData.get("fec_inner", eDVBFrontendParametersSatellite.FEC_Auto)
870 -                                       defaultSat["modulation"] = frontendData.get("modulation", eDVBFrontendParametersSatellite.Modulation_QPSK)
871 -                                       defaultSat["orbpos"] = frontendData.get("orbital_position", 0)
872 +
873 +                                       if defaultSat["system"] in (eDVBFrontendParametersSatellite.System_DVB_S2, eDVBFrontendParametersSatellite.System_DVB_S2X):
874 +                                               defaultSat["rolloff"] = frontendData.get("rolloff", eDVBFrontendParametersSatellite.RollOff_alpha_0_35)
875 +                                               defaultSat["pilot"] = frontendData.get("pilot", eDVBFrontendParametersSatellite.Pilot_Unknown)
876 +
877                                 elif ttype == "DVB-C":
878                                         defaultCab["frequency"] = frontendData.get("frequency", 0) / 1000
879                                         defaultCab["symbolrate"] = frontendData.get("symbol_rate", 0) / 1000
880 @@ -822,9 +850,17 @@ class ScanSetup(ConfigListScreen, Screen, CableTransponderSearchSupport, Terrest
881                         self.scan_ber.enabled = False
882  
883                         # sat
884 -                       self.scan_sat.system = ConfigSelection(default = defaultSat["system"], choices = [
885 +                       sat_choices = [
886 +                               (eDVBFrontendParametersSatellite.System_DVB_S, _("DVB-S")),
887 +                               (eDVBFrontendParametersSatellite.System_DVB_S2, _("DVB-S2"))]
888 +
889 +                       sat_choices_dvbs2x = [
890                                 (eDVBFrontendParametersSatellite.System_DVB_S, _("DVB-S")),
891 -                               (eDVBFrontendParametersSatellite.System_DVB_S2, _("DVB-S2"))])
892 +                               (eDVBFrontendParametersSatellite.System_DVB_S2, _("DVB-S2")),
893 +                               (eDVBFrontendParametersSatellite.System_DVB_S2X, _("DVB-S2X"))]
894 +
895 +                       self.scan_sat.system = ConfigSelection(default = defaultSat["system"], choices = sat_choices)
896 +                       self.scan_sat.system_dvbs2x = ConfigSelection(default = defaultSat["system"], choices = sat_choices_dvbs2x)
897                         self.scan_sat.frequency = ConfigInteger(default = defaultSat["frequency"], limits = (1, 99999))
898                         self.scan_sat.inversion = ConfigSelection(default = defaultSat["inversion"], choices = [
899                                 (eDVBFrontendParametersSatellite.Inversion_Off, _("Off")),
900 @@ -854,9 +890,51 @@ class ScanSetup(ConfigListScreen, Screen, CableTransponderSearchSupport, Terrest
901                                 (eDVBFrontendParametersSatellite.FEC_7_8, "7/8"),
902                                 (eDVBFrontendParametersSatellite.FEC_8_9, "8/9"),
903                                 (eDVBFrontendParametersSatellite.FEC_9_10, "9/10")])
904 +
905 +                       self.scan_sat.fec_s2x_qpsk = ConfigSelection(default = defaultSat["fec_s2x_qpsk"], choices = [
906 +                               (eDVBFrontendParametersSatellite.FEC_13_45, "13/45"),
907 +                               (eDVBFrontendParametersSatellite.FEC_9_20, "9/20"),
908 +                               (eDVBFrontendParametersSatellite.FEC_11_20, "11/20")])
909 +
910 +                       self.scan_sat.fec_s2x_8psk = ConfigSelection(default = defaultSat["fec_s2x_8psk"], choices = [
911 +                               (eDVBFrontendParametersSatellite.FEC_23_36, "23/36"),
912 +                               (eDVBFrontendParametersSatellite.FEC_25_36, "25/36"),
913 +                               (eDVBFrontendParametersSatellite.FEC_13_18, "13/28")])
914 +
915 +                       self.scan_sat.fec_s2x_8apsk = ConfigSelection(default = defaultSat["fec_s2x_8apsk"], choices = [
916 +                               (eDVBFrontendParametersSatellite.FEC_5_9_L, "5/9-L"),
917 +                               (eDVBFrontendParametersSatellite.FEC_26_45_L, "26/45-L")])
918 +
919 +                       self.scan_sat.fec_s2x_16apsk = ConfigSelection(default = defaultSat["fec_s2x_16apsk"], choices = [
920 +                               (eDVBFrontendParametersSatellite.FEC_1_2_L, "1/2-L"),
921 +                               (eDVBFrontendParametersSatellite.FEC_8_15_L, "8/15-L"),
922 +                               (eDVBFrontendParametersSatellite.FEC_5_9_L, "5/9-L"),
923 +                               (eDVBFrontendParametersSatellite.FEC_26_45, "26/45"),
924 +                               (eDVBFrontendParametersSatellite.FEC_3_5, "3/5"),
925 +                               (eDVBFrontendParametersSatellite.FEC_3_5_L, "3/5-L"),
926 +                               (eDVBFrontendParametersSatellite.FEC_28_45, "28/45"),
927 +                               (eDVBFrontendParametersSatellite.FEC_23_36, "23/36"),
928 +                               (eDVBFrontendParametersSatellite.FEC_2_3_L, "2/3-L"),
929 +                               (eDVBFrontendParametersSatellite.FEC_25_36, "25/36"),
930 +                               (eDVBFrontendParametersSatellite.FEC_13_18, "13/18"),
931 +                               (eDVBFrontendParametersSatellite.FEC_7_9, "7/9"),
932 +                               (eDVBFrontendParametersSatellite.FEC_77_90, "77/90")])
933 +
934 +                       self.scan_sat.fec_s2x_32apsk = ConfigSelection(default = defaultSat["fec_s2x_32apsk"], choices = [
935 +                               (eDVBFrontendParametersSatellite.FEC_2_3_L, "2/3-L"),
936 +                               (eDVBFrontendParametersSatellite.FEC_32_45, "32/45"),
937 +                               (eDVBFrontendParametersSatellite.FEC_11_15, "11/15"),
938 +                               (eDVBFrontendParametersSatellite.FEC_7_9, "7/9")])
939 +
940                         self.scan_sat.modulation = ConfigSelection(default = defaultSat["modulation"], choices = [
941                                 (eDVBFrontendParametersSatellite.Modulation_QPSK, "QPSK"),
942                                 (eDVBFrontendParametersSatellite.Modulation_8PSK, "8PSK")])
943 +                       self.scan_sat.modulation_dvbs2x = ConfigSelection(default = defaultSat["modulation_s2x"], choices = [
944 +                               (eDVBFrontendParametersSatellite.Modulation_QPSK, "QPSK"),
945 +                               (eDVBFrontendParametersSatellite.Modulation_8PSK, "8PSK"),
946 +                               (eDVBFrontendParametersSatellite.Modulation_8APSK, "8APSK"),
947 +                               (eDVBFrontendParametersSatellite.Modulation_16APSK, "16APSK"),
948 +                               (eDVBFrontendParametersSatellite.Modulation_32APSK, "32APSK")])
949                         self.scan_sat.rolloff = ConfigSelection(default = defaultSat.get("rolloff", eDVBFrontendParametersSatellite.RollOff_alpha_0_35), choices = [
950                                 (eDVBFrontendParametersSatellite.RollOff_alpha_0_35, "0.35"),
951                                 (eDVBFrontendParametersSatellite.RollOff_alpha_0_25, "0.25"),
952 @@ -1072,13 +1150,34 @@ class ScanSetup(ConfigListScreen, Screen, CableTransponderSearchSupport, Terrest
953                                 nimsats = self.satList[index_to_scan]
954                                 selsatidx = self.scan_satselection[index_to_scan].index
955  
956 +                               modulation = self.scan_sat.modulation.value
957                                 # however, the satList itself could be empty. in that case, "index" is 0 (for "None").
958                                 if len(nimsats):
959                                         orbpos = nimsats[selsatidx][0]
960 -                                       if self.scan_sat.system.value == eDVBFrontendParametersSatellite.System_DVB_S:
961 +
962 +                                       system = self.scan_sat.system.value
963 +                                       if nim.isCompatible("DVB-S2X"):
964 +                                               system = self.scan_sat.system_dvbs2x.value
965 +
966 +                                       if system == eDVBFrontendParametersSatellite.System_DVB_S:
967                                                 fec = self.scan_sat.fec.value
968 +                                       elif system == eDVBFrontendParametersSatellite.System_DVB_S2:
969 +                                               fec = self.scan_sat.fec_s2.value
970 +                                       elif system == eDVBFrontendParametersSatellite.System_DVB_S2X:
971 +                                               modulation = self.scan_sat.modulation_dvbs2x.value
972 +                                               if modulation == eDVBFrontendParametersSatellite.Modulation_QPSK:
973 +                                                       fec = self.scan_sat.fec_s2x_qpsk.value
974 +                                               elif modulation == eDVBFrontendParametersSatellite.Modulation_8PSK:
975 +                                                       fec = self.scan_sat.fec_s2x_8psk.value
976 +                                               elif modulation == eDVBFrontendParametersSatellite.Modulation_8APSK:
977 +                                                       fec = self.scan_sat.fec_s2x_8apsk.value
978 +                                               elif modulation == eDVBFrontendParametersSatellite.Modulation_16APSK:
979 +                                                       fec = self.scan_sat.fec_s2x_16apsk.value
980 +                                               elif modulation == eDVBFrontendParametersSatellite.Modulation_32APSK:
981 +                                                       fec = self.scan_sat.fec_s2x_32apsk.value
982                                         else:
983                                                 fec = self.scan_sat.fec_s2.value
984 +
985                                         print "add sat transponder"
986                                         self.addSatTransponder(tlist, self.scan_sat.frequency.value,
987                                                                 self.scan_sat.symbolrate.value,
988 @@ -1086,8 +1185,8 @@ class ScanSetup(ConfigListScreen, Screen, CableTransponderSearchSupport, Terrest
989                                                                 fec,
990                                                                 self.scan_sat.inversion.value,
991                                                                 orbpos,
992 -                                                               self.scan_sat.system.value,
993 -                                                               self.scan_sat.modulation.value,
994 +                                                               system,
995 +                                                               modulation,
996                                                                 self.scan_sat.rolloff.value,
997                                                                 self.scan_sat.pilot.value)
998                                 removeAll = False
999 diff --git a/lib/python/Tools/Transponder.py b/lib/python/Tools/Transponder.py
1000 index a882981..2b46d0e 100644
1001 --- a/lib/python/Tools/Transponder.py
1002 +++ b/lib/python/Tools/Transponder.py
1003 @@ -22,12 +22,34 @@ def ConvertToHumanReadable(tp, type = None):
1004                         eDVBFrontendParametersSatellite.FEC_3_5 : "3/5",
1005                         eDVBFrontendParametersSatellite.FEC_4_5 : "4/5",
1006                         eDVBFrontendParametersSatellite.FEC_8_9 : "8/9",
1007 -                       eDVBFrontendParametersSatellite.FEC_9_10 : "9/10"}[tp["fec_inner"]]
1008 +                       eDVBFrontendParametersSatellite.FEC_9_10 : "9/10",
1009 +                       eDVBFrontendParametersSatellite.FEC_13_45 : "13/45",
1010 +                       eDVBFrontendParametersSatellite.FEC_9_20 : "9/20",
1011 +                       eDVBFrontendParametersSatellite.FEC_11_20 : "11/20",
1012 +                       eDVBFrontendParametersSatellite.FEC_23_36 : "23/36",
1013 +                       eDVBFrontendParametersSatellite.FEC_25_36 : "25/36",
1014 +                       eDVBFrontendParametersSatellite.FEC_13_18 : "13/18",
1015 +                       eDVBFrontendParametersSatellite.FEC_26_45 : "26/45",
1016 +                       eDVBFrontendParametersSatellite.FEC_28_45 : "28/45",
1017 +                       eDVBFrontendParametersSatellite.FEC_7_9 : "7/9",
1018 +                       eDVBFrontendParametersSatellite.FEC_77_90 : "77/90",
1019 +                       eDVBFrontendParametersSatellite.FEC_32_45 : "32/45",
1020 +                       eDVBFrontendParametersSatellite.FEC_11_15 : "11/15",
1021 +                       eDVBFrontendParametersSatellite.FEC_1_2_L : "1/2-L",
1022 +                       eDVBFrontendParametersSatellite.FEC_8_15_L : "8/15-L",
1023 +                       eDVBFrontendParametersSatellite.FEC_3_5_L : "3/5-L",
1024 +                       eDVBFrontendParametersSatellite.FEC_2_3_L : "2/3-L",
1025 +                       eDVBFrontendParametersSatellite.FEC_5_9_L : "5/9-L",
1026 +                       eDVBFrontendParametersSatellite.FEC_26_45_L : "26/45-L"}[tp["fec_inner"]]
1027                 ret["modulation"] = {
1028                         eDVBFrontendParametersSatellite.Modulation_Auto : _("Auto"),
1029                         eDVBFrontendParametersSatellite.Modulation_QPSK : "QPSK",
1030                         eDVBFrontendParametersSatellite.Modulation_QAM16 : "QAM16",
1031 -                       eDVBFrontendParametersSatellite.Modulation_8PSK : "8PSK"}[tp["modulation"]]
1032 +                       eDVBFrontendParametersSatellite.Modulation_8PSK : "8PSK",
1033 +                       eDVBFrontendParametersSatellite.Modulation_16APSK : "16APSK",
1034 +                       eDVBFrontendParametersSatellite.Modulation_32APSK : "32APSK",
1035 +                       eDVBFrontendParametersSatellite.Modulation_8APSK : "8APSK",
1036 +                       }[tp["modulation"]]
1037                 ret["orbital_position"] = nimmanager.getSatName(int(tp["orbital_position"]))
1038                 ret["polarization"] = {
1039                         eDVBFrontendParametersSatellite.Polarisation_Horizontal : _("Horizontal"),
1040 @@ -36,8 +58,9 @@ def ConvertToHumanReadable(tp, type = None):
1041                         eDVBFrontendParametersSatellite.Polarisation_CircularRight : _("Circular right")}[tp["polarization"]]
1042                 ret["system"] = {
1043                         eDVBFrontendParametersSatellite.System_DVB_S : "DVB-S",
1044 -                       eDVBFrontendParametersSatellite.System_DVB_S2 : "DVB-S2"}[tp["system"]]
1045 -               if ret["system"] == "DVB-S2":
1046 +                       eDVBFrontendParametersSatellite.System_DVB_S2 : "DVB-S2",
1047 +                       eDVBFrontendParametersSatellite.System_DVB_S2X : "DVB-S2X"}[tp["system"]]
1048 +               if ret["system"] in ("DVB-S2", "DVB-S2X"):
1049                         ret["rolloff"] = {
1050                                 eDVBFrontendParametersSatellite.RollOff_alpha_0_35 : "0.35",
1051                                 eDVBFrontendParametersSatellite.RollOff_alpha_0_25 : "0.25",
1052 @@ -83,6 +106,7 @@ def ConvertToHumanReadable(tp, type = None):
1053                         eDVBFrontendParametersTerrestrial.FEC_1_2 : "1/2",
1054                         eDVBFrontendParametersTerrestrial.FEC_2_3 : "2/3",
1055                         eDVBFrontendParametersTerrestrial.FEC_3_4 : "3/4",
1056 +                       eDVBFrontendParametersTerrestrial.FEC_4_5 : "4/5",
1057                         eDVBFrontendParametersTerrestrial.FEC_5_6 : "5/6",
1058                         eDVBFrontendParametersTerrestrial.FEC_6_7 : "6/7",
1059                         eDVBFrontendParametersTerrestrial.FEC_7_8 : "7/8",
1060 @@ -92,6 +116,7 @@ def ConvertToHumanReadable(tp, type = None):
1061                         eDVBFrontendParametersTerrestrial.FEC_1_2 : "1/2",
1062                         eDVBFrontendParametersTerrestrial.FEC_2_3 : "2/3",
1063                         eDVBFrontendParametersTerrestrial.FEC_3_4 : "3/4",
1064 +                       eDVBFrontendParametersTerrestrial.FEC_4_5 : "4/5",
1065                         eDVBFrontendParametersTerrestrial.FEC_5_6 : "5/6",
1066                         eDVBFrontendParametersTerrestrial.FEC_6_7 : "6/7",
1067                         eDVBFrontendParametersTerrestrial.FEC_7_8 : "7/8",