]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
Display SNR (in dB) in status tab
authorAndreas Öman <andreas@lonelycoder.com>
Mon, 19 Nov 2012 14:21:39 +0000 (15:21 +0100)
committerAndreas Öman <andreas@lonelycoder.com>
Mon, 19 Nov 2012 14:24:39 +0000 (15:24 +0100)
But only for adapters we know that support it

src/dvb/dvb.h
src/dvb/dvb_adapter.c
src/dvb/dvb_fe.c
src/webui/static/app/status.js

index 92fcaf2c37f253068fa3a6f1a07693366d4951f3..5ae0d8767c6cff51dfd5d66d50c427ec23180568 100644 (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;
index 1847304a920f7cce3d913a7b82f65e26724396e0..8e35dfe72062a97e716755a9d9c6191d737a95b8 100644 (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);
 
index 2731e13a38905a39373c7d9ca8c4de3ef6481b9c..7120ab5ce750c9c2aa11affecbd7f3d4a984e066 100644 (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);
index bf3c2cbbbffdf5f32a9860337be4241810f8f781..3ecf1f17f6ad3983bedee3d3463b7a49fdf1e410 100644 (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({