On 14.05.2012 04:37, Antti Palosaari wrote:
+ else {
+ /* if_agc is read as a 10bit binary */
+ ret = rtl2832_rd_demod_reg(priv, DVBT_IF_AGC_VAL,&if_agc_raw);
+ if (ret)
+ goto err;
+
+ if (if_agc_raw< (1<< 9))
+ if_agc = if_agc_raw;
+ else
+ if_agc = -(~(if_agc_raw-1)& 0x1ff);
+
+ *strength = 55 - if_agc / 182;
+ *strength |= *strength<< 8;
That calculation shows doubtful. Why not to scale directly to the
counter. Now you divide it by 182 and after that multiply 256 (<< 8
means same as multiply by 256). It is stupid calculation.
I was playing with RTL2830 statistics and thus it is quite similar I
ended up looking that again. It is not so wrong as I commented. The idea
of whole calculation is to underflow unsigned 8 bit value to the
*strength. But it goes wrong here because you don't cast it as unsigned
char (this should be *strength = (u8) (55 - if_agc / 182);.
I implemented that rather similarly for the RTL2830. But it is very poor
resolution for some reason... :-(
regards
Antti
--
http://palosaari.fi/
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html