Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # replace the entire stv0900_carr_get_quality function around line 672
- static s32 stv0900_carr_get_quality(struct dvb_frontend *fe,
- const struct stv0900_table *lookup)
- {
- struct stv0900_state *state = fe->demodulator_priv;
- struct stv0900_internal *intp = state->internal;
- enum fe_stv0900_demod_num demod = state->demod;
- s32 c_n = -100,
- regval,
- imin,
- imax,
- i,
- noise_field1,
- noise_field0;
- //dprintk("%s\n", __func__);
- if (stv0900_get_standard(fe, demod) == STV0900_DVBS2_STANDARD) {
- noise_field1 = NOSPLHT_NORMED1;
- noise_field0 = NOSPLHT_NORMED0;
- } else {
- noise_field1 = NOSDATAT_NORMED1;
- noise_field0 = NOSDATAT_NORMED0;
- }
- if (stv0900_get_bits(intp, LOCK_DEFINITIF)) {
- if ((lookup != NULL) && lookup->size) {
- regval = 0;
- msleep(5);
- for (i = 0; i < 16; i++) {
- regval += MAKEWORD(stv0900_get_bits(intp,
- noise_field1),
- stv0900_get_bits(intp,
- noise_field0));
- msleep(1);
- }
- regval /= 16;
- imin = 0;
- imax = lookup->size - 1;
- if (INRANGE(lookup->table[imin].regval,
- regval,
- lookup->table[imax].regval)) {
- while ((imax - imin) > 1) {
- i = (imax + imin) >> 1;
- if (INRANGE(lookup->table[imin].regval,
- regval,
- lookup->table[i].regval))
- imax = i;
- else
- imin = i;
- }
- c_n = ((regval - lookup->table[imin].regval)
- * (lookup->table[imax].realval
- - lookup->table[imin].realval)
- / (lookup->table[imax].regval
- - lookup->table[imin].regval))
- + lookup->table[imin].realval;
- } else if (regval < lookup->table[imin].regval)
- c_n = 1000;
- c_n = c_n << 8;
- dprintk("%s, regval = %d, snr = %d.%d dB, c_n = %d\n", __func__, regval, (c_n/256)/10, (c_n/256)%10, c_n);
- }
- }
- return c_n;
- }
- # replace the entire stv0900_read_snr function, around line 768 of stv0900_core.c
- static int stv0900_read_snr(struct dvb_frontend *fe, u16 *snr)
- {
- s32 snrlcl = stv0900_carr_get_quality(fe,
- (const struct stv0900_table *)&stv0900_s2_cn);
- //snrlcl = (snrlcl + 30) * 384;
- if (snrlcl < 0)
- snrlcl = 0;
- if (snrlcl > 65535)
- snrlcl = 65535;
- *snr = snrlcl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement