[videomode] support VusoloSE
[vuplus_dvbapp] / lib / python / Components / TunerInfo.py
1 from GUIComponent import GUIComponent
2
3 from enigma import eLabel, eSlider, iFrontendInformation
4
5 from math import log
6
7 class TunerInfo(GUIComponent):
8         SNR = 0
9         AGC = 1
10         BER = 2
11         LOCK = 3
12         SNR_PERCENTAGE = 0
13         SNR_DB = 1
14         AGC_PERCENTAGE = 2
15         BER_VALUE = 3
16         SNR_BAR = 4
17         AGC_BAR = 5
18         BER_BAR = 6
19         LOCK_STATE = 7
20         SYNC_STATE = 8
21
22         def __init__(self, type, servicefkt = None, frontendfkt = None, statusDict = None):
23                 GUIComponent.__init__(self)
24                 self.instance = None
25                 self.message = None
26                 self.value = None
27                 self.servicefkt = servicefkt
28                 self.frontendfkt = frontendfkt
29                 self.statusDict = statusDict
30                 self.type = type
31                 self.update()
32
33         def setText(self, text):
34                 self.message = text
35                 if self.instance:
36                         self.instance.setText(self.message)
37
38         def setValue(self, value):
39                 self.value = value
40                 if self.instance:
41                         self.instance.setValue(self.value)              
42
43         def calc(self,val):
44                 if not val:
45                         return 0
46                 if val < 2500:
47                         return (long)(log(val)/log(2))
48                 return val*100/65535
49
50         def update(self):
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)
61
62                 if self.type == self.SNR_DB:
63 #       ikseong         
64 #                       if value != 0x12345678:
65                         if value is not None and value != 0x12345678:
66                                 self.setText("%3.02f dB" % (value / 100.0))
67                         else:
68                                 self.setText("")
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:
74                         self.setValue(value)
75                 elif self.type == self.BER_BAR:
76                         self.setValue(self.calc(value))
77                 elif self.type == self.LOCK_STATE:
78                         if value == 1:
79                                 self.setText(_("locked"))
80                         else:
81                                 self.setText(_("not locked"))
82
83         def getValue(self, what):
84                 if self.statusDict:
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)
95                 elif self.servicefkt:
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()
112                         if frontend:
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)
123                 return 0
124
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)
131                         return self.g
132
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)