aboutsummaryrefslogtreecommitdiff
path: root/lib/python/Components/TunerInfo.py
blob: f841832c06c3e8bb0764ad52ed287e9bf9cbbe2b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
from GUIComponent import GUIComponent

from enigma import eLabel, eSlider, iFrontendStatusInformation

from math import log

class TunerInfo(GUIComponent):
	SNR = 0
	AGC = 1
	BER = 2
	LOCK = 3
	
	SNR_PERCENTAGE = 0
	AGC_PERCENTAGE = 1
	BER_VALUE = 2
	SNR_BAR = 3
	AGC_BAR = 4
	BER_BAR = 5
	LOCK_STATE = 6
	SYNC_STATE = 7
	def __init__(self, type, servicefkt = None, frontendfkt = None):
		GUIComponent.__init__(self)
		self.instance = None
		self.message = None
		self.value = None
		
		self.servicefkt = servicefkt
		self.frontendfkt = frontendfkt
		self.type = type
		self.update()
	
	def setText(self, text):
		self.message = text
		if self.instance:
			self.instance.setText(self.message)
	
	def setValue(self, value):
		self.value = value
		if self.instance:
			self.instance.setValue(self.value)		
			
	def calc(self,val):
		if not val:
			return 0
		if val < 2500:
			return (long)(log(val)/log(2))
		return val*100/65535
	
	def update(self):
		if self.type == self.SNR_PERCENTAGE or self.type == self.SNR_BAR:
			value = self.getValue(self.SNR) * 100 / 65536
		elif self.type == self.AGC_PERCENTAGE or self.type == self.AGC_BAR:
			value = self.getValue(self.AGC) * 100 / 65536
		elif self.type == self.BER_VALUE or self.type == self.BER_BAR:
			value = self.getValue(self.BER)
		elif self.type == self.LOCK_STATE:
			value = self.getValue(self.LOCK)
		
		if self.type == self.SNR_PERCENTAGE or self.type == self.AGC_PERCENTAGE:
			self.setText("%d%%" % (value))
		elif self.type == self.BER_VALUE:
			self.setText("%d" % (value))
		elif self.type == self.SNR_BAR or self.type == self.AGC_BAR:
			self.setValue(value)
		elif self.type == self.BER_BAR:
			self.setValue(self.calc(value))
		elif self.type == self.LOCK_STATE:
			if value == 1:
				self.setText(_("locked"))
			else:
				self.setText(_("not locked"))
				
	def getValue(self, what):
		if self.servicefkt is not None:
			service = self.servicefkt()
			if service is not None:
				feinfo = service.frontendStatusInfo()
				if feinfo is not None:
					if what == self.SNR:
						return feinfo.getFrontendInfo(iFrontendStatusInformation.signalPower)
					elif what == self.AGC:
						return feinfo.getFrontendInfo(iFrontendStatusInformation.signalQuality)
					elif what == self.BER:
						return feinfo.getFrontendInfo(iFrontendStatusInformation.bitErrorRate)
					elif what == self.LOCK:
						return feinfo.getFrontendInfo(iFrontendStatusInformation.LockState)
		elif self.frontendfkt is not None:
			frontend = self.frontendfkt()
			if what == self.SNR:
				return frontend.readFrontendData(iFrontendStatusInformation.signalPower)
			elif what == self.AGC:
				return frontend.readFrontendData(iFrontendStatusInformation.signalQuality)
			elif what == self.BER:
				return frontend.readFrontendData(iFrontendStatusInformation.bitErrorRate)
			elif what == self.LOCK:
				return frontend.readFrontendData(iFrontendStatusInformation.LockState)
		
		return 0
				
	def createWidget(self, parent):
		if self.SNR_PERCENTAGE <= self.type <= self.BER_VALUE or self.type == self.LOCK_STATE:
			return eLabel(parent)
		elif self.SNR_BAR <= self.type <= self.BER_BAR:
			self.g = eSlider(parent)
			self.g.setRange(0, 100)
			return self.g
		
	def GUIcreate(self, parent):
		self.instance = self.createWidget(parent)
		if self.message is not None:
			self.instance.setText(self.message)
		elif self.value is not None:
			self.instance.setValue(self.value)	

	def GUIdelete(self):
		self.removeWidget(self.instance)
		self.instance = None
	
	def removeWidget(self, instance):
		pass