Display SNR (in dB) in status tab

But only for adapters we know that support it
This commit is contained in:
Andreas Öman 2012-11-19 15:21:39 +01:00
parent 44dd4042a9
commit e16707bef7
4 changed files with 34 additions and 8 deletions

View file

@ -97,9 +97,10 @@ typedef struct th_dvb_mux_instance {
struct th_dvb_adapter *tdmi_adapter;
uint16_t tdmi_snr, tdmi_signal;
uint16_t tdmi_signal;
uint32_t tdmi_ber, tdmi_unc;
float tdmi_unc_avg;
float tdmi_snr;
#define TDMI_FEC_ERR_HISTOGRAM_SIZE 10
uint32_t tdmi_fec_err_histogram[TDMI_FEC_ERR_HISTOGRAM_SIZE];
@ -219,6 +220,7 @@ typedef struct th_dvb_adapter {
char *tda_fe_path;
int tda_fe_fd;
int tda_type;
int tda_snr_valid;
struct dvb_frontend_info *tda_fe_info;
int tda_adapter_num;

View file

@ -510,9 +510,14 @@ tda_add(int adapter_num)
dvb_adapter_checkspeed(tda);
if(!strcmp(tda->tda_fe_info->name, "Sony CXD2820R (DVB-T/T2)"))
tda->tda_snr_valid = 1;
tvhlog(LOG_INFO, "dvb",
"Found adapter %s (%s) via %s", path, tda->tda_fe_info->name,
hostconnection2str(tda->tda_hostconnection));
"Found adapter %s (%s) via %s%s", path, tda->tda_fe_info->name,
hostconnection2str(tda->tda_hostconnection),
tda->tda_snr_valid ? ", Reports valid SNR values" : "");
TAILQ_INSERT_TAIL(&dvb_adapters, tda, tda_global_link);

View file

@ -182,9 +182,14 @@ dvb_fe_monitor(void *aux)
}
/* signal/noise ratio */
if(ioctl(tda->tda_fe_fd, FE_READ_SNR, &v) == -1 && v != tdmi->tdmi_snr) {
tdmi->tdmi_snr = v;
notify = 1;
if(tda->tda_snr_valid) {
if(ioctl(tda->tda_fe_fd, FE_READ_SNR, &v) != -1) {
float snr = v / 10.0;
if(tdmi->tdmi_snr != snr) {
tdmi->tdmi_snr = snr;
notify = 1;
}
}
}
}
@ -218,7 +223,9 @@ dvb_fe_monitor(void *aux)
htsmsg_add_str(m, "id", tdmi->tdmi_identifier);
htsmsg_add_u32(m, "quality", tdmi->tdmi_quality);
htsmsg_add_u32(m, "signal", tdmi->tdmi_signal);
htsmsg_add_u32(m, "snr", tdmi->tdmi_snr);
if(tda->tda_snr_valid)
htsmsg_add_dbl(m, "snr", tdmi->tdmi_snr);
htsmsg_add_u32(m, "ber", tdmi->tdmi_ber);
htsmsg_add_u32(m, "unc", tdmi->tdmi_unc);
notify_by_msg("dvbMux", m);
@ -226,7 +233,8 @@ dvb_fe_monitor(void *aux)
m = htsmsg_create_map();
htsmsg_add_str(m, "identifier", tda->tda_identifier);
htsmsg_add_u32(m, "signal", MIN(tdmi->tdmi_signal * 100 / 65535, 100));
htsmsg_add_u32(m, "snr", tdmi->tdmi_snr);
if(tda->tda_snr_valid)
htsmsg_add_dbl(m, "snr", tdmi->tdmi_snr);
htsmsg_add_u32(m, "ber", tdmi->tdmi_ber);
htsmsg_add_u32(m, "unc", tdmi->tdmi_unc);
htsmsg_add_dbl(m, "uncavg", tdmi->tdmi_unc_avg);

View file

@ -168,6 +168,17 @@ tvheadend.status_adapters = function() {
width : 50,
header : "Uncorrected bit error rate",
dataIndex : 'uncavg'
},{
width : 50,
header : "SNR",
dataIndex : 'snr',
renderer: function(value) {
if(value > 0) {
return value.toFixed(1) + " dB";
} else {
return '<span class="tvh-grid-unset">Unknown</span>';
}
}
}, signal]);
var panel = new Ext.grid.GridPanel({