[unicable] Support JESS(EN50607) and update unicable.xml, thanks to adenin.
authorhschang <chang@dev3>
Mon, 29 Jun 2015 08:34:19 +0000 (17:34 +0900)
committerhschang <chang@dev3>
Mon, 29 Jun 2015 08:36:56 +0000 (17:36 +0900)
data/unicable.xml
lib/dvb/frontend.cpp
lib/dvb/frontend.h
lib/dvb/idvb.h
lib/dvb/sec.cpp
lib/dvb/sec.h
lib/python/Components/NimManager.py
lib/python/Screens/Satconfig.py

index 33951d7..d461bc5 100644 (file)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="iso-8859-1"?>
 <?xml version="1.0" encoding="iso-8859-1"?>
-<unicable version="20100522">
+<unicable version="20150626">
 <!--
 structur of tree
 unicable (version)
 <!--
 structur of tree
 unicable (version)
@@ -13,7 +13,7 @@ unicable (version)
   |  | manufacturer (name)
   |  |  |\
   |  |  | \
   |  | manufacturer (name)
   |  |  |\
   |  |  | \
-  |  |  | product (name, position, sc11-scr8. lofl, lofh, loft)
+  |  |  | product (name, position, format, scr1-scr32, lofl, lofh, loft)
   |  |  |
   |  |  |\
   |  |  | \
   |  |  |
   |  |  |\
   |  |  | \
@@ -59,13 +59,27 @@ unicable (version)
 -->
 
        <lnb>
 -->
 
        <lnb>
-               <manufacturer name="DUR-line">
-                       <product name="Unicable LNB" scr1="1210" scr2="1420" scr3="1680" scr4="2040"/>
+               <manufacturer name="Dura-Sat(DUR-line)">
+                       <product name="UK101" scr1="1210" scr2="1420" scr3="1680" scr4="2040"/>
+                       <product name="UK102" scr1="1210" scr2="1420" scr3="1680" scr4="2040"/>
+               </manufacturer>
+               <manufacturer name="EDISON">
+                       <product name="SCR-1" scr1="1210" scr2="1420" scr3="1680" scr4="2040"/>
+               </manufacturer>
+               <manufacturer name="Fuba">
+                       <product name="DEK 342" scr1="1210" scr2="1420" scr3="1680" scr4="2040"/>
                </manufacturer>
                <manufacturer name="G-STAR">
                        <product name="GS-404-L1" scr1="1280" scr2="1382" scr3="1484"/>
                        <product name="GS-406-L1" scr1="1280" scr2="1382" scr3="1484" scr4="1586" scr5="1688" scr6="1790"/>
                </manufacturer>
                </manufacturer>
                <manufacturer name="G-STAR">
                        <product name="GS-404-L1" scr1="1280" scr2="1382" scr3="1484"/>
                        <product name="GS-406-L1" scr1="1280" scr2="1382" scr3="1484" scr4="1586" scr5="1688" scr6="1790"/>
                </manufacturer>
+               <manufacturer name="GT-SAT">
+                       <product name="GT-S1-2-3SCR4" scr1="1210" scr2="1420" scr3="1680" scr4="2040"/>
+                       <product name="dLNB dHello" format="EN50607"
+                                       scr1="0975" scr2="1025" scr3="1075" scr4="1125" scr5="1175" scr6="1225" scr7="1275" scr8="1325"
+                                       scr9="1375" scr10="1425" scr11="1475" scr12="1525" scr13="1575" scr14="1625" scr15="1675" scr16="1725"
+                                       scr17="1775" scr18="1825" scr19="1875" scr20="1925" scr21="1975" scr22="2025" scr23="2075" scr24="2125"/>
+               </manufacturer>
                <manufacturer name="Humax">
                        <product name="150 SCR" scr1="1210" scr2="1420" scr3="1680" scr4="2040"/>
                </manufacturer>
                <manufacturer name="Humax">
                        <product name="150 SCR" scr1="1210" scr2="1420" scr3="1680" scr4="2040"/>
                </manufacturer>
@@ -82,6 +96,18 @@ unicable (version)
                <manufacturer name="Radix">
                        <product name="Unicable LNB" scr1="1680" scr2="1420" scr3="2040" scr4="1210"/>
                </manufacturer>
                <manufacturer name="Radix">
                        <product name="Unicable LNB" scr1="1680" scr2="1420" scr3="2040" scr4="1210"/>
                </manufacturer>
+               <manufacturer name="Sharp">
+                       <product name="BS1R8EL600A" scr1="1210" scr2="1420" scr3="1680" scr4="2040"/>
+               </manufacturer>
+               <manufacturer name="Schwaiger">
+                       <product name="SPS6941 531" scr1="1210" scr2="1420" scr3="1680" scr4="2040"/>
+               </manufacturer>
+               <manufacturer name="Telestar">
+                       <product name="Skywire HC LNB" scr1="1210" scr2="1420" scr3="1680" scr4="2040"/>
+               </manufacturer>
+               <manufacturer name="Triax">
+                       <product name="TSC 001" scr1="1210" scr2="1420" scr3="1680" scr4="2040"/>
+               </manufacturer>
                <manufacturer name="Wisi">
                        <product name="OC 05" scr1="1210" scr2="1420" scr3="1680" scr4="2040"/>
                </manufacturer>
                <manufacturer name="Wisi">
                        <product name="OC 05" scr1="1210" scr2="1420" scr3="1680" scr4="2040"/>
                </manufacturer>
@@ -101,31 +127,116 @@ unicable (version)
                        <product name="UCS 92420" positions="2" scr1="1400" scr2="1632" scr3="1284" scr4="1516"/>
                        <product name="UCS 92440" positions="2" scr1="1400" scr2="1632" scr3="1284" scr4="1516"/>
                </manufacturer>
                        <product name="UCS 92420" positions="2" scr1="1400" scr2="1632" scr3="1284" scr4="1516"/>
                        <product name="UCS 92440" positions="2" scr1="1400" scr2="1632" scr3="1284" scr4="1516"/>
                </manufacturer>
+               <manufacturer name="Astra Strobel">
+                       <product name="SEV 103" format="EN50494" positions="1" scr1="1284" scr2="1400" scr3="1514"/>
+                       <product name="SEV 108" format="EN50494" positions="1" scr1="1076" scr2="1178" scr3="1280" scr4="1382" scr5="1484" scr6="1586" scr7="1688" scr8="1790"/>
+                       <product name="SEV 208" format="EN50494" positions="2" scr1="1076" scr2="1178" scr3="1280" scr4="1382" scr5="1484" scr6="1586" scr7="1688" scr8="1790"/>
+               </manufacturer>
+               <manufacturer name="Axing">
+                       <product name="SES 556-19" format="EN50494" positions="1" scr1="1280" scr2="1382" scr3="1484" scr4="1586" scr5="1688" scr6="1790"/>
+                       <product name="SES 556-09" format="EN50494" positions="1" scr1="1280" scr2="1382" scr3="1484" scr4="1586" scr5="1688" scr6="1790"/>
+                       <product name="SES 996-19" format="EN50494" positions="2" scr1="1280" scr2="1382" scr3="1484" scr4="1586" scr5="1688" scr6="1790"/>
+                       <product name="SES 996-09" format="EN50494" positions="2" scr1="1280" scr2="1382" scr3="1484" scr4="1586" scr5="1688" scr6="1790"/>
+                       <product name="SES 46-00" format="EN50494" positions="1" scr1="1280" scr2="1382" scr3="1484" scr4="1586" scr5="1688" scr6="1790"/>
+                       <product name="SES 86-00" format="EN50494" positions="2" scr1="1280" scr2="1382" scr3="1484" scr4="1586" scr5="1688" scr6="1790"/>
+               </manufacturer>
                <manufacturer name="DCT Delta">
                <manufacturer name="DCT Delta">
-                       <product name="SUM518" scr1="1284" scr2="1400" scr3="1516" scr4="1632" scr5="1748" scr6="1864" scr7="1980" scr8="2096"/>
+                       <product name="SUM518" scr1="1284" scr2="1400" scr3="1516" scr4="1632" scr5="1748" scr6="1864" scr7="1980" scr8="2096" alias1="SCR0" alias2="SCR1" alias3="SCR2" alias4="SCR3" alias5="SCR4" alias6="SCR5" alias7="SCR6" alias8="SCR7"/>
                        <product name="SUM918" positions="2" scr1="1284" scr2="1400" scr3="1516" scr4="1632" scr5="1748" scr6="1864" scr7="1980" scr8="2096"/>
                        <product name="SUM928" positions="2" scr1="1284" scr2="1400" scr3="1516" scr4="1632" scr5="1748" scr6="1864" scr7="1980" scr8="2096"/>
                </manufacturer>
                        <product name="SUM918" positions="2" scr1="1284" scr2="1400" scr3="1516" scr4="1632" scr5="1748" scr6="1864" scr7="1980" scr8="2096"/>
                        <product name="SUM928" positions="2" scr1="1284" scr2="1400" scr3="1516" scr4="1632" scr5="1748" scr6="1864" scr7="1980" scr8="2096"/>
                </manufacturer>
-               <manufacturer name="Dura-Sat">
+               <manufacturer name="Dura-Sat(Dur-Line)">
+                       <product name="Dur-DCR5-1-8(L4/K)" format="JESS" scr1="1280" scr2="1382" scr3="1484" scr4="1586" scr5="1688" scr6="1790" scr7="1892" scr8="1994"/>
+                       <product name="DCR 5-2-4" scr1="1280" scr2="1382" scr3="1484" scr4="1586"/>
+                       <product name="UCP2" scr1="1400" scr2="1516"/>
+                       <product name="UCP3" scr1="1280" scr2="1382" scr3="1484"/>
                        <product name="UCP18" scr1="1284" scr2="1400" scr3="1516" scr4="1632" scr5="1748" scr6="1864" scr7="1980" scr8="2096"/>
                        <product name="UCP18" scr1="1284" scr2="1400" scr3="1516" scr4="1632" scr5="1748" scr6="1864" scr7="1980" scr8="2096"/>
+                       <product name="UCP20" scr1="1210" scr2="1420"/>
+                       <product name="UCP30" scr1="1210" scr2="1420" scr3="1680"/>
                        <product name="VDU543NT" scr1="1280" scr2="1382" scr3="1484"/>
                        <product name="VDU563NT" scr1="1280" scr2="1382" scr3="1484"/>
                        <product name="VDU583NT" scr1="1280" scr2="1382" scr3="1484"/>
                        <product name="VDU586NT" scr1="1280" scr2="1382" scr3="1484" scr4="1586" scr5="1688" scr6="1790"/>
                        <product name="VDU983NT" positions="2" scr1="1280" scr2="1382" scr3="1484"/>
                </manufacturer>
                        <product name="VDU543NT" scr1="1280" scr2="1382" scr3="1484"/>
                        <product name="VDU563NT" scr1="1280" scr2="1382" scr3="1484"/>
                        <product name="VDU583NT" scr1="1280" scr2="1382" scr3="1484"/>
                        <product name="VDU586NT" scr1="1280" scr2="1382" scr3="1484" scr4="1586" scr5="1688" scr6="1790"/>
                        <product name="VDU983NT" positions="2" scr1="1280" scr2="1382" scr3="1484"/>
                </manufacturer>
+               <manufacturer name="EMP-Centauri">
+                       <product name="MS4/1(6)EUN-3" positions="1" scr1="1400" scr2="1632" scr3="1284" scr4="1516" scr5="1864" scr6="2096"/>
+                       <product name="MS4/1(8)PIN-4" positions="1" scr1="1080" scr2="1176" scr3="1237" scr4="1413" scr5="1555" scr6="1668" scr7="1842" scr8="1960" />
+                       <product name="MS8/1(8)PIN-4" positions="2" scr1="1080" scr2="1176" scr3="1237" scr4="1413" scr5="1555" scr6="1668" scr7="1842" scr8="1960"/>
+                       <product name="MS5/5+2PIP-4" positions="1" scr1="1080" scr2="1176" scr3="1237" scr4="1413" scr5="1555" scr6="1668" scr7="1842" scr8="1960" />
+                       <product name="MS5/5+2PEP-4" positions="1" scr1="1080" scr2="1176" scr3="1237" scr4="1413" scr5="1555" scr6="1668" scr7="1842" scr8="1960" />
+               </manufacturer>
+               <manufacturer name="Fuba">
+                       <product name="MCR 212" format="EN50494" positions="1" scr1="1400" scr2="1516"/>
+                       <product name="MCR 221" format="EN50607" positions="1" scr1="1280" scr2="1382"/>
+                       <product name="MCR 441" format="EN50607" positions="1" scr1="1280" scr2="1382" scr3="1484" scr4="1586"/>
+                       <product name="MCR 518" format="EN50494" positions="1" scr1="1076" scr2="1178" scr3="1280" scr4="1382" scr5="1484" scr6="1586" scr7="1688" scr8="1790"/>
+                       <product name="MCR 918" format="EN50494" positions="2" scr1="1076" scr2="1178" scr3="1280" scr4="1382" scr5="1484" scr6="1586" scr7="1688" scr8="1790"/>
+               </manufacturer>
                <manufacturer name="G-STAR">
                        <product name="GS-506-S1" scr1="1280" scr2="1382" scr3="1484"/>
                        <product name="GS-516-S1" scr1="1280" scr2="1382" scr3="1484" scr4="1586" scr5="1688" scr6="1790"/>
                </manufacturer>
                <manufacturer name="G-STAR">
                        <product name="GS-506-S1" scr1="1280" scr2="1382" scr3="1484"/>
                        <product name="GS-516-S1" scr1="1280" scr2="1382" scr3="1484" scr4="1586" scr5="1688" scr6="1790"/>
                </manufacturer>
+               <manufacturer name="GSS (Grundig SAT-Systems)">
+                       <product name="SDUC 502" positions="1" scr1="1284" scr2="1400" scr3="1516" scr4="1632" scr5="1748" scr6="1864" scr7="1980" scr8="2096"/>
+                       <product name="SDUC 902" positions="2" scr1="1284" scr2="1400" scr3="1516" scr4="1632" scr5="1748" scr6="1864" scr7="1980" scr8="2096"/>
+               </manufacturer>
                <manufacturer name="Inverto">
                <manufacturer name="Inverto">
-                       <product name="IDLP-UST11O-CUO1O-8PP" scr1="1076" scr2="1178" scr3="1280" scr4="1382" scr5="1484" scr6="1586" scr7="1688" scr8="1790"/>
+                       <product name="IDLP-UST1O1-CUO1O-4PP" format="DiSEqC" positions="1" scr1="1210" scr2="1420" scr3="1680" scr4="2040"/>
+                       <product name="IDLP-UST11O-CUO1O-8PP" format="DiSEqC" positions="1" scr1="1076" scr2="1178" scr3="1280" scr4="1382" scr5="1484" scr6="1586" scr7="1688" scr8="1790"/>
+                       <product name="IDLP-UST112-CUO1O-8PP" format="DiSEqC" positions="1" scr1="1076" scr2="1178" scr3="1280" scr4="1382" scr5="1484" scr6="1586" scr7="1688" scr8="1790"/>
+                       <product name="IDLP-USS200-CUO10-8PP" format="DiSEqC" positions="2" scr1="1076" scr2="1178" scr3="1280" scr4="1382" scr5="1484" scr6="1586" scr7="1688" scr8="1790"/>
+               </manufacturer>
+               <manufacturer name="Johansson">
+                       <product name="9712A" format="DiSEqC" positions="1" scr1="1280" scr2="1382" scr3="1484"/>
+                       <product name="9730I" format="DiSEqC" positions="1" scr1="1210" scr2="1420" scr3="1680" scr4="2040"/>
+                       <product name="9740" format="DiSEqC" positions="1" scr1="1280" scr2="1382" scr3="1484"/>
+                       <product name="9740D" format="DiSEqC" positions="1" scr1="1280" scr2="1382" scr3="1484"/>
+                       <product name="9740I" format="DiSEqC" positions="1" scr1="1210" scr2="1420" scr3="1680"/>
+                       <product name="9742" format="DiSEqC" positions="1" scr1="1280" scr2="1382" scr3="1484"/>
+                       <product name="9742D" format="DiSEqC" positions="1" scr1="1280" scr2="1382" scr3="1484"/>
+                       <product name="9742I" format="DiSEqC" positions="1" scr1="1210" scr2="1420" scr3="1680"/>
+                       <product name="9750" format="DiSEqC" positions="2" scr1="1280" scr2="1382" scr3="1484"/>
+                       <product name="9750D" format="DiSEqC" positions="2" scr1="1280" scr2="1382" scr3="1484"/>
+                       <product name="9750I" format="DiSEqC" positions="2" scr1="1210" scr2="1420" scr3="1680"/>
+                       <product name="9752" format="DiSEqC" positions="2" scr1="1280" scr2="1382" scr3="1484"/>
+                       <product name="9752D" format="DiSEqC" positions="2" scr1="1280" scr2="1382" scr3="1484"/>
+                       <product name="9752I" format="DiSEqC" positions="2" scr1="1210" scr2="1420" scr3="1680"/>
+                       <product name="9760" format="JESS" positions="4" scr1="1280" scr2="1382" scr3="1484"/>
+                       <product name="9760D" format="JESS" positions="4" scr1="1280" scr2="1382" scr3="1484"/>
+                       <product name="9760I" format="JESS" positions="4" scr1="1210" scr2="1420" scr3="1680"/>
+                       <product name="9762" format="JESS" positions="4" scr1="1280" scr2="1382" scr3="1484"/>
+                       <product name="9762D" format="JESS" positions="4" scr1="1280" scr2="1382" scr3="1484"/>
+                       <product name="9762I" format="JESS" positions="4" scr1="1210" scr2="1420" scr3="1680"/>
                </manufacturer>
                <manufacturer name="JULTEC">
                </manufacturer>
                <manufacturer name="JULTEC">
-                       <product name="JPS0501-6" scr1="1280" scr2="1382" scr3="1484" scr4="1586" scr5="1688" scr6="1790"/>
-                       <product name="JPS0502-3" scr1="1280" scr2="1382" scr3="1484"/>
-                       <product name="JPS0502-6" scr1="1280" scr2="1382" scr3="1484" scr4="1586" scr5="1688" scr6="1790"/>
-                       <product name="JPS0504-3" scr1="1280" scr2="1382" scr3="1484"/>
+                       <product name="JPS0501-12"  format="JESS" scr1="974"  scr2="1076" scr3="1178" scr4="1280" scr5="1382" scr6="1484" scr7="1586" scr8="1688" scr9="1790" scr10="1892" scr11="1994" scr12="2096"/>
+                       <product name="JPS0501-8(A/M/T)"   format="JESS" scr1="1076" scr2="1178" scr3="1280" scr4="1382" scr5="1484" scr6="1586" scr7="1688" scr8="1790"/>
+                       <product name="JPS0501-6"   format="JESS" scr1="1280" scr2="1382" scr3="1484" scr4="1586" scr5="1688" scr6="1790"/>
+                       <product name="JPS0502-3"   format="JESS" scr1="1280" scr2="1382" scr3="1484"/>
+                       <product name="JPS0502-6"   format="JESS" scr1="1280" scr2="1382" scr3="1484" scr4="1586" scr5="1688" scr6="1790"/>
+                       <product name="JPS0504-3"   format="JESS" scr1="1280" scr2="1382" scr3="1484"/>
+                       <product name="JPS0506-3"   format="JESS" scr1="1280" scr2="1382" scr3="1484"/>
+                       <product name="JPS0508-3"   format="JESS" scr1="1280" scr2="1382" scr3="1484"/>
+                       <product name="JRS0502-2+4" format="JESS" scr1="1280" scr2="1382"/>
+                       <product name="JRS0504-2"   format="JESS" scr1="1280" scr2="1382"/>
+                       <product name="JPS0901-6"   positions="2" format="JESS" scr1="1280" scr2="1382" scr3="1484" scr4="1586" scr5="1688" scr6="1790"/>
+                       <product name="JPS0901-12"  positions="2" format="JESS" scr1="974"  scr2="1076" scr3="1178" scr4="1280" scr5="1382" scr6="1484" scr7="1586" scr8="1688" scr9="1790" scr10="1892" scr11="1994" scr12="2096"/>
+                       <product name="JPS0902-3"   positions="2" format="JESS" scr1="1280" scr2="1382" scr3="1484"/>
+                       <product name="JPS0902-6"   positions="2" format="JESS" scr1="1280" scr2="1382" scr3="1484" scr4="1586" scr5="1688" scr6="1790"/>
+                       <product name="JPS0904-3"   positions="2" format="JESS" scr1="1280" scr2="1382" scr3="1484"/>
+                       <product name="JPS0904-6"   positions="2" format="JESS" scr1="1280" scr2="1382" scr3="1484" scr4="1586" scr5="1688" scr6="1790"/>
+                       <product name="JPS0906-3"   positions="2" format="JESS" scr1="1280" scr2="1382" scr3="1484"/>
+                       <product name="JPS0908-3"   positions="2" format="JESS" scr1="1280" scr2="1382" scr3="1484"/>
+                       <product name="JRS0902-2+4" positions="2" format="JESS" scr1="1280" scr2="1382"/>
+                       <product name="JRS0904-2"   positions="2" format="JESS" scr1="1280" scr2="1382"/>
+                       <product name="JPS1701-12"  positions="4" format="JESS" scr1="974"  scr2="1076" scr3="1178" scr4="1280" scr5="1382" scr6="1484" scr7="1586" scr8="1688" scr9="1790" scr10="1892" scr11="1994" scr12="2096"/>
+                       <product name="JPS1702-12"  positions="4" format="JESS" scr1="974"  scr2="1076" scr3="1178" scr4="1280" scr5="1382" scr6="1484" scr7="1586" scr8="1688" scr9="1790" scr10="1892" scr11="1994" scr12="2096"/>
+                       <product name="JPS1702-6"   positions="4" format="JESS" scr1="1280" scr2="1382" scr3="1484" scr4="1586" scr5="1688" scr6="1790"/>
+                       <product name="JPS1704-3"   positions="4" format="JESS" scr1="1280" scr2="1382" scr3="1484"/>
+                       <product name="JPS1704-6"   positions="4" format="JESS" scr1="1280" scr2="1382" scr3="1484" scr4="1586" scr5="1688" scr6="1790"/>
+                       <product name="JPS1706-3"   positions="4" format="JESS" scr1="1280" scr2="1382" scr3="1484"/>
+                       <product name="JPS1708-3"   positions="4" format="JESS" scr1="1280" scr2="1382" scr3="1484"/>
                </manufacturer>
                <manufacturer name="Kathrein">
                        <product name="EXR501" scr1="1400" scr2="1516" scr3="1632" scr4="1748"/>
                </manufacturer>
                <manufacturer name="Kathrein">
                        <product name="EXR501" scr1="1400" scr2="1516" scr3="1632" scr4="1748"/>
@@ -142,28 +253,74 @@ unicable (version)
                        <product name="EXR2942" positions="2" scr1="1284" scr2="1400" scr3="1516" scr4="1632"/>
                        <product name="EXR2981" positions="2" scr1="1284" scr2="1400" scr3="1516" scr4="1632" scr5="1748" scr6="1864" scr7="1980" scr8="2096"/>
                        <product name="EXU908" positions="2" scr1="1284" scr2="1400" scr3="1516" scr4="1632"/>
                        <product name="EXR2942" positions="2" scr1="1284" scr2="1400" scr3="1516" scr4="1632"/>
                        <product name="EXR2981" positions="2" scr1="1284" scr2="1400" scr3="1516" scr4="1632" scr5="1748" scr6="1864" scr7="1980" scr8="2096"/>
                        <product name="EXU908" positions="2" scr1="1284" scr2="1400" scr3="1516" scr4="1632"/>
+                       <product name="EXE 159" format="SCD2" scr1="974"  permpin1="151" scr2="1076" permpin2="052" scr3="1178" permpin3="133" scr4="1280" permpin4="124" scr5="1382" permpin5="205" scr6="1484" permpin6="196" scr7="1586" permpin7="187" scr8="1688" permpin8="178" scr9="1790" permpin9="099"/>
+                       <product name="EXE 259" format="SCD2" scr1="974"  permpin1="151" scr2="1076" permpin2="052" scr3="1178" permpin3="133" scr4="1280" permpin4="124" scr5="1382" permpin5="205" scr6="1484" permpin6="196" scr7="1586" permpin7="187" scr8="1688" permpin8="178" scr9="1790" permpin9="099"/>
+               </manufacturer>
+               <manufacturer name="Kreiling">
+                       <product name="KR 2-1-2 Uni-D" format="DiSEqC" positions="2" scr1="1400" scr2="1516"/>
+                       <product name="KR 5-1+4" format="DiSEqC" positions="1" scr1="1280" scr2="1382" scr3="1484" scr4="1586" scr5="1688" scr6="1790" scr7="1892" scr8="1994"/>
+                       <product name="KR 5-2+4" format="DiSEqC" positions="1" scr1="1280" scr2="1382" scr3="1484" scr4="1586"/>
+                       <product name="KR 5-5-1-8" format="DiSEqC" positions="1" scr1="1280" scr2="1382" scr3="1484" scr4="1586" scr5="1688" scr6="1790" scr7="1892" scr8="1994"/>
+                       <product name="KR 5-5-2-4" format="DiSEqC" positions="1" scr1="1280" scr2="1382" scr3="1484" scr4="1586"/>
+               </manufacturer>
+               <manufacturer name="Rogetech">
+                       <product name="CMS-518C" format="EN50494" positions="1" scr1="1076" scr2="1178" scr3="1280" scr4="1382" scr5="1484" scr6="1586" scr7="1688" scr8="1790"/>
                </manufacturer>
                <manufacturer name="ROTEK">
                        <product name="EKL2/1" scr1="1400" scr2="1516"/>
                        <product name="EKL2/1E" scr3="1632" scr4="1748"/>
                </manufacturer>
                </manufacturer>
                <manufacturer name="ROTEK">
                        <product name="EKL2/1" scr1="1400" scr2="1516"/>
                        <product name="EKL2/1E" scr3="1632" scr4="1748"/>
                </manufacturer>
+               <manufacturer name="SetOne">
+                       <product name="SCR 5/8" positions="1" scr1="1284" scr2="1400" scr3="1516" scr4="1632" scr5="1748" scr6="1864" scr7="1980" scr8="2096"/>
+               </manufacturer>
                <manufacturer name="Smart">
                <manufacturer name="Smart">
-                       <product name="DPA 51" scr1="1284" scr2="1400" scr3="1516" scr4="1632" scr5="1748" scr6="1864" scr7="1980" scr8="2096"/>
+                       <product name="DPA 51" format="DiSEqC" scr1="1284" scr2="1400" scr3="1516" scr4="1632" scr5="1748" scr6="1864" scr7="1980" scr8="2096"/>
+                       <product name="DPA 524 L" format="JESS" scr1="1280" scr2="1382" scr3="1484" scr4="1586"/>
+               </manufacturer>
+               <manufacturer name="Spaun">
+                       <product name="SUS 21 F" format="EN50494" scr1="1076" scr2="1178"/>
+                       <product name="SUS 21 FI" format="EN50494" scr1="1210" scr2="1420"/>
+                       <product name="SUS 4441 F" format="EN50494" scr1="1210" scr2="1420" scr3="1680" scr4="2040"/>
+                       <product name="SUS 5541 F-NFA" format="EN 50494" scr1="0974" scr2="1076" scr3="1178" scr4="1280"/>
+                       <product name="SUS 5581 F-NFA" format="UniSEqC" scr1="0974" scr2="1076" scr3="1178" scr4="1280" scr5="1382" scr6="1484" scr7="1586" scr8="1688"/>
+                       <product name="SUS 5581 F-NFA" format="UniSEqC" scr1="0974" scr2="1076" scr3="1178" scr4="1280" scr5="1382" scr6="1484" scr7="1586" scr8="1688"/>
+                       <product name="SUS 5581 F-NFA" format="UniSEqC" scr1="0974" scr2="1076" scr3="1178" scr4="1280" scr5="1382" scr6="1484" scr7="1586" scr8="1688"/>
+                       <product name="SUS 5581 NF 1x8" format="UniSEqC" scr1="1068" scr2="1284" scr3="1400" scr4="1516" scr5="1632" scr6="1748" scr7="1864" scr8="1980"/>
+                       <product name="SUS 5581 NF 3x3 1" format="UniSEqC" scr1="1068" scr2="1284" scr3="1400"/>
+                       <product name="SUS 5581 NF 3x3 1" format="UniSEqC" scr1="1516" scr2="1632" scr3="1748"/>
+                       <product name="SUS 5581 NF 3x3 1" format="UniSEqC" scr1="1864" scr2="1980" scr3="2096"/>        
+                       <product name="SUS 5581 NF Leg 1x8" format="UniSEqC" scr1="0974" scr2="1076" scr3="1178" scr4="1280" scr5="1382" scr6="1484" scr7="1586" scr8="1688"/>
+                       <product name="SUS 5581 NF Leg 3x3 1" format="UniSEqC" scr1="0974" scr2="1076" scr3="1178"/>
+                       <product name="SUS 5581 NF Leg 3x3 1" format="UniSEqC" scr1="1280" scr2="1382" scr3="1484"/>
+                       <product name="SUS 5581 NF Leg 3x3 1" format="UniSEqC" scr1="1586" scr2="1688" scr3="1790"/>    
                </manufacturer>
                <manufacturer name="Technisat">
                </manufacturer>
                <manufacturer name="Technisat">
+                       <product name="TechniRouter Mini 2/1x2" format="EN50494" positions="2" scr1="1284" scr2="1400" permpin1="111" permpin2="222"/>
                        <product name="TechniRouter 5/1x8" scr1="1284" scr2="1400" scr3="1516" scr4="1632" scr5="1748" scr6="1864" scr7="1980" scr8="2096"/>
                        <product name="TechniRouter 9/1x8" positions="2" scr1="1284" scr2="1400" scr3="1516" scr4="1632" scr5="1748" scr6="1864" scr7="1980" scr8="2096"/>
                        <product name="TechniRouter 5/2x4" scr1="1284" scr2="1400" scr3="1516" scr4="1632"/>
                        <product name="TechniRouter 9/2x4" positions="2" scr1="1284" scr2="1400" scr3="1516" scr4="1632"/>
                </manufacturer>
                        <product name="TechniRouter 5/1x8" scr1="1284" scr2="1400" scr3="1516" scr4="1632" scr5="1748" scr6="1864" scr7="1980" scr8="2096"/>
                        <product name="TechniRouter 9/1x8" positions="2" scr1="1284" scr2="1400" scr3="1516" scr4="1632" scr5="1748" scr6="1864" scr7="1980" scr8="2096"/>
                        <product name="TechniRouter 5/2x4" scr1="1284" scr2="1400" scr3="1516" scr4="1632"/>
                        <product name="TechniRouter 9/2x4" positions="2" scr1="1284" scr2="1400" scr3="1516" scr4="1632"/>
                </manufacturer>
-               <manufacturer name="Telstar">
+               <manufacturer name="Telestar">
                        <product name="SCR 5/1x8" scr1="1284" scr2="1400" scr3="1516" scr4="1632" scr5="1748" scr6="1864" scr7="1980" scr8="2096"/>
                        <product name="SCR 9/1x8" positions="2" scr1="1284" scr2="1400" scr3="1516" scr4="1632" scr5="1748" scr6="1864" scr7="1980" scr8="2096"/>
                        <product name="SCR 5/2x4" scr1="1284" scr2="1400" scr3="1516" scr4="1632"/>
                        <product name="SCR 9/2x4" positions="2" scr1="1284" scr2="1400" scr3="1516" scr4="1632"/>
                </manufacturer>
                        <product name="SCR 5/1x8" scr1="1284" scr2="1400" scr3="1516" scr4="1632" scr5="1748" scr6="1864" scr7="1980" scr8="2096"/>
                        <product name="SCR 9/1x8" positions="2" scr1="1284" scr2="1400" scr3="1516" scr4="1632" scr5="1748" scr6="1864" scr7="1980" scr8="2096"/>
                        <product name="SCR 5/2x4" scr1="1284" scr2="1400" scr3="1516" scr4="1632"/>
                        <product name="SCR 9/2x4" positions="2" scr1="1284" scr2="1400" scr3="1516" scr4="1632"/>
                </manufacturer>
+               <manufacturer name="Triax">
+                       <product name="TUM 518" format="EN50494" positions="1" scr1="1076" scr2="1178" scr3="1280" scr4="1382" scr5="1484" scr6="1586" scr7="1688" scr8="1790"/>
+                       <product name="TUM 918" format="EN50494" positions="2" scr1="1076" scr2="1178" scr3="1280" scr4="1382" scr5="1484" scr6="1586" scr7="1688" scr8="1790"/>
+                       <product name="TUM 543C" format="EN50607" positions="1" scr1="1280" scr2="1382" scr3="1484"/>
+                       <product name="TUM 583C" format="EN50607" positions="1" scr1="1280" scr2="1382" scr3="1484"/>
+                       <product name="TUM 943C" format="EN50607" positions="2" scr1="1280" scr2="1382" scr3="1484"/>
+                       <product name="TUM 983C" format="EN50607" positions="2" scr1="1280" scr2="1382" scr3="1484"/>
+                       <product name="TUM 1743C" format="EN50607" positions="4" scr1="1280" scr2="1382" scr3="1484"/>
+                       <product name="TUM 1783C" format="EN50607" positions="4" scr1="1280" scr2="1382" scr3="1484"/>
+               </manufacturer>
                <manufacturer name="Wisi">
                <manufacturer name="Wisi">
+                       <product name="DY 64 1800" scr1="1178" scr2="1280" scr3="1382" scr4="1484" scr5="1586" scr6="1688" scr7="1790" scr8="1892"/>
                        <product name="DY 64 1810" scr1="1178" scr2="1280" scr3="1382" scr4="1484" scr5="1586" scr6="1688" scr7="1790" scr8="1892"/>
                        <product name="DY 64 1810" scr1="1178" scr2="1280" scr3="1382" scr4="1484" scr5="1586" scr6="1688" scr7="1790" scr8="1892"/>
+                       <product name="DY 64 2400" scr1="1178" scr2="1280" scr3="1382" scr4="1484"/>
                        <product name="DY 64 2410" scr1="1178" scr2="1280" scr3="1382" scr4="1484"/>
                        <product name="DY 68 1810" positions="2" scr1="1178" scr2="1280" scr3="1382" scr4="1484" scr5="1586" scr6="1688" scr7="1790" scr8="1892"/>
                        <product name="DY 68 2410" positions="2" scr1="1178" scr2="1280" scr3="1382" scr4="1484"/>
                        <product name="DY 64 2410" scr1="1178" scr2="1280" scr3="1382" scr4="1484"/>
                        <product name="DY 68 1810" positions="2" scr1="1178" scr2="1280" scr3="1382" scr4="1484" scr5="1586" scr6="1688" scr7="1790" scr8="1892"/>
                        <product name="DY 68 2410" positions="2" scr1="1178" scr2="1280" scr3="1382" scr4="1484"/>
index cf6ef6f..ae40483 100755 (executable)
@@ -666,7 +666,7 @@ int eDVBFrontend::closeFrontend(bool force, bool no_delayed)
                {
                        if (!no_delayed)
                        {
                {
                        if (!no_delayed)
                        {
-                               m_sec->prepareTurnOffSatCR(*this, m_data[SATCR]);
+                               m_sec->prepareTurnOffSatCR(*this);
                                m_tuneTimer->start(0, true);
                                if(!m_tuneTimer->isActive())
                                {
                                m_tuneTimer->start(0, true);
                                if(!m_tuneTimer->isActive())
                                {
index 3e8cdbd..11c5dfd 100644 (file)
@@ -64,6 +64,8 @@ public:
                CUR_VOLTAGE,          // current voltage
                CUR_TONE,             // current continuous tone
                SATCR,                // current SatCR
                CUR_VOLTAGE,          // current voltage
                CUR_TONE,             // current continuous tone
                SATCR,                // current SatCR
+               DICTION,              // current diction
+               PIN,                  // pin 
                NUM_DATA_ENTRIES
        };
        Signal1<void,iDVBFrontend*> m_stateChanged;
                NUM_DATA_ENTRIES
        };
        Signal1<void,iDVBFrontend*> m_stateChanged;
index da844c5..3dd3481 100644 (file)
@@ -491,7 +491,7 @@ class iDVBSatelliteEquipmentControl: public iObject
 {
 public:
        virtual RESULT prepare(iDVBFrontend &frontend, FRONTENDPARAMETERS &parm, const eDVBFrontendParametersSatellite &sat, int frontend_id, unsigned int timeout)=0;
 {
 public:
        virtual RESULT prepare(iDVBFrontend &frontend, FRONTENDPARAMETERS &parm, const eDVBFrontendParametersSatellite &sat, int frontend_id, unsigned int timeout)=0;
-       virtual void prepareTurnOffSatCR(iDVBFrontend &frontend, int satcr)=0;
+       virtual void prepareTurnOffSatCR(iDVBFrontend &frontend)=0;
        virtual int canTune(const eDVBFrontendParametersSatellite &feparm, iDVBFrontend *fe, int frontend_id, int *highest_score_lnb=0)=0;
        virtual void setRotorMoving(int slotid, bool)=0;
 };
        virtual int canTune(const eDVBFrontendParametersSatellite &feparm, iDVBFrontend *fe, int frontend_id, int *highest_score_lnb=0)=0;
        virtual void setRotorMoving(int slotid, bool)=0;
 };
index 851e9b1..08976ef 100644 (file)
@@ -330,7 +330,6 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA
 
                        lnb_param.guard_offset = 0; //HACK
 
 
                        lnb_param.guard_offset = 0; //HACK
 
-                       frontend.setData(eDVBFrontend::SATCR, lnb_param.SatCR_idx);
 
                        if (diseqc13V)
                                voltage_mode = eDVBSatelliteSwitchParameters::HV;
 
                        if (diseqc13V)
                                voltage_mode = eDVBSatelliteSwitchParameters::HV;
@@ -400,21 +399,52 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA
                        }
                        else
                        {
                        }
                        else
                        {
-                               int tmp1 = abs(sat.frequency
-                                               -lof)
-                                               + lnb_param.SatCRvco
-                                               - 1400000
-                                               + lnb_param.guard_offset;
-                               int tmp2 = ((((tmp1 * 2) / 4000) + 1) / 2) * 4000;
-                               parm.FREQUENCY = lnb_param.SatCRvco - (tmp1-tmp2) + lnb_param.guard_offset;
-                               lnb_param.UnicableTuningWord = ((tmp2 / 4000) 
-                                               | ((band & 1) ? 0x400 : 0)                      //HighLow
-                                               | ((band & 2) ? 0x800 : 0)                      //VertHor
-                                               | ((lnb_param.LNBNum & 1) ? 0 : 0x1000)                 //Umschaltung LNB1 LNB2
-                                               | (lnb_param.SatCR_idx << 13));         //Adresse des SatCR
-                                               eDebug("[prepare] UnicableTuningWord %#04x",lnb_param.UnicableTuningWord);
-                                               eDebug("[prepare] guard_offset %d",lnb_param.guard_offset);
-                               frontend.setData(eDVBFrontend::FREQ_OFFSET, (lnb_param.UnicableTuningWord & 0x3FF) *4000 + 1400000 + lof - (2 * (lnb_param.SatCRvco - (tmp1-tmp2))) );
+                               switch(lnb_param.SatCR_format)
+                               {
+                                       case 1:
+                                               {
+                                                       eDebug("[prepare] JESS");
+
+                                                       int tmp1 = abs(sat.frequency
+                                                               -lof)
+                                                               - 100000;
+                                                       volatile unsigned int tmp2 = (1000 + 2 * tmp1) / (2 *1000); //round to multiple of 1000
+                                                       parm.FREQUENCY = lnb_param.SatCRvco - (tmp1 - (1000 * tmp2));
+                                                       frontend.setData(eDVBFrontend::FREQ_OFFSET, sat.frequency - lof -(lnb_param.SatCRvco - parm.FREQUENCY));
+
+                                                       lnb_param.UnicableTuningWord =
+                                                                 (band & 0x3)                                          //Bit0:HighLow  Bit1:VertHor
+                                                               | (((lnb_param.LNBNum - 1) & 0x3F) << 2)                        //position number (max. 63)
+                                                               | ((tmp2 & 0x7FF)<< 8)                                  //frequency (-100MHz Offset)
+                                                               | ((lnb_param.SatCR_idx & 0x1F) << 19);                 //adresse of SatCR (max. 32)
+
+                                                       eDebug("[prepare] UnicableTuningWord %#06x",lnb_param.UnicableTuningWord);
+                                               }
+                                               break;
+                                       case 0:
+                                       default:
+                                               {
+                                                       eDebug("[prepare] Unicable");
+                                                       int tmp1 = abs(sat.frequency
+                                                               -lof)
+                                                               + lnb_param.SatCRvco
+                                                               - 1400000
+                                                               + lnb_param.guard_offset;
+                                                       volatile unsigned int tmp2 = (4000 + 2 * tmp1) / (2 *4000); //round to multiple of 4000
+
+                                                       parm.FREQUENCY = lnb_param.SatCRvco - (tmp1 - (4000 * tmp2)) + lnb_param.guard_offset;
+                                                       lnb_param.UnicableTuningWord = tmp2
+                                                               | ((band & 1) ? 0x400 : 0)                      //HighLow
+                                                               | ((band & 2) ? 0x800 : 0)                      //VertHor
+                                                               | ((lnb_param.LNBNum & 1) ? 0 : 0x1000)                 //Umschaltung LNB1 LNB2
+                                                               | (lnb_param.SatCR_idx << 13);          //Adresse des SatCR
+
+                                                       eDebug("[prepare] UnicableTuningWord %#04x",lnb_param.UnicableTuningWord);
+                                                       eDebug("[prepare] guard_offset %d",lnb_param.guard_offset);
+
+                                                       frontend.setData(eDVBFrontend::FREQ_OFFSET, (lnb_param.UnicableTuningWord & 0x3FF) *4000 + 1400000 + lof - (2 * (lnb_param.SatCRvco - (tmp1 - (4000 * tmp2)))) );
+                                               }
+                               }
                                voltage = VOLTAGE(13);
                        }
 
                                voltage = VOLTAGE(13);
                        }
 
@@ -711,15 +741,104 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA
                                sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, VOLTAGE(18)) );
                                sec_sequence.push_back( eSecCommand(eSecCommand::SET_TONE, iDVBFrontend::toneOff) );
                                sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_VOLTAGE_CHANGE_BEFORE_SWITCH_CMDS]) );  // wait 20 ms after voltage change
                                sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, VOLTAGE(18)) );
                                sec_sequence.push_back( eSecCommand(eSecCommand::SET_TONE, iDVBFrontend::toneOff) );
                                sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_VOLTAGE_CHANGE_BEFORE_SWITCH_CMDS]) );  // wait 20 ms after voltage change
-       
+
                                eDVBDiseqcCommand diseqc;
                                memset(diseqc.data, 0, MAX_DISEQC_LENGTH);
                                eDVBDiseqcCommand diseqc;
                                memset(diseqc.data, 0, MAX_DISEQC_LENGTH);
-                               diseqc.len = 5;
-                               diseqc.data[0] = 0xE0;
-                               diseqc.data[1] = 0x10;
-                               diseqc.data[2] = 0x5A;
-                               diseqc.data[3] = lnb_param.UnicableTuningWord >> 8;
-                               diseqc.data[4] = lnb_param.UnicableTuningWord;
+
+                               long oldSatcr, oldPin, oldDiction;
+                               frontend.getData(eDVBFrontend::SATCR, oldSatcr);
+                               frontend.getData(eDVBFrontend::PIN, oldPin);
+                               frontend.getData(eDVBFrontend::DICTION, oldDiction);
+
+                               if((oldSatcr != -1) && (oldSatcr != lnb_param.SatCR_idx))
+                               {
+                                       switch (oldDiction)
+                                       {
+                                               case 1:
+                                                       if(oldPin < 1)
+                                                       {
+                                                               diseqc.len = 4;
+                                                               diseqc.data[0] = 0x70;
+                                                       }
+                                                       else
+                                                       {
+                                                               diseqc.len = 5;
+                                                               diseqc.data[0] = 0x71;
+                                                               diseqc.data[4] = oldPin;
+                                                       }
+                                                       diseqc.data[1] = oldSatcr << 3;
+                                                       diseqc.data[2] = 0x00;
+                                                       diseqc.data[3] = 0x00;
+                                                       break;
+                                               case 0:
+                                               default:
+                                                       if(oldPin < 1)
+                                                       {
+                                                               diseqc.len = 5;
+                                                               diseqc.data[2] = 0x5A;
+                                                       }
+                                                       else
+                                                       {
+                                                               diseqc.len = 6;
+                                                               diseqc.data[2] = 0x5C;
+                                                               diseqc.data[5] = oldPin;
+                                                       }
+                                                       diseqc.data[0] = 0xE0;
+                                                       diseqc.data[1] = 0x10;
+                                                       diseqc.data[3] = oldSatcr << 5;
+                                                       diseqc.data[4] = 0x00;
+                                                       break;
+                                       }
+                                       sec_sequence.push_back( eSecCommand(eSecCommand::SEND_DISEQC, diseqc) );
+                                       sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_LAST_DISEQC_CMD]) );
+                                       frontend.setData(eDVBFrontend::SATCR, -1);
+                               }
+
+                               frontend.setData(eDVBFrontend::DICTION, lnb_param.SatCR_format);
+//TODO                         frontend.setData(eDVBFrontend::PIN, lnb_param.SatCR_pin);
+
+                               long pin = 0; // hack
+
+                               switch(lnb_param.SatCR_format)
+                               {
+                                       case 1: //JESS
+                                               if(pin < 1)
+                                               {
+                                                       diseqc.len = 4;
+                                                       diseqc.data[0] = 0x70;
+                                                       diseqc.data[1] = lnb_param.UnicableTuningWord >> 16;
+                                                       diseqc.data[2] = lnb_param.UnicableTuningWord >> 8;
+                                                       diseqc.data[3] = lnb_param.UnicableTuningWord;
+                                               }
+                                               else
+                                               {
+                                                       diseqc.len = 5;
+                                                       diseqc.data[0] = 0x71;
+                                                       diseqc.data[4] = pin;
+                                               }
+                                               diseqc.data[1] = lnb_param.UnicableTuningWord >> 16;
+                                               diseqc.data[2] = lnb_param.UnicableTuningWord >> 8;
+                                               diseqc.data[3] = lnb_param.UnicableTuningWord;
+                                               break;
+                                       case 0: //DiSEqC
+                                       default:
+                                               if(pin < 1)
+                                               {
+                                                       diseqc.len = 5;
+                                                       diseqc.data[2] = 0x5A;
+                                               }
+                                               else
+                                               {
+                                                       diseqc.len = 6;
+                                                       diseqc.data[2] = 0x5C;
+                                                       diseqc.data[5] = pin;
+                                               }
+                                               diseqc.data[0] = 0xE0;
+                                               diseqc.data[1] = 0x10;
+                                               diseqc.data[3] = lnb_param.UnicableTuningWord >> 8;
+                                               diseqc.data[4] = lnb_param.UnicableTuningWord;
+                               }
+                               frontend.setData(eDVBFrontend::SATCR, lnb_param.SatCR_idx);
 
                                sec_sequence.push_back( eSecCommand(eSecCommand::SEND_DISEQC, diseqc) );
                                sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_LAST_DISEQC_CMD]) );
 
                                sec_sequence.push_back( eSecCommand(eSecCommand::SEND_DISEQC, diseqc) );
                                sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_LAST_DISEQC_CMD]) );
@@ -954,8 +1073,9 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA
        return -1;
 }
 
        return -1;
 }
 
-void eDVBSatelliteEquipmentControl::prepareTurnOffSatCR(iDVBFrontend &frontend, int satcr)
+void eDVBSatelliteEquipmentControl::prepareTurnOffSatCR(iDVBFrontend &frontend)
 {
 {
+       long satcr, diction, pin;
        eSecCommandList sec_sequence;
 
        // check if voltage is disabled
        eSecCommandList sec_sequence;
 
        // check if voltage is disabled
@@ -973,12 +1093,48 @@ void eDVBSatelliteEquipmentControl::prepareTurnOffSatCR(iDVBFrontend &frontend,
 
        eDVBDiseqcCommand diseqc;
        memset(diseqc.data, 0, MAX_DISEQC_LENGTH);
 
        eDVBDiseqcCommand diseqc;
        memset(diseqc.data, 0, MAX_DISEQC_LENGTH);
-       diseqc.len = 5;
-       diseqc.data[0] = 0xE0;
-       diseqc.data[1] = 0x10;
-       diseqc.data[2] = 0x5A;
-       diseqc.data[3] = satcr << 5;
-       diseqc.data[4] = 0x00;
+       frontend.getData(eDVBFrontend::SATCR, satcr);
+       frontend.getData(eDVBFrontend::DICTION, diction);
+       frontend.getData(eDVBFrontend::PIN, pin);
+
+       switch (diction)
+       {
+               case 1:
+                       if(pin < 1)
+                       {
+                               diseqc.len = 4;
+                               diseqc.data[0] = 0x70;
+                       }
+                       else
+                       {
+                               diseqc.len = 5;
+                               diseqc.data[0] = 0x71;
+                               diseqc.data[4] = pin;
+                       }
+                       diseqc.data[1] = satcr << 3;
+                       diseqc.data[2] = 0x00;
+                       diseqc.data[3] = 0x00;
+                       break;
+               case 0:
+               default:
+                       if(pin < 1)
+                       {
+                               diseqc.len = 5;
+                               diseqc.data[2] = 0x5A;
+                       }
+                       else
+                       {
+                               diseqc.len = 6;
+                               diseqc.data[2] = 0x5C;
+                               diseqc.data[5] = pin;
+                       }
+                       diseqc.data[0] = 0xE0;
+                       diseqc.data[1] = 0x10;
+                       diseqc.data[3] = satcr << 5;
+                       diseqc.data[4] = 0x00;
+                       break;
+       }
+       frontend.setData(eDVBFrontend::SATCR, -1);
 
        sec_sequence.push_back( eSecCommand(eSecCommand::SEND_DISEQC, diseqc) );
        sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_LAST_DISEQC_CMD]) );
 
        sec_sequence.push_back( eSecCommand(eSecCommand::SEND_DISEQC, diseqc) );
        sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_LAST_DISEQC_CMD]) );
@@ -1254,6 +1410,18 @@ RESULT eDVBSatelliteEquipmentControl::setInputpowerDelta(int delta)
 }
 
 /* Unicable Specific Parameters */
 }
 
 /* Unicable Specific Parameters */
+RESULT eDVBSatelliteEquipmentControl::setLNBSatCRformat(int SatCR_format)
+{
+       eSecDebug("eDVBSatelliteEquipmentControl::setLNBSatCRformat(%d)", SatCR_format);
+       if(!((SatCR_format >-1) && (SatCR_format < 2)))
+               return -EPERM;
+       if ( currentLNBValid() )
+               m_lnbs[m_lnbidx].SatCR_format = SatCR_format;
+       else
+               return -ENOENT;
+       return 0;
+}
+
 RESULT eDVBSatelliteEquipmentControl::setLNBSatCR(int SatCR_idx)
 {
        eSecDebug("eDVBSatelliteEquipmentControl::setLNBSatCR(%d)", SatCR_idx);
 RESULT eDVBSatelliteEquipmentControl::setLNBSatCR(int SatCR_idx)
 {
        eSecDebug("eDVBSatelliteEquipmentControl::setLNBSatCR(%d)", SatCR_idx);
@@ -1299,6 +1467,13 @@ RESULT eDVBSatelliteEquipmentControl::getLNBSatCRpositions()
        return -ENOENT;
 }
 
        return -ENOENT;
 }
 
+RESULT eDVBSatelliteEquipmentControl::getLNBSatCRformat()
+{
+       if ( currentLNBValid() )
+               return m_lnbs[m_lnbidx].SatCR_format;
+       return -ENOENT;
+}
+
 RESULT eDVBSatelliteEquipmentControl::getLNBSatCR()
 {
        if ( currentLNBValid() )
 RESULT eDVBSatelliteEquipmentControl::getLNBSatCR()
 {
        if ( currentLNBValid() )
index ef8b1e0..ca3e7f2 100644 (file)
@@ -260,11 +260,12 @@ public:
 #define guard_offset_min -8000
 #define guard_offset_max 8000
 #define guard_offset_step 8000
 #define guard_offset_min -8000
 #define guard_offset_max 8000
 #define guard_offset_step 8000
-#define MAX_SATCR 8
-#define MAX_LNBNUM 32
+#define MAX_SATCR 32
+#define MAX_LNBNUM 64
 
        int SatCR_positions;
        int SatCR_idx;
 
        int SatCR_positions;
        int SatCR_idx;
+       int SatCR_format;
        unsigned int SatCRvco;
        unsigned int UnicableTuningWord;
        unsigned int UnicableConfigWord;
        unsigned int SatCRvco;
        unsigned int UnicableTuningWord;
        unsigned int UnicableConfigWord;
@@ -323,7 +324,7 @@ public:
 #ifndef SWIG
        eDVBSatelliteEquipmentControl(eSmartPtrList<eDVBRegisteredFrontend> &avail_frontends, eSmartPtrList<eDVBRegisteredFrontend> &avail_simulate_frontends);
        RESULT prepare(iDVBFrontend &frontend, FRONTENDPARAMETERS &parm, const eDVBFrontendParametersSatellite &sat, int frontend_id, unsigned int tunetimeout);
 #ifndef SWIG
        eDVBSatelliteEquipmentControl(eSmartPtrList<eDVBRegisteredFrontend> &avail_frontends, eSmartPtrList<eDVBRegisteredFrontend> &avail_simulate_frontends);
        RESULT prepare(iDVBFrontend &frontend, FRONTENDPARAMETERS &parm, const eDVBFrontendParametersSatellite &sat, int frontend_id, unsigned int tunetimeout);
-       void prepareTurnOffSatCR(iDVBFrontend &frontend, int satcr); // used for unicable
+       void prepareTurnOffSatCR(iDVBFrontend &frontend); // used for unicable
        int canTune(const eDVBFrontendParametersSatellite &feparm, iDVBFrontend *, int frontend_id, int *highest_score_lnb=0);
        bool currentLNBValid() { return m_lnbidx > -1 && m_lnbidx < (int)(sizeof(m_lnbs) / sizeof(eDVBSatelliteLNBParameters)); }
 #endif
        int canTune(const eDVBFrontendParametersSatellite &feparm, iDVBFrontend *, int frontend_id, int *highest_score_lnb=0);
        bool currentLNBValid() { return m_lnbidx > -1 && m_lnbidx < (int)(sizeof(m_lnbs) / sizeof(eDVBSatelliteLNBParameters)); }
 #endif
@@ -357,9 +358,11 @@ public:
        RESULT setInputpowerDelta(int delta);  // delta between running and stopped rotor
        RESULT setRotorTurningSpeed(int speed);  // set turning speed..
 /* Unicable Specific Parameters */
        RESULT setInputpowerDelta(int delta);  // delta between running and stopped rotor
        RESULT setRotorTurningSpeed(int speed);  // set turning speed..
 /* Unicable Specific Parameters */
+       RESULT setLNBSatCRformat(int SatCR_format);     //DiSEqc or JESS (or ...)
        RESULT setLNBSatCR(int SatCR_idx);
        RESULT setLNBSatCRvco(int SatCRvco);
        RESULT setLNBSatCRpositions(int SatCR_positions);
        RESULT setLNBSatCR(int SatCR_idx);
        RESULT setLNBSatCRvco(int SatCRvco);
        RESULT setLNBSatCRpositions(int SatCR_positions);
+       RESULT getLNBSatCRformat();     //DiSEqc or JESS (or ...)
        RESULT getLNBSatCR();
        RESULT getLNBSatCRvco();
        RESULT getLNBSatCRpositions();
        RESULT getLNBSatCR();
        RESULT getLNBSatCRvco();
        RESULT getLNBSatCRpositions();
index c68e521..ce063b4 100755 (executable)
@@ -265,7 +265,7 @@ class SecConfigure:
                        pass
 
                lnbSat = {}
                        pass
 
                lnbSat = {}
-               for x in range(1,37):
+               for x in range(1,69):
                        lnbSat[x] = []
 
                #wildcard for all satellites ( for rotor )
                        lnbSat[x] = []
 
                #wildcard for all satellites ( for rotor )
@@ -282,12 +282,12 @@ class SecConfigure:
                                print "add", x[0], "to", lnb
                                lnbSat[lnb].append(x[0])
 
                                print "add", x[0], "to", lnb
                                lnbSat[lnb].append(x[0])
 
-               for x in range(1,37):
+               for x in range(1,69):
                        if len(lnbSat[x]) > 0:
                                currLnb = config.Nims[slotid].advanced.lnb[x]
                                sec.addLNB()
 
                        if len(lnbSat[x]) > 0:
                                currLnb = config.Nims[slotid].advanced.lnb[x]
                                sec.addLNB()
 
-                               if x < 33:
+                               if x < 65:
                                        sec.setLNBNum(x)
 
                                tunermask = 1 << slotid
                                        sec.setLNBNum(x)
 
                                tunermask = 1 << slotid
@@ -310,24 +310,46 @@ class SecConfigure:
                                                manufacturer_name = configManufacturer.value
                                                manufacturer = ProductDict[manufacturer_name]
                                                product_name = manufacturer.product.value
                                                manufacturer_name = configManufacturer.value
                                                manufacturer = ProductDict[manufacturer_name]
                                                product_name = manufacturer.product.value
-                                               sec.setLNBSatCR(manufacturer.scr[product_name].index)
-                                               sec.setLNBSatCRvco(manufacturer.vco[product_name][manufacturer.scr[product_name].index].value*1000)
-                                               sec.setLNBSatCRpositions(manufacturer.positions[product_name][0].value)
-                                               sec.setLNBLOFL(manufacturer.lofl[product_name][0].value * 1000)
-                                               sec.setLNBLOFH(manufacturer.lofh[product_name][0].value * 1000)
-                                               sec.setLNBThreshold(manufacturer.loft[product_name][0].value * 1000)
-                                               configManufacturer.save_forced = True
-                                               manufacturer.product.save_forced = True
-                                               manufacturer.vco[product_name][manufacturer.scr[product_name].index].save_forced = True
-
+                                               manufacturer_scr = manufacturer.scr
+                                               manufacturer_positions_value = manufacturer.positions[product_name][0].value
+                                               position_idx = (x-1) % manufacturer_positions_value
+                                               if product_name in manufacturer_scr:
+                                                       diction = manufacturer.diction[product_name].value
+                                                       if x <= manufacturer_positions_value or diction !="EN50607": #for every allowed position
+                                                               sec.setLNBSatCR(manufacturer_scr[product_name].index)
+
+                                                               if diction =="EN50607":
+                                                                       sec.setLNBSatCRformat(1)        #JESS
+                                                               else:
+                                                                       sec.setLNBSatCRformat(0)        #DiSEqC
+                                                               sec.setLNBSatCRvco(manufacturer.vco[product_name][manufacturer_scr[product_name].index].value*1000)
+                                                               sec.setLNBSatCRpositions(manufacturer_positions_value)
+                                                               sec.setLNBLOFL(manufacturer.lofl[product_name][position_idx].value * 1000)
+                                                               sec.setLNBLOFH(manufacturer.lofh[product_name][position_idx].value * 1000)
+                                                               sec.setLNBThreshold(manufacturer.loft[product_name][position_idx].value * 1000)
+                                                               configManufacturer.save_forced = True
+                                                               manufacturer.product.save_forced = True
+                                                               manufacturer.vco[product_name][manufacturer_scr[product_name].index].save_forced = True
+                                                       else: #positionnumber out of range
+                                                               print "positionnumber out of range"
+                                               else:
+                                                       print "no product in list"
+                                                       
                                        if currLnb.unicable.value == "unicable_user":
 #TODO satpositions for satcruser
                                        if currLnb.unicable.value == "unicable_user":
 #TODO satpositions for satcruser
+                                               if currLnb.dictionuser.value == "EN50607": 
+                                                       sec.setLNBSatCRformat(1)
+                                                       sec.setLNBSatCR(currLnb.satcruserEN50607.index)
+                                                       sec.setLNBSatCRvco(currLnb.satcrvcouserEN50607[currLnb.satcruserEN50607.index].value*1000)
+                                               else:
+                                                       sec.setLNBSatCRformat(0)
+                                                       sec.setLNBSatCR(currLnb.satcruserEN50494.index)
+                                                       sec.setLNBSatCRvco(currLnb.satcrvcouserEN50494[currLnb.satcruserEN50494.index].value*1000)
+
                                                sec.setLNBLOFL(currLnb.lofl.value * 1000)
                                                sec.setLNBLOFH(currLnb.lofh.value * 1000)
                                                sec.setLNBThreshold(currLnb.threshold.value * 1000)
                                                sec.setLNBLOFL(currLnb.lofl.value * 1000)
                                                sec.setLNBLOFH(currLnb.lofh.value * 1000)
                                                sec.setLNBThreshold(currLnb.threshold.value * 1000)
-                                               sec.setLNBSatCR(currLnb.satcruser.index)
-                                               sec.setLNBSatCRvco(currLnb.satcrvcouser[currLnb.satcruser.index].value*1000)
-                                               sec.setLNBSatCRpositions(1)     #HACK
+                                               sec.setLNBSatCRpositions(64)    #HACK
                                        elif currLnb.unicable.value == "unicable_matrix":
                                                setupUnicable(currLnb.unicableMatrixManufacturer, currLnb.unicableMatrix)
                                        elif currLnb.unicable.value == "unicable_lnb":
                                        elif currLnb.unicable.value == "unicable_matrix":
                                                setupUnicable(currLnb.unicableMatrixManufacturer, currLnb.unicableMatrix)
                                        elif currLnb.unicable.value == "unicable_lnb":
@@ -452,8 +474,8 @@ class SecConfigure:
                                # finally add the orbital positions
                                for y in lnbSat[x]:
                                        self.addSatellite(sec, y)
                                # finally add the orbital positions
                                for y in lnbSat[x]:
                                        self.addSatellite(sec, y)
-                                       if x > 32:
-                                               satpos = x > 32 and (3604-(36 - x)) or y
+                                       if x > 64:
+                                               satpos = x > 64 and (3604-(68 - x)) or y
                                        else:
                                                satpos = y
                                        currSat = config.Nims[slotid].advanced.sat[satpos]
                                        else:
                                                satpos = y
                                        currSat = config.Nims[slotid].advanced.sat[satpos]
@@ -474,7 +496,7 @@ class SecConfigure:
                                        elif currSat.tonemode.value == "off":
                                                sec.setToneMode(switchParam.OFF)
                                                
                                        elif currSat.tonemode.value == "off":
                                                sec.setToneMode(switchParam.OFF)
                                                
-                                       if not currSat.usals.value and x < 34:
+                                       if not currSat.usals.value and x < 66:
                                                sec.setRotorPosNum(currSat.rotorposition.value)
                                        else:
                                                sec.setRotorPosNum(0) #USALS
                                                sec.setRotorPosNum(currSat.rotorposition.value)
                                        else:
                                                sec.setRotorPosNum(0) #USALS
@@ -1122,11 +1144,15 @@ def InitNimManager(nimmgr):
        root = doc.getroot()
 
        entry = root.find("lnb")
        root = doc.getroot()
 
        entry = root.find("lnb")
+       lscr=("scr1","scr2","scr3","scr4","scr5","scr6","scr7","scr8","scr9","scr10",
+               "scr11","scr12","scr13","scr14","scr15","scr16","scr17","scr18","scr19","scr20",
+               "scr21","scr22","scr23","scr24","scr25","scr26","scr27","scr28","scr29","scr30",
+               "scr31","scr32")
        for manufacturer in entry.getchildren():
                m={}
                for product in manufacturer.getchildren():
        for manufacturer in entry.getchildren():
                m={}
                for product in manufacturer.getchildren():
+                       p={}                                                                                                                                            #new dict empty for new product
                        scr=[]
                        scr=[]
-                       lscr=("scr1","scr2","scr3","scr4","scr5","scr6","scr7","scr8")
                        for i in range(len(lscr)):
                                scr.append(product.get(lscr[i],"0"))
                        for i in range(len(lscr)):
                        for i in range(len(lscr)):
                                scr.append(product.get(lscr[i],"0"))
                        for i in range(len(lscr)):
@@ -1134,21 +1160,36 @@ def InitNimManager(nimmgr):
                                        scr.pop()
                                else:
                                        break;
                                        scr.pop()
                                else:
                                        break;
-                       lof=[]
-                       lof.append(int(product.get("positions",1)))
-                       lof.append(int(product.get("lofl",9750)))
-                       lof.append(int(product.get("lofh",10600)))
-                       lof.append(int(product.get("threshold",11700)))
-                       scr.append(tuple(lof))
-                       m.update({product.get("name"):tuple(scr)})
+
+                       p.update({"frequencies":tuple(scr)})                                                                            #add scr frequencies to dict product
+
+                       diction = product.get("format","EN50494").upper()
+                       if diction =="JESS" or diction =="UNICABLE2" or diction =="SCD2" or diction =="EN50607":
+                               diction = "EN50607"
+                       else:
+                               diction = "EN50494"
+                       p.update({"diction":tuple([diction])})                                                                          #add diction to dict product
+
+                       positions=[]
+                       positions.append(int(product.get("positions",1)))
+                       for cnt in range(positions[0]):
+                               lof=[]
+                               lof.append(int(product.get("lofl",9750)))
+                               lof.append(int(product.get("lofh",10600)))
+                               lof.append(int(product.get("threshold",11700)))
+                               positions.append(tuple(lof))
+
+                       p.update({"positions":tuple(positions)})                                                                        #add positons to dict product.
+
+                       m.update({product.get("name"):p})                                                                                       #add dict product to dict manufacturer
                unicablelnbproducts.update({manufacturer.get("name"):m})
 
        entry = root.find("matrix")
        for manufacturer in entry.getchildren():
                m={}
                for product in manufacturer.getchildren():
                unicablelnbproducts.update({manufacturer.get("name"):m})
 
        entry = root.find("matrix")
        for manufacturer in entry.getchildren():
                m={}
                for product in manufacturer.getchildren():
+                       p={}    #new dict empty for new product
                        scr=[]
                        scr=[]
-                       lscr=("scr1","scr2","scr3","scr4","scr5","scr6","scr7","scr8")
                        for i in range(len(lscr)):
                                scr.append(product.get(lscr[i],"0"))
                        for i in range(len(lscr)):
                        for i in range(len(lscr)):
                                scr.append(product.get(lscr[i],"0"))
                        for i in range(len(lscr)):
@@ -1156,14 +1197,29 @@ def InitNimManager(nimmgr):
                                        scr.pop()
                                else:
                                        break;
                                        scr.pop()
                                else:
                                        break;
-                       lof=[]
-                       lof.append(int(product.get("positions",1)))
-                       lof.append(int(product.get("lofl",9750)))
-                       lof.append(int(product.get("lofh",10600)))
-                       lof.append(int(product.get("threshold",11700)))
-                       scr.append(tuple(lof))
-                       m.update({product.get("name"):tuple(scr)})
-               unicablematrixproducts.update({manufacturer.get("name"):m})
+
+                       p.update({"frequencies":tuple(scr)})                                                                            #add scr frequencies to dict product
+
+                       diction = product.get("format","EN50494").upper()
+                       if diction =="JESS" or diction =="UNICABLE2" or diction =="SCD2" or diction =="EN50607":
+                               diction = "EN50607"
+                       else:
+                               diction = "EN50494"
+                       p.update({"diction":tuple([diction])})                                                                          #add diction to dict product
+
+                       positions=[]
+                       positions.append(int(product.get("positions",1)))
+                       for cnt in range(positions[0]):
+                               lof=[]
+                               lof.append(int(product.get("lofl",9750)))
+                               lof.append(int(product.get("lofh",10600)))
+                               lof.append(int(product.get("threshold",11700)))
+                               positions.append(tuple(lof))
+
+                       p.update({"positions":tuple(positions)})                                                                        #add positons to dict product
+
+                       m.update({product.get("name"):p})                                                                                       #add dict product to dict manufacturer
+               unicablematrixproducts.update({manufacturer.get("name"):m})                                             #add dict manufacturer to dict unicablematrixproducts
 
        UnicableLnbManufacturers = unicablelnbproducts.keys()
        UnicableLnbManufacturers.sort()
 
        UnicableLnbManufacturers = unicablelnbproducts.keys()
        UnicableLnbManufacturers.sort()
@@ -1176,8 +1232,14 @@ def InitNimManager(nimmgr):
                "unicable_user": "Unicable "+_("User defined")}
        unicable_choices_default = "unicable_lnb"
 
                "unicable_user": "Unicable "+_("User defined")}
        unicable_choices_default = "unicable_lnb"
 
-       advanced_lnb_satcruser_choices = [ ("1", "SatCR 1"), ("2", "SatCR 2"), ("3", "SatCR 3"), ("4", "SatCR 4"),
-                                       ("5", "SatCR 5"), ("6", "SatCR 6"), ("7", "SatCR 7"), ("8", "SatCR 8")]
+       advanced_lnb_satcr_user_choicesEN50494 = [("1", "SatCR 1"), ("2", "SatCR 2"), ("3", "SatCR 3"), ("4", "SatCR 4"), ("5", "SatCR 5"), ("6", "SatCR 6"), ("7", "SatCR 7"), ("8", "SatCR 8")]
+
+       advanced_lnb_satcr_user_choicesEN50607 = [("1", "SatCR 1"), ("2", "SatCR 2"), ("3", "SatCR 3"), ("4", "SatCR 4"), ("5", "SatCR 5"), ("6", "SatCR 6"), ("7", "SatCR 7"), ("8", "SatCR 8"),
+                                                                  ("9", "SatCR 9"), ("10", "SatCR 10"), ("11", "SatCR 11"), ("12", "SatCR 12"), ("13", "SatCR 13"), ("14", "SatCR 14"), ("15", "SatCR 15"), ("16", "SatCR 16"),
+                                                                  ("17", "SatCR 17"), ("18", "SatCR 18"), ("19", "SatCR 19"), ("20", "SatCR 20"), ("21", "SatCR 21"), ("22", "SatCR 22"), ("23", "SatCR 23"), ("24", "SatCR 24"),
+                                                                  ("25", "SatCR 25"), ("26", "SatCR 26"), ("27", "SatCR 27"), ("28", "SatCR 28"), ("29", "SatCR 29"), ("30", "SatCR 30"), ("31", "SatCR 31"), ("32", "SatCR 32")]
+
+       advanced_lnb_diction_user_choices = [("EN50494", "Unicable(EN50494)"), ("EN50607", "JESS(EN50607)")]
 
        prio_list = [ ("-1", _("Auto")) ]
        prio_list += [(str(prio), str(prio)) for prio in range(65)+range(14000,14065)+range(19000,19065)]
 
        prio_list = [ ("-1", _("Auto")) ]
        prio_list += [(str(prio), str(prio)) for prio in range(65)+range(14000,14065)+range(19000,19065)]
@@ -1203,7 +1265,7 @@ def InitNimManager(nimmgr):
        advanced_satlist_choices = nimmgr.satList + [
                (3601, _('All Satellites')+' 1', 1), (3602, _('All Satellites')+' 2', 1),
                (3603, _('All Satellites')+' 3', 1), (3604, _('All Satellites')+' 4', 1)]
        advanced_satlist_choices = nimmgr.satList + [
                (3601, _('All Satellites')+' 1', 1), (3602, _('All Satellites')+' 2', 1),
                (3603, _('All Satellites')+' 3', 1), (3604, _('All Satellites')+' 4', 1)]
-       advanced_lnb_choices = [("0", "not available")] + [(str(y), "LNB " + str(y)) for y in range(1, 33)]
+       advanced_lnb_choices = [("0", "not available")] + [(str(y), "LNB " + str(y)) for y in range(1, 65)]
        advanced_voltage_choices = [("polarization", _("Polarization")), ("13V", _("13 V")), ("18V", _("18 V"))]
        advanced_tonemode_choices = [("band", _("Band")), ("on", _("On")), ("off", _("Off"))]
        advanced_lnb_toneburst_choices = [("none", _("None")), ("A", _("A")), ("B", _("B"))]
        advanced_voltage_choices = [("polarization", _("Polarization")), ("13V", _("13 V")), ("18V", _("18 V"))]
        advanced_tonemode_choices = [("band", _("Band")), ("on", _("On")), ("off", _("Off"))]
        advanced_lnb_toneburst_choices = [("none", _("None")), ("A", _("A")), ("B", _("B"))]
@@ -1228,81 +1290,127 @@ def InitNimManager(nimmgr):
                        if isinstance(section.unicable, ConfigNothing):
                                if lnb == 1:
                                        section.unicable = ConfigSelection(unicable_choices, unicable_choices_default)
                        if isinstance(section.unicable, ConfigNothing):
                                if lnb == 1:
                                        section.unicable = ConfigSelection(unicable_choices, unicable_choices_default)
-                               elif lnb == 2:
-                                       section.unicable = ConfigSelection(choices = {"unicable_matrix": _("Unicable Martix"),"unicable_user": "Unicable "+_("User defined")}, default = "unicable_matrix")
+#                              elif lnb == 2:
                                else:
                                else:
-                                       section.unicable = ConfigSelection(choices = {"unicable_user": _("User defined")}, default = "unicable_user")
-
-                               def fillUnicableConf(sectionDict, unicableproducts, vco_null_check):
-                                       for y in unicableproducts:
-                                               products = unicableproducts[y].keys()
-                                               products.sort()
-                                               tmp = ConfigSubsection()
-                                               tmp.product = ConfigSelection(choices = products, default = products[0])
-                                               tmp.scr = ConfigSubDict()
-                                               tmp.vco = ConfigSubDict()
-                                               tmp.lofl = ConfigSubDict()
-                                               tmp.lofh = ConfigSubDict()
-                                               tmp.loft = ConfigSubDict()
-                                               tmp.positions = ConfigSubDict()
-                                               for z in products:
+                                       section.unicable = ConfigSelection(choices = {"unicable_matrix": _("Unicable Martix"),"unicable_user": "Unicable "+_("User defined")}, default = "unicable_matrix")
+#                                      section.unicable = ConfigSelection(choices = {"unicable_user": _("User defined")}, default = "unicable_user")
+                       def fillUnicableConf(sectionDict, unicableproducts, vco_null_check):
+                               for manufacturer in unicableproducts:
+                                       products = unicableproducts[manufacturer].keys()
+                                       products.sort()
+                                       products_valide = []
+                                       products_valide_append = products_valide.append
+                                       tmp = ConfigSubsection()
+                                       tmp.scr = ConfigSubDict()
+                                       tmp.vco = ConfigSubDict()
+                                       tmp.lofl = ConfigSubDict()
+                                       tmp.lofh = ConfigSubDict()
+                                       tmp.loft = ConfigSubDict()
+                                       tmp.positions = ConfigSubDict()
+                                       tmp.diction = ConfigSubDict()
+                                       for article in products:
+                                               positionslist = unicableproducts[manufacturer][article].get("positions")
+                                               positions = int(positionslist[0])
+                                               dictionlist = [unicableproducts[manufacturer][article].get("diction")]
+                                               if lnb <= positions or dictionlist[0][0] !="EN50607":
+                                                       tmp.positions[article] = ConfigSubList()
+                                                       tmp.positions[article].append(ConfigInteger(default=positions, limits = (positions, positions)))
+                                                       tmp.diction[article] = ConfigSelection(choices = dictionlist, default = dictionlist[0][0])
+
                                                        scrlist = []
                                                        scrlist = []
-                                                       vcolist = unicableproducts[y][z]
-                                                       tmp.vco[z] = ConfigSubList()
-                                                       for cnt in range(1,1+len(vcolist)-1):
+                                                       scrlist_append = scrlist.append
+                                                       vcolist=unicableproducts[manufacturer][article].get("frequencies")
+                                                       tmp.vco[article] = ConfigSubList()
+                                                       for cnt in range(1,len(vcolist)+1):
                                                                vcofreq = int(vcolist[cnt-1])
                                                                if vcofreq == 0 and vco_null_check:
                                                                vcofreq = int(vcolist[cnt-1])
                                                                if vcofreq == 0 and vco_null_check:
-                                                                       scrlist.append(("%d" %cnt,"SCR %d " %cnt +_("not used")))
+                                                                       scrlist_append(("%d" %cnt,"SCR %d " %cnt +_("not used")))
                                                                else:
                                                                else:
-                                                                       scrlist.append(("%d" %cnt,"SCR %d" %cnt))
-                                                               tmp.vco[z].append(ConfigInteger(default=vcofreq, limits = (vcofreq, vcofreq)))
-                                                               tmp.scr[z] = ConfigSelection(choices = scrlist, default = scrlist[0][0])
-
-                                                               positions = int(vcolist[len(vcolist)-1][0])
-                                                               tmp.positions[z] = ConfigSubList()
-                                                               tmp.positions[z].append(ConfigInteger(default=positions, limits = (positions, positions)))
-
-                                                               lofl = vcolist[len(vcolist)-1][1]
-                                                               tmp.lofl[z] = ConfigSubList()
-                                                               tmp.lofl[z].append(ConfigInteger(default=lofl, limits = (lofl, lofl)))
-
-                                                               lofh = int(vcolist[len(vcolist)-1][2])
-                                                               tmp.lofh[z] = ConfigSubList()
-                                                               tmp.lofh[z].append(ConfigInteger(default=lofh, limits = (lofh, lofh)))
-
-                                                               loft = int(vcolist[len(vcolist)-1][3])
-                                                               tmp.loft[z] = ConfigSubList()
-                                                               tmp.loft[z].append(ConfigInteger(default=loft, limits = (loft, loft)))
-                                               sectionDict[y] = tmp
-
-                               if lnb < 3:
-                                       print "MATRIX"
-                                       section.unicableMatrix = ConfigSubDict()
-                                       section.unicableMatrixManufacturer = ConfigSelection(UnicableMatrixManufacturers, UnicableMatrixManufacturers[0])
-                                       fillUnicableConf(section.unicableMatrix, unicablematrixproducts, True)
-
-                               if lnb < 2:
-                                       print "LNB"
-                                       section.unicableLnb = ConfigSubDict()
-                                       section.unicableLnbManufacturer = ConfigSelection(UnicableLnbManufacturers, UnicableLnbManufacturers[0])
-                                       fillUnicableConf(section.unicableLnb, unicablelnbproducts, False)
+                                                                       scrlist_append(("%d" %cnt,"SCR %d" %cnt))
+                                                               tmp.vco[article].append(ConfigInteger(default=vcofreq, limits = (vcofreq, vcofreq)))
+
+                                                       tmp.scr[article] = ConfigSelection(choices = scrlist, default = scrlist[0][0])
+
+                                                       tmp.lofl[article] = ConfigSubList()
+                                                       tmp.lofh[article] = ConfigSubList()
+                                                       tmp.loft[article] = ConfigSubList()
+
+                                                       tmp_lofl_article_append = tmp.lofl[article].append
+                                                       tmp_lofh_article_append = tmp.lofh[article].append
+                                                       tmp_loft_article_append = tmp.loft[article].append
+                                                       
+                                                       for cnt in range(1,positions+1):
+                                                               lofl = int(positionslist[cnt][0])
+                                                               lofh = int(positionslist[cnt][1])
+                                                               loft = int(positionslist[cnt][2])
+                                                               tmp_lofl_article_append(ConfigInteger(default=lofl, limits = (lofl, lofl)))
+                                                               tmp_lofh_article_append(ConfigInteger(default=lofh, limits = (lofh, lofh)))
+                                                               tmp_loft_article_append(ConfigInteger(default=loft, limits = (loft, loft)))
+                                                       products_valide_append(article)
+
+                                       if len(products_valide)==0:
+                                               products_valide_append("None")
+                                       tmp.product = ConfigSelection(choices = products_valide, default = products_valide[0])
+                                       sectionDict[manufacturer] = tmp
+
+                       if lnb < 65:
+                               print "MATRIX"
+                               section.unicableMatrix = ConfigSubDict()
+                               section.unicableMatrixManufacturer = ConfigSelection(UnicableMatrixManufacturers, UnicableMatrixManufacturers[0])
+                               fillUnicableConf(section.unicableMatrix, unicablematrixproducts, True)
+
+                       if lnb < 2: #Konfiguration nur fuer LNB1 zulassen
+                               print "LNB"
+                               section.unicableLnb = ConfigSubDict()
+                               section.unicableLnbManufacturer = ConfigSelection(UnicableLnbManufacturers, UnicableLnbManufacturers[0])
+                               fillUnicableConf(section.unicableLnb, unicablelnbproducts, False)
 
 #TODO satpositions for satcruser
 
 #TODO satpositions for satcruser
-                               section.satcruser = ConfigSelection(advanced_lnb_satcruser_choices, default="1")
-                               tmp = ConfigSubList()
-                               tmp.append(ConfigInteger(default=1284, limits = (950, 2150)))
-                               tmp.append(ConfigInteger(default=1400, limits = (950, 2150)))
-                               tmp.append(ConfigInteger(default=1516, limits = (950, 2150)))
-                               tmp.append(ConfigInteger(default=1632, limits = (950, 2150)))
-                               tmp.append(ConfigInteger(default=1748, limits = (950, 2150)))
-                               tmp.append(ConfigInteger(default=1864, limits = (950, 2150)))
-                               tmp.append(ConfigInteger(default=1980, limits = (950, 2150)))
-                               tmp.append(ConfigInteger(default=2096, limits = (950, 2150)))
-                               section.satcrvcouser = tmp 
-
-                               nim.advanced.unicableconnected = ConfigYesNo(default=False)
-                               nim.advanced.unicableconnectedTo = ConfigSelection([(str(id), nimmgr.getNimDescription(id)) for id in nimmgr.getNimListOfType("DVB-S") if id != x])
-       
+
+                       section.dictionuser = ConfigSelection(advanced_lnb_diction_user_choices, default="EN50494")
+                       section.satcruserEN50494 = ConfigSelection(advanced_lnb_satcr_user_choicesEN50494, default="1")
+                       section.satcruserEN50607 = ConfigSelection(advanced_lnb_satcr_user_choicesEN50607, default="1")
+
+                       tmp = ConfigSubList()
+                       tmp.append(ConfigInteger(default=1284, limits = (950, 2150)))
+                       tmp.append(ConfigInteger(default=1400, limits = (950, 2150)))
+                       tmp.append(ConfigInteger(default=1516, limits = (950, 2150)))
+                       tmp.append(ConfigInteger(default=1632, limits = (950, 2150)))
+                       tmp.append(ConfigInteger(default=1748, limits = (950, 2150)))
+                       tmp.append(ConfigInteger(default=1864, limits = (950, 2150)))
+                       tmp.append(ConfigInteger(default=1980, limits = (950, 2150)))
+                       tmp.append(ConfigInteger(default=2096, limits = (950, 2150)))
+                       section.satcrvcouserEN50494 = tmp 
+
+                       tmp.append(ConfigInteger(default=1284, limits = (950, 2150)))
+                       tmp.append(ConfigInteger(default=1400, limits = (950, 2150)))
+                       tmp.append(ConfigInteger(default=1516, limits = (950, 2150)))
+                       tmp.append(ConfigInteger(default=1632, limits = (950, 2150)))
+                       tmp.append(ConfigInteger(default=1748, limits = (950, 2150)))
+                       tmp.append(ConfigInteger(default=1864, limits = (950, 2150)))
+                       tmp.append(ConfigInteger(default=1980, limits = (950, 2150)))
+                       tmp.append(ConfigInteger(default=2096, limits = (950, 2150)))
+                       tmp.append(ConfigInteger(default=1284, limits = (950, 2150)))
+                       tmp.append(ConfigInteger(default=1400, limits = (950, 2150)))
+                       tmp.append(ConfigInteger(default=1516, limits = (950, 2150)))
+                       tmp.append(ConfigInteger(default=1632, limits = (950, 2150)))
+                       tmp.append(ConfigInteger(default=1748, limits = (950, 2150)))
+                       tmp.append(ConfigInteger(default=1864, limits = (950, 2150)))
+                       tmp.append(ConfigInteger(default=1980, limits = (950, 2150)))
+                       tmp.append(ConfigInteger(default=2096, limits = (950, 2150)))
+                       tmp.append(ConfigInteger(default=1284, limits = (950, 2150)))
+                       tmp.append(ConfigInteger(default=1400, limits = (950, 2150)))
+                       tmp.append(ConfigInteger(default=1516, limits = (950, 2150)))
+                       tmp.append(ConfigInteger(default=1632, limits = (950, 2150)))
+                       tmp.append(ConfigInteger(default=1748, limits = (950, 2150)))
+                       tmp.append(ConfigInteger(default=1864, limits = (950, 2150)))
+                       tmp.append(ConfigInteger(default=1980, limits = (950, 2150)))
+                       tmp.append(ConfigInteger(default=2096, limits = (950, 2150)))
+                       section.satcrvcouserEN50607 = tmp 
+
+                       nim.advanced.unicableconnected = ConfigYesNo(default=False)
+                       nim.advanced.unicableconnectedTo = ConfigSelection([(str(id), nimmgr.getNimDescription(id)) for id in nimmgr.getNimListOfType("DVB-S") if id != x])
+
        def configDiSEqCModeChanged(configElement):
                section = configElement.section
                if configElement.value == "1_2" and isinstance(section.longitude, ConfigNothing):
        def configDiSEqCModeChanged(configElement):
                section = configElement.section
                if configElement.value == "1_2" and isinstance(section.longitude, ConfigNothing):
@@ -1333,7 +1441,7 @@ def InitNimManager(nimmgr):
                        section.increased_voltage = ConfigYesNo(False)
                        section.toneburst = ConfigSelection(advanced_lnb_toneburst_choices, "none")
                        section.longitude = ConfigNothing()
                        section.increased_voltage = ConfigYesNo(False)
                        section.toneburst = ConfigSelection(advanced_lnb_toneburst_choices, "none")
                        section.longitude = ConfigNothing()
-                       if lnb > 32:
+                       if lnb > 64:
                                tmp = ConfigSelection(advanced_lnb_allsat_diseqcmode_choices, "1_2")
                                tmp.section = section
                                configDiSEqCModeChanged(tmp)
                                tmp = ConfigSelection(advanced_lnb_allsat_diseqcmode_choices, "1_2")
                                tmp.section = section
                                configDiSEqCModeChanged(tmp)
@@ -1384,7 +1492,7 @@ def InitNimManager(nimmgr):
                                tmp.tonemode = ConfigSelection(advanced_tonemode_choices, "band")
                                tmp.usals = ConfigYesNo(default=True)
                                tmp.rotorposition = ConfigInteger(default=1, limits=(1, 255))
                                tmp.tonemode = ConfigSelection(advanced_tonemode_choices, "band")
                                tmp.usals = ConfigYesNo(default=True)
                                tmp.rotorposition = ConfigInteger(default=1, limits=(1, 255))
-                               lnbnum = 33+x-3601
+                               lnbnum = 65+x-3601
                                lnb = ConfigSelection([("0", "not available"), (str(lnbnum), "LNB %d"%(lnbnum))], "0")
                                lnb.slot_id = slot_id
                                lnb.addNotifier(configLNBChanged, initial_call = False)
                                lnb = ConfigSelection([("0", "not available"), (str(lnbnum), "LNB %d"%(lnbnum))], "0")
                                lnb.slot_id = slot_id
                                lnb.addNotifier(configLNBChanged, initial_call = False)
index bce6525..c5366f9 100644 (file)
@@ -95,6 +95,7 @@ class NimSetup(Screen, ConfigListScreen, ServiceStopScreen):
                self.advancedType = None
                self.advancedManufacturer = None
                self.advancedSCR = None
                self.advancedType = None
                self.advancedManufacturer = None
                self.advancedSCR = None
+               self.advancedDiction = None
                self.advancedConnected = None
                
                if self.nim.isMultiType():
                self.advancedConnected = None
                
                if self.nim.isMultiType():
@@ -206,7 +207,7 @@ class NimSetup(Screen, ConfigListScreen, ServiceStopScreen):
                checkList = (self.configMode, self.diseqcModeEntry, self.advancedSatsEntry, \
                        self.advancedLnbsEntry, self.advancedDiseqcMode, self.advancedUsalsEntry, \
                        self.advancedLof, self.advancedPowerMeasurement, self.turningSpeed, \
                checkList = (self.configMode, self.diseqcModeEntry, self.advancedSatsEntry, \
                        self.advancedLnbsEntry, self.advancedDiseqcMode, self.advancedUsalsEntry, \
                        self.advancedLof, self.advancedPowerMeasurement, self.turningSpeed, \
-                       self.advancedType, self.advancedSCR, self.advancedManufacturer, self.advancedUnicable, self.advancedConnected, \
+                       self.advancedType, self.advancedSCR, self.advancedDiction, self.advancedManufacturer, self.advancedUnicable, self.advancedConnected, \
                        self.uncommittedDiseqcCommand, self.cableScanType, self.multiType)
                if self["config"].getCurrent() == self.multiType:
                        from Components.NimManager import InitNimManager
                        self.uncommittedDiseqcCommand, self.cableScanType, self.multiType)
                if self["config"].getCurrent() == self.multiType:
                        from Components.NimManager import InitNimManager
@@ -236,7 +237,7 @@ class NimSetup(Screen, ConfigListScreen, ServiceStopScreen):
        def fillListWithAdvancedSatEntrys(self, Sat):
                lnbnum = int(Sat.lnb.value)
                currLnb = self.nimConfig.advanced.lnb[lnbnum]
        def fillListWithAdvancedSatEntrys(self, Sat):
                lnbnum = int(Sat.lnb.value)
                currLnb = self.nimConfig.advanced.lnb[lnbnum]
-               
+               diction = None
                if isinstance(currLnb, ConfigNothing):
                        currLnb = None
 
                if isinstance(currLnb, ConfigNothing):
                        currLnb = None
 
@@ -258,34 +259,51 @@ class NimSetup(Screen, ConfigListScreen, ServiceStopScreen):
                                self.advancedUnicable = getConfigListEntry("Unicable "+_("Configuration Mode"), currLnb.unicable)
                                self.list.append(self.advancedUnicable)
                                if currLnb.unicable.value == "unicable_user":
                                self.advancedUnicable = getConfigListEntry("Unicable "+_("Configuration Mode"), currLnb.unicable)
                                self.list.append(self.advancedUnicable)
                                if currLnb.unicable.value == "unicable_user":
-                                       self.advancedSCR = getConfigListEntry(_("Channel"), currLnb.satcruser)
+                                       self.advancedDiction = getConfigListEntry(_("Diction"), currLnb.dictionuser)
+                                       self.list.append(self.advancedDiction)
+
+                                       if currLnb.dictionuser.value == "EN50494":
+                                               satcr = currLnb.satcruserEN50494
+                                               stcrvco = currLnb.satcrvcouserEN50494[currLnb.satcruserEN50494.index]
+                                       elif currLnb.dictionuser.value == "EN50607":
+                                               satcr = currLnb.satcruserEN50607
+                                               stcrvco = currLnb.satcrvcouserEN50607[currLnb.satcruserEN50607.index]
+
+                                       self.advancedSCR = getConfigListEntry(_("Channel"), satcr)
                                        self.list.append(self.advancedSCR)
                                        self.list.append(self.advancedSCR)
-                                       self.list.append(getConfigListEntry(_("Frequency"), currLnb.satcrvcouser[currLnb.satcruser.index]))
+                                       self.list.append(getConfigListEntry(_("Frequency"), stcrvco))
+
                                        self.list.append(getConfigListEntry(_("LOF/L"), currLnb.lofl))
                                        self.list.append(getConfigListEntry(_("LOF/H"), currLnb.lofh))
                                        self.list.append(getConfigListEntry(_("Threshold"), currLnb.threshold))
                                elif currLnb.unicable.value == "unicable_matrix":
                                        manufacturer_name = currLnb.unicableMatrixManufacturer.value
                                        manufacturer = currLnb.unicableMatrix[manufacturer_name]
                                        self.list.append(getConfigListEntry(_("LOF/L"), currLnb.lofl))
                                        self.list.append(getConfigListEntry(_("LOF/H"), currLnb.lofh))
                                        self.list.append(getConfigListEntry(_("Threshold"), currLnb.threshold))
                                elif currLnb.unicable.value == "unicable_matrix":
                                        manufacturer_name = currLnb.unicableMatrixManufacturer.value
                                        manufacturer = currLnb.unicableMatrix[manufacturer_name]
+#                                      if "product" in manufacturer.content:
                                        product_name = manufacturer.product.value
                                        self.advancedManufacturer = getConfigListEntry(_("Manufacturer"), currLnb.unicableMatrixManufacturer)
                                        product_name = manufacturer.product.value
                                        self.advancedManufacturer = getConfigListEntry(_("Manufacturer"), currLnb.unicableMatrixManufacturer)
-                                       self.advancedType = getConfigListEntry(_("Type"), manufacturer.product)
-                                       self.advancedSCR = getConfigListEntry(_("Channel"), manufacturer.scr[product_name])
                                        self.list.append(self.advancedManufacturer)
                                        self.list.append(self.advancedManufacturer)
-                                       self.list.append(self.advancedType)
-                                       self.list.append(self.advancedSCR)
-                                       self.list.append(getConfigListEntry(_("Frequency"), manufacturer.vco[product_name][manufacturer.scr[product_name].index])) 
+                                       if product_name in manufacturer.scr:
+                                               diction = manufacturer.diction[product_name].value
+                                               self.advancedType = getConfigListEntry(_("Type"), manufacturer.product)
+                                               self.advancedSCR = getConfigListEntry(_("Channel"), manufacturer.scr[product_name])
+                                               self.list.append(self.advancedType)
+                                               self.list.append(self.advancedSCR)
+                                               self.list.append(getConfigListEntry(_("Frequency"), manufacturer.vco[product_name][manufacturer.scr[product_name].index])) 
                                elif currLnb.unicable.value == "unicable_lnb":
                                        manufacturer_name = currLnb.unicableLnbManufacturer.value
                                        manufacturer = currLnb.unicableLnb[manufacturer_name]
                                elif currLnb.unicable.value == "unicable_lnb":
                                        manufacturer_name = currLnb.unicableLnbManufacturer.value
                                        manufacturer = currLnb.unicableLnb[manufacturer_name]
+#                                      if "product" in manufacturer.content:
                                        product_name = manufacturer.product.value
                                        self.advancedManufacturer = getConfigListEntry(_("Manufacturer"), currLnb.unicableLnbManufacturer)
                                        product_name = manufacturer.product.value
                                        self.advancedManufacturer = getConfigListEntry(_("Manufacturer"), currLnb.unicableLnbManufacturer)
-                                       self.advancedType = getConfigListEntry(_("Type"), manufacturer.product)
-                                       self.advancedSCR = getConfigListEntry(_("Channel"), manufacturer.scr[product_name])
                                        self.list.append(self.advancedManufacturer)
                                        self.list.append(self.advancedManufacturer)
-                                       self.list.append(self.advancedType)
-                                       self.list.append(self.advancedSCR)
-                                       self.list.append(getConfigListEntry(_("Frequency"), manufacturer.vco[product_name][manufacturer.scr[product_name].index])) 
+                                       if product_name in manufacturer.scr:
+                                               diction = manufacturer.diction[product_name].value
+                                               self.advancedType = getConfigListEntry(_("Type"), manufacturer.product)
+                                               self.advancedSCR = getConfigListEntry(_("Channel"), manufacturer.scr[product_name])
+                                               self.list.append(self.advancedType)
+                                               self.list.append(self.advancedSCR)
+                                               self.list.append(getConfigListEntry(_("Frequency"), manufacturer.vco[product_name][manufacturer.scr[product_name].index])) 
 
                                choices = []
                                connectable = nimmanager.canConnectTo(self.slotid)
 
                                choices = []
                                connectable = nimmanager.canConnectTo(self.slotid)
@@ -303,7 +321,7 @@ class NimSetup(Screen, ConfigListScreen, ServiceStopScreen):
                                self.list.append(getConfigListEntry(_("Increased voltage"), currLnb.increased_voltage))
                                self.list.append(getConfigListEntry(_("Tone mode"), Sat.tonemode))
 
                                self.list.append(getConfigListEntry(_("Increased voltage"), currLnb.increased_voltage))
                                self.list.append(getConfigListEntry(_("Tone mode"), Sat.tonemode))
 
-                       if lnbnum < 33:
+                       if lnbnum < 65 and diction !="EN50607":
                                self.advancedDiseqcMode = getConfigListEntry(_("DiSEqC mode"), currLnb.diseqcMode)
                                self.list.append(self.advancedDiseqcMode)
                        if currLnb.diseqcMode.value != "none":
                                self.advancedDiseqcMode = getConfigListEntry(_("DiSEqC mode"), currLnb.diseqcMode)
                                self.list.append(self.advancedDiseqcMode)
                        if currLnb.diseqcMode.value != "none":