blob: bcef9311fc7a750dca5a201efe1f29136777d7f4 (
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
|
from Components.Converter.Converter import Converter
from Components.Element import cached
class FrontendInfo(Converter, object):
BER = 0
SNR = 1
AGC = 2
LOCK = 3
SNRdB = 4
def __init__(self, type):
Converter.__init__(self, type)
if type == "BER":
self.type = self.BER
elif type == "SNR":
self.type = self.SNR
elif type == "SNRdB":
self.type = self.SNRdB
elif type == "AGC":
self.type = self.AGC
else:
self.type = self.LOCK
@cached
def getText(self):
assert self.type != self.LOCK, "the text output of FrontendInfo cannot be used for lock info"
if self.type == self.BER: # as count
count = self.source.ber
if count is not None:
return str(count)
else:
return "N/A"
elif self.type == self.AGC:
percent = self.source.agc
elif self.type == self.SNR:
percent = self.source.snr
elif self.type == self.SNRdB:
if self.source.snr is None:
return "N/A"
return "%3.02f dB" % (self.source.snr / 100.0)
if percent is None:
return "N/A"
return "%d %%" % (percent * 100 / 65536)
@cached
def getBool(self):
assert self.type in [self.LOCK, self.BER], "the boolean output of FrontendInfo can only be used for lock or BER info"
if self.type == self.LOCK:
return self.source.lock
else:
return self.source.ber > 0
text = property(getText)
boolean = property(getBool)
@cached
def getValue(self):
assert self.type != self.LOCK, "the value/range output of FrontendInfo can not be used for lock info"
if self.type == self.AGC:
return self.source.agc or 0
elif self.type == self.SNR:
return self.source.snr or 0
elif self.type == self.BER:
if self.BER < self.range:
return self.BER or 0
else:
return self.range
range = 65536
value = property(getValue)
|