1 from GUIComponent import GUIComponent
3 from enigma import eLabel, eSlider, iFrontendInformation
7 class TunerInfo(GUIComponent):
22 def __init__(self, type, servicefkt = None, frontendfkt = None, statusDict = None):
23 GUIComponent.__init__(self)
27 self.servicefkt = servicefkt
28 self.frontendfkt = frontendfkt
29 self.statusDict = statusDict
33 def setText(self, text):
36 self.instance.setText(self.message)
38 def setValue(self, value):
41 self.instance.setValue(self.value)
47 return (long)(log(val)/log(2))
51 if self.type == self.SNR_DB:
52 value = self.getValue(self.SNR_DB)
53 elif self.type == self.SNR_PERCENTAGE or self.type == self.SNR_BAR:
54 value = self.getValue(self.SNR) * 100 / 65536
55 elif self.type == self.AGC_PERCENTAGE or self.type == self.AGC_BAR:
56 value = self.getValue(self.AGC) * 100 / 65536
57 elif self.type == self.BER_VALUE or self.type == self.BER_BAR:
58 value = self.getValue(self.BER)
59 elif self.type == self.LOCK_STATE:
60 value = self.getValue(self.LOCK)
62 if self.type == self.SNR_DB:
64 # if value != 0x12345678:
65 if value is not None and value != 0x12345678:
66 self.setText("%3.02f dB" % (value / 100.0))
69 elif self.type == self.SNR_PERCENTAGE or self.type == self.AGC_PERCENTAGE:
70 self.setText("%d%%" % (value))
71 elif self.type == self.BER_VALUE:
72 self.setText("%d" % (value))
73 elif self.type == self.SNR_BAR or self.type == self.AGC_BAR:
75 elif self.type == self.BER_BAR:
76 self.setValue(self.calc(value))
77 elif self.type == self.LOCK_STATE:
79 self.setText(_("locked"))
81 self.setText(_("not locked"))
83 def getValue(self, what):
85 if what == self.SNR_DB:
86 return self.statusDict.get("tuner_signal_quality_db", 0x12345678)
87 elif what == self.SNR:
88 return self.statusDict.get("tuner_signal_quality", 0)
89 elif what == self.AGC:
90 return self.statusDict.get("tuner_signal_power", 0)
91 elif what == self.BER:
92 return self.statusDict.get("tuner_bit_error_rate", 0)
93 elif what == self.LOCK:
94 return self.statusDict.get("tuner_locked", 0)
96 service = self.servicefkt()
97 if service is not None:
98 feinfo = service.frontendInfo()
99 if feinfo is not None:
100 if what == self.SNR_DB:
101 return feinfo.getFrontendInfo(iFrontendInformation.signalQualitydB)
102 elif what == self.SNR:
103 return feinfo.getFrontendInfo(iFrontendInformation.signalQuality)
104 elif what == self.AGC:
105 return feinfo.getFrontendInfo(iFrontendInformation.signalPower)
106 elif what == self.BER:
107 return feinfo.getFrontendInfo(iFrontendInformation.bitErrorRate)
108 elif what == self.LOCK:
109 return feinfo.getFrontendInfo(iFrontendInformation.lockState)
110 elif self.frontendfkt:
111 frontend = self.frontendfkt()
113 if what == self.SNR_DB:
114 return frontend.readFrontendData(iFrontendInformation.signalQualitydB)
115 elif what == self.SNR:
116 return frontend.readFrontendData(iFrontendInformation.signalQuality)
117 elif what == self.AGC:
118 return frontend.readFrontendData(iFrontendInformation.signalPower)
119 elif what == self.BER:
120 return frontend.readFrontendData(iFrontendInformation.bitErrorRate)
121 elif what == self.LOCK:
122 return frontend.readFrontendData(iFrontendInformation.lockState)
125 def createWidget(self, parent):
126 if self.SNR_PERCENTAGE <= self.type <= self.BER_VALUE or self.type == self.LOCK_STATE:
127 return eLabel(parent)
128 elif self.SNR_BAR <= self.type <= self.BER_BAR:
129 self.g = eSlider(parent)
130 self.g.setRange(0, 100)
133 def postWidgetCreate(self, instance):
134 if self.message is not None:
135 instance.setText(self.message)
136 elif self.value is not None:
137 instance.setValue(self.value)