From a3d5b26f430cf5f35f909d4018887c7a8f13aa66 Mon Sep 17 00:00:00 2001 From: ghost Date: Mon, 8 Dec 2008 14:55:58 +0100 Subject: calculate signalQuality based on snrdb --- lib/dvb/frontend.cpp | 59 ++++++++++++++++++++++++++++------------------------ 1 file changed, 32 insertions(+), 27 deletions(-) (limited to 'lib') diff --git a/lib/dvb/frontend.cpp b/lib/dvb/frontend.cpp index b25794f8..d890c975 100644 --- a/lib/dvb/frontend.cpp +++ b/lib/dvb/frontend.cpp @@ -716,23 +716,15 @@ int eDVBFrontend::readFrontendData(int type) return ber; } case signalQuality: - { - uint16_t snr=0; - if (!m_simulate) - { - if (ioctl(m_fd, FE_READ_SNR, &snr) < 0 && errno != ERANGE) - eDebug("FE_READ_SNR failed (%m)"); - } - return snr; - } case signalQualitydB: /* this will move into the driver */ { + int ret = 0x12345678; uint16_t snr=0; if (m_simulate) return 0; if (ioctl(m_fd, FE_READ_SNR, &snr) < 0 && errno != ERANGE) eDebug("FE_READ_SNR failed (%m)"); - if (!strcmp(m_description, "BCM4501 (internal)")) + else if (!strcmp(m_description, "BCM4501 (internal)")) { float SDS_SNRE = snr << 16; float snr_in_db; @@ -787,15 +779,15 @@ int eDVBFrontend::readFrontendData(int type) snr_in_db = fval1; } #endif - return (int)(snr_in_db * 100); + ret = (int)(snr_in_db * 100); } else if (strstr(m_description, "Alps BSBE1 C01A") || !strcmp(m_description, "Alps -S(STV0288)")) { if (snr == 0) - return 0; + ret = 0; else if (snr == 0xFFFF) // i think this should not happen - return 100*100; + ret = 100*100; else { enum { REALVAL, REGVAL }; @@ -823,46 +815,59 @@ int eDVBFrontend::readFrontendData(int type) else Imin = i; } - return (((regval - CN_lookup[Imin][REGVAL]) + ret = (((regval - CN_lookup[Imin][REGVAL]) * (CN_lookup[Imax][REALVAL] - CN_lookup[Imin][REALVAL]) / (CN_lookup[Imax][REGVAL] - CN_lookup[Imin][REGVAL])) + CN_lookup[Imin][REALVAL]) * 10; } - return 100; + else + ret = 100; } - return 0; } else if (!strcmp(m_description, "Alps BSBE1 702A") || // some frontends with STV0299 !strcmp(m_description, "Alps -S") || !strcmp(m_description, "Philips -S") || !strcmp(m_description, "LG -S") ) { - return (int)((snr-39075)/17.647); + ret = (int)((snr-39075)/17.647); } else if (!strcmp(m_description, "Alps BSBE2")) { - return (int)((snr >> 7) * 10); + ret = (int)((snr >> 7) * 10); } else if (!strcmp(m_description, "Philips CU1216Mk3")) { int mse = (~snr) & 0xFF; switch (parm_u_qam_modulation) { - case QAM_16: return fe_udiv(1950000, (32 * mse) + 138) + 1000; - case QAM_32: return fe_udiv(2150000, (40 * mse) + 500) + 1350; - case QAM_64: return fe_udiv(2100000, (40 * mse) + 500) + 1250; - case QAM_128: return fe_udiv(1850000, (38 * mse) + 400) + 1380; - case QAM_256: return fe_udiv(1800000, (100 * mse) + 40) + 2030; + case QAM_16: ret = fe_udiv(1950000, (32 * mse) + 138) + 1000; break; + case QAM_32: ret = fe_udiv(2150000, (40 * mse) + 500) + 1350; break; + case QAM_64: ret = fe_udiv(2100000, (40 * mse) + 500) + 1250; break; + case QAM_128: ret = fe_udiv(1850000, (38 * mse) + 400) + 1380; break; + case QAM_256: ret = fe_udiv(1800000, (100 * mse) + 40) + 2030; break; default: break; } - return 0; } else if (!strcmp(m_description, "Philips TU1216")) { snr = 0xFF - (snr & 0xFF); if (snr != 0) - return 10 * (int)(-100 * (log10(snr) - log10(255))); - return 0; + ret = 10 * (int)(-100 * (log10(snr) - log10(255))); + } + + if (type == signalQuality) + { + if (ret == 0x12345678) // no snr db calculation avail.. return untouched snr value.. + return snr; + switch(m_type) + { + case feSatellite: // we assume a max of 17.5db here + return ret >= 1750 ? 65536 : ret * 65536 / 1750; + case feCable: // we assume a max of 42db here + return ret >= 4200 ? 65536 : ret * 65536 / 4200; + case feTerrestrial: // we assume a max of 24db here + return ret >= 2400 ? 65536 : ret * 65536 / 2400; + } } /* else eDebug("no SNR dB calculation for frontendtype %s yet", m_description); */ - return 0x12345678; + return ret; } case signalPower: { -- cgit v1.2.3 From f1b8049d3735b3f6544e84817e9c7d3bca474d5e Mon Sep 17 00:00:00 2001 From: ghost Date: Mon, 8 Dec 2008 15:50:30 +0100 Subject: remove agc --- lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) (limited to 'lib') diff --git a/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py b/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py index d67a97cb..c8aa2718 100644 --- a/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py +++ b/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py @@ -28,16 +28,13 @@ class PositionerSetup(Screen): - - + - - + - - + @@ -87,14 +84,11 @@ class PositionerSetup(Screen): self.createSetup() self["snr"] = Label() - self["agc"] = Label() self["ber"] = Label() self["lock"] = Label() self["snr_percentage"] = TunerInfo(TunerInfo.SNR_PERCENTAGE, statusDict = self.frontendStatus) - self["agc_percentage"] = TunerInfo(TunerInfo.AGC_PERCENTAGE, statusDict = self.frontendStatus) self["ber_value"] = TunerInfo(TunerInfo.BER_VALUE, statusDict = self.frontendStatus) self["snr_bar"] = TunerInfo(TunerInfo.SNR_BAR, statusDict = self.frontendStatus) - self["agc_bar"] = TunerInfo(TunerInfo.AGC_BAR, statusDict = self.frontendStatus) self["ber_bar"] = TunerInfo(TunerInfo.BER_BAR, statusDict = self.frontendStatus) self["lock_state"] = TunerInfo(TunerInfo.LOCK_STATE, statusDict = self.frontendStatus) @@ -330,10 +324,8 @@ class PositionerSetup(Screen): if self.frontend: self.frontend.getFrontendStatus(self.frontendStatus) self["snr_percentage"].update() - self["agc_percentage"].update() self["ber_value"].update() self["snr_bar"].update() - self["agc_bar"].update() self["ber_bar"].update() self["lock_state"].update() transponderdata = self.tuner.getTransponderData() -- cgit v1.2.3 From 18c98a9e4a08c77fd1e0bfcc7410e9697d19510c Mon Sep 17 00:00:00 2001 From: ghost Date: Mon, 8 Dec 2008 23:22:22 +0100 Subject: small SNRdb correction for latest 4501 firmware --- lib/dvb/frontend.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'lib') diff --git a/lib/dvb/frontend.cpp b/lib/dvb/frontend.cpp index d890c975..af974c81 100644 --- a/lib/dvb/frontend.cpp +++ b/lib/dvb/frontend.cpp @@ -780,6 +780,7 @@ int eDVBFrontend::readFrontendData(int type) } #endif ret = (int)(snr_in_db * 100); + ret -= 150; // -1.5db for latest bcm4501 firmware.. } else if (strstr(m_description, "Alps BSBE1 C01A") || !strcmp(m_description, "Alps -S(STV0288)")) @@ -857,8 +858,8 @@ int eDVBFrontend::readFrontendData(int type) return snr; switch(m_type) { - case feSatellite: // we assume a max of 17.5db here - return ret >= 1750 ? 65536 : ret * 65536 / 1750; + case feSatellite: // we assume a max of 16.0db here + return ret >= 1600 ? 65536 : ret * 65536 / 1600; case feCable: // we assume a max of 42db here return ret >= 4200 ? 65536 : ret * 65536 / 4200; case feTerrestrial: // we assume a max of 24db here -- cgit v1.2.3 From 50182c33fbbd4845ceb81afa7a5cbf263c929412 Mon Sep 17 00:00:00 2001 From: ghost Date: Tue, 9 Dec 2008 15:59:34 +0100 Subject: add SNRdB to TunerInfo --- lib/python/Components/TunerInfo.py | 40 +++++++++++++++++++++++++------------- 1 file changed, 27 insertions(+), 13 deletions(-) (limited to 'lib') diff --git a/lib/python/Components/TunerInfo.py b/lib/python/Components/TunerInfo.py index d8b4d064..39f54c0b 100644 --- a/lib/python/Components/TunerInfo.py +++ b/lib/python/Components/TunerInfo.py @@ -10,13 +10,14 @@ class TunerInfo(GUIComponent): 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 + SNR_DB = 1 + AGC_PERCENTAGE = 2 + BER_VALUE = 3 + SNR_BAR = 4 + AGC_BAR = 5 + BER_BAR = 6 + LOCK_STATE = 7 + SYNC_STATE = 8 def __init__(self, type, servicefkt = None, frontendfkt = None, statusDict = None): GUIComponent.__init__(self) @@ -47,7 +48,9 @@ class TunerInfo(GUIComponent): return val*100/65535 def update(self): - if self.type == self.SNR_PERCENTAGE or self.type == self.SNR_BAR: + if self.type == self.SNR_DB: + value = self.getValue(self.SNR_DB) + elif 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 @@ -55,8 +58,13 @@ class TunerInfo(GUIComponent): 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: + + if self.type == self.SNR_DB: + if value != 0x12345678: + self.setText("%3.02f dB" % (value / 100.0)) + else: + self.setText("") + elif 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)) @@ -72,7 +80,9 @@ class TunerInfo(GUIComponent): def getValue(self, what): if self.statusDict: - if what == self.SNR: + if what == self.SNR_DB: + return self.statusDict.get("tuner_signal_quality_db", 0x12345678) + elif what == self.SNR: return self.statusDict.get("tuner_signal_quality", 0) elif what == self.AGC: return self.statusDict.get("tuner_signal_power", 0) @@ -85,7 +95,9 @@ class TunerInfo(GUIComponent): if service is not None: feinfo = service.frontendInfo() if feinfo is not None: - if what == self.SNR: + if what == self.SNR_DB: + return feinfo.getFrontendInfo(iFrontendInformation.signalQualitydB) + elif what == self.SNR: return feinfo.getFrontendInfo(iFrontendInformation.signalQuality) elif what == self.AGC: return feinfo.getFrontendInfo(iFrontendInformation.signalPower) @@ -96,7 +108,9 @@ class TunerInfo(GUIComponent): elif self.frontendfkt: frontend = self.frontendfkt() if frontend: - if what == self.SNR: + if what == self.SNR_DB: + return frontend.readFrontendData(iFrontendInformation.signalQualitydB) + elif what == self.SNR: return frontend.readFrontendData(iFrontendInformation.signalQuality) elif what == self.AGC: return frontend.readFrontendData(iFrontendInformation.signalPower) -- cgit v1.2.3 From 75df7af9707fe12227d7a0b5873e9c57c3a6fc6e Mon Sep 17 00:00:00 2001 From: ghost Date: Tue, 9 Dec 2008 15:59:56 +0100 Subject: remove unneeded skin (already in skin_default.xml) --- .../Plugins/SystemPlugins/Satfinder/plugin.py | 40 ---------------------- 1 file changed, 40 deletions(-) (limited to 'lib') diff --git a/lib/python/Plugins/SystemPlugins/Satfinder/plugin.py b/lib/python/Plugins/SystemPlugins/Satfinder/plugin.py index 74568855..064ac673 100644 --- a/lib/python/Plugins/SystemPlugins/Satfinder/plugin.py +++ b/lib/python/Plugins/SystemPlugins/Satfinder/plugin.py @@ -39,46 +39,6 @@ class Tuner: self.frontend.tune(self.lastparm) class Satfinder(ScanSetup): - skin = """ - - - - - - - - - - SNRdB - - - SNR - - - AGC - - - BER - - - SNR - - - AGC - - - BER - - - LOCK - - - - LOCK - Invert - - """ - def openFrontend(self): res_mgr = eDVBResourceManager.getInstance() if res_mgr: -- cgit v1.2.3 From bb349d44c5c3e963d25f31c085e92407d2c2b0a9 Mon Sep 17 00:00:00 2001 From: ghost Date: Tue, 9 Dec 2008 16:00:18 +0100 Subject: also show SNR in dB in PositionerSetup --- .../SystemPlugins/PositionerSetup/plugin.py | 36 ++++++++++------------ 1 file changed, 16 insertions(+), 20 deletions(-) (limited to 'lib') diff --git a/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py b/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py index c8aa2718..928d72a6 100644 --- a/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py +++ b/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py @@ -26,19 +26,20 @@ class PositionerSetup(Screen): - - - - - - + + + + + + + - - + + - - - + + + @@ -78,24 +79,18 @@ class PositionerSetup(Screen): self["yellow"] = self.yellow self.blue = Label("") self["blue"] = self.blue - + self.list = [] self["list"] = ConfigList(self.list) self.createSetup() - - self["snr"] = Label() - self["ber"] = Label() - self["lock"] = Label() + + self["snr_db"] = TunerInfo(TunerInfo.SNR_DB, statusDict = self.frontendStatus) self["snr_percentage"] = TunerInfo(TunerInfo.SNR_PERCENTAGE, statusDict = self.frontendStatus) self["ber_value"] = TunerInfo(TunerInfo.BER_VALUE, statusDict = self.frontendStatus) self["snr_bar"] = TunerInfo(TunerInfo.SNR_BAR, statusDict = self.frontendStatus) self["ber_bar"] = TunerInfo(TunerInfo.BER_BAR, statusDict = self.frontendStatus) self["lock_state"] = TunerInfo(TunerInfo.LOCK_STATE, statusDict = self.frontendStatus) - self["frequency"] = Label() - self["symbolrate"] = Label() - self["fec"] = Label() - self["frequency_value"] = Label("") self["symbolrate_value"] = Label("") self["fec_value"] = Label("") @@ -323,6 +318,7 @@ class PositionerSetup(Screen): def updateStatus(self): if self.frontend: self.frontend.getFrontendStatus(self.frontendStatus) + self["snr_db"].update() self["snr_percentage"].update() self["ber_value"].update() self["snr_bar"].update() -- cgit v1.2.3