diff options
| author | Felix Domke <tmbinc@elitedvb.net> | 2007-05-20 23:17:31 +0000 |
|---|---|---|
| committer | Felix Domke <tmbinc@elitedvb.net> | 2007-05-20 23:17:31 +0000 |
| commit | 09a48d79a8ee17f0abe10d40aa33f3133b6b9170 (patch) | |
| tree | 7ab863de69be4c6e0b8fa1ef6d2977c1b774585c /lib/dvb/frontend.cpp | |
| parent | 8bb6976db1427c12c4cae54ca25f9a6f0243c233 (diff) | |
| download | enigma2-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.cpp | 33 |
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: |
