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;
|
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,
|
int sat, int hor, int band,
|
||||||
uint32_t slot, uint32_t ubfreq,
|
uint32_t slot, uint32_t ubfreq,
|
||||||
fe_delivery_system_t ds)
|
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;
|
uint16_t t;
|
||||||
uint32_t input = 3 & (sat >> 6);
|
uint32_t input = 3 & (sat >> 6);
|
||||||
int fd = fe->fd;
|
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;
|
hor &= 1;
|
||||||
|
|
||||||
cmd.msg[3] = ((t & 0x0300) >> 8) |
|
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]);
|
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,
|
int sat, int hor, int band,
|
||||||
uint32_t slot, uint32_t ubfreq,
|
uint32_t slot, uint32_t ubfreq,
|
||||||
fe_delivery_system_t ds)
|
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 = {0x70, 0x00, 0x00, 0x00, 0x00},
|
||||||
.msg_len = 4
|
.msg_len = 4
|
||||||
};
|
};
|
||||||
|
uint32_t freq = (freq_khz + 500) / 1000;
|
||||||
|
int32_t fdiff = freq_khz - freq * 1000;
|
||||||
uint32_t t = freq - 100;
|
uint32_t t = freq - 100;
|
||||||
uint32_t input = 3 & (sat >> 6);
|
uint32_t input = 3 & (sat >> 6);
|
||||||
int fd = fe->fd;
|
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)
|
if (ioctl(fd, FE_SET_VOLTAGE, SEC_VOLTAGE_13) == -1)
|
||||||
perror("FE_SET_VOLTAGE failed");
|
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",
|
dbgprintf(DEBUG_DVB, "EN50607 %02x %02x %02x %02x\n",
|
||||||
cmd.msg[0], cmd.msg[1], cmd.msg[2], cmd.msg[3]);
|
cmd.msg[0], cmd.msg[1], cmd.msg[2], cmd.msg[3]);
|
||||||
dbgprintf(DEBUG_DVB, "EN50607 freq %u sr %u hor %u\n",
|
dbgprintf(DEBUG_DVB, "EN50607 freq %u ubfreq %u fdiff %d sr %u hor %u\n",
|
||||||
freq, sr, hor);
|
freq, ubfreq, fdiff, sr, hor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -289,14 +293,20 @@ static int tune_sat(struct dddvb_fe *fe)
|
|||||||
freq = lofs - freq;
|
freq = lofs - freq;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (freq > 3000000) {
|
if (freq > 3000000) {
|
||||||
if (lofs)
|
if (lofs)
|
||||||
hi = (freq > lofs) ? 1 : 0;
|
hi = (freq > lofs) ? 1 : 0;
|
||||||
|
if (lofs > 10000000) {
|
||||||
if (hi)
|
if (hi)
|
||||||
freq -= fe->lof2[lnbc];
|
freq -= fe->lof2[lnbc];
|
||||||
else
|
else
|
||||||
freq -= fe->lof1[lnbc];
|
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);
|
dbgprintf(DEBUG_DVB, "tune_sat IF=%u\n", freq);
|
||||||
if (fe->first) {
|
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);
|
dbgprintf(DEBUG_DVB, "scif_type = %u\n", fe->scif_type);
|
||||||
if (fe->scif_type == 1) {
|
if (fe->scif_type == 1) {
|
||||||
pthread_mutex_lock(&fe->dd->uni_lock);
|
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,
|
lnb, fe->param.param[PARAM_POL], hi,
|
||||||
fe->scif_slot, fe->scif_freq, ds);
|
fe->scif_slot, fe->scif_freq, ds);
|
||||||
pthread_mutex_unlock(&fe->dd->uni_lock);
|
pthread_mutex_unlock(&fe->dd->uni_lock);
|
||||||
} else if (fe->scif_type == 2) {
|
} else if (fe->scif_type == 2) {
|
||||||
pthread_mutex_lock(&fe->dd->uni_lock);
|
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,
|
lnb, fe->param.param[PARAM_POL], hi,
|
||||||
fe->scif_slot, fe->scif_freq, ds);
|
fe->scif_slot, fe->scif_freq, ds);
|
||||||
pthread_mutex_unlock(&fe->dd->uni_lock);
|
pthread_mutex_unlock(&fe->dd->uni_lock);
|
||||||
@ -325,8 +335,9 @@ static int tune_sat(struct dddvb_fe *fe)
|
|||||||
if (input != DDDVB_UNDEF) {
|
if (input != DDDVB_UNDEF) {
|
||||||
input = 3 & (input >> 6);
|
input = 3 & (input >> 6);
|
||||||
dbgprintf(DEBUG_DVB, "input = %u\n", input);
|
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, input);
|
||||||
//set_fe_input(fe, freq, fe->param.param[PARAM_SR], ds, DDDVB_UNDEF);
|
//set_fe_input(fe, freq, fe->param.param[PARAM_SR], ds, DDDVB_UNDEF);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user