mirror of
https://github.com/DigitalDevices/dddvb.git
synced 2023-10-10 13:37:43 +02:00
properly round SCR frequencies
This commit is contained in:
parent
2194f8e03a
commit
75821a6e3c
@ -182,7 +182,7 @@ static int diseqc(int fd, int sat, int hor, int band)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int set_en50494(struct dddvb_fe *fe, uint32_t freq, uint32_t sr,
|
||||
static int set_en50494(struct dddvb_fe *fe, uint32_t freq_khz, uint32_t sr,
|
||||
int sat, int hor, int band,
|
||||
uint32_t slot, uint32_t ubfreq,
|
||||
fe_delivery_system_t ds)
|
||||
@ -194,8 +194,10 @@ static int set_en50494(struct dddvb_fe *fe, uint32_t freq, uint32_t sr,
|
||||
uint16_t t;
|
||||
uint32_t input = 3 & (sat >> 6);
|
||||
int fd = fe->fd;
|
||||
uint32_t freq = (freq_khz + 2000) / 4000;
|
||||
int32_t fdiff = freq_khz - freq * 1000;
|
||||
|
||||
t = (freq + ubfreq + 2) / 4 - 350;
|
||||
t = (freq_khz / 1000 + ubfreq + 2) / 4 - 350;
|
||||
hor &= 1;
|
||||
|
||||
cmd.msg[3] = ((t & 0x0300) >> 8) |
|
||||
@ -219,7 +221,7 @@ static int set_en50494(struct dddvb_fe *fe, uint32_t freq, uint32_t sr,
|
||||
cmd.msg[0], cmd.msg[1], cmd.msg[2], cmd.msg[3], cmd.msg[4]);
|
||||
}
|
||||
|
||||
static int set_en50607(struct dddvb_fe *fe, uint32_t freq, uint32_t sr,
|
||||
static int set_en50607(struct dddvb_fe *fe, uint32_t freq_khz, uint32_t sr,
|
||||
int sat, int hor, int band,
|
||||
uint32_t slot, uint32_t ubfreq,
|
||||
fe_delivery_system_t ds)
|
||||
@ -228,6 +230,8 @@ static int set_en50607(struct dddvb_fe *fe, uint32_t freq, uint32_t sr,
|
||||
.msg = {0x70, 0x00, 0x00, 0x00, 0x00},
|
||||
.msg_len = 4
|
||||
};
|
||||
uint32_t freq = (freq_khz + 500) / 1000;
|
||||
int32_t fdiff = freq_khz - freq * 1000;
|
||||
uint32_t t = freq - 100;
|
||||
uint32_t input = 3 & (sat >> 6);
|
||||
int fd = fe->fd;
|
||||
@ -251,11 +255,11 @@ static int set_en50607(struct dddvb_fe *fe, uint32_t freq, uint32_t sr,
|
||||
if (ioctl(fd, FE_SET_VOLTAGE, SEC_VOLTAGE_13) == -1)
|
||||
perror("FE_SET_VOLTAGE failed");
|
||||
|
||||
set_fe_input(fe, ubfreq * 1000, sr, ds, input);
|
||||
set_fe_input(fe, ubfreq * 1000 + fdiff, sr, ds, input);
|
||||
dbgprintf(DEBUG_DVB, "EN50607 %02x %02x %02x %02x\n",
|
||||
cmd.msg[0], cmd.msg[1], cmd.msg[2], cmd.msg[3]);
|
||||
dbgprintf(DEBUG_DVB, "EN50607 freq %u sr %u hor %u\n",
|
||||
freq, sr, hor);
|
||||
dbgprintf(DEBUG_DVB, "EN50607 freq %u ubfreq %u fdiff %d sr %u hor %u\n",
|
||||
freq, ubfreq, fdiff, sr, hor);
|
||||
}
|
||||
|
||||
|
||||
@ -289,14 +293,20 @@ static int tune_sat(struct dddvb_fe *fe)
|
||||
freq = lofs - freq;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (freq > 3000000) {
|
||||
if (lofs)
|
||||
hi = (freq > lofs) ? 1 : 0;
|
||||
if (hi)
|
||||
freq -= fe->lof2[lnbc];
|
||||
else
|
||||
freq -= fe->lof1[lnbc];
|
||||
if (lofs > 10000000) {
|
||||
if (hi)
|
||||
freq -= fe->lof2[lnbc];
|
||||
else
|
||||
freq -= fe->lof1[lnbc];
|
||||
} else {
|
||||
if (hi)
|
||||
freq = fe->lof2[lnbc] - freq;
|
||||
else
|
||||
freq = fe->lof1[lnbc] - freq;
|
||||
}
|
||||
}
|
||||
dbgprintf(DEBUG_DVB, "tune_sat IF=%u\n", freq);
|
||||
if (fe->first) {
|
||||
@ -309,13 +319,13 @@ static int tune_sat(struct dddvb_fe *fe)
|
||||
dbgprintf(DEBUG_DVB, "scif_type = %u\n", fe->scif_type);
|
||||
if (fe->scif_type == 1) {
|
||||
pthread_mutex_lock(&fe->dd->uni_lock);
|
||||
set_en50494(fe, freq / 1000, fe->param.param[PARAM_SR],
|
||||
set_en50494(fe, freq, fe->param.param[PARAM_SR],
|
||||
lnb, fe->param.param[PARAM_POL], hi,
|
||||
fe->scif_slot, fe->scif_freq, ds);
|
||||
pthread_mutex_unlock(&fe->dd->uni_lock);
|
||||
} else if (fe->scif_type == 2) {
|
||||
pthread_mutex_lock(&fe->dd->uni_lock);
|
||||
set_en50607(fe, freq / 1000, fe->param.param[PARAM_SR],
|
||||
set_en50607(fe, freq, fe->param.param[PARAM_SR],
|
||||
lnb, fe->param.param[PARAM_POL], hi,
|
||||
fe->scif_slot, fe->scif_freq, ds);
|
||||
pthread_mutex_unlock(&fe->dd->uni_lock);
|
||||
@ -325,8 +335,9 @@ static int tune_sat(struct dddvb_fe *fe)
|
||||
if (input != DDDVB_UNDEF) {
|
||||
input = 3 & (input >> 6);
|
||||
dbgprintf(DEBUG_DVB, "input = %u\n", input);
|
||||
set_property(fe->fd, DTV_INPUT, input);
|
||||
}
|
||||
diseqc(fe->fd, lnb, fe->param.param[PARAM_POL], hi);
|
||||
//diseqc(fe->fd, lnb, fe->param.param[PARAM_POL], hi);
|
||||
set_fe_input(fe, freq, fe->param.param[PARAM_SR], ds, input);
|
||||
//set_fe_input(fe, freq, fe->param.param[PARAM_SR], ds, DDDVB_UNDEF);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user