another minisatip/5 updates

This commit is contained in:
Jaroslav Kysela 2016-02-29 18:21:05 +01:00
parent ed8d49d5f4
commit 97347962f0
3 changed files with 374 additions and 165 deletions

View File

@ -31,7 +31,7 @@ KMODULES = drivers/usb/serial/cp210x.ko \
drivers/usb/serial/oti6858.ko
MINISATIP_COMMIT=54df9348e7bd7e6075f54f1b93ec4ad36429abe0
MINISATIP5_COMMIT=c1a31b3a677fa4af3cbb10f9c95d07c040e787ed
MINISATIP5_COMMIT=ddd4796b2c759292f6db1d1be84bbeb5bd57ed03
BUSYBOX=busybox-1.24.1
@ -148,18 +148,9 @@ fs.cpio: $(CPIO_SRCS)
$(foreach f,$(RPCBIND_SBIN_FILES), -e "apps/$(RPCBIND)/$(f):usr/sbin/$(f)") \
$(foreach f,$(NFSUTILS_SBIN_FILES), -e "apps/$(NFSUTILS)/$(f):usr/sbin/$(notdir $(f))") \
-e "apps/minisatip/minisatip:sbin/minisatip" \
-e "apps/minisatip/icons/lr.jpg:usr/share/minisatip/icons/lr.jpg" \
-e "apps/minisatip/icons/lr.png:usr/share/minisatip/icons/lr.png" \
-e "apps/minisatip/icons/sm.jpg:usr/share/minisatip/icons/sm.jpg" \
-e "apps/minisatip/icons/sm.png:usr/share/minisatip/icons/sm.png" \
$(foreach f,$(notdir $(wildcard apps/minisatip/icons/*)), -e "apps/minisatip/icons/$f:usr/share/minisatip/icons/$f") \
-e "apps/minisatip5/minisatip:sbin/minisatip5" \
-e "apps/minisatip5/html/lr.jpg:usr/share/minisatip/html/lr.jpg" \
-e "apps/minisatip5/html/lr.png:usr/share/minisatip/html/lr.png" \
-e "apps/minisatip5/html/sm.jpg:usr/share/minisatip/html/sm.jpg" \
-e "apps/minisatip5/html/sm.png:usr/share/minisatip/html/sm.png" \
-e "apps/minisatip5/html/dLAN.xml:usr/share/minisatip/html/dLAN.xml" \
-e "apps/minisatip5/html/satip.xml:usr/share/minisatip/html/satip.xml" \
-e "apps/minisatip5/html/status.html:usr/share/minisatip/html/status.html" \
$(foreach f,$(notdir $(wildcard apps/minisatip5/html/*)), -e "apps/minisatip5/html/$f:usr/share/minisatip/html/$f") \
-e "apps/$(NANO)/src/nano:usr/bin/nano" \
-e "apps/mtd-utils/nandwrite:usr/sbin/nandwrite2" \
-e "apps/oscam-svn/Distribution/oscam-1.20-unstable_svn$(OSCAM_REV)-sh4-linux:sbin/oscamd"
@ -306,7 +297,8 @@ media-clean:
# minisatip
#
apps/minisatip/axe.h:
apps/minisatip/axe.h: patches/minisatip-axe.patch
rm -rf apps/minisatip
$(call GIT_CLONE,https://github.com/catalinii/minisatip.git,minisatip,$(MINISATIP_COMMIT))
cd apps/minisatip; patch -p1 < ../../patches/minisatip-axe.patch
@ -326,7 +318,8 @@ minisatip-clean:
# minisatip5
#
apps/minisatip5/axe.h:
apps/minisatip5/axe.h: patches/minisatip5-axe.patch
rm -rf apps/minisatip5
$(call GIT_CLONE,https://github.com/catalinii/minisatip.git,minisatip5,$(MINISATIP5_COMMIT))
cd apps/minisatip5; patch -p1 < ../../patches/minisatip5-axe.patch
@ -671,3 +664,6 @@ clean: kernel-mrproper
rm -rf firmware/initramfs
rm -rf toolchain/4.5.3-99
rm -rf tools/syscall-dump.o* tools/syscall-dump.s*
testx:
echo $(foreach f,$(notdir $(wildcard apps/minisatip5/html/*)), "'$f'")

View File

@ -1,5 +1,5 @@
diff --git a/adapter.c b/adapter.c
index 285faea..0b59730 100755
index 285faea..6168975 100755
--- a/adapter.c
+++ b/adapter.c
@@ -29,10 +29,15 @@
@ -49,7 +49,26 @@ index 285faea..0b59730 100755
}
for (na; na < MAX_ADAPTERS; na++)
a[na].pa = a[na].fn = -1;
@@ -122,9 +143,23 @@ init_hw ()
@@ -69,6 +90,7 @@ find_adapters ()
// avoid adapter close unless all the adapters can be closed
int adapter_timeout(sockets *s)
{
+#ifndef AXE
int do_close = 1, i, max_close = 0;
int rtime = getTick();
for (i = 0; i < MAX_ADAPTERS; i++)
@@ -84,6 +106,10 @@ int adapter_timeout(sockets *s)
s->rtime = max_close;
return do_close;
+#else
+ LOG("Requested adapter %d close", s->sid);
+ return 1;
+#endif
}
int
@@ -122,9 +148,23 @@ init_hw ()
find_adapters ();
LOG ("trying to open [%d] adapter %d and frontend %d", i, a[i].pa,
a[i].fn);
@ -74,7 +93,7 @@ index 285faea..0b59730 100755
a[i].dvr = open (buf, O_RDONLY | O_NONBLOCK);
if (a[i].fe < 0 || a[i].dvr < 0)
{
@@ -139,22 +174,24 @@ init_hw ()
@@ -139,22 +179,24 @@ init_hw ()
a[i].enabled = 1;
if (!a[i].buf)
@ -102,7 +121,7 @@ index 285faea..0b59730 100755
init_dvb_parameters (&a[i].tp);
mark_pids_deleted (i, -1, NULL);
update_pids (i);
@@ -165,8 +202,8 @@ init_hw ()
@@ -165,8 +207,8 @@ 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);
@ -113,7 +132,7 @@ index 285faea..0b59730 100755
sockets_timeout (a[i].sock, 60000);
LOG ("done opening adapter %i fe_sys %d", i, a[i].tp.sys);
@@ -179,7 +216,6 @@ init_hw ()
@@ -179,7 +221,6 @@ init_hw ()
return num_adapters;
}
@ -121,7 +140,7 @@ index 285faea..0b59730 100755
void
close_adapter (int na)
{
@@ -194,8 +230,41 @@ close_adapter (int na)
@@ -194,8 +235,44 @@ close_adapter (int na)
mark_pids_deleted (na, -1, NULL);
update_pids (na);
// if(a[na].dmx>0)close(a[na].dmx);
@ -133,24 +152,27 @@ index 285faea..0b59730 100755
+ axe_fe_reset(a[na].fe2);
+ for (i = j = 0; i < 4; i++) {
+ a[i].axe_used &= ~(1 << na);
+ if (a[i].axe_used || a[i].sid_cnt > 0) j++;
+ if (a[i].axe_used || a[i].fe > 0) j++;
+ }
+ if (j > 0 && opts.axe_power > 1)
+ goto nostandby;
+ for (i = 0; i < 4; i++) {
+ if (opts.axe_power < 2 && i != na && j)
+ continue;
+ 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;
+ }
+ if (a[i].fe2 <= 0 || a[i].axe_feused == 0)
+ if (a[i].fe2 < 0)
+ 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].fe2 = -1;
+ a[i].axe_feused = 0;
+ a[i].tp.old_diseqc = a[i].tp.old_pol = a[i].tp.old_hiband = -1;
+ }
+ }
@ -163,18 +185,30 @@ index 285faea..0b59730 100755
if (a[na].sock >= 0)
sockets_del (a[na].sock);
a[na].fe = 0;
@@ -366,8 +435,8 @@ close_adapter_for_stream (int sid, int aid)
@@ -343,6 +420,7 @@ set_adapter_for_stream (int sid, int aid)
if (a[aid].master_sid == -1)
a[aid].master_sid = sid;
a[aid].sid_cnt++;
+ sockets_set_poll(a[aid].sock, 1);
LOG ("set adapter %d for stream %d m:%d s:%d", aid, sid, a[aid].master_sid, a[aid].sid_cnt);
return 0;
}
@@ -366,8 +444,12 @@ close_adapter_for_stream (int sid, int aid)
// delete the attached PIDs as well
mark_pids_deleted (aid, sid, NULL);
update_pids (aid);
-// if (a[aid].sid_cnt == 0)
-// close_adapter (aid);
+ if (a[aid].sid_cnt == 0)
+ close_adapter (aid);
+ if (a[aid].sid_cnt == 0) {
+#ifdef AXE
+ axe_set_tuner_led(aid + 1, 0);
+#endif
+ sockets_set_poll(a[aid].sock, 0);
+ }
}
@@ -410,7 +479,11 @@ update_pids (int aid)
@@ -410,7 +492,11 @@ update_pids (int aid)
int tune (int aid, int sid)
{
adapter *ad = get_adapter(aid);
@ -187,7 +221,7 @@ index 285faea..0b59730 100755
if(!ad) return -400;
ad->last_sort = getTick ();
@@ -419,7 +492,13 @@ int tune (int aid, int sid)
@@ -419,7 +505,13 @@ int tune (int aid, int sid)
ad->tp.switch_type = ad->switch_type;
ad->tp.uslot = ad->uslot;
ad->tp.ufreq = ad->ufreq;
@ -202,7 +236,7 @@ index 285faea..0b59730 100755
rv = tune_it_s2 (ad->fe, &ad->tp);
a[aid].status = 0;
a[aid].status_cnt = 0;
@@ -428,6 +507,12 @@ int tune (int aid, int sid)
@@ -428,6 +520,12 @@ int tune (int aid, int sid)
close_streams_for_adapter (aid, sid);
update_pids (aid);
}
@ -215,7 +249,7 @@ index 285faea..0b59730 100755
}
else
LOG ("not tuning for SID %d (do_tune=%d, master_sid=%d)", sid,
@@ -684,7 +769,11 @@ describe_adapter (int sid, int aid)
@@ -684,7 +782,11 @@ describe_adapter (int sid, int aid)
memset (dad, 0, sizeof (dad));
x = 0;
// do just max 3 signal check 1s after tune
@ -227,7 +261,7 @@ index 285faea..0b59730 100755
{
int new_gs = 1;
ts = getTick ();
@@ -701,11 +790,20 @@ describe_adapter (int sid, int aid)
@@ -701,11 +803,20 @@ describe_adapter (int sid, int aid)
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)",
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);
@ -248,7 +282,7 @@ index 285faea..0b59730 100755
}
if(use_ad)
{
@@ -715,14 +813,14 @@ describe_adapter (int sid, int aid)
@@ -715,14 +826,14 @@ describe_adapter (int sid, int aid)
}
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=",
@ -266,7 +300,7 @@ index 285faea..0b59730 100755
t->c2tft, t->ds, t->plp, t->inversion);
for (i = 0; i < MAX_PIDS; i++)
if (use_ad && ad->pids[i].flags == 1)
@@ -825,7 +923,7 @@ void enable_adapters(char *o)
@@ -825,7 +936,7 @@ void enable_adapters(char *o)
void set_unicable_adapters(char *o, int type)
{
@ -275,7 +309,7 @@ index 285faea..0b59730 100755
char buf[100], *arg[20], *sep1, *sep2;
strncpy(buf, o, sizeof(buf));
@@ -839,17 +937,67 @@ void set_unicable_adapters(char *o, int type)
@@ -839,17 +950,67 @@ void set_unicable_adapters(char *o, int type)
sep2 = strchr(arg[i], '-');
if( !sep1 || !sep2)
continue;
@ -344,7 +378,7 @@ index 285faea..0b59730 100755
int delsys_match(adapter *ad, int del_sys)
{
@@ -866,3 +1014,71 @@ int delsys_match(adapter *ad, int del_sys)
@@ -866,3 +1027,71 @@ int delsys_match(adapter *ad, int del_sys)
return 0;
}
@ -605,7 +639,9 @@ index 0000000..cfc1927
+
+#endif
diff --git a/dvb.c b/dvb.c
index 5701bd2..79cac82 100755
old mode 100755
new mode 100644
index 5701bd2..d352f8a
--- a/dvb.c
+++ b/dvb.c
@@ -41,6 +41,10 @@
@ -619,14 +655,14 @@ index 5701bd2..79cac82 100755
extern struct struct_opts opts;
@@ -215,6 +219,31 @@ msleep (uint32_t msec)
@@ -215,6 +219,46 @@ msleep (uint32_t msec)
;
}
+#ifdef AXE
+void axe_wakeup(int voltage)
+void axe_wakeup(int fe_fd, int voltage)
+{
+ int i;
+ int i, mask;
+ adapter *a;
+ if (opts.axe_power < 2)
+ return;
@ -638,7 +674,22 @@ index 5701bd2..79cac82 100755
+ return;
+ }
+ LOG("AXE wakeup");
+ for (i = 0; i < 4; i++) {
+ for (i = mask = 0; i < 4; i++) {
+ /* lowband enabled */
+ if (opts.quattro && opts.quattro_hiband == 1 && i < 2) {
+ mask = 3;
+ continue;
+ }
+ /* hiband enabled */
+ if (opts.quattro && opts.quattro_hiband == 2 && i >= 2) {
+ mask = 3<<2;
+ continue;
+ }
+ mask |= 1<<i;
+ }
+ for (i = 0; i < 4 && mask; i++) {
+ if (((1 << i) & mask) == 0)
+ continue;
+ a = get_adapter(i);
+ if (a == NULL || a->force_disable)
+ continue;
@ -651,17 +702,17 @@ index 5701bd2..79cac82 100755
int send_diseqc(int fd, int pos, int pol, int hiband)
{
struct dvb_diseqc_master_cmd cmd = {
@@ -229,6 +258,9 @@ int send_diseqc(int fd, int pos, int pol, int hiband)
@@ -229,6 +273,9 @@ int send_diseqc(int fd, int pos, int pol, int hiband)
if (ioctl(fd, FE_SET_TONE, SEC_TONE_OFF) == -1)
LOG("send_diseqc: FE_SET_TONE failed for fd %d: %s", fd, strerror(errno));
+#ifdef AXE
+ axe_wakeup(pol ? SEC_VOLTAGE_18 : SEC_VOLTAGE_13);
+ axe_wakeup(fd, pol ? SEC_VOLTAGE_18 : SEC_VOLTAGE_13);
+#endif
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));
@@ -252,8 +284,12 @@ int send_unicable(int fd, int freq, int pos, int pol, int hiband, int slot, int
@@ -252,8 +299,12 @@ int send_unicable(int fd, int freq, int pos, int pol, int hiband, int slot, int
struct dvb_diseqc_master_cmd cmd = {
{0xe0, 0x11, 0x5a, 0x00, 0x00}, 5
};
@ -675,12 +726,12 @@ index 5701bd2..79cac82 100755
t = (freq + ufreq + 2) / 4 - 350;
cmd.msg[3] = ((t & 0x0300) >> 8) |
@@ -262,12 +298,15 @@ int send_unicable(int fd, int freq, int pos, int pol, int hiband, int slot, int
@@ -262,12 +313,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",
fd, freq, ufreq, pos, pol, hiband, slot, cmd.msg[0], cmd.msg[1], cmd.msg[2], cmd.msg[3], cmd.msg[4]);
+#ifdef AXE
+ axe_wakeup(SEC_VOLTAGE_13);
+ axe_wakeup(fd, SEC_VOLTAGE_13);
+#endif
if (ioctl(fd, FE_SET_VOLTAGE, SEC_VOLTAGE_13) == -1)
LOG("send_unicable: pre voltage SEC_VOLTAGE_13 failed for fd %d: %s", fd, strerror(errno));
@ -692,7 +743,7 @@ index 5701bd2..79cac82 100755
LOG("send_unicable: FE_SET_VOLTAGE failed for fd %d: %s", fd, strerror(errno));
msleep(15);
if (ioctl(fd, FE_DISEQC_SEND_MASTER_CMD, &cmd) == -1)
@@ -286,6 +325,7 @@ int send_jess(int fd, int freq, int pos, int pol, int hiband, int slot, int ufre
@@ -286,6 +340,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 - 100;
@ -700,12 +751,12 @@ index 5701bd2..79cac82 100755
cmd.msg[1] = slot << 3;
cmd.msg[1] |= ((t << 8) & 0x07);
@@ -295,12 +335,15 @@ int send_jess(int fd, int freq, int pos, int pol, int hiband, int slot, int ufre
@@ -295,12 +350,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",
fd, freq, ufreq, pos, pol, hiband, slot, cmd.msg[0], cmd.msg[1], cmd.msg[2], cmd.msg[3], cmd.msg[4]);
+#ifdef AXE
+ axe_wakeup(SEC_VOLTAGE_13);
+ axe_wakeup(fd, SEC_VOLTAGE_13);
+#endif
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));
@ -717,7 +768,7 @@ index 5701bd2..79cac82 100755
LOG("send_jess: FE_SET_VOLTAGE failed for fd %d: %s", fd, strerror(errno));
msleep(15);
if (ioctl(fd, FE_DISEQC_SEND_MASTER_CMD, &cmd) == -1)
@@ -312,6 +355,23 @@ int send_jess(int fd, int freq, int pos, int pol, int hiband, int slot, int ufre
@@ -312,6 +370,23 @@ int send_jess(int fd, int freq, int pos, int pol, int hiband, int slot, int ufre
return ufreq * 1000;
}
@ -727,11 +778,11 @@ index 5701bd2..79cac82 100755
+ if (diseqc <= 0)
+ *equattro = 0;
+ /* lowband allowed - control the hiband inputs independently for positions src=2+ */
+ else if (opts.quattro_hiband == 1 && input < 2)
+ *equattro = diseqc - 1;
+ else if (opts.quattro && opts.quattro_hiband == 1 && input < 2)
+ *equattro = diseqc;
+ /* hiband allowed - control the lowband inputs independently for positions src=2+ */
+ else if (opts.quattro_hiband == 2 && input >= 2 && input < 4)
+ *equattro = diseqc - 1;
+ else if (opts.quattro && opts.quattro_hiband == 2 && input >= 2 && input < 4)
+ *equattro = diseqc;
+ else
+ *equattro = 0;
+ return *equattro;
@ -741,7 +792,7 @@ index 5701bd2..79cac82 100755
int setup_switch (int frontend_fd, transponder *tp)
{
int i;
@@ -320,7 +380,7 @@ int setup_switch (int frontend_fd, transponder *tp)
@@ -320,7 +395,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;
@ -750,7 +801,7 @@ index 5701bd2..79cac82 100755
if (freq < SLOF)
{
freq = (freq - LOF1);
@@ -330,12 +390,113 @@ int setup_switch (int frontend_fd, transponder *tp)
@@ -330,12 +405,112 @@ int setup_switch (int frontend_fd, transponder *tp)
hiband = 1;
}
@ -807,8 +858,7 @@ index 5701bd2..79cac82 100755
+ }
+ goto axe;
+ }
+ }
+ if (ad && opts.quattro) {
+ } else if (ad && opts.quattro) {
+ if (opts.quattro_hiband == 1 && hiband) {
+ LOG("axe_fe: hiband is not allowed for quattro config (adapter %d)", input);
+ return 0;
@ -864,7 +914,7 @@ index 5701bd2..79cac82 100755
}else
{
if(tp->old_pol != pol || tp->old_hiband != hiband || tp->old_diseqc != diseqc)
@@ -343,6 +504,16 @@ int setup_switch (int frontend_fd, transponder *tp)
@@ -343,6 +518,16 @@ int setup_switch (int frontend_fd, transponder *tp)
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);
}
@ -881,7 +931,7 @@ index 5701bd2..79cac82 100755
tp->old_pol = pol;
tp->old_hiband = hiband;
@@ -383,8 +554,10 @@ tune_it_s2 (int fd_frontend, transponder * tp)
@@ -383,8 +568,10 @@ tune_it_s2 (int fd_frontend, transponder * tp)
{.cmd = DTV_INVERSION,.u.data = 0},
{.cmd = DTV_SYMBOL_RATE,.u.data = 0},
{.cmd = DTV_INNER_FEC,.u.data = 0},
@ -892,7 +942,7 @@ index 5701bd2..79cac82 100755
{.cmd = DTV_TUNE},
};
static struct dtv_properties dvbs2_cmdseq =
@@ -462,11 +635,15 @@ tune_it_s2 (int fd_frontend, transponder * tp)
@@ -462,11 +649,15 @@ tune_it_s2 (int fd_frontend, transponder * tp)
tp->mtype = QPSK;
bpol = getTick();
if_freq = setup_switch (fd_frontend, tp);
@ -908,7 +958,7 @@ index 5701bd2..79cac82 100755
p->props[INVERSION].u.data = tp->inversion;
p->props[SYMBOL_RATE].u.data = tp->sr;
p->props[FEC_INNER].u.data = tp->fec;
@@ -475,7 +652,12 @@ tune_it_s2 (int fd_frontend, transponder * tp)
@@ -475,7 +666,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",
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],
@ -922,7 +972,7 @@ index 5701bd2..79cac82 100755
break;
@@ -560,6 +742,20 @@ set_pid (int hw, int ad, uint16_t i_pid)
@@ -560,6 +756,20 @@ set_pid (int hw, int ad, uint16_t i_pid)
char buf[100];
int fd;
@ -943,7 +993,7 @@ index 5701bd2..79cac82 100755
if ( i_pid > 8192 )
LOG_AND_RETURN(-1, "pid %d > 8192 for /dev/dvb/adapter%d/demux%d", i_pid, hw, ad);
@@ -585,6 +781,7 @@ set_pid (int hw, int ad, uint16_t i_pid)
@@ -585,6 +795,7 @@ set_pid (int hw, int ad, uint16_t i_pid)
}
LOG ("setting filter on PID %d for fd %d", i_pid, fd);
@ -951,7 +1001,7 @@ index 5701bd2..79cac82 100755
return fd;
}
@@ -592,6 +789,17 @@ set_pid (int hw, int ad, uint16_t i_pid)
@@ -592,6 +803,17 @@ set_pid (int hw, int ad, uint16_t i_pid)
int del_filters (int fd, int pid)
{
@ -969,7 +1019,7 @@ index 5701bd2..79cac82 100755
if (fd < 0)
LOG_AND_RETURN(0, "DMX_STOP on an invalid handle %d, pid %d", fd, pid);
if (ioctl (fd, DMX_STOP) < 0)
@@ -599,6 +807,7 @@ int del_filters (int fd, int pid)
@@ -599,6 +821,7 @@ int del_filters (int fd, int pid)
else
LOG ("clearing filters on PID %d FD %d", pid, fd);
close (fd);
@ -977,7 +1027,7 @@ index 5701bd2..79cac82 100755
return 0;
}
@@ -606,6 +815,15 @@ int del_filters (int fd, int pid)
@@ -606,6 +829,15 @@ int del_filters (int fd, int pid)
fe_delivery_system_t
dvb_delsys (int aid, int fd, fe_delivery_system_t *sys)
{
@ -993,7 +1043,7 @@ index 5701bd2..79cac82 100755
int i, res, rv = 0;
struct dvb_frontend_info fe_info;
@@ -703,6 +921,7 @@ dvb_delsys (int aid, int fd, fe_delivery_system_t *sys)
@@ -703,6 +935,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);
return (fe_delivery_system_t) rv;
@ -1300,7 +1350,7 @@ index 821e756..2794f49 100755
char playlist[200];
};
diff --git a/socketworks.c b/socketworks.c
index b4891f1..1a275b7 100755
index b4891f1..4697f03 100755
--- a/socketworks.c
+++ b/socketworks.c
@@ -299,6 +299,7 @@ socket_action a, socket_action c, socket_action t)
@ -1311,10 +1361,18 @@ index b4891f1..1a275b7 100755
s[i].close_sec = 0;
s[i].sock_id = i;
pf[i].fd = sock;
@@ -339,6 +340,17 @@ sockets_del (int sock)
@@ -339,6 +340,25 @@ sockets_del (int sock)
return 0;
}
+void
+sockets_set_poll (int sock, int enable)
+{
+ if (sock < 0 || sock > MAX_SOCKS)
+ return;
+ pf[sock].events = enable ? (POLLIN | POLLPRI) : 0;
+}
+
+void
+sockets_reset (int sock)
+{
@ -1329,7 +1387,23 @@ index b4891f1..1a275b7 100755
int run_loop, it = 0, c_time;
int bw, bwtt, bwnotify;
@@ -433,6 +445,29 @@ select_and_execute ()
@@ -348,7 +368,6 @@ uint32_t nsecs, reads;
int
select_and_execute ()
{
- fd_set io;
struct timeval tv;
socklen_t slen;
int i,
@@ -362,7 +381,6 @@ select_and_execute ()
lt = getTick ();
while (run_loop)
{
- FD_ZERO (&io);
i = -1;
// LOG("start select");
if ((rv = poll (pf, max_sock, 200)) < 0)
@@ -433,6 +451,29 @@ select_and_execute ()
ss->rtime = c_time;
if(rlen>0)
ss->rlen += rlen;
@ -1359,8 +1433,34 @@ index b4891f1..1a275b7 100755
//force 0 at the end of the string
if(ss->lbuf >= ss->rlen)
ss->buf[ss->rlen] = 0;
@@ -510,8 +551,6 @@ select_and_execute ()
&& ((s[i].close_sec > 0 && lt - s[i].rtime > s[i].close_sec)
|| (s[i].close_sec == 1)))
{
- int do_close = 0;
-
// LOG("Timeout idle connection %d index %d",s[i].sock,i);
if (s[i].timeout && s[i].timeout (&s[i]))
sockets_del (i);
@@ -619,12 +658,13 @@ char *
get_current_timestamp_log (void)
{
static char date_str[200];
+ struct timeval tv;
time_t date;
struct tm *t;
- time (&date);
- t = localtime (&date);
+ if (gettimeofday(&tv, NULL)) return "01/01 00:00:20";
+ t = localtime (&tv.tv_sec);
if(!t) return "01/01 00:00:20";
- snprintf (date_str, sizeof (date_str), "%02d/%02d %02d:%02d:%02d.%03d",t->tm_mday, t->tm_mon + 1, t->tm_hour, t->tm_min, t->tm_sec, getTick());
+ snprintf (date_str, sizeof (date_str), "%02d/%02d %02d:%02d:%02d.%03d",t->tm_mday, t->tm_mon + 1, t->tm_hour, t->tm_min, t->tm_sec, (int)(tv.tv_usec / 1000));
return date_str;
}
diff --git a/socketworks.h b/socketworks.h
index 57b25b2..0d81319 100755
index 57b25b2..226c689 100755
--- a/socketworks.h
+++ b/socketworks.h
@@ -18,6 +18,7 @@ typedef struct struct_sockets
@ -1371,18 +1471,28 @@ index 57b25b2..0d81319 100755
int close_sec;
int sock_id; // socket id
int err;
@@ -43,6 +44,7 @@ int get_sock_port(int fd);
@@ -43,6 +44,8 @@ int get_sock_port(int fd);
int sockets_add (int sock, struct sockaddr_in *sa, int sid, int type,
socket_action a, socket_action c, socket_action t);
int sockets_del (int sock);
+void sockets_set_poll (int sock, int enable);
+void sockets_reset (int sock);
int no_action (int s);
int select_and_execute ();
int get_mac (char *mac);
diff --git a/stream.c b/stream.c
index db4a46d..2036841 100755
index db4a46d..8cdd239 100755
--- a/stream.c
+++ b/stream.c
@@ -54,7 +54,7 @@ getTick ()
{ //ms
struct timespec ts;
- clock_gettime (CLOCK_REALTIME, &ts);
+ clock_gettime (CLOCK_MONOTONIC, &ts);
theTick = ts.tv_nsec / 1000000;
theTick += ts.tv_sec * 1000;
ntime = ts.tv_sec * 1000000 + ts.tv_nsec;
@@ -320,6 +320,7 @@ int decode_transport (sockets * s, char *arg, char *default_rtp, int start_rtp)
if(sid->type == 0)
{

View File

@ -1,8 +1,24 @@
diff --git a/adapter.c b/adapter.c
index 839c078..a95564d 100644
index cd5d8f5..2bb026c 100644
--- a/adapter.c
+++ b/adapter.c
@@ -612,6 +612,7 @@ int tune(int aid, int sid)
@@ -117,6 +117,7 @@ int adapter_timeout(sockets *s)
return 0;
}
+#ifndef AXE
if (opts.no_threads)
{
for (i = 0; i < MAX_ADAPTERS; i++)
@@ -133,6 +134,7 @@ int adapter_timeout(sockets *s)
s->sid, do_close, max_close);
if (!do_close)
s->rtime = max_close;
+#endif
return do_close;
}
@@ -617,6 +619,7 @@ int tune(int aid, int sid)
ad->status = -1;
ad->status_cnt = 0;
set_socket_pos(ad->sock, 0); // flush the existing buffer
@ -10,7 +26,7 @@ index 839c078..a95564d 100644
ad->rlen = 0;
if (ad->sid_cnt > 1) // the master changed the frequency
{
@@ -1284,6 +1285,53 @@ void set_slave_adapters(char *o)
@@ -1304,6 +1307,53 @@ void set_slave_adapters(char *o)
}
}
@ -65,7 +81,7 @@ index 839c078..a95564d 100644
void set_adapters_delsys(char *o)
{
diff --git a/adapter.h b/adapter.h
index d7d9194..317b19c 100644
index 39d4d5f..c4eb45f 100644
--- a/adapter.h
+++ b/adapter.h
@@ -6,7 +6,11 @@
@ -84,12 +100,12 @@ index d7d9194..317b19c 100644
char enabled;
SMutex mutex;
char type; // available on the system
- int fe, dvr;
+ int fe, fe2, dvr;
- int fe, dvr, dmx;
+ int fe, fe2, dvr, dmx;
int pa, fn;
// physical adapter, physical frontend number
fe_delivery_system_t sys[MAX_DELSYS];
@@ -84,6 +88,9 @@ typedef struct struct_adapter
@@ -85,6 +89,9 @@ typedef struct struct_adapter
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
diseqc diseqc_param;
@ -99,10 +115,10 @@ index d7d9194..317b19c 100644
int old_diseqc;
int old_hiband;
int old_pol;
@@ -129,6 +136,8 @@ void set_unicable_adapters(char *o, int type);
void set_diseqc_adapters(char *o);
@@ -131,6 +138,8 @@ void set_diseqc_adapters(char *o);
void set_diseqc_timing(char *o);
void set_slave_adapters(char *o);
void set_adapter_dmxsource(char *o);
+void set_link_adapters(char *o);
+void set_unicable_input(char *o);
void reset_pids_type(int aid, int clear_pat);
@ -264,7 +280,7 @@ index 0000000..d8b06bc
+
+#endif
diff --git a/dvb.c b/dvb.c
index 7916d2b..7daa5a8 100644
index 74124fc..bcfc684 100644
--- a/dvb.c
+++ b/dvb.c
@@ -42,6 +42,11 @@
@ -279,7 +295,7 @@ index 7916d2b..7daa5a8 100644
char *fe_pilot[] =
{ "on", "off", " ", //auto
NULL };
@@ -329,29 +334,45 @@ int dvb_open_device(adapter *ad)
@@ -329,25 +334,40 @@ int dvb_open_device(adapter *ad)
char buf[100];
LOG("trying to open [%d] adapter %d and frontend %d", ad->id, ad->pa,
ad->fn);
@ -315,25 +331,29 @@ index 7916d2b..7daa5a8 100644
return 1;
}
ad->type = ADAPTER_DVB;
ad->dmx = -1;
LOG("opened DVB adapter %d fe:%d dvr:%d", ad->id, ad->fe, ad->dvr);
+#ifndef AXE
if (ioctl(ad->dvr, DMX_SET_BUFFER_SIZE, opts.dvr_buffer) < 0)
LOG("couldn't set DVR buffer size error %d: %s", errno, strerror(errno))
else
LOG("Done setting DVR buffer to %d bytes", opts.dvr_buffer);
@@ -367,7 +387,7 @@ int dvb_open_device(adapter *ad)
LOG("Set DMX_SET_SOURCE for adapter %d to %d", ad->id, ad->dmx_source);
}
-
+#endif
return 0;
}
@@ -377,6 +398,31 @@ void diseqc_cmd(int fd, int times, char *str, struct dvb_diseqc_master_cmd *cmd,
@@ -393,6 +413,46 @@ void diseqc_cmd(int fd, int times, char *str, struct dvb_diseqc_master_cmd *cmd,
}
+#ifdef AXE
+void axe_wakeup(int voltage)
+void axe_wakeup(int fe_fd, int voltage)
+{
+ int i;
+ int i, mask;
+ adapter *a;
+ if (opts.axe_power < 2)
+ return;
@ -345,7 +365,22 @@ index 7916d2b..7daa5a8 100644
+ return;
+ }
+ LOG("AXE wakeup");
+ for (i = 0; i < 4; i++) {
+ for (i = mask = 0; i < 4; i++) {
+ /* lowband enabled */
+ if (opts.quattro && opts.quattro_hiband == 1 && i < 2) {
+ mask = 3;
+ continue;
+ }
+ /* hiband enabled */
+ if (opts.quattro && opts.quattro_hiband == 2 && i >= 2) {
+ mask = 3<<2;
+ continue;
+ }
+ mask |= 1<<i;
+ }
+ for (i = 0; i < 4 && mask; i++) {
+ if (((1 << i) & mask) == 0)
+ continue;
+ a = get_adapter(i);
+ if (a == NULL || is_adapter_disabled(i))
+ continue;
@ -358,37 +393,37 @@ index 7916d2b..7daa5a8 100644
int send_diseqc(int fd, int pos, int pos_change, int pol, int hiband, diseqc *d)
{
int committed_no = d->committed_no;
@@ -412,6 +458,9 @@ int send_diseqc(int fd, int pos, int pos_change, int pol, int hiband, diseqc *d)
@@ -428,6 +488,9 @@ int send_diseqc(int fd, int pos, int pos_change, int pol, int hiband, diseqc *d)
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);
+ axe_wakeup(fd, 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));
@@ -472,6 +521,9 @@ int send_unicable(int fd, int freq, int pos, int pol, int hiband, diseqc *d)
@@ -490,6 +553,9 @@ int send_unicable(int fd, int freq, int pos, int pol, int hiband, diseqc *d)
"send_unicable fd %d, freq %d, ufreq %d, pos = %d, pol = %d, hiband = %d, slot %d, diseqc => %02x %02x %02x %02x %02x",
fd, freq, d->ufreq, pos, pol, hiband, d->uslot, cmd.msg[0], cmd.msg[1],
cmd.msg[2], cmd.msg[3], cmd.msg[4]);
fd, freq, d->ufreq, pos, pol, hiband, d->uslot, cmd.msg[0],
cmd.msg[1], cmd.msg[2], cmd.msg[3], cmd.msg[4]);
+#ifdef AXE
+ axe_wakeup(SEC_VOLTAGE_13);
+ axe_wakeup(fd, SEC_VOLTAGE_13);
+#endif
if (ioctl(fd, FE_SET_VOLTAGE, SEC_VOLTAGE_13) == -1)
LOG("send_unicable: pre voltage SEC_VOLTAGE_13 failed for fd %d: %s",
fd, strerror(errno));
@@ -519,6 +571,9 @@ int send_jess(int fd, int freq, int pos, int pol, int hiband, diseqc *d)
fd, freq, d->ufreq, pos, pol, hiband, d->uslot, cmd.msg[0], cmd.msg[1],
cmd.msg[2], cmd.msg[3], cmd.msg[4]);
@@ -537,6 +603,9 @@ int send_jess(int fd, int freq, int pos, int pol, int hiband, diseqc *d)
fd, freq, d->ufreq, pos, pol, hiband, d->uslot, cmd.msg[0],
cmd.msg[1], cmd.msg[2], cmd.msg[3], cmd.msg[4]);
+#ifdef AXE
+ axe_wakeup(SEC_VOLTAGE_13);
+ axe_wakeup(fd, SEC_VOLTAGE_13);
+#endif
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));
@@ -541,6 +596,23 @@ int send_jess(int fd, int freq, int pos, int pol, int hiband, diseqc *d)
@@ -559,6 +628,23 @@ int send_jess(int fd, int freq, int pos, int pol, int hiband, diseqc *d)
return d->ufreq * 1000;
}
@ -398,11 +433,11 @@ index 7916d2b..7daa5a8 100644
+ if (diseqc <= 0)
+ *equattro = 0;
+ /* lowband allowed - control the hiband inputs independently for positions src=2+ */
+ else if (opts.quattro_hiband == 1 && input < 2)
+ *equattro = diseqc - 1;
+ else if (opts.quattro && opts.quattro_hiband == 1 && input < 2)
+ *equattro = diseqc;
+ /* hiband allowed - control the lowband inputs independently for positions src=2+ */
+ else if (opts.quattro_hiband == 2 && input >= 2 && input < 4)
+ *equattro = diseqc - 1;
+ else if (opts.quattro && opts.quattro_hiband == 2 && input >= 2 && input < 4)
+ *equattro = diseqc;
+ else
+ *equattro = 0;
+ return *equattro;
@ -412,7 +447,7 @@ index 7916d2b..7daa5a8 100644
int setup_switch(int frontend_fd, adapter *ad, transponder *tp)
{
int hiband = 0;
@@ -564,15 +636,112 @@ int setup_switch(int frontend_fd, adapter *ad, transponder *tp)
@@ -582,15 +668,111 @@ int setup_switch(int frontend_fd, adapter *ad, transponder *tp)
hiband = 1;
}
@ -424,7 +459,7 @@ index 7916d2b..7daa5a8 100644
+ if (tp->diseqc_param.switch_type != SWITCH_UNICABLE &&
+ tp->diseqc_param.switch_type != SWITCH_JESS) {
+ input = ad->id;
+ if (ad && (!opts.quattro || extra_quattro(input, diseqc, &equattro))) {
+ if (!opts.quattro || extra_quattro(input, diseqc, &equattro)) {
+ if (equattro > 0)
+ diseqc = equattro - 1;
+ adm = get_adapter(ad->slave ? ad->slave - 1 : ad->pa);
@ -461,8 +496,7 @@ index 7916d2b..7daa5a8 100644
+ }
+ goto axe;
+ }
+ }
+ if (ad && opts.quattro) {
+ } else if (opts.quattro) {
+ if (opts.quattro_hiband == 1 && hiband) {
+ LOG("axe_fe: hiband is not allowed for quattro config (adapter %d)", input);
+ return 0;
@ -484,7 +518,7 @@ index 7916d2b..7daa5a8 100644
+ adm->old_hiband = hiband;
+ adm->old_diseqc = diseqc = 0;
+ }
+ adm->axe_used |= (1 << input);
+ adm->axe_used |= (1 << ad->id);
+ adm->axe_feused = 1;
+ goto axe;
+ }
@ -503,30 +537,34 @@ index 7916d2b..7daa5a8 100644
+
if (tp->diseqc_param.switch_type == SWITCH_UNICABLE)
{
- freq = send_unicable(frontend_fd, freq / 1000, diseqc, pol, hiband,
- &tp->diseqc_param);
+#ifdef AXE
+ if (ad)
+ freq = send_unicable(ad->fe, freq / 1000, diseqc,
+ pol, hiband, &tp->diseqc_param);
+#else
freq = send_unicable(frontend_fd, freq / 1000, diseqc,
pol, hiband, &tp->diseqc_param);
+ freq = send_unicable(frontend_fd, freq / 1000, diseqc,
+ pol, hiband, &tp->diseqc_param);
+#endif
}
else if (tp->diseqc_param.switch_type == SWITCH_JESS)
{
- freq = send_jess(frontend_fd, freq / 1000, diseqc, pol, hiband,
- &tp->diseqc_param);
+#ifdef AXE
+ if (ad)
+ freq = send_jess(ad->fe, freq / 1000, diseqc,
+ pol, hiband, &tp->diseqc_param);
+#else
freq = send_jess(frontend_fd, freq / 1000, diseqc,
pol, hiband, &tp->diseqc_param);
+ freq = send_jess(frontend_fd, freq / 1000, diseqc,
+ pol, hiband, &tp->diseqc_param);
+#endif
}
else if (tp->diseqc_param.switch_type == SWITCH_SLAVE)
{
@@ -591,6 +760,17 @@ int setup_switch(int frontend_fd, adapter *ad, transponder *tp)
pol, hiband, diseqc);
@@ -609,6 +791,17 @@ int setup_switch(int frontend_fd, adapter *ad, transponder *tp)
diseqc);
}
+#ifdef AXE
@ -543,7 +581,7 @@ index 7916d2b..7daa5a8 100644
ad->old_pol = pol;
ad->old_hiband = hiband;
ad->old_diseqc = diseqc;
@@ -626,6 +806,14 @@ int dvb_tune(int aid, transponder * tp)
@@ -644,6 +837,14 @@ int dvb_tune(int aid, transponder * tp)
memset(p_cmd, 0, sizeof(p_cmd));
bclear = getTick();
@ -558,7 +596,7 @@ index 7916d2b..7daa5a8 100644
if ((ioctl(fd_frontend, FE_SET_PROPERTY, &cmdseq_clear)) == -1)
{
LOG("FE_SET_PROPERTY DTV_CLEAR failed for fd %d: %s", fd_frontend,
@@ -645,8 +833,10 @@ int dvb_tune(int aid, transponder * tp)
@@ -663,8 +864,10 @@ int dvb_tune(int aid, transponder * tp)
ADD_PROP(DTV_SYMBOL_RATE, tp->sr)
ADD_PROP(DTV_INNER_FEC, tp->fec)
@ -569,7 +607,7 @@ index 7916d2b..7daa5a8 100644
#if DVBAPIVERSION >= 0x0502
ADD_PROP(DTV_STREAM_ID, tp->plp)
#endif
@@ -655,7 +845,12 @@ int dvb_tune(int aid, transponder * tp)
@@ -673,7 +876,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",
tp->freq, freq, get_pol(tp->pol), tp->pol, tp->sr,
fe_fec[tp->fec], fe_delsys[tp->sys], fe_modulation[tp->mtype],
@ -583,7 +621,7 @@ index 7916d2b..7daa5a8 100644
break;
case SYS_DVBT:
@@ -756,29 +951,46 @@ int dvb_tune(int aid, transponder * tp)
@@ -774,29 +982,46 @@ int dvb_tune(int aid, transponder * tp)
if (ioctl(fd_frontend, FE_SET_PROPERTY, &p) == -1)
{
LOG("dvb_tune: set property failed %d %s", errno, strerror(errno));
@ -635,7 +673,7 @@ index 7916d2b..7daa5a8 100644
return -1;
}
@@ -804,10 +1016,22 @@ int dvb_set_pid(adapter *a, uint16_t i_pid)
@@ -822,10 +1047,22 @@ int dvb_set_pid(adapter *a, uint16_t i_pid)
LOG("setting filter on PID %d for fd %d", i_pid, fd);
return fd;
@ -658,7 +696,7 @@ index 7916d2b..7daa5a8 100644
if (fd < 0)
LOG_AND_RETURN(0, "DMX_STOP on an invalid handle %d, pid %d", fd, pid);
if (ioctl(fd, DMX_STOP, NULL) < 0)
@@ -816,10 +1040,20 @@ int dvb_del_filters(int fd, int pid)
@@ -834,10 +1071,20 @@ int dvb_del_filters(int fd, int pid)
LOG("clearing filter on PID %d FD %d", pid, fd);
close(fd);
return 0;
@ -679,7 +717,7 @@ index 7916d2b..7daa5a8 100644
int i, res, rv = 0;
struct dvb_frontend_info fe_info;
@@ -908,6 +1142,7 @@ fe_delivery_system_t dvb_delsys(int aid, int fd, fe_delivery_system_t *sys)
@@ -926,6 +1173,7 @@ fe_delivery_system_t dvb_delsys(int aid, int fd, fe_delivery_system_t *sys)
fe_delsys[sys[i]], sys[i]);
return (fe_delivery_system_t) rv;
@ -687,7 +725,7 @@ index 7916d2b..7daa5a8 100644
}
@@ -1020,6 +1255,7 @@ void dvb_get_signal(adapter *ad)
@@ -1037,6 +1285,7 @@ void dvb_get_signal(adapter *ad)
ad->max_strength = (ad->strength > 0) ? ad->strength : 1;
if (ad->max_snr <= ad->snr)
ad->max_snr = (ad->snr > 0) ? ad->snr : 1;
@ -695,7 +733,7 @@ index 7916d2b..7daa5a8 100644
if (ad->snr > 4096)
new_gs = 0;
if (new_gs)
@@ -1032,6 +1268,14 @@ void dvb_get_signal(adapter *ad)
@@ -1049,6 +1298,14 @@ void dvb_get_signal(adapter *ad)
ad->strength = ad->strength >> 8;
ad->snr = ad->snr >> 8;
}
@ -710,12 +748,13 @@ index 7916d2b..7daa5a8 100644
}
void dvb_commit(adapter *a)
@@ -1039,6 +1283,47 @@ void dvb_commit(adapter *a)
@@ -1056,12 +1313,52 @@ void dvb_commit(adapter *a)
return;
}
-void dvb_close(adapter *a)
+int dvb_close(adapter *a2)
+{
{
+#ifdef AXE
+ adapter *c;
+ int aid, busy;
@ -726,19 +765,21 @@ index 7916d2b..7daa5a8 100644
+ axe_fe_reset(a2->fe2);
+ for (aid = busy = 0; aid < 4; aid++) {
+ c = a[aid];
+ c->axe_used &= ~(1 << aid);
+ if (c->axe_used || c->sid_cnt > 0) busy++;
+ c->axe_used &= ~(1 << a2->id);
+ if (c->axe_used || c->fe > 0) busy++;
+ }
+ if (busy > 0 && opts.axe_power > 1)
+ goto nostandby;
+ for (aid = 0; aid < 4; aid++) {
+ c = a[aid];
+ if (opts.axe_power < 2 && c != a2 && busy)
+ continue;
+ 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)
+ if (c->fe2 < 0)
+ continue;
+ LOG("AXE standby: adapter %d", aid);
+ axe_fe_standby(c->fe2, -1);
@ -751,14 +792,18 @@ index 7916d2b..7daa5a8 100644
+ }
+nostandby:
+ axe_set_tuner_led(a2->id + 1, 0);
+ return 0;
+#else
if (a->dmx >= 0)
close(a->dmx);
a->dmx = -1;
- return;
+#endif
+ return 0;
+}
+
}
void find_dvb_adapter(adapter **a)
{
int na = 0;
@@ -1047,9 +1332,21 @@ void find_dvb_adapter(adapter **a)
@@ -1072,9 +1369,21 @@ void find_dvb_adapter(adapter **a)
int i = 0, j = 0;
adapter *ad;
@ -780,7 +825,7 @@ index 7916d2b..7daa5a8 100644
sprintf(buf, "/dev/dvb/adapter%d/frontend%d", i, j);
fd = open(buf, O_RDONLY | O_NONBLOCK);
if (fd < 0)
@@ -1057,7 +1354,8 @@ void find_dvb_adapter(adapter **a)
@@ -1082,7 +1391,8 @@ void find_dvb_adapter(adapter **a)
sprintf(buf, "/dev/dvb/adapter%d/ca%d", i, j);
fd = open(buf, O_RDONLY | O_NONBLOCK);
}
@ -790,16 +835,7 @@ index 7916d2b..7daa5a8 100644
if (fd >= 0)
{
// if (is_adapter_disabled(na))
@@ -1079,7 +1377,7 @@ void find_dvb_adapter(adapter **a)
ad->tune = (Tune) dvb_tune;
ad->delsys = (Dvb_delsys) dvb_delsys;
ad->post_init = NULL;
- ad->close = NULL;
+ ad->close = (Adapter_commit) dvb_close;
ad->get_signal = (Device_signal) dvb_get_signal;
ad->type = ADAPTER_DVB;
close(fd);
@@ -1088,6 +1386,14 @@ void find_dvb_adapter(adapter **a)
@@ -1113,6 +1423,14 @@ void find_dvb_adapter(adapter **a)
if (na == MAX_ADAPTERS)
return;
}
@ -814,11 +850,56 @@ index 7916d2b..7daa5a8 100644
}
for (; na < MAX_ADAPTERS; na++)
if (a[na])
diff --git a/html/status.html b/html/status.html
index 15dc0fa..01fe57f 100644
--- a/html/status.html
+++ b/html/status.html
@@ -16,6 +16,10 @@
font-family: Tahoma, Geneva, sans-serif;
font-size: 1em;
}
+ .level {
+ display: inline;
+ white-space: nowrap;
+ }
/*
.enabled {
color: green;
@@ -33,12 +37,8 @@
<!--<body onload="JavaScript:timedRefresh(5000);">-->
<body>
-This page will refresh every 5 seconds.<br />
<script type="text/javascript">
-//function timedRefresh(timeoutPeriod) {
-// // setTimeout("location.reload(true);", timeoutPeriod);
-//};
var ad_type = [$ad_type0$, $ad_type1$, $ad_type2$, $ad_type3$, $ad_type4$, $ad_type5$, $ad_type6$, $ad_type7$, $ad_type8$, $ad_type9$, $ad_type10$, $ad_type11$, $ad_type12$, $ad_type13$, $ad_type14$, $ad_type15$ ];
var ad_enabled = [$ad_enabled0$, $ad_enabled1$, $ad_enabled2$, $ad_enabled3$, $ad_enabled4$, $ad_enabled5$, $ad_enabled6$, $ad_enabled7$, $ad_enabled8$, $ad_enabled9$, $ad_enabled10$, $ad_enabled11$, $ad_enabled12$, $ad_enabled13$, $ad_enabled14$, $ad_enabled15$ ];
@@ -134,13 +134,10 @@ for (var i = 0; i < max_adapters; i++) {
signal = "<small>OFFLINE</small>";
} else {
var s1 = parseInt(ad_strength[i] / 2.55);
- signal = "LEV <div class='pBar' data-from='"+ s1 + "' data-to='" + s1 + "'></div><br />";
+ signal = "<div class='level'>LEV <div class='pBar' data-from='"+ s1 + "' data-to='" + s1 + "'></div></div><br />";
- if (ad_type[i] == 1)
- var s2 = parseInt(ad_snr[i] / 2.55);
- else
- var s2 = parseInt(ad_snr[i] / 0.15);
- signal += "SNR <div class='pBar' data-from='"+ s2 + "' data-to='" + s2 + "'></div><br />";
+ var s2 = parseInt(ad_snr[i] / 0.15);
+ signal += "<div class='level'>SNR <div class='pBar' data-from='"+ s2 + "' data-to='" + s2 + "'></div></div><br />";
if (ad_ber[i] > 0)
signal += "<small><b style='color:red;'>BER " + ad_ber[i] + "</b></small>";
diff --git a/minisatip.c b/minisatip.c
index 9226e2d..4b0ee5b 100644
index 1a5dbb5..3c6477c 100644
--- a/minisatip.c
+++ b/minisatip.c
@@ -87,6 +87,13 @@ static const struct option long_options[] =
@@ -88,6 +88,13 @@ static const struct option long_options[] =
{ "xml", required_argument, NULL, 'X' },
{ "help", no_argument, NULL, 'h' },
{ "version", no_argument, NULL, 'V' },
@ -832,10 +913,10 @@ index 9226e2d..4b0ee5b 100644
{ 0, 0, 0, 0 } };
#define RRTP_OPT 'r'
@@ -119,12 +126,22 @@ static const struct option long_options[] =
#define DOCUMENTROOT_OPT 'R'
@@ -121,12 +128,22 @@ static const struct option long_options[] =
#define XML_OPT 'X'
#define THREADS_OPT 'T'
#define DMXSOURCE_OPT '9'
+#define LINK_OPT 'L'
+#define QUATTRO_OPT 'Q'
+#define QUATTRO_HIBAND_OPT 'Z'
@ -857,16 +938,16 @@ index 9226e2d..4b0ee5b 100644
if (!use_log)
puts(buf);
else
@@ -135,7 +152,7 @@ void usage()
@@ -137,7 +154,7 @@ void usage()
{
print_version(0);
printf(
- "\n\t./%s [-[fgltz]] [-a x:y:z] [-b X:Y] [-c X] [-d A:C-U ] [-D device_id] [-e X-Y,Z] [-i prio] \n\
+ "\n\t./%s [-[fgltzQ]] [-a x:y:z] [-b X:Y] [-c X] [-d A:C-U ] [-D device_id] [-e X-Y,Z] [-i prio] \n\
\t[-j A1:S1-F1[-PIN]] [-m mac] "
\t[-[uj] A1:S1-F1[-PIN]] [-m mac]"
#ifndef DISABLE_DVBCSA
"[-o oscam_host:dvbapi_port] "
@@ -146,7 +163,8 @@ void usage()
@@ -148,7 +165,8 @@ void usage()
"[-s [DELSYS:]host[:port] "
#endif
"[-u A1:S1-F1[-PIN]] [-w http_server[:port]] \n\
@ -876,7 +957,7 @@ index 9226e2d..4b0ee5b 100644
Help\n\
-------\n\
\n\
@@ -269,7 +287,30 @@ Help\n\
@@ -274,7 +292,30 @@ Help\n\
* eg: -y 5544 \n\
- changing this to a port > 1024 removes the requirement for minisatip to run as root\n\
\n\
@ -908,7 +989,7 @@ index 9226e2d..4b0ee5b 100644
app_name,
ADAPTER_BUFFER,
DVR_BUFFER, opts.no_threads ? "DISABLED" : "ENABLED");
@@ -309,7 +350,7 @@ void set_options(int argc, char *argv[])
@@ -314,7 +355,7 @@ void set_options(int argc, char *argv[])
opts.satip_setup_pids = 0;
opts.output_buffer = 512 * 1024;
opts.satip_servers[0] = 0;
@ -917,7 +998,7 @@ index 9226e2d..4b0ee5b 100644
opts.xml_path = DESC_XML;
opts.no_threads = 0;
opts.th_priority = -1;
@@ -323,10 +364,11 @@ void set_options(int argc, char *argv[])
@@ -328,10 +369,11 @@ void set_options(int argc, char *argv[])
#ifdef __mips__
opts.no_threads = 1;
#endif
@ -930,7 +1011,7 @@ index 9226e2d..4b0ee5b 100644
long_options, NULL)) != -1)
{
// printf("options %d %c %s\n",opt,opt,optarg);
@@ -398,9 +440,12 @@ void set_options(int argc, char *argv[])
@@ -403,9 +445,12 @@ void set_options(int argc, char *argv[])
opts.adapter_buffer = (opts.adapter_buffer / 188) * 188;
if (opts.adapter_buffer < ADAPTER_BUFFER)
opts.adapter_buffer = ADAPTER_BUFFER;
@ -944,7 +1025,7 @@ index 9226e2d..4b0ee5b 100644
break;
}
@@ -553,6 +598,35 @@ void set_options(int argc, char *argv[])
@@ -564,6 +609,35 @@ void set_options(int argc, char *argv[])
LOGL(0, "Not a valid path for the xml file")
;
break;
@ -980,7 +1061,7 @@ index 9226e2d..4b0ee5b 100644
}
}
@@ -1048,6 +1122,9 @@ int ssdp_reply(sockets * s)
@@ -1059,6 +1133,9 @@ int ssdp_reply(sockets * s)
return 0;
}
@ -990,7 +1071,7 @@ index 9226e2d..4b0ee5b 100644
// not my uuid
LOG("Received SSDP packet from %s:%d -> handle %d",
get_socket_rhost(s->id, ra, sizeof(ra)), get_socket_rport(s->id),
@@ -1183,7 +1260,11 @@ int main(int argc, char *argv[])
@@ -1194,7 +1271,11 @@ int main(int argc, char *argv[])
if (!opts.no_threads)
set_socket_thread(sock_signal, start_new_thread("signal"));
@ -1005,12 +1086,12 @@ index 9226e2d..4b0ee5b 100644
diff --git a/minisatip.h b/minisatip.h
old mode 100644
new mode 100755
index 9c8e2fc..4e2a4fd
index 4fa7629..1a45259
--- a/minisatip.h
+++ b/minisatip.h
@@ -10,7 +10,7 @@
#define VERSION_BUILD "27"
#define VERSION_BUILD "30"
#define CC(a,b,c) #a b #c
-#define VERSION CC(0.5.,VERSION_BUILD,)
+#define VERSION CC(0.5.,VERSION_BUILD,-axe101)
@ -1108,8 +1189,30 @@ index c852e2a..aa4157c
char *get_socket_rhost(int s_id, char *dest, int ld);
int get_socket_rport(int s_id);
void set_sock_lock(int i, SMutex *m);
diff --git a/stream.c b/stream.c
index 1aad15a..bec6787 100644
--- a/stream.c
+++ b/stream.c
@@ -53,7 +53,7 @@ unsigned init_tick, theTick;
uint32_t getTick()
{ //ms
struct timespec ts;
- clock_gettime(CLOCK_REALTIME, &ts);
+ clock_gettime(CLOCK_MONOTONIC, &ts);
theTick = ts.tv_nsec / 1000000;
theTick += ts.tv_sec * 1000;
if (init_tick == 0)
@@ -65,7 +65,7 @@ uint64_t getTickUs()
{
uint64_t utime;
struct timespec ts;
- clock_gettime(CLOCK_REALTIME, &ts);
+ clock_gettime(CLOCK_MONOTONIC, &ts);
utime = ((uint64_t) ts.tv_sec) * 1000000 + ts.tv_nsec / 1000;
return utime;
diff --git a/utils.c b/utils.c
index eaa0317..8cb7c49 100644
index 7f36963..c22e292 100644
--- a/utils.c
+++ b/utils.c
@@ -36,6 +36,8 @@
@ -1121,7 +1224,7 @@ index eaa0317..8cb7c49 100644
#include <net/if.h>
#include <fcntl.h>
#include <ctype.h>
@@ -1141,6 +1143,7 @@ pthread_t start_new_thread(char *name)
@@ -1145,6 +1147,7 @@ pthread_t start_new_thread(char *name)
void set_thread_prio(pthread_t tid, int prio)
{
@ -1129,7 +1232,7 @@ index eaa0317..8cb7c49 100644
int rv;
struct sched_param param;
memset( &param, 0, sizeof(struct sched_param) );
@@ -1148,6 +1151,12 @@ void set_thread_prio(pthread_t tid, int prio)
@@ -1152,6 +1155,12 @@ void set_thread_prio(pthread_t tid, int prio)
if ( (rv = pthread_setschedparam( pthread_self(), SCHED_RR, &param )) )
LOG("pthread_setschedparam failed with error %d", rv);
return;