aboutsummaryrefslogtreecommitdiff
path: root/lib/dvb/frontend.cpp
diff options
context:
space:
mode:
authorFelix Domke <tmbinc@elitedvb.net>2007-05-20 23:17:31 +0000
committerFelix Domke <tmbinc@elitedvb.net>2007-05-20 23:17:31 +0000
commit09a48d79a8ee17f0abe10d40aa33f3133b6b9170 (patch)
tree7ab863de69be4c6e0b8fa1ef6d2977c1b774585c /lib/dvb/frontend.cpp
parent8bb6976db1427c12c4cae54ca25f9a6f0243c233 (diff)
downloadenigma2-09a48d79a8ee17f0abe10d40aa33f3133b6b9170.tar.gz
enigma2-09a48d79a8ee17f0abe10d40aa33f3133b6b9170.zip
optional hack for dm8000: convert FE_READ_SNR into dB (will soon be moved into driver)
Diffstat (limited to 'lib/dvb/frontend.cpp')
-rw-r--r--lib/dvb/frontend.cpp33
1 files changed, 33 insertions, 0 deletions
diff --git a/lib/dvb/frontend.cpp b/lib/dvb/frontend.cpp
index 3ae9473e..f9ca6c70 100644
--- a/lib/dvb/frontend.cpp
+++ b/lib/dvb/frontend.cpp
@@ -623,6 +623,39 @@ int eDVBFrontend::readFrontendData(int type)
uint16_t snr=0;
if (ioctl(m_fd, FE_READ_SNR, &snr) < 0 && errno != ERANGE)
eDebug("FE_READ_SNR failed (%m)");
+
+#if defined(DM8000)
+ unsigned int SDS_SNRE = snr << 16;
+
+ static float SNR_COEFF[6] = {
+ 100.0 / 4194304.0,
+ -7136.0 / 4194304.0,
+ 197418.0 / 4194304.0,
+ -2602183.0 / 4194304.0,
+ 20377212.0 / 4194304.0,
+ -37791203.0 / 4194304.0,
+ };
+
+ float fval1, fval2, snr_in_db;
+ int i;
+ fval1 = 12.44714 - (2.0 * log10(SDS_SNRE / 256.0));
+ fval2 = pow(10.0, fval1)-1;
+ fval1 = 10.0 * log10(fval2);
+
+ if (fval1 < 10.0)
+ {
+ fval2 = SNR_COEFF[0];
+ for (i=0; i<6; ++i)
+ {
+ fval2 *= fval1;
+ fval2 += SNR_COEFF[i];
+ }
+ fval1 = fval2;
+ }
+ snr_in_db = fval1;
+
+ return (int)(snr_in_db * 100.0);
+#endif
return snr;
}
case signalQuality: