minisatip: added -Q quattro, -L master/slave and -X unicable input options
This commit is contained in:
parent
ccd6092de2
commit
a89e966c0e
8
dist/README
vendored
8
dist/README
vendored
@ -40,6 +40,14 @@ Minisatip config:
|
|||||||
- you may add extra parameters to MINISATIP_OPTS= in /etc/sysconfig/config
|
- you may add extra parameters to MINISATIP_OPTS= in /etc/sysconfig/config
|
||||||
- example 1: only two tuners: MINISATIP_OPTS="-e 0-1"
|
- example 1: only two tuners: MINISATIP_OPTS="-e 0-1"
|
||||||
- example 2: unicable: MINISATIP_OPTS="-u 0:1-1420,1:0-1210,2:2-1680,3:3-2040"
|
- example 2: unicable: MINISATIP_OPTS="-u 0:1-1420,1:0-1210,2:2-1680,3:3-2040"
|
||||||
|
- AXE hardware specific options:
|
||||||
|
-L link adapters (identical src,lo/hi,h/v), the format is M:S (master:slave)
|
||||||
|
-Q quattro LNB config (H/H,H/V,L/H,L/V)
|
||||||
|
-X X AXE unicable/jess input (0-3)
|
||||||
|
- example 3: unicable coax in input 2: MINISATIP_OPTS="-X 1"
|
||||||
|
- example 4: quattro LNB: MINISATIP_OPTS="-Q"
|
||||||
|
- example 5: coax in inputs 1,2, tuner 3 slave to input 1, tuner 4 slave to input 2
|
||||||
|
MINISATIP_OPTS="-L 0:2,1:3"
|
||||||
|
|
||||||
OSCAM config:
|
OSCAM config:
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
diff --git a/adapter.c b/adapter.c
|
diff --git a/adapter.c b/adapter.c
|
||||||
index 285faea..fe3ce54 100755
|
index 285faea..01f54b8 100755
|
||||||
--- a/adapter.c
|
--- a/adapter.c
|
||||||
+++ b/adapter.c
|
+++ b/adapter.c
|
||||||
@@ -29,10 +29,15 @@
|
@@ -29,10 +29,15 @@
|
||||||
@ -81,6 +81,15 @@ index 285faea..fe3ce54 100755
|
|||||||
init_dvb_parameters (&a[i].tp);
|
init_dvb_parameters (&a[i].tp);
|
||||||
mark_pids_deleted (i, -1, NULL);
|
mark_pids_deleted (i, -1, NULL);
|
||||||
update_pids (i);
|
update_pids (i);
|
||||||
|
@@ -165,7 +197,7 @@ init_hw ()
|
||||||
|
a[i].sock =
|
||||||
|
sockets_add (a[i].dvr, NULL, i, TYPE_DVR, (socket_action) read_dmx,
|
||||||
|
(socket_action) close_adapter_for_socket, (socket_action ) adapter_timeout);
|
||||||
|
- memset (a[i].buf, 0, ADAPTER_BUFFER + 1);
|
||||||
|
+ //memset (a[i].buf, 0, ADAPTER_BUFFER + 1);
|
||||||
|
set_socket_buffer (a[i].sock, a[i].buf, ADAPTER_BUFFER);
|
||||||
|
sockets_timeout (a[i].sock, 60000);
|
||||||
|
LOG ("done opening adapter %i fe_sys %d", i, a[i].tp.sys);
|
||||||
@@ -194,6 +226,24 @@ close_adapter (int na)
|
@@ -194,6 +226,24 @@ close_adapter (int na)
|
||||||
mark_pids_deleted (na, -1, NULL);
|
mark_pids_deleted (na, -1, NULL);
|
||||||
update_pids (na);
|
update_pids (na);
|
||||||
@ -200,8 +209,40 @@ index 285faea..fe3ce54 100755
|
|||||||
t->c2tft, t->ds, t->plp, t->inversion);
|
t->c2tft, t->ds, t->plp, t->inversion);
|
||||||
for (i = 0; i < MAX_PIDS; i++)
|
for (i = 0; i < MAX_PIDS; i++)
|
||||||
if (use_ad && ad->pids[i].flags == 1)
|
if (use_ad && ad->pids[i].flags == 1)
|
||||||
|
@@ -850,6 +920,31 @@ void set_unicable_adapters(char *o, int type)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
+void set_link_adapters(char *o)
|
||||||
|
+{
|
||||||
|
+ int i, la, a_id, b_id;
|
||||||
|
+ char buf[100], *arg[20], *sep1;
|
||||||
|
+
|
||||||
|
+ strncpy(buf, o, sizeof(buf)-1);
|
||||||
|
+ buf[sizeof(buf)-1] = '\0';
|
||||||
|
+ la = split(arg, buf, sizeof(arg), ',');
|
||||||
|
+ for (i=0; i<la; i++)
|
||||||
|
+ {
|
||||||
|
+ a_id=map_intd(arg[i], NULL, -1);
|
||||||
|
+ if (a_id < 0 || a_id >= MAX_ADAPTERS)
|
||||||
|
+ continue;
|
||||||
|
+ sep1 = strchr(arg[i], ':');
|
||||||
|
+ if (!sep1)
|
||||||
|
+ continue;
|
||||||
|
+ b_id=map_intd(sep1 + 1, NULL, -1);
|
||||||
|
+ if (b_id < 0 || b_id >= MAX_ADAPTERS)
|
||||||
|
+ continue;
|
||||||
|
+ if (a_id == b_id || a[a_id].slave)
|
||||||
|
+ continue;
|
||||||
|
+ a[b_id].slave = a_id + 1;
|
||||||
|
+ LOG("Setting adapter %d as master for adapter %d", a_id, b_id);
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
|
||||||
|
int delsys_match(adapter *ad, int del_sys)
|
||||||
|
{
|
||||||
diff --git a/adapter.h b/adapter.h
|
diff --git a/adapter.h b/adapter.h
|
||||||
index 629bd9c..caa1019 100755
|
index 629bd9c..ec9f24f 100755
|
||||||
--- a/adapter.h
|
--- a/adapter.h
|
||||||
+++ b/adapter.h
|
+++ b/adapter.h
|
||||||
@@ -7,7 +7,7 @@
|
@@ -7,7 +7,7 @@
|
||||||
@ -213,6 +254,22 @@ index 629bd9c..caa1019 100755
|
|||||||
typedef struct struct_pid
|
typedef struct struct_pid
|
||||||
{
|
{
|
||||||
int pid; // pid for this demux - not used
|
int pid; // pid for this demux - not used
|
||||||
|
@@ -45,6 +45,7 @@ typedef struct struct_adapter
|
||||||
|
int switch_type;
|
||||||
|
int uslot; // unicable/jess slot
|
||||||
|
int ufreq; // unicable/jess frequency
|
||||||
|
+ int slave;
|
||||||
|
} adapter;
|
||||||
|
|
||||||
|
int init_hw ();
|
||||||
|
@@ -65,6 +66,7 @@ void dump_pids (int aid);
|
||||||
|
void sort_pids (int aid);
|
||||||
|
void enable_adapters(char *o);
|
||||||
|
void set_unicable_adapters(char *o, int type);
|
||||||
|
+void set_link_adapters(char *o);
|
||||||
|
|
||||||
|
int delsys_match(adapter *ad, int del_sys);
|
||||||
|
|
||||||
diff --git a/axe.h b/axe.h
|
diff --git a/axe.h b/axe.h
|
||||||
new file mode 100644
|
new file mode 100644
|
||||||
index 0000000..4c62d86
|
index 0000000..4c62d86
|
||||||
@ -333,7 +390,7 @@ index 0000000..4c62d86
|
|||||||
+
|
+
|
||||||
+#endif
|
+#endif
|
||||||
diff --git a/dvb.c b/dvb.c
|
diff --git a/dvb.c b/dvb.c
|
||||||
index 5701bd2..7e1686d 100755
|
index 5701bd2..497526a 100755
|
||||||
--- a/dvb.c
|
--- a/dvb.c
|
||||||
+++ b/dvb.c
|
+++ b/dvb.c
|
||||||
@@ -41,6 +41,10 @@
|
@@ -41,6 +41,10 @@
|
||||||
@ -407,61 +464,134 @@ index 5701bd2..7e1686d 100755
|
|||||||
if (ioctl(fd, FE_SET_VOLTAGE, SEC_VOLTAGE_13) == -1)
|
if (ioctl(fd, FE_SET_VOLTAGE, SEC_VOLTAGE_13) == -1)
|
||||||
LOG("send_jess: pre voltage SEC_VOLTAGE_13 failed for fd %d: %s", fd, strerror(errno));
|
LOG("send_jess: pre voltage SEC_VOLTAGE_13 failed for fd %d: %s", fd, strerror(errno));
|
||||||
msleep(15);
|
msleep(15);
|
||||||
@@ -332,10 +368,26 @@ int setup_switch (int frontend_fd, transponder *tp)
|
@@ -320,7 +356,7 @@ int setup_switch (int frontend_fd, transponder *tp)
|
||||||
|
int diseqc = (tp->diseqc > 0)? tp->diseqc - 1: 0;
|
||||||
|
int freq = tp->freq;
|
||||||
|
int pol = (tp->pol - 1) & 1;
|
||||||
|
-
|
||||||
|
+
|
||||||
|
if (freq < SLOF)
|
||||||
|
{
|
||||||
|
freq = (freq - LOF1);
|
||||||
|
@@ -330,12 +366,100 @@ int setup_switch (int frontend_fd, transponder *tp)
|
||||||
|
hiband = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
+#ifdef AXE
|
||||||
|
+ adapter *ad, *ad2, *adm;
|
||||||
|
+ int input = 0, aid;
|
||||||
|
+
|
||||||
|
+ if (tp->switch_type != SWITCH_UNICABLE && tp->switch_type != SWITCH_JESS) {
|
||||||
|
+ for (aid = 0; aid < 4; aid++) {
|
||||||
|
+ ad = get_adapter(aid);
|
||||||
|
+ LOGL(3, "axe adapter %i fe fd %d", aid, ad->fe);
|
||||||
|
+ if (ad && ad->fe == frontend_fd)
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+ if (aid >= 4) {
|
||||||
|
+ LOG("axe_fe: unknown adapter for fd %d", frontend_fd);
|
||||||
|
+ return 0;
|
||||||
|
+ }
|
||||||
|
+ input = aid;
|
||||||
|
+ if (ad && !opts.quattro) {
|
||||||
|
+ adm = get_adapter(ad->slave ? ad->slave - 1 : ad->pa);
|
||||||
|
+ if (adm == NULL) {
|
||||||
|
+ LOG("axe_fe: unknown master adapter %d", input);
|
||||||
|
+ return 0;
|
||||||
|
+ }
|
||||||
|
+ if (adm->tp.old_pol >= 0) {
|
||||||
|
+ for (aid = 0; aid < 4; aid++) {
|
||||||
|
+ ad2 = get_adapter(aid);
|
||||||
|
+ if (ad == ad2) continue;
|
||||||
|
+ if (ad2->slave && ad2->slave - 1 != adm->pa) continue;
|
||||||
|
+ if (!ad2->slave && ad2 != adm) continue;
|
||||||
|
+ if (ad2->sid_cnt > 0) break;
|
||||||
|
+ }
|
||||||
|
+ if (adm != ad && aid < 4 &&
|
||||||
|
+ (adm->tp.old_pol != pol ||
|
||||||
|
+ adm->tp.old_hiband != hiband ||
|
||||||
|
+ adm->tp.old_diseqc != diseqc))
|
||||||
|
+ return 0;
|
||||||
|
+ }
|
||||||
|
+ if (ad->slave) {
|
||||||
|
+ input = ad->slave - 1;
|
||||||
|
+ adm = get_adapter(input);
|
||||||
|
+ if (adm == NULL) {
|
||||||
|
+ LOG("axe_fe: unknown master adapter %d", input);
|
||||||
|
+ return 0;
|
||||||
|
+ }
|
||||||
|
+ if(adm->tp.old_pol != pol ||
|
||||||
|
+ adm->tp.old_hiband != hiband ||
|
||||||
|
+ adm->tp.old_diseqc != diseqc) {
|
||||||
|
+ send_diseqc(adm->fe, diseqc, pol, hiband);
|
||||||
|
+ adm->tp.old_pol = pol;
|
||||||
|
+ adm->tp.old_hiband = hiband;
|
||||||
|
+ adm->tp.old_diseqc = diseqc;
|
||||||
|
+ }
|
||||||
|
+ goto axe;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ if (ad && opts.quattro) {
|
||||||
|
+ input = ((hiband ^ 1) << 1) | (pol ^ 1);
|
||||||
|
+ adm = get_adapter(input);
|
||||||
|
+ if (adm == NULL) {
|
||||||
|
+ LOG("axe_fe: unknown master adapter %d", input);
|
||||||
|
+ return 0;
|
||||||
|
+ }
|
||||||
|
+ if(adm->tp.old_pol != pol || adm->tp.old_hiband != hiband) {
|
||||||
|
+ send_diseqc(adm->fe, 0, pol, hiband);
|
||||||
|
+ adm->tp.old_pol = pol;
|
||||||
|
+ adm->tp.old_hiband = hiband;
|
||||||
|
+ adm->tp.old_diseqc = 0;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ } else {
|
||||||
|
+ input = opts.axe_unicinp;
|
||||||
|
+ ad = get_adapter(input);
|
||||||
|
+ if (ad == NULL) {
|
||||||
|
+ LOGL(3, "axe setup: unable to find adapter %d", input);
|
||||||
|
+ return 0;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
if(tp->switch_type == SWITCH_UNICABLE)
|
if(tp->switch_type == SWITCH_UNICABLE)
|
||||||
{
|
{
|
||||||
+#ifdef AXE
|
+#ifdef AXE
|
||||||
+ adapter *a = get_adapter(0);
|
+ if (ad)
|
||||||
+ if (a)
|
+ freq = send_unicable(ad->fe, freq / 1000, diseqc, pol, hiband, tp->uslot, tp->ufreq);
|
||||||
+ freq = send_unicable(a->fe, freq / 1000, diseqc, pol, hiband, tp->uslot, tp->ufreq);
|
|
||||||
+ else
|
|
||||||
+ LOGL(3, "axe unicable setup: unable to find adapter 0");
|
|
||||||
+#else
|
+#else
|
||||||
freq = send_unicable(frontend_fd, freq / 1000, diseqc, pol, hiband, tp->uslot, tp->ufreq);
|
freq = send_unicable(frontend_fd, freq / 1000, diseqc, pol, hiband, tp->uslot, tp->ufreq);
|
||||||
+#endif
|
+#endif
|
||||||
}else if(tp->switch_type == SWITCH_JESS)
|
}else if(tp->switch_type == SWITCH_JESS)
|
||||||
{
|
{
|
||||||
+#ifdef AXE
|
+#ifdef AXE
|
||||||
+ adapter *a = get_adapter(0);
|
+ if (ad)
|
||||||
+ if (a)
|
+ freq = send_jess(ad->fe, freq / 1000, diseqc, pol, hiband, tp->uslot, tp->ufreq);
|
||||||
+ freq = send_jess(a->fe, freq / 1000, diseqc, pol, hiband, tp->uslot, tp->ufreq);
|
|
||||||
+ else
|
|
||||||
+ LOGL(3, "axe jess setup: unable to find adapter 0");
|
|
||||||
+#else
|
+#else
|
||||||
freq = send_jess(frontend_fd, freq / 1000, diseqc, pol, hiband, tp->uslot, tp->ufreq);
|
freq = send_jess(frontend_fd, freq / 1000, diseqc, pol, hiband, tp->uslot, tp->ufreq);
|
||||||
+#endif
|
+#endif
|
||||||
}else
|
}else
|
||||||
{
|
{
|
||||||
if(tp->old_pol != pol || tp->old_hiband != hiband || tp->old_diseqc != diseqc)
|
if(tp->old_pol != pol || tp->old_hiband != hiband || tp->old_diseqc != diseqc)
|
||||||
@@ -343,6 +395,26 @@ int setup_switch (int frontend_fd, transponder *tp)
|
@@ -343,6 +467,16 @@ int setup_switch (int frontend_fd, transponder *tp)
|
||||||
else
|
else
|
||||||
LOGL(3, "Skip sending diseqc commands since the switch position doesn't need to be changed: pol %d, hiband %d, switch position %d", pol, hiband, diseqc);
|
LOGL(3, "Skip sending diseqc commands since the switch position doesn't need to be changed: pol %d, hiband %d, switch position %d", pol, hiband, diseqc);
|
||||||
}
|
}
|
||||||
+#ifdef AXE
|
+#ifdef AXE
|
||||||
+ {
|
+axe:
|
||||||
+ int aid = 0;
|
+ LOGL(3, "axe_fe: reset for fd %d adapter %d input %d", frontend_fd, ad ? ad->pa : -1, input);
|
||||||
+ if (tp->switch_type != SWITCH_UNICABLE && tp->switch_type != SWITCH_JESS) {
|
|
||||||
+ for (aid = 0; aid < 4; aid++) {
|
|
||||||
+ adapter *a = get_adapter(aid);
|
|
||||||
+ LOGL(3, "axe adapter %i fe fd %d", aid, a->fe);
|
|
||||||
+ if (a && a->fe == frontend_fd)
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
+ if (aid >= 4)
|
|
||||||
+ LOG("axe_fe: unknown adapter for fd %d", frontend_fd);
|
|
||||||
+ }
|
|
||||||
+ LOGL(3, "axe_fe: reset for fd %d adapter %d", frontend_fd, aid);
|
|
||||||
+ if (axe_fe_reset(frontend_fd) < 0)
|
+ if (axe_fe_reset(frontend_fd) < 0)
|
||||||
+ LOG("axe_fe: RESET failed for fd %d: %s", frontend_fd, strerror(errno));
|
+ LOG("axe_fe: RESET failed for fd %d: %s", frontend_fd, strerror(errno));
|
||||||
+ if (aid < 4 && axe_fe_input(frontend_fd, aid))
|
+ if (axe_fe_input(frontend_fd, input))
|
||||||
+ LOG("axe_fe: INPUT failed for fd %d: %s", frontend_fd, strerror(errno));
|
+ LOG("axe_fe: INPUT failed for fd %d input %d: %s", frontend_fd, input, strerror(errno));
|
||||||
+ }
|
+ if (opts.quattro)
|
||||||
|
+ return freq;
|
||||||
+#endif
|
+#endif
|
||||||
|
|
||||||
tp->old_pol = pol;
|
tp->old_pol = pol;
|
||||||
tp->old_hiband = hiband;
|
tp->old_hiband = hiband;
|
||||||
@@ -383,8 +455,10 @@ tune_it_s2 (int fd_frontend, transponder * tp)
|
@@ -383,8 +517,10 @@ tune_it_s2 (int fd_frontend, transponder * tp)
|
||||||
{.cmd = DTV_INVERSION,.u.data = 0},
|
{.cmd = DTV_INVERSION,.u.data = 0},
|
||||||
{.cmd = DTV_SYMBOL_RATE,.u.data = 0},
|
{.cmd = DTV_SYMBOL_RATE,.u.data = 0},
|
||||||
{.cmd = DTV_INNER_FEC,.u.data = 0},
|
{.cmd = DTV_INNER_FEC,.u.data = 0},
|
||||||
@ -472,7 +602,12 @@ index 5701bd2..7e1686d 100755
|
|||||||
{.cmd = DTV_TUNE},
|
{.cmd = DTV_TUNE},
|
||||||
};
|
};
|
||||||
static struct dtv_properties dvbs2_cmdseq =
|
static struct dtv_properties dvbs2_cmdseq =
|
||||||
@@ -465,8 +539,10 @@ tune_it_s2 (int fd_frontend, transponder * tp)
|
@@ -462,11 +598,15 @@ tune_it_s2 (int fd_frontend, transponder * tp)
|
||||||
|
tp->mtype = QPSK;
|
||||||
|
bpol = getTick();
|
||||||
|
if_freq = setup_switch (fd_frontend, tp);
|
||||||
|
+ if (!if_freq)
|
||||||
|
+ return -404;
|
||||||
p = &dvbs2_cmdseq;
|
p = &dvbs2_cmdseq;
|
||||||
p->props[DELSYS].u.data = tp->sys;
|
p->props[DELSYS].u.data = tp->sys;
|
||||||
p->props[MODULATION].u.data = tp->mtype;
|
p->props[MODULATION].u.data = tp->mtype;
|
||||||
@ -483,7 +618,7 @@ index 5701bd2..7e1686d 100755
|
|||||||
p->props[INVERSION].u.data = tp->inversion;
|
p->props[INVERSION].u.data = tp->inversion;
|
||||||
p->props[SYMBOL_RATE].u.data = tp->sr;
|
p->props[SYMBOL_RATE].u.data = tp->sr;
|
||||||
p->props[FEC_INNER].u.data = tp->fec;
|
p->props[FEC_INNER].u.data = tp->fec;
|
||||||
@@ -475,7 +551,12 @@ tune_it_s2 (int fd_frontend, transponder * tp)
|
@@ -475,7 +615,12 @@ tune_it_s2 (int fd_frontend, transponder * tp)
|
||||||
LOG("tuning to %d(%d) pol: %s (%d) sr:%d fec:%s delsys:%s mod:%s rolloff:%s pilot:%s, ts clear=%d, ts pol=%d",
|
LOG("tuning to %d(%d) pol: %s (%d) sr:%d fec:%s delsys:%s mod:%s rolloff:%s pilot:%s, ts clear=%d, ts pol=%d",
|
||||||
tp->freq, p->props[FREQUENCY].u.data, get_pol(tp->pol), tp->pol, p->props[SYMBOL_RATE].u.data, fe_fec[p->props[FEC_INNER].u.data],
|
tp->freq, p->props[FREQUENCY].u.data, get_pol(tp->pol), tp->pol, p->props[SYMBOL_RATE].u.data, fe_fec[p->props[FEC_INNER].u.data],
|
||||||
fe_delsys[p->props[DELSYS].u.data], fe_modulation[p->props[MODULATION].u.data],
|
fe_delsys[p->props[DELSYS].u.data], fe_modulation[p->props[MODULATION].u.data],
|
||||||
@ -497,7 +632,7 @@ index 5701bd2..7e1686d 100755
|
|||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -560,6 +641,20 @@ set_pid (int hw, int ad, uint16_t i_pid)
|
@@ -560,6 +705,20 @@ set_pid (int hw, int ad, uint16_t i_pid)
|
||||||
char buf[100];
|
char buf[100];
|
||||||
int fd;
|
int fd;
|
||||||
|
|
||||||
@ -518,7 +653,7 @@ index 5701bd2..7e1686d 100755
|
|||||||
if ( i_pid > 8192 )
|
if ( i_pid > 8192 )
|
||||||
LOG_AND_RETURN(-1, "pid %d > 8192 for /dev/dvb/adapter%d/demux%d", i_pid, hw, ad);
|
LOG_AND_RETURN(-1, "pid %d > 8192 for /dev/dvb/adapter%d/demux%d", i_pid, hw, ad);
|
||||||
|
|
||||||
@@ -585,6 +680,7 @@ set_pid (int hw, int ad, uint16_t i_pid)
|
@@ -585,6 +744,7 @@ set_pid (int hw, int ad, uint16_t i_pid)
|
||||||
}
|
}
|
||||||
|
|
||||||
LOG ("setting filter on PID %d for fd %d", i_pid, fd);
|
LOG ("setting filter on PID %d for fd %d", i_pid, fd);
|
||||||
@ -526,7 +661,7 @@ index 5701bd2..7e1686d 100755
|
|||||||
|
|
||||||
return fd;
|
return fd;
|
||||||
}
|
}
|
||||||
@@ -592,6 +688,17 @@ set_pid (int hw, int ad, uint16_t i_pid)
|
@@ -592,6 +752,17 @@ set_pid (int hw, int ad, uint16_t i_pid)
|
||||||
|
|
||||||
int del_filters (int fd, int pid)
|
int del_filters (int fd, int pid)
|
||||||
{
|
{
|
||||||
@ -544,7 +679,7 @@ index 5701bd2..7e1686d 100755
|
|||||||
if (fd < 0)
|
if (fd < 0)
|
||||||
LOG_AND_RETURN(0, "DMX_STOP on an invalid handle %d, pid %d", fd, pid);
|
LOG_AND_RETURN(0, "DMX_STOP on an invalid handle %d, pid %d", fd, pid);
|
||||||
if (ioctl (fd, DMX_STOP) < 0)
|
if (ioctl (fd, DMX_STOP) < 0)
|
||||||
@@ -599,6 +706,7 @@ int del_filters (int fd, int pid)
|
@@ -599,6 +770,7 @@ int del_filters (int fd, int pid)
|
||||||
else
|
else
|
||||||
LOG ("clearing filters on PID %d FD %d", pid, fd);
|
LOG ("clearing filters on PID %d FD %d", pid, fd);
|
||||||
close (fd);
|
close (fd);
|
||||||
@ -552,7 +687,7 @@ index 5701bd2..7e1686d 100755
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -606,6 +714,15 @@ int del_filters (int fd, int pid)
|
@@ -606,6 +778,15 @@ int del_filters (int fd, int pid)
|
||||||
fe_delivery_system_t
|
fe_delivery_system_t
|
||||||
dvb_delsys (int aid, int fd, fe_delivery_system_t *sys)
|
dvb_delsys (int aid, int fd, fe_delivery_system_t *sys)
|
||||||
{
|
{
|
||||||
@ -568,7 +703,7 @@ index 5701bd2..7e1686d 100755
|
|||||||
int i, res, rv = 0;
|
int i, res, rv = 0;
|
||||||
struct dvb_frontend_info fe_info;
|
struct dvb_frontend_info fe_info;
|
||||||
|
|
||||||
@@ -703,6 +820,7 @@ dvb_delsys (int aid, int fd, fe_delivery_system_t *sys)
|
@@ -703,6 +884,7 @@ dvb_delsys (int aid, int fd, fe_delivery_system_t *sys)
|
||||||
|
|
||||||
LOG ("returning default from dvb_delsys => %s (count %d)", fe_delsys[rv] , nsys);
|
LOG ("returning default from dvb_delsys => %s (count %d)", fe_delsys[rv] , nsys);
|
||||||
return (fe_delivery_system_t) rv;
|
return (fe_delivery_system_t) rv;
|
||||||
@ -577,7 +712,7 @@ index 5701bd2..7e1686d 100755
|
|||||||
}
|
}
|
||||||
|
|
||||||
diff --git a/minisatip.c b/minisatip.c
|
diff --git a/minisatip.c b/minisatip.c
|
||||||
index d4076ba..4cc82dc 100755
|
index d4076ba..ef21839 100755
|
||||||
--- a/minisatip.c
|
--- a/minisatip.c
|
||||||
+++ b/minisatip.c
|
+++ b/minisatip.c
|
||||||
@@ -36,6 +36,7 @@
|
@@ -36,6 +36,7 @@
|
||||||
@ -588,7 +723,7 @@ index d4076ba..4cc82dc 100755
|
|||||||
#include "socketworks.h"
|
#include "socketworks.h"
|
||||||
#include "stream.h"
|
#include "stream.h"
|
||||||
#include "adapter.h"
|
#include "adapter.h"
|
||||||
@@ -62,6 +63,7 @@ usage ()
|
@@ -62,10 +63,14 @@ usage ()
|
||||||
-c X: bandwidth capping for the output to the network (default: unlimited)\n\
|
-c X: bandwidth capping for the output to the network (default: unlimited)\n\
|
||||||
-b X: set the DVR buffer to X KB (default: %dKB)\n\
|
-b X: set the DVR buffer to X KB (default: %dKB)\n\
|
||||||
-l increases the verbosity (you can use multiple -l), logging to stdout in foreground mode or in /tmp/log when a daemon\n\
|
-l increases the verbosity (you can use multiple -l), logging to stdout in foreground mode or in /tmp/log when a daemon\n\
|
||||||
@ -596,16 +731,23 @@ index d4076ba..4cc82dc 100755
|
|||||||
-p url: specify playlist url using X_SATIPM3U header \n\
|
-p url: specify playlist url using X_SATIPM3U header \n\
|
||||||
-u unicable_string: defines the unicable adapters (A) and their slot (S) and frequency (F):\n\
|
-u unicable_string: defines the unicable adapters (A) and their slot (S) and frequency (F):\n\
|
||||||
\tThe format is: A1:S1-F1[,A2:S2-F2[,...]] \n\
|
\tThe format is: A1:S1-F1[,A2:S2-F2[,...]] \n\
|
||||||
@@ -101,7 +103,7 @@ set_options (int argc, char *argv[])
|
-j jess_string: same format as unicable_string \n\
|
||||||
|
+ -L link adapters (identical src,lo/hi,h/v), the format is M:S (master:slave)\n\
|
||||||
|
+ -Q quattro LNB config (H/H,H/V,L/H,L/V)\n\
|
||||||
|
+ -X AXE unicable/jess input (0-3)\n\
|
||||||
|
",
|
||||||
|
DVR_BUFFER / 1024);
|
||||||
|
exit (1);
|
||||||
|
@@ -101,7 +106,7 @@ set_options (int argc, char *argv[])
|
||||||
opts.file_line = 0;
|
opts.file_line = 0;
|
||||||
memset(opts.playlist, sizeof(opts.playlist), 0);
|
memset(opts.playlist, sizeof(opts.playlist), 0);
|
||||||
|
|
||||||
- while ((opt = getopt (argc, argv, "flr:a:t:d:w:p:shc:b:m:p:e:x:u:j:")) != -1)
|
- while ((opt = getopt (argc, argv, "flr:a:t:d:w:p:shc:b:m:p:e:x:u:j:")) != -1)
|
||||||
+ while ((opt = getopt (argc, argv, "flr:a:t:d:w:p:shc:b:m:p:e:x:u:j:g")) != -1)
|
+ while ((opt = getopt (argc, argv, "flr:a:t:d:w:p:shc:b:m:p:e:x:u:j:gL:QX:")) != -1)
|
||||||
{
|
{
|
||||||
// printf("options %d %c %s\n",opt,opt,optarg);
|
// printf("options %d %c %s\n",opt,opt,optarg);
|
||||||
switch (opt)
|
switch (opt)
|
||||||
@@ -143,6 +145,12 @@ set_options (int argc, char *argv[])
|
@@ -143,6 +148,12 @@ set_options (int argc, char *argv[])
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -618,7 +760,36 @@ index d4076ba..4cc82dc 100755
|
|||||||
case HELP_OPT:
|
case HELP_OPT:
|
||||||
{
|
{
|
||||||
usage ();
|
usage ();
|
||||||
@@ -483,6 +491,11 @@ http_response (sockets *s, int rc, char *ah, char *desc, int cseq, int lr)
|
@@ -209,6 +220,28 @@ set_options (int argc, char *argv[])
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ case LINK_OPT:
|
||||||
|
+ {
|
||||||
|
+ set_link_adapters(optarg);
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ case QUATTRO_OPT:
|
||||||
|
+ {
|
||||||
|
+ opts.quattro = 1;
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ case AXE_UNICINP_OPT:
|
||||||
|
+ {
|
||||||
|
+ opts.axe_unicinp = atoi(optarg);
|
||||||
|
+ if (opts.axe_unicinp < 0 || opts.axe_unicinp > 3) {
|
||||||
|
+ LOG("unicable input %d out of range, using 0", opts.axe_unicinp);
|
||||||
|
+ opts.axe_unicinp = 0;
|
||||||
|
+ }
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -483,6 +516,11 @@ http_response (sockets *s, int rc, char *ah, char *desc, int cseq, int lr)
|
||||||
|
|
||||||
#define RBUF 4000
|
#define RBUF 4000
|
||||||
|
|
||||||
@ -630,7 +801,7 @@ index d4076ba..4cc82dc 100755
|
|||||||
int
|
int
|
||||||
read_rtsp (sockets * s)
|
read_rtsp (sockets * s)
|
||||||
{
|
{
|
||||||
@@ -507,8 +520,7 @@ read_rtsp (sockets * s)
|
@@ -507,8 +545,7 @@ read_rtsp (sockets * s)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -640,7 +811,7 @@ index d4076ba..4cc82dc 100755
|
|||||||
{
|
{
|
||||||
if( s->rlen > RBUF - 10 )
|
if( s->rlen > RBUF - 10 )
|
||||||
{
|
{
|
||||||
@@ -524,6 +536,9 @@ read_rtsp (sockets * s)
|
@@ -524,6 +561,9 @@ read_rtsp (sockets * s)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -650,7 +821,7 @@ index d4076ba..4cc82dc 100755
|
|||||||
rlen = s->rlen;
|
rlen = s->rlen;
|
||||||
s->rlen = 0;
|
s->rlen = 0;
|
||||||
|
|
||||||
@@ -726,8 +741,7 @@ read_http (sockets * s)
|
@@ -726,8 +766,7 @@ read_http (sockets * s)
|
||||||
"%s"
|
"%s"
|
||||||
"</device></root>";
|
"</device></root>";
|
||||||
|
|
||||||
@ -660,7 +831,7 @@ index d4076ba..4cc82dc 100755
|
|||||||
{
|
{
|
||||||
if( s->rlen > RBUF - 10 )
|
if( s->rlen > RBUF - 10 )
|
||||||
{
|
{
|
||||||
@@ -749,6 +763,9 @@ read_http (sockets * s)
|
@@ -749,6 +788,9 @@ read_http (sockets * s)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -670,7 +841,7 @@ index d4076ba..4cc82dc 100755
|
|||||||
rlen = s->rlen;
|
rlen = s->rlen;
|
||||||
s->rlen = 0;
|
s->rlen = 0;
|
||||||
|
|
||||||
@@ -904,6 +921,9 @@ ssdp_reply (sockets * s)
|
@@ -904,6 +946,9 @@ ssdp_reply (sockets * s)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -680,7 +851,7 @@ index d4076ba..4cc82dc 100755
|
|||||||
// not my uuid
|
// not my uuid
|
||||||
LOG("Received SSDP packet from %s:%d -> handle %d", inet_ntoa(s->sa.sin_addr), ntohs(s->sa.sin_port), s->sock);
|
LOG("Received SSDP packet from %s:%d -> handle %d", inet_ntoa(s->sa.sin_addr), ntohs(s->sa.sin_port), s->sock);
|
||||||
LOGL(3, "%s", s->buf);
|
LOGL(3, "%s", s->buf);
|
||||||
@@ -987,7 +1007,13 @@ main (int argc, char *argv[])
|
@@ -987,7 +1032,13 @@ main (int argc, char *argv[])
|
||||||
set_options (argc, argv);
|
set_options (argc, argv);
|
||||||
if (opts.daemon)
|
if (opts.daemon)
|
||||||
becomeDaemon ();
|
becomeDaemon ();
|
||||||
@ -694,7 +865,7 @@ index d4076ba..4cc82dc 100755
|
|||||||
readBootID();
|
readBootID();
|
||||||
if ((ssdp = udp_bind (NULL, 1900)) < 1)
|
if ((ssdp = udp_bind (NULL, 1900)) < 1)
|
||||||
FAIL ("SSDP: Could not bind on udp port 1900");
|
FAIL ("SSDP: Could not bind on udp port 1900");
|
||||||
@@ -1021,7 +1047,9 @@ main (int argc, char *argv[])
|
@@ -1021,7 +1072,9 @@ main (int argc, char *argv[])
|
||||||
select_and_execute ();
|
select_and_execute ();
|
||||||
unlink(PID_FILE);
|
unlink(PID_FILE);
|
||||||
free_all ();
|
free_all ();
|
||||||
@ -705,7 +876,7 @@ index d4076ba..4cc82dc 100755
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1247,12 +1275,16 @@ void _log(int level, char * file, int line, const char *fmt, ...) {
|
@@ -1247,12 +1300,16 @@ void _log(int level, char * file, int line, const char *fmt, ...) {
|
||||||
idx = 1;
|
idx = 1;
|
||||||
else if ( idx < 0)
|
else if ( idx < 0)
|
||||||
idx = 0;
|
idx = 0;
|
||||||
@ -725,7 +896,7 @@ index d4076ba..4cc82dc 100755
|
|||||||
both = 0;
|
both = 0;
|
||||||
va_start(arg, fmt);
|
va_start(arg, fmt);
|
||||||
len += vsnprintf(output[idx] + len, sizeof(output[0]) - len, fmt, arg);
|
len += vsnprintf(output[idx] + len, sizeof(output[0]) - len, fmt, arg);
|
||||||
@@ -1271,9 +1303,9 @@ void _log(int level, char * file, int line, const char *fmt, ...) {
|
@@ -1271,9 +1328,9 @@ void _log(int level, char * file, int line, const char *fmt, ...) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if(both){
|
if(both){
|
||||||
@ -738,18 +909,21 @@ index d4076ba..4cc82dc 100755
|
|||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
}
|
}
|
||||||
diff --git a/minisatip.h b/minisatip.h
|
diff --git a/minisatip.h b/minisatip.h
|
||||||
index 821e756..4f4e6ac 100755
|
index 821e756..e2be224 100755
|
||||||
--- a/minisatip.h
|
--- a/minisatip.h
|
||||||
+++ b/minisatip.h
|
+++ b/minisatip.h
|
||||||
@@ -30,6 +30,7 @@ void set_options (int argc, char *argv[]);
|
@@ -30,6 +30,10 @@ void set_options (int argc, char *argv[]);
|
||||||
#define ENABLE_ADAPTERS_OPT 'e'
|
#define ENABLE_ADAPTERS_OPT 'e'
|
||||||
#define UNICABLE_OPT 'u'
|
#define UNICABLE_OPT 'u'
|
||||||
#define JESS_OPT 'j'
|
#define JESS_OPT 'j'
|
||||||
+#define SYSLOG_OPT 'g'
|
+#define SYSLOG_OPT 'g'
|
||||||
|
+#define LINK_OPT 'L'
|
||||||
|
+#define QUATTRO_OPT 'Q'
|
||||||
|
+#define AXE_UNICINP_OPT 'X'
|
||||||
|
|
||||||
#define PID_FILE "/var/run/minisatip.pid"
|
#define PID_FILE "/var/run/minisatip.pid"
|
||||||
struct struct_opts
|
struct struct_opts
|
||||||
@@ -39,6 +40,7 @@ struct struct_opts
|
@@ -39,6 +43,7 @@ struct struct_opts
|
||||||
char *disc_host; //discover host
|
char *disc_host; //discover host
|
||||||
char mac[13];
|
char mac[13];
|
||||||
unsigned int log,
|
unsigned int log,
|
||||||
@ -757,6 +931,15 @@ index 821e756..4f4e6ac 100755
|
|||||||
start_rtp,
|
start_rtp,
|
||||||
http_port;
|
http_port;
|
||||||
int timeout_sec;
|
int timeout_sec;
|
||||||
|
@@ -50,6 +55,8 @@ struct struct_opts
|
||||||
|
int dvr;
|
||||||
|
int force_scan;
|
||||||
|
int file_line;
|
||||||
|
+ int quattro;
|
||||||
|
+ int axe_unicinp;
|
||||||
|
char *last_log;
|
||||||
|
char playlist[200];
|
||||||
|
};
|
||||||
diff --git a/socketworks.c b/socketworks.c
|
diff --git a/socketworks.c b/socketworks.c
|
||||||
index b4891f1..1857089 100755
|
index b4891f1..1857089 100755
|
||||||
--- a/socketworks.c
|
--- a/socketworks.c
|
||||||
|
Loading…
Reference in New Issue
Block a user