diff --git a/docs/html/config_tvadapters.html b/docs/html/config_tvadapters.html index 2508c33b..52826a35 100644 --- a/docs/html/config_tvadapters.html +++ b/docs/html/config_tvadapters.html @@ -89,6 +89,11 @@ The rows have the following functions In this case, increase the default value. For fast hardware, this value might be descreased to make the decision of the re-tune algorithm based on the signal status faster. +

+

Force old status
+
Always use the old ioctls to read the linuxdvb status (signal strenght, + SNR, error counters). Some drivers are not matured enough to provide + the correct values using the new v5 linuxdvb API.

diff --git a/src/input/mpegts/linuxdvb/linuxdvb_frontend.c b/src/input/mpegts/linuxdvb/linuxdvb_frontend.c index b58d617c..59fc77d9 100644 --- a/src/input/mpegts/linuxdvb/linuxdvb_frontend.c +++ b/src/input/mpegts/linuxdvb/linuxdvb_frontend.c @@ -120,6 +120,13 @@ const idclass_t linuxdvb_frontend_class = .opts = PO_ADVANCED, .off = offsetof(linuxdvb_frontend_t, lfe_status_period), }, + { + .type = PT_BOOL, + .id = "old_status", + .name = "Force old status", + .opts = PO_ADVANCED, + .off = offsetof(linuxdvb_frontend_t, lfe_old_status), + }, {} } }; @@ -649,7 +656,8 @@ linuxdvb_frontend_monitor ( void *aux ) logit = tvhlog_limit(&lfe->lfe_status_log, 3600); - if(ioctl_check(lfe, 0) && !ioctl(lfe->lfe_fe_fd, FE_GET_PROPERTY, &dtv_prop)) { + if(ioctl_check(lfe, 0) && !lfe->lfe_old_status && + !ioctl(lfe->lfe_fe_fd, FE_GET_PROPERTY, &dtv_prop)) { /* Signal strength */ gotprop = 0; if(ioctl_check(lfe, 1) && fe_properties[0].u.st.len > 0) { diff --git a/src/input/mpegts/linuxdvb/linuxdvb_private.h b/src/input/mpegts/linuxdvb/linuxdvb_private.h index d829a336..116e79a5 100644 --- a/src/input/mpegts/linuxdvb/linuxdvb_private.h +++ b/src/input/mpegts/linuxdvb/linuxdvb_private.h @@ -118,6 +118,7 @@ struct linuxdvb_frontend uint32_t lfe_skip_bytes; uint32_t lfe_ibuf_size; uint32_t lfe_status_period; + int lfe_old_status; /* * Satconf (DVB-S only)