Support Uno4k/Ultimo4k
[vuplus_openvuplus_3.0] / meta-bsp / recipes-vuplus / enigma2 / enigma2 / enigma2_dvb_ci_fbc.patch
diff --git a/meta-bsp/recipes-vuplus/enigma2/enigma2/enigma2_dvb_ci_fbc.patch b/meta-bsp/recipes-vuplus/enigma2/enigma2/enigma2_dvb_ci_fbc.patch
new file mode 100644 (file)
index 0000000..c152482
--- /dev/null
@@ -0,0 +1,104 @@
+diff --git a/lib/dvb_ci/dvbci.cpp b/lib/dvb_ci/dvbci.cpp
+index 374672a..1b50e67 100644
+--- a/lib/dvb_ci/dvbci.cpp
++++ b/lib/dvb_ci/dvbci.cpp
+@@ -495,10 +495,9 @@ void eDVBCIInterfaces::recheckPMTHandlers()
+                                               data_source tuner_source = TUNER_A;
+                                               switch (tunernum)
+                                               {
+-                                                      case 0: tuner_source = TUNER_A; break;
+-                                                      case 1: tuner_source = TUNER_B; break;
+-                                                      case 2: tuner_source = TUNER_C; break;
+-                                                      case 3: tuner_source = TUNER_D; break;
++                                                      case 0 ... 18:
++                                                              tuner_source = (data_source)tunernum;
++                                                              break;
+                                                       default:
+                                                               eDebug("try to get source for tuner %d!!\n", tunernum);
+                                                               break;
+@@ -646,6 +645,8 @@ int eDVBCIInterfaces::getMMIState(int slotid)
+       return slot->getMMIState();
+ }
++static const char *tuner_source[] = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "CI0", "CI1", "CI2", "CI3"};
++
+ int eDVBCIInterfaces::setInputSource(int tuner_no, data_source source)
+ {
+ //    eDebug("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
+@@ -666,29 +667,8 @@ int eDVBCIInterfaces::setInputSource(int tuner_no, data_source source)
+               switch(source)
+               {
+-                      case CI_A:
+-                              fprintf(input, "CI0");
+-                              break;
+-                      case CI_B:
+-                              fprintf(input, "CI1");
+-                              break;
+-                      case CI_C:
+-                              fprintf(input, "CI2");
+-                      break;
+-                      case CI_D:
+-                              fprintf(input, "CI3");
+-                              break;
+-                      case TUNER_A:
+-                              fprintf(input, "A");
+-                              break;
+-                      case TUNER_B:
+-                              fprintf(input, "B");
+-                              break;
+-                      case TUNER_C:
+-                              fprintf(input, "C");
+-                              break;
+-                      case TUNER_D:
+-                              fprintf(input, "D");
++                      case TUNER_A ... CI_D:
++                              fprintf(input, tuner_source[(int)source]);
+                               break;
+                       default:
+                               eDebug("setInputSource for input %d failed!!!\n", (int)source);
+@@ -1281,29 +1261,8 @@ int eDVBCISlot::setSource(data_source source)
+               FILE *ci = fopen(buf, "wb");
+               switch(source)
+               {
+-                      case CI_A:
+-                              fprintf(ci, "CI0");
+-                              break;
+-                      case CI_B:
+-                              fprintf(ci, "CI1");
+-                              break;
+-                      case CI_C:
+-                              fprintf(ci, "CI2");
+-                              break;
+-                      case CI_D:
+-                              fprintf(ci, "CI3");
+-                              break;
+-                      case TUNER_A:
+-                              fprintf(ci, "A");
+-                              break;
+-                      case TUNER_B:
+-                              fprintf(ci, "B");
+-                              break;
+-                      case TUNER_C:
+-                              fprintf(ci, "C");
+-                              break;
+-                              case TUNER_D:
+-                              fprintf(ci, "D");
++                      case TUNER_A ... CI_D:
++                              fprintf(ci, tuner_source[(int)source]);
+                               break;
+                       default:
+                               eDebug("CI Slot %d: setSource %d failed!!!\n", getSlotID(), (int)source);
+diff --git a/lib/dvb_ci/dvbci.h b/lib/dvb_ci/dvbci.h
+index de84e18..c90ec10 100644
+--- a/lib/dvb_ci/dvbci.h
++++ b/lib/dvb_ci/dvbci.h
+@@ -35,7 +35,7 @@ struct queueData
+ enum data_source
+ {
+-      TUNER_A, TUNER_B, TUNER_C, TUNER_D, CI_A, CI_B, CI_C, CI_D
++      TUNER_A=0, TUNER_B, TUNER_C, TUNER_D, TUNER_E, TUNER_F, TUNER_G, TUNER_H, TUNER_I, TUNER_J, TUNER_K, TUNER_L, TUNER_M, TUNER_N, TUNER_O, TUNER_P, TUNER_Q, TUNER_R, CI_A, CI_B, CI_C, CI_D
+ };
+ typedef std::pair<std::string, uint32_t> providerPair;