1
0
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.

25 changed files with 7864 additions and 41407 deletions

View File

@ -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

View File

@ -2,7 +2,6 @@
case "$1" in case "$1" in
start) start)
/etc/recflash
/usr/bin/ddflash /usr/bin/ddflash
;; ;;
esac esac

View File

@ -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
View File

@ -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/

View File

@ -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 ) {

View File

@ -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);

View File

@ -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;
} }

View File

@ -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]);

View File

@ -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)

View File

@ -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 *));

View File

@ -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

View File

@ -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

View File

@ -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
View 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

View File

@ -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

View File

@ -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" } );

View File

@ -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>&nbsp;</td> <td>&nbsp;</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>

View File

@ -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&gt;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&szlig; eines Quad/Quattro LNB an die S8 Multischalter-Emulation erlaubt den direkten Anschlu&szlig; eines Quad/Quattro LNB an die S8
@ -559,33 +391,33 @@ function ToggleHelp(id)
<li>Für einen Quattro LNB oder f&uuml;r den Stammausgang eines Multiswitches Quattro Einstellung ausw&auml;hlen.</li> <li>Für einen Quattro LNB oder f&uuml;r den Stammausgang eines Multiswitches Quattro Einstellung ausw&auml;hlen.</li>
</ul> </ul>
<p/> <p/>
In der Quad oder Quattro Einstellung wird nur der Empfang eines Satelliten unterst&uuml;tzt. Für volle Flexibilit&auml;t wird der Einsatz eines EN50607 LNB bzw Switch empfohlen. In der Quad oder Quattro Einstellung wird nur der Empfang eines Satelliten unterst&uuml;tzt. Für volle Flexibilit&auml;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&gt;IP</h3> <h3>Enforce strict SAT>IP</h3>
<p/> <p/>
The SAT&gt;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&gt;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&gt;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&gt;IP</h3> <h3>Erzwinge striktes SAT>IP</h3>
<p/> <p/>
Die SAT&gt;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 &Auml;nderung einiger Parameter (z.B. PIDs) für diesen Stream. Der orginale Stream wird dadurch nicht beeinflusst. die &Auml;nderung einiger Parameter (z.B. PIDs) für diesen Stream. Der orginale Stream wird dadurch nicht beeinflusst.
<p/> <p/>
Das Erzwingen von strikten SAT&gt;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&auml;t mit anderen SAT&gt;IP Servern sicherzustellen. Beim Testen von Clients ist es sinnvoll diesen Parameter zu setzen um die Kompatibilit&auml;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>

View File

@ -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'))

View File

@ -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 = "";

View File

@ -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