Advertisement
Guest User

Untitled

a guest
Aug 1st, 2013
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.18 KB | None | 0 0
  1. # replace the entire stv0900_carr_get_quality function around line 672
  2.  
  3. static s32 stv0900_carr_get_quality(struct dvb_frontend *fe,
  4. const struct stv0900_table *lookup)
  5. {
  6. struct stv0900_state *state = fe->demodulator_priv;
  7. struct stv0900_internal *intp = state->internal;
  8. enum fe_stv0900_demod_num demod = state->demod;
  9.  
  10. s32 c_n = -100,
  11. regval,
  12. imin,
  13. imax,
  14. i,
  15. noise_field1,
  16. noise_field0;
  17.  
  18. //dprintk("%s\n", __func__);
  19.  
  20. if (stv0900_get_standard(fe, demod) == STV0900_DVBS2_STANDARD) {
  21. noise_field1 = NOSPLHT_NORMED1;
  22. noise_field0 = NOSPLHT_NORMED0;
  23. } else {
  24. noise_field1 = NOSDATAT_NORMED1;
  25. noise_field0 = NOSDATAT_NORMED0;
  26. }
  27.  
  28. if (stv0900_get_bits(intp, LOCK_DEFINITIF)) {
  29. if ((lookup != NULL) && lookup->size) {
  30. regval = 0;
  31. msleep(5);
  32. for (i = 0; i < 16; i++) {
  33. regval += MAKEWORD(stv0900_get_bits(intp,
  34. noise_field1),
  35. stv0900_get_bits(intp,
  36. noise_field0));
  37. msleep(1);
  38. }
  39.  
  40. regval /= 16;
  41. imin = 0;
  42. imax = lookup->size - 1;
  43. if (INRANGE(lookup->table[imin].regval,
  44. regval,
  45. lookup->table[imax].regval)) {
  46. while ((imax - imin) > 1) {
  47. i = (imax + imin) >> 1;
  48. if (INRANGE(lookup->table[imin].regval,
  49. regval,
  50. lookup->table[i].regval))
  51. imax = i;
  52. else
  53. imin = i;
  54. }
  55.  
  56. c_n = ((regval - lookup->table[imin].regval)
  57. * (lookup->table[imax].realval
  58. - lookup->table[imin].realval)
  59. / (lookup->table[imax].regval
  60. - lookup->table[imin].regval))
  61. + lookup->table[imin].realval;
  62. } else if (regval < lookup->table[imin].regval)
  63. c_n = 1000;
  64. c_n = c_n << 8;
  65. dprintk("%s, regval = %d, snr = %d.%d dB, c_n = %d\n", __func__, regval, (c_n/256)/10, (c_n/256)%10, c_n);
  66. }
  67. }
  68.  
  69. return c_n;
  70. }
  71.  
  72. # replace the entire stv0900_read_snr function, around line 768 of stv0900_core.c
  73.  
  74. static int stv0900_read_snr(struct dvb_frontend *fe, u16 *snr)
  75. {
  76. s32 snrlcl = stv0900_carr_get_quality(fe,
  77. (const struct stv0900_table *)&stv0900_s2_cn);
  78. //snrlcl = (snrlcl + 30) * 384;
  79. if (snrlcl < 0)
  80. snrlcl = 0;
  81.  
  82. if (snrlcl > 65535)
  83. snrlcl = 65535;
  84. *snr = snrlcl;
  85. return 0;
  86. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement