mirror of
https://github.com/DigitalDevices/octonet.git
synced 2023-10-10 13:36:52 +02:00
Compare commits
No commits in common. "master" and "1.0.81" have entirely different histories.
@ -6,7 +6,7 @@ On Debian/Ubuntu (as root or using sudo):
|
|||||||
|
|
||||||
```
|
```
|
||||||
>apt-get install build-essential bison flex gettext libncurses5-dev texinfo autoconf automake libtool
|
>apt-get install build-essential bison flex gettext libncurses5-dev texinfo autoconf automake libtool
|
||||||
>apt-get install libpng12-dev libglib2.0-dev libgtk2.0-dev gperf
|
>apt-get install libpng12-dev libglib2.0-dev libgtk2.0-dev gperf libxt-dev libxp-dev
|
||||||
>apt-get install rsync git subversion mercurial
|
>apt-get install rsync git subversion mercurial
|
||||||
```
|
```
|
||||||
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -2,7 +2,6 @@
|
|||||||
|
|
||||||
case "$1" in
|
case "$1" in
|
||||||
start)
|
start)
|
||||||
/etc/recflash
|
|
||||||
/usr/bin/ddflash
|
/usr/bin/ddflash
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
@ -13,7 +13,6 @@ define OCTONET_INSTALL_TARGET_CMDS
|
|||||||
$(INSTALL) -m 0755 -D $(@D)/octokey $(TARGET_DIR)/usr/bin/octokey
|
$(INSTALL) -m 0755 -D $(@D)/octokey $(TARGET_DIR)/usr/bin/octokey
|
||||||
$(INSTALL) -m 0755 -D $(@D)/octonet $(TARGET_DIR)/usr/bin/octonet
|
$(INSTALL) -m 0755 -D $(@D)/octonet $(TARGET_DIR)/usr/bin/octonet
|
||||||
$(INSTALL) -m 0755 -D $(@D)/ddtest $(TARGET_DIR)/usr/bin/ddtest
|
$(INSTALL) -m 0755 -D $(@D)/ddtest $(TARGET_DIR)/usr/bin/ddtest
|
||||||
$(INSTALL) -m 0755 -D $(@D)/ddupdate $(TARGET_DIR)/usr/bin/ddupdate
|
|
||||||
endef
|
endef
|
||||||
|
|
||||||
$(eval $(generic-package))
|
$(eval $(generic-package))
|
||||||
|
10
mk
10
mk
@ -13,17 +13,9 @@ LINUX=../linux.octonet
|
|||||||
#fi
|
#fi
|
||||||
|
|
||||||
cp $DDDVB/ddbridge/*.[ch] $LINUX/drivers/media/pci/ddbridge/
|
cp $DDDVB/ddbridge/*.[ch] $LINUX/drivers/media/pci/ddbridge/
|
||||||
cp $DDDVB/ddbridge/Kconfig $LINUX/drivers/media/pci/ddbridge/
|
cp $DDDVB/dvb-core/*.[ch] $LINUX/drivers/media/dvb-core/
|
||||||
cp $DDDVB/ddbridge/Makefile.kernel $LINUX/drivers/media/pci/ddbridge/Makefile
|
|
||||||
cp $DDDVB/dvb-core/*.c $LINUX/drivers/media/dvb-core/
|
|
||||||
cp $DDDVB/dvb-core/Kconfig $LINUX/drivers/media/dvb-core/
|
|
||||||
mkdir $LINUX/drivers/media/dvb-core/media/
|
|
||||||
cp $DDDVB/include/linux/media/*.h $LINUX/drivers/media/dvb-core/media/
|
|
||||||
cp $DDDVB/dvb-core/Makefile.kernel $LINUX/drivers/media/dvb-core/Makefile
|
|
||||||
cp $DDDVB/include/linux/dvb/*.h $LINUX/include/uapi/linux/dvb/
|
cp $DDDVB/include/linux/dvb/*.h $LINUX/include/uapi/linux/dvb/
|
||||||
|
|
||||||
cp $DDDVB/frontends/Kconfig $LINUX/drivers/media/dvb-frontends/
|
|
||||||
cp $DDDVB/frontends/Makefile.kernel $LINUX/drivers/media/dvb-frontends/Makefile
|
|
||||||
cp $DDDVB/frontends/drxk*.[ch] $LINUX/drivers/media/dvb-frontends/
|
cp $DDDVB/frontends/drxk*.[ch] $LINUX/drivers/media/dvb-frontends/
|
||||||
cp $DDDVB/frontends/lnb*.[ch] $LINUX/drivers/media/dvb-frontends/
|
cp $DDDVB/frontends/lnb*.[ch] $LINUX/drivers/media/dvb-frontends/
|
||||||
cp $DDDVB/frontends/stv0367dd*.[ch] $LINUX/drivers/media/dvb-frontends/
|
cp $DDDVB/frontends/stv0367dd*.[ch] $LINUX/drivers/media/dvb-frontends/
|
||||||
|
@ -1,18 +1,18 @@
|
|||||||
/*
|
/*
|
||||||
(C) 2015-16 Digital Devices GmbH.
|
(C) 2015-16 Digital Devices GmbH.
|
||||||
|
|
||||||
Octoscan is free software: you can redistribute it and/or modify
|
Octoscan is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
(at your option) any later version.
|
(at your option) any later version.
|
||||||
|
|
||||||
Octoscan is distributed in the hope that it will be useful,
|
Octoscan is distributed in the hope that it will be useful,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
GNU General Public License for more details.
|
GNU General Public License for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU General Public License
|
||||||
along with octoserve. If not, see <http://www.gnu.org/licenses/>.
|
along with octoserve. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@ -73,10 +73,10 @@ static int eit_shortsize = 0;
|
|||||||
static int eit_extsize = 0;
|
static int eit_extsize = 0;
|
||||||
static int eit_events_deleted = 0;
|
static int eit_events_deleted = 0;
|
||||||
|
|
||||||
char *pol2str[] = {"v", "h", "r", "l", NULL};
|
char *pol2str[] = {"v", "h", "r", "l"};
|
||||||
char *msys2str [] = {"undef", "dvbc", "dvbcb", "dvbt", "dss", "dvbs", "dvbs2", "dvbh",
|
char *msys2str [] = {"undef", "dvbc", "dvbcb", "dvbt", "dss", "dvbs", "dvbs2", "dvbh",
|
||||||
"isdbt", "isdbs", "isdbc", "atsc", "atscmh", "dtmb", "cmmb", "dab",
|
"isdbt", "isdbs", "isdbc", "atsc", "atscmh", "dtmb", "cmmb", "dab",
|
||||||
"dvbt2", "turbo", "dvbcc", "dvbc2", NULL};
|
"dvbt2", "turbo", "dvbcc", "dvbc2"};
|
||||||
char *mtype2str [] = {"qpsk", "16qam", "32qam",
|
char *mtype2str [] = {"qpsk", "16qam", "32qam",
|
||||||
"64qam", "128qam", "256qam",
|
"64qam", "128qam", "256qam",
|
||||||
"autoqam", "8vsb", "16vsb", "8psk",
|
"autoqam", "8vsb", "16vsb", "8psk",
|
||||||
@ -119,8 +119,8 @@ struct pid_info {
|
|||||||
int add_ext;
|
int add_ext;
|
||||||
int done;
|
int done;
|
||||||
|
|
||||||
uint8_t used;
|
uint8_t used;
|
||||||
uint8_t cc;
|
uint8_t cc;
|
||||||
uint16_t bufp;
|
uint16_t bufp;
|
||||||
uint16_t len;
|
uint16_t len;
|
||||||
uint8_t *buf;
|
uint8_t *buf;
|
||||||
@ -147,7 +147,7 @@ struct ts_info {
|
|||||||
time_t timeout;
|
time_t timeout;
|
||||||
int done;
|
int done;
|
||||||
|
|
||||||
struct pid_info pidi[0x2000];
|
struct pid_info pidi[0x2000];
|
||||||
};
|
};
|
||||||
|
|
||||||
#define MAX_ANUM 32
|
#define MAX_ANUM 32
|
||||||
@ -589,40 +589,40 @@ void add_fd(int fd, int *mfd, fd_set *fds)
|
|||||||
|
|
||||||
static inline uint16_t seclen(const uint8_t *buf)
|
static inline uint16_t seclen(const uint8_t *buf)
|
||||||
{
|
{
|
||||||
return 3+((buf[1]&0x0f)<<8)+buf[2];
|
return 3+((buf[1]&0x0f)<<8)+buf[2];
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline uint16_t tspid(const uint8_t *buf)
|
static inline uint16_t tspid(const uint8_t *buf)
|
||||||
{
|
{
|
||||||
return ((buf[1]&0x1f)<<8)+buf[2];
|
return ((buf[1]&0x1f)<<8)+buf[2];
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int tspayload(const uint8_t *tsp)
|
static inline int tspayload(const uint8_t *tsp)
|
||||||
{
|
{
|
||||||
if (!(tsp[3] & 0x10))
|
if (!(tsp[3] & 0x10))
|
||||||
return 0;
|
return 0;
|
||||||
if (tsp[3] & 0x20) {
|
if (tsp[3] & 0x20) {
|
||||||
if (tsp[4] > 183)
|
if (tsp[4] > 183)
|
||||||
return 0;
|
return 0;
|
||||||
else
|
else
|
||||||
return 183 - tsp[4];
|
return 183 - tsp[4];
|
||||||
}
|
}
|
||||||
return 184;
|
return 184;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static inline int
|
static inline int
|
||||||
tspaystart(const uint8_t *tsp)
|
tspaystart(const uint8_t *tsp)
|
||||||
{
|
{
|
||||||
if (!(tsp[3]&0x10))
|
if (!(tsp[3]&0x10))
|
||||||
return 188;
|
return 188;
|
||||||
if (tsp[3]&0x20) {
|
if (tsp[3]&0x20) {
|
||||||
if (tsp[4]>=184)
|
if (tsp[4]>=184)
|
||||||
return 188;
|
return 188;
|
||||||
else
|
else
|
||||||
return tsp[4]+5;
|
return tsp[4]+5;
|
||||||
}
|
}
|
||||||
return 4;
|
return 4;
|
||||||
}
|
}
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
@ -677,7 +677,7 @@ uint32_t dvb_crc32(uint8_t *data, int len)
|
|||||||
uint32_t crc=0xffffffff;
|
uint32_t crc=0xffffffff;
|
||||||
|
|
||||||
for (i = 0; i < len; i++)
|
for (i = 0; i < len; i++)
|
||||||
crc = (crc << 8) ^ dvb_crc_table[((crc >> 24) ^ *data++) & 0xff];
|
crc = (crc << 8) ^ dvb_crc_table[((crc >> 24) ^ *data++) & 0xff];
|
||||||
return crc;
|
return crc;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -841,33 +841,33 @@ static uint16_t get12(uint8_t *p)
|
|||||||
|
|
||||||
static uint16_t get_pid(uint8_t *pid)
|
static uint16_t get_pid(uint8_t *pid)
|
||||||
{
|
{
|
||||||
uint16_t pp;
|
uint16_t pp;
|
||||||
|
|
||||||
pp = (pid[0] & 0x1f) << 8;
|
pp = (pid[0] & 0x1f) << 8;
|
||||||
pp |= pid[1] &0xff;
|
pp |= pid[1] &0xff;
|
||||||
return pp;
|
return pp;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int get_desc(struct pid_info *p, uint8_t *buf, int length)
|
static int get_desc(struct pid_info *p, uint8_t *buf, int length)
|
||||||
{
|
{
|
||||||
int dlength;
|
int dlength;
|
||||||
int c=0;
|
int c=0;
|
||||||
uint16_t casys;
|
uint16_t casys;
|
||||||
uint16_t capid;
|
uint16_t capid;
|
||||||
|
|
||||||
while (c < length) {
|
while (c < length) {
|
||||||
dlength = buf[c+1];
|
dlength = buf[c+1];
|
||||||
|
|
||||||
switch(buf[c]){
|
switch(buf[c]){
|
||||||
case 0x02:
|
case 0x02:
|
||||||
break;
|
break;
|
||||||
case 0x03:
|
case 0x03:
|
||||||
break;
|
break;
|
||||||
case 0x09:
|
case 0x09:
|
||||||
if (!dlength)
|
if (!dlength)
|
||||||
break;
|
break;
|
||||||
casys =(buf[c+2]<<8)|buf[c+3];
|
casys =(buf[c+2]<<8)|buf[c+3];
|
||||||
capid = get_pid(buf+c+4);
|
capid = get_pid(buf+c+4);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
@ -948,7 +948,7 @@ static int pmt_cb(struct sfilter *sf)
|
|||||||
if ((ilen = get12(buf + 10)))
|
if ((ilen = get12(buf + 10)))
|
||||||
c += get_desc(p, buf + c, ilen);
|
c += get_desc(p, buf + c, ilen);
|
||||||
if (c != 12 + ilen)
|
if (c != 12 + ilen)
|
||||||
return 0;
|
return 0;
|
||||||
s = get_service(p->tsi->stp->tpi, pnr);
|
s = get_service(p->tsi->stp->tpi, pnr);
|
||||||
s->pcr = get_pid(buf + 8);
|
s->pcr = get_pid(buf + 8);
|
||||||
s->anum = 0;
|
s->anum = 0;
|
||||||
@ -985,8 +985,7 @@ static int pmt_cb(struct sfilter *sf)
|
|||||||
s->ttx = epid;
|
s->ttx = epid;
|
||||||
else if (hasdesc(0x59, buf + c + 5, eslen))
|
else if (hasdesc(0x59, buf + c + 5, eslen))
|
||||||
s->sub = epid;
|
s->sub = epid;
|
||||||
else if (hasdesc(0x6a, buf + c + 5, eslen) ||
|
else if (hasdesc(0x6a, buf + c + 5, eslen)) {
|
||||||
hasdesc(0x7a, buf + c + 5, eslen)) {
|
|
||||||
if (s->anum < MAX_ANUM)
|
if (s->anum < MAX_ANUM)
|
||||||
s->apid[s->anum++] = epid;
|
s->apid[s->anum++] = epid;
|
||||||
}
|
}
|
||||||
@ -1125,235 +1124,72 @@ static int pat_cb(struct sfilter *sf)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define CHARACTER_RESERVED_80 0x80
|
#define UTF8_CC_START 0xc2
|
||||||
#define CHARACTER_RESERVED_81 0x81
|
#define SB_CC_RESERVED_80 0x80
|
||||||
#define CHARACTER_RESERVED_82 0x82
|
#define SB_CC_RESERVED_81 0x81
|
||||||
#define CHARACTER_RESERVED_83 0x83
|
#define SB_CC_RESERVED_82 0x82
|
||||||
#define CHARACTER_RESERVED_84 0x84
|
#define SB_CC_RESERVED_83 0x83
|
||||||
#define CHARACTER_RESERVED_85 0x85
|
#define SB_CC_RESERVED_84 0x84
|
||||||
|
#define SB_CC_RESERVED_85 0x85
|
||||||
#define CHARACTER_EMPHASIS_ON 0x86
|
#define CHARACTER_EMPHASIS_ON 0x86
|
||||||
#define CHARACTER_EMPHASIS_OFF 0x87
|
#define CHARACTER_EMPHASIS_OFF 0x87
|
||||||
#define CHARACTER_RESERVED_88 0x88
|
#define SB_CC_RESERVED_88 0x88
|
||||||
#define CHARACTER_RESERVED_89 0x89
|
#define SB_CC_RESERVED_89 0x89
|
||||||
#define CHARACTER_CR_LF 0x8A
|
#define CHARACTER_CR_LF 0x8a
|
||||||
#define CHARACTER_USER_8B 0x8B
|
#define SB_CC_USER_8B 0x8b
|
||||||
#define CHARACTER_USER_9F 0x9F
|
#define SB_CC_USER_9F 0x9f
|
||||||
|
|
||||||
uint16_t codetable_00[96] = {
|
void en300468_parse_string_to_utf8(char *dest, uint8_t *src,
|
||||||
0x00A0,0x00A1,0x00A2,0x00A3, 0x20AC,0x00A5,0x0000,0x00A7, 0x00A4,0x2018,0x201C,0x00AB, 0x2190,0x2191,0x2192,0x2193,
|
const unsigned int len)
|
||||||
0x00B0,0x00B1,0x00B2,0x00B3, 0x00B4,0x00B5,0x00B6,0x00B7, 0x00F7,0x2019,0x201D,0x00BB, 0x00BC,0x00BD,0x00BE,0x00BF,
|
|
||||||
0x0000,0x0300,0x0301,0x0302, 0x0303,0x0304,0x0306,0x0307, 0x0308,0x0000,0x030A,0x0327, 0x0000,0x030B,0x0328,0x030C,
|
|
||||||
0x2015,0x00B9,0x00AE,0x00A9, 0x2122,0x266A,0x00AC,0x00A6, 0x0000,0x0000,0x0000,0x0000, 0x215B,0x215C,0x215D,0x215E,
|
|
||||||
0x2126,0x00C6,0x0110,0x00AA, 0x0126,0x0000,0x0132,0x013F, 0x0141,0x00D8,0x0152,0x00BA, 0x00DE,0x0166,0x014A,0x0149,
|
|
||||||
0x0138,0x00E6,0x0111,0x00F0, 0x0127,0x0131,0x0133,0x0140, 0x0142,0x00F8,0x0153,0x00DF, 0x00FE,0x0167,0x014B,0x00AD,
|
|
||||||
};
|
|
||||||
|
|
||||||
uint16_t codetable_01[96] = {
|
|
||||||
0x00A0,0x0401,0x0402,0x0403, 0x0404,0x0405,0x0406,0x0407, 0x0408,0x0409,0x040A,0x040B, 0x040C,0x00AD,0x040E,0x040F,
|
|
||||||
0x0410,0x0411,0x0412,0x0413, 0x0414,0x0415,0x0416,0x0417, 0x0418,0x0419,0x041A,0x041B, 0x041C,0x041D,0x041E,0x041F,
|
|
||||||
0x0420,0x0421,0x0422,0x0423, 0x0424,0x0425,0x0426,0x0427, 0x0428,0x0429,0x042A,0x042B, 0x042C,0x042D,0x042E,0x042F,
|
|
||||||
0x0430,0x0431,0x0432,0x0433, 0x0434,0x0435,0x0436,0x0437, 0x0438,0x0439,0x043A,0x043B, 0x043C,0x043D,0x043E,0x043F,
|
|
||||||
0x0440,0x0441,0x0442,0x0443, 0x0444,0x0445,0x0446,0x0447, 0x0448,0x0449,0x044A,0x044B, 0x044C,0x044D,0x044E,0x044F,
|
|
||||||
0x2116,0x0451,0x0452,0x0453, 0x0454,0x0455,0x0456,0x0457, 0x0458,0x0459,0x045A,0x045B, 0x045C,0x00A7,0x045E,0x045F,
|
|
||||||
};
|
|
||||||
|
|
||||||
uint16_t codetable_02[96] = {
|
|
||||||
0x00A0,0x0000,0x0000,0x0000, 0x00A4,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, 0x060C,0x00AD,0x0000,0x0000,
|
|
||||||
0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x061B, 0x0000,0x0000,0x0000,0x061F,
|
|
||||||
0x0000,0x0621,0x0622,0x0623, 0x0624,0x0625,0x0626,0x0627, 0x0628,0x0629,0x062A,0x062B, 0x062C,0x062D,0x062E,0x062F,
|
|
||||||
0x0630,0x0631,0x0632,0x0633, 0x0634,0x0635,0x0636,0x0637, 0x0638,0x0639,0x063A,0x0000, 0x0000,0x0000,0x0000,0x0000,
|
|
||||||
0x0640,0x0641,0x0642,0x0643, 0x0644,0x0645,0x0646,0x0647, 0x0648,0x0649,0x064A,0x064B, 0x064C,0x064D,0x064E, 0x064F,
|
|
||||||
0x0650,0x0651,0x0652,0x0000, 0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000,
|
|
||||||
};
|
|
||||||
|
|
||||||
uint16_t codetable_03[96] = {
|
|
||||||
0x00A0,0x2018,0x2019,0x00A3, 0x20AC,0x20AF,0x00A6,0x00A7, 0x00A8,0x00A9,0x037A,0x00AB, 0x00AC,0x00AD,0x0000,0x2015,
|
|
||||||
0x00B0,0x00B1,0x00B2,0x00B3, 0x0384,0x0385,0x0386,0x00B7, 0x0388,0x0389,0x038A,0x00BB, 0x038C,0x00BD,0x038E,0x038F,
|
|
||||||
0x0390,0x0391,0x0392,0x0393, 0x0394,0x0395,0x0396,0x0397, 0x0398,0x0399,0x039A,0x039B, 0x039C,0x039D,0x039E,0x039F,
|
|
||||||
0x03A0,0x03A1,0x0000,0x03A3, 0x03A4,0x03A5,0x03A6,0x03A7, 0x03A8,0x03A9,0x03AA,0x03AB, 0x03AC,0x03AD,0x03AE,0x03AF,
|
|
||||||
0x03B0,0x03B1,0x03B2,0x03B3, 0x03B4,0x03B5,0x03B6,0x03B7, 0x03B8,0x03B9,0x03BA,0x03BB, 0x03BC,0x03BD,0x03BE,0x03BF,
|
|
||||||
0x03C0,0x03C1,0x03C2,0x03C3, 0x03C4,0x03C5,0x03C6,0x03C7, 0x03C8,0x03C9,0x03CA,0x03CB, 0x03CC,0x03CD,0x03CE,0x0000,
|
|
||||||
};
|
|
||||||
|
|
||||||
uint16_t codetable_04[96] = {
|
|
||||||
0x00A0,0x0000,0x00A2,0x00A3, 0x00A4,0x00A5,0x00A6,0x00A7, 0x00A8,0x00A9,0x00D7,0x00AB, 0x00AC,0x00AD,0x00AE,0x00AF,
|
|
||||||
0x00B0,0x00B1,0x00B2,0x00B3, 0x00B4,0x00B5,0x00B6,0x00B7, 0x00B8,0x00B9,0x00F7,0x00BB, 0x00BC,0x00BD,0x00BE,0x0000,
|
|
||||||
0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000,
|
|
||||||
0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x0000, 0x0000,0x0000,0x0000,0x2017,
|
|
||||||
0x05D0,0x05D1,0x05D2,0x05D3, 0x05D4,0x05D5,0x05D6,0x05D7, 0x05D8,0x05D9,0x05DA,0x05DB, 0x05DC,0x05DD,0x05DE,0x05DF,
|
|
||||||
0x05E0,0x05E1,0x05E2,0x05E3, 0x05E4,0x05E5,0x05E6,0x05E7, 0x05E8,0x05E9,0x05EA,0x0000, 0x0000,0x200E,0x200F,0x0000,
|
|
||||||
};
|
|
||||||
|
|
||||||
uint16_t codetable_05[96] = {
|
|
||||||
0x00A0,0x00A1,0x00A2,0x00A3, 0x00A4,0x00A5,0x00A6,0x00A7, 0x00A8,0x00A9,0x00AA,0x00AB, 0x00AC,0x00AD,0x00AE,0x00AF,
|
|
||||||
0x00B0,0x00B1,0x00B2,0x00B3, 0x00B4,0x00B5,0x00B6,0x00B7, 0x00B8,0x00B9,0x00BA,0x00BB, 0x00BC,0x00BD,0x00BE,0x00BF,
|
|
||||||
0x00C0,0x00C1,0x00C2,0x00C3, 0x00C4,0x00C5,0x00C6,0x00C7, 0x00C8,0x00C9,0x00CA,0x00CB, 0x00CC,0x00CD,0x00CE,0x00CF,
|
|
||||||
0x011E,0x00D1,0x00D2,0x00D3, 0x00D4,0x00D5,0x00D6,0x00D7, 0x00D8,0x00D9,0x00DA,0x00DB, 0x00DC,0x0130,0x015E,0x00DF,
|
|
||||||
0x00E0,0x00E1,0x00E2,0x00E3, 0x00E4,0x00E5,0x00E6,0x00E7, 0x00E8,0x00E9,0x00EA,0x00EB, 0x00EC,0x00ED,0x00EE,0x00EF,
|
|
||||||
0x011F,0x00F1,0x00F2,0x00F3, 0x00F4,0x00F5,0x00F6,0x00F7, 0x00F8,0x00F9,0x00FA,0x00FB, 0x00FC,0x0131,0x015F,0x00FF,
|
|
||||||
};
|
|
||||||
|
|
||||||
uint16_t codetable_06[96] = {
|
|
||||||
0x00A0,0x0104,0x0112,0x0122, 0x012A,0x0128,0x0136,0x00A7, 0x013B,0x0110,0x0160,0x0166, 0x017D,0x00AD,0x016A,0x014A,
|
|
||||||
0x00B0,0x0105,0x0113,0x0123, 0x012B,0x0129,0x0137,0x00B7, 0x013C,0x0111,0x0161,0x0167, 0x017E,0x2015,0x016B,0x014B,
|
|
||||||
0x0100,0x00C1,0x00C2,0x00C3, 0x00C4,0x00C5,0x00C6,0x012E, 0x010C,0x00C9,0x0118,0x00CB, 0x0116,0x00CD,0x00CE,0x00CF,
|
|
||||||
0x00D0,0x0145,0x014C,0x00D3, 0x00D4,0x00D5,0x00D6,0x0168, 0x00D8,0x0172,0x00DA,0x00DB, 0x00DC,0x00DD,0x00DE,0x00DF,
|
|
||||||
0x0101,0x00E1,0x00E2,0x00E3, 0x00E4,0x00E5,0x00E6,0x012F, 0x010D,0x00E9,0x0119,0x00EB, 0x0117,0x00ED,0x00EE,0x00EF,
|
|
||||||
0x00F0,0x0146,0x014D,0x00F3, 0x00F4,0x00F5,0x00F6,0x0169, 0x00F8,0x0173,0x00FA,0x00FB, 0x00FC,0x00FD,0x00FE,0x0138,
|
|
||||||
};
|
|
||||||
|
|
||||||
uint16_t codetable_07[96] = {
|
|
||||||
0x00A0,0x0E01,0x0E02,0x0E03, 0x0E04,0x0E05,0x0E06,0x0E07, 0x0E08,0x0E09,0x0E0A,0x0E0B, 0x0E0C,0x0E0D,0x0E0E,0x0E0F,
|
|
||||||
0x0E10,0x0E11,0x0E12,0x0E13, 0x0E14,0x0E15,0x0E16,0x0E17, 0x0E18,0x0E19,0x0E1A,0x0E1B, 0x0E1C,0x0E1D,0x0E1E,0x0E1F,
|
|
||||||
0x0E20,0x0E21,0x0E22,0x0E23, 0x0E24,0x0E25,0x0E26,0x0E27, 0x0E28,0x0E29,0x0E2A,0x0E2B, 0x0E2C,0x0E2D,0x0E2E,0x0E2F,
|
|
||||||
0x0E30,0x0E31,0x0E32,0x0E33, 0x0E34,0x0E35,0x0E36,0x0E37, 0x0E38,0x0E39,0x0E3A,0x0000, 0x0000,0x0000,0x0000,0x0E3F,
|
|
||||||
0x0E40,0x0E41,0x0E42,0x0E43, 0x0E44,0x0E45,0x0E46,0x0E47, 0x0E48,0x0E49,0x0E4A,0x0E4B, 0x0E4C,0x0E4D,0x0E4E,0x0E4F,
|
|
||||||
0x0E50,0x0E51,0x0E52,0x0E53, 0x0E54,0x0E55,0x0E56,0x0E57, 0x0E58,0x0E59,0x0E5A,0x0E5B, 0x0000,0x0000,0x0000,0x0000,
|
|
||||||
};
|
|
||||||
|
|
||||||
uint16_t codetable_09[96] = {
|
|
||||||
0x00A0,0x201D,0x00A2,0x00A3, 0x00A4,0x201E,0x00A6,0x00A7, 0x00D8,0x00A9,0x0156,0x00AB, 0x00AC,0x00AD,0x00AE,0x00C6,
|
|
||||||
0x00B0,0x00B1,0x00B2,0x00B3, 0x201C,0x00B5,0x00B6,0x00B7, 0x00F8,0x00B9,0x0157,0x00BB, 0x00BC,0x00BD,0x00BE,0x00E6,
|
|
||||||
0x0104,0x012E,0x0100,0x0106, 0x00C4,0x00C5,0x0118,0x0112, 0x010C,0x00C9,0x0179,0x0116, 0x0122,0x0136,0x012A,0x013B,
|
|
||||||
0x0160,0x0143,0x0145,0x00D3, 0x014C,0x00D5,0x00D6,0x00D7, 0x0172,0x0141,0x015A,0x016A, 0x00DC,0x017B,0x017D,0x00DF,
|
|
||||||
0x0105,0x012F,0x0101,0x0107, 0x00E4,0x00E5,0x0119,0x0113, 0x010D,0x00E9,0x017A,0x0117, 0x0123,0x0137,0x012B,0x013C,
|
|
||||||
0x0161,0x0144,0x0146,0x00F3, 0x014D,0x00F5,0x00F6,0x00F7, 0x0173,0x0142,0x015B,0x016B, 0x00FC,0x017C,0x017E,0x2019,
|
|
||||||
};
|
|
||||||
|
|
||||||
uint16_t codetable_0A[96] = {
|
|
||||||
0x00A0,0x1E02,0x1E03,0x00A3, 0x010A,0x010B,0x1E0A,0x00A7, 0x1E80,0x00A9,0x1E82,0x1E0B, 0x1EF2,0x00AD,0x00AE,0x0178,
|
|
||||||
0x1E1E,0x1E1F,0x0120,0x0121, 0x1E40,0x1E41,0x00B6,0x1E56, 0x1E81,0x1E57,0x1E83,0x1E60, 0x1EF3,0x1E84,0x1E85,0x1E61,
|
|
||||||
0x00C0,0x00C1,0x00C2,0x00C3, 0x00C4,0x00C5,0x00C6,0x00C7, 0x00C8,0x00C9,0x00CA,0x00CB, 0x00CC,0x00CD,0x00CE,0x00CF,
|
|
||||||
0x0174,0x00D1,0x00D2,0x00D3, 0x00D4,0x00D5,0x00D6,0x1E6A, 0x00D8,0x00D9,0x00DA,0x00DB, 0x00DC,0x00DD,0x0176,0x00DF,
|
|
||||||
0x00E0,0x00E1,0x00E2,0x00E3, 0x00E4,0x00E5,0x00E6,0x00E7, 0x00E8,0x00E9,0x00EA,0x00EB, 0x00EC,0x00ED,0x00EE,0x00EF,
|
|
||||||
0x0175,0x00F1,0x00F2,0x00F3, 0x00F4,0x00F5,0x00F6,0x1E6B, 0x00F8,0x00F9,0x00FA,0x00FB, 0x00FC,0x00FD,0x0177,0x00FF,
|
|
||||||
};
|
|
||||||
|
|
||||||
uint16_t codetable_0B[96] = {
|
|
||||||
0x00A0,0x00A1,0x00A2,0x00A3, 0x20AC,0x00A5,0x0160,0x00A7, 0x0161,0x00A9,0x00AA,0x00AB, 0x00AC,0x00AD,0x00AE,0x00AF,
|
|
||||||
0x00B0,0x00B1,0x00B2,0x00B3, 0x017D,0x00B5,0x00B6,0x00B7, 0x017E,0x00B9,0x00BA,0x00BB, 0x0152,0x0153,0x0178,0x00BF,
|
|
||||||
0x00C0,0x00C1,0x00C2,0x00C3, 0x00C4,0x00C5,0x00C6,0x00C7, 0x00C8,0x00C9,0x00CA,0x00CB, 0x00CC,0x00CD,0x00CE,0x00CF,
|
|
||||||
0x00D0,0x00D1,0x00D2,0x00D3, 0x00D4,0x00D5,0x00D6,0x00D7, 0x00D8,0x00D9,0x00DA,0x00DB, 0x00DC,0x00DD,0x00DE,0x00DF,
|
|
||||||
0x00E0,0x00E1,0x00E2,0x00E3, 0x00E4,0x00E5,0x00E6,0x00E7, 0x00E8,0x00E9,0x00EA,0x00EB, 0x00EC,0x00ED,0x00EE,0x00EF,
|
|
||||||
0x00F0,0x00F1,0x00F2,0x00F3, 0x00F4,0x00F5,0x00F6,0x00F7, 0x00F8,0x00F9,0x00FA,0x00FB, 0x00FC,0x00FD,0x00FE,0x00FF,
|
|
||||||
};
|
|
||||||
|
|
||||||
uint16_t *codetable_LUT[12] = {
|
|
||||||
codetable_00,
|
|
||||||
codetable_01,
|
|
||||||
codetable_02,
|
|
||||||
codetable_03,
|
|
||||||
codetable_04,
|
|
||||||
codetable_05,
|
|
||||||
codetable_06,
|
|
||||||
codetable_07,
|
|
||||||
codetable_00,
|
|
||||||
codetable_09,
|
|
||||||
codetable_0A,
|
|
||||||
codetable_0B,
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void en300468_parse_string_to_utf8(char *dest, const unsigned int destlen,
|
|
||||||
uint8_t *src, const unsigned int len)
|
|
||||||
{
|
{
|
||||||
uint16_t *codetable = codetable_00;
|
int utf8 = (src[0] == 0x15) ? 1 : 0;
|
||||||
int encoding = 0;
|
int skip = (src[0] < 0x20) ? 1 : 0;
|
||||||
int skip = 0; // (src[0] < 0x20) ? 1 : 0;
|
if( src[0] == 0x10 ) skip += 2;
|
||||||
if( src[0] < 0x20 ) {
|
uint16_t utf8_cc;
|
||||||
encoding = src[0];
|
|
||||||
if( encoding < 12 )
|
|
||||||
codetable = codetable_LUT[encoding];
|
|
||||||
skip = 1;
|
|
||||||
}
|
|
||||||
if( encoding == 0x1F ) {
|
|
||||||
skip = 2;
|
|
||||||
}
|
|
||||||
if( encoding == 0x10 ) {
|
|
||||||
if( src[1] == 0 ) {
|
|
||||||
codetable = codetable_0B;
|
|
||||||
if( src[1] == 0 && src[2] >= 5 && src[2] <= 15 ) {
|
|
||||||
codetable = codetable_LUT[src[2] - 4];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
skip = 3;
|
|
||||||
}
|
|
||||||
uint32_t utf8_cc;
|
|
||||||
int dest_pos = 0;
|
int dest_pos = 0;
|
||||||
int emphasis = 0;
|
int emphasis = 0;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = skip; i < len && dest_pos < destlen - 1; i++) {
|
for (i = skip; i < len; i++) {
|
||||||
utf8_cc = *(src + i);
|
switch(*(src + i)) {
|
||||||
if (utf8_cc >= 128 && encoding == 0x15 ) {
|
case SB_CC_RESERVED_80 ... SB_CC_RESERVED_85:
|
||||||
if( (utf8_cc & 0xC0) == 0xC0 )
|
case SB_CC_RESERVED_88 ... SB_CC_RESERVED_89:
|
||||||
{
|
case SB_CC_USER_8B ... SB_CC_USER_9F:
|
||||||
i++;
|
case CHARACTER_CR_LF:
|
||||||
utf8_cc &= 0x3F;
|
dest[dest_pos++] = '\n';
|
||||||
if( utf8_cc & 0x20 ) utf8_cc &= 0x1F;
|
continue;
|
||||||
if( utf8_cc & 0x10 ) utf8_cc &= 0x0F;
|
case CHARACTER_EMPHASIS_ON:
|
||||||
if( utf8_cc & 0x08 ) utf8_cc &= 0x07;
|
emphasis = 1;
|
||||||
while( i < len && (*(src + i) & 0xC0) == 0x80 ) {
|
continue;
|
||||||
utf8_cc = (utf8_cc << 6) | (*(src + i) & 0x3F);
|
case CHARACTER_EMPHASIS_OFF:
|
||||||
i++;
|
emphasis = 0;
|
||||||
}
|
continue;
|
||||||
if( utf8_cc > 0x10FFFF )
|
case UTF8_CC_START:
|
||||||
break; // UTF-8 error
|
if (utf8 == 1) {
|
||||||
}
|
utf8_cc = *(src + i) << 8;
|
||||||
else
|
utf8_cc += *(src + i + 1);
|
||||||
break; // UTF-8 error
|
|
||||||
} else {
|
|
||||||
if( encoding <= 0x10 && utf8_cc >= 0x80 && utf8_cc < 0xA0 )
|
|
||||||
utf8_cc |= 0x0100;
|
|
||||||
else if( utf8_cc >= 0xA0 ) {
|
|
||||||
utf8_cc = codetable[utf8_cc-0xA0];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if( utf8_cc < 0xA0 ) {
|
switch(utf8_cc) {
|
||||||
switch(utf8_cc) {
|
case ((UTF8_CC_START << 8) | CHARACTER_EMPHASIS_ON):
|
||||||
case 0x00:
|
emphasis = 1;
|
||||||
break;
|
i++;
|
||||||
case 0x01 ... 0x7F:
|
continue;
|
||||||
dest[dest_pos++] = utf8_cc;
|
case ((UTF8_CC_START << 8) | CHARACTER_EMPHASIS_OFF):
|
||||||
break;
|
emphasis = 0;
|
||||||
case CHARACTER_CR_LF:
|
i++;
|
||||||
dest[dest_pos++] = '\n';
|
continue;
|
||||||
break;
|
default:
|
||||||
case CHARACTER_EMPHASIS_ON:
|
break;
|
||||||
emphasis = 1;
|
|
||||||
break;
|
|
||||||
case CHARACTER_EMPHASIS_OFF:
|
|
||||||
emphasis = 0;
|
|
||||||
break;
|
|
||||||
default: {
|
|
||||||
if( dest_pos < destlen - 2 ) {
|
|
||||||
dest[dest_pos++] = 0xC2;
|
|
||||||
dest[dest_pos++] = (utf8_cc & 0x3F) | 0x80;
|
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
default: {
|
||||||
} else {
|
if (*(src + i) < 128)
|
||||||
if( utf8_cc < 0x800 ) {
|
dest[dest_pos++] = *(src + i);
|
||||||
if( dest_pos >= destlen - 2 )
|
else {
|
||||||
break;
|
dest[dest_pos++] = 0xc2 + (*(src + i) > 0xbf);
|
||||||
dest[dest_pos++] = 0xC0 | ((utf8_cc >> 6) & 0x1F);
|
dest[dest_pos++] = (*(src + i) & 0x3f) | 0x80;
|
||||||
dest[dest_pos++] = (utf8_cc & 0x3F) | 0x80;
|
}
|
||||||
} else if( utf8_cc < 0x10000 ) {
|
break;
|
||||||
if( dest_pos >= destlen - 3 )
|
|
||||||
break;
|
|
||||||
dest[dest_pos++] = 0xE0 | ((utf8_cc >> 12) & 0x0F);
|
|
||||||
dest[dest_pos++] = ((utf8_cc >> 6) & 0x3F) | 0x80;
|
|
||||||
dest[dest_pos++] = (utf8_cc & 0x3F) | 0x80;
|
|
||||||
} else if( utf8_cc < 0x110000 ) {
|
|
||||||
if( dest_pos >= destlen - 4 )
|
|
||||||
break;
|
|
||||||
dest[dest_pos++] = 0xF0 | ((utf8_cc >> 18) & 0x07);
|
|
||||||
dest[dest_pos++] = ((utf8_cc >> 12) & 0x3F) | 0x80;
|
|
||||||
dest[dest_pos++] = ((utf8_cc >> 6) & 0x3F) | 0x80;
|
|
||||||
dest[dest_pos++] = (utf8_cc & 0x3F) | 0x80;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1414,18 +1250,19 @@ static int sdt_cb(struct sfilter *sf)
|
|||||||
if (tag == 0x48) {
|
if (tag == 0x48) {
|
||||||
spnl = buf[doff + 3];
|
spnl = buf[doff + 3];
|
||||||
snl = buf[doff + 4 + spnl];
|
snl = buf[doff + 4 + spnl];
|
||||||
s->pname[79] = 0x00;
|
s->pname[79] = 0x00;
|
||||||
s->name[79] = 0x00;
|
s->name[79] = 0x00;
|
||||||
en300468_parse_string_to_utf8(s->pname, sizeof(s->pname), buf + doff + 4, spnl);
|
en300468_parse_string_to_utf8(s->pname, buf + doff + 4, spnl);
|
||||||
if( s->pname[79] != 0 )
|
if( s->pname[79] != 0 )
|
||||||
fprintf(stderr, "********************************************* PNAME OVERFLOW %d spnl = %d",spnl);
|
fprintf(stderr, "********************************************* PNAME OVERFLOW %d spnl = %d",spnl);
|
||||||
en300468_parse_string_to_utf8(s->name, sizeof(s->name), buf + doff + 5 + spnl, snl);
|
en300468_parse_string_to_utf8(s->name, buf + doff + 5 + spnl, snl);
|
||||||
if( s->name[79] != 0 )
|
if( s->name[79] != 0 )
|
||||||
fprintf(stderr, "********************************************* SNAME OVERFLOW %d snl = %d",snl);
|
fprintf(stderr, "********************************************* SNAME OVERFLOW %d snl = %d",snl);
|
||||||
s->got_sdt = 1;
|
s->got_sdt = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1755,10 +1592,10 @@ static inline int validcc(struct pid_info *p, uint8_t *tsp)
|
|||||||
int valid;
|
int valid;
|
||||||
|
|
||||||
newcc = tsp[3] & 0x0f;
|
newcc = tsp[3] & 0x0f;
|
||||||
valid = (((p->cc + 1) & 0x0f) == newcc) ? 1 : 0;
|
valid = (((p->cc + 1) & 0x0f) == newcc) ? 1 : 0;
|
||||||
if (p->cc == 0xff)
|
if (p->cc == 0xff)
|
||||||
valid=1;
|
valid=1;
|
||||||
p->cc = newcc;
|
p->cc = newcc;
|
||||||
if (!valid) {
|
if (!valid) {
|
||||||
fprintf(stderr, "CC error PID %04x!\n", p->pid);
|
fprintf(stderr, "CC error PID %04x!\n", p->pid);
|
||||||
pid_info_reset(p);
|
pid_info_reset(p);
|
||||||
@ -1768,15 +1605,15 @@ static inline int validcc(struct pid_info *p, uint8_t *tsp)
|
|||||||
|
|
||||||
static inline int pid_info_build_section(struct pid_info *p, uint8_t *tsp)
|
static inline int pid_info_build_section(struct pid_info *p, uint8_t *tsp)
|
||||||
{
|
{
|
||||||
int pusoff, todo = tspayload(tsp), i = 188 - todo;
|
int pusoff, todo = tspayload(tsp), i = 188 - todo;
|
||||||
|
|
||||||
if (!todo)
|
if (!todo)
|
||||||
return -1;
|
return -1;
|
||||||
pusoff = (tsp[1] & 0x40) ? tsp[i++] : todo;
|
pusoff = (tsp[1] & 0x40) ? tsp[i++] : todo;
|
||||||
if (pusoff + i > 188)
|
if (pusoff + i > 188)
|
||||||
goto error;
|
goto error;
|
||||||
if (validcc(p, tsp) && pusoff && p->bufp) {
|
if (validcc(p, tsp) && pusoff && p->bufp) {
|
||||||
int rlen = pusoff;
|
int rlen = pusoff;
|
||||||
if (p->len) {
|
if (p->len) {
|
||||||
if (p->bufp + rlen > p->len)
|
if (p->bufp + rlen > p->len)
|
||||||
rlen = p->len - p->bufp;
|
rlen = p->len - p->bufp;
|
||||||
@ -1791,7 +1628,7 @@ static inline int pid_info_build_section(struct pid_info *p, uint8_t *tsp)
|
|||||||
}
|
}
|
||||||
i += pusoff;
|
i += pusoff;
|
||||||
while ((todo = 188 - i) > 0 && tsp[i] != 0xff) {
|
while ((todo = 188 - i) > 0 && tsp[i] != 0xff) {
|
||||||
pid_info_reset(p);
|
pid_info_reset(p);
|
||||||
if (todo < 3)
|
if (todo < 3)
|
||||||
fprintf(stderr, "sec start <3 \n");
|
fprintf(stderr, "sec start <3 \n");
|
||||||
if (todo < 3 || (p->len = seclen(tsp+i)) > todo) {
|
if (todo < 3 || (p->len = seclen(tsp+i)) > todo) {
|
||||||
@ -1817,7 +1654,7 @@ error:
|
|||||||
|
|
||||||
void proc_tsp(struct ts_info *tsi, uint8_t *tsp)
|
void proc_tsp(struct ts_info *tsi, uint8_t *tsp)
|
||||||
{
|
{
|
||||||
uint16_t pid = 0x1fff & ((tsp[1] << 8) | tsp[2]);
|
uint16_t pid = 0x1fff & ((tsp[1] << 8) | tsp[2]);
|
||||||
struct pid_info *pidi = &tsi->pidi[pid];
|
struct pid_info *pidi = &tsi->pidi[pid];
|
||||||
|
|
||||||
if (!pidi->used)
|
if (!pidi->used)
|
||||||
@ -1897,7 +1734,7 @@ static void print_events(struct tp_info *tpi)
|
|||||||
{
|
{
|
||||||
struct service *s;
|
struct service *s;
|
||||||
struct event *e;
|
struct event *e;
|
||||||
char t[768];
|
char t[512];
|
||||||
int i;
|
int i;
|
||||||
uint16_t y;
|
uint16_t y;
|
||||||
uint8_t m,d;
|
uint8_t m,d;
|
||||||
@ -1916,11 +1753,11 @@ static void print_events(struct tp_info *tpi)
|
|||||||
}
|
}
|
||||||
printf(" LANG:%c%c%c\n", e->s_lang[0], e->s_lang[1], e->s_lang[2]);
|
printf(" LANG:%c%c%c\n", e->s_lang[0], e->s_lang[1], e->s_lang[2]);
|
||||||
if( e->s_name ) {
|
if( e->s_name ) {
|
||||||
en300468_parse_string_to_utf8(t,sizeof(t),&e->s_name[1],e->s_name[0]);
|
en300468_parse_string_to_utf8(t,&e->s_name[1],e->s_name[0]);
|
||||||
printf(" NAME:%s\n",t);
|
printf(" NAME:%s\n",t);
|
||||||
}
|
}
|
||||||
if( e->s_text ) {
|
if( e->s_text ) {
|
||||||
en300468_parse_string_to_utf8(t,sizeof(t),&e->s_text[1],e->s_text[0]);
|
en300468_parse_string_to_utf8(t,&e->s_text[1],e->s_text[0]);
|
||||||
printf(" TEXT:%s\n",t);
|
printf(" TEXT:%s\n",t);
|
||||||
}
|
}
|
||||||
printf("END\n");
|
printf("END\n");
|
||||||
@ -2075,45 +1912,25 @@ void tpstring(struct tp_info *tpi, char *s, int slen)
|
|||||||
{
|
{
|
||||||
int len;
|
int len;
|
||||||
|
|
||||||
switch (tpi->msys) {
|
switch (tpi->msys) {
|
||||||
case 1:
|
case 1:
|
||||||
if( tpi->freq_frac )
|
if( tpi->freq_frac )
|
||||||
len = snprintf(s, slen,
|
len = snprintf(s, slen,
|
||||||
"freq=%u.%04u&msys=dvbc&sr=%u&mtype=%s",
|
"freq=%u.%04u&msys=dvbc&sr=%u&mtype=%s",
|
||||||
tpi->freq, tpi->freq_frac, tpi->sr, mtype2str[tpi->mod]);
|
tpi->freq, tpi->freq_frac, tpi->sr, mtype2str[tpi->mod]);
|
||||||
else
|
else
|
||||||
len = snprintf(s, slen,
|
len = snprintf(s, slen,
|
||||||
"freq=%u&msys=dvbc&sr=%u&mtype=%s",
|
"freq=%u&msys=dvbc&sr=%u&mtype=%s",
|
||||||
tpi->freq, tpi->sr, mtype2str[tpi->mod]);
|
tpi->freq, tpi->sr, mtype2str[tpi->mod]);
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 5:
|
||||||
if( tpi->freq_frac )
|
case 6:
|
||||||
len = snprintf(s, slen,
|
len = snprintf(s, slen,
|
||||||
"freq=%u.%04u&msys=dvbt&bw=%s",
|
"src=%u&freq=%u&pol=%s&msys=%s&sr=%u",
|
||||||
tpi->freq, tpi->freq_frac, bw2str[tpi->bw]);
|
tpi->src,tpi->freq, pol2str[tpi->pol&3],
|
||||||
else
|
msys2str[tpi->msys], tpi->sr);
|
||||||
len = snprintf(s, slen,
|
break;
|
||||||
"freq=%u&msys=dvbt&bw=%s",
|
}
|
||||||
tpi->freq, bw2str[tpi->bw]);
|
|
||||||
break;
|
|
||||||
case 5:
|
|
||||||
case 6:
|
|
||||||
len = snprintf(s, slen,
|
|
||||||
"src=%u&freq=%u&pol=%s&msys=%s&sr=%u",
|
|
||||||
tpi->src,tpi->freq, pol2str[tpi->pol&3],
|
|
||||||
msys2str[tpi->msys], tpi->sr);
|
|
||||||
break;
|
|
||||||
case 16:
|
|
||||||
if( tpi->freq_frac )
|
|
||||||
len = snprintf(s, slen,
|
|
||||||
"freq=%u.%04u&msys=dvbt2&bw=%s&plp=%u",
|
|
||||||
tpi->freq, tpi->freq_frac, bw2str[tpi->bw], tpi->isi);
|
|
||||||
else
|
|
||||||
len = snprintf(s, slen,
|
|
||||||
"freq=%u&msys=dvbt2&bw=%s&plp=%u",
|
|
||||||
tpi->freq, bw2str[tpi->bw], tpi->isi);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -2209,13 +2026,11 @@ void usage() {
|
|||||||
printf(" symbolrate in kSymbols (required for DVB-S/S2 and DVB-C)\n");
|
printf(" symbolrate in kSymbols (required for DVB-S/S2 and DVB-C)\n");
|
||||||
printf(" DVB-S/S2 example: --sr=27500\n");
|
printf(" DVB-S/S2 example: --sr=27500\n");
|
||||||
printf(" DVB-C example: --sr=6900\n");
|
printf(" DVB-C example: --sr=6900\n");
|
||||||
printf(" --bw=<bandwidth>, -b <bandwidth>\n");
|
|
||||||
printf(" bandwidth 1.712,5,6,7,8,10 (required for DVB-T/T2)\n");
|
|
||||||
printf(" --pol=<polarisation>, -p <polarisation>\n");
|
printf(" --pol=<polarisation>, -p <polarisation>\n");
|
||||||
printf(" polarisation = v,h,r,l (required for DVB-S/S2)\n");
|
printf(" polarisation = v,h,r,l (required for DVB-S/S2)\n");
|
||||||
printf(" example: --pol=v\n");
|
printf(" example: --pol=v\n");
|
||||||
printf(" --msys=<modulation system>, -m <modulation system>\n");
|
printf(" --msys=<modulation system>, -m <modulation system>\n");
|
||||||
printf(" system = dvbs,dvbs2,dvbc,dvbt,dvbt2 (required)\n");
|
printf(" system = dvbs,dvbs2,dvbc (required)\n");
|
||||||
printf(" example: --msys=dvbs\n");
|
printf(" example: --msys=dvbs\n");
|
||||||
printf(" --mtype=<modulation type>, -t <modulation type>\n");
|
printf(" --mtype=<modulation type>, -t <modulation type>\n");
|
||||||
printf(" modulation type = 16qam,32qam,64qam,128qam,256qam (required for DVB-C)\n");
|
printf(" modulation type = 16qam,32qam,64qam,128qam,256qam (required for DVB-C)\n");
|
||||||
@ -2290,8 +2105,6 @@ int main(int argc, char **argv)
|
|||||||
{"sr", required_argument, 0, 's'},
|
{"sr", required_argument, 0, 's'},
|
||||||
{"src", required_argument, 0, 'S'},
|
{"src", required_argument, 0, 'S'},
|
||||||
{"pol", required_argument, 0, 'p'},
|
{"pol", required_argument, 0, 'p'},
|
||||||
{"bw", required_argument, 0, 'b'},
|
|
||||||
{"plp", required_argument, 0, 'P'},
|
|
||||||
{"msys", required_argument, 0, 'm'},
|
{"msys", required_argument, 0, 'm'},
|
||||||
{"mtype", required_argument, 0, 't'},
|
{"mtype", required_argument, 0, 't'},
|
||||||
{"eit", no_argument, 0, 'e'},
|
{"eit", no_argument, 0, 'e'},
|
||||||
@ -2300,7 +2113,7 @@ int main(int argc, char **argv)
|
|||||||
{0, 0, 0, 0}
|
{0, 0, 0, 0}
|
||||||
};
|
};
|
||||||
c = getopt_long(argc, argv,
|
c = getopt_long(argc, argv,
|
||||||
"nf:s:S:p:b:P:m:t:e:x:?",
|
"nf:s:S:p:m:t:e:x:?",
|
||||||
long_options, &option_index);
|
long_options, &option_index);
|
||||||
if (c==-1)
|
if (c==-1)
|
||||||
break;
|
break;
|
||||||
@ -2357,7 +2170,7 @@ int main(int argc, char **argv)
|
|||||||
|
|
||||||
case 'p':
|
case 'p':
|
||||||
i = 0;
|
i = 0;
|
||||||
while( pol2str[i] ) {
|
while( i < 4 ) {
|
||||||
if( strcmp(optarg,pol2str[i]) == 0 ) {
|
if( strcmp(optarg,pol2str[i]) == 0 ) {
|
||||||
tpi.pol = i;
|
tpi.pol = i;
|
||||||
break;
|
break;
|
||||||
@ -2366,23 +2179,6 @@ int main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'b':
|
|
||||||
i = 0;
|
|
||||||
while( bw2str[i] ) {
|
|
||||||
if( strcmp(optarg,bw2str[i]) == 0 ) {
|
|
||||||
tpi.bw = i;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
i += 1;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'P':
|
|
||||||
tpi.isi = strtoul(optarg, NULL, 10);
|
|
||||||
if( tpi.isi > 255 )
|
|
||||||
tpi.isi = 0;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'm':
|
case 'm':
|
||||||
i = 0;
|
i = 0;
|
||||||
while( msys2str[i] ) {
|
while( msys2str[i] ) {
|
||||||
@ -2394,7 +2190,7 @@ int main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 't':
|
case 't':
|
||||||
i = 0;
|
i = 0;
|
||||||
while( mtype2str[i] ) {
|
while( mtype2str[i] ) {
|
||||||
if( strcmp(optarg,mtype2str[i]) == 0 ) {
|
if( strcmp(optarg,mtype2str[i]) == 0 ) {
|
||||||
|
371
octoserve/dvb.c
371
octoserve/dvb.c
@ -192,10 +192,8 @@ static int set_fe_input(struct dvbfe *fe, uint32_t fr,
|
|||||||
struct dtv_properties c;
|
struct dtv_properties c;
|
||||||
int ret;
|
int ret;
|
||||||
int fd = fe->fd;
|
int fd = fe->fd;
|
||||||
|
|
||||||
dbgprintf(DEBUG_DVB, "ds = %u, input = %u\n", ds, input);
|
dbgprintf(DEBUG_DVB, "ds = %u, input = %u\n", ds, input);
|
||||||
if (fe->set & (1UL << PARAM_FEC))
|
|
||||||
p[5].u.data = fe->param[PARAM_FEC] - 1;
|
|
||||||
|
|
||||||
c.num = ARRAY_SIZE(p);
|
c.num = ARRAY_SIZE(p);
|
||||||
c.props = p;
|
c.props = p;
|
||||||
@ -209,10 +207,7 @@ static int set_fe_input(struct dvbfe *fe, uint32_t fr,
|
|||||||
if (fe->set & (1UL << PARAM_ISI))
|
if (fe->set & (1UL << PARAM_ISI))
|
||||||
set_property(fd, DTV_STREAM_ID, fe->param[PARAM_ISI]);
|
set_property(fd, DTV_STREAM_ID, fe->param[PARAM_ISI]);
|
||||||
if (fe->set & (1UL << PARAM_PLS))
|
if (fe->set & (1UL << PARAM_PLS))
|
||||||
set_property(fd, DTV_SCRAMBLING_SEQUENCE_INDEX,
|
set_property(fd, DTV_PLS, fe->param[PARAM_PLS]);
|
||||||
fe->param[PARAM_PLS]);
|
|
||||||
if (fe->set & (1UL << PARAM_MTYPE))
|
|
||||||
set_property(fd, DTV_MODULATION, fe->param[PARAM_MTYPE] - 1);
|
|
||||||
set_property(fd, DTV_TUNE, 0);
|
set_property(fd, DTV_TUNE, 0);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -329,12 +324,12 @@ static int set_en50607(struct dvbfe *fe, uint32_t freq, uint32_t sr,
|
|||||||
cmd.msg[0], cmd.msg[1], cmd.msg[2], cmd.msg[3]);
|
cmd.msg[0], cmd.msg[1], cmd.msg[2], cmd.msg[3]);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int tune_dvbs2(struct dvbfe *fe)
|
static int tune_sat(struct dvbfe *fe)
|
||||||
{
|
{
|
||||||
uint32_t freq, hi = 0, src, lnb = 0, lnbc = 0, lofs;
|
uint32_t freq, hi = 0, src, lnb = 0, lnbc = 0, lofs;
|
||||||
fe_delivery_system_t ds = fe->param[PARAM_MSYS] - 1;
|
fe_delivery_system_t ds = fe->param[PARAM_MSYS] - 1;
|
||||||
|
|
||||||
dbgprintf(DEBUG_DVB, "tune_dvbs2\n");
|
dbgprintf(DEBUG_DVB, "tune_sat\n");
|
||||||
freq = fe->param[PARAM_FREQ];
|
freq = fe->param[PARAM_FREQ];
|
||||||
|
|
||||||
if (fe->param[PARAM_SRC])
|
if (fe->param[PARAM_SRC])
|
||||||
@ -360,17 +355,10 @@ static int tune_dvbs2(struct dvbfe *fe)
|
|||||||
{
|
{
|
||||||
if (lofs)
|
if (lofs)
|
||||||
hi = (freq > lofs) ? 1 : 0;
|
hi = (freq > lofs) ? 1 : 0;
|
||||||
if (lofs > 10000000) {
|
if (hi)
|
||||||
if (hi)
|
freq -= fe->lof2[lnbc];
|
||||||
freq -= fe->lof2[lnbc];
|
else
|
||||||
else
|
freq -= fe->lof1[lnbc];
|
||||||
freq -= fe->lof1[lnbc];
|
|
||||||
} else {
|
|
||||||
if (hi)
|
|
||||||
freq = fe->lof2[lnbc] - freq;
|
|
||||||
else
|
|
||||||
freq = fe->lof1[lnbc] - freq;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (fe->first) {
|
if (fe->first) {
|
||||||
fe->first = 0;
|
fe->first = 0;
|
||||||
@ -399,7 +387,7 @@ static int tune_dvbs2(struct dvbfe *fe)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int tune_dvbc(struct dvbfe *fe)
|
static int tune_c(struct dvbfe *fe)
|
||||||
{
|
{
|
||||||
struct dtv_property p[] = {
|
struct dtv_property p[] = {
|
||||||
{ .cmd = DTV_CLEAR },
|
{ .cmd = DTV_CLEAR },
|
||||||
@ -427,7 +415,24 @@ static int tune_dvbc(struct dvbfe *fe)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int tune_dvbt(struct dvbfe *fe)
|
static int tune_cable(struct dvbfe *fe)
|
||||||
|
{
|
||||||
|
uint32_t freq;
|
||||||
|
struct dvb_frontend_parameters p = {
|
||||||
|
.frequency = fe->param[PARAM_FREQ] * 1000,
|
||||||
|
.u.qam.symbol_rate = fe->param[PARAM_SR] * 1000,
|
||||||
|
.u.qam.fec_inner = fe->param[PARAM_FEC] ? (fe->param[PARAM_FEC] - 1) : FEC_AUTO,
|
||||||
|
.u.qam.modulation = fe->param[PARAM_MTYPE] - 1,
|
||||||
|
};
|
||||||
|
set_property(fe->fd, DTV_DELIVERY_SYSTEM, SYS_DVBC_ANNEX_A);
|
||||||
|
if (ioctl(fe->fd, FE_SET_FRONTEND, &p) == -1) {
|
||||||
|
perror("FE_SET_FRONTEND error");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int tune_terr(struct dvbfe *fe)
|
||||||
{
|
{
|
||||||
struct dtv_property p[] = {
|
struct dtv_property p[] = {
|
||||||
{ .cmd = DTV_CLEAR },
|
{ .cmd = DTV_CLEAR },
|
||||||
@ -449,8 +454,33 @@ static int tune_dvbt(struct dvbfe *fe)
|
|||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
#if 0
|
||||||
|
static int tune_terr(struct dvbfe *fe)
|
||||||
|
{
|
||||||
|
uint32_t freq;
|
||||||
|
enum fe_bandwidth bw;
|
||||||
|
struct dvb_frontend_parameters p = {
|
||||||
|
.frequency = fe->param[PARAM_FREQ] * 1000,
|
||||||
|
.inversion = INVERSION_AUTO,
|
||||||
|
.u.ofdm.code_rate_HP = FEC_AUTO,
|
||||||
|
.u.ofdm.code_rate_LP = FEC_AUTO,
|
||||||
|
.u.ofdm.constellation = fe->param[PARAM_MTYPE] - 1,
|
||||||
|
.u.ofdm.transmission_mode = TRANSMISSION_MODE_AUTO,
|
||||||
|
.u.ofdm.guard_interval = GUARD_INTERVAL_AUTO,
|
||||||
|
.u.ofdm.hierarchy_information = HIERARCHY_AUTO,
|
||||||
|
.u.ofdm.bandwidth = fe->param[PARAM_BW] ?
|
||||||
|
(fe->param[PARAM_BW] - 1) : BANDWIDTH_AUTO,
|
||||||
|
};
|
||||||
|
set_property(fe->fd, DTV_DELIVERY_SYSTEM, SYS_DVBT);
|
||||||
|
if (ioctl(fe->fd, FE_SET_FRONTEND, &p) == -1) {
|
||||||
|
perror("FE_SET_FRONTEND error");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static int tune_dvbc2(struct dvbfe *fe)
|
static int tune_c2(struct dvbfe *fe)
|
||||||
{
|
{
|
||||||
struct dtv_property p[] = {
|
struct dtv_property p[] = {
|
||||||
{ .cmd = DTV_CLEAR },
|
{ .cmd = DTV_CLEAR },
|
||||||
@ -474,7 +504,7 @@ static int tune_dvbc2(struct dvbfe *fe)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int tune_dvbt2(struct dvbfe *fe)
|
static int tune_terr2(struct dvbfe *fe)
|
||||||
{
|
{
|
||||||
struct dtv_property p[] = {
|
struct dtv_property p[] = {
|
||||||
{ .cmd = DTV_CLEAR },
|
{ .cmd = DTV_CLEAR },
|
||||||
@ -521,76 +551,6 @@ static int tune_isdbt(struct dvbfe *fe)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int tune_isdbc(struct dvbfe *fe)
|
|
||||||
{
|
|
||||||
struct dtv_property p[] = {
|
|
||||||
{ .cmd = DTV_CLEAR },
|
|
||||||
{ .cmd = DTV_FREQUENCY, .u.data = fe->param[PARAM_FREQ] * 1000 },
|
|
||||||
};
|
|
||||||
struct dtv_properties c;
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
set_property(fe->fd, DTV_DELIVERY_SYSTEM, SYS_ISDBC);
|
|
||||||
|
|
||||||
c.num = ARRAY_SIZE(p);
|
|
||||||
c.props = p;
|
|
||||||
ret = ioctl(fe->fd, FE_SET_PROPERTY, &c);
|
|
||||||
if (ret < 0) {
|
|
||||||
fprintf(stderr, "FE_SET_PROPERTY returned %d\n", ret);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
if (fe->set & (1UL << PARAM_ISI))
|
|
||||||
set_property(fe->fd, DTV_STREAM_ID, fe->param[PARAM_ISI]);
|
|
||||||
set_property(fe->fd, DTV_TUNE, 0);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int tune_j83b(struct dvbfe *fe)
|
|
||||||
{
|
|
||||||
struct dtv_property p[] = {
|
|
||||||
{ .cmd = DTV_CLEAR },
|
|
||||||
{ .cmd = DTV_FREQUENCY, .u.data = fe->param[PARAM_FREQ] * 1000 },
|
|
||||||
};
|
|
||||||
struct dtv_properties c;
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
set_property(fe->fd, DTV_DELIVERY_SYSTEM, SYS_DVBC_ANNEX_B);
|
|
||||||
|
|
||||||
c.num = ARRAY_SIZE(p);
|
|
||||||
c.props = p;
|
|
||||||
ret = ioctl(fe->fd, FE_SET_PROPERTY, &c);
|
|
||||||
if (ret < 0) {
|
|
||||||
fprintf(stderr, "FE_SET_PROPERTY returned %d\n", ret);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
set_property(fe->fd, DTV_TUNE, 0);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int tune_isdbs(struct dvbfe *fe)
|
|
||||||
{
|
|
||||||
struct dtv_property p[] = {
|
|
||||||
{ .cmd = DTV_CLEAR },
|
|
||||||
{ .cmd = DTV_FREQUENCY, .u.data = fe->param[PARAM_FREQ] },
|
|
||||||
};
|
|
||||||
struct dtv_properties c;
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
set_property(fe->fd, DTV_DELIVERY_SYSTEM, SYS_ISDBS);
|
|
||||||
|
|
||||||
c.num = ARRAY_SIZE(p);
|
|
||||||
c.props = p;
|
|
||||||
ret = ioctl(fe->fd, FE_SET_PROPERTY, &c);
|
|
||||||
if (ret < 0) {
|
|
||||||
fprintf(stderr, "FE_SET_PROPERTY returned %d\n", ret);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
if (fe->set & (1UL << PARAM_ISI))
|
|
||||||
set_property(fe->fd, DTV_STREAM_ID, fe->param[PARAM_ISI]);
|
|
||||||
set_property(fe->fd, DTV_TUNE, 0);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int tune(struct dvbfe *fe)
|
static int tune(struct dvbfe *fe)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
@ -600,33 +560,23 @@ static int tune(struct dvbfe *fe)
|
|||||||
switch (fe->n_param[PARAM_MSYS] - 1) {
|
switch (fe->n_param[PARAM_MSYS] - 1) {
|
||||||
case SYS_DVBS:
|
case SYS_DVBS:
|
||||||
case SYS_DVBS2:
|
case SYS_DVBS2:
|
||||||
ret = tune_dvbs2(fe);
|
ret = tune_sat(fe);
|
||||||
break;
|
break;
|
||||||
case SYS_DVBC_ANNEX_A:
|
case SYS_DVBC_ANNEX_A:
|
||||||
ret = tune_dvbc(fe);
|
ret = tune_c(fe);
|
||||||
break;
|
break;
|
||||||
case SYS_DVBT:
|
case SYS_DVBT:
|
||||||
ret = tune_dvbt(fe);
|
ret = tune_terr(fe);
|
||||||
break;
|
break;
|
||||||
case SYS_DVBT2:
|
case SYS_DVBT2:
|
||||||
ret = tune_dvbt2(fe);
|
ret = tune_terr2(fe);
|
||||||
break;
|
break;
|
||||||
case SYS_DVBC2:
|
case SYS_DVBC2:
|
||||||
ret = tune_dvbc2(fe);
|
ret = tune_c2(fe);
|
||||||
break;
|
break;
|
||||||
case SYS_ISDBT:
|
case SYS_ISDBT:
|
||||||
ret = tune_isdbt(fe);
|
ret = tune_isdbt(fe);
|
||||||
break;
|
break;
|
||||||
case SYS_DVBC_ANNEX_B:
|
|
||||||
ret = tune_j83b(fe);
|
|
||||||
break;
|
|
||||||
case SYS_DVBC_ANNEX_C:
|
|
||||||
case SYS_ISDBC:
|
|
||||||
ret = tune_isdbc(fe);
|
|
||||||
break;
|
|
||||||
case SYS_ISDBS:
|
|
||||||
ret = tune_isdbs(fe);
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -1018,7 +968,7 @@ static void calc_lq(struct dvbfe *fe)
|
|||||||
get_property(fe->fd, DTV_INNER_FEC, &fec);
|
get_property(fe->fd, DTV_INNER_FEC, &fec);
|
||||||
fe->param[PARAM_FEC] = fec + 1;
|
fe->param[PARAM_FEC] = fec + 1;
|
||||||
get_property(fe->fd, DTV_MODULATION, &mod);
|
get_property(fe->fd, DTV_MODULATION, &mod);
|
||||||
//fe->param[PARAM_MTYPE] = mod + 1;
|
fe->param[PARAM_MTYPE] = mod + 1;
|
||||||
|
|
||||||
get_stat(fe->fd, DTV_STAT_PRE_ERROR_BIT_COUNT, &st);
|
get_stat(fe->fd, DTV_STAT_PRE_ERROR_BIT_COUNT, &st);
|
||||||
ber_num = st.stat[0].uvalue;
|
ber_num = st.stat[0].uvalue;
|
||||||
@ -1121,7 +1071,7 @@ void handle_fe(struct dvbfe *fe)
|
|||||||
} else {
|
} else {
|
||||||
max = 1;
|
max = 1;
|
||||||
nolock++;
|
nolock++;
|
||||||
if (nolock > 100)
|
if (nolock > 20)
|
||||||
fe->tune = 1;
|
fe->tune = 1;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -1157,7 +1107,7 @@ int dvb_tune(struct dvbfe *fe, struct dvb_params *p)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int init_fe(struct octoserve *os, int a, int f, int fd)
|
static int init_fe(struct octoserve *os, int a, int f, int fd, int nodvbt, int msmode)
|
||||||
{
|
{
|
||||||
struct dtv_properties dps;
|
struct dtv_properties dps;
|
||||||
struct dtv_property dp[10];
|
struct dtv_property dp[10];
|
||||||
@ -1178,12 +1128,9 @@ static int init_fe(struct octoserve *os, int a, int f, int fd)
|
|||||||
dbgprintf(DEBUG_DVB, "delivery system %d\n", ds);
|
dbgprintf(DEBUG_DVB, "delivery system %d\n", ds);
|
||||||
fe->type |= (1UL << ds);
|
fe->type |= (1UL << ds);
|
||||||
}
|
}
|
||||||
if (os->nodvbt)
|
if (nodvbt)
|
||||||
fe->type &= ~((1UL << SYS_DVBT2) | (1UL << SYS_DVBT));
|
fe->type &= ~((1UL << SYS_DVBT2) | (1UL << SYS_DVBT));
|
||||||
fe->type_orig = fe->type;
|
|
||||||
if (os->delsys_mask)
|
|
||||||
fe->type &= os->delsys_mask;
|
|
||||||
|
|
||||||
if (!fe->type)
|
if (!fe->type)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
@ -1203,16 +1150,15 @@ static int init_fe(struct octoserve *os, int a, int f, int fd)
|
|||||||
dbgprintf(DEBUG_DVB, "input prop %u = %u\n", i, fe->input[i]);
|
dbgprintf(DEBUG_DVB, "input prop %u = %u\n", i, fe->input[i]);
|
||||||
}
|
}
|
||||||
if (fe->input[3]) {
|
if (fe->input[3]) {
|
||||||
dbgprintf(DEBUG_DVB, "has_feswitch\n");
|
|
||||||
os->has_feswitch = 1;
|
os->has_feswitch = 1;
|
||||||
if (!os->scif_type && !os->msmode) {
|
if (!os->scif_type && !msmode) {
|
||||||
if (fe->input[2] >= fe->input[1]) {
|
if (fe->input[2] >= fe->input[1]) {
|
||||||
fe->type = 0;
|
fe->type = 0;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fe->type & (1UL << SYS_DVBS2))
|
if (fe->type & (1UL << SYS_DVBS2))
|
||||||
os->dvbs2num++;
|
os->dvbs2num++;
|
||||||
if (fe->type & (1UL << SYS_DVBT2))
|
if (fe->type & (1UL << SYS_DVBT2))
|
||||||
@ -1229,7 +1175,7 @@ static int init_fe(struct octoserve *os, int a, int f, int fd)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int scan_dvbfe(struct octoserve *os)
|
static int scan_dvbfe(struct octoserve *os, int nodvbt, int msmode)
|
||||||
{
|
{
|
||||||
int a, f, fd;
|
int a, f, fd;
|
||||||
char fname[80];
|
char fname[80];
|
||||||
@ -1239,7 +1185,7 @@ static int scan_dvbfe(struct octoserve *os)
|
|||||||
sprintf(fname, "/dev/dvb/adapter%d/frontend%d", a, f);
|
sprintf(fname, "/dev/dvb/adapter%d/frontend%d", a, f);
|
||||||
fd = open(fname, O_RDWR);
|
fd = open(fname, O_RDWR);
|
||||||
if (fd >= 0) {
|
if (fd >= 0) {
|
||||||
init_fe(os, a, f, fd);
|
init_fe(os, a, f, fd, nodvbt, msmode);
|
||||||
close(fd);
|
close(fd);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1254,10 +1200,11 @@ static int ai_callback(void *arg, uint8_t slot_id, uint16_t session_number,
|
|||||||
{
|
{
|
||||||
struct dvbca *ca = arg;
|
struct dvbca *ca = arg;
|
||||||
|
|
||||||
dbgprintf(DEBUG_CI, "Application type: %02x\n", application_type);
|
dbgprintf(DEBUG_DVB, "Application type: %02x\n", application_type);
|
||||||
dbgprintf(DEBUG_CI, "Application manufacturer: %04x\n", application_manufacturer);
|
dbgprintf(DEBUG_DVB, "Application manufacturer: %04x\n", application_manufacturer);
|
||||||
dbgprintf(DEBUG_CI, "Manufacturer code: %04x\n", manufacturer_code);
|
dbgprintf(DEBUG_DVB, "Manufacturer code: %04x\n", manufacturer_code);
|
||||||
dbgprintf(DEBUG_CI, "Menu string: %.*s\n", menu_string_length, menu_string);
|
dbgprintf(DEBUG_DVB, "Menu string: %.*s\n", menu_string_length, menu_string);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1267,32 +1214,14 @@ static int ca_info_callback(void *arg, uint8_t slot_id, uint16_t snum,
|
|||||||
struct dvbca *ca = arg;
|
struct dvbca *ca = arg;
|
||||||
uint32_t i;
|
uint32_t i;
|
||||||
|
|
||||||
dbgprintf(DEBUG_CI, "CAM supports the following ca system ids:\n");
|
dbgprintf(DEBUG_DVB, "CAM supports the following ca system ids:\n");
|
||||||
for (i = 0; i < id_count; i++) {
|
for (i = 0; i < id_count; i++) {
|
||||||
dbgprintf(DEBUG_CI, " 0x%04x\n", ids[i]);
|
dbgprintf(DEBUG_DVB, " 0x%04x\n", ids[i]);
|
||||||
}
|
}
|
||||||
ca->sentpmt = 0;
|
|
||||||
ca->resource_ready = 1;
|
ca->resource_ready = 1;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ca_pmt_reply_callback(void *arg, uint8_t slot_id, uint16_t snum,
|
|
||||||
struct en50221_app_pmt_reply *reply,
|
|
||||||
uint32_t reply_size)
|
|
||||||
{
|
|
||||||
struct dvbca *ca = arg;
|
|
||||||
uint32_t i;
|
|
||||||
|
|
||||||
if (!reply->CA_enable_flag || reply->CA_enable != 1) {
|
|
||||||
dbgprintf(DEBUG_CI,
|
|
||||||
"Descrambling not possible:"
|
|
||||||
"ca_enable_flag: %d, ca_enable: 0x%02x", reply->CA_enable_flag, reply->CA_enable);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
dbgprintf(DEBUG_CI, "Descrambling OK\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
static int handle_pmt(struct dvbca *ca, uint8_t *buf, int size)
|
static int handle_pmt(struct dvbca *ca, uint8_t *buf, int size)
|
||||||
{
|
{
|
||||||
@ -1302,7 +1231,7 @@ static int handle_pmt(struct dvbca *ca, uint8_t *buf, int size)
|
|||||||
struct section_ext *section_ext = section_ext_decode(section, 0);
|
struct section_ext *section_ext = section_ext_decode(section, 0);
|
||||||
struct mpeg_pmt_section *pmt = mpeg_pmt_section_codec(section_ext);
|
struct mpeg_pmt_section *pmt = mpeg_pmt_section_codec(section_ext);
|
||||||
|
|
||||||
dbgprintf(DEBUG_CI, "handle pmt\n");
|
dbgprintf(DEBUG_DVB, "handle pmt\n");
|
||||||
if (section_ext->version_number == ca->ca_pmt_version &&
|
if (section_ext->version_number == ca->ca_pmt_version &&
|
||||||
ca->pmt == ca->pmt_old)
|
ca->pmt == ca->pmt_old)
|
||||||
return;
|
return;
|
||||||
@ -1318,15 +1247,15 @@ static int handle_pmt(struct dvbca *ca, uint8_t *buf, int size)
|
|||||||
//return;
|
//return;
|
||||||
}
|
}
|
||||||
ca->sentpmt = 1;
|
ca->sentpmt = 1;
|
||||||
dbgprintf(DEBUG_CI, "set ca_pmt\n");
|
dbgprintf(DEBUG_DVB, "set ca_pmt\n");
|
||||||
|
|
||||||
if ((size = en50221_ca_format_pmt(pmt, capmt, sizeof(capmt), ca->moveca, listmgmt,
|
if ((size = en50221_ca_format_pmt(pmt, capmt, sizeof(capmt), ca->moveca, listmgmt,
|
||||||
CA_PMT_CMD_ID_OK_DESCRAMBLING)) < 0) {
|
CA_PMT_CMD_ID_OK_DESCRAMBLING)) < 0) {
|
||||||
dbgprintf(DEBUG_CI, "Failed to format PMT\n");
|
dbgprintf(DEBUG_DVB, "Failed to format PMT\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if (en50221_app_ca_pmt(ca->stdcam->ca_resource, ca->stdcam->ca_session_number, capmt, size)) {
|
if (en50221_app_ca_pmt(ca->stdcam->ca_resource, ca->stdcam->ca_session_number, capmt, size)) {
|
||||||
dbgprintf(DEBUG_CI, "Failed to send PMT\n");
|
dbgprintf(DEBUG_DVB, "Failed to send PMT\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1350,7 +1279,7 @@ static void handle_tdt(struct dvbca *ca)
|
|||||||
len = getsec(ca->input, 0x14, 0, 0x70, sec);
|
len = getsec(ca->input, 0x14, 0, 0x70, sec);
|
||||||
if (len < 0)
|
if (len < 0)
|
||||||
return;
|
return;
|
||||||
dbgprintf(DEBUG_CI, "got tdt\n");
|
dbgprintf(DEBUG_DVB, "got tdt\n");
|
||||||
|
|
||||||
section = section_codec(sec, len);
|
section = section_codec(sec, len);
|
||||||
if (section == NULL)
|
if (section == NULL)
|
||||||
@ -1360,12 +1289,11 @@ static void handle_tdt(struct dvbca *ca)
|
|||||||
return;
|
return;
|
||||||
dvb_time = dvbdate_to_unixtime(tdt->utc_time);
|
dvb_time = dvbdate_to_unixtime(tdt->utc_time);
|
||||||
|
|
||||||
dbgprintf(DEBUG_CI, "set dvbtime\n");
|
dbgprintf(DEBUG_DVB, "set dvbtime\n");
|
||||||
if (ca->stdcam->dvbtime)
|
if (ca->stdcam->dvbtime)
|
||||||
ca->stdcam->dvbtime(ca->stdcam, dvb_time);
|
ca->stdcam->dvbtime(ca->stdcam, dvb_time);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 1
|
|
||||||
static int handle_pmts(struct dvbca *ca)
|
static int handle_pmts(struct dvbca *ca)
|
||||||
{
|
{
|
||||||
int listmgmt = CA_LIST_MANAGEMENT_ONLY;
|
int listmgmt = CA_LIST_MANAGEMENT_ONLY;
|
||||||
@ -1377,78 +1305,10 @@ static int handle_pmts(struct dvbca *ca)
|
|||||||
|
|
||||||
if (!ca->resource_ready)
|
if (!ca->resource_ready)
|
||||||
return 0;
|
return 0;
|
||||||
|
dbgprintf(DEBUG_DVB, "handle pmts\n");
|
||||||
for (i = num = 0; i < MAX_PMT; i++)
|
for (i = num = 0; i < MAX_PMT; i++)
|
||||||
if (ca->pmt[i])
|
if (ca->pmt[i])
|
||||||
num++;
|
num++;
|
||||||
dbgprintf(DEBUG_CI, "ci %u.%u: handle %u pmts\n", ca->anum, ca->fnum, num);
|
|
||||||
for (i = 0; i < num; i++) {
|
|
||||||
len = getsec(ca->input, ca->pmt[i] & 0xffff, ca->pmt[i] >> 16, 2, sec);
|
|
||||||
if (len < 0)
|
|
||||||
return 0;
|
|
||||||
section = section_codec(sec, len);
|
|
||||||
section_ext = section_ext_decode(section, 0);
|
|
||||||
pmt = mpeg_pmt_section_codec(section_ext);
|
|
||||||
|
|
||||||
ca->ca_pmt_version[i] = section_ext->version_number;
|
|
||||||
if (ca->sentpmt) {
|
|
||||||
return 0;
|
|
||||||
listmgmt = CA_LIST_MANAGEMENT_UPDATE;
|
|
||||||
} else {
|
|
||||||
listmgmt = CA_LIST_MANAGEMENT_ONLY;
|
|
||||||
#if 1
|
|
||||||
if (num > 1) {
|
|
||||||
listmgmt = CA_LIST_MANAGEMENT_MORE;
|
|
||||||
if (i == 0)
|
|
||||||
listmgmt = CA_LIST_MANAGEMENT_FIRST;
|
|
||||||
if (i == num - 1)
|
|
||||||
listmgmt = CA_LIST_MANAGEMENT_LAST;
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
if (i > 0)
|
|
||||||
listmgmt = CA_LIST_MANAGEMENT_ADD;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
dbgprintf(DEBUG_CI, "set ca_pmt %d = %u as %s\n",
|
|
||||||
i, ca->pmt[i] & 0xffff,
|
|
||||||
(listmgmt == CA_LIST_MANAGEMENT_ONLY) ? "only" :
|
|
||||||
(listmgmt == CA_LIST_MANAGEMENT_ADD) ? "add" :
|
|
||||||
(listmgmt == CA_LIST_MANAGEMENT_FIRST) ? "first" :
|
|
||||||
(listmgmt == CA_LIST_MANAGEMENT_LAST) ? "last" :
|
|
||||||
"more");
|
|
||||||
|
|
||||||
if ((size = en50221_ca_format_pmt(pmt, capmt, sizeof(capmt), ca->moveca, listmgmt,
|
|
||||||
CA_PMT_CMD_ID_OK_DESCRAMBLING)) < 0) {
|
|
||||||
dbgprintf(DEBUG_CI, "Failed to format PMT\n");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
dbgprintf(DEBUG_CI, "ci %u.%u: CA_PMT\n", ca->anum, ca->fnum, num);
|
|
||||||
dump(capmt, size);
|
|
||||||
if (en50221_app_ca_pmt(ca->stdcam->ca_resource, ca->stdcam->ca_session_number, capmt, size)) {
|
|
||||||
dbgprintf(DEBUG_CI, "Failed to send PMT\n");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (num)
|
|
||||||
ca->sentpmt = 1;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#else
|
|
||||||
static int handle_pmts(struct dvbca *ca)
|
|
||||||
{
|
|
||||||
int listmgmt = CA_LIST_MANAGEMENT_ONLY;
|
|
||||||
uint8_t sec[4096], capmt[MAX_PMT][4096];
|
|
||||||
struct section *section;
|
|
||||||
struct section_ext *section_ext;
|
|
||||||
struct mpeg_pmt_section *pmt;
|
|
||||||
int i, size[MAX_PMT], num, len;
|
|
||||||
|
|
||||||
if (!ca->resource_ready)
|
|
||||||
return 0;
|
|
||||||
for (i = num = 0; i < MAX_PMT; i++)
|
|
||||||
if (ca->pmt[i])
|
|
||||||
num++;
|
|
||||||
dbgprintf(DEBUG_CI, "handle %u pmts\n", num);
|
|
||||||
for (i = 0; i < num; i++) {
|
for (i = 0; i < num; i++) {
|
||||||
len = getsec(ca->input, ca->pmt[i] & 0xffff, ca->pmt[i] >> 16, 2, sec);
|
len = getsec(ca->input, ca->pmt[i] & 0xffff, ca->pmt[i] >> 16, 2, sec);
|
||||||
if (len < 0)
|
if (len < 0)
|
||||||
@ -1459,11 +1319,10 @@ static int handle_pmts(struct dvbca *ca)
|
|||||||
|
|
||||||
ca->ca_pmt_version[i] = section_ext->version_number;
|
ca->ca_pmt_version[i] = section_ext->version_number;
|
||||||
if (ca->sentpmt) {
|
if (ca->sentpmt) {
|
||||||
return 0;
|
//return 0;
|
||||||
listmgmt = CA_LIST_MANAGEMENT_UPDATE;
|
listmgmt = CA_LIST_MANAGEMENT_UPDATE;
|
||||||
} else {
|
} else {
|
||||||
listmgmt = CA_LIST_MANAGEMENT_ONLY;
|
listmgmt = CA_LIST_MANAGEMENT_ONLY;
|
||||||
#if 0
|
|
||||||
if (num > 1) {
|
if (num > 1) {
|
||||||
listmgmt = CA_LIST_MANAGEMENT_MORE;
|
listmgmt = CA_LIST_MANAGEMENT_MORE;
|
||||||
if (i == 0)
|
if (i == 0)
|
||||||
@ -1471,40 +1330,25 @@ static int handle_pmts(struct dvbca *ca)
|
|||||||
if (i == num - 1)
|
if (i == num - 1)
|
||||||
listmgmt = CA_LIST_MANAGEMENT_LAST;
|
listmgmt = CA_LIST_MANAGEMENT_LAST;
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
if (i > 0)
|
|
||||||
listmgmt = CA_LIST_MANAGEMENT_ADD;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
dbgprintf(DEBUG_CI, "set ca_pmt %d = %u as %s\n",
|
dbgprintf(DEBUG_DVB, "set ca_pmt\n");
|
||||||
i, ca->pmt[i] & 0xffff,
|
|
||||||
(listmgmt == CA_LIST_MANAGEMENT_ONLY) ? "only" :
|
if ((size = en50221_ca_format_pmt(pmt, capmt, sizeof(capmt), ca->moveca, listmgmt,
|
||||||
(listmgmt == CA_LIST_MANAGEMENT_ADD) ? "add" :
|
|
||||||
(listmgmt == CA_LIST_MANAGEMENT_FIRST) ? "first" :
|
|
||||||
(listmgmt == CA_LIST_MANAGEMENT_LAST) ? "last" :
|
|
||||||
"more");
|
|
||||||
|
|
||||||
if ((size[i] = en50221_ca_format_pmt(pmt, capmt[i], sizeof(capmt[i]), ca->moveca, listmgmt,
|
|
||||||
CA_PMT_CMD_ID_OK_DESCRAMBLING)) < 0) {
|
CA_PMT_CMD_ID_OK_DESCRAMBLING)) < 0) {
|
||||||
dbgprintf(DEBUG_CI, "Failed to format PMT\n");
|
dbgprintf(DEBUG_DVB, "Failed to format PMT\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
dump(capmt[i], size[i]);
|
dump(capmt, size);
|
||||||
}
|
if (en50221_app_ca_pmt(ca->stdcam->ca_resource, ca->stdcam->ca_session_number, capmt, size)) {
|
||||||
|
dbgprintf(DEBUG_DVB, "Failed to send PMT\n");
|
||||||
for (i = 0; i < num; i++) {
|
|
||||||
if (en50221_app_ca_pmt(ca->stdcam->ca_resource, ca->stdcam->ca_session_number, capmt[i], size[i])) {
|
|
||||||
dbgprintf(DEBUG_CI, "Failed to send PMT\n");
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
dbgprintf(DEBUG_CI, "ca_pmt %d sent\n", i);
|
|
||||||
}
|
}
|
||||||
if (num)
|
if (num)
|
||||||
ca->sentpmt = 1;
|
ca->sentpmt = 1;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
|
||||||
static void proc_csock_msg(struct dvbca *ca, uint8_t *buf, int len)
|
static void proc_csock_msg(struct dvbca *ca, uint8_t *buf, int len)
|
||||||
{
|
{
|
||||||
if (*buf == '\r') {
|
if (*buf == '\r') {
|
||||||
@ -1631,15 +1475,8 @@ static void handle_ci(struct dvbca *ca)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (ca->setpmt) {
|
if (ca->setpmt) {
|
||||||
dbgprintf(DEBUG_CI, "got new PMT %04x %04x %04x ...\n",
|
dbgprintf(DEBUG_DVB, "got new PMT %08x\n", ca->pmt_new);
|
||||||
ca->pmt_new[0],
|
|
||||||
ca->pmt_new[1],
|
|
||||||
ca->pmt_new[2]);
|
|
||||||
memcpy(ca->pmt, ca->pmt_new, sizeof(ca->pmt));
|
memcpy(ca->pmt, ca->pmt_new, sizeof(ca->pmt));
|
||||||
dbgprintf(DEBUG_CI, "copied: %04x %04x %04x ...\n",
|
|
||||||
ca->pmt[0],
|
|
||||||
ca->pmt[1],
|
|
||||||
ca->pmt[2]);
|
|
||||||
memset(ca->pmt_old, 0, sizeof(ca->pmt_old));
|
memset(ca->pmt_old, 0, sizeof(ca->pmt_old));
|
||||||
for (i = 0; i < MAX_PMT; i++)
|
for (i = 0; i < MAX_PMT; i++)
|
||||||
ca->ca_pmt_version[i] = -1;
|
ca->ca_pmt_version[i] = -1;
|
||||||
@ -1669,10 +1506,10 @@ static void handle_ci(struct dvbca *ca)
|
|||||||
|
|
||||||
int set_pmt(struct dvbca *ca, uint32_t *pmt)
|
int set_pmt(struct dvbca *ca, uint32_t *pmt)
|
||||||
{
|
{
|
||||||
dbgprintf(DEBUG_CI, "set_pmt %08x %08x %08x\n", pmt[0], pmt[1], pmt[2]);
|
dbgprintf(DEBUG_DVB, "set_pmt %08x %08x %08x\n", pmt[0], pmt[1], pmt[2]);
|
||||||
pthread_mutex_lock(&ca->mutex);
|
pthread_mutex_lock(&ca->mutex);
|
||||||
memcpy(ca->pmt_new, pmt, sizeof(ca->pmt_new));
|
|
||||||
ca->setpmt = 1;
|
ca->setpmt = 1;
|
||||||
|
memcpy(ca->pmt_new, pmt, sizeof(ca->pmt_new));
|
||||||
pthread_mutex_unlock(&ca->mutex);
|
pthread_mutex_unlock(&ca->mutex);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -1763,19 +1600,19 @@ static int init_ca_stack(struct dvbca *ca)
|
|||||||
{
|
{
|
||||||
ca->tl = en50221_tl_create(1, 16);
|
ca->tl = en50221_tl_create(1, 16);
|
||||||
if (ca->tl == NULL) {
|
if (ca->tl == NULL) {
|
||||||
dbgprintf(DEBUG_CI, "Failed to create transport layer\n");
|
dbgprintf(DEBUG_DVB, "Failed to create transport layer\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
ca->sl = en50221_sl_create(ca->tl, 16);
|
ca->sl = en50221_sl_create(ca->tl, 16);
|
||||||
if (ca->sl == NULL) {
|
if (ca->sl == NULL) {
|
||||||
dbgprintf(DEBUG_CI, "Failed to create session layer\n");
|
dbgprintf(DEBUG_DVB, "Failed to create session layer\n");
|
||||||
en50221_tl_destroy(ca->tl);
|
en50221_tl_destroy(ca->tl);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
ca->stdcam = en50221_stdcam_llci_create(ca->fd, 0, ca->tl, ca->sl);
|
ca->stdcam = en50221_stdcam_llci_create(ca->fd, 0, ca->tl, ca->sl);
|
||||||
if (!ca->stdcam) {
|
if (!ca->stdcam) {
|
||||||
dbgprintf(DEBUG_CI, "Failed to create stdcam\n");
|
dbgprintf(DEBUG_DVB, "Failed to create stdcam\n");
|
||||||
en50221_sl_destroy(ca->sl);
|
en50221_sl_destroy(ca->sl);
|
||||||
en50221_tl_destroy(ca->tl);
|
en50221_tl_destroy(ca->tl);
|
||||||
return -1;
|
return -1;
|
||||||
@ -1785,7 +1622,6 @@ static int init_ca_stack(struct dvbca *ca)
|
|||||||
}
|
}
|
||||||
if (ca->stdcam->ca_resource) {
|
if (ca->stdcam->ca_resource) {
|
||||||
en50221_app_ca_register_info_callback(ca->stdcam->ca_resource, ca_info_callback, ca);
|
en50221_app_ca_register_info_callback(ca->stdcam->ca_resource, ca_info_callback, ca);
|
||||||
en50221_app_ca_register_pmt_reply_callback(ca->stdcam->ca_resource, ca_pmt_reply_callback, ca);
|
|
||||||
}
|
}
|
||||||
if (ca->stdcam->mmi_resource) {
|
if (ca->stdcam->mmi_resource) {
|
||||||
en50221_app_mmi_register_close_callback(ca->stdcam->mmi_resource, mmi_close_callback, ca);
|
en50221_app_mmi_register_close_callback(ca->stdcam->mmi_resource, mmi_close_callback, ca);
|
||||||
@ -1795,7 +1631,7 @@ static int init_ca_stack(struct dvbca *ca)
|
|||||||
en50221_app_mmi_register_menu_callback(ca->stdcam->mmi_resource, mmi_menu_callback, ca);
|
en50221_app_mmi_register_menu_callback(ca->stdcam->mmi_resource, mmi_menu_callback, ca);
|
||||||
en50221_app_mmi_register_list_callback(ca->stdcam->mmi_resource, mmi_menu_callback, ca);
|
en50221_app_mmi_register_list_callback(ca->stdcam->mmi_resource, mmi_menu_callback, ca);
|
||||||
} else {
|
} else {
|
||||||
dbgprintf(DEBUG_CI,
|
dbgprintf(DEBUG_DVB,
|
||||||
"CAM Menus are not supported by this interface hardware\n");
|
"CAM Menus are not supported by this interface hardware\n");
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
@ -1837,7 +1673,7 @@ static int scan_dvbca(struct octoserve *os)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dbgprintf(DEBUG_CI, "Found %d CA interfaces\n", os->dvbca_num);
|
dbgprintf(DEBUG_DVB, "Found %d CA interfaces\n", os->dvbca_num);
|
||||||
}
|
}
|
||||||
|
|
||||||
void scif_config(struct octoserve *os, char *name, char *val)
|
void scif_config(struct octoserve *os, char *name, char *val)
|
||||||
@ -1940,7 +1776,7 @@ void lnb_config(struct octoserve *os, char *name, char *val)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int init_dvb(struct octoserve *os)
|
int init_dvb(struct octoserve *os, int nodvbt, int msmode)
|
||||||
{
|
{
|
||||||
int i, j;
|
int i, j;
|
||||||
uint32_t fmode;
|
uint32_t fmode;
|
||||||
@ -1949,17 +1785,14 @@ int init_dvb(struct octoserve *os)
|
|||||||
pthread_mutex_init(&os->uni_lock, 0);
|
pthread_mutex_init(&os->uni_lock, 0);
|
||||||
os->scif_type = 0;
|
os->scif_type = 0;
|
||||||
parse_config(os, "scif", &scif_config);
|
parse_config(os, "scif", &scif_config);
|
||||||
|
|
||||||
scan_dvbfe(os);
|
scan_dvbfe(os, nodvbt, msmode);
|
||||||
scan_dvbca(os);
|
scan_dvbca(os);
|
||||||
|
|
||||||
if (os->scif_type)
|
if (os->scif_type)
|
||||||
fmode = 0;
|
fmode = 0;
|
||||||
else
|
else
|
||||||
fmode = os->msmode;
|
fmode = msmode;
|
||||||
dbgprintf(DEBUG_DVB, "fmode = %u, msmode = %u hasfeswitch = %u\n",
|
|
||||||
fmode, os->msmode, os->has_feswitch);
|
|
||||||
|
|
||||||
if (os->has_feswitch)
|
if (os->has_feswitch)
|
||||||
set_fmode(fmode);
|
set_fmode(fmode);
|
||||||
|
|
||||||
|
@ -107,7 +107,7 @@ void send_http_file(int sock, char *fn)
|
|||||||
uint8_t buf[1024];
|
uint8_t buf[1024];
|
||||||
int len, len2, fd;
|
int len, len2, fd;
|
||||||
char fn2[1024] = { 0 }, *d, **m;
|
char fn2[1024] = { 0 }, *d, **m;
|
||||||
|
|
||||||
strcat(fn2, "/var/satip");
|
strcat(fn2, "/var/satip");
|
||||||
strcat(fn2, fn);
|
strcat(fn2, fn);
|
||||||
d = strrchr(fn, '.');
|
d = strrchr(fn, '.');
|
||||||
@ -162,34 +162,19 @@ void send_xml(struct os_ssdp *ss)
|
|||||||
uint8_t *mac = &os->mac[0];
|
uint8_t *mac = &os->mac[0];
|
||||||
int serial = (mac[5] | (mac[4] << 8) | (mac[3] << 16)) / 2;
|
int serial = (mac[5] | (mac[4] << 8) | (mac[3] << 16)) / 2;
|
||||||
char boxname[80];
|
char boxname[80];
|
||||||
int i;
|
|
||||||
|
|
||||||
read_boxname(boxname);
|
read_boxname(boxname);
|
||||||
len = 0;
|
len = 0;
|
||||||
|
if (os->dvbs2num)
|
||||||
for (i = 0; i < 5; i++)
|
len += sprintf(cap + len, ",DVBS2-%u", os->dvbs2num);
|
||||||
switch ((i + os->first_ds) % 5) {
|
if (os->dvbtnum)
|
||||||
case 0:
|
len += sprintf(cap + len, ",DVBT-%u", os->dvbtnum);
|
||||||
if (os->dvbs2num)
|
if (os->dvbt2num)
|
||||||
len += sprintf(cap + len, ",DVBS2-%u", os->dvbs2num);
|
len += sprintf(cap + len, ",DVBT2-%u", os->dvbt2num);
|
||||||
break;
|
if (os->dvbcnum)
|
||||||
case 1:
|
len += sprintf(cap + len, ",DVBC-%u", os->dvbcnum);
|
||||||
if (os->dvbtnum)
|
if (os->dvbc2num)
|
||||||
len += sprintf(cap + len, ",DVBT-%u", os->dvbtnum);
|
len += sprintf(cap + len, ",DVBC2-%u", os->dvbc2num);
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
if (os->dvbt2num)
|
|
||||||
len += sprintf(cap + len, ",DVBT2-%u", os->dvbt2num);
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
if (os->dvbcnum)
|
|
||||||
len += sprintf(cap + len, ",DVBC-%u", os->dvbcnum);
|
|
||||||
break;
|
|
||||||
case 4:
|
|
||||||
if (os->dvbc2num)
|
|
||||||
len += sprintf(cap + len, ",DVBC2-%u", os->dvbc2num);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
len = snprintf(buf, sizeof(buf), xmldesc,
|
len = snprintf(buf, sizeof(buf), xmldesc,
|
||||||
ss->configid, boxname,
|
ss->configid, boxname,
|
||||||
serial, ss->uuid_str, cap + 1);
|
serial, ss->uuid_str, cap + 1);
|
||||||
@ -241,7 +226,6 @@ void send_serverinfo(struct os_ssdp *ss)
|
|||||||
sendstr(fd, "Octoserve.DeviceID = %u;\r\n", ss->devid);
|
sendstr(fd, "Octoserve.DeviceID = %u;\r\n", ss->devid);
|
||||||
sendstr(fd, "Octoserve.MAC = \"%02x:%02x:%02x:%02x:%02x:%02x\";\r\n",
|
sendstr(fd, "Octoserve.MAC = \"%02x:%02x:%02x:%02x:%02x:%02x\";\r\n",
|
||||||
mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
|
mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
|
||||||
sendstr(fd, "Octoserve.DelsysMask = %u;\r\n", os->delsys_mask);
|
|
||||||
sendstr(fd, "Octoserve.TunerList = new Array();\r\n");
|
sendstr(fd, "Octoserve.TunerList = new Array();\r\n");
|
||||||
for (i = 0; i < os->dvbfe_num; i++) {
|
for (i = 0; i < os->dvbfe_num; i++) {
|
||||||
struct dvbfe *fe = &os->dvbfe[i];
|
struct dvbfe *fe = &os->dvbfe[i];
|
||||||
@ -281,7 +265,7 @@ void send_serverinfo(struct os_ssdp *ss)
|
|||||||
types[pos] = '-';
|
types[pos] = '-';
|
||||||
}
|
}
|
||||||
sendstr(fd, "Octoserve.TunerList[%d] = new Object();\r\n", i);
|
sendstr(fd, "Octoserve.TunerList[%d] = new Object();\r\n", i);
|
||||||
sendstr(fd, "Octoserve.TunerList[%d].Type = %u;\r\n", i, fe->type_orig);
|
sendstr(fd, "Octoserve.TunerList[%d].Type = 0;\r\n", i);
|
||||||
sendstr(fd, "Octoserve.TunerList[%d].Desc = \"%s\";\r\n", i, types);
|
sendstr(fd, "Octoserve.TunerList[%d].Desc = \"%s\";\r\n", i, types);
|
||||||
} else {
|
} else {
|
||||||
sendstr(fd, "Octoserve.TunerList[%d] = false;\r\n", i);
|
sendstr(fd, "Octoserve.TunerList[%d] = false;\r\n", i);
|
||||||
@ -346,7 +330,7 @@ void send_json_serverinfo(struct os_ssdp *ss)
|
|||||||
types[pos] = '-';
|
types[pos] = '-';
|
||||||
}
|
}
|
||||||
sendstr(fd, ",\"Present\":true", i);
|
sendstr(fd, ",\"Present\":true", i);
|
||||||
sendstr(fd, ",\"Type\":%u", fe->type);
|
sendstr(fd, ",\"Type\":0");
|
||||||
sendstr(fd, ",\"Desc\":\"%s\"", types);
|
sendstr(fd, ",\"Desc\":\"%s\"", types);
|
||||||
} else {
|
} else {
|
||||||
sendstr(fd, "\"Present\":false", i);
|
sendstr(fd, "\"Present\":false", i);
|
||||||
@ -577,8 +561,7 @@ void handle_http(struct os_ssdp *ss)
|
|||||||
while (buf[j] && buf[j] != '\r' && buf[j] != ' ')
|
while (buf[j] && buf[j] != '\r' && buf[j] != ' ')
|
||||||
j++;
|
j++;
|
||||||
buf[j] = 0;
|
buf[j] = 0;
|
||||||
if (i == j ||
|
if (i == j) {
|
||||||
(NULL !=strstr(buf + i, ".."))) {
|
|
||||||
send_http_error(ss->csock, 404);
|
send_http_error(ss->csock, 404);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -55,7 +55,7 @@ void proc_igmp(struct octoserve *os, uint8_t *b, int l, uint8_t *macheader)
|
|||||||
//0x0000: 0100 5e07 0101 089e 01b2 03c9 0800 46c0
|
//0x0000: 0100 5e07 0101 089e 01b2 03c9 0800 46c0
|
||||||
//0x0010: 0020 0000 4000 0102 3159 c0a8 020e ef07
|
//0x0010: 0020 0000 4000 0102 3159 c0a8 020e ef07
|
||||||
//0x0020: 0101 9404 0000 1600 f9f6 ef07 0101
|
//0x0020: 0101 9404 0000 1600 f9f6 ef07 0101
|
||||||
//dump(b, l);
|
dump(b, l);
|
||||||
sprintf(sd, "%03d.%03d.%03d.%03d -> %03d.%03d.%03d.%03d",
|
sprintf(sd, "%03d.%03d.%03d.%03d -> %03d.%03d.%03d.%03d",
|
||||||
b[12], b[13], b[14], b[15],
|
b[12], b[13], b[14], b[15],
|
||||||
b[16], b[17], b[18], b[19]);
|
b[16], b[17], b[18], b[19]);
|
||||||
|
@ -44,14 +44,14 @@ void dump(const uint8_t *b, int l)
|
|||||||
for (j = 0; j < l; j += 16, b += 16) {
|
for (j = 0; j < l; j += 16, b += 16) {
|
||||||
for (i = 0; i < 16; i++)
|
for (i = 0; i < 16; i++)
|
||||||
if (i + j < l)
|
if (i + j < l)
|
||||||
fprintf(stderr, "%02x ", b[i]);
|
printf("%02x ", b[i]);
|
||||||
else
|
else
|
||||||
fprintf(stderr, " ");
|
printf(" ");
|
||||||
fprintf(stderr, " | ");
|
printf(" | ");
|
||||||
for (i = 0; i < 16; i++)
|
for (i = 0; i < 16; i++)
|
||||||
if (i + j < l)
|
if (i + j < l)
|
||||||
fputc((b[i] > 31 && b[i] < 127) ? b[i] : '.', stderr);
|
putchar((b[i] > 31 && b[i] < 127) ? b[i] : '.');
|
||||||
fprintf(stderr, "\n");
|
printf("\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -214,7 +214,7 @@ void send_error(struct oscon *con, int err)
|
|||||||
if (rerr->number == err)
|
if (rerr->number == err)
|
||||||
break;
|
break;
|
||||||
if (!rerr->number) {
|
if (!rerr->number) {
|
||||||
dbgprintf(DEBUG_NET, "Internal Error: invalid error number %d\n", err);
|
printf("Internal Error: invalid error number %d\n", err);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
len=sprintf(buf,
|
len=sprintf(buf,
|
||||||
@ -246,7 +246,7 @@ static struct dvbca *alloc_ca_num(struct osstrm *str, int num)
|
|||||||
pthread_mutex_lock(&os->lock);
|
pthread_mutex_lock(&os->lock);
|
||||||
ca = &os->dvbca[num];
|
ca = &os->dvbca[num];
|
||||||
if (ca->state == 0) {
|
if (ca->state == 0) {
|
||||||
dbgprintf(DEBUG_CI, "alloced ca %d\n", num);
|
printf("alloced ca %d\n", num);
|
||||||
pthread_mutex_lock(&ca->mutex);
|
pthread_mutex_lock(&ca->mutex);
|
||||||
memset(ca->pmt, 0, sizeof(ca->pmt));
|
memset(ca->pmt, 0, sizeof(ca->pmt));
|
||||||
ca->state = 1;
|
ca->state = 1;
|
||||||
@ -266,12 +266,12 @@ static struct dvbca *alloc_ca(struct osstrm *str)
|
|||||||
struct dvbca *ca;
|
struct dvbca *ca;
|
||||||
uint32_t i;
|
uint32_t i;
|
||||||
|
|
||||||
dbgprintf(DEBUG_CI, "alloc ca\n");
|
printf("alloc ca\n");
|
||||||
pthread_mutex_lock(&os->lock);
|
pthread_mutex_lock(&os->lock);
|
||||||
for (i = 0; i < os->dvbca_num; i++) {
|
for (i = 0; i < os->dvbca_num; i++) {
|
||||||
ca = &os->dvbca[i];
|
ca = &os->dvbca[i];
|
||||||
if (ca->state == 0) {
|
if (ca->state == 0) {
|
||||||
dbgprintf(DEBUG_CI, "alloced ca %d\n", i);
|
printf("alloced ca %d\n", i);
|
||||||
pthread_mutex_lock(&ca->mutex);
|
pthread_mutex_lock(&ca->mutex);
|
||||||
memset(ca->pmt, 0, sizeof(ca->pmt));
|
memset(ca->pmt, 0, sizeof(ca->pmt));
|
||||||
ca->state = 1;
|
ca->state = 1;
|
||||||
@ -524,22 +524,21 @@ static void check_mccs(struct ossess *sess)
|
|||||||
sess->mcc_tag++;
|
sess->mcc_tag++;
|
||||||
send_igmp_query(sess->os, sess->trans.mcip, 10);
|
send_igmp_query(sess->os, sess->trans.mcip, 10);
|
||||||
sess->mcc_time = t;
|
sess->mcc_time = t;
|
||||||
dbgprintf(DEBUG_IGMP, "%u: mcc_state 1 done, tag = %d\n", t, sess->mcc_tag);
|
printf("%u: mcc_state 1 done, tag = %d\n", t, sess->mcc_tag);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
if (tdiff >= 1) {
|
if (tdiff >= 1) {
|
||||||
sess->mcc_state = 3;
|
sess->mcc_state = 3;
|
||||||
send_igmp_query(sess->os, sess->trans.mcip, 10);
|
send_igmp_query(sess->os, sess->trans.mcip, 10);
|
||||||
dbgprintf(DEBUG_IGMP, "%u: mcc_state 2 done, tag = %d\n", t, sess->mcc_tag);
|
printf("%u: mcc_state 2 done, tag = %d\n", t, sess->mcc_tag);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
if (tdiff >= 2) {
|
if (tdiff >= 2) {
|
||||||
sess->mcc_state = 0;
|
sess->mcc_state = 0;
|
||||||
sess->mcc_time = t;
|
sess->mcc_time = t;
|
||||||
dbgprintf(DEBUG_IGMP,
|
printf("%u: mcc_state 3 done, tag = %d\n", t, sess->mcc_tag);
|
||||||
"%u: mcc_state 3 done, tag = %d\n", t, sess->mcc_tag);
|
|
||||||
update = 1;
|
update = 1;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -667,7 +666,7 @@ static struct oscon *alloc_con(struct octoserve *os)
|
|||||||
|
|
||||||
int die(char *msg)
|
int die(char *msg)
|
||||||
{
|
{
|
||||||
dbgprintf(DEBUG_SYS, "%s\n", msg);
|
printf("%s\n", msg);
|
||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -700,17 +699,16 @@ static void send_option(struct oscon *con)
|
|||||||
#define PAR2STR(par) ((p->set & (1UL << PARAM_##par)) ? par##2str[p->param[PARAM_POL]] : "")
|
#define PAR2STR(par) ((p->set & (1UL << PARAM_##par)) ? par##2str[p->param[PARAM_POL]] : "")
|
||||||
|
|
||||||
char *pol2str[] = {"", "v", "h", "r", "l", NULL};
|
char *pol2str[] = {"", "v", "h", "r", "l", NULL};
|
||||||
char *msys2str [] = {"", "undef", "dvbc", "j83b", "dvbt", "dss", "dvbs", "dvbs2", "dvbh",
|
char *msys2str [] = {"", "undef", "dvbc", "dvbcb", "dvbt", "dss", "dvbs", "dvbs2", "dvbh",
|
||||||
"isdbt", "isdbs", "isdbc", "atsc", "atscmh", "dtmb", "cmmb", "dab",
|
"isdbt", "isdbs", "isdbc", "atsc", "atscmh", "dtmb", "cmmb", "dab",
|
||||||
"dvbt2", "turbo", "dvbcc", "dvbc2", NULL};
|
"dvbt2", "turbo", "dvbcc", "dvbc2", NULL};
|
||||||
char *mtype2str [] = {"", "qpsk", "16qam", "32qam",
|
char *mtype2str [] = {"", "qpsk", "16qam", "32qam",
|
||||||
"64qam", "128qam", "256qam",
|
"64qam", "128qam", "256qam",
|
||||||
"autoqam", "8vsb", "16vsb", "8psk",
|
"autoqam", "8vsb", "16vsb", "8psk",
|
||||||
"16apsk", "32apsk", "dqpsk", "4qamnr",
|
"16apsk", "32apsk", "dqpsk", "4qamnr", NULL};
|
||||||
"64apsk", "128apsk", "256apsk", NULL};
|
|
||||||
char *pilot2str [] = {"", "on", "off", "auto", NULL};
|
char *pilot2str [] = {"", "on", "off", "auto", NULL};
|
||||||
char *roll2str [] = {"", "0.35", "0.20", "0.25", NULL};
|
char *roll2str [] = {"", "0.35", "0.20", "0.25", NULL};
|
||||||
char *fec2str [] = {"", "none", "12", "23", "34", "45", "56", "67", "78", "89", "auto", "35", "910", "25", "14", "13", NULL};
|
char *fec2str [] = {"", "none", "12", "23", "34", "56", "78", "89", "35", "45", "910", "25", NULL};
|
||||||
char *bw2str [] = {"", "8", "7", "6", "auto", "5", "10", "1.712", NULL };
|
char *bw2str [] = {"", "8", "7", "6", "auto", "5", "10", "1.712", NULL };
|
||||||
char *tmode2str [] = { "", "2k", "8k", "auto", "4k", "1k", "16k", "32k", "c1", "c3780", NULL};
|
char *tmode2str [] = { "", "2k", "8k", "auto", "4k", "1k", "16k", "32k", "c1", "c3780", NULL};
|
||||||
char *gi2str [] = { "", "132", "116", "18", "14", "auto", "1128", "19128", "19256", "pn420", "pn595", "pn945", NULL};
|
char *gi2str [] = { "", "132", "116", "18", "14", "auto", "1128", "19128", "19256", "pn420", "pn595", "pn945", NULL};
|
||||||
@ -1115,13 +1113,12 @@ static int parse_url(struct oscon *con, int streamonly)
|
|||||||
dbgprintf(DEBUG_SYS, "t2id=%d, ", p->param[PARAM_T2ID]);
|
dbgprintf(DEBUG_SYS, "t2id=%d, ", p->param[PARAM_T2ID]);
|
||||||
} else if (!strncasecmp(url, "x_isi=", 6)) {
|
} else if (!strncasecmp(url, "x_isi=", 6)) {
|
||||||
url += 6;
|
url += 6;
|
||||||
p->param[PARAM_ISI] = strtoul(url, &end, 0);
|
p->param[PARAM_ISI] = strtoul(url, &end, 10);
|
||||||
if (end == url)
|
if (end == url)
|
||||||
break;
|
break;
|
||||||
p->set |= (1UL << PARAM_ISI);
|
p->set |= (1UL << PARAM_ISI);
|
||||||
dbgprintf(DEBUG_SYS, "x_isi=%d, ", p->param[PARAM_ISI]);
|
dbgprintf(DEBUG_SYS, "x_isi=%d, ", p->param[PARAM_ISI]);
|
||||||
} else if (!strncasecmp(url, "x_pls=", 6) ||
|
} else if (!strncasecmp(url, "x_pls=", 6)) {
|
||||||
!strncasecmp(url, "x_ssi=", 6)) {
|
|
||||||
url += 6;
|
url += 6;
|
||||||
p->param[PARAM_PLS] = strtoul(url, &end, 0);
|
p->param[PARAM_PLS] = strtoul(url, &end, 0);
|
||||||
if (end == url)
|
if (end == url)
|
||||||
@ -1390,9 +1387,7 @@ static int setup_nsp(struct ostrans *trans, struct dvb_ns_params *nsp)
|
|||||||
memset(nsp, 0, sizeof(struct dvb_ns_params));
|
memset(nsp, 0, sizeof(struct dvb_ns_params));
|
||||||
memcpy(nsp->dmac, trans->cmac, 6);
|
memcpy(nsp->dmac, trans->cmac, 6);
|
||||||
memcpy(nsp->smac, trans->smac, 6);
|
memcpy(nsp->smac, trans->smac, 6);
|
||||||
#ifndef MAC_ODD
|
|
||||||
nsp->smac[5] |= 1;
|
nsp->smac[5] |= 1;
|
||||||
#endif
|
|
||||||
nsp->sport = trans->sport;
|
nsp->sport = trans->sport;
|
||||||
nsp->sport2 = trans->sport2;
|
nsp->sport2 = trans->sport2;
|
||||||
nsp->dport = trans->cport;
|
nsp->dport = trans->cport;
|
||||||
@ -1627,7 +1622,7 @@ static int stop_session(struct ossess *sess)
|
|||||||
return 0;
|
return 0;
|
||||||
sess->playing &= ~1;
|
sess->playing &= ~1;
|
||||||
if (!session_is_playing(sess)) {
|
if (!session_is_playing(sess)) {
|
||||||
dbgprintf(DEBUG_RTSP, "stopping session %d\n", sess->nr);
|
printf("stopping session %d\n", sess->nr);
|
||||||
if (sess->nsfd >= 0)
|
if (sess->nsfd >= 0)
|
||||||
ioctl(sess->nsfd, NS_STOP);
|
ioctl(sess->nsfd, NS_STOP);
|
||||||
}
|
}
|
||||||
@ -1638,7 +1633,7 @@ static int stop_session(struct ossess *sess)
|
|||||||
static int start_session(struct ossess *sess)
|
static int start_session(struct ossess *sess)
|
||||||
{
|
{
|
||||||
if (!session_is_playing(sess)) {
|
if (!session_is_playing(sess)) {
|
||||||
dbgprintf(DEBUG_RTSP, "start session %d\n", sess->nr);
|
dbgprintf(DEBUG_SYS, "start session %d\n", sess->nr);
|
||||||
if (sess->stream->ca) {
|
if (sess->stream->ca) {
|
||||||
uint8_t canum = sess->stream->ca->nr - 1;
|
uint8_t canum = sess->stream->ca->nr - 1;
|
||||||
if (sess->nsfd >= 0)
|
if (sess->nsfd >= 0)
|
||||||
@ -1718,10 +1713,10 @@ void mc_check(struct ossess *sess, int update)
|
|||||||
next = mcc->mcc.le_next;
|
next = mcc->mcc.le_next;
|
||||||
if (((sess->mcc_state == 0) && (sess->mcc_tag != mcc->tag)) ||
|
if (((sess->mcc_state == 0) && (sess->mcc_tag != mcc->tag)) ||
|
||||||
(((os->igmp_mode & 1) == 0) && (os->igmp_tag - mcc->gtag) > 1)) {
|
(((os->igmp_mode & 1) == 0) && (os->igmp_tag - mcc->gtag) > 1)) {
|
||||||
dbgprintf(DEBUG_IGMP, "removed client at %u.%u.%u.%u\n",
|
printf("removed client at %u.%u.%u.%u\n",
|
||||||
mcc->ip[0], mcc->ip[1], mcc->ip[2], mcc->ip[3]);
|
mcc->ip[0], mcc->ip[1], mcc->ip[2], mcc->ip[3]);
|
||||||
dbgprintf(DEBUG_IGMP, "mcc_tags: %d %d\n", sess->mcc_tag, mcc->tag);
|
printf("mcc_tags: %d %d\n", sess->mcc_tag, mcc->tag);
|
||||||
dbgprintf(DEBUG_IGMP, "gtags: %d %d\n", os->igmp_tag, mcc->gtag);
|
printf("gtags: %d %d\n", os->igmp_tag, mcc->gtag);
|
||||||
LIST_REMOVE(mcc, mcc);
|
LIST_REMOVE(mcc, mcc);
|
||||||
free(mcc);
|
free(mcc);
|
||||||
}
|
}
|
||||||
@ -1773,19 +1768,18 @@ void mc_join(struct octoserve *os, uint8_t *ip, uint8_t *mac, uint8_t *group)
|
|||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
session_mc_timeout(sess);
|
session_mc_timeout(sess);
|
||||||
dbgprintf(DEBUG_IGMP, "matched session %d to join %u.%u.%u.%u\n",
|
printf("matched session %d to join %u.%u.%u.%u\n",
|
||||||
sess->nr, ip[0], ip[1], ip[2], ip[3]);
|
sess->nr, ip[0], ip[1], ip[2], ip[3]);
|
||||||
for (mcc = sess->mccs.lh_first; mcc; mcc = mcc->mcc.le_next)
|
for (mcc = sess->mccs.lh_first; mcc; mcc = mcc->mcc.le_next)
|
||||||
if (!memcmp(ip, mcc->ip, 4)) {
|
if (!memcmp(ip, mcc->ip, 4)) {
|
||||||
mcc->tag = sess->mcc_tag;
|
mcc->tag = sess->mcc_tag;
|
||||||
mcc->gtag = os->igmp_tag;
|
mcc->gtag = os->igmp_tag;
|
||||||
dbgprintf(DEBUG_IGMP,
|
printf("already in list, tag = %08x, gtag = %08x\n", mcc->tag, mcc->gtag);
|
||||||
"already in list, tag = %08x, gtag = %08x\n", mcc->tag, mcc->gtag);
|
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
newmcc = malloc(sizeof(struct osmcc));
|
newmcc = malloc(sizeof(struct osmcc));
|
||||||
if (!newmcc) {
|
if (!newmcc) {
|
||||||
dbgprintf(DEBUG_IGMP, "Could not allocate new multicast client entry\n");
|
printf("Could not allocate new multicast client entry\n");
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
memset(newmcc, 0, sizeof(struct osmcc));
|
memset(newmcc, 0, sizeof(struct osmcc));
|
||||||
@ -1801,7 +1795,7 @@ void mc_join(struct octoserve *os, uint8_t *ip, uint8_t *mac, uint8_t *group)
|
|||||||
port = switch_get_port(newmcc->mac);
|
port = switch_get_port(newmcc->mac);
|
||||||
else
|
else
|
||||||
port = 0;
|
port = 0;
|
||||||
dbgprintf(DEBUG_IGMP, "New client at port %02x\n", port);
|
printf("New client at port %02x\n", port);
|
||||||
if (port >= 0) {
|
if (port >= 0) {
|
||||||
newmcc->port_vec = port;
|
newmcc->port_vec = port;
|
||||||
sess->mcc_port_vec |= port;
|
sess->mcc_port_vec |= port;
|
||||||
@ -1831,10 +1825,10 @@ void mc_leave(struct octoserve *os, uint8_t *ip, uint8_t *group)
|
|||||||
if ((sess = match_session(os, group)) == NULL)
|
if ((sess = match_session(os, group)) == NULL)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
dbgprintf(DEBUG_IGMP, "matched session %d to leave %u.%u.%u.%u\n",
|
printf("matched session %d to leave %u.%u.%u.%u\n",
|
||||||
sess->nr, ip[0], ip[1], ip[2], ip[3]);
|
sess->nr, ip[0], ip[1], ip[2], ip[3]);
|
||||||
mc_query(sess);
|
mc_query(sess);
|
||||||
|
|
||||||
for (mcc = sess->mccs.lh_first; mcc; mcc = next) {
|
for (mcc = sess->mccs.lh_first; mcc; mcc = next) {
|
||||||
next = mcc->mcc.le_next;
|
next = mcc->mcc.le_next;
|
||||||
if (!memcmp(ip, mcc->ip, 4)) {
|
if (!memcmp(ip, mcc->ip, 4)) {
|
||||||
@ -1893,7 +1887,7 @@ static int parse_transport(struct oscon *con, char *line)
|
|||||||
for (arg = line; *arg == ' '; arg++);
|
for (arg = line; *arg == ' '; arg++);
|
||||||
|
|
||||||
do {
|
do {
|
||||||
dbgprintf(DEBUG_RTSP, "arg:%s\n", arg);
|
printf("arg:%s\n", arg);
|
||||||
if (!strncasecmp(arg, "RTP/AVP/UDP", 11)) {
|
if (!strncasecmp(arg, "RTP/AVP/UDP", 11)) {
|
||||||
t->rtp = 1;
|
t->rtp = 1;
|
||||||
end = arg + 11;
|
end = arg + 11;
|
||||||
@ -1988,7 +1982,7 @@ static int parse_x_octonet(struct oscon *con, char *line)
|
|||||||
if (port < 7)
|
if (port < 7)
|
||||||
con->x_ports |= 1 << (port - 1);
|
con->x_ports |= 1 << (port - 1);
|
||||||
} while (*(arg++) == ',');
|
} while (*(arg++) == ',');
|
||||||
dbgprintf(DEBUG_SWITCH, "x_ports = %02x\n", con->x_ports);
|
printf("x_ports = %02x\n", con->x_ports);
|
||||||
} else
|
} else
|
||||||
return -1;
|
return -1;
|
||||||
arg = end;
|
arg = end;
|
||||||
@ -2235,7 +2229,7 @@ static int proc_line(struct oscon *con)
|
|||||||
}
|
}
|
||||||
if (con->x_octonet_parsed) {
|
if (con->x_octonet_parsed) {
|
||||||
con->session->port_vec = con->x_ports;
|
con->session->port_vec = con->x_ports;
|
||||||
dbgprintf(DEBUG_SWITCH, "port_vec = %02x\n", con->session->port_vec);
|
printf("port_vec = %02x\n", con->session->port_vec);
|
||||||
}
|
}
|
||||||
res = play_session(con);
|
res = play_session(con);
|
||||||
if (res < 0)
|
if (res < 0)
|
||||||
@ -2549,7 +2543,7 @@ static int alloc_igmp_raw_socket(struct octoserve *os)
|
|||||||
|
|
||||||
n = setsockopt(s, SOL_SOCKET, SO_ATTACH_FILTER, &sfprog, sizeof(sfprog));
|
n = setsockopt(s, SOL_SOCKET, SO_ATTACH_FILTER, &sfprog, sizeof(sfprog));
|
||||||
if (n < 0) {
|
if (n < 0) {
|
||||||
dbgprintf(DEBUG_NET, "could not set filter\n");
|
printf("could not set filter\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
@ -2655,7 +2649,7 @@ static void os_serve(struct octoserve *os)
|
|||||||
}
|
}
|
||||||
if (FD_ISSET(os->mld_sock, &fds)) {
|
if (FD_ISSET(os->mld_sock, &fds)) {
|
||||||
n = recvfrom(os->mld_sock, buf, sizeof(buf), 0, &cadr, &clen);
|
n = recvfrom(os->mld_sock, buf, sizeof(buf), 0, &cadr, &clen);
|
||||||
//printf("n = %d\n", n);
|
printf("n = %d\n", n);
|
||||||
if (n > 0)
|
if (n > 0)
|
||||||
;//dump(buf, n);
|
;//dump(buf, n);
|
||||||
}
|
}
|
||||||
@ -2697,6 +2691,91 @@ static void os_serve(struct octoserve *os)
|
|||||||
killall_sessions(os);
|
killall_sessions(os);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static struct octoserve *os_init(char *ifname, int nossdp, int nodms, int nodvbt, int msmode)
|
||||||
|
{
|
||||||
|
struct octoserve *os;
|
||||||
|
struct os_ssdp *ss;
|
||||||
|
struct ifreq ifr;
|
||||||
|
int s;
|
||||||
|
pthread_mutexattr_t mta;
|
||||||
|
|
||||||
|
os = malloc(sizeof(*os));
|
||||||
|
if (!os)
|
||||||
|
return NULL;
|
||||||
|
dbgprintf(DEBUG_SYS, "allocated octoserve struct, %d bytes\n", sizeof(*os));
|
||||||
|
memset(os, 0, sizeof(struct octoserve));
|
||||||
|
|
||||||
|
pthread_mutexattr_init(&mta);
|
||||||
|
pthread_mutexattr_settype(&mta, PTHREAD_MUTEX_RECURSIVE);
|
||||||
|
pthread_mutex_init(&os->lock, &mta);
|
||||||
|
|
||||||
|
os->ifname = ifname;
|
||||||
|
os->sessionid = random();
|
||||||
|
|
||||||
|
if (get_ifa(ifname, AF_INET, (struct sockaddr *) &os->ssdp.sadr) < 0) {
|
||||||
|
perror("no such interface:");
|
||||||
|
free(os);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
get_ifa(ifname, AF_INET6, (struct sockaddr *) &os->ssdp.sadr6);
|
||||||
|
sockname((struct sockaddr *) &os->ssdp.sadr, os->ssdp.ip);
|
||||||
|
sockname((struct sockaddr *) &os->ssdp.sadr6, os->ssdp.ip6);
|
||||||
|
|
||||||
|
strcpy(ifr.ifr_name, os->ifname);
|
||||||
|
s = socket(AF_INET, SOCK_DGRAM, 0);
|
||||||
|
ioctl(s, SIOCGIFHWADDR, &ifr);
|
||||||
|
close(s);
|
||||||
|
memcpy(os->mac, ifr.ifr_hwaddr.sa_data, 6);
|
||||||
|
dbgprintf(DEBUG_NET, "MAC %s=%02x:%02x:%02x:%02x:%02x:%02x\n",
|
||||||
|
os->ifname,
|
||||||
|
os->mac[0], os->mac[1], os->mac[2],
|
||||||
|
os->mac[3], os->mac[4], os->mac[5]);
|
||||||
|
if (os->has_switch)
|
||||||
|
switch_get_port(os->mac);
|
||||||
|
|
||||||
|
init_dvb(os, nodvbt, msmode);
|
||||||
|
|
||||||
|
ss = &os->ssdp;
|
||||||
|
if (init_ssdp(os, &os->ssdp, debug, nossdp, nodms) < 0) {
|
||||||
|
release_dvb(os);
|
||||||
|
free(os);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
#if 0
|
||||||
|
if (init_httpos, debug) < 0) {
|
||||||
|
release_dvb(os);
|
||||||
|
free(os);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
return os;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct octoserve *os;
|
||||||
|
|
||||||
|
void term_action(int sig)
|
||||||
|
{
|
||||||
|
printf("EXIT\n");
|
||||||
|
os->exit = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int set_termaction(void)
|
||||||
|
{
|
||||||
|
struct sigaction term;
|
||||||
|
|
||||||
|
memset(&term, 0, sizeof(term));
|
||||||
|
term.sa_handler = term_action;
|
||||||
|
sigemptyset(&term.sa_mask);
|
||||||
|
term.sa_flags = 0;
|
||||||
|
sigaction(SIGINT, &term, NULL);
|
||||||
|
|
||||||
|
memset(&term, 0, sizeof(term));
|
||||||
|
term.sa_handler = term_action;
|
||||||
|
sigemptyset(&term.sa_mask);
|
||||||
|
term.sa_flags = 0;
|
||||||
|
sigaction(SIGTERM, &term, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
static int fexists(char *fn)
|
static int fexists(char *fn)
|
||||||
{
|
{
|
||||||
struct stat b;
|
struct stat b;
|
||||||
@ -2704,49 +2783,6 @@ static int fexists(char *fn)
|
|||||||
return (!stat(fn, &b));
|
return (!stat(fn, &b));
|
||||||
}
|
}
|
||||||
|
|
||||||
static int read_num(char *fn, int *num)
|
|
||||||
{
|
|
||||||
FILE *f;
|
|
||||||
|
|
||||||
f = fopen(fn, "r");
|
|
||||||
if (!f)
|
|
||||||
return -1;
|
|
||||||
fscanf(f, "%i", num);
|
|
||||||
fclose(f);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void read_first_ds(struct octoserve *os)
|
|
||||||
{
|
|
||||||
int num;
|
|
||||||
int res = read_num("/config/first_ds", &num);
|
|
||||||
|
|
||||||
if (res < 0)
|
|
||||||
os->first_ds = 0;
|
|
||||||
else
|
|
||||||
os->first_ds = num;
|
|
||||||
|
|
||||||
dbgprintf(DEBUG_SYS, "first_ds = %u\n", os->first_ds);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void read_delsys_mask(struct octoserve *os)
|
|
||||||
{
|
|
||||||
int fd, len;
|
|
||||||
char mask[80];
|
|
||||||
|
|
||||||
os->delsys_mask = 0;
|
|
||||||
fd = open("/config/delsys_mask", O_RDONLY);
|
|
||||||
if (fd < 0)
|
|
||||||
return;
|
|
||||||
len = read(fd, mask, 79);
|
|
||||||
if (len < 0)
|
|
||||||
return;
|
|
||||||
close (fd);
|
|
||||||
if (len)
|
|
||||||
os->delsys_mask = strtol(mask, NULL, 0);
|
|
||||||
dbgprintf(DEBUG_SYS, "delsys_mask = %08x\n", os->delsys_mask);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int read_msmode(char *fn)
|
static int read_msmode(char *fn)
|
||||||
{
|
{
|
||||||
int fd, len;
|
int fd, len;
|
||||||
@ -2772,108 +2808,17 @@ static int read_msmode(char *fn)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct octoserve *os_init(char *ifname, int nossdp, int nodms)
|
|
||||||
{
|
|
||||||
struct octoserve *os;
|
|
||||||
struct os_ssdp *ss;
|
|
||||||
struct ifreq ifr;
|
|
||||||
int s;
|
|
||||||
pthread_mutexattr_t mta;
|
|
||||||
|
|
||||||
os = malloc(sizeof(*os));
|
|
||||||
if (!os)
|
|
||||||
return NULL;
|
|
||||||
dbgprintf(DEBUG_SYS, "allocated octoserve struct, %d bytes\n", sizeof(*os));
|
|
||||||
memset(os, 0, sizeof(struct octoserve));
|
|
||||||
|
|
||||||
if (fexists("/config/nodvbt.enabled"))
|
|
||||||
os->nodvbt = 1;
|
|
||||||
os->msmode = read_msmode("/config/msmode");
|
|
||||||
read_first_ds(os);
|
|
||||||
read_delsys_mask(os);
|
|
||||||
pthread_mutexattr_init(&mta);
|
|
||||||
pthread_mutexattr_settype(&mta, PTHREAD_MUTEX_RECURSIVE);
|
|
||||||
pthread_mutex_init(&os->lock, &mta);
|
|
||||||
|
|
||||||
os->ifname = ifname;
|
|
||||||
os->sessionid = random();
|
|
||||||
if (get_ifa(ifname, AF_INET, (struct sockaddr *) &os->ssdp.sadr) < 0) {
|
|
||||||
perror("no such interface:");
|
|
||||||
free(os);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
get_ifa(ifname, AF_INET6, (struct sockaddr *) &os->ssdp.sadr6);
|
|
||||||
sockname((struct sockaddr *) &os->ssdp.sadr, os->ssdp.ip);
|
|
||||||
sockname((struct sockaddr *) &os->ssdp.sadr6, os->ssdp.ip6);
|
|
||||||
|
|
||||||
strcpy(ifr.ifr_name, os->ifname);
|
|
||||||
s = socket(AF_INET, SOCK_DGRAM, 0);
|
|
||||||
ioctl(s, SIOCGIFHWADDR, &ifr);
|
|
||||||
close(s);
|
|
||||||
memcpy(os->mac, ifr.ifr_hwaddr.sa_data, 6);
|
|
||||||
dbgprintf(DEBUG_NET, "MAC %s=%02x:%02x:%02x:%02x:%02x:%02x\n",
|
|
||||||
os->ifname,
|
|
||||||
os->mac[0], os->mac[1], os->mac[2],
|
|
||||||
os->mac[3], os->mac[4], os->mac[5]);
|
|
||||||
if (os->has_switch)
|
|
||||||
switch_get_port(os->mac);
|
|
||||||
|
|
||||||
switch_set_entry(os->mac, 0x20, 0x08);
|
|
||||||
init_dvb(os);
|
|
||||||
|
|
||||||
ss = &os->ssdp;
|
|
||||||
if (init_ssdp(os, &os->ssdp, debug, nossdp, nodms) < 0) {
|
|
||||||
release_dvb(os);
|
|
||||||
free(os);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
#if 0
|
|
||||||
if (init_httpos, debug) < 0) {
|
|
||||||
release_dvb(os);
|
|
||||||
free(os);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
return os;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct octoserve *os;
|
|
||||||
|
|
||||||
void term_action(int sig)
|
|
||||||
{
|
|
||||||
dbgprintf(DEBUG_SYS, "EXIT\n");
|
|
||||||
os->exit = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int set_termaction(void)
|
|
||||||
{
|
|
||||||
struct sigaction term;
|
|
||||||
|
|
||||||
memset(&term, 0, sizeof(term));
|
|
||||||
term.sa_handler = term_action;
|
|
||||||
sigemptyset(&term.sa_mask);
|
|
||||||
term.sa_flags = 0;
|
|
||||||
sigaction(SIGINT, &term, NULL);
|
|
||||||
|
|
||||||
memset(&term, 0, sizeof(term));
|
|
||||||
term.sa_handler = term_action;
|
|
||||||
sigemptyset(&term.sa_mask);
|
|
||||||
term.sa_flags = 0;
|
|
||||||
sigaction(SIGTERM, &term, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void awrite(char *fn, char *txt)
|
static void awrite(char *fn, char *txt)
|
||||||
{
|
{
|
||||||
FILE *f = fopen(fn, "w");
|
FILE *f = fopen(fn, "w");
|
||||||
|
|
||||||
if (f)
|
if (f)
|
||||||
fprintf(f, "%s", txt);
|
fprintf(f, "%s", txt);
|
||||||
fclose(f);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
int nodms = 0, nossdp = 0, vlan = 0;
|
int nodms = 0, nossdp = 0, nodvbt = 0, vlan = 0, msmode = 1;
|
||||||
|
|
||||||
printf("Octoserve " OCTOSERVE_VERSION
|
printf("Octoserve " OCTOSERVE_VERSION
|
||||||
", Copyright (C) 2012-15 Digital Devices GmbH\n");
|
", Copyright (C) 2012-15 Digital Devices GmbH\n");
|
||||||
@ -2887,12 +2832,13 @@ int main(int argc, char **argv)
|
|||||||
{"flags", required_argument, 0, 'f'},
|
{"flags", required_argument, 0, 'f'},
|
||||||
{"nossdp", no_argument, 0, 'n'},
|
{"nossdp", no_argument, 0, 'n'},
|
||||||
{"nodms", no_argument, 0, 'm'},
|
{"nodms", no_argument, 0, 'm'},
|
||||||
|
{"nodvbt", no_argument, 0, 't'},
|
||||||
{"conform", no_argument, 0, 'c'},
|
{"conform", no_argument, 0, 'c'},
|
||||||
{"help", no_argument , 0, 'h'},
|
{"help", no_argument , 0, 'h'},
|
||||||
{0, 0, 0, 0}
|
{0, 0, 0, 0}
|
||||||
};
|
};
|
||||||
c = getopt_long(argc, argv,
|
c = getopt_long(argc, argv,
|
||||||
"d:f:nmch",
|
"d:f:nmtsch",
|
||||||
long_options, &option_index);
|
long_options, &option_index);
|
||||||
if (c==-1)
|
if (c==-1)
|
||||||
break;
|
break;
|
||||||
@ -2910,6 +2856,9 @@ int main(int argc, char **argv)
|
|||||||
case 'm':
|
case 'm':
|
||||||
nodms = 1;
|
nodms = 1;
|
||||||
break;
|
break;
|
||||||
|
case 't':
|
||||||
|
nodvbt = 1;
|
||||||
|
break;
|
||||||
case 'c':
|
case 'c':
|
||||||
conform = 1;
|
conform = 1;
|
||||||
break;
|
break;
|
||||||
@ -2920,27 +2869,30 @@ int main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (optind < argc) {
|
if (optind < argc) {
|
||||||
dbgprintf(DEBUG_SYS, "Warning: unused arguments\n");
|
printf("Warning: unused arguments\n");
|
||||||
}
|
}
|
||||||
if (fexists("/config/nodms.enabled"))
|
if (fexists("/config/nodms.enabled"))
|
||||||
nodms = 1;
|
nodms = 1;
|
||||||
|
msmode = read_msmode("/config/msmode");
|
||||||
|
if (fexists("/config/nodvbt.enabled"))
|
||||||
|
nodvbt = 1;
|
||||||
if (fexists("/config/vlan.enabled")) {
|
if (fexists("/config/vlan.enabled")) {
|
||||||
awrite("/sys/class/ddbridge/ddbridge0/vlan", "1");
|
awrite("/sys/class/ddbridge/ddbridge0/vlan", "1");
|
||||||
vlan = 1;
|
vlan = 1;
|
||||||
} else
|
} else
|
||||||
awrite("/sys/class/ddbridge/ddbridge0/vlan", "0");
|
awrite("/sys/class/ddbridge/ddbridge0/vlan", "0");
|
||||||
dbgprintf(DEBUG_SYS, "nodms = %d, vlan = %d\n", nodms, vlan);
|
printf("nodms = %d, nodvbt = %d, vlan = %d\n", nodms, nodvbt, vlan);
|
||||||
|
|
||||||
os = os_init("eth0", nossdp, nodms);
|
os = os_init("eth0", nossdp, nodms, nodvbt, msmode);
|
||||||
if (!os)
|
if (!os)
|
||||||
return -1;
|
return -1;
|
||||||
set_termaction();
|
set_termaction();
|
||||||
|
|
||||||
os->has_switch = switch_test();
|
os->has_switch = switch_test();
|
||||||
if (os->has_switch)
|
if (os->has_switch)
|
||||||
dbgprintf(DEBUG_SYS, "Switch detected\n");
|
printf("Switch detected\n");
|
||||||
else
|
else
|
||||||
dbgprintf(DEBUG_SYS, "No switch detected\n");
|
printf("No switch detected\n");
|
||||||
|
|
||||||
os_serve(os);
|
os_serve(os);
|
||||||
if (!nossdp)
|
if (!nossdp)
|
||||||
|
@ -73,7 +73,6 @@
|
|||||||
#define DEBUG_DVB 16
|
#define DEBUG_DVB 16
|
||||||
#define DEBUG_IGMP 32
|
#define DEBUG_IGMP 32
|
||||||
#define DEBUG_SWITCH 64
|
#define DEBUG_SWITCH 64
|
||||||
#define DEBUG_CI 128
|
|
||||||
#define DEBUG_DEBUG 256
|
#define DEBUG_DEBUG 256
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
@ -183,7 +182,6 @@ struct dvbfe {
|
|||||||
int fd;
|
int fd;
|
||||||
int dmx;
|
int dmx;
|
||||||
uint32_t type;
|
uint32_t type;
|
||||||
uint32_t type_orig;
|
|
||||||
int anum;
|
int anum;
|
||||||
int fnum;
|
int fnum;
|
||||||
int state;
|
int state;
|
||||||
@ -503,10 +501,6 @@ struct octoserve {
|
|||||||
int mld_sock;
|
int mld_sock;
|
||||||
int has_switch;
|
int has_switch;
|
||||||
int strict;
|
int strict;
|
||||||
uint32_t delsys_mask;
|
|
||||||
int msmode;
|
|
||||||
int nodvbt;
|
|
||||||
uint32_t first_ds;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
int streamsock(const char *port, int family, struct sockaddr *sadr);
|
int streamsock(const char *port, int family, struct sockaddr *sadr);
|
||||||
@ -514,7 +508,7 @@ void sockname(struct sockaddr *sadr, char *name);
|
|||||||
int get_ifa(const char *ifname, int iffam, struct sockaddr *sadr);
|
int get_ifa(const char *ifname, int iffam, struct sockaddr *sadr);
|
||||||
int init_ssdp(struct octoserve *os, struct os_ssdp *ss, uint32_t d, int nossdp, int nodms);
|
int init_ssdp(struct octoserve *os, struct os_ssdp *ss, uint32_t d, int nossdp, int nodms);
|
||||||
int dvb_tune(struct dvbfe *fe, struct dvb_params *p);
|
int dvb_tune(struct dvbfe *fe, struct dvb_params *p);
|
||||||
int init_dvb(struct octoserve *os);
|
int init_dvb(struct octoserve *os, int nodvbt, int noswitch);
|
||||||
int release_dvb(struct octoserve *os);
|
int release_dvb(struct octoserve *os);
|
||||||
void parse_config(struct octoserve *os, char *sec,
|
void parse_config(struct octoserve *os, char *sec,
|
||||||
void (*cb)(struct octoserve *, char *, char *));
|
void (*cb)(struct octoserve *, char *, char *));
|
||||||
|
@ -105,27 +105,6 @@ int mdio_close(int fd)
|
|||||||
close(fd);
|
close(fd);
|
||||||
}
|
}
|
||||||
|
|
||||||
int switch_set_entry(uint8_t mac[6], uint8_t vec, uint8_t type)
|
|
||||||
{
|
|
||||||
int fd = mdio_open();
|
|
||||||
|
|
||||||
dbgprintf(DEBUG_SWITCH, "switch_set_entry %02x:%02x:%02x:%02x:%02x:%02x = %02x %02x\n",
|
|
||||||
mac[0], mac[1], mac[2], mac[3], mac[4], mac[5], vec, type);
|
|
||||||
if (fd < 0)
|
|
||||||
return -1;
|
|
||||||
if (vec)
|
|
||||||
mdio_writereg(fd, 0x1b, 0x0c, (vec << 4) | type);
|
|
||||||
else
|
|
||||||
mdio_writereg(fd, 0x1b, 0x0c, 0);
|
|
||||||
mdio_writereg(fd, 0x1b, 0x0d, ((uint16_t) mac[0] << 8) | mac[1]);
|
|
||||||
mdio_writereg(fd, 0x1b, 0x0e, ((uint16_t) mac[2] << 8) | mac[3]);
|
|
||||||
mdio_writereg(fd, 0x1b, 0x0f, ((uint16_t) mac[4] << 8) | mac[5]);
|
|
||||||
mdio_writereg(fd, 0x1b, 0x0b, 0xb000);
|
|
||||||
mdio_wait_switch(fd, 0x1b, 0x0b);
|
|
||||||
mdio_close(fd);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int switch_get_port(uint8_t mac[6])
|
int switch_get_port(uint8_t mac[6])
|
||||||
{
|
{
|
||||||
int fd = mdio_open();
|
int fd = mdio_open();
|
||||||
@ -170,7 +149,6 @@ int switch_get_port(uint8_t mac[6])
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int switch_set_multicast(uint8_t mac[6], uint8_t vec)
|
int switch_set_multicast(uint8_t mac[6], uint8_t vec)
|
||||||
{
|
{
|
||||||
int fd = mdio_open();
|
int fd = mdio_open();
|
||||||
|
File diff suppressed because one or more lines are too long
@ -97,10 +97,6 @@ else
|
|||||||
Params = Params .. " --msys="..v
|
Params = Params .. " --msys="..v
|
||||||
elseif p == "sr" then
|
elseif p == "sr" then
|
||||||
Params = Params .. " --sr="..v
|
Params = Params .. " --sr="..v
|
||||||
elseif p == "bw" then
|
|
||||||
Params = Params .. " --bw="..v
|
|
||||||
elseif p == "plp" then
|
|
||||||
Params = Params .. " --plp="..v
|
|
||||||
elseif p == "mtype" then
|
elseif p == "mtype" then
|
||||||
Params = Params .. " --mtype="..v
|
Params = Params .. " --mtype="..v
|
||||||
end
|
end
|
||||||
|
@ -189,10 +189,6 @@ if tl.SourceList then
|
|||||||
Params = Params .. " --msys="..v
|
Params = Params .. " --msys="..v
|
||||||
elseif p == "sr" then
|
elseif p == "sr" then
|
||||||
Params = Params .. " --sr="..v
|
Params = Params .. " --sr="..v
|
||||||
elseif p == "bw" then
|
|
||||||
Params = Params .. " --bw="..v
|
|
||||||
elseif p == "plp" then
|
|
||||||
Params = Params .. " --plp="..v
|
|
||||||
elseif p == "mtype" then
|
elseif p == "mtype" then
|
||||||
Params = Params .. " --mtype="..v
|
Params = Params .. " --mtype="..v
|
||||||
end
|
end
|
||||||
|
87
octoserve/var/monitor/fancontrol.lua
Normal file → Executable file
87
octoserve/var/monitor/fancontrol.lua
Normal file → Executable file
@ -9,34 +9,12 @@ local LogFile = "/tmp/Temperatur.log"
|
|||||||
local HighTemp = 50
|
local HighTemp = 50
|
||||||
local LowTemp = 45
|
local LowTemp = 45
|
||||||
|
|
||||||
function ReadAttribute(attribute)
|
|
||||||
local value = 0
|
|
||||||
local ddbridge = io.open(devicepath.."/"..attribute,"r");
|
|
||||||
if ddbridge then
|
|
||||||
value = ddbridge:read("*l")
|
|
||||||
ddbridge:close()
|
|
||||||
end
|
|
||||||
return value
|
|
||||||
end
|
|
||||||
|
|
||||||
function ReadTemp(sensor)
|
function ReadTemp(sensor)
|
||||||
local temp = 0
|
local temp = 0
|
||||||
local file;
|
local file = io.open(devicepath.."/temp"..sensor)
|
||||||
|
|
||||||
if sensor > 3 then
|
|
||||||
sensor = sensor - 4
|
|
||||||
if sensor == 0 then
|
|
||||||
file = io.open(devicepath.."/temp")
|
|
||||||
else
|
|
||||||
file = io.open(devicepath.."/templ"..sensor)
|
|
||||||
end
|
|
||||||
else
|
|
||||||
file = io.open(devicepath.."/temp"..sensor)
|
|
||||||
end
|
|
||||||
|
|
||||||
if file then
|
if file then
|
||||||
temp = file:read()
|
temp = file:read()
|
||||||
if temp == "no sensor" then
|
if temp == "no sensor" then
|
||||||
temp = 0
|
temp = 0
|
||||||
else
|
else
|
||||||
temp = math.floor(tonumber(temp)/1000)
|
temp = math.floor(tonumber(temp)/1000)
|
||||||
@ -77,23 +55,26 @@ local fanstate = -1
|
|||||||
|
|
||||||
sleep(30)
|
sleep(30)
|
||||||
|
|
||||||
local devid = ReadAttribute("devid0")
|
local ddbridge = io.open("/sys/class/ddbridge/ddbridge0/devid0","r");
|
||||||
if devid == "0307dd01" then
|
if ddbridge then
|
||||||
fanstate = 1
|
local devid = ddbridge:read("*l")
|
||||||
local devid1 = ReadAttribute("devid1")
|
ddbridge:close()
|
||||||
if devid1 == "0009dd01" or devid1 == "000add01" then
|
if devid == "0307dd01" then
|
||||||
fanstate = -2
|
fanstate = 1
|
||||||
else
|
ddbridge = io.open("/sys/class/ddbridge/ddbridge0/fanspeed1","r");
|
||||||
local fs = tonumber(ReadAttribute("fanspeed1"))
|
if ddbridge then
|
||||||
if fs > 0 and fs < 17000 then
|
local fs = tonumber(ddbridge:read("*l"))
|
||||||
fanstate = -2
|
ddbridge:close()
|
||||||
|
if fs > 0 and fs < 17000 then
|
||||||
|
fanstate = -2
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
for i = 0,8,1 do
|
for i = 0,4,1 do
|
||||||
temp = ReadTemp(i)
|
temp = ReadTemp(i)
|
||||||
if temp > 0 then
|
if temp > 0 then
|
||||||
Sensor[NumSensors] = i
|
Sensor[NumSensors] = i
|
||||||
NumSensors = NumSensors + 1
|
NumSensors = NumSensors + 1
|
||||||
end
|
end
|
||||||
@ -114,18 +95,18 @@ while true do
|
|||||||
temps = ""
|
temps = ""
|
||||||
for i = 0, NumSensors - 1, 1 do
|
for i = 0, NumSensors - 1, 1 do
|
||||||
temp = ReadTemp(Sensor[i])
|
temp = ReadTemp(Sensor[i])
|
||||||
|
|
||||||
if temp == 0 then
|
if temp == 0 then
|
||||||
print(" fanControl Error ")
|
print(" fanControl Error ")
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
if i == 0 then
|
if i == 0 then
|
||||||
temps = temp
|
temps = temp
|
||||||
else
|
else
|
||||||
temps = temps .. "," .. temp
|
temps = temps .. "," .. temp
|
||||||
end
|
end
|
||||||
|
|
||||||
if fanstate == 0 and temp >= HighTemp then
|
if fanstate == 0 and temp >= HighTemp then
|
||||||
SetFan(1)
|
SetFan(1)
|
||||||
fanstate = 1
|
fanstate = 1
|
||||||
@ -133,35 +114,35 @@ while true do
|
|||||||
SetFan(0)
|
SetFan(0)
|
||||||
fanstate = 0
|
fanstate = 0
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
count = count - 1
|
count = count - 1
|
||||||
if count == 0 then
|
if count == 0 then
|
||||||
count = interval
|
count = interval
|
||||||
|
|
||||||
if #TempList < nValues then
|
if #TempList < nValues then
|
||||||
TempList[#TempList+1] = temps
|
TempList[#TempList+1] = temps
|
||||||
else
|
else
|
||||||
TempList[StartIndex] = temps
|
TempList[StartIndex] = temps
|
||||||
StartIndex = StartIndex + 1
|
StartIndex = StartIndex + 1
|
||||||
if StartIndex > nValues then StartIndex = 1 end
|
if StartIndex > nValues then StartIndex = 1 end
|
||||||
end
|
end
|
||||||
|
|
||||||
TmpLogFile = os.tmpname()
|
TmpLogFile = os.tmpname()
|
||||||
|
|
||||||
fh = io.open(TmpLogFile,"w")
|
fh = io.open(TmpLogFile,"w")
|
||||||
if fh then
|
if fh then
|
||||||
fh:write(NumSensors..","..interval..","..fanstate.."\n")
|
fh:write(NumSensors..","..interval..","..fanstate.."\n")
|
||||||
|
|
||||||
for i = StartIndex-1, 1, -1 do
|
for i = StartIndex-1, 1, -1 do
|
||||||
fh:write(TempList[i].."\n")
|
fh:write(TempList[i].."\n")
|
||||||
end
|
end
|
||||||
|
|
||||||
for i = #TempList, StartIndex, -1 do
|
for i = #TempList, StartIndex, -1 do
|
||||||
fh:write(TempList[i].."\n")
|
fh:write(TempList[i].."\n")
|
||||||
end
|
end
|
||||||
|
|
||||||
fh:close()
|
fh:close()
|
||||||
os.remove(LogFile)
|
os.remove(LogFile)
|
||||||
os.rename(TmpLogFile,LogFile)
|
os.rename(TmpLogFile,LogFile)
|
||||||
|
Binary file not shown.
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 100 KiB |
@ -1,44 +1,8 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!-- (c)2012 Digital Devices GmbH. All rights reserved -->
|
<!-- (c)2012 Digital Devices GmbH. All rights reserved -->
|
||||||
<!-- $Id: SCIFDataBase.xml 695 2016-12-16 11:53:04Z manfred $ -->
|
<!-- $Id: SCIFDataBase.xml 645 2016-02-09 18:33:05Z manfred $ -->
|
||||||
<SCIFDataBase xmlns="http://schemas.DigitalDevices.de/SCIFDataBase">
|
<SCIFDataBase xmlns="http://schemas.DigitalDevices.de/SCIFDataBase">
|
||||||
<OutdoorUnit Name="IDLU-UST110-CUO4O-32P (4x16)" Manufacturer="Inverto" Type="Switch" Protocol="EN50607" PowerupDelay="1000">
|
<OutdoorUnit Name="IDLU-32UL40-UNBOO-OPP" Manufacturer="Inverto" Type="LNB" Protocol="EN50607">
|
||||||
<UBSlot Frequency="1210" />
|
|
||||||
<UBSlot Frequency="1420" />
|
|
||||||
<UBSlot Frequency="1680" />
|
|
||||||
<UBSlot Frequency="2040" />
|
|
||||||
<UBSlot Frequency="985" />
|
|
||||||
<UBSlot Frequency="1050" />
|
|
||||||
<UBSlot Frequency="1115" />
|
|
||||||
<UBSlot Frequency="1275" />
|
|
||||||
<UBSlot Frequency="1340" />
|
|
||||||
<UBSlot Frequency="1485" />
|
|
||||||
<UBSlot Frequency="1550" />
|
|
||||||
<UBSlot Frequency="1615" />
|
|
||||||
<UBSlot Frequency="1745" />
|
|
||||||
<UBSlot Frequency="1810" />
|
|
||||||
<UBSlot Frequency="1875" />
|
|
||||||
<UBSlot Frequency="1940" />
|
|
||||||
</OutdoorUnit>
|
|
||||||
<OutdoorUnit Name="IDLU-UST110-CUO8O-32PP (8x16)" Manufacturer="Inverto" Type="Switch" Protocol="EN50607" PowerupDelay="1000">
|
|
||||||
<UBSlot Frequency="1210" />
|
|
||||||
<UBSlot Frequency="1420" />
|
|
||||||
<UBSlot Frequency="1680" />
|
|
||||||
<UBSlot Frequency="2040" />
|
|
||||||
<UBSlot Frequency="985" />
|
|
||||||
<UBSlot Frequency="1050" />
|
|
||||||
<UBSlot Frequency="1115" />
|
|
||||||
<UBSlot Frequency="1275" />
|
|
||||||
<UBSlot Frequency="1340" />
|
|
||||||
<UBSlot Frequency="1485" />
|
|
||||||
<UBSlot Frequency="1550" />
|
|
||||||
<UBSlot Frequency="1615" />
|
|
||||||
<UBSlot Frequency="1745" />
|
|
||||||
<UBSlot Frequency="1810" />
|
|
||||||
<UBSlot Frequency="1875" />
|
|
||||||
<UBSlot Frequency="1940" />
|
|
||||||
</OutdoorUnit>
|
|
||||||
<OutdoorUnit Name="IDLU-32UL40-UNBOO-OPP" Manufacturer="Inverto" Type="LNB" Protocol="EN50607" PowerupDelay="1000">
|
|
||||||
<UBSlot Frequency="1210" />
|
<UBSlot Frequency="1210" />
|
||||||
<UBSlot Frequency="1420" />
|
<UBSlot Frequency="1420" />
|
||||||
<UBSlot Frequency="1680" />
|
<UBSlot Frequency="1680" />
|
||||||
@ -72,7 +36,7 @@
|
|||||||
<UBSlot Frequency="2112" />
|
<UBSlot Frequency="2112" />
|
||||||
<UBSlot Frequency="2147" />
|
<UBSlot Frequency="2147" />
|
||||||
</OutdoorUnit>
|
</OutdoorUnit>
|
||||||
<OutdoorUnit Name="IDLU-24UL40-UNMOO-OPP" Manufacturer="Inverto" Type="LNB" Protocol="EN50607" PowerupDelay="1000">
|
<OutdoorUnit Name="IDLU-24UL40-UNMOO-OPP" Manufacturer="Inverto" Type="LNB" Protocol="EN50607">
|
||||||
<UBSlot Frequency="1210" />
|
<UBSlot Frequency="1210" />
|
||||||
<UBSlot Frequency="1420" />
|
<UBSlot Frequency="1420" />
|
||||||
<UBSlot Frequency="1680" />
|
<UBSlot Frequency="1680" />
|
||||||
@ -142,7 +106,7 @@
|
|||||||
<UBSlot Frequency="1680"/>
|
<UBSlot Frequency="1680"/>
|
||||||
<UBSlot Frequency="2040"/>
|
<UBSlot Frequency="2040"/>
|
||||||
</OutdoorUnit>
|
</OutdoorUnit>
|
||||||
<OutdoorUnit Name="IDLU-UST110-CUO1O-32P" Manufacturer="Inverto" Type="Switch" Protocol="EN50607" PowerupDelay="1000">
|
<OutdoorUnit Name="IDLU-UST110-CUO1O-32P" Manufacturer="Inverto" Type="Switch" Protocol="EN50607">
|
||||||
<UBSlot Frequency="1210"/>
|
<UBSlot Frequency="1210"/>
|
||||||
<UBSlot Frequency="1420"/>
|
<UBSlot Frequency="1420"/>
|
||||||
<UBSlot Frequency="1680"/>
|
<UBSlot Frequency="1680"/>
|
||||||
@ -176,66 +140,6 @@
|
|||||||
<UBSlot Frequency="2112"/>
|
<UBSlot Frequency="2112"/>
|
||||||
<UBSlot Frequency="2148"/>
|
<UBSlot Frequency="2148"/>
|
||||||
</OutdoorUnit>
|
</OutdoorUnit>
|
||||||
<OutdoorUnit Name="IDLU-UWT110-CUO1O-32P" Manufacturer="Inverto" Type="Switch" Protocol="EN50607" PowerupDelay="1000">
|
|
||||||
<UBSlot Frequency="1210"/>
|
|
||||||
<UBSlot Frequency="1420"/>
|
|
||||||
<UBSlot Frequency="1680"/>
|
|
||||||
<UBSlot Frequency="2040"/>
|
|
||||||
<UBSlot Frequency="984"/>
|
|
||||||
<UBSlot Frequency="1020"/>
|
|
||||||
<UBSlot Frequency="1056"/>
|
|
||||||
<UBSlot Frequency="1092"/>
|
|
||||||
<UBSlot Frequency="1128"/>
|
|
||||||
<UBSlot Frequency="1164"/>
|
|
||||||
<UBSlot Frequency="1256"/>
|
|
||||||
<UBSlot Frequency="1292"/>
|
|
||||||
<UBSlot Frequency="1328"/>
|
|
||||||
<UBSlot Frequency="1364"/>
|
|
||||||
<UBSlot Frequency="1458"/>
|
|
||||||
<UBSlot Frequency="1494"/>
|
|
||||||
<UBSlot Frequency="1530"/>
|
|
||||||
<UBSlot Frequency="1566"/>
|
|
||||||
<UBSlot Frequency="1602"/>
|
|
||||||
<UBSlot Frequency="1638"/>
|
|
||||||
<UBSlot Frequency="1716"/>
|
|
||||||
<UBSlot Frequency="1752"/>
|
|
||||||
<UBSlot Frequency="1788"/>
|
|
||||||
<UBSlot Frequency="1824"/>
|
|
||||||
<UBSlot Frequency="1860"/>
|
|
||||||
<UBSlot Frequency="1896"/>
|
|
||||||
<UBSlot Frequency="1932"/>
|
|
||||||
<UBSlot Frequency="1968"/>
|
|
||||||
<UBSlot Frequency="2004"/>
|
|
||||||
<UBSlot Frequency="2076"/>
|
|
||||||
<UBSlot Frequency="2112"/>
|
|
||||||
<UBSlot Frequency="2148"/>
|
|
||||||
</OutdoorUnit>
|
|
||||||
<OutdoorUnit Name="Unicable II LNB Diavolo" Manufacturer="Megasat" Type="LNB" Protocol="EN50607" PowerupDelay="1000">
|
|
||||||
<UBSlot Frequency="1210" />
|
|
||||||
<UBSlot Frequency="1420" />
|
|
||||||
<UBSlot Frequency="1680" />
|
|
||||||
<UBSlot Frequency="2040" />
|
|
||||||
<UBSlot Frequency="1005" />
|
|
||||||
<UBSlot Frequency="1050" />
|
|
||||||
<UBSlot Frequency="1095" />
|
|
||||||
<UBSlot Frequency="1140" />
|
|
||||||
<UBSlot Frequency="1260" />
|
|
||||||
<UBSlot Frequency="1305" />
|
|
||||||
<UBSlot Frequency="1350" />
|
|
||||||
<UBSlot Frequency="1475" />
|
|
||||||
<UBSlot Frequency="1520" />
|
|
||||||
<UBSlot Frequency="1565" />
|
|
||||||
<UBSlot Frequency="1610" />
|
|
||||||
<UBSlot Frequency="1725" />
|
|
||||||
<UBSlot Frequency="1770" />
|
|
||||||
<UBSlot Frequency="1815" />
|
|
||||||
<UBSlot Frequency="1860" />
|
|
||||||
<UBSlot Frequency="1905" />
|
|
||||||
<UBSlot Frequency="1950" />
|
|
||||||
<UBSlot Frequency="1995" />
|
|
||||||
<UBSlot Frequency="2085" />
|
|
||||||
<UBSlot Frequency="2130" />
|
|
||||||
</OutdoorUnit>
|
|
||||||
<OutdoorUnit Name="TechniRouter 5/1x8" Manufacturer="TechniSat" Type="Switch">
|
<OutdoorUnit Name="TechniRouter 5/1x8" Manufacturer="TechniSat" Type="Switch">
|
||||||
<UBSlot Frequency="1284"/>
|
<UBSlot Frequency="1284"/>
|
||||||
<UBSlot Frequency="1400"/>
|
<UBSlot Frequency="1400"/>
|
||||||
@ -246,32 +150,6 @@
|
|||||||
<UBSlot Frequency="1980"/>
|
<UBSlot Frequency="1980"/>
|
||||||
<UBSlot Frequency="2096"/>
|
<UBSlot Frequency="2096"/>
|
||||||
</OutdoorUnit>
|
</OutdoorUnit>
|
||||||
<OutdoorUnit Name="UNYSAT-24TN-LNB" Manufacturer="TechniSat" Type="LNB">
|
|
||||||
<UBSlot Frequency="975"/>
|
|
||||||
<UBSlot Frequency="1025"/>
|
|
||||||
<UBSlot Frequency="1075"/>
|
|
||||||
<UBSlot Frequency="1125"/>
|
|
||||||
<UBSlot Frequency="1175"/>
|
|
||||||
<UBSlot Frequency="1225"/>
|
|
||||||
<UBSlot Frequency="1275"/>
|
|
||||||
<UBSlot Frequency="1325"/>
|
|
||||||
<UBSlot Frequency="1375"/>
|
|
||||||
<UBSlot Frequency="1425"/>
|
|
||||||
<UBSlot Frequency="1475"/>
|
|
||||||
<UBSlot Frequency="1525"/>
|
|
||||||
<UBSlot Frequency="1575"/>
|
|
||||||
<UBSlot Frequency="1625"/>
|
|
||||||
<UBSlot Frequency="1675"/>
|
|
||||||
<UBSlot Frequency="1725"/>
|
|
||||||
<UBSlot Frequency="1775"/>
|
|
||||||
<UBSlot Frequency="1825"/>
|
|
||||||
<UBSlot Frequency="1875"/>
|
|
||||||
<UBSlot Frequency="1925"/>
|
|
||||||
<UBSlot Frequency="1975"/>
|
|
||||||
<UBSlot Frequency="2025"/>
|
|
||||||
<UBSlot Frequency="2075"/>
|
|
||||||
<UBSlot Frequency="2125"/>
|
|
||||||
</OutdoorUnit>
|
|
||||||
<OutdoorUnit Name="TechniRouter 9/1x8" Manufacturer="TechniSat" Type="Switch">
|
<OutdoorUnit Name="TechniRouter 9/1x8" Manufacturer="TechniSat" Type="Switch">
|
||||||
<UBSlot Frequency="1284"/>
|
<UBSlot Frequency="1284"/>
|
||||||
<UBSlot Frequency="1400"/>
|
<UBSlot Frequency="1400"/>
|
||||||
@ -368,7 +246,7 @@
|
|||||||
<UBSlot Frequency="1400"/>
|
<UBSlot Frequency="1400"/>
|
||||||
<UBSlot Frequency="1516"/>
|
<UBSlot Frequency="1516"/>
|
||||||
</OutdoorUnit>
|
</OutdoorUnit>
|
||||||
<OutdoorUnit Name="EXE 159" Manufacturer="Kathrein" Type="Switch" Protocol="EN50607" PinProtected="true" PowerupDelay="1000">
|
<OutdoorUnit Name="EXE 159" Manufacturer="Kathrein" Type="Switch" Protocol="EN50607" PinProtected="true">
|
||||||
<UBSlot Frequency="974"/>
|
<UBSlot Frequency="974"/>
|
||||||
<UBSlot Frequency="1076"/>
|
<UBSlot Frequency="1076"/>
|
||||||
<UBSlot Frequency="1178"/>
|
<UBSlot Frequency="1178"/>
|
||||||
@ -379,7 +257,7 @@
|
|||||||
<UBSlot Frequency="1688"/>
|
<UBSlot Frequency="1688"/>
|
||||||
<UBSlot Frequency="1790"/>
|
<UBSlot Frequency="1790"/>
|
||||||
</OutdoorUnit>
|
</OutdoorUnit>
|
||||||
<OutdoorUnit Name="EXE 1512/2512" Manufacturer="Kathrein" Type="Switch" Protocol="EN50607" PinProtected="true" PowerupDelay="1000">
|
<OutdoorUnit Name="EXE 1512/2512" Manufacturer="Kathrein" Type="Switch" Protocol="EN50607" PinProtected="true">
|
||||||
<UBSlot Frequency="974"/>
|
<UBSlot Frequency="974"/>
|
||||||
<UBSlot Frequency="1076"/>
|
<UBSlot Frequency="1076"/>
|
||||||
<UBSlot Frequency="1178"/>
|
<UBSlot Frequency="1178"/>
|
||||||
@ -392,92 +270,6 @@
|
|||||||
<UBSlot Frequency="1892"/>
|
<UBSlot Frequency="1892"/>
|
||||||
<UBSlot Frequency="1994"/>
|
<UBSlot Frequency="1994"/>
|
||||||
<UBSlot Frequency="2096"/>
|
<UBSlot Frequency="2096"/>
|
||||||
</OutdoorUnit>
|
|
||||||
<OutdoorUnit Name="EXD 1532/2532 - Mode C (30 Userbands Output)" Manufacturer="Kathrein" Type="Switch" Protocol="EN50607" PinProtected="true">
|
|
||||||
<UBSlot Frequency="970"/>
|
|
||||||
<UBSlot Frequency="1010"/>
|
|
||||||
<UBSlot Frequency="1050"/>
|
|
||||||
<UBSlot Frequency="1090"/>
|
|
||||||
<UBSlot Frequency="1130"/>
|
|
||||||
<UBSlot Frequency="1170"/>
|
|
||||||
<UBSlot Frequency="1210"/>
|
|
||||||
<UBSlot Frequency="1250"/>
|
|
||||||
<UBSlot Frequency="1290"/>
|
|
||||||
<UBSlot Frequency="1330"/>
|
|
||||||
<UBSlot Frequency="1370"/>
|
|
||||||
<UBSlot Frequency="1410"/>
|
|
||||||
<UBSlot Frequency="1450"/>
|
|
||||||
<UBSlot Frequency="1490"/>
|
|
||||||
<UBSlot Frequency="1530"/>
|
|
||||||
<UBSlot Frequency="1570"/>
|
|
||||||
<UBSlot Frequency="1610"/>
|
|
||||||
<UBSlot Frequency="1650"/>
|
|
||||||
<UBSlot Frequency="1690"/>
|
|
||||||
<UBSlot Frequency="1730"/>
|
|
||||||
<UBSlot Frequency="1770"/>
|
|
||||||
<UBSlot Frequency="1810"/>
|
|
||||||
<UBSlot Frequency="1850"/>
|
|
||||||
<UBSlot Frequency="1890"/>
|
|
||||||
<UBSlot Frequency="1930"/>
|
|
||||||
<UBSlot Frequency="1970"/>
|
|
||||||
<UBSlot Frequency="2010"/>
|
|
||||||
<UBSlot Frequency="2050"/>
|
|
||||||
<UBSlot Frequency="2090"/>
|
|
||||||
<UBSlot Frequency="2130"/>
|
|
||||||
</OutdoorUnit>
|
|
||||||
<OutdoorUnit Name="EXD 1532/2532 - Mode B (24 Userbands Output)" Manufacturer="Kathrein" Type="Switch" Protocol="EN50607" PinProtected="true">
|
|
||||||
<UBSlot Frequency="975"/>
|
|
||||||
<UBSlot Frequency="1025"/>
|
|
||||||
<UBSlot Frequency="1075"/>
|
|
||||||
<UBSlot Frequency="1125"/>
|
|
||||||
<UBSlot Frequency="1175"/>
|
|
||||||
<UBSlot Frequency="1225"/>
|
|
||||||
<UBSlot Frequency="1275"/>
|
|
||||||
<UBSlot Frequency="1325"/>
|
|
||||||
<UBSlot Frequency="1375"/>
|
|
||||||
<UBSlot Frequency="1425"/>
|
|
||||||
<UBSlot Frequency="1475"/>
|
|
||||||
<UBSlot Frequency="1525"/>
|
|
||||||
<UBSlot Frequency="1575"/>
|
|
||||||
<UBSlot Frequency="1625"/>
|
|
||||||
<UBSlot Frequency="1675"/>
|
|
||||||
<UBSlot Frequency="1725"/>
|
|
||||||
<UBSlot Frequency="1775"/>
|
|
||||||
<UBSlot Frequency="1825"/>
|
|
||||||
<UBSlot Frequency="1875"/>
|
|
||||||
<UBSlot Frequency="1925"/>
|
|
||||||
<UBSlot Frequency="1975"/>
|
|
||||||
<UBSlot Frequency="2025"/>
|
|
||||||
<UBSlot Frequency="2075"/>
|
|
||||||
<UBSlot Frequency="2125"/>
|
|
||||||
</OutdoorUnit>
|
|
||||||
<OutdoorUnit Name="EXD 1532/2532 - Mode B (8 Userbands Output)" Manufacturer="Kathrein" Type="Switch" Protocol="EN50607" PinProtected="true">
|
|
||||||
<UBSlot Frequency="975"/>
|
|
||||||
<UBSlot Frequency="1025"/>
|
|
||||||
<UBSlot Frequency="1075"/>
|
|
||||||
<UBSlot Frequency="1125"/>
|
|
||||||
<UBSlot Frequency="1175"/>
|
|
||||||
<UBSlot Frequency="1225"/>
|
|
||||||
<UBSlot Frequency="1275"/>
|
|
||||||
<UBSlot Frequency="1325"/>
|
|
||||||
</OutdoorUnit>
|
|
||||||
<OutdoorUnit Name="EXD 1532/2532 - Mode A (16 Userbands Outputs)" Manufacturer="Kathrein" Type="Switch" Protocol="EN50607" PinProtected="true">
|
|
||||||
<UBSlot Frequency="975"/>
|
|
||||||
<UBSlot Frequency="1025"/>
|
|
||||||
<UBSlot Frequency="1075"/>
|
|
||||||
<UBSlot Frequency="1125"/>
|
|
||||||
<UBSlot Frequency="1175"/>
|
|
||||||
<UBSlot Frequency="1225"/>
|
|
||||||
<UBSlot Frequency="1275"/>
|
|
||||||
<UBSlot Frequency="1325"/>
|
|
||||||
<UBSlot Frequency="1375"/>
|
|
||||||
<UBSlot Frequency="1425"/>
|
|
||||||
<UBSlot Frequency="1475"/>
|
|
||||||
<UBSlot Frequency="1525"/>
|
|
||||||
<UBSlot Frequency="1575"/>
|
|
||||||
<UBSlot Frequency="1625"/>
|
|
||||||
<UBSlot Frequency="1675"/>
|
|
||||||
<UBSlot Frequency="1725"/>
|
|
||||||
</OutdoorUnit>
|
</OutdoorUnit>
|
||||||
<OutdoorUnit Name="EXE 259" Manufacturer="Kathrein" Type="Switch">
|
<OutdoorUnit Name="EXE 259" Manufacturer="Kathrein" Type="Switch">
|
||||||
<UBSlot Frequency="974" />
|
<UBSlot Frequency="974" />
|
||||||
@ -577,17 +369,7 @@
|
|||||||
<UBSlot Frequency="1892" />
|
<UBSlot Frequency="1892" />
|
||||||
<UBSlot Frequency="1994" />
|
<UBSlot Frequency="1994" />
|
||||||
</OutdoorUnit>
|
</OutdoorUnit>
|
||||||
<OutdoorUnit Name="DCR 5-1-8K" Manufacturer="Dura-Sat" Type="Switch" PinProtected="true">
|
<OutdoorUnit Name="UK 124" Manufacturer="Dura-Sat" Type="LNB" Protocol="EN50607">
|
||||||
<UBSlot Frequency="1280" />
|
|
||||||
<UBSlot Frequency="1382" />
|
|
||||||
<UBSlot Frequency="1484" />
|
|
||||||
<UBSlot Frequency="1586" />
|
|
||||||
<UBSlot Frequency="1688" />
|
|
||||||
<UBSlot Frequency="1790" />
|
|
||||||
<UBSlot Frequency="1892" />
|
|
||||||
<UBSlot Frequency="1994" />
|
|
||||||
</OutdoorUnit>
|
|
||||||
<OutdoorUnit Name="UK 124" Manufacturer="Dura-Sat" Type="LNB" Protocol="EN50607" PowerupDelay="1000">
|
|
||||||
<UBSlot Frequency="1210" />
|
<UBSlot Frequency="1210" />
|
||||||
<UBSlot Frequency="1420" />
|
<UBSlot Frequency="1420" />
|
||||||
<UBSlot Frequency="1680" />
|
<UBSlot Frequency="1680" />
|
||||||
@ -613,7 +395,7 @@
|
|||||||
<UBSlot Frequency="2085" />
|
<UBSlot Frequency="2085" />
|
||||||
<UBSlot Frequency="2130" />
|
<UBSlot Frequency="2130" />
|
||||||
</OutdoorUnit>
|
</OutdoorUnit>
|
||||||
<OutdoorUnit Name="DUR-Line DPC-32 K (32 UB-Unicable Output)" Manufacturer="Dura-Sat" Type="Switch" Protocol="EN50607" PowerupDelay="1000">
|
<OutdoorUnit Name="DUR-Line DPC-32 K (32 UB-Unicable Output)" Manufacturer="Dura-Sat" Type="Switch" Protocol="EN50607">
|
||||||
<UBSlot Frequency="1210" />
|
<UBSlot Frequency="1210" />
|
||||||
<UBSlot Frequency="1420" />
|
<UBSlot Frequency="1420" />
|
||||||
<UBSlot Frequency="1680" />
|
<UBSlot Frequency="1680" />
|
||||||
@ -647,7 +429,7 @@
|
|||||||
<UBSlot Frequency="2112" />
|
<UBSlot Frequency="2112" />
|
||||||
<UBSlot Frequency="2147" />
|
<UBSlot Frequency="2147" />
|
||||||
</OutdoorUnit>
|
</OutdoorUnit>
|
||||||
<OutdoorUnit Name="DUR-Line DPC-32 K (16 UB-Unicable Output)" Manufacturer="Dura-Sat" Type="Switch" Protocol="EN50607" PowerupDelay="1000">
|
<OutdoorUnit Name="DUR-Line DPC-32 K (16 UB-Unicable Output)" Manufacturer="Dura-Sat" Type="Switch" Protocol="EN50607">
|
||||||
<UBSlot Frequency="1210" />
|
<UBSlot Frequency="1210" />
|
||||||
<UBSlot Frequency="1420" />
|
<UBSlot Frequency="1420" />
|
||||||
<UBSlot Frequency="1680" />
|
<UBSlot Frequency="1680" />
|
||||||
@ -665,7 +447,7 @@
|
|||||||
<UBSlot Frequency="1458" />
|
<UBSlot Frequency="1458" />
|
||||||
<UBSlot Frequency="1494" />
|
<UBSlot Frequency="1494" />
|
||||||
</OutdoorUnit>
|
</OutdoorUnit>
|
||||||
<OutdoorUnit Name="DUR-Line DPC-32 K (16 UB-Legacy Output)" Manufacturer="Dura-Sat" Type="Switch" Protocol="EN50607" PowerupDelay="1000">
|
<OutdoorUnit Name="DUR-Line DPC-32 K (16 UB-Legacy Output)" Manufacturer="Dura-Sat" Type="Switch" Protocol="EN50607">
|
||||||
<UBSlot Frequency="1530" />
|
<UBSlot Frequency="1530" />
|
||||||
<UBSlot Frequency="1566" />
|
<UBSlot Frequency="1566" />
|
||||||
<UBSlot Frequency="1602" />
|
<UBSlot Frequency="1602" />
|
||||||
@ -935,34 +717,6 @@
|
|||||||
<UBSlot Frequency="1864"/>
|
<UBSlot Frequency="1864"/>
|
||||||
<UBSlot Frequency="1980"/>
|
<UBSlot Frequency="1980"/>
|
||||||
</OutdoorUnit>
|
</OutdoorUnit>
|
||||||
<OutdoorUnit Name="SUS SUS 9942/8 (4x2 Mode, Output 1)" Manufacturer="Spaun" Type="Switch">
|
|
||||||
<UBSlot Frequency="1076"/>
|
|
||||||
<UBSlot Frequency="1178"/>
|
|
||||||
</OutdoorUnit>
|
|
||||||
<OutdoorUnit Name="SUS SUS 9942/8 (4x2 Mode, Output 2)" Manufacturer="Spaun" Type="Switch">
|
|
||||||
<UBSlot Frequency="1280"/>
|
|
||||||
<UBSlot Frequency="1382"/>
|
|
||||||
</OutdoorUnit>
|
|
||||||
<OutdoorUnit Name="SUS SUS 9942/8 (4x2 Mode, Output 3)" Manufacturer="Spaun" Type="Switch">
|
|
||||||
<UBSlot Frequency="1076"/>
|
|
||||||
<UBSlot Frequency="1178"/>
|
|
||||||
</OutdoorUnit>
|
|
||||||
<OutdoorUnit Name="SUS SUS 9942/8 (4x2 Mode, Output 4)" Manufacturer="Spaun" Type="Switch">
|
|
||||||
<UBSlot Frequency="1280"/>
|
|
||||||
<UBSlot Frequency="1382"/>
|
|
||||||
</OutdoorUnit>
|
|
||||||
<OutdoorUnit Name="SUS SUS 9942/8 (2x4 Mode, Output 1 und 2)" Manufacturer="Spaun" Type="Switch">
|
|
||||||
<UBSlot Frequency="1076"/>
|
|
||||||
<UBSlot Frequency="1178"/>
|
|
||||||
<UBSlot Frequency="1280"/>
|
|
||||||
<UBSlot Frequency="1382"/>
|
|
||||||
</OutdoorUnit>
|
|
||||||
<OutdoorUnit Name="SUS SUS 9942/8 (2x4 Mode, Output 3 und 4)" Manufacturer="Spaun" Type="Switch">
|
|
||||||
<UBSlot Frequency="1076"/>
|
|
||||||
<UBSlot Frequency="1178"/>
|
|
||||||
<UBSlot Frequency="1280"/>
|
|
||||||
<UBSlot Frequency="1382"/>
|
|
||||||
</OutdoorUnit>
|
|
||||||
<OutdoorUnit Name="SUS 5581/33 NF (3x3 Mode, Output 1)" Manufacturer="Spaun" Type="Switch">
|
<OutdoorUnit Name="SUS 5581/33 NF (3x3 Mode, Output 1)" Manufacturer="Spaun" Type="Switch">
|
||||||
<UBSlot Frequency="1068"/>
|
<UBSlot Frequency="1068"/>
|
||||||
<UBSlot Frequency="1284"/>
|
<UBSlot Frequency="1284"/>
|
||||||
@ -1013,12 +767,12 @@
|
|||||||
<UBSlot Frequency="1382"/>
|
<UBSlot Frequency="1382"/>
|
||||||
<UBSlot Frequency="1484"/>
|
<UBSlot Frequency="1484"/>
|
||||||
</OutdoorUnit>
|
</OutdoorUnit>
|
||||||
<OutdoorUnit Name="JPSxxxx-3A/T/TN" Manufacturer="Jultec" Type="Switch" Protocol="EN50607" PowerupDelay="1000">
|
<OutdoorUnit Name="JPSxxxx-3A/T/TN" Manufacturer="Jultec" Type="Switch" Protocol="EN50607">
|
||||||
<UBSlot Frequency="1280"/>
|
<UBSlot Frequency="1280"/>
|
||||||
<UBSlot Frequency="1382"/>
|
<UBSlot Frequency="1382"/>
|
||||||
<UBSlot Frequency="1484"/>
|
<UBSlot Frequency="1484"/>
|
||||||
</OutdoorUnit>
|
</OutdoorUnit>
|
||||||
<OutdoorUnit Name="JPSxxxx-6A/T/TN" Manufacturer="Jultec" Type="Switch" Protocol="EN50607" PowerupDelay="1000">
|
<OutdoorUnit Name="JPSxxxx-6A/T/TN" Manufacturer="Jultec" Type="Switch" Protocol="EN50607">
|
||||||
<UBSlot Frequency="1280"/>
|
<UBSlot Frequency="1280"/>
|
||||||
<UBSlot Frequency="1382"/>
|
<UBSlot Frequency="1382"/>
|
||||||
<UBSlot Frequency="1484"/>
|
<UBSlot Frequency="1484"/>
|
||||||
@ -1026,7 +780,7 @@
|
|||||||
<UBSlot Frequency="1688"/>
|
<UBSlot Frequency="1688"/>
|
||||||
<UBSlot Frequency="1790"/>
|
<UBSlot Frequency="1790"/>
|
||||||
</OutdoorUnit>
|
</OutdoorUnit>
|
||||||
<OutdoorUnit Name="JPSxxxx-8A/T/TN" Manufacturer="Jultec" Type="Switch" Protocol="EN50607" PowerupDelay="1000">
|
<OutdoorUnit Name="JPSxxxx-8A/T/TN" Manufacturer="Jultec" Type="Switch" Protocol="EN50607">
|
||||||
<UBSlot Frequency="1076"/>
|
<UBSlot Frequency="1076"/>
|
||||||
<UBSlot Frequency="1178"/>
|
<UBSlot Frequency="1178"/>
|
||||||
<UBSlot Frequency="1280"/>
|
<UBSlot Frequency="1280"/>
|
||||||
@ -1036,7 +790,7 @@
|
|||||||
<UBSlot Frequency="1688"/>
|
<UBSlot Frequency="1688"/>
|
||||||
<UBSlot Frequency="1790"/>
|
<UBSlot Frequency="1790"/>
|
||||||
</OutdoorUnit>
|
</OutdoorUnit>
|
||||||
<OutdoorUnit Name="JPSxxxx-12AN/TN " Manufacturer="Jultec" Type="Switch" Protocol="EN50607" PowerupDelay="1000">
|
<OutdoorUnit Name="JPSxxxx-12AN/TN " Manufacturer="Jultec" Type="Switch" Protocol="EN50607">
|
||||||
<UBSlot Frequency="974"/>
|
<UBSlot Frequency="974"/>
|
||||||
<UBSlot Frequency="1076"/>
|
<UBSlot Frequency="1076"/>
|
||||||
<UBSlot Frequency="1178"/>
|
<UBSlot Frequency="1178"/>
|
||||||
@ -1050,74 +804,10 @@
|
|||||||
<UBSlot Frequency="1994"/>
|
<UBSlot Frequency="1994"/>
|
||||||
<UBSlot Frequency="2096"/>
|
<UBSlot Frequency="2096"/>
|
||||||
</OutdoorUnit>
|
</OutdoorUnit>
|
||||||
<OutdoorUnit Name="JPS0501-8M2" Manufacturer="Jultec" Type="Switch">
|
|
||||||
<UBSlot Frequency="1375"/>
|
|
||||||
<UBSlot Frequency="1425"/>
|
|
||||||
<UBSlot Frequency="1475"/>
|
|
||||||
<UBSlot Frequency="1525"/>
|
|
||||||
<UBSlot Frequency="1575"/>
|
|
||||||
<UBSlot Frequency="1625"/>
|
|
||||||
<UBSlot Frequency="1675"/>
|
|
||||||
<UBSlot Frequency="1725"/>
|
|
||||||
</OutdoorUnit>
|
|
||||||
<OutdoorUnit Name="JPS0501-16MN/16TN" Manufacturer="Jultec" Type="Switch">
|
|
||||||
<UBSlot Frequency="1375"/>
|
|
||||||
<UBSlot Frequency="1425"/>
|
|
||||||
<UBSlot Frequency="1475"/>
|
|
||||||
<UBSlot Frequency="1525"/>
|
|
||||||
<UBSlot Frequency="1575"/>
|
|
||||||
<UBSlot Frequency="1625"/>
|
|
||||||
<UBSlot Frequency="1675"/>
|
|
||||||
<UBSlot Frequency="1725"/>
|
|
||||||
<UBSlot Frequency="1775"/>
|
|
||||||
<UBSlot Frequency="1825"/>
|
|
||||||
<UBSlot Frequency="1875"/>
|
|
||||||
<UBSlot Frequency="1925"/>
|
|
||||||
<UBSlot Frequency="1975"/>
|
|
||||||
<UBSlot Frequency="2025"/>
|
|
||||||
<UBSlot Frequency="2075"/>
|
|
||||||
<UBSlot Frequency="2125"/>
|
|
||||||
</OutdoorUnit>
|
|
||||||
<OutdoorUnit Name="JPS0502-8T/M" Manufacturer="Jultec" Type="Switch">
|
|
||||||
<UBSlot Frequency="1375"/>
|
|
||||||
<UBSlot Frequency="1425"/>
|
|
||||||
<UBSlot Frequency="1475"/>
|
|
||||||
<UBSlot Frequency="1525"/>
|
|
||||||
<UBSlot Frequency="1575"/>
|
|
||||||
<UBSlot Frequency="1625"/>
|
|
||||||
<UBSlot Frequency="1675"/>
|
|
||||||
<UBSlot Frequency="1725"/>
|
|
||||||
</OutdoorUnit>
|
|
||||||
<OutdoorUnit Name="JPS0508-8T/M" Manufacturer="Jultec" Type="Switch">
|
|
||||||
<UBSlot Frequency="1375"/>
|
|
||||||
<UBSlot Frequency="1425"/>
|
|
||||||
<UBSlot Frequency="1475"/>
|
|
||||||
<UBSlot Frequency="1525"/>
|
|
||||||
<UBSlot Frequency="1575"/>
|
|
||||||
<UBSlot Frequency="1625"/>
|
|
||||||
<UBSlot Frequency="1675"/>
|
|
||||||
<UBSlot Frequency="1725"/>
|
|
||||||
</OutdoorUnit>
|
|
||||||
<OutdoorUnit Name="JPS0901-8T/8M" Manufacturer="Jultec" Type="Switch">
|
|
||||||
<UBSlot Frequency="1375"/>
|
|
||||||
<UBSlot Frequency="1425"/>
|
|
||||||
<UBSlot Frequency="1475"/>
|
|
||||||
<UBSlot Frequency="1525"/>
|
|
||||||
<UBSlot Frequency="1575"/>
|
|
||||||
<UBSlot Frequency="1625"/>
|
|
||||||
<UBSlot Frequency="1675"/>
|
|
||||||
<UBSlot Frequency="1725"/>
|
|
||||||
</OutdoorUnit>
|
|
||||||
<OutdoorUnit Name="JRS0502-2+4T" Manufacturer="Jultec" Type="Switch">
|
<OutdoorUnit Name="JRS0502-2+4T" Manufacturer="Jultec" Type="Switch">
|
||||||
<UBSlot Frequency="1280"/>
|
<UBSlot Frequency="1280"/>
|
||||||
<UBSlot Frequency="1382"/>
|
<UBSlot Frequency="1382"/>
|
||||||
</OutdoorUnit>
|
</OutdoorUnit>
|
||||||
<OutdoorUnit Name="JRS0502-4+4T" Manufacturer="Jultec" Type="Switch" Protocol="EN50607" PowerupDelay="1000">
|
|
||||||
<UBSlot Frequency="1375"/>
|
|
||||||
<UBSlot Frequency="1425"/>
|
|
||||||
<UBSlot Frequency="1475"/>
|
|
||||||
<UBSlot Frequency="1525"/>
|
|
||||||
</OutdoorUnit>
|
|
||||||
<OutdoorUnit Name="JRS0504-2A/T" Manufacturer="Jultec" Type="Switch">
|
<OutdoorUnit Name="JRS0504-2A/T" Manufacturer="Jultec" Type="Switch">
|
||||||
<UBSlot Frequency="1280"/>
|
<UBSlot Frequency="1280"/>
|
||||||
<UBSlot Frequency="1382"/>
|
<UBSlot Frequency="1382"/>
|
||||||
@ -1144,7 +834,7 @@
|
|||||||
<UBSlot Frequency="1680"/>
|
<UBSlot Frequency="1680"/>
|
||||||
<UBSlot Frequency="2040"/>
|
<UBSlot Frequency="2040"/>
|
||||||
</OutdoorUnit>
|
</OutdoorUnit>
|
||||||
<OutdoorUnit Name="GT-DLNB1T" Manufacturer="GT-SAT" Type="LNB" Protocol="EN50607" PowerupDelay="1000">
|
<OutdoorUnit Name="GT-DLNB1T" Manufacturer="GT-SAT" Type="LNB" Protocol="EN50607">
|
||||||
<UBSlot Frequency="975"/>
|
<UBSlot Frequency="975"/>
|
||||||
<UBSlot Frequency="1025"/>
|
<UBSlot Frequency="1025"/>
|
||||||
<UBSlot Frequency="1075"/>
|
<UBSlot Frequency="1075"/>
|
||||||
@ -1170,7 +860,7 @@
|
|||||||
<UBSlot Frequency="2075"/>
|
<UBSlot Frequency="2075"/>
|
||||||
<UBSlot Frequency="2125"/>
|
<UBSlot Frequency="2125"/>
|
||||||
</OutdoorUnit>
|
</OutdoorUnit>
|
||||||
<OutdoorUnit Name="MCR 221" Manufacturer="Fuba" Type="Switch" Protocol="EN50607" PowerupDelay="1000">
|
<OutdoorUnit Name="MCR 221" Manufacturer="Fuba" Type="Switch" Protocol="EN50607">
|
||||||
<UBSlot Frequency="1280"/>
|
<UBSlot Frequency="1280"/>
|
||||||
<UBSlot Frequency="1382"/>
|
<UBSlot Frequency="1382"/>
|
||||||
</OutdoorUnit>
|
</OutdoorUnit>
|
||||||
@ -1178,7 +868,7 @@
|
|||||||
<UBSlot Frequency="1280"/>
|
<UBSlot Frequency="1280"/>
|
||||||
<UBSlot Frequency="1382"/>
|
<UBSlot Frequency="1382"/>
|
||||||
</OutdoorUnit>
|
</OutdoorUnit>
|
||||||
<OutdoorUnit Name="MCR 441" Manufacturer="Fuba" Type="Switch" Protocol="EN50607" PowerupDelay="1000">
|
<OutdoorUnit Name="MCR 441" Manufacturer="Fuba" Type="Switch" Protocol="EN50607">
|
||||||
<UBSlot Frequency="1280"/>
|
<UBSlot Frequency="1280"/>
|
||||||
<UBSlot Frequency="1382"/>
|
<UBSlot Frequency="1382"/>
|
||||||
<UBSlot Frequency="1484"/>
|
<UBSlot Frequency="1484"/>
|
||||||
@ -1262,30 +952,4 @@
|
|||||||
<UBSlot Frequency="1790"/>
|
<UBSlot Frequency="1790"/>
|
||||||
<UBSlot Frequency="1892"/>
|
<UBSlot Frequency="1892"/>
|
||||||
</OutdoorUnit>
|
</OutdoorUnit>
|
||||||
<OutdoorUnit Name="H21dCSS" Manufacturer="Selfsat" Type="LNB" Protocol="EN50607" PowerupDelay="1000">
|
|
||||||
<UBSlot Frequency="1210" />
|
|
||||||
<UBSlot Frequency="1420" />
|
|
||||||
<UBSlot Frequency="1680" />
|
|
||||||
<UBSlot Frequency="2040" />
|
|
||||||
<UBSlot Frequency="1005" />
|
|
||||||
<UBSlot Frequency="1050" />
|
|
||||||
<UBSlot Frequency="1095" />
|
|
||||||
<UBSlot Frequency="1140" />
|
|
||||||
<UBSlot Frequency="1260" />
|
|
||||||
<UBSlot Frequency="1305" />
|
|
||||||
<UBSlot Frequency="1350" />
|
|
||||||
<UBSlot Frequency="1475" />
|
|
||||||
<UBSlot Frequency="1520" />
|
|
||||||
<UBSlot Frequency="1565" />
|
|
||||||
<UBSlot Frequency="1610" />
|
|
||||||
<UBSlot Frequency="1725" />
|
|
||||||
<UBSlot Frequency="1770" />
|
|
||||||
<UBSlot Frequency="1815" />
|
|
||||||
<UBSlot Frequency="1860" />
|
|
||||||
<UBSlot Frequency="1905" />
|
|
||||||
<UBSlot Frequency="1950" />
|
|
||||||
<UBSlot Frequency="1995" />
|
|
||||||
<UBSlot Frequency="2085" />
|
|
||||||
<UBSlot Frequency="2130" />
|
|
||||||
</OutdoorUnit>
|
|
||||||
</SCIFDataBase>
|
</SCIFDataBase>
|
File diff suppressed because it is too large
Load Diff
@ -4,7 +4,7 @@
|
|||||||
MenuItems = new Array();
|
MenuItems = new Array();
|
||||||
|
|
||||||
MenuItems.push( { Text:"Home", Link:"index.html" } );
|
MenuItems.push( { Text:"Home", Link:"index.html" } );
|
||||||
//MenuItems.push( { Text:"Browser TV", Link:"browsertv.html" } );
|
MenuItems.push( { Text:"Browser TV", Link:"browsertv.html" } );
|
||||||
MenuItems.push( { Text:"EPG", Link:"epg.html" } );
|
MenuItems.push( { Text:"EPG", Link:"epg.html" } );
|
||||||
MenuItems.push( { Text:"Stream Status", Link:"streamstatus.html" } );
|
MenuItems.push( { Text:"Stream Status", Link:"streamstatus.html" } );
|
||||||
MenuItems.push( { Text:"Tuner Status", Link:"tunerstatus.html" } );
|
MenuItems.push( { Text:"Tuner Status", Link:"tunerstatus.html" } );
|
||||||
|
@ -12,29 +12,6 @@
|
|||||||
<!-- Add page scripts here -->
|
<!-- Add page scripts here -->
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
|
|
||||||
var xmlhttp = new XMLHttpRequest();
|
|
||||||
var url = "/octoserve/tunerstatus.json";
|
|
||||||
|
|
||||||
xmlhttp.onreadystatechange=function()
|
|
||||||
{
|
|
||||||
if (xmlhttp.readyState == 4 )
|
|
||||||
{
|
|
||||||
if( xmlhttp.status == 200 )
|
|
||||||
myFunction(xmlhttp.responseText);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function myFunction(response)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
var tl = JSON.parse(response);
|
|
||||||
for(i= 0; i < tl.TunerList.length; i++ )
|
|
||||||
document.getElementById("trTuner"+i).style.display = "table-row";
|
|
||||||
}
|
|
||||||
catch(err) {}
|
|
||||||
}
|
|
||||||
|
|
||||||
SCIFEnabled = false;
|
SCIFEnabled = false;
|
||||||
SelectedManufacturer = 0;
|
SelectedManufacturer = 0;
|
||||||
SelectedUnit = 0;
|
SelectedUnit = 0;
|
||||||
@ -43,13 +20,13 @@ TunerList = new Array();
|
|||||||
function SetManufacturer(ManuIndex)
|
function SetManufacturer(ManuIndex)
|
||||||
{
|
{
|
||||||
if( SCIFEnabled ) document.getElementById("SetButton").disabled = false;
|
if( SCIFEnabled ) document.getElementById("SetButton").disabled = false;
|
||||||
|
|
||||||
SelectedManufacturer = ManuIndex;
|
SelectedManufacturer = ManuIndex;
|
||||||
document.Unit.Select.length = 0;
|
document.Unit.Select.length = 0;
|
||||||
for( j = 0; j < ManufacturerList[ManuIndex].UnitList.length; j++ )
|
for( j = 0; j < ManufacturerList[ManuIndex].UnitList.length; j++ )
|
||||||
{
|
{
|
||||||
document.Unit.Select.options[j] = new Option(ManufacturerList[ManuIndex].UnitList[j].Name,j, false, true);
|
document.Unit.Select.options[j] = new Option(ManufacturerList[ManuIndex].UnitList[j].Name,j, false, true);
|
||||||
}
|
}
|
||||||
SetUnit(ManufacturerList[ManuIndex].UnitList.length-1);
|
SetUnit(ManufacturerList[ManuIndex].UnitList.length-1);
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -59,7 +36,7 @@ function SetUnit(UnitIndex)
|
|||||||
if( SCIFEnabled ) document.getElementById("SetButton").disabled = false;
|
if( SCIFEnabled ) document.getElementById("SetButton").disabled = false;
|
||||||
|
|
||||||
SelectedUnit = UnitIndex;
|
SelectedUnit = UnitIndex;
|
||||||
|
|
||||||
for( i = 0; i < TunerList.length; i++ )
|
for( i = 0; i < TunerList.length; i++ )
|
||||||
{
|
{
|
||||||
TunerList[i].Select.length = 1;
|
TunerList[i].Select.length = 1;
|
||||||
@ -76,7 +53,7 @@ function SetUnit(UnitIndex)
|
|||||||
{
|
{
|
||||||
TunerList[i].Select.options[0].selected = true;
|
TunerList[i].Select.options[0].selected = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function SetSlot(Tuner,SlotIndex)
|
function SetSlot(Tuner,SlotIndex)
|
||||||
@ -89,7 +66,7 @@ function SaveSettings()
|
|||||||
if( SCIFEnabled )
|
if( SCIFEnabled )
|
||||||
{
|
{
|
||||||
CurUnit = ManufacturerList[SelectedManufacturer].UnitList[SelectedUnit];
|
CurUnit = ManufacturerList[SelectedManufacturer].UnitList[SelectedUnit];
|
||||||
Protocol = CurUnit.Protocol == "EN50607" ? '2' : '1';
|
Protocol = CurUnit.Protocol == "EN50607" ? '2' : '1';
|
||||||
param = 'Manufacturer='+SelectedManufacturer+'&Unit='+SelectedUnit+'&Type='+Protocol;
|
param = 'Manufacturer='+SelectedManufacturer+'&Unit='+SelectedUnit+'&Type='+Protocol;
|
||||||
for( i = 0; i < TunerList.length; i++ )
|
for( i = 0; i < TunerList.length; i++ )
|
||||||
{
|
{
|
||||||
@ -98,16 +75,16 @@ function SaveSettings()
|
|||||||
if( SelectedFrequency > 0 )
|
if( SelectedFrequency > 0 )
|
||||||
param += SelectedFrequency + ',' + CurUnit.Frequencies[SelectedFrequency-1];
|
param += SelectedFrequency + ',' + CurUnit.Frequencies[SelectedFrequency-1];
|
||||||
else
|
else
|
||||||
param += '0';
|
param += '0';
|
||||||
}
|
}
|
||||||
|
|
||||||
location.replace('/scifsettings.lua?'+param);
|
location.replace('/scifsettings.lua?'+param);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
location.replace('/scifsettings.lua?reset');
|
location.replace('/scifsettings.lua?reset');
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function SetEnable()
|
function SetEnable()
|
||||||
@ -120,19 +97,23 @@ function OnLoad()
|
|||||||
{
|
{
|
||||||
SCIFEnabled = false;
|
SCIFEnabled = false;
|
||||||
|
|
||||||
for( i = 0; i < 12 ; i++ )
|
TunerList[0] = document.Tuner1;
|
||||||
{
|
TunerList[1] = document.Tuner2;
|
||||||
TunerList[i] = document.getElementById("formTuner"+i);
|
TunerList[2] = document.Tuner3;
|
||||||
}
|
TunerList[3] = document.Tuner4;
|
||||||
|
TunerList[4] = document.Tuner5;
|
||||||
|
TunerList[5] = document.Tuner6;
|
||||||
|
TunerList[6] = document.Tuner7;
|
||||||
|
TunerList[7] = document.Tuner8;
|
||||||
|
|
||||||
document.Manufacturer.Select.length = 0;
|
document.Manufacturer.Select.length = 0;
|
||||||
for( i = 0; i < ManufacturerList.length ; i++ )
|
for( i = 0; i < ManufacturerList.length ; i++ )
|
||||||
{
|
{
|
||||||
ManuName = ManufacturerList[i].Name;
|
ManuName = ManufacturerList[i].Name;
|
||||||
if( ManuName == '' ) ManuName = "-----------------";
|
if( ManuName == '' ) ManuName = "-----------------";
|
||||||
document.Manufacturer.Select.options[i] = new Option(ManuName,i, false, true);
|
document.Manufacturer.Select.options[i] = new Option(ManuName,i, false, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
for( i = 0; i < Tuner.length; i++ )
|
for( i = 0; i < Tuner.length; i++ )
|
||||||
{
|
{
|
||||||
if( Tuner[i].Slot > 0 ) SCIFEnabled = true;
|
if( Tuner[i].Slot > 0 ) SCIFEnabled = true;
|
||||||
@ -160,8 +141,6 @@ function OnLoad()
|
|||||||
document.getElementById("EnableButton").checked = SCIFEnabled;
|
document.getElementById("EnableButton").checked = SCIFEnabled;
|
||||||
document.getElementById("SetButton").disabled = true;
|
document.getElementById("SetButton").disabled = true;
|
||||||
|
|
||||||
xmlhttp.open("GET", url, true);
|
|
||||||
xmlhttp.send();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
@ -190,7 +169,7 @@ function OnLoad()
|
|||||||
<td> </td>
|
<td> </td>
|
||||||
<td>
|
<td>
|
||||||
<form action="">
|
<form action="">
|
||||||
<input id="EnableButton" type="checkbox" value="Check" checked="false" onclick="SetEnable()">
|
<input id="EnableButton" type="checkbox" value="Check" checked="false" onclick="SetEnable()">
|
||||||
Enable Unicable (EN 50494 / EN 50607)
|
Enable Unicable (EN 50494 / EN 50607)
|
||||||
</form>
|
</form>
|
||||||
</td>
|
</td>
|
||||||
@ -217,22 +196,93 @@ function OnLoad()
|
|||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<script type="text/javascript">
|
<tr>
|
||||||
for( var i = 0; i < 12 ; i++ )
|
<td>Tuner 1</td>
|
||||||
{
|
<td>
|
||||||
// document.write('<tr id="trTuner'+i+'">');
|
<form name="Tuner1" action="">
|
||||||
document.write('<tr id="trTuner'+i+'" style="display:none">');
|
<select name="Select" size="1" style="width: 300px" onchange="SetSlot(1,document.Tuner1.Select.selectedIndex)">
|
||||||
document.write('<td>Tuner ' + (i+1) + '</td>');
|
<option>----</option>
|
||||||
document.write('<td>');
|
</select>
|
||||||
document.write('<form name="Tuner'+(i+1)+'" id="formTuner'+i+'" action="">');
|
</form>
|
||||||
document.write('<select name="Select" size="1" style="width: 300px" onchange="SetSlot(1,document.Tuner' +(i+1)+'.Select.selectedIndex)">');
|
</td>
|
||||||
document.write('</option>----</option>');
|
</tr>
|
||||||
document.write('</select>');
|
|
||||||
document.write('</form>');
|
<tr>
|
||||||
document.write('</td>');
|
<td>Tuner 2</td>
|
||||||
document.write('</tr>');
|
<td>
|
||||||
}
|
<form name="Tuner2" action="">
|
||||||
</script>
|
<select name="Select" size="1" style="width: 300px" onchange="SetSlot(2,document.Tuner2.Select.selectedIndex)">
|
||||||
|
<option>----</option>
|
||||||
|
</select>
|
||||||
|
</form>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td>Tuner 3</td>
|
||||||
|
<td>
|
||||||
|
<form name="Tuner3" action="">
|
||||||
|
<select name="Select" size="1" style="width: 300px" onchange="SetSlot(3,document.Tuner3.Select.selectedIndex)">
|
||||||
|
<option>----</option>
|
||||||
|
</select>
|
||||||
|
</form>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td>Tuner 4</td>
|
||||||
|
<td>
|
||||||
|
<form name="Tuner4" action="">
|
||||||
|
<select name="Select" size="1" style="width: 300px" onchange="SetSlot(4,document.Tuner4.Select.selectedIndex)">
|
||||||
|
<option>----</option>
|
||||||
|
</select>
|
||||||
|
</form>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td>Tuner 5</td>
|
||||||
|
<td>
|
||||||
|
<form name="Tuner5" action="">
|
||||||
|
<select name="Select" size="1" style="width: 300px" onchange="SetSlot(5,document.Tuner5.Select.selectedIndex)">
|
||||||
|
<option>----</option>
|
||||||
|
</select>
|
||||||
|
</form>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td>Tuner 6</td>
|
||||||
|
<td>
|
||||||
|
<form name="Tuner6" action="">
|
||||||
|
<select name="Select" size="1" style="width: 300px" onchange="SetSlot(6,document.Tuner6.Select.selectedIndex)">
|
||||||
|
<option>----</option>
|
||||||
|
</select>
|
||||||
|
</form>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td>Tuner 7</td>
|
||||||
|
<td>
|
||||||
|
<form name="Tuner7" action="">
|
||||||
|
<select name="Select" size="1" style="width: 300px" onchange="SetSlot(7,document.Tuner7.Select.selectedIndex)">
|
||||||
|
<option>----</option>
|
||||||
|
</select>
|
||||||
|
</form>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td>Tuner 8</td>
|
||||||
|
<td>
|
||||||
|
<form name="Tuner8" action="">
|
||||||
|
<select name="Select" size="1" style="width: 300px" onchange="SetSlot(8,document.Tuner8.Select.selectedIndex)">
|
||||||
|
<option>----</option>
|
||||||
|
</select>
|
||||||
|
</form>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
<tr><td colspan="2" align="right">
|
<tr><td colspan="2" align="right">
|
||||||
<div style="width: 300px">
|
<div style="width: 300px">
|
||||||
@ -243,7 +293,7 @@ function OnLoad()
|
|||||||
</div>
|
</div>
|
||||||
</td></tr>
|
</td></tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
<!-- End Content -->
|
<!-- End Content -->
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
|
@ -6,39 +6,12 @@
|
|||||||
<link rel="stylesheet" type="text/css" href="/style.css">
|
<link rel="stylesheet" type="text/css" href="/style.css">
|
||||||
<script type="text/javascript" src="/menu.js"></script>
|
<script type="text/javascript" src="/menu.js"></script>
|
||||||
<!-- Add included scripts here -->
|
<!-- Add included scripts here -->
|
||||||
<script type="text/javascript">Octoserve = false;</script>
|
|
||||||
<script type="text/javascript" src="/octoserve/serverinfo.js"></script>
|
|
||||||
|
|
||||||
<!-- Add page scripts here -->
|
<!-- Add page scripts here -->
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
|
|
||||||
var NewSettings = null;
|
var NewSettings = null;
|
||||||
var OldSettings = null;
|
var OldSettings = null;
|
||||||
|
|
||||||
var SupportedDelsys = 0;
|
|
||||||
|
|
||||||
var DelSysID = new Array();
|
|
||||||
DelSysID[ 0] = "SYS_UNDEFINED";
|
|
||||||
DelSysID[ 1] = "SYS_DVBC_ANNEX_A";
|
|
||||||
DelSysID[ 2] = "SYS_DVBC_ANNEX_B";
|
|
||||||
DelSysID[ 3] = "SYS_DVBT";
|
|
||||||
DelSysID[ 4] = "SYS_DSS";
|
|
||||||
DelSysID[ 5] = "SYS_DVBS";
|
|
||||||
DelSysID[ 6] = "SYS_DVBS2";
|
|
||||||
DelSysID[ 7] = "SYS_DVBH";
|
|
||||||
DelSysID[ 8] = "SYS_ISDBT";
|
|
||||||
DelSysID[ 9] = "SYS_ISDBS";
|
|
||||||
DelSysID[10] = "SYS_ISDBC";
|
|
||||||
DelSysID[11] = "SYS_ATSC";
|
|
||||||
DelSysID[12] = "SYS_ATSCMH";
|
|
||||||
DelSysID[13] = "SYS_DTMB";
|
|
||||||
DelSysID[14] = "SYS_CMMB";
|
|
||||||
DelSysID[15] = "SYS_DAB";
|
|
||||||
DelSysID[16] = "SYS_DVBT2";
|
|
||||||
DelSysID[17] = "SYS_TURBO";
|
|
||||||
DelSysID[18] = "SYS_DVBC_ANNEX_C";
|
|
||||||
DelSysID[19] = "SYS_DVBC2";
|
|
||||||
|
|
||||||
var xmlhttp = new XMLHttpRequest();
|
var xmlhttp = new XMLHttpRequest();
|
||||||
var url = "/systemsettings.lua";
|
var url = "/systemsettings.lua";
|
||||||
|
|
||||||
@ -71,19 +44,19 @@ function myFunction(response)
|
|||||||
document.getElementById("QOSButton").checked = settings.vlanEnabled;
|
document.getElementById("QOSButton").checked = settings.vlanEnabled;
|
||||||
document.getElementById("TelnetButton").checked = settings.telnetEnabled;
|
document.getElementById("TelnetButton").checked = settings.telnetEnabled;
|
||||||
document.getElementById("NODMSButton").checked = settings.nodmsEnabled;
|
document.getElementById("NODMSButton").checked = settings.nodmsEnabled;
|
||||||
|
document.getElementById("NODVBTButton").checked = settings.nodvbtEnabled;
|
||||||
document.getElementById("STRICTButton").checked = settings.strictEnabled;
|
document.getElementById("STRICTButton").checked = settings.strictEnabled;
|
||||||
|
|
||||||
document.getElementById("QOSButton").disabled = false;
|
document.getElementById("QOSButton").disabled = false;
|
||||||
document.getElementById("TelnetButton").disabled = false;
|
document.getElementById("TelnetButton").disabled = false;
|
||||||
document.getElementById("NODMSButton").disabled = false;
|
document.getElementById("NODMSButton").disabled = false;
|
||||||
|
document.getElementById("NODVBTButton").disabled = false;
|
||||||
document.getElementById("STRICTButton").disabled = false;
|
document.getElementById("STRICTButton").disabled = false;
|
||||||
document.getElementById("BoxName").disabled = false;
|
document.getElementById("BoxName").disabled = false;
|
||||||
document.getElementById("MSMode").disabled = false;
|
document.getElementById("MSMode").disabled = false;
|
||||||
|
|
||||||
OldSettings = settings;
|
OldSettings = settings;
|
||||||
NewSettings = JSON.parse(response);
|
NewSettings = JSON.parse(response);
|
||||||
if( Octoserve )
|
|
||||||
NewSettings.DelsysMask = Octoserve.DelsysMask;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function SaveSettings()
|
function SaveSettings()
|
||||||
@ -95,52 +68,47 @@ function SaveSettings()
|
|||||||
{
|
{
|
||||||
if( param != "" ) param += "&";
|
if( param != "" ) param += "&";
|
||||||
param += "boxname=" + encodeURIComponent(NewSettings.BoxName);
|
param += "boxname=" + encodeURIComponent(NewSettings.BoxName);
|
||||||
}
|
}
|
||||||
|
|
||||||
if( OldSettings.telnetEnabled != NewSettings.telnetEnabled )
|
if( OldSettings.telnetEnabled != NewSettings.telnetEnabled )
|
||||||
{
|
{
|
||||||
if( param != "" ) param += "&";
|
if( param != "" ) param += "&";
|
||||||
param += "telnet=" + (NewSettings.telnetEnabled?"1":"0");
|
param += "telnet=" + (NewSettings.telnetEnabled?"1":"0");
|
||||||
}
|
}
|
||||||
|
|
||||||
if( OldSettings.vlanEnabled != NewSettings.vlanEnabled )
|
if( OldSettings.vlanEnabled != NewSettings.vlanEnabled )
|
||||||
{
|
{
|
||||||
if( param != "" ) param += "&";
|
if( param != "" ) param += "&";
|
||||||
param += "vlan=" + (NewSettings.vlanEnabled?"1":"0");
|
param += "vlan=" + (NewSettings.vlanEnabled?"1":"0");
|
||||||
}
|
}
|
||||||
|
|
||||||
if( OldSettings.nodmsEnabled != NewSettings.nodmsEnabled )
|
if( OldSettings.nodmsEnabled != NewSettings.nodmsEnabled )
|
||||||
{
|
{
|
||||||
if( param != "" ) param += "&";
|
if( param != "" ) param += "&";
|
||||||
param += "nodms=" + (NewSettings.nodmsEnabled?"1":"0");
|
param += "nodms=" + (NewSettings.nodmsEnabled?"1":"0");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if( OldSettings.nodvbtEnabled != NewSettings.nodvbtEnabled )
|
||||||
|
{
|
||||||
|
if( param != "" ) param += "&";
|
||||||
|
param += "nodvbt=" + (NewSettings.nodvbtEnabled?"1":"0");
|
||||||
|
}
|
||||||
|
|
||||||
if( OldSettings.MSMode != NewSettings.MSMode )
|
if( OldSettings.MSMode != NewSettings.MSMode )
|
||||||
{
|
{
|
||||||
if( param != "" ) param += "&";
|
if( param != "" ) param += "&";
|
||||||
param += "msmode=" + NewSettings.MSMode;
|
param += "msmode=" + NewSettings.MSMode;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( OldSettings.strictEnabled != NewSettings.strictEnabled )
|
if( OldSettings.strictEnabled != NewSettings.strictEnabled )
|
||||||
{
|
{
|
||||||
if( param != "" ) param += "&";
|
if( param != "" ) param += "&";
|
||||||
param += "strict=" + (NewSettings.strictEnabled?"1":"0");
|
param += "strict=" + (NewSettings.strictEnabled?"1":"0");
|
||||||
}
|
}
|
||||||
|
|
||||||
if( Octoserve )
|
|
||||||
{
|
|
||||||
var DelsysMask = NewSettings.DelsysMask;
|
|
||||||
if( DelsysMask != Octoserve.DelsysMask )
|
|
||||||
{
|
|
||||||
if( DelsysMask == SupportedDelsys ) DelsysMask = 0;
|
|
||||||
if( param != "" ) param += "&";
|
|
||||||
param += "delsysmask=" + DelsysMask;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
document.getElementById("SetButton").disabled = true;
|
document.getElementById("SetButton").disabled = true;
|
||||||
if( param != "" )
|
if( param != "" )
|
||||||
{
|
{
|
||||||
location.replace('/systemsettings.lua?'+param);
|
location.replace('/systemsettings.lua?'+param);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -157,59 +125,14 @@ function ClearSettings()
|
|||||||
NewSettings.nodvbtEnabled = false;
|
NewSettings.nodvbtEnabled = false;
|
||||||
NewSettings.strictEnabled = false;
|
NewSettings.strictEnabled = false;
|
||||||
NewSettings.MSMode = "quad";
|
NewSettings.MSMode = "quad";
|
||||||
NewSettings.DelsysMask = 0;
|
|
||||||
SaveSettings();
|
SaveSettings();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function ShowDelsys()
|
|
||||||
{
|
|
||||||
if( Octoserve )
|
|
||||||
{
|
|
||||||
SupportedDelsys = 0;
|
|
||||||
for(var i = 0; i < Octoserve.TunerList.length; i++ )
|
|
||||||
{
|
|
||||||
if( Octoserve.TunerList[i] )
|
|
||||||
{
|
|
||||||
SupportedDelsys = SupportedDelsys | Octoserve.TunerList[i].Type;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for(var i = 0; i < DelSysID.length; i++ )
|
|
||||||
{
|
|
||||||
var Element = document.getElementById(DelSysID[i]);
|
|
||||||
if( Element )
|
|
||||||
{
|
|
||||||
if( SupportedDelsys & (1<<i) )
|
|
||||||
{
|
|
||||||
Element.disabled = false;
|
|
||||||
Element.checked = (( Octoserve.DelsysMask & (1<<i)) != 0) || (Octoserve.DelsysMask == 0);
|
|
||||||
Element.parentElement.style.visibility = "visible";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Element.disabled = true;
|
|
||||||
Element.checked = false;
|
|
||||||
Element.parentElement.style.visibility = "hidden";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
SupportedDelsys &= ~(1<<i);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for(var i = DelSysID.length; i < 32; i++ )
|
|
||||||
{
|
|
||||||
SupportedDelsys &= ~(1<<i);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function OnLoad()
|
function OnLoad()
|
||||||
{
|
{
|
||||||
xmlhttp.open("GET", url, true);
|
xmlhttp.open("GET", url, true);
|
||||||
xmlhttp.send();
|
xmlhttp.send();
|
||||||
ShowDelsys();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function ChangeBoxName()
|
function ChangeBoxName()
|
||||||
@ -224,6 +147,8 @@ function ChangeBoxName()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function Change()
|
function Change()
|
||||||
{
|
{
|
||||||
if( NewSettings )
|
if( NewSettings )
|
||||||
@ -232,54 +157,12 @@ function Change()
|
|||||||
NewSettings.vlanEnabled = document.getElementById("QOSButton").checked;
|
NewSettings.vlanEnabled = document.getElementById("QOSButton").checked;
|
||||||
NewSettings.telnetEnabled = document.getElementById("TelnetButton").checked;
|
NewSettings.telnetEnabled = document.getElementById("TelnetButton").checked;
|
||||||
NewSettings.nodmsEnabled = document.getElementById("NODMSButton").checked;
|
NewSettings.nodmsEnabled = document.getElementById("NODMSButton").checked;
|
||||||
|
NewSettings.nodvbtEnabled = document.getElementById("NODVBTButton").checked;
|
||||||
NewSettings.strictEnabled = document.getElementById("STRICTButton").checked;
|
NewSettings.strictEnabled = document.getElementById("STRICTButton").checked;
|
||||||
document.getElementById("SetButton").disabled = false;
|
document.getElementById("SetButton").disabled = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function ChangeDelSys(delsys)
|
|
||||||
{
|
|
||||||
if( NewSettings )
|
|
||||||
{
|
|
||||||
if( NewSettings.DelsysMask == 0 )
|
|
||||||
NewSettings.DelsysMask = SupportedDelsys;
|
|
||||||
|
|
||||||
var Element = document.getElementById(DelSysID[delsys]);
|
|
||||||
if( Element )
|
|
||||||
{
|
|
||||||
if( Element.checked )
|
|
||||||
{
|
|
||||||
NewSettings.DelsysMask |= ((1<<delsys) & SupportedDelsys);
|
|
||||||
if( delsys == 16 )
|
|
||||||
{
|
|
||||||
NewSettings.DelsysMask |= (1<<3);
|
|
||||||
document.getElementById(DelSysID[3]).checked = true;
|
|
||||||
}
|
|
||||||
if( delsys == 6 )
|
|
||||||
{
|
|
||||||
NewSettings.DelsysMask |= (1<<5);
|
|
||||||
document.getElementById(DelSysID[5]).checked = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
NewSettings.DelsysMask &= ~(1<<delsys);
|
|
||||||
if( delsys == 3 )
|
|
||||||
{
|
|
||||||
NewSettings.DelsysMask &= ~(1<<16);
|
|
||||||
document.getElementById(DelSysID[16]).checked = false;
|
|
||||||
}
|
|
||||||
if( delsys == 5 )
|
|
||||||
{
|
|
||||||
NewSettings.DelsysMask &= ~(1<<6);
|
|
||||||
document.getElementById(DelSysID[6]).checked = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
document.getElementById("SetButton").disabled = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function SetPassword()
|
function SetPassword()
|
||||||
{
|
{
|
||||||
var pwd1 = document.getElementById("pwd1").value;
|
var pwd1 = document.getElementById("pwd1").value;
|
||||||
@ -292,7 +175,7 @@ function SetPassword()
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
document.getElementById("PwdError").style = "color:#FFFFFF";
|
document.getElementById("PwdError").style = "color:#FFFFFF";
|
||||||
location.replace('/setpasswd.lua?'+pwd1);
|
location.replace('/setpasswd.lua?'+pwd1);
|
||||||
}
|
}
|
||||||
|
|
||||||
function ToggleHelp(id)
|
function ToggleHelp(id)
|
||||||
@ -301,7 +184,7 @@ function ToggleHelp(id)
|
|||||||
if( el.style.display == "none")
|
if( el.style.display == "none")
|
||||||
el.style.display = "block";
|
el.style.display = "block";
|
||||||
else
|
else
|
||||||
el.style.display = "none";
|
el.style.display = "none";
|
||||||
}
|
}
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
@ -328,7 +211,7 @@ function ToggleHelp(id)
|
|||||||
<td>Server name</td>
|
<td>Server name</td>
|
||||||
<td style="text-align:left" colspan="2">
|
<td style="text-align:left" colspan="2">
|
||||||
<form action="">
|
<form action="">
|
||||||
<input id="BoxName" type="text" value="" style="width: 300px" maxlength="20"
|
<input id="BoxName" type="text" value="" style="width: 300px" maxlength="20"
|
||||||
pattern="[a-zA-Z0-9@ ()-]" disabled="true" oninput="ChangeBoxName()" />
|
pattern="[a-zA-Z0-9@ ()-]" disabled="true" oninput="ChangeBoxName()" />
|
||||||
</form>
|
</form>
|
||||||
</td>
|
</td>
|
||||||
@ -354,7 +237,7 @@ function ToggleHelp(id)
|
|||||||
</td>
|
</td>
|
||||||
<td>Enable it at your own risk</td>
|
<td>Enable it at your own risk</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td>Disable DMS announcement</td>
|
<td>Disable DMS announcement</td>
|
||||||
<td style="text-align:right">
|
<td style="text-align:right">
|
||||||
@ -366,7 +249,17 @@ function ToggleHelp(id)
|
|||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td>Enforce strict SAT>IP</td>
|
<td>Disable DVBT announcement</td>
|
||||||
|
<td style="text-align:right">
|
||||||
|
<form action="">
|
||||||
|
<input id="NODVBTButton" type="checkbox" value="Check" disabled="true" checked="false" onclick="Change()" />
|
||||||
|
</form>
|
||||||
|
</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td>Enforce strict SAT>IP</td>
|
||||||
<td style="text-align:right">
|
<td style="text-align:right">
|
||||||
<form action="">
|
<form action="">
|
||||||
<input id="STRICTButton" type="checkbox" value="Check" disabled="true" checked="false" onclick="Change()" />
|
<input id="STRICTButton" type="checkbox" value="Check" disabled="true" checked="false" onclick="Change()" />
|
||||||
@ -394,68 +287,7 @@ function ToggleHelp(id)
|
|||||||
<a href="javascript:ToggleHelp('nosw_hlpD')">Deutsch</a>
|
<a href="javascript:ToggleHelp('nosw_hlpD')">Deutsch</a>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
|
||||||
<td colspan="3" >
|
|
||||||
<form action="">
|
|
||||||
<table id="delsystable" cellpadding="2px" align="center" width="100%">
|
|
||||||
<colgroup>
|
|
||||||
<col width="25%">
|
|
||||||
<col width="25%">
|
|
||||||
<col width="25%">
|
|
||||||
<col width="25%">
|
|
||||||
</colgroup>
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
<input id="SYS_DVBS" type="checkbox" disabled="true" checked="false" onclick="ChangeDelSys(5)"/>
|
|
||||||
DVB-S
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<input id="SYS_DVBS2" type="checkbox" disabled="true" checked="false" onclick="ChangeDelSys(6)"/>
|
|
||||||
DVB-S2/S2X
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<input id="SYS_ISDBS" type="checkbox" disabled="true" checked="false" onclick="ChangeDelSys(9)"/>
|
|
||||||
ISDB-S
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
<input id="SYS_DVBT" type="checkbox" disabled="true" checked="false" onclick="ChangeDelSys(3)"/>
|
|
||||||
DVB-T
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<input id="SYS_DVBT2" type="checkbox" disabled="true" checked="false" onclick="ChangeDelSys(16)"/>
|
|
||||||
DVB-T2
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<input id="SYS_ISDBT" type="checkbox" disabled="true" checked="false" onclick="ChangeDelSys(8)"/>
|
|
||||||
ISDB-T
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
<input id="SYS_DVBC_ANNEX_A" type="checkbox" disabled="true" checked="false" onclick="ChangeDelSys(1)"/>
|
|
||||||
DVB-C
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<input id="SYS_DVBC2" type="checkbox" disabled="true" checked="false" onclick="ChangeDelSys(19)"/>
|
|
||||||
DVB-C2
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<input id="SYS_ISDBC" type="checkbox" disabled="true" checked="false" onclick="ChangeDelSys(10)"/>
|
|
||||||
ISDB-C
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<input id="SYS_DVBC_ANNEX_B" type="checkbox" disabled="true" checked="false" onclick="ChangeDelSys(4)"/>
|
|
||||||
J83.B
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
</form>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="2" align="right">
|
<td colspan="2" align="right">
|
||||||
<div style="width: 300px">
|
<div style="width: 300px">
|
||||||
@ -503,7 +335,7 @@ function ToggleHelp(id)
|
|||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
<div id="qos_hlpE" onclick="ToggleHelp('qos_hlpE')"
|
<div id="qos_hlpE" onclick="ToggleHelp('qos_hlpE')"
|
||||||
style="display: none; position: absolute; width: 660px; left: 30px; top:30px; z-index: 2; border: 1px solid #000000; background: #FFFFE0;">
|
style="display: none; position: absolute; width: 660px; left: 30px; top:30px; z-index: 2; border: 1px solid #000000; background: #FFFFE0;">
|
||||||
<div style="position: relative; margin:20px; clear:both">
|
<div style="position: relative; margin:20px; clear:both">
|
||||||
<h3>Layer 2 Quality of Service</h3>
|
<h3>Layer 2 Quality of Service</h3>
|
||||||
This is defined in the <b>IEEE 802.1Q</b> VLAN standard, and provides QoS in a local network.<br/>
|
This is defined in the <b>IEEE 802.1Q</b> VLAN standard, and provides QoS in a local network.<br/>
|
||||||
@ -517,8 +349,8 @@ function ToggleHelp(id)
|
|||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div id="qos_hlpD" onclick="ToggleHelp('qos_hlpD')"
|
<div id="qos_hlpD" onclick="ToggleHelp('qos_hlpD')"
|
||||||
style="display: none; position: absolute; width: 660px; left: 30px; top:30px; z-index: 2; border: 1px solid #000000; background: #FFFFE0;">
|
style="display: none; position: absolute; width: 660px; left: 30px; top:30px; z-index: 2; border: 1px solid #000000; background: #FFFFE0;">
|
||||||
<div style="position: relative; margin:20px; clear:both">
|
<div style="position: relative; margin:20px; clear:both">
|
||||||
<h3>Layer 2 Quality of Service</h3>
|
<h3>Layer 2 Quality of Service</h3>
|
||||||
Dies ist im <b>IEEE 802.1Q</b> VLAN Standard definiert und erlaubt QoS im lokalem Netz.<br/>
|
Dies ist im <b>IEEE 802.1Q</b> VLAN Standard definiert und erlaubt QoS im lokalem Netz.<br/>
|
||||||
@ -533,7 +365,7 @@ function ToggleHelp(id)
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div id="nosw_hlpE" onclick="ToggleHelp('nosw_hlpE')"
|
<div id="nosw_hlpE" onclick="ToggleHelp('nosw_hlpE')"
|
||||||
style="display: none; position: absolute; width: 660px; left: 30px; top:30px; z-index: 2; border: 1px solid #000000; background: #FFFFE0;">
|
style="display: none; position: absolute; width: 660px; left: 30px; top:30px; z-index: 2; border: 1px solid #000000; background: #FFFFE0;">
|
||||||
<div style="position: relative; margin:20px; clear:both">
|
<div style="position: relative; margin:20px; clear:both">
|
||||||
<h3>Multiswitch emulation on OctopusNet S8</h3>
|
<h3>Multiswitch emulation on OctopusNet S8</h3>
|
||||||
Multiswitch emulation allows to connect directly a Quad/Quattro LNB to the 4 inputs on the S8.
|
Multiswitch emulation allows to connect directly a Quad/Quattro LNB to the 4 inputs on the S8.
|
||||||
@ -548,7 +380,7 @@ function ToggleHelp(id)
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div id="nosw_hlpD" onclick="ToggleHelp('nosw_hlpD')"
|
<div id="nosw_hlpD" onclick="ToggleHelp('nosw_hlpD')"
|
||||||
style="display: none; position: absolute; width: 660px; left: 30px; top:30px; z-index: 2; border: 1px solid #000000; background: #FFFFE0;">
|
style="display: none; position: absolute; width: 660px; left: 30px; top:30px; z-index: 2; border: 1px solid #000000; background: #FFFFE0;">
|
||||||
<div style="position: relative; margin:20px; clear:both">
|
<div style="position: relative; margin:20px; clear:both">
|
||||||
<h3>Multischalter-Emulation OctopusNet S8</h3>
|
<h3>Multischalter-Emulation OctopusNet S8</h3>
|
||||||
Multischalter-Emulation erlaubt den direkten Anschluß eines Quad/Quattro LNB an die S8
|
Multischalter-Emulation erlaubt den direkten Anschluß eines Quad/Quattro LNB an die S8
|
||||||
@ -559,33 +391,33 @@ function ToggleHelp(id)
|
|||||||
<li>Für einen Quattro LNB oder für den Stammausgang eines Multiswitches Quattro Einstellung auswählen.</li>
|
<li>Für einen Quattro LNB oder für den Stammausgang eines Multiswitches Quattro Einstellung auswählen.</li>
|
||||||
</ul>
|
</ul>
|
||||||
<p/>
|
<p/>
|
||||||
In der Quad oder Quattro Einstellung wird nur der Empfang eines Satelliten unterstützt. Für volle Flexibilität wird der Einsatz eines EN50607 LNB bzw Switch empfohlen.
|
In der Quad oder Quattro Einstellung wird nur der Empfang eines Satelliten unterstützt. Für volle Flexibilität wird der Einsatz eines EN50607 LNB bzw Switch empfohlen.
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div id="strict_hlpE" onclick="ToggleHelp('strict_hlpE')"
|
<div id="strict_hlpE" onclick="ToggleHelp('strict_hlpE')"
|
||||||
style="display: none; position: absolute; width: 660px; left: 30px; top:30px; z-index: 2; border: 1px solid #000000; background: #FFFFE0;">
|
style="display: none; position: absolute; width: 660px; left: 30px; top:30px; z-index: 2; border: 1px solid #000000; background: #FFFFE0;">
|
||||||
<div style="position: relative; margin:20px; clear:both">
|
<div style="position: relative; margin:20px; clear:both">
|
||||||
<h3>Enforce strict SAT>IP</h3>
|
<h3>Enforce strict SAT>IP</h3>
|
||||||
<p/>
|
<p/>
|
||||||
The SAT>IP specification allows a second client to receive a stream created by another client.
|
The SAT>IP specification allows a second client to receive a stream created by another client.
|
||||||
The OctopusNet allows to modify some parameters (like PIDs) on this second stream. The original stream is not affected by this.
|
The OctopusNet allows to modify some parameters (like PIDs) on this second stream. The original stream is not affected by this.
|
||||||
<p/>
|
<p/>
|
||||||
Enforce strict SAT>IP disables this enhancment.
|
Enforce strict SAT>IP disables this enhancment.
|
||||||
<br/>
|
<br/>
|
||||||
Do this for testing clients to ensure they are compatible with other SAT>IP servers
|
Do this for testing clients to ensure they are compatible with other SAT>IP servers
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div id="strict_hlpD" onclick="ToggleHelp('strict_hlpD')"
|
<div id="strict_hlpD" onclick="ToggleHelp('strict_hlpD')"
|
||||||
style="display: none; position: absolute; width: 660px; left: 30px; top:30px; z-index: 2; border: 1px solid #000000; background: #FFFFE0;">
|
style="display: none; position: absolute; width: 660px; left: 30px; top:30px; z-index: 2; border: 1px solid #000000; background: #FFFFE0;">
|
||||||
<div style="position: relative; margin:20px; clear:both">
|
<div style="position: relative; margin:20px; clear:both">
|
||||||
<h3>Erzwinge striktes SAT>IP</h3>
|
<h3>Erzwinge striktes SAT>IP</h3>
|
||||||
<p/>
|
<p/>
|
||||||
Die SAT>IP Spezifikation erlaubt einem zweiten Client das Empfangen eines von einem anderen Client angelegten Stream. Die OctopusNet erlaubt
|
Die SAT>IP Spezifikation erlaubt einem zweiten Client das Empfangen eines von einem anderen Client angelegten Stream. Die OctopusNet erlaubt
|
||||||
die Änderung einiger Parameter (z.B. PIDs) für diesen Stream. Der orginale Stream wird dadurch nicht beeinflusst.
|
die Änderung einiger Parameter (z.B. PIDs) für diesen Stream. Der orginale Stream wird dadurch nicht beeinflusst.
|
||||||
<p/>
|
<p/>
|
||||||
Das Erzwingen von strikten SAT>IP schaltet diese Erweiterung ab.
|
Das Erzwingen von strikten SAT>IP schaltet diese Erweiterung ab.
|
||||||
<br/>
|
<br/>
|
||||||
Beim Testen von Clients ist es sinnvoll diesen Parameter zu setzen um die Kompatibilität mit anderen SAT>IP Servern sicherzustellen.
|
Beim Testen von Clients ist es sinnvoll diesen Parameter zu setzen um die Kompatibilität mit anderen SAT>IP Servern sicherzustellen.
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- End Content -->
|
<!-- End Content -->
|
||||||
@ -597,3 +429,5 @@ function ToggleHelp(id)
|
|||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
||||||
|
</html>
|
||||||
|
@ -66,12 +66,6 @@ function CheckMaxS8()
|
|||||||
if devid == "0007dd01" then
|
if devid == "0007dd01" then
|
||||||
isMaxS8 = "true"
|
isMaxS8 = "true"
|
||||||
end
|
end
|
||||||
if devid == "0009dd01" then
|
|
||||||
isMaxS8 = "true"
|
|
||||||
end
|
|
||||||
if devid == "000bdd01" then
|
|
||||||
isMaxS8 = "true"
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
return isMaxS8
|
return isMaxS8
|
||||||
end
|
end
|
||||||
@ -162,20 +156,13 @@ if query ~= "" then
|
|||||||
end
|
end
|
||||||
restart = 1;
|
restart = 1;
|
||||||
restartdms = 1;
|
restartdms = 1;
|
||||||
elseif name == "delsysmask" then
|
|
||||||
if value ~= "0" then
|
|
||||||
WriteConfigFile("delsys_mask",value)
|
|
||||||
os.remove("/config/nodvbt.enabled")
|
|
||||||
else
|
|
||||||
os.remove("/config/delsys_mask")
|
|
||||||
end
|
|
||||||
restart = 1;
|
|
||||||
elseif( WriteSetting(name,value == "1") ) then
|
elseif( WriteSetting(name,value == "1") ) then
|
||||||
if name == "telnet" then
|
if name == "telnet" then
|
||||||
os.execute("/etc/init.d/S91telnet restart")
|
os.execute("/etc/init.d/S91telnet restart")
|
||||||
end
|
end
|
||||||
if name == "vlan" then restart = 1 end
|
if name == "vlan" then restart = 1 end
|
||||||
if name == "nodms" then restart = 1 end
|
if name == "nodms" then restart = 1 end
|
||||||
|
if name == "nodvbt" then restart = 1 end
|
||||||
if name == "strict" then restart = 1 end
|
if name == "strict" then restart = 1 end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -206,6 +193,7 @@ else
|
|||||||
http_print(' "telnetEnabled":' .. ReadSetting('telnet') .. ',')
|
http_print(' "telnetEnabled":' .. ReadSetting('telnet') .. ',')
|
||||||
http_print(' "vlanEnabled":' .. ReadSetting('vlan') .. ',')
|
http_print(' "vlanEnabled":' .. ReadSetting('vlan') .. ',')
|
||||||
http_print(' "nodmsEnabled":' .. ReadSetting('nodms') .. ',')
|
http_print(' "nodmsEnabled":' .. ReadSetting('nodms') .. ',')
|
||||||
|
http_print(' "nodvbtEnabled":' .. ReadSetting('nodvbt') .. ',')
|
||||||
http_print(' "MSMode":"' .. GetMSMode() .. '",')
|
http_print(' "MSMode":"' .. GetMSMode() .. '",')
|
||||||
http_print(' "strictEnabled":' .. ReadSetting('strict'))
|
http_print(' "strictEnabled":' .. ReadSetting('strict'))
|
||||||
|
|
||||||
|
@ -52,7 +52,7 @@ function Show(TunerList)
|
|||||||
if( TunerList[i].Status == "Active" )
|
if( TunerList[i].Status == "Active" )
|
||||||
document.getElementById("tdStatus"+i).firstChild.nodeValue = "No Signal";
|
document.getElementById("tdStatus"+i).firstChild.nodeValue = "No Signal";
|
||||||
else
|
else
|
||||||
document.getElementById("tdStatus"+i).firstChild.nodeValue = "IDLE";
|
document.getElementById("tdStatus"+i).firstChild.nodeValue = "";
|
||||||
document.getElementById("tdStrength"+i).firstChild.nodeValue = "";
|
document.getElementById("tdStrength"+i).firstChild.nodeValue = "";
|
||||||
document.getElementById("tdSNR"+i).firstChild.nodeValue = "";
|
document.getElementById("tdSNR"+i).firstChild.nodeValue = "";
|
||||||
document.getElementById("tdQuality"+i).firstChild.nodeValue = "";
|
document.getElementById("tdQuality"+i).firstChild.nodeValue = "";
|
||||||
|
@ -19,5 +19,5 @@
|
|||||||
|
|
||||||
#ifndef _OCTOSERVE_VERSION_
|
#ifndef _OCTOSERVE_VERSION_
|
||||||
#define _OCTOSERVE_VERSION_
|
#define _OCTOSERVE_VERSION_
|
||||||
#define OCTOSERVE_VERSION "1.1.6"
|
#define OCTOSERVE_VERSION "1.0.81"
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user