From 5ba47ff711b6465848d13495cbb03d062f24b0ec Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Sun, 14 Dec 2014 11:28:37 +0100 Subject: [PATCH] linuxdvb: implement 'Full DiseqC', fixes #2547 --- src/input/mpegts/linuxdvb/linuxdvb_private.h | 2 ++ src/input/mpegts/linuxdvb/linuxdvb_satconf.c | 7 +++++++ src/input/mpegts/linuxdvb/linuxdvb_switch.c | 7 +++++++ 3 files changed, 16 insertions(+) diff --git a/src/input/mpegts/linuxdvb/linuxdvb_private.h b/src/input/mpegts/linuxdvb/linuxdvb_private.h index 0826f000..aec6b0c5 100644 --- a/src/input/mpegts/linuxdvb/linuxdvb_private.h +++ b/src/input/mpegts/linuxdvb/linuxdvb_private.h @@ -136,6 +136,7 @@ struct linuxdvb_satconf gtimer_t ls_diseqc_timer; int ls_diseqc_idx; int ls_diseqc_repeats; + int ls_diseqc_full; int ls_switch_rotor; /* @@ -157,6 +158,7 @@ struct linuxdvb_satconf * Satconf elements */ linuxdvb_satconf_ele_list_t ls_elements; + linuxdvb_satconf_ele_t *ls_last_switch; }; /* diff --git a/src/input/mpegts/linuxdvb/linuxdvb_satconf.c b/src/input/mpegts/linuxdvb/linuxdvb_satconf.c index 90d49a4b..86552a3f 100644 --- a/src/input/mpegts/linuxdvb/linuxdvb_satconf.c +++ b/src/input/mpegts/linuxdvb/linuxdvb_satconf.c @@ -223,6 +223,13 @@ const idclass_t linuxdvb_satconf_class = .opts = PO_ADVANCED, .def.i = 0 }, + { + .type = PT_BOOL, + .id = "diseqc_full", + .name = "Full DiseqC", + .off = offsetof(linuxdvb_satconf_t, ls_diseqc_full), + .opts = PO_ADVANCED, + }, { .type = PT_BOOL, .id = "lnb_poweroff", diff --git a/src/input/mpegts/linuxdvb/linuxdvb_switch.c b/src/input/mpegts/linuxdvb/linuxdvb_switch.c index 2044c74d..6dffe8c2 100644 --- a/src/input/mpegts/linuxdvb/linuxdvb_switch.c +++ b/src/input/mpegts/linuxdvb/linuxdvb_switch.c @@ -150,6 +150,11 @@ linuxdvb_switch_tune int pol, band; linuxdvb_switch_t *ls = (linuxdvb_switch_t*)ld; + if (!sc->lse_parent->ls_diseqc_full && sc->lse_parent->ls_last_switch == sc) + return 0; + + sc->lse_parent->ls_last_switch = NULL; + /* LNB settings */ pol = (sc->lse_lnb) ? sc->lse_lnb->lnb_pol (sc->lse_lnb, lm) & 0x1 : 0; band = (sc->lse_lnb) ? sc->lse_lnb->lnb_band(sc->lse_lnb, lm) & 0x1 : 0; @@ -201,6 +206,8 @@ linuxdvb_switch_tune } } + sc->lse_parent->ls_last_switch = sc; + return 0; }