Am 11.11.2014 um 11:28 schrieb Mauro Carvalho Chehab:
Em Wed, 18 Sep 2013 01:05:20 +0200
Joerg Riechardt <j.riecha...@gmx.de> escreveu:

The stv090x driver uses the lookup table for signal strength already,
with this patch we use the lookup tables for carrier/noise ratio as well.
This has the advantage, that values for DVB-S and DVB-S2 are now
corresponding, while before they were way off. The values are now
proportional to real carrier/noise ratio, while before they were
corresponding to register values. So now applications are able to give
the user real carrier/noise ratio.

Because the output has to be within 0x0000...0xFFFF the three negative
values for DVB-S2 are omitted. This is no significant loss, because
reception is lost at 7.5 dB already (TT S2-1600, Cine S2), so the
negative values are not really important, and also for DVB-S they don“t
exist.

Signed-off-by: Joerg Riechardt <j.riecha...@gmx.de>

Regards,
Joerg

--- stv090x.c.bak       2013-09-06 20:59:01.132365872 +0200
+++ stv090x.c   2013-09-10 03:21:48.884115191 +0200
@@ -173,9 +173,9 @@

  /* DVBS2 C/N Lookup table */
  static const struct stv090x_tab stv090x_s2cn_tab[] = {
-       { -30, 13348 }, /* -3.0dB */
-       { -20, 12640 }, /* -2d.0B */
-       { -10, 11883 }, /* -1.0dB */
+//     { -30, 13348 }, /* -3.0dB */
+//     { -20, 12640 }, /* -2d.0B */
+//     { -10, 11883 }, /* -1.0dB */
        {   0, 11101 }, /* -0.0dB */
        {   5, 10718 }, /*  0.5dB */
        {  10, 10339 }, /*  1.0dB */

Instead of commenting, just truncate the value at the DVBv3 stats
function.

Ok, done.
Changed patch attached.


@@ -3697,9 +3697,10 @@
                        }
                        val /= 16;
                        last = ARRAY_SIZE(stv090x_s2cn_tab) - 1;
-                       div = stv090x_s2cn_tab[0].read -
-                             stv090x_s2cn_tab[last].read;
-                       *cnr = 0xFFFF - ((val * 0xFFFF) / div);
+                       div = stv090x_s2cn_tab[last].real -
+                             stv090x_s2cn_tab[0].real;
+                       val = stv090x_table_lookup(stv090x_s2cn_tab, last, val);
+                       *cnr = val * 0xFFFF / div;
                }
                break;

@@ -3719,9 +3720,10 @@
                        }
                        val /= 16;
                        last = ARRAY_SIZE(stv090x_s1cn_tab) - 1;
-                       div = stv090x_s1cn_tab[0].read -
-                             stv090x_s1cn_tab[last].read;
-                       *cnr = 0xFFFF - ((val * 0xFFFF) / div);
+                       div = stv090x_s1cn_tab[last].real -
+                             stv090x_s1cn_tab[0].real;
+                       val = stv090x_table_lookup(stv090x_s1cn_tab, last, val);
+                       *cnr = val * 0xFFFF / div;
                }

As, with this patch, C/N will be a properly scaled value, the best
is to add support for DVBv5 stats. With DVBv5 stats, the scale can
be sent to userspace.

Sorry, I have no plans to add DVBv5 stats, although I agree, it would be nice, if someone did.

Signed-off-by: Joerg Riechardt <j.riecha...@gmx.de>

Regards,
Joerg



                break;
        default:

Regards,
Mauro

diff -Nru A/stv090x.c B/stv090x.c
--- A/stv090x.c 2015-06-25 14:33:58.000000000 +0200
+++ B/stv090x.c 2015-08-29 16:07:44.889861230 +0200
@@ -3726,9 +3726,12 @@
                        }
                        val /= 16;
                        last = ARRAY_SIZE(stv090x_s2cn_tab) - 1;
-                       div = stv090x_s2cn_tab[0].read -
-                             stv090x_s2cn_tab[last].read;
-                       *cnr = 0xFFFF - ((val * 0xFFFF) / div);
+                       div = stv090x_s2cn_tab[last].real -
+                             stv090x_s2cn_tab[3].real;
+                       val = stv090x_table_lookup(stv090x_s2cn_tab, last, val);
+                       if (val < 0)
+                               val = 0;
+                       *cnr = val * 0xFFFF / div;
                }
                break;
 
@@ -3748,9 +3751,10 @@
                        }
                        val /= 16;
                        last = ARRAY_SIZE(stv090x_s1cn_tab) - 1;
-                       div = stv090x_s1cn_tab[0].read -
-                             stv090x_s1cn_tab[last].read;
-                       *cnr = 0xFFFF - ((val * 0xFFFF) / div);
+                       div = stv090x_s1cn_tab[last].real -
+                             stv090x_s1cn_tab[0].real;
+                       val = stv090x_table_lookup(stv090x_s1cn_tab, last, val);
+                       *cnr = val * 0xFFFF / div;
                }
                break;
        default:

Reply via email to