On 13/12/2017 13:58, Mauro Carvalho Chehab wrote: > If sat_number is not filled (e.g. it is -1), the dvb-sat > disables DiSEqC. However, currently, it also breaks support > for non-bandstacking LNBf. > > Change the logic to fix it. There is a drawback on this > approach, though: usually, on bandstacking arrangements, > only one device needs to feed power to the LNBf. The > others don't need to send power. With the previous code, > no power would be sent at all, if sat_number == -1. > > Now, it will always power the LNBf when using it. > > Signed-off-by: Mauro Carvalho Chehab <mchehab@xxxxxxxxxxxxxxxx> > --- > lib/libdvbv5/dvb-sat.c | 48 ++++++++++++++++++++++++------------------------ > 1 file changed, 24 insertions(+), 24 deletions(-) > > diff --git a/lib/libdvbv5/dvb-sat.c b/lib/libdvbv5/dvb-sat.c > index b012318c4195..8c04f66f973b 100644 > --- a/lib/libdvbv5/dvb-sat.c > +++ b/lib/libdvbv5/dvb-sat.c > @@ -523,11 +523,8 @@ static int dvbsat_diseqc_set_input(struct dvb_v5_fe_parms_priv *parms, > struct diseqc_cmd cmd; > const struct dvb_sat_lnb_priv *lnb = (void *)parms->p.lnb; > > - /* Negative numbers means to not use a DiSEqC switch */ > - if (parms->p.sat_number < 0) { > - /* If not bandstack, warn if DiSEqC is disabled */ > - if (!lnb->freqrange[0].pol) > - dvb_logwarn(_("DiSEqC disabled. Probably won't tune.")); > + if (sat_number < 0 && t) { > + dvb_logwarn(_("DiSEqC disabled. Can't tune using SCR/Unicable.")); > return 0; > } > > @@ -546,7 +543,7 @@ static int dvbsat_diseqc_set_input(struct dvb_v5_fe_parms_priv *parms, > vol_high = 1; > } else { > /* Adjust voltage/tone accordingly */ > - if (parms->p.sat_number < 2) { > + if (sat_number < 2) { > vol_high = pol_v ? 0 : 1; > tone_on = high_band; > } > @@ -560,28 +557,31 @@ static int dvbsat_diseqc_set_input(struct dvb_v5_fe_parms_priv *parms, > if (rc) > return rc; > > - usleep(15 * 1000); > - > - if (!t) > - rc = dvbsat_diseqc_write_to_port_group(parms, &cmd, high_band, > - pol_v, sat_number); > - else > - rc = dvbsat_scr_odu_channel_change(parms, &cmd, high_band, > - pol_v, sat_number, t); > + if (sat_number >= 0) { > + /* DiSEqC is enabled. Send DiSEqC commands */ > + usleep(15 * 1000); > > - if (rc) { > - dvb_logerr(_("sending diseq failed")); > - return rc; > - } > - usleep((15 + parms->p.diseqc_wait) * 1000); > + if (!t) > + rc = dvbsat_diseqc_write_to_port_group(parms, &cmd, high_band, > + pol_v, sat_number); > + else > + rc = dvbsat_scr_odu_channel_change(parms, &cmd, high_band, > + pol_v, sat_number, t); > > - /* miniDiSEqC/Toneburst commands are defined only for up to 2 sattelites */ > - if (parms->p.sat_number < 2) { > - rc = dvb_fe_diseqc_burst(&parms->p, parms->p.sat_number); > - if (rc) > + if (rc) { > + dvb_logerr(_("sending diseq failed")); > return rc; > + } > + usleep((15 + parms->p.diseqc_wait) * 1000); > + > + /* miniDiSEqC/Toneburst commands are defined only for up to 2 sattelites */ > + if (parms->p.sat_number < 2) { > + rc = dvb_fe_diseqc_burst(&parms->p, parms->p.sat_number); > + if (rc) > + return rc; > + } > + usleep(15 * 1000); > } > - usleep(15 * 1000); > > rc = dvb_fe_sec_tone(&parms->p, tone_on ? SEC_TONE_ON : SEC_TONE_OFF); > > Tested-by: Rafaël Carré <funman@xxxxxxxxxxxx>