mirror of
https://github.com/DigitalDevices/octonet.git
synced 2023-10-10 13:36:52 +02:00
add support for more delivery systems
This commit is contained in:
parent
e510064ea6
commit
28c38fbbda
144
octoserve/dvb.c
144
octoserve/dvb.c
@ -329,12 +329,12 @@ static int set_en50607(struct dvbfe *fe, uint32_t freq, uint32_t sr,
|
|||||||
cmd.msg[0], cmd.msg[1], cmd.msg[2], cmd.msg[3]);
|
cmd.msg[0], cmd.msg[1], cmd.msg[2], cmd.msg[3]);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int tune_sat(struct dvbfe *fe)
|
static int tune_dvbs2(struct dvbfe *fe)
|
||||||
{
|
{
|
||||||
uint32_t freq, hi = 0, src, lnb = 0, lnbc = 0, lofs;
|
uint32_t freq, hi = 0, src, lnb = 0, lnbc = 0, lofs;
|
||||||
fe_delivery_system_t ds = fe->param[PARAM_MSYS] - 1;
|
fe_delivery_system_t ds = fe->param[PARAM_MSYS] - 1;
|
||||||
|
|
||||||
dbgprintf(DEBUG_DVB, "tune_sat\n");
|
dbgprintf(DEBUG_DVB, "tune_dvbs2\n");
|
||||||
freq = fe->param[PARAM_FREQ];
|
freq = fe->param[PARAM_FREQ];
|
||||||
|
|
||||||
if (fe->param[PARAM_SRC])
|
if (fe->param[PARAM_SRC])
|
||||||
@ -392,7 +392,7 @@ static int tune_sat(struct dvbfe *fe)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int tune_c(struct dvbfe *fe)
|
static int tune_dvbc(struct dvbfe *fe)
|
||||||
{
|
{
|
||||||
struct dtv_property p[] = {
|
struct dtv_property p[] = {
|
||||||
{ .cmd = DTV_CLEAR },
|
{ .cmd = DTV_CLEAR },
|
||||||
@ -420,24 +420,7 @@ static int tune_c(struct dvbfe *fe)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int tune_cable(struct dvbfe *fe)
|
static int tune_dvbt(struct dvbfe *fe)
|
||||||
{
|
|
||||||
uint32_t freq;
|
|
||||||
struct dvb_frontend_parameters p = {
|
|
||||||
.frequency = fe->param[PARAM_FREQ] * 1000,
|
|
||||||
.u.qam.symbol_rate = fe->param[PARAM_SR] * 1000,
|
|
||||||
.u.qam.fec_inner = fe->param[PARAM_FEC] ? (fe->param[PARAM_FEC] - 1) : FEC_AUTO,
|
|
||||||
.u.qam.modulation = fe->param[PARAM_MTYPE] - 1,
|
|
||||||
};
|
|
||||||
set_property(fe->fd, DTV_DELIVERY_SYSTEM, SYS_DVBC_ANNEX_A);
|
|
||||||
if (ioctl(fe->fd, FE_SET_FRONTEND, &p) == -1) {
|
|
||||||
perror("FE_SET_FRONTEND error");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int tune_terr(struct dvbfe *fe)
|
|
||||||
{
|
{
|
||||||
struct dtv_property p[] = {
|
struct dtv_property p[] = {
|
||||||
{ .cmd = DTV_CLEAR },
|
{ .cmd = DTV_CLEAR },
|
||||||
@ -459,33 +442,8 @@ static int tune_terr(struct dvbfe *fe)
|
|||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#if 0
|
|
||||||
static int tune_terr(struct dvbfe *fe)
|
|
||||||
{
|
|
||||||
uint32_t freq;
|
|
||||||
enum fe_bandwidth bw;
|
|
||||||
struct dvb_frontend_parameters p = {
|
|
||||||
.frequency = fe->param[PARAM_FREQ] * 1000,
|
|
||||||
.inversion = INVERSION_AUTO,
|
|
||||||
.u.ofdm.code_rate_HP = FEC_AUTO,
|
|
||||||
.u.ofdm.code_rate_LP = FEC_AUTO,
|
|
||||||
.u.ofdm.constellation = fe->param[PARAM_MTYPE] - 1,
|
|
||||||
.u.ofdm.transmission_mode = TRANSMISSION_MODE_AUTO,
|
|
||||||
.u.ofdm.guard_interval = GUARD_INTERVAL_AUTO,
|
|
||||||
.u.ofdm.hierarchy_information = HIERARCHY_AUTO,
|
|
||||||
.u.ofdm.bandwidth = fe->param[PARAM_BW] ?
|
|
||||||
(fe->param[PARAM_BW] - 1) : BANDWIDTH_AUTO,
|
|
||||||
};
|
|
||||||
set_property(fe->fd, DTV_DELIVERY_SYSTEM, SYS_DVBT);
|
|
||||||
if (ioctl(fe->fd, FE_SET_FRONTEND, &p) == -1) {
|
|
||||||
perror("FE_SET_FRONTEND error");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static int tune_c2(struct dvbfe *fe)
|
static int tune_dvbc2(struct dvbfe *fe)
|
||||||
{
|
{
|
||||||
struct dtv_property p[] = {
|
struct dtv_property p[] = {
|
||||||
{ .cmd = DTV_CLEAR },
|
{ .cmd = DTV_CLEAR },
|
||||||
@ -509,7 +467,7 @@ static int tune_c2(struct dvbfe *fe)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int tune_terr2(struct dvbfe *fe)
|
static int tune_dvbt2(struct dvbfe *fe)
|
||||||
{
|
{
|
||||||
struct dtv_property p[] = {
|
struct dtv_property p[] = {
|
||||||
{ .cmd = DTV_CLEAR },
|
{ .cmd = DTV_CLEAR },
|
||||||
@ -556,6 +514,76 @@ static int tune_isdbt(struct dvbfe *fe)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int tune_isdbc(struct dvbfe *fe)
|
||||||
|
{
|
||||||
|
struct dtv_property p[] = {
|
||||||
|
{ .cmd = DTV_CLEAR },
|
||||||
|
{ .cmd = DTV_FREQUENCY, .u.data = fe->param[PARAM_FREQ] * 1000 },
|
||||||
|
};
|
||||||
|
struct dtv_properties c;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
set_property(fe->fd, DTV_DELIVERY_SYSTEM, SYS_ISDBC);
|
||||||
|
|
||||||
|
c.num = ARRAY_SIZE(p);
|
||||||
|
c.props = p;
|
||||||
|
ret = ioctl(fe->fd, FE_SET_PROPERTY, &c);
|
||||||
|
if (ret < 0) {
|
||||||
|
fprintf(stderr, "FE_SET_PROPERTY returned %d\n", ret);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
if (fe->set & (1UL << PARAM_ISI))
|
||||||
|
set_property(fe->fd, DTV_STREAM_ID, fe->param[PARAM_ISI]);
|
||||||
|
set_property(fe->fd, DTV_TUNE, 0);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int tune_j83b(struct dvbfe *fe)
|
||||||
|
{
|
||||||
|
struct dtv_property p[] = {
|
||||||
|
{ .cmd = DTV_CLEAR },
|
||||||
|
{ .cmd = DTV_FREQUENCY, .u.data = fe->param[PARAM_FREQ] * 1000 },
|
||||||
|
};
|
||||||
|
struct dtv_properties c;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
set_property(fe->fd, DTV_DELIVERY_SYSTEM, SYS_DVBC_ANNEX_B);
|
||||||
|
|
||||||
|
c.num = ARRAY_SIZE(p);
|
||||||
|
c.props = p;
|
||||||
|
ret = ioctl(fe->fd, FE_SET_PROPERTY, &c);
|
||||||
|
if (ret < 0) {
|
||||||
|
fprintf(stderr, "FE_SET_PROPERTY returned %d\n", ret);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
set_property(fe->fd, DTV_TUNE, 0);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int tune_isdbs(struct dvbfe *fe)
|
||||||
|
{
|
||||||
|
struct dtv_property p[] = {
|
||||||
|
{ .cmd = DTV_CLEAR },
|
||||||
|
{ .cmd = DTV_FREQUENCY, .u.data = fe->param[PARAM_FREQ] },
|
||||||
|
};
|
||||||
|
struct dtv_properties c;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
set_property(fe->fd, DTV_DELIVERY_SYSTEM, SYS_ISDBS);
|
||||||
|
|
||||||
|
c.num = ARRAY_SIZE(p);
|
||||||
|
c.props = p;
|
||||||
|
ret = ioctl(fe->fd, FE_SET_PROPERTY, &c);
|
||||||
|
if (ret < 0) {
|
||||||
|
fprintf(stderr, "FE_SET_PROPERTY returned %d\n", ret);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
if (fe->set & (1UL << PARAM_ISI))
|
||||||
|
set_property(fe->fd, DTV_STREAM_ID, fe->param[PARAM_ISI]);
|
||||||
|
set_property(fe->fd, DTV_TUNE, 0);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int tune(struct dvbfe *fe)
|
static int tune(struct dvbfe *fe)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
@ -565,23 +593,33 @@ static int tune(struct dvbfe *fe)
|
|||||||
switch (fe->n_param[PARAM_MSYS] - 1) {
|
switch (fe->n_param[PARAM_MSYS] - 1) {
|
||||||
case SYS_DVBS:
|
case SYS_DVBS:
|
||||||
case SYS_DVBS2:
|
case SYS_DVBS2:
|
||||||
ret = tune_sat(fe);
|
ret = tune_dvbs2(fe);
|
||||||
break;
|
break;
|
||||||
case SYS_DVBC_ANNEX_A:
|
case SYS_DVBC_ANNEX_A:
|
||||||
ret = tune_c(fe);
|
ret = tune_dvbc(fe);
|
||||||
break;
|
break;
|
||||||
case SYS_DVBT:
|
case SYS_DVBT:
|
||||||
ret = tune_terr(fe);
|
ret = tune_dvbt(fe);
|
||||||
break;
|
break;
|
||||||
case SYS_DVBT2:
|
case SYS_DVBT2:
|
||||||
ret = tune_terr2(fe);
|
ret = tune_dvbt2(fe);
|
||||||
break;
|
break;
|
||||||
case SYS_DVBC2:
|
case SYS_DVBC2:
|
||||||
ret = tune_c2(fe);
|
ret = tune_dvbc2(fe);
|
||||||
break;
|
break;
|
||||||
case SYS_ISDBT:
|
case SYS_ISDBT:
|
||||||
ret = tune_isdbt(fe);
|
ret = tune_isdbt(fe);
|
||||||
break;
|
break;
|
||||||
|
case SYS_DVBC_ANNEX_B:
|
||||||
|
ret = tune_j83b(fe);
|
||||||
|
break;
|
||||||
|
case SYS_DVBC_ANNEX_C:
|
||||||
|
case SYS_ISDBC:
|
||||||
|
ret = tune_isdbc(fe);
|
||||||
|
break;
|
||||||
|
case SYS_ISDBS:
|
||||||
|
ret = tune_isdbs(fe);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -699,7 +699,7 @@ static void send_option(struct oscon *con)
|
|||||||
#define PAR2STR(par) ((p->set & (1UL << PARAM_##par)) ? par##2str[p->param[PARAM_POL]] : "")
|
#define PAR2STR(par) ((p->set & (1UL << PARAM_##par)) ? par##2str[p->param[PARAM_POL]] : "")
|
||||||
|
|
||||||
char *pol2str[] = {"", "v", "h", "r", "l", NULL};
|
char *pol2str[] = {"", "v", "h", "r", "l", NULL};
|
||||||
char *msys2str [] = {"", "undef", "dvbc", "dvbcb", "dvbt", "dss", "dvbs", "dvbs2", "dvbh",
|
char *msys2str [] = {"", "undef", "dvbc", "j83b", "dvbt", "dss", "dvbs", "dvbs2", "dvbh",
|
||||||
"isdbt", "isdbs", "isdbc", "atsc", "atscmh", "dtmb", "cmmb", "dab",
|
"isdbt", "isdbs", "isdbc", "atsc", "atscmh", "dtmb", "cmmb", "dab",
|
||||||
"dvbt2", "turbo", "dvbcc", "dvbc2", NULL};
|
"dvbt2", "turbo", "dvbcc", "dvbc2", NULL};
|
||||||
char *mtype2str [] = {"", "qpsk", "16qam", "32qam",
|
char *mtype2str [] = {"", "qpsk", "16qam", "32qam",
|
||||||
|
Loading…
Reference in New Issue
Block a user