minisatip/minisatip5: add -P (power), improve LNB standby logic

This commit is contained in:
Jaroslav Kysela 2016-02-23 21:05:47 +01:00
parent df0117dbbf
commit 55abb24cbc
2 changed files with 304 additions and 167 deletions

View File

@ -1,5 +1,5 @@
diff --git a/adapter.c b/adapter.c diff --git a/adapter.c b/adapter.c
index 285faea..97cb45d 100755 index 285faea..0b59730 100755
--- a/adapter.c --- a/adapter.c
+++ b/adapter.c +++ b/adapter.c
@@ -29,10 +29,15 @@ @@ -29,10 +29,15 @@
@ -49,7 +49,7 @@ index 285faea..97cb45d 100755
} }
for (na; na < MAX_ADAPTERS; na++) for (na; na < MAX_ADAPTERS; na++)
a[na].pa = a[na].fn = -1; a[na].pa = a[na].fn = -1;
@@ -122,9 +143,18 @@ init_hw () @@ -122,9 +143,23 @@ init_hw ()
find_adapters (); find_adapters ();
LOG ("trying to open [%d] adapter %d and frontend %d", i, a[i].pa, LOG ("trying to open [%d] adapter %d and frontend %d", i, a[i].pa,
a[i].fn); a[i].fn);
@ -57,10 +57,16 @@ index 285faea..97cb45d 100755
+ sprintf (buf, "/dev/axe/frontend-%d", a[i].pa); + sprintf (buf, "/dev/axe/frontend-%d", a[i].pa);
+#else +#else
sprintf (buf, "/dev/dvb/adapter%d/frontend%d", a[i].pa, a[i].fn); sprintf (buf, "/dev/dvb/adapter%d/frontend%d", a[i].pa, a[i].fn);
- a[i].fe = open (buf, O_RDWR | O_NONBLOCK);
+ if (a[i].fe2 > 0)
+ a[i].fe = a[i].fe2;
+ else
+#endif +#endif
a[i].fe = open (buf, O_RDWR | O_NONBLOCK); + a[i].fe = a[i].fe2 = open (buf, O_RDWR | O_NONBLOCK);
+ +
+#ifdef AXE +#ifdef AXE
+ a[i].fe2 = a[i].fe;
+ a[i].axe_feused = 0;
+ sprintf (buf, "/dev/axe/demuxts-%d", a[i].pa); + sprintf (buf, "/dev/axe/demuxts-%d", a[i].pa);
+#else +#else
sprintf (buf, "/dev/dvb/adapter%d/dvr%d", a[i].pa, a[i].fn); sprintf (buf, "/dev/dvb/adapter%d/dvr%d", a[i].pa, a[i].fn);
@ -68,7 +74,7 @@ index 285faea..97cb45d 100755
a[i].dvr = open (buf, O_RDONLY | O_NONBLOCK); a[i].dvr = open (buf, O_RDONLY | O_NONBLOCK);
if (a[i].fe < 0 || a[i].dvr < 0) if (a[i].fe < 0 || a[i].dvr < 0)
{ {
@@ -139,22 +169,24 @@ init_hw () @@ -139,22 +174,24 @@ init_hw ()
a[i].enabled = 1; a[i].enabled = 1;
if (!a[i].buf) if (!a[i].buf)
@ -96,7 +102,7 @@ index 285faea..97cb45d 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,8 +197,8 @@ init_hw () @@ -165,8 +202,8 @@ init_hw ()
a[i].sock = a[i].sock =
sockets_add (a[i].dvr, NULL, i, TYPE_DVR, (socket_action) read_dmx, sockets_add (a[i].dvr, NULL, i, TYPE_DVR, (socket_action) read_dmx,
(socket_action) close_adapter_for_socket, (socket_action ) adapter_timeout); (socket_action) close_adapter_for_socket, (socket_action ) adapter_timeout);
@ -107,34 +113,57 @@ index 285faea..97cb45d 100755
sockets_timeout (a[i].sock, 60000); sockets_timeout (a[i].sock, 60000);
LOG ("done opening adapter %i fe_sys %d", i, a[i].tp.sys); LOG ("done opening adapter %i fe_sys %d", i, a[i].tp.sys);
@@ -194,6 +226,26 @@ close_adapter (int na) @@ -179,7 +216,6 @@ init_hw ()
return num_adapters;
}
-
void
close_adapter (int na)
{
@@ -194,8 +230,41 @@ close_adapter (int na)
mark_pids_deleted (na, -1, NULL); mark_pids_deleted (na, -1, NULL);
update_pids (na); update_pids (na);
// if(a[na].dmx>0)close(a[na].dmx); // if(a[na].dmx>0)close(a[na].dmx);
+#ifdef AXE +#ifdef AXE
+ if (a[na].fe > 0) { + if (a[na].fe > 0) {
+ int i; + int i, j;
+ axe_fe_reset(a[na].fe); + a[na].fe = 0;
+ for (i = 0; i < 4; i++) + if (a[na].fe2 > 0)
+ if (i != na && a[i].sid_cnt > 0) break; + axe_fe_reset(a[na].fe2);
+ if (i >= 4) { + for (i = j = 0; i < 4; i++) {
+ LOG("AXE standby"); + a[i].axe_used &= ~(1 << na);
+ for (i = 0; i < 4; i++) { + if (a[i].axe_used || a[i].sid_cnt > 0) j++;
+ axe_fe_standby(a[i].fe, -1); + }
+ axe_set_tuner_led(i + 1, 0); + if (j > 0 && opts.axe_power > 1)
+ ioctl(a[i].fe, FE_SET_VOLTAGE, SEC_VOLTAGE_OFF); + goto nostandby;
+ a[i].tp.old_diseqc = a[i].tp.old_pol = a[i].tp.old_hiband = -1; + for (i = 0; i < 4; i++) {
+ if (a[i].axe_used != 0 || a[i].sid_cnt > 0) {
+ LOG("AXE standby: adapter %d busy (cnt=%d/used=%04x/fe=%d), keeping",
+ i, a[i].sid_cnt, a[i].axe_used, a[i].fe);
+ continue;
+ } + }
+ } else { + if (a[i].fe2 <= 0 || a[i].axe_feused == 0)
+ LOG("AXE standby: adapter %d busy (%d), keeping", i, a[i].sid_cnt); + continue;
+ LOG("AXE standby: adapter %d", i);
+ axe_fe_standby(a[i].fe2, -1);
+ axe_set_tuner_led(i + 1, 0);
+ ioctl(a[i].fe2, FE_SET_VOLTAGE, SEC_VOLTAGE_OFF);
+ close(a[i].fe2);
+ a[i].fe2 = a[i].axe_feused = 0;
+ a[i].tp.old_diseqc = a[i].tp.old_pol = a[i].tp.old_hiband = -1;
+ } + }
+ } + }
+nostandby:
+ axe_set_tuner_led(na + 1, 0); + axe_set_tuner_led(na + 1, 0);
+#endif +#else
if (a[na].fe > 0) if (a[na].fe > 0)
close (a[na].fe); close (a[na].fe);
+#endif
if (a[na].sock >= 0) if (a[na].sock >= 0)
@@ -366,8 +418,8 @@ close_adapter_for_stream (int sid, int aid) sockets_del (a[na].sock);
a[na].fe = 0;
@@ -366,8 +435,8 @@ close_adapter_for_stream (int sid, int aid)
// delete the attached PIDs as well // delete the attached PIDs as well
mark_pids_deleted (aid, sid, NULL); mark_pids_deleted (aid, sid, NULL);
update_pids (aid); update_pids (aid);
@ -145,7 +174,7 @@ index 285faea..97cb45d 100755
} }
@@ -410,7 +462,11 @@ update_pids (int aid) @@ -410,7 +479,11 @@ update_pids (int aid)
int tune (int aid, int sid) int tune (int aid, int sid)
{ {
adapter *ad = get_adapter(aid); adapter *ad = get_adapter(aid);
@ -158,7 +187,7 @@ index 285faea..97cb45d 100755
if(!ad) return -400; if(!ad) return -400;
ad->last_sort = getTick (); ad->last_sort = getTick ();
@@ -419,7 +475,13 @@ int tune (int aid, int sid) @@ -419,7 +492,13 @@ int tune (int aid, int sid)
ad->tp.switch_type = ad->switch_type; ad->tp.switch_type = ad->switch_type;
ad->tp.uslot = ad->uslot; ad->tp.uslot = ad->uslot;
ad->tp.ufreq = ad->ufreq; ad->tp.ufreq = ad->ufreq;
@ -173,7 +202,7 @@ index 285faea..97cb45d 100755
rv = tune_it_s2 (ad->fe, &ad->tp); rv = tune_it_s2 (ad->fe, &ad->tp);
a[aid].status = 0; a[aid].status = 0;
a[aid].status_cnt = 0; a[aid].status_cnt = 0;
@@ -428,6 +490,12 @@ int tune (int aid, int sid) @@ -428,6 +507,12 @@ int tune (int aid, int sid)
close_streams_for_adapter (aid, sid); close_streams_for_adapter (aid, sid);
update_pids (aid); update_pids (aid);
} }
@ -186,7 +215,7 @@ index 285faea..97cb45d 100755
} }
else else
LOG ("not tuning for SID %d (do_tune=%d, master_sid=%d)", sid, LOG ("not tuning for SID %d (do_tune=%d, master_sid=%d)", sid,
@@ -684,7 +752,11 @@ describe_adapter (int sid, int aid) @@ -684,7 +769,11 @@ describe_adapter (int sid, int aid)
memset (dad, 0, sizeof (dad)); memset (dad, 0, sizeof (dad));
x = 0; x = 0;
// do just max 3 signal check 1s after tune // do just max 3 signal check 1s after tune
@ -198,7 +227,7 @@ index 285faea..97cb45d 100755
{ {
int new_gs = 1; int new_gs = 1;
ts = getTick (); ts = getTick ();
@@ -701,11 +773,20 @@ describe_adapter (int sid, int aid) @@ -701,11 +790,20 @@ describe_adapter (int sid, int aid)
if (ad->max_snr <= ad->snr) ad->max_snr = (ad->snr>0)?ad->snr:1; if (ad->max_snr <= ad->snr) ad->max_snr = (ad->snr>0)?ad->snr:1;
LOG ("get_signal%s took %d ms for adapter %d handle %d (status: %d, ber: %d, strength:%d, snr: %d, max_strength: %d, max_snr: %d %d)", LOG ("get_signal%s took %d ms for adapter %d handle %d (status: %d, ber: %d, strength:%d, snr: %d, max_strength: %d, max_snr: %d %d)",
new_gs?"":"_new", getTick () - ts, aid, ad->fe, ad->status, ad->ber, ad->strength, ad->snr, ad->max_strength, ad->max_snr, opts.force_scan); new_gs?"":"_new", getTick () - ts, aid, ad->fe, ad->status, ad->ber, ad->strength, ad->snr, ad->max_strength, ad->max_snr, opts.force_scan);
@ -219,7 +248,7 @@ index 285faea..97cb45d 100755
} }
if(use_ad) if(use_ad)
{ {
@@ -715,14 +796,14 @@ describe_adapter (int sid, int aid) @@ -715,14 +813,14 @@ describe_adapter (int sid, int aid)
} }
if (t->sys == SYS_DVBS || t->sys == SYS_DVBS2) if (t->sys == SYS_DVBS || t->sys == SYS_DVBS2)
sprintf (dad, "ver=1.0;src=%d;tuner=%d,%d,%d,%d,%d,%s,%s,%s,%s,%s,%d,%s;pids=", sprintf (dad, "ver=1.0;src=%d;tuner=%d,%d,%d,%d,%d,%s,%s,%s,%s,%s,%d,%s;pids=",
@ -237,7 +266,7 @@ index 285faea..97cb45d 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)
@@ -825,7 +906,7 @@ void enable_adapters(char *o) @@ -825,7 +923,7 @@ void enable_adapters(char *o)
void set_unicable_adapters(char *o, int type) void set_unicable_adapters(char *o, int type)
{ {
@ -246,7 +275,7 @@ index 285faea..97cb45d 100755
char buf[100], *arg[20], *sep1, *sep2; char buf[100], *arg[20], *sep1, *sep2;
strncpy(buf, o, sizeof(buf)); strncpy(buf, o, sizeof(buf));
@@ -839,17 +920,67 @@ void set_unicable_adapters(char *o, int type) @@ -839,17 +937,67 @@ void set_unicable_adapters(char *o, int type)
sep2 = strchr(arg[i], '-'); sep2 = strchr(arg[i], '-');
if( !sep1 || !sep2) if( !sep1 || !sep2)
continue; continue;
@ -315,7 +344,7 @@ index 285faea..97cb45d 100755
int delsys_match(adapter *ad, int del_sys) int delsys_match(adapter *ad, int del_sys)
{ {
@@ -866,3 +997,71 @@ int delsys_match(adapter *ad, int del_sys) @@ -866,3 +1014,71 @@ int delsys_match(adapter *ad, int del_sys)
return 0; return 0;
} }
@ -388,18 +417,29 @@ index 285faea..97cb45d 100755
+} +}
+#endif +#endif
diff --git a/adapter.h b/adapter.h diff --git a/adapter.h b/adapter.h
index 629bd9c..2b435fb 100755 index 629bd9c..45024a4 100755
--- a/adapter.h --- a/adapter.h
+++ b/adapter.h +++ b/adapter.h
@@ -45,6 +45,7 @@ typedef struct struct_adapter @@ -24,7 +24,7 @@ typedef struct struct_adapter
{
int enabled;
int force_disable;
- int fe, dvr;
+ int fe, fe2, dvr;
int pa, fn;
// physical adapter, physical frontend number
fe_delivery_system_t sys[10];
@@ -45,6 +45,9 @@ typedef struct struct_adapter
int switch_type; int switch_type;
int uslot; // unicable/jess slot int uslot; // unicable/jess slot
int ufreq; // unicable/jess frequency int ufreq; // unicable/jess frequency
+ int slave; + int slave;
+ int axe_used;
+ int axe_feused;
} adapter; } adapter;
int init_hw (); int init_hw ();
@@ -65,7 +66,8 @@ void dump_pids (int aid); @@ -65,7 +68,8 @@ void dump_pids (int aid);
void sort_pids (int aid); void sort_pids (int aid);
void enable_adapters(char *o); void enable_adapters(char *o);
void set_unicable_adapters(char *o, int type); void set_unicable_adapters(char *o, int type);
@ -565,7 +605,7 @@ index 0000000..cfc1927
+ +
+#endif +#endif
diff --git a/dvb.c b/dvb.c diff --git a/dvb.c b/dvb.c
index 5701bd2..d143387 100755 index 5701bd2..6179588 100755
--- a/dvb.c --- a/dvb.c
+++ b/dvb.c +++ b/dvb.c
@@ -41,6 +41,10 @@ @@ -41,6 +41,10 @@
@ -579,7 +619,7 @@ index 5701bd2..d143387 100755
extern struct struct_opts opts; extern struct struct_opts opts;
@@ -215,6 +219,29 @@ msleep (uint32_t msec) @@ -215,6 +219,31 @@ msleep (uint32_t msec)
; ;
} }
@ -588,6 +628,8 @@ index 5701bd2..d143387 100755
+{ +{
+ int i; + int i;
+ adapter *a; + adapter *a;
+ if (opts.axe_power < 2)
+ return;
+ for (i = 0; i < 4; i++) { + for (i = 0; i < 4; i++) {
+ a = get_adapter(i); + a = get_adapter(i);
+ if (a == NULL || a->force_disable) + if (a == NULL || a->force_disable)
@ -609,7 +651,7 @@ index 5701bd2..d143387 100755
int send_diseqc(int fd, int pos, int pol, int hiband) int send_diseqc(int fd, int pos, int pol, int hiband)
{ {
struct dvb_diseqc_master_cmd cmd = { struct dvb_diseqc_master_cmd cmd = {
@@ -229,6 +256,9 @@ int send_diseqc(int fd, int pos, int pol, int hiband) @@ -229,6 +258,9 @@ int send_diseqc(int fd, int pos, int pol, int hiband)
if (ioctl(fd, FE_SET_TONE, SEC_TONE_OFF) == -1) if (ioctl(fd, FE_SET_TONE, SEC_TONE_OFF) == -1)
LOG("send_diseqc: FE_SET_TONE failed for fd %d: %s", fd, strerror(errno)); LOG("send_diseqc: FE_SET_TONE failed for fd %d: %s", fd, strerror(errno));
@ -619,7 +661,7 @@ index 5701bd2..d143387 100755
if (ioctl(fd, FE_SET_VOLTAGE, pol ? SEC_VOLTAGE_18 : SEC_VOLTAGE_13) == -1) if (ioctl(fd, FE_SET_VOLTAGE, pol ? SEC_VOLTAGE_18 : SEC_VOLTAGE_13) == -1)
LOG("send_diseqc: FE_SET_VOLTAGE failed for fd %d: %s", fd, strerror(errno)); LOG("send_diseqc: FE_SET_VOLTAGE failed for fd %d: %s", fd, strerror(errno));
@@ -252,8 +282,12 @@ int send_unicable(int fd, int freq, int pos, int pol, int hiband, int slot, int @@ -252,8 +284,12 @@ int send_unicable(int fd, int freq, int pos, int pol, int hiband, int slot, int
struct dvb_diseqc_master_cmd cmd = { struct dvb_diseqc_master_cmd cmd = {
{0xe0, 0x11, 0x5a, 0x00, 0x00}, 5 {0xe0, 0x11, 0x5a, 0x00, 0x00}, 5
}; };
@ -633,7 +675,7 @@ index 5701bd2..d143387 100755
t = (freq + ufreq + 2) / 4 - 350; t = (freq + ufreq + 2) / 4 - 350;
cmd.msg[3] = ((t & 0x0300) >> 8) | cmd.msg[3] = ((t & 0x0300) >> 8) |
@@ -262,12 +296,15 @@ int send_unicable(int fd, int freq, int pos, int pol, int hiband, int slot, int @@ -262,12 +298,15 @@ int send_unicable(int fd, int freq, int pos, int pol, int hiband, int slot, int
LOGL(3, "send_unicable fd %d, freq %d, ufreq %d, pos = %d, pol = %d, hiband = %d, slot %d, diseqc => %02x %02x %02x %02x %02x", LOGL(3, "send_unicable fd %d, freq %d, ufreq %d, pos = %d, pol = %d, hiband = %d, slot %d, diseqc => %02x %02x %02x %02x %02x",
fd, freq, ufreq, pos, pol, hiband, slot, cmd.msg[0], cmd.msg[1], cmd.msg[2], cmd.msg[3], cmd.msg[4]); fd, freq, ufreq, pos, pol, hiband, slot, cmd.msg[0], cmd.msg[1], cmd.msg[2], cmd.msg[3], cmd.msg[4]);
@ -650,7 +692,7 @@ index 5701bd2..d143387 100755
LOG("send_unicable: FE_SET_VOLTAGE failed for fd %d: %s", fd, strerror(errno)); LOG("send_unicable: FE_SET_VOLTAGE failed for fd %d: %s", fd, strerror(errno));
msleep(15); msleep(15);
if (ioctl(fd, FE_DISEQC_SEND_MASTER_CMD, &cmd) == -1) if (ioctl(fd, FE_DISEQC_SEND_MASTER_CMD, &cmd) == -1)
@@ -286,6 +323,7 @@ int send_jess(int fd, int freq, int pos, int pol, int hiband, int slot, int ufre @@ -286,6 +325,7 @@ int send_jess(int fd, int freq, int pos, int pol, int hiband, int slot, int ufre
}; };
// int t = (freq / 1000) - 100; // int t = (freq / 1000) - 100;
int t = freq - 100; int t = freq - 100;
@ -658,7 +700,7 @@ index 5701bd2..d143387 100755
cmd.msg[1] = slot << 3; cmd.msg[1] = slot << 3;
cmd.msg[1] |= ((t << 8) & 0x07); cmd.msg[1] |= ((t << 8) & 0x07);
@@ -295,12 +333,15 @@ int send_jess(int fd, int freq, int pos, int pol, int hiband, int slot, int ufre @@ -295,12 +335,15 @@ int send_jess(int fd, int freq, int pos, int pol, int hiband, int slot, int ufre
LOGL(3, "send_jess fd %d, freq %d, ufreq %d, pos = %d, pol = %d, hiband = %d, slot %d, diseqc => %02x %02x %02x %02x %02x", LOGL(3, "send_jess fd %d, freq %d, ufreq %d, pos = %d, pol = %d, hiband = %d, slot %d, diseqc => %02x %02x %02x %02x %02x",
fd, freq, ufreq, pos, pol, hiband, slot, cmd.msg[0], cmd.msg[1], cmd.msg[2], cmd.msg[3], cmd.msg[4]); fd, freq, ufreq, pos, pol, hiband, slot, cmd.msg[0], cmd.msg[1], cmd.msg[2], cmd.msg[3], cmd.msg[4]);
@ -675,7 +717,7 @@ index 5701bd2..d143387 100755
LOG("send_jess: FE_SET_VOLTAGE failed for fd %d: %s", fd, strerror(errno)); LOG("send_jess: FE_SET_VOLTAGE failed for fd %d: %s", fd, strerror(errno));
msleep(15); msleep(15);
if (ioctl(fd, FE_DISEQC_SEND_MASTER_CMD, &cmd) == -1) if (ioctl(fd, FE_DISEQC_SEND_MASTER_CMD, &cmd) == -1)
@@ -320,7 +361,7 @@ int setup_switch (int frontend_fd, transponder *tp) @@ -320,7 +363,7 @@ int setup_switch (int frontend_fd, transponder *tp)
int diseqc = (tp->diseqc > 0)? tp->diseqc - 1: 0; int diseqc = (tp->diseqc > 0)? tp->diseqc - 1: 0;
int freq = tp->freq; int freq = tp->freq;
int pol = (tp->pol - 1) & 1; int pol = (tp->pol - 1) & 1;
@ -684,7 +726,7 @@ index 5701bd2..d143387 100755
if (freq < SLOF) if (freq < SLOF)
{ {
freq = (freq - LOF1); freq = (freq - LOF1);
@@ -330,12 +371,108 @@ int setup_switch (int frontend_fd, transponder *tp) @@ -330,12 +373,111 @@ int setup_switch (int frontend_fd, transponder *tp)
hiband = 1; hiband = 1;
} }
@ -692,17 +734,18 @@ index 5701bd2..d143387 100755
+ adapter *ad, *ad2, *adm; + adapter *ad, *ad2, *adm;
+ int input = 0, aid; + int input = 0, aid;
+ +
+ 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;
+ }
+ ad->axe_feused = 1;
+ if (tp->switch_type != SWITCH_UNICABLE && tp->switch_type != SWITCH_JESS) { + 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; + input = aid;
+ if (ad && !opts.quattro) { + if (ad && !opts.quattro) {
+ adm = get_adapter(ad->slave ? ad->slave - 1 : ad->pa); + adm = get_adapter(ad->slave ? ad->slave - 1 : ad->pa);
@ -724,20 +767,17 @@ index 5701bd2..d143387 100755
+ adm->tp.old_diseqc != diseqc)) + adm->tp.old_diseqc != diseqc))
+ return 0; + return 0;
+ } + }
+ adm->axe_used |= (1 << aid);
+ adm->axe_feused = 1;
+ if (ad->slave) { + if (ad->slave) {
+ input = ad->slave - 1; + 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 || + if(adm->tp.old_pol != pol ||
+ adm->tp.old_hiband != hiband || + adm->tp.old_hiband != hiband ||
+ adm->tp.old_diseqc != diseqc) { + adm->tp.old_diseqc != diseqc) {
+ send_diseqc(adm->fe, diseqc, pol, hiband); + send_diseqc(adm->fe, diseqc, pol, hiband);
+ adm->tp.old_pol = pol; + adm->tp.old_pol = tp->old_pol = pol;
+ adm->tp.old_hiband = hiband; + adm->tp.old_hiband = tp->old_hiband = hiband;
+ adm->tp.old_diseqc = diseqc; + adm->tp.old_diseqc = tp->old_diseqc = diseqc;
+ } + }
+ goto axe; + goto axe;
+ } + }
@ -763,6 +803,9 @@ index 5701bd2..d143387 100755
+ adm->tp.old_hiband = hiband; + adm->tp.old_hiband = hiband;
+ adm->tp.old_diseqc = 0; + adm->tp.old_diseqc = 0;
+ } + }
+ adm->axe_used |= (1 << aid);
+ adm->axe_feused = 1;
+ goto axe;
+ } + }
+ } else { + } else {
+ input = opts.axe_unicinp[input & 3]; + input = opts.axe_unicinp[input & 3];
@ -771,6 +814,8 @@ index 5701bd2..d143387 100755
+ LOGL(3, "axe setup: unable to find adapter %d", input); + LOGL(3, "axe setup: unable to find adapter %d", input);
+ return 0; + return 0;
+ } + }
+ ad->axe_used |= (1 << aid);
+ ad->axe_feused = 1;
+ } + }
+#endif +#endif
+ +
@ -793,7 +838,7 @@ index 5701bd2..d143387 100755
}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 +480,16 @@ int setup_switch (int frontend_fd, transponder *tp) @@ -343,6 +485,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);
} }
@ -810,7 +855,7 @@ index 5701bd2..d143387 100755
tp->old_pol = pol; tp->old_pol = pol;
tp->old_hiband = hiband; tp->old_hiband = hiband;
@@ -383,8 +530,10 @@ tune_it_s2 (int fd_frontend, transponder * tp) @@ -383,8 +535,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},
@ -821,7 +866,7 @@ index 5701bd2..d143387 100755
{.cmd = DTV_TUNE}, {.cmd = DTV_TUNE},
}; };
static struct dtv_properties dvbs2_cmdseq = static struct dtv_properties dvbs2_cmdseq =
@@ -462,11 +611,15 @@ tune_it_s2 (int fd_frontend, transponder * tp) @@ -462,11 +616,15 @@ tune_it_s2 (int fd_frontend, transponder * tp)
tp->mtype = QPSK; tp->mtype = QPSK;
bpol = getTick(); bpol = getTick();
if_freq = setup_switch (fd_frontend, tp); if_freq = setup_switch (fd_frontend, tp);
@ -837,7 +882,7 @@ index 5701bd2..d143387 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 +628,12 @@ tune_it_s2 (int fd_frontend, transponder * tp) @@ -475,7 +633,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],
@ -851,7 +896,7 @@ index 5701bd2..d143387 100755
break; break;
@@ -560,6 +718,20 @@ set_pid (int hw, int ad, uint16_t i_pid) @@ -560,6 +723,20 @@ set_pid (int hw, int ad, uint16_t i_pid)
char buf[100]; char buf[100];
int fd; int fd;
@ -872,7 +917,7 @@ index 5701bd2..d143387 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 +757,7 @@ set_pid (int hw, int ad, uint16_t i_pid) @@ -585,6 +762,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);
@ -880,7 +925,7 @@ index 5701bd2..d143387 100755
return fd; return fd;
} }
@@ -592,6 +765,17 @@ set_pid (int hw, int ad, uint16_t i_pid) @@ -592,6 +770,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)
{ {
@ -898,7 +943,7 @@ index 5701bd2..d143387 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 +783,7 @@ int del_filters (int fd, int pid) @@ -599,6 +788,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);
@ -906,7 +951,7 @@ index 5701bd2..d143387 100755
return 0; return 0;
} }
@@ -606,6 +791,15 @@ int del_filters (int fd, int pid) @@ -606,6 +796,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)
{ {
@ -922,7 +967,7 @@ index 5701bd2..d143387 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 +897,7 @@ dvb_delsys (int aid, int fd, fe_delivery_system_t *sys) @@ -703,6 +902,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;
@ -931,7 +976,7 @@ index 5701bd2..d143387 100755
} }
diff --git a/minisatip.c b/minisatip.c diff --git a/minisatip.c b/minisatip.c
index d4076ba..fcf5a5c 100755 index d4076ba..9486fae 100755
--- a/minisatip.c --- a/minisatip.c
+++ b/minisatip.c +++ b/minisatip.c
@@ -36,6 +36,7 @@ @@ -36,6 +36,7 @@
@ -942,7 +987,7 @@ index d4076ba..fcf5a5c 100755
#include "socketworks.h" #include "socketworks.h"
#include "stream.h" #include "stream.h"
#include "adapter.h" #include "adapter.h"
@@ -62,10 +63,17 @@ usage () @@ -62,10 +63,18 @@ 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\
@ -957,10 +1002,11 @@ index d4076ba..fcf5a5c 100755
+ -Z X: enable loband (0) or hiband (1) only for quattro LNB\n\ + -Z X: enable loband (0) or hiband (1) only for quattro LNB\n\
+ -X X[,Y]: AXE unicable/jess input (0-3) for all tuners\n\ + -X X[,Y]: AXE unicable/jess input (0-3) for all tuners\n\
+ -M X: skip initial MPEG-TS packets for AXE demuxer (default 35)\n\ + -M X: skip initial MPEG-TS packets for AXE demuxer (default 35)\n\
+ -P X: power to all inputs (0 = only active inputs, 1 = all inputs)\n\
", ",
DVR_BUFFER / 1024); DVR_BUFFER / 1024);
exit (1); exit (1);
@@ -97,11 +105,12 @@ set_options (int argc, char *argv[]) @@ -97,11 +106,12 @@ set_options (int argc, char *argv[])
opts.device_id = 0; opts.device_id = 0;
opts.bootid = 0; opts.bootid = 0;
opts.force_scan = 0; opts.force_scan = 0;
@ -971,11 +1017,11 @@ index d4076ba..fcf5a5c 100755
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:gL:QZ:X:S:")) != -1) + while ((opt = getopt (argc, argv, "flr:a:t:d:w:p:shc:b:m:p:e:x:u:j:gL:QZ:X:S:P:")) != -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 +152,12 @@ set_options (int argc, char *argv[]) @@ -143,6 +153,12 @@ set_options (int argc, char *argv[])
break; break;
} }
@ -988,7 +1034,7 @@ index d4076ba..fcf5a5c 100755
case HELP_OPT: case HELP_OPT:
{ {
usage (); usage ();
@@ -164,6 +179,10 @@ set_options (int argc, char *argv[]) @@ -164,6 +180,10 @@ set_options (int argc, char *argv[])
case DVRBUFFER_OPT: case DVRBUFFER_OPT:
{ {
opts.dvr = atoi (optarg) * 1024; opts.dvr = atoi (optarg) * 1024;
@ -999,7 +1045,7 @@ index d4076ba..fcf5a5c 100755
break; break;
} }
@@ -209,6 +228,39 @@ set_options (int argc, char *argv[]) @@ -209,6 +229,45 @@ set_options (int argc, char *argv[])
break; break;
} }
@ -1021,6 +1067,12 @@ index d4076ba..fcf5a5c 100755
+ break; + break;
+ } + }
+ +
+ case AXE_POWER:
+ {
+ opts.axe_power = atoi(optarg) + 1;
+ break;
+ }
+
+ case AXE_UNICINP_OPT: + case AXE_UNICINP_OPT:
+ { + {
+ set_unicable_input(optarg); + set_unicable_input(optarg);
@ -1039,7 +1091,7 @@ index d4076ba..fcf5a5c 100755
} }
} }
@@ -483,6 +535,11 @@ http_response (sockets *s, int rc, char *ah, char *desc, int cseq, int lr) @@ -483,6 +542,11 @@ http_response (sockets *s, int rc, char *ah, char *desc, int cseq, int lr)
#define RBUF 4000 #define RBUF 4000
@ -1051,7 +1103,7 @@ index d4076ba..fcf5a5c 100755
int int
read_rtsp (sockets * s) read_rtsp (sockets * s)
{ {
@@ -507,8 +564,7 @@ read_rtsp (sockets * s) @@ -507,8 +571,7 @@ read_rtsp (sockets * s)
} }
} }
@ -1061,7 +1113,7 @@ index d4076ba..fcf5a5c 100755
{ {
if( s->rlen > RBUF - 10 ) if( s->rlen > RBUF - 10 )
{ {
@@ -524,6 +580,9 @@ read_rtsp (sockets * s) @@ -524,6 +587,9 @@ read_rtsp (sockets * s)
return 0; return 0;
} }
@ -1071,7 +1123,7 @@ index d4076ba..fcf5a5c 100755
rlen = s->rlen; rlen = s->rlen;
s->rlen = 0; s->rlen = 0;
@@ -726,8 +785,7 @@ read_http (sockets * s) @@ -726,8 +792,7 @@ read_http (sockets * s)
"%s" "%s"
"</device></root>"; "</device></root>";
@ -1081,7 +1133,7 @@ index d4076ba..fcf5a5c 100755
{ {
if( s->rlen > RBUF - 10 ) if( s->rlen > RBUF - 10 )
{ {
@@ -749,6 +807,9 @@ read_http (sockets * s) @@ -749,6 +814,9 @@ read_http (sockets * s)
return 0; return 0;
} }
@ -1091,7 +1143,7 @@ index d4076ba..fcf5a5c 100755
rlen = s->rlen; rlen = s->rlen;
s->rlen = 0; s->rlen = 0;
@@ -781,6 +842,15 @@ read_http (sockets * s) @@ -781,6 +849,15 @@ read_http (sockets * s)
return 0; return 0;
} }
@ -1107,7 +1159,7 @@ index d4076ba..fcf5a5c 100755
if (strncmp (arg[1], "/icons/", 7) == 0) if (strncmp (arg[1], "/icons/", 7) == 0)
{ {
char *ctype = NULL; char *ctype = NULL;
@@ -904,6 +974,9 @@ ssdp_reply (sockets * s) @@ -904,6 +981,9 @@ ssdp_reply (sockets * s)
return 0; return 0;
} }
@ -1117,7 +1169,7 @@ index d4076ba..fcf5a5c 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 +1060,13 @@ main (int argc, char *argv[]) @@ -987,7 +1067,13 @@ main (int argc, char *argv[])
set_options (argc, argv); set_options (argc, argv);
if (opts.daemon) if (opts.daemon)
becomeDaemon (); becomeDaemon ();
@ -1131,7 +1183,7 @@ index d4076ba..fcf5a5c 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 +1100,9 @@ main (int argc, char *argv[]) @@ -1021,7 +1107,9 @@ main (int argc, char *argv[])
select_and_execute (); select_and_execute ();
unlink(PID_FILE); unlink(PID_FILE);
free_all (); free_all ();
@ -1142,7 +1194,7 @@ index d4076ba..fcf5a5c 100755
} }
@@ -1247,12 +1328,16 @@ void _log(int level, char * file, int line, const char *fmt, ...) { @@ -1247,12 +1335,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;
@ -1162,7 +1214,7 @@ index d4076ba..fcf5a5c 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 +1356,9 @@ void _log(int level, char * file, int line, const char *fmt, ...) { @@ -1271,9 +1363,9 @@ void _log(int level, char * file, int line, const char *fmt, ...) {
} }
if(both){ if(both){
@ -1175,7 +1227,7 @@ index d4076ba..fcf5a5c 100755
fflush(stdout); fflush(stdout);
} }
diff --git a/minisatip.h b/minisatip.h diff --git a/minisatip.h b/minisatip.h
index 821e756..485be5d 100755 index 821e756..2794f49 100755
--- a/minisatip.h --- a/minisatip.h
+++ b/minisatip.h +++ b/minisatip.h
@@ -9,7 +9,7 @@ @@ -9,7 +9,7 @@
@ -1187,7 +1239,7 @@ index 821e756..485be5d 100755
void set_options (int argc, char *argv[]); void set_options (int argc, char *argv[]);
@@ -30,6 +30,12 @@ void set_options (int argc, char *argv[]); @@ -30,6 +30,13 @@ 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'
@ -1197,10 +1249,11 @@ index 821e756..485be5d 100755
+#define QUATTRO_HIBAND_OPT 'Z' +#define QUATTRO_HIBAND_OPT 'Z'
+#define AXE_UNICINP_OPT 'X' +#define AXE_UNICINP_OPT 'X'
+#define AXE_SKIP_PKT 'M' +#define AXE_SKIP_PKT 'M'
+#define AXE_POWER 'P'
#define PID_FILE "/var/run/minisatip.pid" #define PID_FILE "/var/run/minisatip.pid"
struct struct_opts struct struct_opts
@@ -39,6 +45,7 @@ struct struct_opts @@ -39,6 +46,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,
@ -1208,7 +1261,7 @@ index 821e756..485be5d 100755
start_rtp, start_rtp,
http_port; http_port;
int timeout_sec; int timeout_sec;
@@ -50,6 +57,10 @@ struct struct_opts @@ -50,6 +58,11 @@ struct struct_opts
int dvr; int dvr;
int force_scan; int force_scan;
int file_line; int file_line;
@ -1216,11 +1269,12 @@ index 821e756..485be5d 100755
+ int quattro_hiband; + int quattro_hiband;
+ int axe_unicinp[4]; + int axe_unicinp[4];
+ int axe_skippkt; + int axe_skippkt;
+ int axe_power;
char *last_log; char *last_log;
char playlist[200]; char playlist[200];
}; };
diff --git a/socketworks.c b/socketworks.c diff --git a/socketworks.c b/socketworks.c
index b4891f1..995d84b 100755 index b4891f1..1a275b7 100755
--- a/socketworks.c --- a/socketworks.c
+++ b/socketworks.c +++ b/socketworks.c
@@ -299,6 +299,7 @@ socket_action a, socket_action c, socket_action t) @@ -299,6 +299,7 @@ socket_action a, socket_action c, socket_action t)
@ -1262,7 +1316,7 @@ index b4891f1..995d84b 100755
+ } + }
+ if (rlen == 0 || (rlen < 0 || errno == -EAGAIN)) + if (rlen == 0 || (rlen < 0 || errno == -EAGAIN))
+ rlen = 1; + rlen = 1;
+ if (ss->skiplen > 0) { + if (ss->skiplen > 0 && ss->rlen > 0) {
+ LOG("AXE skip: before rlen %d skiplen %d", ss->rlen, ss->skiplen); + LOG("AXE skip: before rlen %d skiplen %d", ss->rlen, ss->skiplen);
+ if (ss->skiplen >= ss->rlen) { + if (ss->skiplen >= ss->rlen) {
+ ss->skiplen -= ss->rlen; + ss->skiplen -= ss->rlen;

View File

@ -447,7 +447,7 @@ index 033490a..d5ae166 100644
{ "ad_pids", VAR_FUNCTION_STRING, (void *) &get_adapter_pids, 0, 0, 0 }, { "ad_pids", VAR_FUNCTION_STRING, (void *) &get_adapter_pids, 0, 0, 0 },
{ "tuner_s2", VAR_INT, &tuner_s2, 1, 0, 0 }, { "tuner_s2", VAR_INT, &tuner_s2, 1, 0, 0 },
diff --git a/adapter.h b/adapter.h diff --git a/adapter.h b/adapter.h
index e693479..10b9b93 100644 index e693479..0a0c87e 100644
--- a/adapter.h --- a/adapter.h
+++ b/adapter.h +++ b/adapter.h
@@ -6,7 +6,11 @@ @@ -6,7 +6,11 @@
@ -462,7 +462,16 @@ index e693479..10b9b93 100644
#ifdef NO_BACKTRACE #ifdef NO_BACKTRACE
#define MAX_STREAMS_PER_PID 8 #define MAX_STREAMS_PER_PID 8
#else #else
@@ -83,12 +87,11 @@ typedef struct struct_adapter @@ -63,7 +67,7 @@ typedef struct struct_adapter
char enabled;
SMutex mutex;
char type; // available on the system
- int fe, dvr;
+ int fe, fe2, dvr;
int pa, fn;
// physical adapter, physical frontend number
fe_delivery_system_t sys[MAX_DELSYS];
@@ -83,12 +87,13 @@ typedef struct struct_adapter
uint32_t ber; uint32_t ber;
uint16_t strength, snr, max_strength, max_snr; uint16_t strength, snr, max_strength, max_snr;
uint32_t pid_err, dec_err; // detect pids received but not part of any stream, decrypt errors uint32_t pid_err, dec_err; // detect pids received but not part of any stream, decrypt errors
@ -473,6 +482,8 @@ index e693479..10b9b93 100644
- int only13v; // unicable - use 13V voltage only - int only13v; // unicable - use 13V voltage only
- int committed_no, uncommitted_no; // diseqc info - int committed_no, uncommitted_no; // diseqc info
+ int slave; + int slave;
+ int axe_used;
+ int axe_feused;
+ diseqc diseqc_param; + diseqc diseqc_param;
+ int old_diseqc; + int old_diseqc;
+ int old_hiband; + int old_hiband;
@ -480,7 +491,7 @@ index e693479..10b9b93 100644
int id; int id;
int pat_processed, transponder_id, pat_ver; int pat_processed, transponder_id, pat_ver;
char name[5]; char name[5];
@@ -109,8 +112,9 @@ extern int a_count; @@ -109,8 +114,9 @@ extern int a_count;
int init_hw(int dev); int init_hw(int dev);
int init_all_hw(); int init_all_hw();
int getAdaptersCount(); int getAdaptersCount();
@ -491,7 +502,7 @@ index e693479..10b9b93 100644
int set_adapter_for_stream(int i, int a); int set_adapter_for_stream(int i, int a);
void close_adapter_for_stream(int sid, int aid); void close_adapter_for_stream(int sid, int aid);
int set_adapter_parameters(int aid, int sid, transponder * tp); int set_adapter_parameters(int aid, int sid, transponder * tp);
@@ -128,7 +132,10 @@ void sort_pids(int aid); @@ -128,7 +134,10 @@ void sort_pids(int aid);
void enable_adapters(char *o); void enable_adapters(char *o);
void set_unicable_adapters(char *o, int type); void set_unicable_adapters(char *o, int type);
void set_diseqc_adapters(char *o); void set_diseqc_adapters(char *o);
@ -658,7 +669,7 @@ index 0000000..d8b06bc
+ +
+#endif +#endif
diff --git a/dvb.c b/dvb.c diff --git a/dvb.c b/dvb.c
index 259b93d..3d6ef66 100644 index 259b93d..fcad626 100644
--- a/dvb.c --- a/dvb.c
+++ b/dvb.c +++ b/dvb.c
@@ -42,6 +42,11 @@ @@ -42,6 +42,11 @@
@ -681,22 +692,24 @@ index 259b93d..3d6ef66 100644
} }
void copy_dvb_parameters(transponder * s, transponder * d) void copy_dvb_parameters(transponder * s, transponder * d)
@@ -330,13 +334,25 @@ int dvb_open_device(adapter *ad) @@ -330,50 +334,99 @@ int dvb_open_device(adapter *ad)
char buf[100]; char buf[100];
LOG("trying to open [%d] adapter %d and frontend %d", ad->id, ad->pa, LOG("trying to open [%d] adapter %d and frontend %d", ad->id, ad->pa,
ad->fn); ad->fn);
+#ifdef AXE +#ifdef AXE
+ sprintf(buf, "/dev/axe/frontend-%d", ad->pa); + sprintf(buf, "/dev/axe/frontend-%d", ad->pa);
+ if (ad->fe2 > 0)
+ ad->fe = ad->fe2;
+ else
+ ad->fe = ad->fe2 = open(buf, O_RDWR | O_NONBLOCK);
+ sprintf(buf, "/dev/axe/demuxts-%d", ad->pa);
+ ad->dvr = open(buf, O_RDONLY | O_NONBLOCK);
+#else +#else
sprintf(buf, "/dev/dvb/adapter%d/frontend%d", ad->pa, ad->fn); sprintf(buf, "/dev/dvb/adapter%d/frontend%d", ad->pa, ad->fn);
+#endif
ad->fe = open(buf, O_RDWR | O_NONBLOCK); ad->fe = open(buf, O_RDWR | O_NONBLOCK);
+#ifdef AXE
+ sprintf(buf, "/dev/axe/demuxts-%d", ad->pa);
+#else
sprintf(buf, "/dev/dvb/adapter%d/dvr%d", ad->pa, ad->fn); sprintf(buf, "/dev/dvb/adapter%d/dvr%d", ad->pa, ad->fn);
+#endif
ad->dvr = open(buf, O_RDONLY | O_NONBLOCK); ad->dvr = open(buf, O_RDONLY | O_NONBLOCK);
+#endif
if (ad->fe < 0 || ad->dvr < 0) if (ad->fe < 0 || ad->dvr < 0)
{ {
+#ifdef AXE +#ifdef AXE
@ -707,7 +720,13 @@ index 259b93d..3d6ef66 100644
LOGL(0, "Could not open %s in RW mode (fe: %d, dvr: %d)", buf, ad->fe, LOGL(0, "Could not open %s in RW mode (fe: %d, dvr: %d)", buf, ad->fe,
ad->dvr); ad->dvr);
if (ad->fe >= 0) if (ad->fe >= 0)
@@ -349,31 +365,41 @@ int dvb_open_device(adapter *ad) close(ad->fe);
if (ad->dvr >= 0)
close(ad->dvr);
- ad->fe = ad->dvr = -1;
+ ad->fe = ad->fe2 = ad->dvr = -1;
return 1;
}
ad->type = ADAPTER_DVB; ad->type = ADAPTER_DVB;
LOG("opened DVB adapter %d fe:%d dvr:%d", ad->id, ad->fe, ad->dvr); LOG("opened DVB adapter %d fe:%d dvr:%d", ad->id, ad->fe, ad->dvr);
@ -747,14 +766,49 @@ index 259b93d..3d6ef66 100644
-int send_diseqc(int fd, int pos, int pol, int hiband, int committed_no, -int send_diseqc(int fd, int pos, int pol, int hiband, int committed_no,
- int uncommitted_no) - int uncommitted_no)
+int send_diseqc(int fd, int pos, int pos_change, int pol, int hiband, diseqc *d) +#ifdef AXE
+void axe_wakeup(int voltage)
{ {
+ int i;
+ adapter *a;
+ if (opts.axe_power < 2)
+ return;
+ for (i = 0; i < 4; i++) {
+ a = get_adapter(i);
+ if (a == NULL || is_adapter_disabled(i))
+ continue;
+ if (a->old_pol >= 0)
+ return;
+ }
+ LOG("AXE wakeup");
+ for (i = 0; i < 4; i++) {
+ a = get_adapter(i);
+ if (a == NULL || is_adapter_disabled(i))
+ continue;
+ if (ioctl(a->fe, FE_SET_VOLTAGE, voltage) == -1)
+ LOG("axe_wakeup: FE_SET_VOLTAGE failed fd %d: %s", a->fe, strerror(errno));
+ }
+}
+#endif
+
+int send_diseqc(int fd, int pos, int pos_change, int pol, int hiband, diseqc *d)
+{
+ int committed_no = d->committed_no; + int committed_no = d->committed_no;
+ int uncommitted_no = d->uncommitted_no; + int uncommitted_no = d->uncommitted_no;
int uncommitted_first = 0; int uncommitted_first = 0;
int posu, posc; int posu, posc;
/* DiSEqC 1.0 */ /* DiSEqC 1.0 */
@@ -412,77 +438,83 @@ int send_diseqc(int fd, int pos, int pol, int hiband, int committed_no, @@ -405,6 +458,9 @@ int send_diseqc(int fd, int pos, int pol, int hiband, int committed_no,
LOGL(3, "send_diseqc fd %d, pos = %d (c %d u %d), pol = %d, hiband = %d",
fd, pos, posc, posu, pol, hiband);
+#ifdef AXE
+ axe_wakeup(pol ? SEC_VOLTAGE_18 : SEC_VOLTAGE_13);
+#endif
if (ioctl(fd, FE_SET_TONE, SEC_TONE_OFF) == -1)
LOG("send_diseqc: FE_SET_TONE failed for fd %d: %s", fd,
strerror(errno));
@@ -412,77 +468,86 @@ int send_diseqc(int fd, int pos, int pol, int hiband, int committed_no,
LOG("send_diseqc: FE_SET_VOLTAGE failed for fd %d: %s", fd, LOG("send_diseqc: FE_SET_VOLTAGE failed for fd %d: %s", fd,
strerror(errno)); strerror(errno));
@ -829,6 +883,9 @@ index 259b93d..3d6ef66 100644
- fd, freq, ufreq, pos, pol, hiband, slot, cmd.msg[0], cmd.msg[1], - fd, freq, ufreq, pos, pol, hiband, slot, cmd.msg[0], cmd.msg[1],
+ fd, freq, d->ufreq, pos, pol, hiband, d->uslot, cmd.msg[0], cmd.msg[1], + fd, freq, d->ufreq, pos, pol, hiband, d->uslot, cmd.msg[0], cmd.msg[1],
cmd.msg[2], cmd.msg[3], cmd.msg[4]); cmd.msg[2], cmd.msg[3], cmd.msg[4]);
+#ifdef AXE
+ axe_wakeup(SEC_VOLTAGE_13);
+#endif
if (ioctl(fd, FE_SET_VOLTAGE, SEC_VOLTAGE_13) == -1) if (ioctl(fd, FE_SET_VOLTAGE, SEC_VOLTAGE_13) == -1)
LOG("send_unicable: pre voltage SEC_VOLTAGE_13 failed for fd %d: %s", LOG("send_unicable: pre voltage SEC_VOLTAGE_13 failed for fd %d: %s",
fd, strerror(errno)); fd, strerror(errno));
@ -863,7 +920,7 @@ index 259b93d..3d6ef66 100644
{ {
struct dvb_diseqc_master_cmd cmd = struct dvb_diseqc_master_cmd cmd =
{ {
@@ -490,44 +522,45 @@ int send_jess(int fd, int freq, int pos, int pol, int hiband, int slot, @@ -490,44 +555,48 @@ int send_jess(int fd, int freq, int pos, int pol, int hiband, int slot,
// int t = (freq / 1000) - 100; // int t = (freq / 1000) - 100;
int t = freq - 100; int t = freq - 100;
@ -887,6 +944,9 @@ index 259b93d..3d6ef66 100644
+ fd, freq, d->ufreq, pos, pol, hiband, d->uslot, cmd.msg[0], cmd.msg[1], + fd, freq, d->ufreq, pos, pol, hiband, d->uslot, cmd.msg[0], cmd.msg[1],
cmd.msg[2], cmd.msg[3], cmd.msg[4]); cmd.msg[2], cmd.msg[3], cmd.msg[4]);
+#ifdef AXE
+ axe_wakeup(SEC_VOLTAGE_13);
+#endif
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, LOG("send_jess: pre voltage SEC_VOLTAGE_13 failed for fd %d: %s", fd,
strerror(errno)); strerror(errno));
@ -919,7 +979,7 @@ index 259b93d..3d6ef66 100644
{ {
int hiband = 0; int hiband = 0;
int diseqc = (tp->diseqc > 0) ? tp->diseqc - 1 : 0; int diseqc = (tp->diseqc > 0) ? tp->diseqc - 1 : 0;
@@ -550,35 +583,137 @@ int setup_switch(int frontend_fd, transponder *tp) @@ -550,35 +619,140 @@ int setup_switch(int frontend_fd, transponder *tp)
hiband = 1; hiband = 1;
} }
@ -928,6 +988,7 @@ index 259b93d..3d6ef66 100644
+ adapter *ad2, *adm; + adapter *ad2, *adm;
+ int input = 0, aid; + int input = 0, aid;
+ +
+ ad->axe_feused = 1;
+ if (tp->diseqc_param.switch_type != SWITCH_UNICABLE && + if (tp->diseqc_param.switch_type != SWITCH_UNICABLE &&
+ tp->diseqc_param.switch_type != SWITCH_JESS) { + tp->diseqc_param.switch_type != SWITCH_JESS) {
+ input = ad->id; + input = ad->id;
@ -951,13 +1012,10 @@ index 259b93d..3d6ef66 100644
+ adm->old_diseqc != diseqc)) + adm->old_diseqc != diseqc))
+ return 0; + return 0;
+ } + }
+ adm->axe_used |= (1 << aid);
+ adm->axe_feused = 1;
+ if (ad->slave) { + if (ad->slave) {
+ input = ad->slave - 1; + input = ad->slave - 1;
+ adm = get_adapter(input);
+ if (adm == NULL) {
+ LOG("axe_fe: unknown master adapter %d", input);
+ return 0;
+ }
+ if(adm->old_pol != pol || + if(adm->old_pol != pol ||
+ adm->old_hiband != hiband || + adm->old_hiband != hiband ||
+ adm->old_diseqc != diseqc) { + adm->old_diseqc != diseqc) {
@ -991,6 +1049,9 @@ index 259b93d..3d6ef66 100644
+ adm->old_hiband = hiband; + adm->old_hiband = hiband;
+ adm->old_diseqc = diseqc = 0; + adm->old_diseqc = diseqc = 0;
+ } + }
+ adm->axe_used |= (1 << aid);
+ adm->axe_feused = 1;
+ goto axe;
+ } + }
+ } else { + } else {
+ input = opts.axe_unicinp[ad->id & 3]; + input = opts.axe_unicinp[ad->id & 3];
@ -999,6 +1060,8 @@ index 259b93d..3d6ef66 100644
+ LOGL(3, "axe setup: unable to find adapter %d", input); + LOGL(3, "axe setup: unable to find adapter %d", input);
+ return 0; + return 0;
+ } + }
+ ad->axe_used |= (1 << aid);
+ ad->axe_feused = 1;
+ } + }
+#endif +#endif
+ +
@ -1073,7 +1136,7 @@ index 259b93d..3d6ef66 100644
return freq; return freq;
} }
@@ -611,6 +746,14 @@ int dvb_tune(int aid, transponder * tp) @@ -611,6 +785,14 @@ int dvb_tune(int aid, transponder * tp)
memset(p_cmd, 0, sizeof(p_cmd)); memset(p_cmd, 0, sizeof(p_cmd));
bclear = getTick(); bclear = getTick();
@ -1088,7 +1151,7 @@ index 259b93d..3d6ef66 100644
if ((ioctl(fd_frontend, FE_SET_PROPERTY, &cmdseq_clear)) == -1) if ((ioctl(fd_frontend, FE_SET_PROPERTY, &cmdseq_clear)) == -1)
{ {
LOG("FE_SET_PROPERTY DTV_CLEAR failed for fd %d: %s", fd_frontend, LOG("FE_SET_PROPERTY DTV_CLEAR failed for fd %d: %s", fd_frontend,
@@ -624,14 +767,16 @@ int dvb_tune(int aid, transponder * tp) @@ -624,14 +806,16 @@ int dvb_tune(int aid, transponder * tp)
case SYS_DVBS2: case SYS_DVBS2:
bpol = getTick(); bpol = getTick();
@ -1106,7 +1169,7 @@ index 259b93d..3d6ef66 100644
#if DVBAPIVERSION >= 0x0502 #if DVBAPIVERSION >= 0x0502
ADD_PROP(DTV_STREAM_ID, tp->plp) ADD_PROP(DTV_STREAM_ID, tp->plp)
#endif #endif
@@ -640,7 +785,12 @@ int dvb_tune(int aid, transponder * tp) @@ -640,7 +824,12 @@ int dvb_tune(int aid, transponder * tp)
"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", "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, freq, get_pol(tp->pol), tp->pol, tp->sr, tp->freq, freq, get_pol(tp->pol), tp->pol, tp->sr,
fe_fec[tp->fec], fe_delsys[tp->sys], fe_modulation[tp->mtype], fe_fec[tp->fec], fe_delsys[tp->sys], fe_modulation[tp->mtype],
@ -1120,7 +1183,7 @@ index 259b93d..3d6ef66 100644
break; break;
case SYS_DVBT: case SYS_DVBT:
@@ -741,29 +891,46 @@ int dvb_tune(int aid, transponder * tp) @@ -741,29 +930,46 @@ int dvb_tune(int aid, transponder * tp)
if (ioctl(fd_frontend, FE_SET_PROPERTY, &p) == -1) if (ioctl(fd_frontend, FE_SET_PROPERTY, &p) == -1)
{ {
LOG("dvb_tune: set property failed %d %s", errno, strerror(errno)); LOG("dvb_tune: set property failed %d %s", errno, strerror(errno));
@ -1172,7 +1235,7 @@ index 259b93d..3d6ef66 100644
return -1; return -1;
} }
@@ -789,10 +956,22 @@ int dvb_set_pid(adapter *a, uint16_t i_pid) @@ -789,10 +995,22 @@ int dvb_set_pid(adapter *a, 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);
return fd; return fd;
@ -1195,7 +1258,7 @@ index 259b93d..3d6ef66 100644
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, NULL) < 0) if (ioctl(fd, DMX_STOP, NULL) < 0)
@@ -801,10 +980,20 @@ int dvb_del_filters(int fd, int pid) @@ -801,10 +1019,20 @@ int dvb_del_filters(int fd, int pid)
LOG("clearing filter on PID %d FD %d", pid, fd); LOG("clearing filter on PID %d FD %d", pid, fd);
close(fd); close(fd);
return 0; return 0;
@ -1216,7 +1279,7 @@ index 259b93d..3d6ef66 100644
int i, res, rv = 0; int i, res, rv = 0;
struct dvb_frontend_info fe_info; struct dvb_frontend_info fe_info;
@@ -893,6 +1082,7 @@ fe_delivery_system_t dvb_delsys(int aid, int fd, fe_delivery_system_t *sys) @@ -893,6 +1121,7 @@ fe_delivery_system_t dvb_delsys(int aid, int fd, fe_delivery_system_t *sys)
fe_delsys[sys[i]], sys[i]); fe_delsys[sys[i]], sys[i]);
return (fe_delivery_system_t) rv; return (fe_delivery_system_t) rv;
@ -1224,7 +1287,7 @@ index 259b93d..3d6ef66 100644
} }
@@ -1005,6 +1195,7 @@ void dvb_get_signal(adapter *ad) @@ -1005,6 +1234,7 @@ void dvb_get_signal(adapter *ad)
ad->max_strength = (ad->strength > 0) ? ad->strength : 1; ad->max_strength = (ad->strength > 0) ? ad->strength : 1;
if (ad->max_snr <= ad->snr) if (ad->max_snr <= ad->snr)
ad->max_snr = (ad->snr > 0) ? ad->snr : 1; ad->max_snr = (ad->snr > 0) ? ad->snr : 1;
@ -1232,7 +1295,7 @@ index 259b93d..3d6ef66 100644
if (ad->snr > 4096) if (ad->snr > 4096)
new_gs = 0; new_gs = 0;
if (new_gs) if (new_gs)
@@ -1017,6 +1208,14 @@ void dvb_get_signal(adapter *ad) @@ -1017,6 +1247,14 @@ void dvb_get_signal(adapter *ad)
ad->strength = ad->strength >> 8; ad->strength = ad->strength >> 8;
ad->snr = ad->snr >> 8; ad->snr = ad->snr >> 8;
} }
@ -1247,7 +1310,7 @@ index 259b93d..3d6ef66 100644
} }
void dvb_commit(adapter *a) void dvb_commit(adapter *a)
@@ -1024,6 +1223,33 @@ void dvb_commit(adapter *a) @@ -1024,6 +1262,47 @@ void dvb_commit(adapter *a)
return; return;
} }
@ -1255,24 +1318,38 @@ index 259b93d..3d6ef66 100644
+{ +{
+#ifdef AXE +#ifdef AXE
+ adapter *c; + adapter *c;
+ int aid, fe = a2->fe; + int aid, busy;
+ if (fe <= 0) + if (a2->fe <= 0)
+ return; + return;
+ axe_fe_reset(fe); + a2->fe = -1;
+ for (aid = 0; aid < 4; aid++) + if (a2->fe2 > 0)
+ if (aid != a2->id && a[aid]->sid_cnt > 0) break; + axe_fe_reset(a2->fe2);
+ if (aid >= 4) { + for (aid = busy = 0; aid < 4; aid++) {
+ LOG("AXE standby"); + c = a[aid];
+ for (aid = 0; aid < 4; aid++) { + c->axe_used &= ~(1 << aid);
+ c = a[aid]; + if (c->axe_used || c->sid_cnt > 0) busy++;
+ axe_fe_standby(c->fe, -1);
+ axe_set_tuner_led(aid + 1, 0);
+ ioctl(c->fe, FE_SET_VOLTAGE, SEC_VOLTAGE_OFF);
+ c->old_diseqc = c->old_pol = c->old_hiband = -1;
+ }
+ } else {
+ LOG("AXE standby: adapter %d busy (%d), keeping", aid, a[aid]->sid_cnt);
+ } + }
+ if (busy > 0 && opts.axe_power > 1)
+ goto nostandby;
+ for (aid = 0; aid < 4; aid++) {
+ c = a[aid];
+ if (c->axe_used != 0 || c->sid_cnt > 0) {
+ LOG("AXE standby: adapter %d busy (cnt=%d/used=%04x/fe=%d), keeping",
+ aid, c->sid_cnt, c->axe_used, c->fe);
+ continue;
+ }
+ if (c->fe2 < 0 || c->axe_feused == 0)
+ continue;
+ LOG("AXE standby: adapter %d", aid);
+ axe_fe_standby(c->fe2, -1);
+ axe_set_tuner_led(aid + 1, 0);
+ ioctl(c->fe2, FE_SET_VOLTAGE, SEC_VOLTAGE_OFF);
+ close(c->fe2);
+ c->fe2 = -1;
+ c->axe_feused = 0;
+ c->old_diseqc = c->old_pol = c->old_hiband = -1;
+ }
+nostandby:
+ axe_set_tuner_led(a2->id + 1, 0); + axe_set_tuner_led(a2->id + 1, 0);
+#endif +#endif
+ return 0; + return 0;
@ -1281,7 +1358,7 @@ index 259b93d..3d6ef66 100644
void find_dvb_adapter(adapter **a) void find_dvb_adapter(adapter **a)
{ {
int na = 0; int na = 0;
@@ -1032,9 +1258,21 @@ void find_dvb_adapter(adapter **a) @@ -1032,9 +1311,21 @@ void find_dvb_adapter(adapter **a)
int i = 0, j = 0; int i = 0, j = 0;
adapter *ad; adapter *ad;
@ -1303,7 +1380,7 @@ index 259b93d..3d6ef66 100644
sprintf(buf, "/dev/dvb/adapter%d/frontend%d", i, j); sprintf(buf, "/dev/dvb/adapter%d/frontend%d", i, j);
fd = open(buf, O_RDONLY | O_NONBLOCK); fd = open(buf, O_RDONLY | O_NONBLOCK);
if (fd < 0) if (fd < 0)
@@ -1042,7 +1280,8 @@ void find_dvb_adapter(adapter **a) @@ -1042,7 +1333,8 @@ void find_dvb_adapter(adapter **a)
sprintf(buf, "/dev/dvb/adapter%d/ca%d", i, j); sprintf(buf, "/dev/dvb/adapter%d/ca%d", i, j);
fd = open(buf, O_RDONLY | O_NONBLOCK); fd = open(buf, O_RDONLY | O_NONBLOCK);
} }
@ -1313,7 +1390,7 @@ index 259b93d..3d6ef66 100644
if (fd >= 0) if (fd >= 0)
{ {
// if (is_adapter_disabled(na)) // if (is_adapter_disabled(na))
@@ -1051,7 +1290,7 @@ void find_dvb_adapter(adapter **a) @@ -1051,7 +1343,7 @@ void find_dvb_adapter(adapter **a)
// continue; // continue;
// } // }
if (!a[na]) if (!a[na])
@ -1322,7 +1399,7 @@ index 259b93d..3d6ef66 100644
ad = a[na]; ad = a[na];
ad->pa = i; ad->pa = i;
@@ -1064,7 +1303,7 @@ void find_dvb_adapter(adapter **a) @@ -1064,7 +1356,7 @@ void find_dvb_adapter(adapter **a)
ad->tune = (Tune) dvb_tune; ad->tune = (Tune) dvb_tune;
ad->delsys = (Dvb_delsys) dvb_delsys; ad->delsys = (Dvb_delsys) dvb_delsys;
ad->post_init = NULL; ad->post_init = NULL;
@ -1331,7 +1408,7 @@ index 259b93d..3d6ef66 100644
ad->get_signal = (Device_signal) dvb_get_signal; ad->get_signal = (Device_signal) dvb_get_signal;
ad->type = ADAPTER_DVB; ad->type = ADAPTER_DVB;
close(fd); close(fd);
@@ -1073,6 +1312,14 @@ void find_dvb_adapter(adapter **a) @@ -1073,6 +1365,14 @@ void find_dvb_adapter(adapter **a)
if (na == MAX_ADAPTERS) if (na == MAX_ADAPTERS)
return; return;
} }
@ -1549,7 +1626,7 @@ index c4c91c0..5ec0d29 100644
for(var j=0;j<max_streams;j++) for(var j=0;j<max_streams;j++)
if(st_enabled[j]==1 && st_adapter[j]==i) if(st_enabled[j]==1 && st_adapter[j]==i)
diff --git a/minisatip.c b/minisatip.c diff --git a/minisatip.c b/minisatip.c
index d6b26d3..7eb4ded 100644 index d6b26d3..119a3ed 100644
--- a/minisatip.c --- a/minisatip.c
+++ b/minisatip.c +++ b/minisatip.c
@@ -66,6 +66,7 @@ static const struct option long_options[] = @@ -66,6 +66,7 @@ static const struct option long_options[] =
@ -1582,7 +1659,7 @@ index d6b26d3..7eb4ded 100644
#define SLAVE_OPT 'S' #define SLAVE_OPT 'S'
#define DELSYS_OPT 'Y' #define DELSYS_OPT 'Y'
#define DVBAPI_OPT 'o' #define DVBAPI_OPT 'o'
@@ -117,12 +126,21 @@ static const struct option long_options[] = @@ -117,12 +126,22 @@ static const struct option long_options[] =
#define DOCUMENTROOT_OPT 'R' #define DOCUMENTROOT_OPT 'R'
#define XML_OPT 'X' #define XML_OPT 'X'
#define THREADS_OPT 'T' #define THREADS_OPT 'T'
@ -1591,6 +1668,7 @@ index d6b26d3..7eb4ded 100644
+#define QUATTRO_HIBAND_OPT 'Z' +#define QUATTRO_HIBAND_OPT 'Z'
+#define AXE_UNICINP_OPT 'U' +#define AXE_UNICINP_OPT 'U'
+#define AXE_SKIP_PKT 'M' +#define AXE_SKIP_PKT 'M'
+#define AXE_POWER 'P'
+ +
void print_version(int use_log) void print_version(int use_log)
@ -1606,7 +1684,7 @@ index d6b26d3..7eb4ded 100644
if (!use_log) if (!use_log)
puts(buf); puts(buf);
else else
@@ -133,10 +151,19 @@ void usage() @@ -133,10 +152,19 @@ void usage()
{ {
print_version(0); print_version(0);
printf( printf(
@ -1630,7 +1708,7 @@ index d6b26d3..7eb4ded 100644
Help\n\ Help\n\
-------\n\ -------\n\
\n\ \n\
@@ -150,10 +177,16 @@ Help\n\ @@ -150,10 +178,16 @@ Help\n\
* -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\
* eg: -c 2048 (does not allow minisatip to send more than 2048KB/s to all remote servers)\n\ * eg: -c 2048 (does not allow minisatip to send more than 2048KB/s to all remote servers)\n\
\n\ \n\
@ -1651,7 +1729,7 @@ index d6b26d3..7eb4ded 100644
\n\ \n\
* -D --device-id DVC_ID: specify the device id (in case there are multiple SAT>IP servers in the network)\n \ * -D --device-id DVC_ID: specify the device id (in case there are multiple SAT>IP servers in the network)\n \
* eg: -D 4 \n\ * eg: -D 4 \n\
@@ -179,13 +212,23 @@ Help\n\ @@ -179,13 +213,23 @@ Help\n\
* -m xx: simulate xx as local mac address, generates UUID based on mac\n\ * -m xx: simulate xx as local mac address, generates UUID based on mac\n\
* eg: -m 001122334455 \n\ * eg: -m 001122334455 \n\
\n\ \n\
@ -1675,7 +1753,7 @@ index d6b26d3..7eb4ded 100644
* -p url: specify playlist url using X_SATIPM3U header \n\ * -p url: specify playlist url using X_SATIPM3U header \n\
* eg: -p http://192.168.2.3:8080/playlist\n\ * eg: -p http://192.168.2.3:8080/playlist\n\
- this will add X_SATIPM3U tag into the satip description xml\n\ - this will add X_SATIPM3U tag into the satip description xml\n\
@@ -195,6 +238,9 @@ Help\n\ @@ -195,6 +239,9 @@ Help\n\
\n\ \n\
* -R --document-root directory: document root for the minisatip web page and images\n\ * -R --document-root directory: document root for the minisatip web page and images\n\
\n\ \n\
@ -1685,7 +1763,7 @@ index d6b26d3..7eb4ded 100644
* -s --satip-servers DELSYS:host:port - specify the remote satip host and port with delivery system DELSYS, it is possible to use multiple -s \n\ * -s --satip-servers DELSYS:host:port - specify the remote satip host and port with delivery system DELSYS, it is possible to use multiple -s \n\
* DELSYS - can be one of: dvbs, dvbs2, dvbt, dvbt2, dvbc, dvbc2, isdbt, atsc, dvbcb ( - DVBC_ANNEX_B ) [default: dvbs2]\n\ * DELSYS - can be one of: dvbs, dvbs2, dvbt, dvbt2, dvbc, dvbc2, isdbt, atsc, dvbcb ( - DVBC_ANNEX_B ) [default: dvbs2]\n\
host - the server of the satip server\n\ host - the server of the satip server\n\
@@ -204,6 +250,9 @@ Help\n\ @@ -204,6 +251,9 @@ Help\n\
- specifies 1 dvbt satip server with address 192.168.1.3:554\n\ - specifies 1 dvbt satip server with address 192.168.1.3:554\n\
- specifies 1 dvbc satip server with address 192.168.1.4:554\n\ - specifies 1 dvbc satip server with address 192.168.1.4:554\n\
\n\ \n\
@ -1695,7 +1773,7 @@ index d6b26d3..7eb4ded 100644
* -S --slave ADAPTER1,ADAPTER2-ADAPTER4[,..] - specify slave adapters \n\ * -S --slave ADAPTER1,ADAPTER2-ADAPTER4[,..] - specify slave adapters \n\
* Allows specifying bonded adapters (multiple adapters connected with a splitter to the same LNB)\n\ * Allows specifying bonded adapters (multiple adapters connected with a splitter to the same LNB)\n\
Only one adapter needs to be master all others needs to have this parameter specified\n\ Only one adapter needs to be master all others needs to have this parameter specified\n\
@@ -237,7 +286,28 @@ Help\n\ @@ -237,7 +287,30 @@ Help\n\
* eg: -y 5544 \n\ * eg: -y 5544 \n\
- changing this to a port > 1024 removes the requirement for minisatip to run as root\n\ - changing this to a port > 1024 removes the requirement for minisatip to run as root\n\
\n\ \n\
@ -1707,6 +1785,8 @@ index d6b26d3..7eb4ded 100644
+\t* The format is: M1:S1[,M2:S2] - master:slave\n\ +\t* The format is: M1:S1[,M2:S2] - master:slave\n\
+ * eg: 0:1,0:2,0:3 \n\ + * eg: 0:1,0:2,0:3 \n\
+\n\ +\n\
+* -P --power num: power to all inputs (0 = only active inputs, 1 = all inputs)\n\
+\n\
+* -Q --quattro quattro LNB config (H/H,H/V,L/H,L/V)\n\ +* -Q --quattro quattro LNB config (H/H,H/V,L/H,L/V)\n\
+\n\ +\n\
+* -Z --quattro-hiband hiband\n\ +* -Z --quattro-hiband hiband\n\
@ -1725,7 +1805,7 @@ index d6b26d3..7eb4ded 100644
app_name, app_name,
ADAPTER_BUFFER, ADAPTER_BUFFER,
DVR_BUFFER, opts.no_threads ? "DISABLED" : "ENABLED"); DVR_BUFFER, opts.no_threads ? "DISABLED" : "ENABLED");
@@ -277,17 +347,24 @@ void set_options(int argc, char *argv[]) @@ -277,17 +350,24 @@ void set_options(int argc, char *argv[])
opts.satip_setup_pids = 0; opts.satip_setup_pids = 0;
opts.output_buffer = 512 * 1024; opts.output_buffer = 512 * 1024;
opts.satip_servers[0] = 0; opts.satip_servers[0] = 0;
@ -1748,11 +1828,11 @@ index d6b26d3..7eb4ded 100644
while ((opt = getopt_long(argc, argv, while ((opt = getopt_long(argc, argv,
- "flr:a:td:w:p:s:n:hc:b:m:p:e:x:u:j:o:gy:i:D:VR:S:TX:Y:", - "flr:a:td:w:p:s:n:hc:b:m:p:e:x:u:j:o:gy:i:D:VR:S:TX:Y:",
+ "flr:a:td:w:p:s:n:hc:b:m:p:e:x:u:j:o:gy:i:q:D:VR:S:TX:Y:L:QZ:U:M:", + "flr:a:td:w:p:s:n:hc:b:m:p:e:x:u:j:o:gy:i:q:D:VR:S:TX:Y:L:QZ:U:M:P:",
long_options, NULL)) != -1) long_options, NULL)) != -1)
{ {
// printf("options %d %c %s\n",opt,opt,optarg); // printf("options %d %c %s\n",opt,opt,optarg);
@@ -359,9 +436,12 @@ void set_options(int argc, char *argv[]) @@ -359,9 +439,12 @@ void set_options(int argc, char *argv[])
opts.adapter_buffer = (opts.adapter_buffer / 188) * 188; opts.adapter_buffer = (opts.adapter_buffer / 188) * 188;
if (opts.adapter_buffer < ADAPTER_BUFFER) if (opts.adapter_buffer < ADAPTER_BUFFER)
opts.adapter_buffer = ADAPTER_BUFFER; opts.adapter_buffer = ADAPTER_BUFFER;
@ -1766,7 +1846,7 @@ index d6b26d3..7eb4ded 100644
break; break;
} }
@@ -410,6 +490,12 @@ void set_options(int argc, char *argv[]) @@ -410,6 +493,12 @@ void set_options(int argc, char *argv[])
break; break;
} }
@ -1779,7 +1859,7 @@ index d6b26d3..7eb4ded 100644
case SLAVE_OPT: case SLAVE_OPT:
{ {
set_slave_adapters(optarg); set_slave_adapters(optarg);
@@ -508,6 +594,33 @@ void set_options(int argc, char *argv[]) @@ -508,6 +597,35 @@ void set_options(int argc, char *argv[])
LOGL(0, "Not a valid path for the xml file") LOGL(0, "Not a valid path for the xml file")
; ;
break; break;
@ -1800,20 +1880,22 @@ index d6b26d3..7eb4ded 100644
+ set_unicable_input(optarg); + set_unicable_input(optarg);
+ break; + break;
+ +
+ case AXE_POWER:
+ opts.axe_power = atoi(optarg) + 1;
+ break;
+
+ case AXE_SKIP_PKT: + case AXE_SKIP_PKT:
+ {
+ opts.axe_skippkt = atoi(optarg); + opts.axe_skippkt = atoi(optarg);
+ if (opts.axe_skippkt < 0) + if (opts.axe_skippkt < 0)
+ opts.axe_skippkt = 0; + opts.axe_skippkt = 0;
+ if (opts.axe_skippkt > 200) + if (opts.axe_skippkt > 200)
+ opts.axe_skippkt = 200; + opts.axe_skippkt = 200;
+ break; + break;
+ }
+#endif +#endif
} }
} }
@@ -676,7 +789,6 @@ int read_rtsp(sockets * s) @@ -676,7 +794,6 @@ int read_rtsp(sockets * s)
if (transport) if (transport)
{ {
int s_timeout; int s_timeout;
@ -1821,7 +1903,7 @@ index d6b26d3..7eb4ded 100644
if (sid->timeout == 1) if (sid->timeout == 1)
sid->timeout = opts.timeout_sec; sid->timeout = opts.timeout_sec;
@@ -1003,6 +1115,9 @@ int ssdp_reply(sockets * s) @@ -1003,6 +1120,9 @@ int ssdp_reply(sockets * s)
return 0; return 0;
} }
@ -1831,7 +1913,7 @@ index d6b26d3..7eb4ded 100644
// not my uuid // not my uuid
LOG("Received SSDP packet from %s:%d -> handle %d", LOG("Received SSDP packet from %s:%d -> handle %d",
get_socket_rhost(s->id, ra, sizeof(ra)), get_socket_rport(s->id), get_socket_rhost(s->id, ra, sizeof(ra)), get_socket_rport(s->id),
@@ -1138,7 +1253,11 @@ int main(int argc, char *argv[]) @@ -1138,7 +1258,11 @@ int main(int argc, char *argv[])
if (!opts.no_threads) if (!opts.no_threads)
set_socket_thread(sock_signal, start_new_thread("signal")); set_socket_thread(sock_signal, start_new_thread("signal"));
@ -1846,7 +1928,7 @@ index d6b26d3..7eb4ded 100644
diff --git a/minisatip.h b/minisatip.h diff --git a/minisatip.h b/minisatip.h
old mode 100644 old mode 100644
new mode 100755 new mode 100755
index 403af34..cbdc23c index 403af34..f250422
--- a/minisatip.h --- a/minisatip.h
+++ b/minisatip.h +++ b/minisatip.h
@@ -10,13 +10,15 @@ @@ -10,13 +10,15 @@
@ -1866,7 +1948,7 @@ index 403af34..cbdc23c
#define copy32(a,i,v) { a[i] = ((v)>>24) & 0xFF;\ #define copy32(a,i,v) { a[i] = ((v)>>24) & 0xFF;\
a[i+1] = ((v)>>16) & 0xFF;\ a[i+1] = ((v)>>16) & 0xFF;\
a[i+2] = ((v)>>8) & 0xFF;\ a[i+2] = ((v)>>8) & 0xFF;\
@@ -48,6 +50,10 @@ struct struct_opts @@ -48,6 +50,11 @@ struct struct_opts
int force_scan; int force_scan;
int clean_psi; int clean_psi;
int file_line; int file_line;
@ -1874,10 +1956,11 @@ index 403af34..cbdc23c
+ int quattro_hiband; + int quattro_hiband;
+ int axe_unicinp[4]; + int axe_unicinp[4];
+ int axe_skippkt; + int axe_skippkt;
+ int axe_power;
char *last_log; char *last_log;
int dvbapi_port; int dvbapi_port;
char *dvbapi_host; char *dvbapi_host;
@@ -62,6 +68,15 @@ struct struct_opts @@ -62,6 +69,15 @@ struct struct_opts
char *xml_path; char *xml_path;
char no_threads; char no_threads;
int th_priority; int th_priority;