[w-scan] 01/05: New upstream version 20161022
Tobias Grimm
tiber-guest at moszumanska.debian.org
Sat Nov 5 10:22:35 UTC 2016
This is an automated email from the git hooks/post-receive script.
tiber-guest pushed a commit to branch master
in repository w-scan.
commit 822fdb48e37fff05feea1e2e591896eab88a708a
Author: Tobias Grimm <git at e-tobi.net>
Date: Sat Nov 5 09:57:31 2016 +0100
New upstream version 20161022
---
ChangeLog | 35 +++++
config.h | 6 +-
configure | 20 +--
configure.in | 2 +-
countries.c | 57 ++++++-
countries.h | 4 +
descriptors.c | 337 +++++++++++++++++++-----------------------
diseqc.c | 2 +-
dump-vdr.c | 221 +++++++++++++++++++--------
dump-xml.c | 10 +-
emulate.c | 163 ++++++++++++++++++--
satellites.dat | 460 +++++++++++++++++++++++++++++++--------------------------
satellites.h | 1 +
scan.c | 308 ++++++++++++++++++++------------------
si_types.h | 29 ++--
tools.c | 82 +++++++++-
tools.h | 3 +-
version.h | 2 +-
18 files changed, 1087 insertions(+), 655 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 66fade6..ea76c3b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,40 @@
ChangeLog:
--------------------
+2015-01-01
+ - check data for descriptor 0x83 to be multiple of 4bytes;
+ On S4E8 0x83 seems to be used for something different as LCN and
+ caused segfault if read in 4byte packets.
+ May be this abuse of 0x83 renders parsing of LCN unusable at all.
+ - find_transponder_by_freq(): fix logging (add missing print_transponder() calls)
+ - emulated dvb device;
+ now accept DVB-S/S2 logs down to 20130331. However, logs earlier
+ than 20140529 are missing last two bytes in SI data hexdumps. :(
+ - modify scan algorithm for tsid, onid, nid;
+ On S4E8, PAT transports wrong transport_stream_id - and therefore
+ scan was endless loop. :(
+ This was actually not an w_scan error, it is an error in sats si
+ tables.
+ 1. find_transponder()
+ - now do a strict check for (ONID,NID,TSID); check all 3 pids.
+ 2. check_duplicate_transponders()
+ - copy NIT updated tp props from deleted tp to remaining tp,
+ if remaining tp was not yet updated. Sync ids as well.
+ - new function copy_duplicate_tp() to not have this copy several times.
+ 3. parse_pat()
+ - update tsid for TERR scans only. On terr scans, freq may be '0' or
+ completely wrong in NIT and find_transponder_by_freq() cannot find
+ those transponders otherwise.
+ 4. parse_nit()
+ - move update of (ONID,NID,TSID) to later position, where also tp props
+ are updated. Code easier to read this way.
+ - call check_duplicate_transponders() as soon as new tp was added from
+ NIT.
+ 5. tune_to_transponder()
+ - add missing polarization check for sat - this one is a bug fix.
+ - vdr output: update translation table for satname: w_scan <-> VDR
+ - scr_cmd: fix FE_DISEQC_SEND_MASTER_CMD data pointer.
+ - update S4E8 transponder list
+
2014-11-22
- move '-lrt' from LDFLAGS to AM_LDFLAGS
- move nested function LeapYear() outside modified_julian_date_to_utc()
diff --git a/config.h b/config.h
index 7dd8016..045d1b4 100644
--- a/config.h
+++ b/config.h
@@ -60,7 +60,7 @@
#define PACKAGE_NAME "w_scan"
/* Define to the full name and version of this package. */
-#define PACKAGE_STRING "w_scan 20141122"
+#define PACKAGE_STRING "w_scan 20161022"
/* Define to the one symbol short name of this package. */
#define PACKAGE_TARNAME "w_scan"
@@ -69,7 +69,7 @@
#define PACKAGE_URL ""
/* Define to the version of this package. */
-#define PACKAGE_VERSION "20141122"
+#define PACKAGE_VERSION "20161022"
/* Define to 1 if you have the ANSI C header files. */
#define STDC_HEADERS 1
@@ -97,7 +97,7 @@
/* Version number of package */
-#define VERSION "20141122"
+#define VERSION "20161022"
/* Define to 1 if on MINIX. */
/* #undef _MINIX */
diff --git a/configure b/configure
index b36c02b..f26f2e7 100755
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.68 for w_scan 20141122.
+# Generated by GNU Autoconf 2.68 for w_scan 20161022.
#
#
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
@@ -557,8 +557,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='w_scan'
PACKAGE_TARNAME='w_scan'
-PACKAGE_VERSION='20141122'
-PACKAGE_STRING='w_scan 20141122'
+PACKAGE_VERSION='20161022'
+PACKAGE_STRING='w_scan 20161022'
PACKAGE_BUGREPORT=''
PACKAGE_URL=''
@@ -1240,7 +1240,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures w_scan 20141122 to adapt to many kinds of systems.
+\`configure' configures w_scan 20161022 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1306,7 +1306,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of w_scan 20141122:";;
+ short | recursive ) echo "Configuration of w_scan 20161022:";;
esac
cat <<\_ACEOF
@@ -1393,7 +1393,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-w_scan configure 20141122
+w_scan configure 20161022
generated by GNU Autoconf 2.68
Copyright (C) 2010 Free Software Foundation, Inc.
@@ -1811,7 +1811,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by w_scan $as_me 20141122, which was
+It was created by w_scan $as_me 20161022, which was
generated by GNU Autoconf 2.68. Invocation command line was
$ $0 $@
@@ -2629,7 +2629,7 @@ fi
# Define the identity of the package.
PACKAGE='w_scan'
- VERSION='20141122'
+ VERSION='20161022'
cat >>confdefs.h <<_ACEOF
@@ -5029,7 +5029,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by w_scan $as_me 20141122, which was
+This file was extended by w_scan $as_me 20161022, which was
generated by GNU Autoconf 2.68. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -5095,7 +5095,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-w_scan config.status 20141122
+w_scan config.status 20161022
configured by $0, generated by GNU Autoconf 2.68,
with options \\"\$ac_cs_config\\"
diff --git a/configure.in b/configure.in
index 1a2d100..ce44392 100644
--- a/configure.in
+++ b/configure.in
@@ -2,7 +2,7 @@
# Process this file with autoconf to produce a configure script.
AC_PREREQ([2.63])
-AC_INIT([w_scan], [20141122])
+AC_INIT([w_scan], [20161022])
AC_CONFIG_SRCDIR([scan.c])
AC_CONFIG_HEADERS([config.h])
AM_INIT_AUTOMAKE
diff --git a/countries.c b/countries.c
index 6c80a44..4501bc1 100644
--- a/countries.c
+++ b/countries.c
@@ -104,6 +104,7 @@ int choose_country (const char * country,
case AT: // AUSTRIA
case BE: // BELGIUM
case CH: // SWITZERLAND
+ case CO: // COLOMBIA, DVB-C + DVB-T2
case CZ: // CZECH REPUBLIC
case DE: // GERMANY
case DK: // DENMARK
@@ -262,6 +263,17 @@ int choose_country (const char * country,
info("QAM US/CA\n");
}
break;
+ case CO: // COLOMBIA, 6MHz offs 389MHz
+ switch(*dvb) {
+ case SCAN_CABLE:
+ info("cable colombia not yet defined.\n");
+ break;
+ default:
+ *channellist = DVBT2_CO;
+ info("DVB-T2 CO\n");
+ break;
+ }
+ break;
case BR: // BRAZIL, DVB-C/ISDB-T w. ATSC freq list
switch(*dvb) {
case SCAN_CABLE:
@@ -308,6 +320,14 @@ switch (channellist) {
case 14 ... 69: return 389000000;
default: return SKIP_CHANNEL;
}
+ case DVBT2_CO: // DVB-T2 Colombia, 6 MHz step
+ switch (channel) {
+ //channels 21..51 are not stated as digital,
+ //however ch 27, 28, 43 are marked as T2 in other docs.
+ //scan up to ch 51 (end of band V)
+ case 14 ... 51: return 389000000;
+ default: return SKIP_CHANNEL;
+ }
case ISDBT_6MHZ: // ISDB-T, 6 MHz central frequencies
switch (channel) {
// Channels 7-13 are reserved but aren't used yet
@@ -315,7 +335,7 @@ switch (channellist) {
case 14 ... 69: return 389000000;
default: return SKIP_CHANNEL;
}
- case DVBT_AU: //AUSTRALIA, 7MHz step list
+ case DVBT_AU: //AUSTRALIA, 7MHz step list, offset 0/+125kHz
switch (channel) {
case 5 ... 12: return 142500000;
case 21 ... 69: return 333500000;
@@ -325,7 +345,7 @@ switch (channellist) {
case DVBT_FR: //FRANCE, +/- offset 166kHz & +offset 332kHz & +offset 498kHz
case DVBT_GB: //UNITED KINGDOM, +/- offset
switch (channel) {
- case 5 ... 12: return 142500000; // VHF unused in FRANCE, skip those in offset loop
+ //case 5 ... 12: return 142500000; // VHF no longer used in Europe.
case 21 ... 69: return 306000000;
default: return SKIP_CHANNEL;
}
@@ -362,8 +382,9 @@ switch (channellist) {
case ATSC_QAM:
case ATSC_VSB:
case DVBC_BR:
+ case DVBT2_CO:
case ISDBT_6MHZ:
- return 6000000; // atsc, 6MHz step
+ return 6000000; // atsc region, 6MHz step
case DVBT_AU: return 7000000; // dvb-t australia, 7MHz step
case DVBT_DE:
case DVBT_FR:
@@ -387,7 +408,7 @@ switch (channellist) {
#define DVBC_ROLLOFF 0.15
#define DVBC_SYMBOL_LEN (1.0 + DVBC_ROLLOFF)
-int max_dvbc_srate (int bandwidth) {
+int max_dvbc_srate(int bandwidth) {
switch(bandwidth) {
case 0 ... 6:
fatal("%s %d, using old style DVB API", __FUNCTION__, __LINE__);
@@ -515,6 +536,34 @@ switch (channellist) {
}
}
+/*
+ * some countries don't use legacy delsys anymore
+ */
+int delsysloop_min(int channel, int channellist) {
+switch (channellist) {
+ case DVBT2_CO: return 1; //DVB-T2 only.
+ default: return 0;
+ }
+}
+
+/*
+ * some countries don't use 2nd gen delsys yet
+ */
+int delsysloop_max(int channel, int channellist) {
+switch (channellist) {
+ case ATSC_VSB:
+ case ATSC_QAM:
+ case DVBC_QAM:
+ case DVBC_FI:
+ case DVBC_FR:
+ case DVBC_BR:
+ case ISDBT_6MHZ:
+ case DAB_DE:
+ case USERLIST:
+ return 0;
+ default: return 1;
+ }
+}
/*
* start/stop values for dvbc qam loop
diff --git a/countries.h b/countries.h
index 60ff792..bb6fc63 100644
--- a/countries.h
+++ b/countries.h
@@ -46,6 +46,8 @@ enum channellist_t {
DVBC_FR = 9,
DVBC_BR = 10,
ISDBT_6MHZ = 11,
+ DAB_DE = 12,
+ DVBT2_CO = 13,
USERLIST = 999
};
@@ -92,6 +94,8 @@ int freq_offset(int channel, int channellist, int index);
int max_dvbc_srate(int bandwidth);
int dvbt_transmission_mode(int channel, int channellist);
+int delsysloop_min(int channel, int channellist);
+int delsysloop_max(int channel, int channellist);
int dvbc_qam_max(int channel, int channellist);
int dvbc_qam_min(int channel, int channellist);
diff --git a/descriptors.c b/descriptors.c
index ada403e..fc9e018 100644
--- a/descriptors.c
+++ b/descriptors.c
@@ -756,8 +756,9 @@ void parse_C2_delivery_system_descriptor (const unsigned char *buf,
void parse_terrestrial_delivery_system_descriptor(const unsigned char * buf,
struct transponder * t, fe_spectral_inversion_t inversion) {
uint32_t center_frequency;
- struct frequency_item * p, * p1;
+ struct cell* p;
bool known;
+ int i;
hd(buf);
if (t == NULL) return;
@@ -768,6 +769,8 @@ void parse_terrestrial_delivery_system_descriptor(const unsigned char * buf,
t->inversion = inversion;
center_frequency = 10 * get_u32(buf + 2); // center_frequency 32 bslbf, 10Hz steps
+ if ((center_frequency < 50000000) || (center_frequency > 1000000000))
+ center_frequency = 0;
switch(buf[6] >> 5) { // bandwidth 3 bslbf
case 0: t->bandwidth = 8000000; break;
case 1: t->bandwidth = 7000000; break;
@@ -847,13 +850,14 @@ void parse_terrestrial_delivery_system_descriptor(const unsigned char * buf,
t->frequency = center_frequency;
else {
known = false;
- for(p = (t->frequencies)->first; p; p = p->next) {
- if (p->frequency == center_frequency) {
+ for(p = (t->cells)->first; p; p = p->next) {
+ for(i = 0; i < p->num_center_frequencies; i++)
+ if (p->center_frequencies[i] == center_frequency) {
known = true;
break;
}
- for(p1 = (p->transposers)->first; p1; p1 = p1->next) {
- if (p1->frequency == center_frequency) {
+ for(i = 0; i < p->num_transposers; i++) {
+ if (p->transposers[i].transposer_frequency == center_frequency) {
known = true;
break;
}
@@ -861,10 +865,9 @@ void parse_terrestrial_delivery_system_descriptor(const unsigned char * buf,
}
if (! known) {
p = calloc(1, sizeof(*p));
- p->transposers = &(p->_transposers);
- NewList(p->transposers, "transposers");
- p->frequency = center_frequency;
- AddItem(t->frequencies, p);
+ p->num_center_frequencies = 1;
+ p->center_frequencies[0] = center_frequency;
+ AddItem(t->cells, p);
}
} // end other_frequency_flag
} // end if center_frequency > 0
@@ -873,51 +876,59 @@ void parse_terrestrial_delivery_system_descriptor(const unsigned char * buf,
t->other_frequency_flag = 1;
}
- verbose(" F%u B%u %s C%d D%d G%d T%d other_frequency=%d (%u)\n",
- freq_scale(t->frequency, 1e-3),
- freq_scale(t->bandwidth, 1e-6),
- (t->modulation == QPSK)?"QPSK":
- (t->modulation == QAM_16)?"M16":"M64",
- (t->coderate == FEC_1_2)?12:
- (t->coderate == FEC_2_3)?23:
- (t->coderate == FEC_3_4)?34:
- (t->coderate == FEC_5_6)?56:
- (t->coderate == FEC_7_8)?78:999,
- (t->coderate_LP == FEC_1_2)?12:
- (t->coderate_LP == FEC_2_3)?23:
- (t->coderate_LP == FEC_3_4)?34:
- (t->coderate_LP == FEC_5_6)?56:
- (t->coderate_LP == FEC_7_8)?78:999,
- (t->guard==GUARD_INTERVAL_1_32 )? 32:
- (t->guard==GUARD_INTERVAL_1_16 )? 16:
- (t->guard==GUARD_INTERVAL_1_8 )? 8:4,
- (t->transmission == TRANSMISSION_MODE_2K )?2:
- (t->transmission == TRANSMISSION_MODE_8K )?8:4,
- t->other_frequency_flag,t->other_frequency_flag?center_frequency:0
- );
-
- verbose(" %u frequencies\n", (t->frequencies)->count);
- for(p = (t->frequencies)->first; p; p = p->next) {
- verbose(" %u\n", p->frequency);
- for(p1 = (p->transposers)->first; p1; p1 = p1->next) {
- verbose(" transposer %u\n", p1->frequency);
+ if (verbosity >= 4) {
+ verbose(" F%u B%u %s C%d D%d G%d T%d other_frequency=%d (%u)\n",
+ freq_scale(t->frequency, 1e-3),
+ freq_scale(t->bandwidth, 1e-6),
+ (t->modulation == QPSK)?"QPSK":
+ (t->modulation == QAM_16)?"M16":"M64",
+ (t->coderate == FEC_1_2)?12:
+ (t->coderate == FEC_2_3)?23:
+ (t->coderate == FEC_3_4)?34:
+ (t->coderate == FEC_5_6)?56:
+ (t->coderate == FEC_7_8)?78:999,
+ (t->coderate_LP == FEC_1_2)?12:
+ (t->coderate_LP == FEC_2_3)?23:
+ (t->coderate_LP == FEC_3_4)?34:
+ (t->coderate_LP == FEC_5_6)?56:
+ (t->coderate_LP == FEC_7_8)?78:999,
+ (t->guard==GUARD_INTERVAL_1_32 )? 32:
+ (t->guard==GUARD_INTERVAL_1_16 )? 16:
+ (t->guard==GUARD_INTERVAL_1_8 )? 8:4,
+ (t->transmission == TRANSMISSION_MODE_2K )?2:
+ (t->transmission == TRANSMISSION_MODE_8K )?8:4,
+ t->other_frequency_flag,t->other_frequency_flag?center_frequency:0
+ );
+
+ verbose(" %u cells\n", (t->cells)->count);
+ i = 0;
+ for(p = (t->cells)->first; p; p = p->next, ++i) {
+ int n;
+ for(n = 0; n < p->num_center_frequencies; n++)
+ verbose(" cell %u: center_frequency %7.3f\n",
+ p->cell_id, p->center_frequencies[n]/1000000.0);
+ for(n = 0; n < p->num_transposers; n++) {
+ verbose(" transposer %u transposer_frequency %7.3f\n",
+ p->transposers[n].cell_id_extension,
+ p->transposers[n].transposer_frequency/1000000.0);
+ }
}
- }
+ }
} //end parse_terrestrial_delivery_system_descriptor
void parse_frequency_list_descriptor(const unsigned char * buf, struct transponder * t) {
- uint8_t i, coding_type = (buf[2] & 0x03);
+ uint8_t i, j, coding_type = (buf[2] & 0x03);
uint8_t num_frequencies = (buf[1] - 1) / 4;
uint32_t f;
bool known;
- struct frequency_item * p, * p1;
+ struct cell* p;
if (t == NULL) return;
hd(buf);
buf += 3;
- for(i = 0; i < num_frequencies; i++) {
+ for(i = 0; i < num_frequencies; ++i) {
switch(coding_type) {
case 1:
f = 10 * bcd32_to_cpu (buf[0], buf[1], buf[2], buf[3]);
@@ -935,13 +946,14 @@ void parse_frequency_list_descriptor(const unsigned char * buf, struct transpond
if (f == 0) continue;
known = false;
- for(p = (t->frequencies)->first; p; p = p->next) {
- if (p->frequency == f) {
+ for(p = (t->cells)->first; p; p = p->next) {
+ for(j = 0; j < p->num_center_frequencies; j++)
+ if (p->center_frequencies[j] == f) {
known = true;
break;
}
- for(p1 = (p->transposers)->first; p1; p1 = p1->next) {
- if (p1->frequency == f) {
+ for(j = 0; j < p->num_transposers; j++) {
+ if (p->transposers[j].transposer_frequency == f) {
known = true;
break;
}
@@ -949,18 +961,22 @@ void parse_frequency_list_descriptor(const unsigned char * buf, struct transpond
}
if (! known) {
p = calloc(1, sizeof(*p));
- p->transposers = &(p->_transposers);
- NewList(p->transposers, "transposers");
- p->frequency = f;
- AddItem(t->frequencies, p);
+ p->num_center_frequencies = 1;
+ p->center_frequencies[0] = f;
+ AddItem(t->cells, p);
}
} // end freq loop
-
- verbose(" %-.2u frequencies\n", (t->frequencies)->count);
- for(p = (t->frequencies)->first; p; p = p->next) {
- verbose(" %u\n", p->frequency);
- for(p1 = (p->transposers)->first; p1; p1 = p1->next) {
- verbose(" transposer %u\n", p1->frequency);
+
+ if (verbosity >= 4) {
+ verbose(" %u cells\n", (t->cells)->count);
+ i = 0;
+ for(p = (t->cells)->first; p; p = p->next, ++i) {
+ int n;
+ for(n = 0; n < p->num_center_frequencies; n++)
+ verbose(" cell%d: center_frequency%u\n", i, p->center_frequencies[n]);
+ for(n = 0; n < p->num_transposers; n++) {
+ verbose(" transposer%d transposer_frequency%u\n", n, p->transposers[n].transposer_frequency);
+ }
}
}
}
@@ -975,13 +991,10 @@ void parse_T2_delivery_system_descriptor(const unsigned char * buf,
struct transponder * t, fe_spectral_inversion_t inversion) {
unsigned char * bp;
__u8 descriptor_length;
- __u8 cell_id_extension;
__u8 frequency_loop_length = 0;
__u8 subcell_info_loop_length = 0;
- __u16 cell_id;
- __u32 center_frequency = 0, transposer_frequency;
- bool known = false;
- struct frequency_item * p, * p1;
+ __u32 center_frequency = 0;
+ struct cell* p;
if (t == NULL) return;
hd(buf);
@@ -990,6 +1003,12 @@ void parse_T2_delivery_system_descriptor(const unsigned char * buf,
t->source = 0x04;
t->delsys = SYS_DVBT2;
t->modulation = QAM_AUTO;
+ t->hierarchy = HIERARCHY_NONE;
+ t->coderate = FEC_AUTO;
+ t->coderate_LP = FEC_NONE;
+ t->SISO_MISO = 0; // NOTE: DTV_BANDWIDTH == '0' is BANDWIDTH_AUTO
+ t->guard = GUARD_INTERVAL_AUTO;
+ t->transmission = TRANSMISSION_MODE_AUTO;
t->inversion = inversion;
// descriptor_tag 8 uimsbf
descriptor_length = buf[1]; // descriptor_length 8 uimsbf
@@ -1009,7 +1028,7 @@ void parse_T2_delivery_system_descriptor(const unsigned char * buf,
case 3: t->bandwidth = 5000000; break;
case 4: t->bandwidth = 10000000; break;
case 5: t->bandwidth = 1712000; break;
- default:t->bandwidth = 8000000; // 0110 to 1111 reserved for future use
+ default:t->bandwidth = 0; // 0110 to 1111 reserved for future use -> '0' is BANDWIDTH_AUTO
}
//reserved_future_use = buf[6] & 0x3); // reserved_future_use 2 bslbf
switch((buf[7] >> 5) & 0x7) { // guard_interval 3 bslbf
@@ -1036,135 +1055,82 @@ void parse_T2_delivery_system_descriptor(const unsigned char * buf,
descriptor_length -= 6; // so far, we read 6 bytes.
bp = (unsigned char *) &buf[8];
+ ClearList(t->cells);
+
while(descriptor_length > 0) { // for (i=0;i<N,i++) {
- cell_id = get_u16(bp); bp += 2; descriptor_length -= 2; // cell_id 16 uimsbf
- if (t->tfs_flag) { // if (tfs_flag == 1) {
- // if tfs_flag (Time-Frequency Slicing) is set, we use 2..6 frequencies in parallel, //
- // the TS is time interleaved && jumping from freq to freq. No idea, how this should //
- // fit in future into linux dvb. //
- frequency_loop_length = *bp; bp++; descriptor_length--; // frequency_loop_length 8 uimsbf // 2 to 6 center freqs belonging to TFS arrangement
- while(frequency_loop_length > 3) { // for (j=0;j<N;j++){
- bool known = false;
- struct frequency_item * p;
- center_frequency = 10 * get_u32(bp); // centre_frequency 32 uimsbf
- bp += 4; descriptor_length -= 4; frequency_loop_length -= 4; //
-
- for(p = (t->frequencies)->first; p; p = p->next) {
- if (p->frequency == center_frequency) {
- p->cell_id = cell_id;
- known = true;
- break;
- }
- }
- if (! known) {
- p = calloc(1, sizeof(*p));
- p->transposers = &(p->_transposers);
- NewList(p->transposers, "transposers");
- p->cell_id = cell_id;
- p->frequency = center_frequency;
- AddItem(t->frequencies, p);
- }
- } // }
+ struct cell* cell = (struct cell*) calloc(1, sizeof(struct cell));
+ cell->cell_id = get_u16(bp); bp += 2; descriptor_length -= 2; // cell_id 16 uimsbf
+ if (t->tfs_flag > 0) { // if (tfs_flag == 1) {
+ int frequency_loop_length = *bp++; descriptor_length--; // frequency_loop_length 8 uimsbf // 2 to 6 center freqs belonging to TFS arrangement
+ while(frequency_loop_length > 0) { // for (j=0;j<N;j++){
+ center_frequency = 10 * get_u32(bp); bp += 4; descriptor_length -= 4; // centre_frequency 32 uimsbf
+ frequency_loop_length -= 4;
+ cell->center_frequencies[cell->num_center_frequencies++] = center_frequency;
+ } // frequency_loop // }
} // end tfs flag // }
else { // else { // no tfs_flag, just one center freq. the usual case.
- center_frequency = 10 * get_u32(bp); // centre_frequency 32 uimsbf
- bp += 4; descriptor_length -= 4; //
-
- if (center_frequency > 0) { // now: add center freq.
- if (! t->other_frequency_flag)
- t->frequency = center_frequency;
- else { // more than one center_freqs or transposers.
- known = false;
- for(p = (t->frequencies)->first; p; p = p->next) {
- if (p->frequency == center_frequency) {
- p->cell_id = cell_id;
- known = true;
- break;
- }
- for(p1 = (p->transposers)->first; p1; p1 = p1->next) {
- if (p1->frequency == center_frequency) {
- p->cell_id = cell_id;
- known = true;
- break;
- }
- }
- }
- if (! known) {
- p = calloc(1, sizeof(*p));
- p->transposers = &(p->_transposers);
- NewList(p->transposers, "transposers");
- p->cell_id = cell_id;
- p->frequency = center_frequency;
- AddItem(t->frequencies, p);
- }
- }
- }
- } // }
- subcell_info_loop_length = *bp; bp++; descriptor_length -= 1; // subcell_info_loop_length 8 uimsbf
-
- for(p = (t->frequencies)->first; p; p = p->next) {
- if (cell_id == p->cell_id) break;
+ center_frequency = 10 * get_u32(bp); bp += 4; descriptor_length -= 4; // centre_frequency 32 uimsbf
+ frequency_loop_length -= 4; //
+ if ((center_frequency < 50000000) || (center_frequency > 1000000000))
+ center_frequency = 0;
+ cell->center_frequencies[cell->num_center_frequencies++] = center_frequency; //
+ } // }
+ subcell_info_loop_length = *bp++; descriptor_length--; // subcell_info_loop_length 8 uimsbf
+
+ while(subcell_info_loop_length > 0) { // for (k=0;k<N;k++){
+ if (cell->num_transposers > 15) break; //
+ cell->transposers[cell->num_transposers].cell_id_extension = *bp++; // cell_id_extension 8 uimsbf
+ cell->transposers[cell->num_transposers].transposer_frequency = 10 * get_u32(bp); // transposer_frequency 32 uimsbf
+ bp += 4; descriptor_length -= 5; //
+ cell->num_transposers++;
+ subcell_info_loop_length -= 5;
}
+ AddItem(t->cells, cell);
+ } // while desriptor_length
+ } //extended info
- while(subcell_info_loop_length > 4) { // for (k=0;k<N;k++){
- cell_id_extension = *bp; // cell_id_extension 8 uimsbf
- transposer_frequency = 10 * get_u32(bp + 1); // transposer_frequency 32 uimsbf
- bp += 5; descriptor_length -= 5; subcell_info_loop_length -= 5; //
- if (p == NULL) {
- p = calloc(1, sizeof(*p));
- p->transposers = &(p->_transposers);
- NewList(p->transposers, "transposers");
- p->cell_id = cell_id;
- p->frequency = center_frequency;
- AddItem(t->frequencies, p);
- }
- known = false;
- for(p1 = (p->transposers)->first; p1; p1 = p1->next) {
- if (p1->frequency == transposer_frequency) {
- p1->cell_id = cell_id_extension;
- known = true;
- break;
- }
- }
- if (! known) {
- p1 = calloc(1, sizeof(*p1));
- p1->transposers = &(p1->_transposers);
- NewList(p1->transposers, "transposers");
- p1->cell_id = cell_id_extension;
- p1->frequency = transposer_frequency;
- AddItem(p->transposers, p1);
- }
- } // end subcell info loop // }
- } // end while(descriptor_length > 0) // }
- }
if ((t->frequency == 0) && (t->other_frequency_flag == 0)) {
verbose("%s: center_freq = 0 && other_frequency_flag = 0 -> set other_frequency_flag = 1\n", __FUNCTION__);
t->other_frequency_flag = 1;
}
- verbose("%s f%u system_id%u plp_id%u SISO/MISO=%s B%.1f G%d T%d other_frequency%d TFS%d\n",
- __FUNCTION__,
- freq_scale(t->frequency, 1e-3), t->system_id, t->plp_id,
- t->SISO_MISO?"MISO":"SISO",
- (t->bandwidth * 1e-6),
- (t->guard==GUARD_INTERVAL_1_32 )? 32:
- (t->guard==GUARD_INTERVAL_1_16 )? 16:
- (t->guard==GUARD_INTERVAL_1_8 )? 8:
- (t->guard==GUARD_INTERVAL_1_4 )? 4:
- (t->guard==GUARD_INTERVAL_1_128 )? 128:
- (t->guard==GUARD_INTERVAL_19_128)? 19128:19256,
- (t->transmission == TRANSMISSION_MODE_2K )?2:
- (t->transmission == TRANSMISSION_MODE_8K )?8:
- (t->transmission == TRANSMISSION_MODE_4K )?4:
- (t->transmission == TRANSMISSION_MODE_1K )?1:
- (t->transmission == TRANSMISSION_MODE_16K)?16:32,
- t->other_frequency_flag, t->tfs_flag);
-
-
- verbose(" %-.2u frequencies:\n", (t->frequencies)->count);
- for(p = (t->frequencies)->first; p; p = p->next) {
- verbose(" %u\n", p->frequency);
- for(p1 = (p->transposers)->first; p1; p1 = p1->next) {
- verbose(" transposer %u\n", p1->frequency);
+
+ if (t->cells->count > 0) {
+ center_frequency = ((struct cell*) t->cells->first)->center_frequencies[0];
+ if (center_frequency > 0)
+ t->frequency = center_frequency;
+ }
+
+ if (verbosity >= 4) {
+ verbose("%s:%d f%u system_id%u plp_id%u SISO/MISO=%s B%.1f G%d T%d other_frequency%d TFS%d\n",
+ __FUNCTION__,__LINE__,
+ freq_scale(t->frequency, 1e-3), t->system_id, t->plp_id,
+ t->SISO_MISO?"MISO":"SISO",
+ (t->bandwidth * 1e-6),
+ (t->guard==GUARD_INTERVAL_1_32 )? 32:
+ (t->guard==GUARD_INTERVAL_1_16 )? 16:
+ (t->guard==GUARD_INTERVAL_1_8 )? 8:
+ (t->guard==GUARD_INTERVAL_1_4 )? 4:
+ (t->guard==GUARD_INTERVAL_1_128 )? 128:
+ (t->guard==GUARD_INTERVAL_19_128)? 19128:19256,
+ (t->transmission == TRANSMISSION_MODE_2K )?2:
+ (t->transmission == TRANSMISSION_MODE_8K )?8:
+ (t->transmission == TRANSMISSION_MODE_4K )?4:
+ (t->transmission == TRANSMISSION_MODE_1K )?1:
+ (t->transmission == TRANSMISSION_MODE_16K)?16:32,
+ t->other_frequency_flag, t->tfs_flag);
+
+ verbose(" %u cells:\n", (t->cells)->count);
+ int i = 0;
+ for(p = (t->cells)->first; p; p = p->next, ++i) {
+ int n;
+ for(n = 0; n < p->num_center_frequencies; n++)
+ verbose(" cell %u: center_frequency %7.3f\n",
+ p->cell_id, p->center_frequencies[n]/1000000.0);
+ for(n = 0; n < p->num_transposers; n++) {
+ verbose(" cell_id_extension %u: transposer_frequency %7.3f\n",
+ p->transposers[n].cell_id_extension,
+ p->transposers[n].transposer_frequency/1000000.0);
+ }
}
}
}
@@ -1180,11 +1146,16 @@ void parse_logical_channel_descriptor(const unsigned char * buf, struct transpon
int p = 2; //
//
//
- while(descriptor_length > 0) { //
+ if (descriptor_length % 4) {
+ verbose(" %s %d: non-LCN data on descriptor 0x83 ?\n",
+ __FUNCTION__, __LINE__);
+ return;
+ }
+ while(descriptor_length > 3) { //
service_id = (buf[p] << 8) | buf[p+1]; // service_id 16 uimsbf
s = find_service(t, service_id); //
if (s == NULL) //
- s = alloc_service(t, service_id); //
+ return; //
//
s->visible_service = (buf[p+2] & 0x80) > 0; // visible_service_flag 1 bslbf, reserved NorDig: 1bslbf: Australia: 5 bslbf
s->logical_channel_number = (buf[p+2] & 0x3F) << 8 | buf[p+3];// logical_channel_number NorDig: 14uimbsf; Australia: 10 uimsbf
diff --git a/diseqc.c b/diseqc.c
index 74fdcfe..08d8f2f 100644
--- a/diseqc.c
+++ b/diseqc.c
@@ -513,7 +513,7 @@ static int scr_cmd(int frontend_fd, struct dvb_diseqc_master_cmd * diseqc) {
}
msleep(5); // AN2056: "more than 4ms" after 13V -> 18V; EN50494: 4..22ms
- if ((err = ioctl(frontend_fd, FE_DISEQC_SEND_MASTER_CMD, &diseqc))) {
+ if ((err = ioctl(frontend_fd, FE_DISEQC_SEND_MASTER_CMD, diseqc))) {
info("%s:%d: FE_DISEQC_SEND_MASTER_CMD failed.\n", __FUNCTION__, __LINE__);
return err;
}
diff --git a/dump-vdr.c b/dump-vdr.c
index 9e5df8c..1433beb 100644
--- a/dump-vdr.c
+++ b/dump-vdr.c
@@ -39,70 +39,163 @@ struct cTr {
};
static struct cTr translations[] = {
- { "S4E8", "S5E"},
- { "S7E0", "S7E"},
- { "S9E0", "S9E"},
- { "S10E0", "S10E"},
- { "S13E0", "S13E"},
- { "S16E0", "S16E"},
- { "S19E2", "S19.2E"},
- { "S21E6", "S21.6E"},
- { "S23E5", "S23.5E"},
- { "S25E5", "S25.5E"},
- { "S26EX", "S26E"},
- { "S28E2", "S28.2E"},
- { "S28E5", "S28.5E"},
- { "S31E5", "S31.5E"},
- { "S32E9", "S33E"},
- { "S33E0", "S33E"},
- { "S35E9", "S36E"},
- { "S36E0", "S36E"},
- { "S38E0", "S38E"},
- { "S39E0", "S39E"},
- { "S40EX", "S40E"},
- { "S42E0", "S42E"},
- { "S45E0", "S45E"},
- { "S49E0", "S49E"},
- { "S53E0", "S53E"},
- { "S57E0", "S56E"},
- { "S57EX", "S57E"},
- { "S60EX", "S60E"},
- { "S62EX", "S62E"},
- { "S64E2", "S64E"},
- { "S68EX", "S68.5E"},
- { "S70E5", "S70.5E"},
- { "S72EX", "S72E"},
- { "S75EX", "S75E"},
- { "S76EX", "S76.5E"},
- { "S78E5", "S78.5E"},
- { "S80EX", "S80E"},
- { "S83EX", "S83E"},
- { "S87E5", "S87.5E"},
- { "S88EX", "S88E"},
- { "S90EX", "S90E"},
- { "S91E5", "S91.5E"},
- { "S93E5", "S93.5E"},
- { "S95E0", "S95E"},
- { "S96EX", "S96.5E"},
- {"S100EX","S100.5E"},
- {"S105EX","S105.5E"},
- {"S108EX", "S108E"},
- {"S140EX", "S140E"},
- {"S160E0", "S160E"},
- { "S0W8", "S1W"},
- { "S4W0", "S4W"},
- { "S5WX", "S5W"},
- { "S7W0", "S7W"},
- { "S8W0", "S8W"},
- { "S11WX", "S11W"},
- { "S12W5", "S12.5W"},
- { "S14W0", "S14W"},
- { "S15W0", "S15W"},
- { "S18WX", "S18W"},
- { "S22WX", "S22W"},
- { "S24WX", "S24.5W"},
- { "S27WX", "S27.5W"},
- { "S30W0", "S30W"}};
+ {"S180E0", "S180E" }, // S180E Intelsat 18 //
+ {"S172E0", "S172E" }, // S172E Eutelsat 172A //
+ {"S169E0", "S169E" }, // S169E Intelsat 8 //
+ {"S166E0", "S166E" }, // S166E Intelsat 19 //
+ // S164E Optus B3 //
+ {"S162E0", "S162E" }, // S162E Superbird B2 //
+ {"S160E0", "S160E" }, // S160E Optus D1 //
+ {"S156E0", "S156E" }, // S156E Optus C1/D3 //
+ {"S154E0", "S154E" }, // S154E JCSAT 2A //
+ {"S152E0", "S152E" }, // S152E Optus D2 //
+ // S150E JCSAT 1B //
+ {"S144E0", "S144E" }, // S144E Superbird C2 //
+ {"S140E0", "S140E" }, // S140E Express AM3 //
+ {"S138E0", "S138E" }, // S138E Telstar 18 //
+ {"S134E0", "S134E" }, // S134E Apstar 6 //
+ {"S132E0", "S132E" }, // S132E Vinasat 1 & JCSAT 5A //
+ {"S128E0", "S128E" }, // S128E JCSAT 3A //
+ {"S125E0", "S125E" }, // S125E ChinaSat 6A //
+ {"S124E0", "S124E" }, // S124E JCSAT 4B //
+ {"S122E2", "S122.2E"}, // S122.2E Asiasat 4 //
+ // S119.5E Thaicom 4 //
+ {"S118E0", "S118E" }, // S118E Telkom 2 //
+ {"S116E0", "S116E" }, // S116E ABS 7 & Koreasat 6 //
+ {"S115E5", "S115.5E"}, // S115.5E ChinaSat 6B //
+ {"S113E0", "S113E" }, // S113E Palapa D & Koreasat 5 //
+ {"S110E5", "S110.5E"}, // S110.5E ChinaSat 10 //
+ {"S110E0", "S110E" }, // S110E N-Sat 110 & BSAT 3A/3C //
+ {"S108E2", "S108.2E"}, // S108.2E Telkom 1 & NSS 11 & SES 7 //
+ {"S105E5", "S105.5E"}, // S105.5E Asiasat 3S //
+ {"S103E0", "S103E" }, // S103E Express A2 //
+ {"S100E5", "S100.5E"}, // S100.5E Asiasat 5 //
+ {"S96E5" , "S96.5E" }, // S96.5E Express AM33 //
+ {"S95E0" , "S95E" }, // S95E NSS 6 //
+ {"S93E5" , "S93.5E" }, // S93.5E Insat 3A/4B //
+ // S92.2E ChinaSat 9 //
+ {"S91E5" , "S91.5E" }, // S91.5E Measat 3/3A //
+ {"S90E0" , "S90E" }, // S90E Yamal 201/300K //
+ {"S88E0" , "S88E" }, // S88E ST 2 //
+ {"S87E5" , "S87.5E" }, // S87.5E ChinaSat 12 //
+ {"S86E5" , "S86.5E" }, // S86.5E //
+ {"S85E0" , "S85.2E" }, // S85.2E Intelsat 15 & Horizons 2 //
+ {"S83E0" , "S83E" }, // S83E Insat 4A //
+ // S80E Express AM2 //
+ {"S78E5" , "S78.5E" }, // S78.5E Thaicom 5/6A //
+ {"S76E5" , "S76.5E" }, // S76.5E Apstar 7 //
+ {"S75E0" , "S75E" }, // S75E ABS 1A //
+ // S74E Insat 3C/4CR //
+ // S72E Intelsat 22 //
+ {"S70E5" , "S70.5E" }, // S70.5E Eutelsat 70B //
+ {"S68E5" , "S68.5E" }, // S68.5E Intelsat 7/10 //
+ {"S66E0" , "S66E" }, // S66E Intelsat 17 //
+ {"S64E2" , "S64E" }, // S64E Intelsat 906 //
+ {"S62E0" , "S62E" }, // S62E Intelsat 902 //
+ {"S60E0" , "S60E" }, // S60E Intelsat 904 //
+ {"S57E0" , "S57E" }, // S57E NSS 12 //
+ {"S56E0" , "S56E" }, // S56E DirecTV 1R //
+ {"S53E0" , "S53E" }, // S53E Express AM22 //
+ {"S52E5" , "S52.5E" }, // S52.5E Yahsat 1A //
+ {"S49E0" , "S49E" }, // S49E Yamal 202 //
+ // S47.5E Intelsat 10 //
+ // S46E Azerspace-1 //
+ {"S45E0" , "S45E" }, // S45E Intelsat 12 //
+ {"S42E0" , "S42E" }, // S42E Turksat 2A/3A //
+ {"S40E0" , "S40E" }, // S40E Express AM1 //
+ {"S39E0" , "S39E" }, // S39E Hellas Sat 2 //
+ {"S38E0" , "S38E" }, // S38E Paksat 1R //
+ {"S36E0" , "S36E" }, // S36E Eutelsat 36A/36B //
+ {"S33E0" , "S33E" }, // S33E Eutelsat 33A & Intelsat 28 //
+ {"S31E5" , "S31.5E" }, // S31.5E Astra 1G //
+ {"S30E5" , "S30.5E" }, // S30.5E Arabsat 5A //
+ {"S28E2" , "S28.2E" }, // S28.2E Astra 1N/2A/2F //
+ {"S26E0" , "S26E" }, // S26E Badr C/3/4/5/6 //
+ {"S25E5" , "S25.5E" }, // S25.5E Eutelsat 25B //
+ {"S23E5" , "S23.5E" }, // S23.5E Astra 3B //
+ {"S21E6" , "S21.6E" }, // S21.6E Eutelsat 21B //
+ {"S20E0" , "S20E" }, // S20E Arabsat 5C //
+ {"S19E2" , "S19.2E" }, // S19.2E Astra 1KR/1L/1M/2C //
+ // S17E Amos 5 //
+ {"S16E0" , "S16E" }, // S16E Eutelsat 16A/16B //
+ {"S13E0" , "S13E" }, // S13E Eutelsat Hot Bird 13B/13C/13D //
+ {"S10E0" , "S10E" }, // S10E Eutelsat 10A //
+ {"S9E0" , "S9E" }, // S9E Eutelsat 9A/Ka-Sat 9A //
+ {"S7E0" , "S7E" }, // S7E Eutelsat 7A //
+ {"S4E8" , "S4.8E" }, // S4.8E Astra 4A & SES 5 //
+ // S4E Eutelsat 4B //
+ {"S3E0" , "S3E" }, // S3E Eutelsat 3A/3D & Rascom 1R //
+ {"S0W8" , "S1W" }, // S1W Thor 3/5 & Intelsat 10-02 //
+ {"S4W0" , "S4W" }, // S4W Amos 1/2/3 //
+ {"S5W0" , "S5W" }, // S5W Eutelsat 5 West A //
+ {"S7W0" , "S7W" }, // S7W Nilesat 101/201 & Eutelsat 7W A //
+ {"S8W0" , "S8W" }, // S8W Eutelsat 8 West A/C //
+ {"S11W0" , "S11W" }, // S11W Express AM44 //
+ {"S12W5" , "S12.5W" }, // S12.5W Eutelsat 12 West A //
+ {"S14W0" , "S14W" }, // S14W Express A4 //
+ {"S15W0" , "S15W" }, // S15W Telstar 12 //
+ {"S18W0" , "S18W" }, // S18W Intelsat 901 //
+ {"S20W0" , "S20W" }, // S20W NSS 7 //
+ {"S22W0" , "S22W" }, // S22W SES 4 //
+ {"S24W5" , "S24.5W" }, // S24.5W Intelsat 905 //
+ {"S27W5" , "S27.5W" }, // S27.5W Intelsat 907 //
+ {"S30W0" , "S30W" }, // S30W Hispasat 1D/1E //
+ {"S31W5" , "S31.5W" }, // S31.5W Intelsat 25 //
+ {"S34W5" , "S34.5W" }, // S34.5W Intelsat 903 //
+ {"S37W5" , "S37.5W" }, // S37.5W NSS 10 & Telstar 11N //
+ {"S40W5" , "S40.5W" }, // S40.5W SES 6 //
+ {"S43W0" , "S43W" }, // S43W Intelsat 11 //
+ {"S45W0" , "S45W" }, // S45W Intelsat 14 //
+ {"S50W0" , "S50W" }, // S50W Intelsat 1R //
+ {"S53W0" , "S53W" }, // S53W Intelsat 23 //
+ {"S55W5" , "S55.5W" }, // S55.5W Intelsat 805 //
+ {"S58W0" , "S58W" }, // S58W Intelsat 21 //
+ // S61W Amazonas 2/3 //
+ // S61.5W Echostar 16 //
+ {"S63W0" , "S63W" }, // S63W Telstar 14R //
+ {"S65W0" , "S65W" }, // S65W Star One C1 //
+ // S67W AMC 4 //
+ {"S70W0" , "S70W" }, // S70W Star One C2 //
+ {"S72W0" , "S72W" }, // S72W AMC 6 //
+ // S72.7W Nimiq 5 //
+ // S75W Star One C3 //
+ // S77W QuetzSat 1 //
+ {"S78W0" , "S78W" }, // S78W //
+ // S82W Nimiq 4 //
+ {"S83W0" , "S83W" }, // S83W AMC 9 //
+ {"S84W0" , "S84W" }, // S84W Brasilsat B4 //
+ {"S85W0" , "S85W" }, // S85W AMC 16 //
+ // S85.1W XM 3 //
+ {"S87W0" , "S87W" }, // S87W SES 2 //
+ {"S89W0" , "S89W" }, // S89W Galaxy 28 //
+ {"S91W0" , "S91W" }, // S91W Galaxy 17 & Nimiq 6 //
+ {"S93W1" , "S93.1W" }, // S93.1W Galaxy 25 //
+ {"S95W0" , "S95W" }, // S95W Galaxy 3C //
+ {"S97W0" , "S97W" }, // S97W Galaxy 19 //
+ {"S99W2" , "S99W2" }, // S99.2W Galaxy 16 //
+ {"S101W0", "S101W" }, // S101W DirecTV 4S/8 & SES 1 //
+ {"S103W0", "S103W" }, // S103W AMC 1 //
+ {"S105W0", "S105W" }, // S105W AMC 15/18 //
+ {"S107W3", "S107.3W"}, // S107.3W Anik F1R/G1 //
+ // S110W DirecTV 5 & Echostar 10/11 //
+ {"S111W1", "S111.1W"}, // S111.1W Anik F2 //
+ {"S113W0", "S113W" }, // S113W SatMex 6 //
+ // S114.9W SatMex 5 //
+ {"S116W8", "S116.8W"}, // S116.8W SatMex 8 //
+ {"S119W0", "S118.8W"}, // S118.8W Anik F3 //
+ // S119W Echostar 14 & DirecTV 7S //
+ {"S121W0", "S121W" }, // S121W Echostar 9/Galaxy 23 //
+ {"S123W0", "S123W" }, // S123W Galaxy 18 //
+ {"S125W0", "S125W" }, // S125W Galaxy 14 & AMC 21 //
+ {"S127W0", "S127W" }, // S127W Galaxy 13/Horizons 1 //
+ // S129W Ciel 2 //
+ {"S131W0", "S131W" }, // S131W AMC 11 //
+ {"S133W0", "S133W" }, // S133W Galaxy 15 //
+ {"S135W0", "S135W" }, // S135W AMC 10 //
+ {"S137W0", "S137W" }, // S137W AMC 7 //
+ {"S139W0", "S139W" }, // S139W AMC 8 //
+ {"S177W0", "S177W" }, // S177W NSS 9 //
+};
#define TR_COUNT(x) (sizeof(x)/sizeof(struct cTr))
/******************************************************************************
diff --git a/dump-xml.c b/dump-xml.c
index 4a1c9d9..45ebb65 100644
--- a/dump-xml.c
+++ b/dump-xml.c
@@ -237,20 +237,20 @@ void xml_dump(FILE * dest, pList transponders) {
fprintf(dest, "%s<param system_id=\"%d\"/>\n", get_indent(indent), t->system_id);
if needs_param(plp_id)
fprintf(dest, "%s<param plp_id=\"%d\"/>\n", get_indent(indent), t->plp_id);
- if ((t->other_frequency_flag != false) && ((t->frequencies)->count > 0)) {
- struct frequency_item * f, * g;
+ if ((t->other_frequency_flag != false) && ((t->cells)->count > 0)) {
+ struct cell* f;
if needs_param(other_frequency_flag) {
fprintf(dest, "%s<param other_frequency_flag=\"%s\"/>\n", get_indent(indent), bool_name(true));
fprintf(dest, "%s<frequency_list>\n", get_indent(indent));
indent++;
- for(f = t->frequencies->first; f; f = f->next) {
+ for(f = t->cells->first; f; f = f->next) {
if (t->tfs_flag) {
fprintf(dest, "%s<tfs_center>\n", get_indent(indent));
}
else {
- for(g = f->transposers->first; g; g = g->next) {
- }
+ //for(g = f->transposers->first; g; g = g->next) {
+ // }
}
}
diff --git a/emulate.c b/emulate.c
index 908ba7c..f6e9452 100644
--- a/emulate.c
+++ b/emulate.c
@@ -63,6 +63,8 @@ struct {
* - not to be exposed outside this file.
*/
static struct {
+ unsigned w_scan_version;
+ uint32_t w_scan_flags;
fe_delivery_system_t delsys;
uint32_t frequency;
uint32_t bandwidth_hz;
@@ -87,6 +89,10 @@ static struct {
uint32_t lnb_high;
} em_device;
+#define EM_OLD_DELSYSLIST (((uint32_t)1) << 1)
+#define EM_OLD_APIDISP (((uint32_t)1) << 2)
+#define EM_HEXDUMP_BUG (((uint32_t)1) << 3)
+#define EM_OLD_SI_HEADER (((uint32_t)1) << 4)
/*
* forward declarations.
@@ -639,6 +645,7 @@ static int parse_logfile(const char * log) {
sidata_t * sidata = NULL;
bool delsys_list = false;
em_device.scantype = SCAN_UNDEFINED;
+ em_device.w_scan_version = em_device.w_scan_flags = 0; // logging w_scan's version.
if (!log || !*log) {
@@ -658,6 +665,28 @@ static int parse_logfile(const char * log) {
bool is_tp=false;
line_no++;
+ // --- get logging w_scan's version -------------------------------------------------------------------------------
+ if (!em_device.w_scan_version) {
+ sscanf(line, "w_scan version %u (compiled for DVB API 5.xx)", &em_device.w_scan_version);
+ EM_INFO("detected w_scan version %u\n", em_device.w_scan_version);
+ if (em_device.w_scan_version && (em_device.w_scan_version < 20140614)) {
+ EM_INFO("using flag EM_OLD_DELSYSLIST\n");
+ em_device.w_scan_flags |= EM_OLD_DELSYSLIST;
+ }
+ if (em_device.w_scan_version && (em_device.w_scan_version < 20140529)) {
+ EM_INFO("using flag EM_OLD_SI_HEADER\n");
+ em_device.w_scan_flags |= EM_OLD_SI_HEADER;
+ }
+ if (em_device.w_scan_version && (em_device.w_scan_version < 20140423)) {
+ EM_INFO("using flag EM_OLD_APIDISP\n");
+ em_device.w_scan_flags |= EM_OLD_APIDISP;
+ EM_INFO("using flag EM_OLD_APIDISP\n");
+ em_device.w_scan_flags |= EM_HEXDUMP_BUG;
+ }
+ continue;
+ }
+ // --- end logging w_scan's version -------------------------------------------------------------------------------
+
// --- get scan type ----------------------------------------------------------------------------------------------
if (em_device.scantype == SCAN_UNDEFINED) {
if (strstr(line, "scan type")) {
@@ -681,7 +710,12 @@ static int parse_logfile(const char * log) {
// used DVB API
if (strstr(line, "Using DVB API ")) {
- sscanf(line, "Using DVB API %u.%u", &em_api.major, &em_api.minor);
+ if (em_device.w_scan_flags & EM_OLD_APIDISP) {
+ sscanf(line, "Using DVB API %x.%x", &em_api.major, &em_api.minor);
+ }
+ else {
+ sscanf(line, "Using DVB API %u.%u", &em_api.major, &em_api.minor);
+ }
continue;
}
@@ -755,6 +789,45 @@ static int parse_logfile(const char * log) {
fatal("unsupported frontend type, cannot parse '%s'\n", line);
}
+ if (em_device.w_scan_flags & EM_OLD_DELSYSLIST) {
+ EM_INFO("%d: lookup oldstyle delsys hex array\n", line_no);
+ if (strstr(line, "=====================") == NULL) {
+ info("skip line %d: '%s'\n", line_no, line);
+ }
+ else {
+ int len = 0;
+ unsigned tmp, args[16];
+ //EM_INFO("lookup oldstyle delsys hex array: started\n");
+
+ while(fgets(line, 256, logfile) != NULL) {
+ EM_INFO("checking line '%s'", line);
+ line_no++;
+ if (strstr(line, " ======================"))
+ continue;
+ if (!len) {
+ sscanf(line, " len = %d", &len);
+ continue;
+ }
+ if (len) {
+ int i;
+ int nitems = sscanf(line, " 0x%X: %2X %2X %2X %2X %2X %2X %2X %2X %2X %2X %2X %2X %2X %2X %2X %2X :",
+ &tmp,
+ &args[0], &args[1], &args[2], &args[3], &args[4], &args[5], &args[6], &args[7],
+ &args[8], &args[9], &args[10], &args[11], &args[12], &args[13], &args[14], &args[15]);
+ EM_INFO("nitems = %d\n", nitems);
+ if (!nitems)
+ continue;
+ for(i=0; i<len; i++)
+ em_device.delsystems[em_device.ndelsystems++] = (fe_delivery_system_t) args[i];
+ //for(i=0; i<em_device.ndelsystems; i++)
+ // info("delsys %d\n", em_device.delsystems[i]);
+ break;
+ }
+ }
+ em_device.w_scan_flags &= ~EM_OLD_DELSYSLIST;
+ }
+ continue;
+ }
if ((p = strstr(line, " check ")) != NULL) {
delsys_list=true;
continue;
@@ -785,6 +858,7 @@ static int parse_logfile(const char * log) {
delsys_list = false;
}
+
if (dev_props != 2) continue; // continue only after frontend reading.
// --- end of dvb device ------------------------------------------------------------------------------------------
@@ -792,6 +866,13 @@ static int parse_logfile(const char * log) {
// --- we tuned to a new transponder. all si data belongs to this new tp ------------------------------------------
if (strncmp(line, " signal ok: ", 19) == 0) is_tp=true; // ' signal ok: <FOOBAR>'
if (strncmp(line, "tune to: " , 9) == 0) is_tp=true; // 'tune to: <FOOBAR>'
+ if (strncmp(line, "signal ok:", 10) == 0) {
+ if (fgets(line, 256, logfile) != NULL) {
+ *line=':';
+ }
+ line_no++;
+ is_tp=true;
+ }
if (is_tp) {
char * p = strchr(line, ':'); p++;
while(isspace(*p)) p++;
@@ -810,6 +891,44 @@ static int parse_logfile(const char * log) {
if ((p = strstr(line, "SDT(act")) != NULL) { table_id = TABLE_SDT_ACT; parse_intro(table_id, p, &transport_stream_id,0); pid = PID_SDT_BAT_ST; continue; }
if ((p = strstr(line, "SDT(oth")) != NULL) { table_id = TABLE_SDT_OTH; parse_intro(table_id, p, &transport_stream_id,0); pid = PID_SDT_BAT_ST; continue; }
if ((p = strstr(line, "PMT ")) != NULL) { table_id = TABLE_PMT; parse_intro(table_id, p, &pmt_pid, &service_id); pid = pmt_pid; continue; }
+ if ((em_device.w_scan_flags & EM_OLD_SI_HEADER) && !strncmp(line, "parse_section", 13)) {
+ unsigned args[9];
+ int nargs, tmp;
+// parse_section:1376: pid 0x10 tid 0x40 table_id_ext 0x0056, 2/3 (version 16)
+// parse_section:1376: pid 17 (0x11), tid 66 (0x42), table_id_ext 30 (0x001e), section_number 0, last_section_number 0, version 3\n"
+ nargs = sscanf(line, "parse_section:%d: pid %x tid %x table_id_ext %x, %i/%i (version %i)",//",
+ &tmp,&args[0],&args[1],&args[2],&args[3],&args[4],&args[5]);//);
+ if (nargs != 7)
+ nargs = sscanf(line, "parse_section:%d: pid %d (%x), tid %d (%x), table_id_ext %d (%x), section_number %i, last_section_number %i, version %i\n",
+ &tmp,&args[0],&args[1],&args[2],&args[3],&args[4],&args[5],&args[6],&args[7],&args[8]);
+ //if (nargs) info("found %d args---------\n", nargs);
+ if ((nargs == 7) || (nargs == 10)) {
+ EM_INFO("found table. nargs = %d\n", nargs);
+ table_id = (nargs == 7) ? (int)args[1]: (nargs == 10)? (int)args[2]: table_id;
+ switch(table_id) {
+ case TABLE_PAT :
+ transport_stream_id = (nargs == 7) ? (int)args[2]: (nargs == 10)? (int)args[4]: transport_stream_id;
+ break;
+ case TABLE_NIT_ACT:
+ case TABLE_NIT_OTH:
+ network_id = (nargs == 7) ? (int)args[2]: (nargs == 10)? (int)args[4]: network_id;
+ break;
+ case TABLE_SDT_ACT:
+ case TABLE_SDT_OTH:
+ transport_stream_id = (nargs == 7) ? (int)args[2]: (nargs == 10)? (int)args[4]: transport_stream_id;
+ break;
+ case TABLE_PMT :
+ pmt_pid = ((nargs == 7) || (nargs == 10))? (int)args[0]: pmt_pid;
+ service_id = (nargs == 7) ? (int)args[2]: (nargs == 10)? (int)args[4]: service_id;
+ break;
+ default:
+ info("invalid table id %d\n", table_id);
+ }
+ if (fgets(line, 256, logfile) != NULL) { EM_INFO("next: %s\n", line); } line_no++; //"NIT (act"
+ if (fgets(line, 256, logfile) != NULL) { EM_INFO("next: %s\n", line); } line_no++; //" ===================== parse_"
+ if (fgets(line, 256, logfile) != NULL) { EM_INFO("next: %s\n", line); } line_no++; //" len = "
+ }
+ }
if (strstr(line, "========================================================================")) {
table_id = -1;
@@ -914,21 +1033,33 @@ static int parse_logfile(const char * log) {
for(i=0; i < nitems-1; i++)
sidata->buf[sidata->len++] = args[i];
if (len < 1) {
- //int v = verbosity;
- //verbosity = 5;
- //hexdump(table_name(sidata->table_id, &sidata->buf[0], sidata->len);
- //verbosity = v;
- //char b[256];
- //print_transponder(b, &sidata->t);
- //EM_INFO("add: %6d %-10s pid=%-3d, table_id_ext=%-5d, ONID=%-5d, NID=%-5d, TSID=%-5d, SID=%-5d (%s)\n", \
- // freq_scale(em_device.frequency, 1e-3), \
- // table_name(sidata->table_id), \
- // sidata->pid, \
- // sidata->table_id_ext, \
- // sidata->original_network_id, \
- // sidata->network_id, \
- // sidata->transport_stream_id, \
- // sidata->service_id, b);
+ //info("line %d\n", line_no);
+ //switch(table_id) {
+ // case TABLE_PAT:
+ // info("PAT (xxxx:xxxx:%u)\n", transport_stream_id);
+ // break;
+ // case TABLE_NIT_ACT:
+ // case TABLE_NIT_OTH:
+ // info("%s: (xxxx:%u:xxxx)\n", table_id == 0x40?"NIT(act)":"NIT(oth)", network_id);
+ // break;
+ // case TABLE_SDT_ACT:
+ // case TABLE_SDT_OTH:
+ // info("SDT(%s TS, transport_stream_id %d (0x%04x) )\n", table_id == 0x42 ? "actual":"other",
+ // transport_stream_id, transport_stream_id);
+ // break;
+ // case TABLE_PMT:
+ // info("PMT %d (0x%04x) for service %d (0x%04x)\n", pid, pid, service_id, service_id);
+ // break;
+ // default:
+ // info("??? unknown table_id %d\n", table_id);
+ // }
+ if (em_device.w_scan_flags & EM_HEXDUMP_BUG) {
+ // each sections hexdump misses two bytes, because of bug in older versions. :(
+ // those are really lost in logfile && not recoverable.
+ sidata->buf[sidata->len++] = 0;
+ sidata->buf[sidata->len++] = 0;
+ }
+ //hexdump("sidata", &sidata->buf[0], sidata->len);
AddItem(em_sidata, sidata);
sidata = NULL;
}
diff --git a/satellites.dat b/satellites.dat
index 133cb27..9ba79a9 100644
--- a/satellites.dat
+++ b/satellites.dat
@@ -59,11 +59,11 @@ E(__S180E0)
/******************************************************************************
- * S172.0 EAST (Region: ASIA)
+ * S172.0 EAST (Region: ASIA), Eutelsat 172A
* --autogenerated-- ; 20120520_1801
*****************************************************************************/
B(__S172E0)
-{5, 3916 , 0, 3330 , 3 , 0, 0 }, // GE 23 HOPE CHANNEL INTERN 11 ; 0.0 bps; NID=1132 ; TID=0 ;
+{5, 3916 , 0, 3330 , 3 , 0, 0 }, // HOPE CHANNEL INTERN 11 ; 0.0 bps; NID=1132 ; TID=0 ;
E(__S172E0)
@@ -1574,6 +1574,14 @@ E(__S49E0)
/******************************************************************************
+ * S48.0 EAST (Region: EUROPE)
+ * --autogenerated-- ; 20150525_1609
+ *****************************************************************************/
+B(__S48E0)
+{5, 11293, 1,27500 , 5 , 0, 0 }, // AFGHANSAT 1 2 ; 0.0Mbps; NID=0 ; TID=0 ;
+E(__S48E0)
+
+/******************************************************************************
* S45.0 EAST (Region: EUROPE)
* --autogenerated-- ; 20120517_1301
* 1. OK --wk--
@@ -1796,21 +1804,14 @@ E(__S36E0)
/******************************************************************************
* S33.0 EAST (Region: EUROPE)
- * --autogenerated-- ; 20120517_1301
- * 1. OK --wk--
- * removed 10980V,10984V,11111H,11123H,11134H,11136H,11139V,11162H,11181H,
- * 11181V,11513H,11513V,11555H,11555V,11637H,11642H,11667H,11679V,
- * 12522V,12647V,
+ * --autogenerated-- ; 20150525_1644
*****************************************************************************/
B(__S33E0)
-{5, 11084, 0, 1100 , 7 , 0, 0 }, // EUTELSAT 33A 0 ; 1.8Mbps; NID=65535; TID=1 ;
-{5, 11105, 0, 2441 , 2 , 0, 0 }, // EUTELSAT 33A 0 ; 2.2Mbps; NID=0 ; TID=9100 ;
-{5, 11471, 1, 27500, 5 , 0, 0 }, // EUTELSAT 33A 0 ; 0.0 bps; NID=0 ; TID=0 ;
-{5, 11472, 0, 27500, 5 , 0, 0 }, // EUTELSAT 33A 0 ; 0.0 bps; NID=0 ; TID=0 ;
-{5, 11596, 0, 27500, 5 , 0, 0 }, // EUTELSAT 33A 0 ; 0.0 bps; NID=0 ; TID=0 ;
-{5, 11603, 1, 15710, 3 , 0, 0 }, // EUTELSAT 33A 0 ; 21.7Mbps; NID=829 ; TID=100 ;
-{6, 11649, 1, 10098, 10, 3, 0 }, // EUTELSAT 33A 0 ; 11.7Mbps; NID=830 ; TID=30500;
-{6, 12719, 1, 16666, 3 , 3, 9 }, // EUTELSAT 33A 0 ; 24.9Mbps; NID=8808 ; TID=61441;
+{6, 10975, 0, 30000, 11, 0, 0 }, // EUTELSAT 33B 0 ; 0.0 bps; NID=0 ; TID=0 ;
+{6, 11429, 1, 10098, 10, 3, 0 }, // EUTELSAT 33B 0 ; 0.0 bps; NID=0 ; TID=0 ;
+{5, 11565, 0, 15710, 1 , 0, 0 }, // EUTELSAT 33B 0 ; 0.0 bps; NID=0 ; TID=0 ;
+{6, 12630, 1, 2400, 10, 3, 9 }, // EUTELSAT 33B 0 ; 0.0 bps; NID=126 ; TID=30600;
+{6, 12722, 1, 16730, 3 , 3, 0 }, // EUTELSAT 33A 0 ; 24.9Mbps; NID=8808 ; TID=61441;
E(__S33E0)
@@ -2021,7 +2022,7 @@ E(__S26E0)
/******************************************************************************
* S25.5 EAST (Region: EUROPE)
* --autogenerated-- ; 20120517_1301
- * 1. OK --wk--
+ * Eutelsat 25B
*****************************************************************************/
B(__S25E5)
{5, 10996, 1, 2532 , 3 , 0, 0 }, // EUTELSAT 25A 124; 3.5Mbps; NID=65535; TID=1 ;
@@ -2090,7 +2091,7 @@ E(__S23E5)
* 11449V,11473H,11513H,11544H,11567V,11596H,11600V,11671H,
* 11691H,12692H
*****************************************************************************/
-B(__S21E6)
+B(__S21E5)
{5, 10971, 1, 2170 , 3 , 0, 0 }, // EUTELSAT 21A 0 ; 3.0Mbps; NID=65535; TID=1 ;
{5, 10977, 1, 1447 , 3 , 0, 0 }, // EUTELSAT 21A 0 ; 2.0Mbps; NID=3330 ; TID=333 ;
{6, 10986, 0, 1600 , 11, 3, 0 }, // EUTELSAT 21A 0 ; 2.9Mbps; NID=65535; TID=1 ;
@@ -2107,7 +2108,7 @@ B(__S21E6)
{5, 11651, 1, 15710, 3 , 0, 0 }, // EUTELSAT 21A 0 ; 21.7Mbps; NID=4369 ; TID=1 ;
{5, 11669, 1, 2480 , 7 , 0, 0 }, // EUTELSAT 21A 0 ; 96.5Kbps; NID=65535; TID=1 ;
{5, 12517, 1, 2894 , 3 , 0, 0 }, // EUTELSAT 21A 0 ; 4.0Mbps; NID=0 ; TID=0 ;
-E(__S21E6)
+E(__S21E5)
/******************************************************************************
@@ -2553,59 +2554,99 @@ E(__S7E0)
/******************************************************************************
* S4.8 EAST (Region: EUROPE)
- * --autogenerated-- ; 20120517_1301
- * 1. OK. --wk--
- * NOTE: removed 12265H,12680H,12690H,12698H,12718V,12725V
+ * --autogenerated-- ; 20150101_1459
+ * O.Salonen; w_scan-20150101; ./w_scan -fs -D1c -s S4E8 -v -v -v
*****************************************************************************/
B(__S4E8)
-{5, 11727, 0, 27500, 5 , 0, 0 }, // ASTRA 4A 0 ; 42.2Mbps; NID=86 ; TID=30 ;
-{5, 11747, 1, 27500, 3 , 0, 0 }, // ASTRA 4A 0 ; 38.0Mbps; NID=86 ; TID=10 ;
-{5, 11766, 0, 27500, 3 , 0, 0 }, // ASTRA 4A 3 ; 38.0Mbps; NID=85 ; TID=12 ;
-{5, 11785, 1, 27500, 3 , 0, 0 }, // ASTRA 4A 0 ; 38.0Mbps; NID=86 ; TID=11 ;
-{5, 11804, 0, 27500, 3 , 0, 0 }, // ASTRA 4A 0 ; 38.0Mbps; NID=86 ; TID=8 ;
-{5, 11823, 1, 27500, 3 , 0, 0 }, // ASTRA 4A 0 ; 38.0Mbps; NID=86 ; TID=9 ;
-{5, 11843, 0, 27500, 3 , 0, 0 }, // ASTRA 4A 0 ; 38.0Mbps; NID=85 ; TID=13 ;
-{5, 11862, 1, 27500, 3 , 0, 0 }, // ASTRA 4A 0 ; 38.0Mbps; NID=86 ; TID=21 ;
-{5, 11881, 0, 27500, 3 , 0, 0 }, // ASTRA 4A 0 ; 38.0Mbps; NID=86 ; TID=7 ;
-{5, 11900, 1, 27500, 3 , 0, 0 }, // ASTRA 4A 0 ; 38.0Mbps; NID=85 ; TID=18 ;
-{5, 11919, 0, 27500, 3 , 0, 0 }, // ASTRA 4A 0 ; 38.0Mbps; NID=86 ; TID=24 ;
-{5, 11938, 1, 27500, 3 , 0, 0 }, // ASTRA 4A 0 ; 38.0Mbps; NID=86 ; TID=22 ;
-{5, 11958, 0, 27500, 3 , 0, 0 }, // ASTRA 4A 0 ; 38.0Mbps; NID=85 ; TID=14 ;
-{5, 11977, 1, 27500, 3 , 0, 0 }, // ASTRA 4A 0 ; 38.0Mbps; NID=86 ; TID=4 ;
-{5, 11996, 0, 27500, 3 , 0, 0 }, // ASTRA 4A 0 ; 38.0Mbps; NID=86 ; TID=6 ;
-{5, 12015, 1, 27500, 5 , 0, 0 }, // ASTRA 4A 0 ; 42.2Mbps; NID=86 ; TID=28 ;
-{5, 12034, 0, 27500, 3 , 0, 0 }, // ASTRA 4A 0 ; 38.0Mbps; NID=86 ; TID=5 ;
-{5, 12054, 1, 27500, 3 , 0, 0 }, // ASTRA 4A 0 ; 38.0Mbps; NID=86 ; TID=3 ;
-{5, 12073, 0, 27500, 3 , 0, 0 }, // ASTRA 4A 15 ; 38.0Mbps; NID=85 ; TID=15 ;
-{5, 12092, 1, 27500, 3 , 0, 0 }, // ASTRA 4A 0 ; 38.0Mbps; NID=86 ; TID=23 ;
-{5, 12111, 0, 27500, 5 , 0, 0 }, // ASTRA 4A 0 ; 42.2Mbps; NID=65535; TID=1 ;
-{5, 12130, 1, 27500, 3 , 0, 0 }, // ASTRA 4A 0 ; 38.0Mbps; NID=85 ; TID=16 ;
-{5, 12149, 0, 27500, 3 , 0, 0 }, // ASTRA 4A 0 ; 38.0Mbps; NID=1 ; TID=201 ;
-{6, 12169, 1, 27500, 3 , 3, 9 }, // ASTRA 4A 0 ; 61.3Mbps; NID=68 ; TID=24 ;
-{6, 12188, 0, 27500, 3 , 3, 9 }, // ASTRA 4A 0 ; 59.9Mbps; NID=86 ; TID=33 ;
-{6, 12207, 1, 27500, 3 , 3, 9 }, // ASTRA 4A 0 ; 61.3Mbps; NID=68 ; TID=26 ;
-{5, 12226, 0, 25540, 7 , 0, 0 }, // ASTRA 4A 0 ; 41.2Mbps; NID=94 ; TID=1 ;
-{5, 12245, 1, 27500, 3 , 0, 0 }, // ASTRA 4A 0 ; 38.0Mbps; NID=85 ; TID=52 ;
-{5, 12265, 0, 27500, 3 , 0, 0 }, // ASTRA 4A 0 ; 42.2Mbps; NID=1 ; TID=1 ;
-{5, 12284, 1, 27500, 3 , 0, 0 }, // ASTRA 4A 0 ; 38.0Mbps; NID=85 ; TID=17 ;
-{5, 12303, 0, 25547, 7 , 0, 0 }, // ASTRA 4A 0 ; 41.2Mbps; NID=0 ; TID=0 ;
-{5, 12322, 1, 27500, 7 , 0, 0 }, // ASTRA 4A 0 ; 44.4Mbps; NID=94 ; TID=1 ;
-{6, 12341, 0, 27500, 3 , 3, 9 }, // ASTRA 4A 0 ; 59.9Mbps; NID=86 ; TID=32 ;
-{5, 12360, 1, 27500, 3 , 0, 0 }, // ASTRA 4A 0 ; 38.0Mbps; NID=366 ; TID=256 ;
-{5, 12380, 0, 27500, 3 , 0, 0 }, // ASTRA 4A 0 ; 38.0Mbps; NID=85 ; TID=2 ;
-{6, 12399, 1, 27500, 3 , 3, 9 }, // ASTRA 4A 0 ; 59.9Mbps; NID=86 ; TID=25 ;
-{5, 12418, 0, 27500, 3 , 0, 0 }, // ASTRA 4A 0 ; 38.0Mbps; NID=1 ; TID=101 ;
-{6, 12437, 1, 27500, 3 , 3, 9 }, // ASTRA 4A 0 ; 59.9Mbps; NID=86 ; TID=27 ;
-{6, 12456, 0, 27500, 3 , 3, 9 }, // ASTRA 4A 0 ; 59.9Mbps; NID=86 ; TID=31 ;
-{5, 12476, 1, 27500, 3 , 0, 0 }, // ASTRA 4A 0 ; 38.0Mbps; NID=86 ; TID=26 ;
-{5, 12608, 0, 27500, 3 , 0, 0 }, // ASTRA 4A 0 ; 38.0Mbps; NID=86 ; TID=29 ;
-{5, 12637, 0, 14465, 3 , 0, 0 }, // ASTRA 4A 0 ; 20.0Mbps; NID=86 ; TID=20 ;
-{5, 12672, 0, 3300 , 3 , 0, 0 }, // ASTRA 4A 0 ; 4.6Mbps; NID=1 ; TID=1 ;
-{6, 12682, 1, 1111 , 2 , 3, 9 }, // ASTRA 4A 0 ; 2.8Mbps; NID=21845; TID=43690;
-{5, 12687, 1, 6667 , 5 , 0, 0 }, // ASTRA 4A 0 ; 10.2Mbps; NID=2052 ; TID=256 ;
-{5, 12693, 1, 3333 , 5 , 0, 0 }, // ASTRA 4A 0 ; 5.1Mbps; NID=177 ; TID=176 ;
-{5, 12703, 1, 2963 , 3 , 0, 0 }, // ASTRA 4A 0 ; 4.1Mbps; NID=235 ; TID=100 ;
-{5, 12713, 0, 2450 , 7 , 0, 0 }, // ASTRA 4A 0 ; 3.9Mbps; NID=65535; TID=1 ;
+{5, 10723, 0, 29900, 9 , 3, 6 }, // ASTRA 4A && SES 5 ; (318 , 68 ,11100)
+{5, 10759, 0, 30000, 9 , 3, 6 }, // ASTRA 4A && SES 5 ; (3 , 68 ,1 )
+{5, 10796, 1, 27500, 9 , 3, 6 }, // ASTRA 4A && SES 5 ; (318 , 68 ,11400)
+{5, 10806, 0, 30000, 9 , 3, 6 }, // ASTRA 4A && SES 5 ; (1 , 68 ,20 )
+{5, 10912, 0, 22330, 9 , 3, 6 }, // ASTRA 4A && SES 5 ; (4369 , 68 ,21 )
+{5, 10955, 1, 27500, 9 , 3, 6 }, // ASTRA 4A && SES 5 ; (318 , 68 ,201 )
+{5, 10971, 0, 27500, 3 , 0, 0 }, // ASTRA 4A && SES 5 ; (318 , 86 ,10971)
+{6, 10993, 1, 27500, 9 , 3, 9 }, // ASTRA 4A && SES 5 ; (318 , 68 ,401 )
+{5, 11013, 0, 27500, 3 , 0, 0 }, // ASTRA 4A && SES 5 ; (100 , 86 ,4688 )
+{5, 11034, 1, 27500, 9 , 3, 6 }, // ASTRA 4A && SES 5 ; (318 , 68 ,12600)
+{6, 11096, 0, 29900, 9 , 3, 9 }, // ASTRA 4A && SES 5 ; (318 , 68 ,12900)
+{5, 11117, 1, 27500, 9 , 3, 6 }, // ASTRA 4A && SES 5 ; (318 , 68 ,13000)
+{5, 11137, 0, 27500, 3 , 0, 0 }, // ASTRA 4A && SES 5 ; (318 , 86 ,13100)
+{5, 11158, 1, 27500, 9 , 3, 6 }, // ASTRA 4A && SES 5 ; (113 , 68 ,13200)
+{5, 11240, 1, 27500, 9 , 3, 6 }, // ASTRA 4A && SES 5 ; (318 , 68 ,200 )
+{5, 11252, 0, 03600, 9 , 3, 6 }, // ASTRA 4A && SES 5 ; (2 , 68 ,2 )
+{6, 11265, 0, 30000, 3 , 0, 9 }, // ASTRA 4A && SES 5 ; (86 , 86 ,34 )
+{6, 11265, 1, 30000, 3 , 0, 9 }, // ASTRA 4A && SES 5 ; (86 , 86 ,33 )
+{6, 11278, 1, 27500, 9 , 3, 9 }, // ASTRA 4A && SES 5 ; (318 , 68 ,400 )
+{6, 11305, 0, 30000, 3 , 0, 9 }, // ASTRA 4A && SES 5 ; (86 , 86 ,35 )
+{6, 11305, 1, 30000, 3 , 0, 9 }, // ASTRA 4A && SES 5 ; (86 , 86 ,32 )
+{6, 11345, 0, 30000, 3 , 0, 9 }, // ASTRA 4A && SES 5 ; (86 , 86 ,36 )
+{6, 11345, 1, 30000, 3 , 0, 9 }, // ASTRA 4A && SES 5 ; (86 , 86 ,25 )
+{6, 11385, 0, 30000, 3 , 0, 9 }, // ASTRA 4A && SES 5 ; (86 , 86 ,38 )
+{6, 11385, 1, 30000, 3 , 0, 9 }, // ASTRA 4A && SES 5 ; (86 , 86 ,31 )
+{5, 11389, 0, 27500, 9 , 3, 6 }, // ASTRA 4A && SES 5 ; (1 , 68 ,1 )
+{5, 11395, 0, 27500, 9 , 3, 6 }, // ASTRA 4A && SES 5 ; (1 , 68 ,2 )
+{5, 11411, 0, 27500, 9 , 3, 6 }, // ASTRA 4A && SES 5 ; (318 , 68 ,1100 )
+{5, 11488, 0, 27500, 3 , 0, 0 }, // ASTRA 4A && SES 5 ; (318 , 94 ,1500 )
+{5, 11604, 0, 27500, 9 , 3, 6 }, // ASTRA 4A && SES 5 ; (318 , 68 ,15500)
+{5, 11610, 0, 03600, 9 , 3, 6 }, // ASTRA 4A && SES 5 ; (2 , 68 ,1 )
+{5, 11623, 1, 27500, 9 , 3, 6 }, // ASTRA 4A && SES 5 ; (318 , 68 ,15600)
+{5, 11642, 0, 27500, 9 , 3, 6 }, // ASTRA 4A && SES 5 ; (318 , 68 ,15700)
+{6, 11654, 0, 02000, 9 , 3, 0 }, // ASTRA 4A && SES 5 ; (4660 , 68 ,1 )
+{6, 11662, 1, 27500, 9 , 3, 9 }, // ASTRA 4A && SES 5 ; (318 , 68 ,15800)
+{6, 11681, 0, 27500, 9 , 3, 9 }, // ASTRA 4A && SES 5 ; (319 , 68 ,15900)
+{5, 11727, 0, 27500, 5 , 0, 0 }, // ASTRA 4A && SES 5 ; (86 , 86 ,30 )
+{5, 11727, 1, 27500, 9 , 3, 6 }, // ASTRA 4A && SES 5 ; (1 , 68 ,5000 )
+{5, 11766, 0, 27500, 3 , 0, 0 }, // ASTRA 4A && SES 5 ; (85 , 86 ,12 )
+{5, 11785, 1, 27500, 3 , 0, 0 }, // ASTRA 4A && SES 5 ; (86 , 86 ,11 )
+{5, 11804, 0, 27500, 3 , 0, 0 }, // ASTRA 4A && SES 5 ; (86 , 86 ,8 )
+{5, 11804, 1, 27500, 3 , 0, 0 }, // ASTRA 4A && SES 5 ; (318 , 86 ,5400 )
+{5, 11823, 1, 27500, 3 , 0, 0 }, // ASTRA 4A && SES 5 ; (86 , 86 ,9 )
+{5, 11843, 0, 27500, 3 , 0, 0 }, // ASTRA 4A && SES 5 ; (85 , 86 ,13 )
+{5, 11862, 1, 27500, 3 , 0, 0 }, // ASTRA 4A && SES 5 ; (86 , 86 ,21 )
+{5, 11881, 0, 27500, 3 , 0, 0 }, // ASTRA 4A && SES 5 ; (86 , 86 ,7 )
+{5, 11900, 1, 27500, 3 , 0, 0 }, // ASTRA 4A && SES 5 ; (85 , 86 ,18 )
+{5, 11919, 0, 27500, 3 , 0, 0 }, // ASTRA 4A && SES 5 ; (86 , 86 ,24 )
+{5, 11938, 1, 27500, 3 , 0, 0 }, // ASTRA 4A && SES 5 ; (86 , 86 ,22 )
+{5, 11958, 0, 27500, 3 , 0, 0 }, // ASTRA 4A && SES 5 ; (85 , 86 ,14 )
+{5, 11977, 1, 27500, 3 , 0, 0 }, // ASTRA 4A && SES 5 ; (86 , 86 ,4 )
+{5, 11996, 0, 27500, 3 , 0, 0 }, // ASTRA 4A && SES 5 ; (86 , 86 ,6 )
+{6, 12015, 0, 27500, 9 , 3, 9 }, // ASTRA 4A && SES 5 ; (156 , 68 ,6500 )
+{5, 12015, 1, 27500, 5 , 0, 0 }, // ASTRA 4A && SES 5 ; (86 , 86 ,28 )
+{5, 12034, 0, 27500, 3 , 0, 0 }, // ASTRA 4A && SES 5 ; (86 , 86 ,5 )
+{6, 12034, 1, 27500, 9 , 3, 9 }, // ASTRA 4A && SES 5 ; (158 , 68 ,6600 )
+{5, 12054, 1, 27500, 3 , 0, 0 }, // ASTRA 4A && SES 5 ; (86 , 86 ,3 )
+{6, 12071, 0, 27500, 9 , 3, 9 }, // ASTRA 4A && SES 5 ; (85 , 85 ,42 )
+{5, 12073, 0, 27500, 3 , 0, 0 }, // ASTRA 4A && SES 5 ; (85 , 86 ,15 )
+{5, 12092, 1, 27500, 3 , 0, 0 }, // ASTRA 4A && SES 5 ; (86 , 86 ,23 )
+{5, 12130, 0, 27500, 9 , 3, 6 }, // ASTRA 4A && SES 5 ; (318 , 68 ,7100 )
+{5, 12130, 1, 27500, 3 , 0, 0 }, // ASTRA 4A && SES 5 ; (85 , 68 ,16 )
+{5, 12149, 0, 27500, 3 , 0, 0 }, // ASTRA 4A && SES 5 ; (1 , 1 ,201 )
+{5, 12149, 1, 27500, 9 , 3, 6 }, // ASTRA 4A && SES 5 ; (318 , 68 ,7200 )
+{6, 12168, 1, 27500, 3 , 1, 9 }, // ASTRA 4A && SES 5 ; (68 , 68 ,24 )
+{6, 12206, 1, 30000, 3 , 0, 9 }, // ASTRA 4A && SES 5 ; (68 , 86 ,26 )
+{5, 12207, 0, 27500, 9 , 3, 6 }, // ASTRA 4A && SES 5 ; (318 , 68 ,1 )
+{5, 12245, 0, 27500, 9 , 3, 6 }, // ASTRA 4A && SES 5 ; (318 , 68 ,7700 )
+{5, 12245, 1, 27500, 3 , 0, 0 }, // ASTRA 4A && SES 5 ; (85 , 86 ,52 )
+{5, 12265, 0, 27500, 9 , 3, 6 }, // ASTRA 4A && SES 5 ; (366 , 68 ,256 )
+{5, 12284, 1, 27500, 3 , 0, 0 }, // ASTRA 4A && SES 5 ; (85 , 86 ,17 )
+{5, 12303, 0, 25547, 7 , 0, 0 }, // ASTRA 4A && SES 5 ; (1 , 1 ,0 )
+{5, 12322, 0, 27500, 9 , 3, 6 }, // ASTRA 4A && SES 5 ; (318 , 68 ,8100 )
+{5, 12322, 1, 27500, 7 , 0, 0 }, // ASTRA 4A && SES 5 ; (94 , 94 ,1 )
+{5, 12380, 0, 27500, 3 , 0, 0 }, // ASTRA 4A && SES 5 ; (85 , 86 ,2 )
+{5, 12399, 1, 27500, 3 , 0, 0 }, // ASTRA 4A && SES 5 ; (85 , 85 ,19 )
+{5, 12417, 1, 27500, 9 , 3, 6 }, // ASTRA 4A && SES 5 ; (85 , 68 ,20 )
+{5, 12418, 0, 27500, 3 , 0, 0 }, // ASTRA 4A && SES 5 ; (1 , 1 ,101 )
+{6, 12437, 1, 27500, 3 , 0, 9 }, // ASTRA 4A && SES 5 ; (86 , 86 ,27 )
+{6, 12456, 0, 27500, 3 , 0, 9 }, // ASTRA 4A && SES 5 ; (86 , 86 ,37 )
+{6, 12476, 0, 29900, 9 , 3, 9 }, // ASTRA 4A && SES 5 ; (318 , 68 ,8900 )
+{5, 12476, 1, 27500, 3 , 0, 0 }, // ASTRA 4A && SES 5 ; (86 , 86 ,26 )
+{5, 12520, 1, 27500, 9 , 3, 6 }, // ASTRA 4A && SES 5 ; (318 , 68 ,9000 )
+{5, 12597, 1, 27500, 9 , 3, 6 }, // ASTRA 4A && SES 5 ; (318 , 68 ,9400 )
+{5, 12609, 0, 27500, 3 , 0, 0 }, // ASTRA 4A && SES 5 ; (86 , 86 ,29 )
+{5, 12637, 0, 14468, 3 , 0, 0 }, // ASTRA 4A && SES 5 ; (86 , 86 ,20 )
+{5, 12670, 0, 02600, 9 , 3, 6 }, // ASTRA 4A && SES 5 ; (85 , 68 ,1 )
+{5, 12692, 0, 27500, 9 , 3, 6 }, // ASTRA 4A && SES 5 ; (319 , 68 ,9900 )
+{5, 12731, 1, 15300, 9 , 3, 6 }, // ASTRA 4A && SES 5 ; (8192 , 68 ,4096 )
E(__S4E8)
@@ -3005,13 +3046,12 @@ E(__S18W0)
/******************************************************************************
* S20.0 WEST (Region: ATLANTIC)
- * --autogenerated-- ; 20120517_1301
- * 1. OK. --wk--
+ * 20150525_1742
+ * NSS 7 moved from 22W to 20W to replace NSS 5
*****************************************************************************/
B(__S20W0)
-{5, 3913 , 3, 8950 , 3 , 0, 0 }, // NSS 5 23 ; 11.0Mbps; NID=1 ; TID=1 ;
-{5, 3983 , 3, 25000, 3 , 0, 0 }, // NSS 5 24 ; 34.6Mbps; NID=1 ; TID=201 ;
-{6, 4159 , 2, 3034 , 1 , 3, 0 }, // NSS 5 88 ; 2.9Mbps; NID=1 ; TID=1 ;
+{6, 4129 , 3, 15405, 1 , 0, 0 }, // NSS 7 8 ; 0.0 bps; NID=0 ; TID=0 ;
+{5, 15585, 0, 2200 , 1 , 0, 0 }, // NSS 7 7 ; 0.0Mbps; NID=0 ; TID=0 ;
E(__S20W0)
@@ -4600,6 +4640,7 @@ S100E5,
S53E0,
S52E5,
S49E0,
+ S48E0,
S45E0,
S42E0,
S40E0,
@@ -4613,7 +4654,7 @@ S100E5,
S26E0,
S25E5,
S23E5,
- S21E6,
+ S21E5,
S20E0,
S19E2,
S16E0,
@@ -4691,140 +4732,141 @@ S177W0,
*****************************************************************************/
struct cSat sat_list[] = {
-/** pos *** id *** long satellite name ***************************** items **************** item_count ************ we_flag * orbit * rotor * vdrid */
-{"S180E0", S180E0, "180.0 east Intelsat 18" , __S180E0, SAT_TRANSPONDER_COUNT(__S180E0), EAST_FLAG, 0x1800, -1, "S180E" }, // 20120520: new
-{"S172E0", S172E0, "172.0 east GE 23" , __S172E0, SAT_TRANSPONDER_COUNT(__S172E0), EAST_FLAG, 0x1720, -1, "S172E" }, // 20120520: new
-{"S169E0", S169E0, "169.0 east Intelsat 5" , __S169E0, SAT_TRANSPONDER_COUNT(__S169E0), EAST_FLAG, 0x1690, -1, "S169E" }, // 20120520: new
-{"S166E0", S166E0, "166.0 east Intelsat 8" , __S166E0, SAT_TRANSPONDER_COUNT(__S166E0), EAST_FLAG, 0x1660, -1, "S166E" },
-{"S162E0", S162E0, "162.0 east Superbird B2" , __S162E0, SAT_TRANSPONDER_COUNT(__S162E0), EAST_FLAG, 0x1620, -1, "S162E" }, // 20120520: new
-{"S160E0", S160E0, "160.0 east Optus D1" , __S160E0, SAT_TRANSPONDER_COUNT(__S160E0), EAST_FLAG, 0x1600, -1, "S160E" },
-{"S156E0", S156E0, "156.0 east Optus C1/D3" , __S156E0, SAT_TRANSPONDER_COUNT(__S156E0), EAST_FLAG, 0x1560, -1, "S156E" },
-{"S154E0", S154E0, "154.0 east JCSAT 2A" , __S154E0, SAT_TRANSPONDER_COUNT(__S154E0), EAST_FLAG, 0x1540, -1, "S154E" }, // 20120520: new
-{"S152E0", S152E0, "152.0 east Optus D2" , __S152E0, SAT_TRANSPONDER_COUNT(__S152E0), EAST_FLAG, 0x1520, -1, "S152E" },
-{"S144E0", S144E0, "144.0 east Superbird C2" , __S144E0, SAT_TRANSPONDER_COUNT(__S144E0), EAST_FLAG, 0x1440, -1, "S144E" }, // 20120520: new
-{"S140E0", S140E0, "140.0 east Express AM3" , __S140E0, SAT_TRANSPONDER_COUNT(__S140E0), EAST_FLAG, 0x1400, -1, "S140E" }, // 20120520: id && name changed.
-{"S138E0", S138E0, "134.0 east Telstar 18" , __S138E0, SAT_TRANSPONDER_COUNT(__S138E0), EAST_FLAG, 0x1380, -1, "S138E" }, // 20120520: new
-{"S134E0", S134E0, "134.0 east Apstar 6" , __S134E0, SAT_TRANSPONDER_COUNT(__S134E0), EAST_FLAG, 0x1340, -1, "S134E" }, // 20120520: new
-{"S132E0", S132E0, "132.0 east Vinasat 1 / JCSAT 5A" , __S132E0, SAT_TRANSPONDER_COUNT(__S132E0), EAST_FLAG, 0x1320, -1, "S132E" }, // 20120520: new
-{"S128E0", S128E0, "128.0 east JCSAT 3A" , __S128E0, SAT_TRANSPONDER_COUNT(__S128E0), EAST_FLAG, 0x1280, -1, "S128E" }, // 20120520: new
-{"S125E0", S125E0, "125.0 east ChinaSat 6A" , __S125E0, SAT_TRANSPONDER_COUNT(__S125E0), EAST_FLAG, 0x1250, -1, "S125E" }, // 20120520: new
-{"S124E0", S124E0, "124.0 east JCSAT 4A" , __S124E0, SAT_TRANSPONDER_COUNT(__S124E0), EAST_FLAG, 0x1240, -1, "S124E" }, // 20120520: new
-{"S122E2", S122E2, "122.2 east AsiaSat 4" , __S122E2, SAT_TRANSPONDER_COUNT(__S122E2), EAST_FLAG, 0x1222, -1, "S122.2E"}, // 20120520: new
-{"S118E0", S118E0, "118.0 east Telkom 2" , __S118E0, SAT_TRANSPONDER_COUNT(__S118E0), EAST_FLAG, 0x1180, -1, "S118E" }, // 20120520: new
-{"S116E0", S116E0, "116.0 east Koreasat 6 / ABS 7" , __S116E0, SAT_TRANSPONDER_COUNT(__S116E0), EAST_FLAG, 0x1160, -1, "S116E" }, // 20120520: new
-{"S115E5", S115E5, "115.5 east ChinaSat 6B" , __S115E5, SAT_TRANSPONDER_COUNT(__S115E5), EAST_FLAG, 0x1155, -1, "S115.5E"}, // 20120520: new
-{"S113E0", S113E0, "113.0 east Koreasat 5 / Palapa D" , __S113E0, SAT_TRANSPONDER_COUNT(__S113E0), EAST_FLAG, 0x1130, -1, "S113E" }, // 20120520: new
-{"S110E5", S110E5, "110.5 east ChinaSat 10" , __S110E5, SAT_TRANSPONDER_COUNT(__S110E5), EAST_FLAG, 0x1105, -1, "S110.5E"}, // 20120520: new
-{"S110E0", S110E0, "110.0 east NSat 110 / BSat 2C/3A / JCSat 110R", __S110E0, SAT_TRANSPONDER_COUNT(__S110E0), EAST_FLAG, 0x1100, -1, "S110E" }, // 20120520: new
-{"S108E2", S108E2, "108.2 east Telkom 1 / NSS 11 / SES 7" , __S108E2, SAT_TRANSPONDER_COUNT(__S108E2), EAST_FLAG, 0x1082, -1, "S108.2E"}, // 20120520: id && name changed.
-{"S105E5", S105E5, "105.5 east AsiaSat 3S" , __S105E5, SAT_TRANSPONDER_COUNT(__S105E5), EAST_FLAG, 0x1055, -1, "S105.5E"}, // 20120520: id changed.
-{"S103E0", S103E0, "103.0 east Express A2" , __S103E0, SAT_TRANSPONDER_COUNT(__S103E0), EAST_FLAG, 0x1030, -1, "S103E" }, // 20120520: new
-{"S100E5", S100E5, "100.5 east AsiaSat 5" , __S100E5, SAT_TRANSPONDER_COUNT(__S100E5), EAST_FLAG, 0x1005, -1, "S100.5E"}, // 20120520: id && name changed.
-{ "S96E5", S96E5, "96.5 east Express AM33" , __S96E5, SAT_TRANSPONDER_COUNT( __S96E5), EAST_FLAG, 0x965, -1, "S96.5E" }, // 20120520: id changed.
-{ "S95E0", S95E0, "95.0 east NSS 6" , __S95E0, SAT_TRANSPONDER_COUNT( __S95E0), EAST_FLAG, 0x950, -1, "S95E" }, // 20120520: id changed.
-{ "S93E5", S93E5, "93.5 east Insat 3A/4B" , __S93E5, SAT_TRANSPONDER_COUNT( __S93E5), EAST_FLAG, 0x935, -1, "S93.5E" }, // 20120520: id changed.
-{ "S91E5", S91E5, "91.5 east Measat 3 / 3A" , __S91E5, SAT_TRANSPONDER_COUNT( __S91E5), EAST_FLAG, 0x915, -1, "S91.5E" }, // 20120520: id changed.
-{ "S90E0", S90E0, "90.0 east Yamal 201" , __S90E0, SAT_TRANSPONDER_COUNT( __S90E0), EAST_FLAG, 0x900, -1, "S90E" }, // 20120520: id changed.
-{ "S88E0", S88E0, "88.0 east ST 2" , __S88E0, SAT_TRANSPONDER_COUNT( __S88E0), EAST_FLAG, 0x880, -1, "S88E" }, // 20120520: id && name changed.
-{ "S87E5", S87E5, "87.5 east ChinaSat 5A" , __S87E5, SAT_TRANSPONDER_COUNT( __S87E5), EAST_FLAG, 0x875, -1, "S87.5E" }, // 20120520: id && name changed.
-{ "S86E5", S86E5, "86.5 east KazSat 2" , __S86E5, SAT_TRANSPONDER_COUNT( __S86E5), EAST_FLAG, 0x865, -1, "S86.5E" }, // 20120520: new
-{ "S85E0", S85E0, "85.0 east Horisons 2 / Intelsat 15" , __S85E0, SAT_TRANSPONDER_COUNT( __S85E0), EAST_FLAG, 0x850, -1, "S85E" }, // 20120520: new
-{ "S83E0", S83E0, "83.0 east Insat 2E/4A" , __S83E0, SAT_TRANSPONDER_COUNT( __S83E0), EAST_FLAG, 0x830, -1, "S83E" }, // 20120517: id changed.
-{ "S78E5", S78E5, "78.5 east Thaicom 2/5" , __S78E5, SAT_TRANSPONDER_COUNT( __S78E5), EAST_FLAG, 0x785, -1, "S78.5E" },
-{ "S76E5", S76E5, "76.5 east Telstar 10 (Apstar 2R)" , __S76E5, SAT_TRANSPONDER_COUNT( __S76E5), EAST_FLAG, 0x765, -1, "S76.5E" }, // 20120517: id changed.
-{ "S75E0", S75E0, "75.0 east ABS 1" , __S75E0, SAT_TRANSPONDER_COUNT( __S75E0), EAST_FLAG, 0x750, -1, "S75E" }, // 20120517: id changed.
-{ "S70E5", S70E5, "70.5 east Eutelsat W5" , __S70E5, SAT_TRANSPONDER_COUNT( __S70E5), EAST_FLAG, 0x705, -1, "S70.5E" },
-{ "S68E5", S68E5, "68.5 east Intelsat 7/10" , __S68E5, SAT_TRANSPONDER_COUNT( __S68E5), EAST_FLAG, 0x685, -1, "S68.5E" }, // 20120517: id changed.
-{ "S66E0", S66E0, "66.0 east Intelsat 17" , __S66E0, SAT_TRANSPONDER_COUNT( __S66E0), EAST_FLAG, 0x660, -1, "S66E" }, // new 20120517
-{ "S64E2", S64E2, "64.2 east Intelsat 906" , __S64E2, SAT_TRANSPONDER_COUNT( __S64E2), EAST_FLAG, 0x642, -1, "S64E" },
-{ "S62E0", S62E0, "62.0 east Intelsat 902" , __S62E0, SAT_TRANSPONDER_COUNT( __S62E0), EAST_FLAG, 0x620, -1, "S62E" }, // 20120517: id changed.
-{ "S60E0", S60E0, "60.0 east Intelsat 904" , __S60E0, SAT_TRANSPONDER_COUNT( __S60E0), EAST_FLAG, 0x600, -1, "S60E" }, // 20120517: id changed.
-{ "S57E0", S57E0, "57.0 east NSS 12" , __S57E0, SAT_TRANSPONDER_COUNT( __S57E0), EAST_FLAG, 0x570, -1, "S57E" },
-{ "S56E0", S56E0, "56.0 east Bonum 1" , __S56E0, SAT_TRANSPONDER_COUNT( __S56E0), EAST_FLAG, 0x560, -1, "S56E" }, // 20120517: id changed.
-{ "S53E0", S53E0, "53.0 east Express AM22" , __S53E0, SAT_TRANSPONDER_COUNT( __S53E0), EAST_FLAG, 0x530, -1, "S53E" },
-{ "S52E5", S52E5, "52.5 east Yahsat 1A" , __S52E5, SAT_TRANSPONDER_COUNT( __S52E5), EAST_FLAG, 0x525, -1, "S52.5E" },
-{ "S49E0", S49E0, "49.0 east Yamal 202" , __S49E0, SAT_TRANSPONDER_COUNT( __S49E0), EAST_FLAG, 0x490, -1, "S49E" },
-{ "S45E0", S45E0, "45.0 east Intelsat 12" , __S45E0, SAT_TRANSPONDER_COUNT( __S45E0), EAST_FLAG, 0x450, -1, "S45E" },
-{ "S42E0", S42E0, "42.0 east Turksat 2A/3A" , __S42E0, SAT_TRANSPONDER_COUNT( __S42E0), EAST_FLAG, 0x420, -1, "S42E" },
-{ "S40E0", S40E0, "40.0 east Express AM1" , __S40E0, SAT_TRANSPONDER_COUNT( __S40E0), EAST_FLAG, 0x400, -1, "S40E" }, // 20120517: id changed.
-{ "S39E0", S39E0, "39.0 east Hellas Sat 2" , __S39E0, SAT_TRANSPONDER_COUNT( __S39E0), EAST_FLAG, 0x390, -1, "S39E" },
-{ "S38E0", S38E0, "38.0 east Paksat 1" , __S38E0, SAT_TRANSPONDER_COUNT( __S38E0), EAST_FLAG, 0x380, -1, "S38E" },
-{ "S36E0", S36E0, "36.0 east Eutelsat W4/W7" , __S36E0, SAT_TRANSPONDER_COUNT( __S36E0), EAST_FLAG, 0x360, -1, "S36E" }, // old id: S35E9
-{ "S33E0", S33E0, "33.0 east Eurobird 3" , __S33E0, SAT_TRANSPONDER_COUNT( __S33E0), EAST_FLAG, 0x330, -1, "S33E" },
-{ "S31E5", S31E5, "31.5 east Astra 5A/1D" , __S31E5, SAT_TRANSPONDER_COUNT( __S31E5), EAST_FLAG, 0x315, -1, "S31.5E" },
-{ "S30E5", S30E5, "30.5 east Arabsat 5A" , __S30E5, SAT_TRANSPONDER_COUNT( __S30E5), EAST_FLAG, 0x305, -1, "S30.5E" }, // new 20120517
-{ "S28E2", S28E2, "28.2 east Astra 2A/B/C/D + EuroBird 1 28.5" , __S28E2, SAT_TRANSPONDER_COUNT( __S28E2), EAST_FLAG, 0x282, -1, "S28.2E" }, // 20120517: merged 28.2 && 28.5
-{ "S26E0", S26E0, "26.X east Badr C/3/4/6" , __S26E0, SAT_TRANSPONDER_COUNT( __S26E0), EAST_FLAG, 0x260, -1, "S26E" }, // 20120517: id changed.
-{ "S25E5", S25E5, "25.5 east Eurobird 2" , __S25E5, SAT_TRANSPONDER_COUNT( __S25E5), EAST_FLAG, 0x255, -1, "S25.5E" },
-{ "S23E5", S23E5, "23.5 east Astra 1E/3A" , __S23E5, SAT_TRANSPONDER_COUNT( __S23E5), EAST_FLAG, 0x235, -1, "S23.5E" },
-{ "S21E6", S21E6, "21.6 east Eutelsat W6" , __S21E6, SAT_TRANSPONDER_COUNT( __S21E6), EAST_FLAG, 0x216, -1, "S21.6E" },
-{ "S20E0", S20E0, "20.0 east Arabsat 5C" , __S20E0, SAT_TRANSPONDER_COUNT( __S20E0), EAST_FLAG, 0x200, -1, "S20E" }, // new 20120517
-{ "S19E2", S19E2, "19.2 east Astra 1F/1G/1H/1KR/1L" , __S19E2, SAT_TRANSPONDER_COUNT( __S19E2), EAST_FLAG, 0x192, -1, "S19.2E" },
-{ "S16E0", S16E0, "16.0 east Eutelsat W2" , __S16E0, SAT_TRANSPONDER_COUNT( __S16E0), EAST_FLAG, 0x160, -1, "S16E" },
-{ "S13E0", S13E0, "13.0 east Hotbird 6/7A/8" , __S13E0, SAT_TRANSPONDER_COUNT( __S13E0), EAST_FLAG, 0x130, -1, "S13E" },
-{ "S10E0", S10E0, "10.0 east Eutelsat W1" , __S10E0, SAT_TRANSPONDER_COUNT( __S10E0), EAST_FLAG, 0x100, -1, "S10E" },
-{ "S9E0", S9E0, "9.0 east Eurobird 9" , __S9E0, SAT_TRANSPONDER_COUNT( __S9E0), EAST_FLAG, 0x90, -1, "S9E" },
-{ "S7E0", S7E0, "7.0 east Eutelsat W3A" , __S7E0, SAT_TRANSPONDER_COUNT( __S7E0), EAST_FLAG, 0x70, -1, "S7E" },
-{ "S4E8", S4E8, "4.8 east Sirius" , __S4E8, SAT_TRANSPONDER_COUNT( __S4E8), EAST_FLAG, 0x48, -1, "S4.8E" },
-{ "S3E0", S3E0, "3.0 east Eutelsat 3A/3C, Rascom 1R" , __S3E0, SAT_TRANSPONDER_COUNT( __S3E0), EAST_FLAG, 0x30, -1, "S3E" }, // new 20120517
-{ "S0W8", S0W8, "0.8 west Thor 3/5 & Intelsat 10-02" , __S0W8, SAT_TRANSPONDER_COUNT( __S0W8), WEST_FLAG, 0x8, -1, "S1W" },
-{ "S4W0", S4W0, "4.0 west Amos 1/2/3" , __S4W0, SAT_TRANSPONDER_COUNT( __S4W0), WEST_FLAG, 0x40, -1, "S4W" },
-{ "S5W0", S5W0, "5.0 west Atlantic Bird 3/ Eutelsat 5A" , __S5W0, SAT_TRANSPONDER_COUNT( __S5W0), WEST_FLAG, 0x50, -1, "S5W" }, // 20120517: id changed.
-{ "S7W0", S7W0, "7.0 west Nilesat 101/102 & Atlantic Bird 4" , __S7W0, SAT_TRANSPONDER_COUNT( __S7W0), WEST_FLAG, 0x700, -1, "S7W" },
-{ "S8W0", S8W0, "8.0 west Atlantic Bird 2" , __S8W0, SAT_TRANSPONDER_COUNT( __S8W0), WEST_FLAG, 0x800, -1, "S8W" },
-{ "S11W0", S11W0, "11.0 west Express AM44" , __S11W0, SAT_TRANSPONDER_COUNT( __S11W0), WEST_FLAG, 0x110, -1, "S11W" }, // 20120517: id changed.
-{ "S12W5", S12W5, "12.5 west Atlantic Bird 1" , __S12W5, SAT_TRANSPONDER_COUNT( __S12W5), WEST_FLAG, 0x125, -1, "S12.5W" },
-{ "S14W0", S14W0, "14.0 west Express A4" , __S14W0, SAT_TRANSPONDER_COUNT( __S14W0), WEST_FLAG, 0x140, -1, "S14W" },
-{ "S15W0", S15W0, "15.0 west Telstar 12" , __S15W0, SAT_TRANSPONDER_COUNT( __S15W0), WEST_FLAG, 0x150, -1, "S15W" },
-{ "S18W0", S18W0, "18.0 west Intelsat 901" , __S18W0, SAT_TRANSPONDER_COUNT( __S18W0), WEST_FLAG, 0x180, -1, "S18W" }, // 20120517: id changed.
-{ "S20W0", S20W0, "20.0 west NSS 5" , __S20W0, SAT_TRANSPONDER_COUNT( __S20W0), WEST_FLAG, 0x200, -1, "S20W" },
-{ "S22W0", S22W0, "22.0 west NSS 7" , __S22W0, SAT_TRANSPONDER_COUNT( __S22W0), WEST_FLAG, 0x220, -1, "S22W" },
-{ "S24W5", S24W5, "24.5 west Intelsat 905" , __S24W5, SAT_TRANSPONDER_COUNT( __S24W5), WEST_FLAG, 0x245, -1, "S24.5W" }, // 20120517: id changed.
-{ "S27W5", S27W5, "27.X west Intelsat 907" , __S27W5, SAT_TRANSPONDER_COUNT( __S27W5), WEST_FLAG, 0x275, -1, "S27.5W" }, // 20120517: id changed.
-{ "S30W0", S30W0, "30.0 west Hispasat 1C/1D" , __S30W0, SAT_TRANSPONDER_COUNT( __S30W0), WEST_FLAG, 0x300, -1, "S30W" },
-{ "S31W5", S31W5, "31.5 west Intelsat 25" , __S31W5, SAT_TRANSPONDER_COUNT( __S31W5), WEST_FLAG, 0x315, -1, "S31.5W" }, // 20120517: new
-{ "S34W5", S34W5, "34.5 west Intelsat 903" , __S34W5, SAT_TRANSPONDER_COUNT( __S34W5), WEST_FLAG, 0x345, -1, "S34.5W" }, // 20120517: new
-{ "S37W5", S37W5, "37.5 west NSS 10 / Telstar 11N" , __S37W5, SAT_TRANSPONDER_COUNT( __S37W5), WEST_FLAG, 0x375, -1, "S37.5W" }, // 20120517: new
-{ "S40W5", S40W5, "40.5 west NSS 806" , __S40W5, SAT_TRANSPONDER_COUNT( __S40W5), WEST_FLAG, 0x405, -1, "S40.5W" }, // 20120517: new
-{ "S43W0", S43W0, "43.0 west Intelsat 11" , __S43W0, SAT_TRANSPONDER_COUNT( __S43W0), WEST_FLAG, 0x430, -1, "S43W" }, // 20120517: new
-{ "S45W0", S45W0, "45.0 west Intelsat 14" , __S45W0, SAT_TRANSPONDER_COUNT( __S45W0), WEST_FLAG, 0x450, -1, "S45W" }, // 20120517: new
-{ "S50W0", S50W0, "50.0 west Intelsat 1R" , __S50W0, SAT_TRANSPONDER_COUNT( __S50W0), WEST_FLAG, 0x500, -1, "S50W" }, // 20120517: new
-{ "S53W0", S53W0, "53.0 west Intelsat 707" , __S53W0, SAT_TRANSPONDER_COUNT( __S53W0), WEST_FLAG, 0x530, -1, "S53W" }, // 20120517: new
-{ "S55W5", S55W5, "55.5 west Intelsat 805" , __S55W5, SAT_TRANSPONDER_COUNT( __S55W5), WEST_FLAG, 0x555, -1, "S55.5W" }, // 20120517: new
-{ "S58W0", S58W0, "58.0 west Intelsat 9/16" , __S58W0, SAT_TRANSPONDER_COUNT( __S58W0), WEST_FLAG, 0x580, -1, "S58W" }, // 20120517: new
-{ "S63W0", S63W0, "63.0 west Telstar 14R" , __S63W0, SAT_TRANSPONDER_COUNT( __S63W0), WEST_FLAG, 0x630, -1, "S63W" }, // 20120520: new
-{ "S65W0", S65W0, "65.0 west Star One C1" , __S65W0, SAT_TRANSPONDER_COUNT( __S65W0), WEST_FLAG, 0x650, -1, "S65W" }, // 20120520: new
-{ "S70W0", S70W0, "70.0 west Star One C2" , __S70W0, SAT_TRANSPONDER_COUNT( __S70W0), WEST_FLAG, 0x700, -1, "S70W" }, // 20120520: new
-{ "S72W0", S72W0, "72.0 west AMC 6" , __S72W0, SAT_TRANSPONDER_COUNT( __S72W0), WEST_FLAG, 0x720, -1, "S72W" }, // 20120520: new
-{ "S78W0", S78W0, "78.0 west SIMON BOLIVAR" , __S78W0, SAT_TRANSPONDER_COUNT( __S78W0), WEST_FLAG, 0x780, -1, "S78W" }, // 20120520: new
-{ "S83W0", S83W0, "83.0 west AMC 9" , __S83W0, SAT_TRANSPONDER_COUNT( __S83W0), WEST_FLAG, 0x830, -1, "S83W" }, // 20120520: new
-{ "S84W0", S84W0, "84.0 west Brasilsat B4" , __S84W0, SAT_TRANSPONDER_COUNT( __S84W0), WEST_FLAG, 0x840, -1, "S84W" }, // 20120520: new
-{ "S85W0", S85W0, "85.0 west AMC 16" , __S85W0, SAT_TRANSPONDER_COUNT( __S85W0), WEST_FLAG, 0x850, -1, "S85W" }, // 20120520: new
-{ "S87W0", S87W0, "87.0 west SES 2" , __S87W0, SAT_TRANSPONDER_COUNT( __S87W0), WEST_FLAG, 0x870, -1, "S87W" }, // 20120520: new
-{ "S89W0", S89W0, "89.0 west Galaxy 28" , __S89W0, SAT_TRANSPONDER_COUNT( __S89W0), WEST_FLAG, 0x890, -1, "S89W" }, // 20120520: new
-{ "S91W0", S91W0, "95.0 west Nimiq 1" , __S91W0, SAT_TRANSPONDER_COUNT( __S91W0), WEST_FLAG, 0x910, -1, "S91W" }, // 20120520: new
-{ "S93W1", S93W1, "93.1 west Galaxy 25" , __S93W1, SAT_TRANSPONDER_COUNT( __S93W1), WEST_FLAG, 0x931, -1, "S93.1W" }, // 20120520: new
-{ "S95W0", S95W0, "95.0 west Galaxy 3C" , __S95W0, SAT_TRANSPONDER_COUNT( __S95W0), WEST_FLAG, 0x950, -1, "S95W" }, // 20120520: new
-{ "S97W0", S97W0, "97.0 west Galaxy 19" , __S97W0, SAT_TRANSPONDER_COUNT( __S97W0), WEST_FLAG, 0x970, -1, "S97W" }, // 20120520: id && name changed
-{ "S99W2", S99W2, "99.2 west Galaxy 16 / Spaceway 2" , __S99W2, SAT_TRANSPONDER_COUNT( __S99W2), WEST_FLAG, 0x992, -1, "S99W2" }, // 20120520: new
-{"S101W0", S101W0, "101.0 west SES 1" , __S101W0, SAT_TRANSPONDER_COUNT(__S101W0), WEST_FLAG, 0x1010, -1,"S101W" }, // 20120520: new
-{"S103W0", S103W0, "103.0 west AMC 1" , __S103W0, SAT_TRANSPONDER_COUNT(__S103W0), WEST_FLAG, 0x1030, -1,"S103W" }, // 20120520: new
-{"S105W0", S105W0, "105.0 west AMC 15/18" , __S105W0, SAT_TRANSPONDER_COUNT(__S105W0), WEST_FLAG, 0x1050, -1,"S105W" }, // 20120520: new
-{"S107W3", S107W3, "107.3 west Anik F1/F1R" , __S107W3, SAT_TRANSPONDER_COUNT(__S107W3), WEST_FLAG, 0x1073, -1,"S107.3W" }, // 20120520: new
-{"S111W1", S111W1, "111.1 west Anik F2" , __S111W1, SAT_TRANSPONDER_COUNT(__S111W1), WEST_FLAG, 0x1111, -1,"S111.1W" }, // 20120520: new
-{"S113W0", S113W0, "113.0 west SatMex 6" , __S113W0, SAT_TRANSPONDER_COUNT(__S113W0), WEST_FLAG, 0x1130, -1,"S113W" }, // 20120520: new
-{"S116W8", S116W8, "116.8 west SatMex 5" , __S116W8, SAT_TRANSPONDER_COUNT(__S116W8), WEST_FLAG, 0x1168, -1,"S116.8W" }, // 20120520: new
-{"S119W0", S119W0, "119.0 west Anik F3" , __S119W0, SAT_TRANSPONDER_COUNT(__S119W0), WEST_FLAG, 0x1190, -1,"S119W" }, // 20120520: new
-{"S121W0", S121W0, "121.0 west Echostar 9 / Galaxy 23" , __S121W0, SAT_TRANSPONDER_COUNT(__S121W0), WEST_FLAG, 0x1210, -1,"S121W" }, // 20120520: new
-{"S123W0", S123W0, "123.0 west Galaxy 18" , __S123W0, SAT_TRANSPONDER_COUNT(__S123W0), WEST_FLAG, 0x1230, -1,"S123W" }, // 20120520: new
-{"S125W0", S125W0, "125.0 west Galaxy 14 / AMC 21" , __S125W0, SAT_TRANSPONDER_COUNT(__S125W0), WEST_FLAG, 0x1250, -1,"S125W" }, // 20120520: new
-{"S127W0", S127W0, "127.0 west Galaxy 13 / Horizons 1" , __S127W0, SAT_TRANSPONDER_COUNT(__S127W0), WEST_FLAG, 0x1270, -1,"S127W" }, // 20120520: new
-{"S131W0", S131W0, "131.0 west AMC 11" , __S131W0, SAT_TRANSPONDER_COUNT(__S131W0), WEST_FLAG, 0x1310, -1,"S131W" }, // 20120520: new
-{"S133W0", S133W0, "133.0 west Galaxy 15" , __S133W0, SAT_TRANSPONDER_COUNT(__S133W0), WEST_FLAG, 0x1330, -1,"S133W" }, // 20120520: new
-{"S135W0", S135W0, "135.0 west AMC 10" , __S135W0, SAT_TRANSPONDER_COUNT(__S135W0), WEST_FLAG, 0x1350, -1,"S135W" }, // 20120520: new
-{"S137W0", S137W0, "135.0 west AMC 7" , __S137W0, SAT_TRANSPONDER_COUNT(__S137W0), WEST_FLAG, 0x1370, -1,"S137W" }, // 20120520: new
-{"S139W0", S139W0, "135.0 west AMC 8" , __S139W0, SAT_TRANSPONDER_COUNT(__S139W0), WEST_FLAG, 0x1390, -1,"S139W" }, // 20120520: new
-{"S177W0", S177W0, "177.0 west NSS 9" , __S177W0, SAT_TRANSPONDER_COUNT(__S177W0), WEST_FLAG, 0x1770, -1,"S177W" }, // 20120520: new
+/** pos *** id *** long satellite name ***************************** items ************ item_count ********** we_flag * orbit * rotor * vdrid * skew */
+{"S180E0", S180E0, "180.0 east Intelsat 18" , __S180E0, SAT_TRANSPONDER_COUNT(__S180E0), EAST_FLAG, 0x1800, -1, "S180E" , 0 }, // 20120520: new
+{"S172E0", S172E0, "172.0 east Eutelsat 172A" , __S172E0, SAT_TRANSPONDER_COUNT(__S172E0), EAST_FLAG, 0x1720, -1, "S172E" , 0.000}, // 20150525: name + offset
+{"S169E0", S169E0, "169.0 east Intelsat 5" , __S169E0, SAT_TRANSPONDER_COUNT(__S169E0), EAST_FLAG, 0x1690, -1, "S169E" , 0 }, // 20120520: new
+{"S166E0", S166E0, "166.0 east Intelsat 8" , __S166E0, SAT_TRANSPONDER_COUNT(__S166E0), EAST_FLAG, 0x1660, -1, "S166E" , 0 },
+{"S162E0", S162E0, "162.0 east Superbird B2" , __S162E0, SAT_TRANSPONDER_COUNT(__S162E0), EAST_FLAG, 0x1620, -1, "S162E" , 0 }, // 20120520: new
+{"S160E0", S160E0, "160.0 east Optus D1" , __S160E0, SAT_TRANSPONDER_COUNT(__S160E0), EAST_FLAG, 0x1600, -1, "S160E" , 0 },
+{"S156E0", S156E0, "156.0 east Optus C1/D3" , __S156E0, SAT_TRANSPONDER_COUNT(__S156E0), EAST_FLAG, 0x1560, -1, "S156E" , 0 },
+{"S154E0", S154E0, "154.0 east JCSAT 2A" , __S154E0, SAT_TRANSPONDER_COUNT(__S154E0), EAST_FLAG, 0x1540, -1, "S154E" , 0 }, // 20120520: new
+{"S152E0", S152E0, "152.0 east Optus D2" , __S152E0, SAT_TRANSPONDER_COUNT(__S152E0), EAST_FLAG, 0x1520, -1, "S152E" , 0.0 },
+{"S144E0", S144E0, "144.0 east Superbird C2" , __S144E0, SAT_TRANSPONDER_COUNT(__S144E0), EAST_FLAG, 0x1440, -1, "S144E" , 0.0 }, // 20120520: new
+{"S140E0", S140E0, "140.0 east Express AM3" , __S140E0, SAT_TRANSPONDER_COUNT(__S140E0), EAST_FLAG, 0x1400, -1, "S140E" , 0.0 }, // 20120520: id && name changed.
+{"S138E0", S138E0, "134.0 east Telstar 18" , __S138E0, SAT_TRANSPONDER_COUNT(__S138E0), EAST_FLAG, 0x1380, -1, "S138E" , 0.0 }, // 20120520: new
+{"S134E0", S134E0, "134.0 east Apstar 6" , __S134E0, SAT_TRANSPONDER_COUNT(__S134E0), EAST_FLAG, 0x1340, -1, "S134E" , 0.0 }, // 20120520: new
+{"S132E0", S132E0, "132.0 east Vinasat 1 / JCSAT 5A" , __S132E0, SAT_TRANSPONDER_COUNT(__S132E0), EAST_FLAG, 0x1320, -1, "S132E" , 0.0 }, // 20120520: new
+{"S128E0", S128E0, "128.0 east JCSAT 3A" , __S128E0, SAT_TRANSPONDER_COUNT(__S128E0), EAST_FLAG, 0x1280, -1, "S128E" , 0.0 }, // 20120520: new
+{"S125E0", S125E0, "125.0 east ChinaSat 6A" , __S125E0, SAT_TRANSPONDER_COUNT(__S125E0), EAST_FLAG, 0x1250, -1, "S125E" , 0.0 }, // 20120520: new
+{"S124E0", S124E0, "124.0 east JCSAT 4A" , __S124E0, SAT_TRANSPONDER_COUNT(__S124E0), EAST_FLAG, 0x1240, -1, "S124E" , 0.0 }, // 20120520: new
+{"S122E2", S122E2, "122.2 east AsiaSat 4" , __S122E2, SAT_TRANSPONDER_COUNT(__S122E2), EAST_FLAG, 0x1222, -1, "S122.2E", 0.0 }, // 20120520: new
+{"S118E0", S118E0, "118.0 east Telkom 2" , __S118E0, SAT_TRANSPONDER_COUNT(__S118E0), EAST_FLAG, 0x1180, -1, "S118E" , 0.0 }, // 20120520: new
+{"S116E0", S116E0, "116.0 east Koreasat 6 / ABS 7" , __S116E0, SAT_TRANSPONDER_COUNT(__S116E0), EAST_FLAG, 0x1160, -1, "S116E" , 0.0 }, // 20120520: new
+{"S115E5", S115E5, "115.5 east ChinaSat 6B" , __S115E5, SAT_TRANSPONDER_COUNT(__S115E5), EAST_FLAG, 0x1155, -1, "S115.5E", 0.0 }, // 20120520: new
+{"S113E0", S113E0, "113.0 east Koreasat 5 / Palapa D" , __S113E0, SAT_TRANSPONDER_COUNT(__S113E0), EAST_FLAG, 0x1130, -1, "S113E" , 0.0 }, // 20120520: new
+{"S110E5", S110E5, "110.5 east ChinaSat 10" , __S110E5, SAT_TRANSPONDER_COUNT(__S110E5), EAST_FLAG, 0x1105, -1, "S110.5E", 0.0 }, // 20120520: new
+{"S110E0", S110E0, "110.0 east NSat 110 / BSat 2C/3A / JCSat 110R", __S110E0, SAT_TRANSPONDER_COUNT(__S110E0), EAST_FLAG, 0x1100, -1, "S110E" , 0.0 }, // 20120520: new
+{"S108E2", S108E2, "108.2 east Telkom 1 / NSS 11 / SES 7" , __S108E2, SAT_TRANSPONDER_COUNT(__S108E2), EAST_FLAG, 0x1082, -1, "S108.2E", 0.0 }, // 20120520: id && name changed.
+{"S105E5", S105E5, "105.5 east AsiaSat 3S" , __S105E5, SAT_TRANSPONDER_COUNT(__S105E5), EAST_FLAG, 0x1055, -1, "S105.5E", 0.0 }, // 20120520: id changed.
+{"S103E0", S103E0, "103.0 east Express A2" , __S103E0, SAT_TRANSPONDER_COUNT(__S103E0), EAST_FLAG, 0x1030, -1, "S103E" , 0.0 }, // 20120520: new
+{"S100E5", S100E5, "100.5 east AsiaSat 5" , __S100E5, SAT_TRANSPONDER_COUNT(__S100E5), EAST_FLAG, 0x1005, -1, "S100.5E", 0.0 }, // 20120520: id && name changed.
+{ "S96E5", S96E5, "96.5 east Express AM33" , __S96E5, SAT_TRANSPONDER_COUNT( __S96E5), EAST_FLAG, 0x965, -1, "S96.5E" , 0.0 }, // 20120520: id changed.
+{ "S95E0", S95E0, "95.0 east NSS 6" , __S95E0, SAT_TRANSPONDER_COUNT( __S95E0), EAST_FLAG, 0x950, -1, "S95E" , 0.0 }, // 20120520: id changed.
+{ "S93E5", S93E5, "93.5 east Insat 3A/4B" , __S93E5, SAT_TRANSPONDER_COUNT( __S93E5), EAST_FLAG, 0x935, -1, "S93.5E" , 0.0 }, // 20120520: id changed.
+{ "S91E5", S91E5, "91.5 east Measat 3 / 3A" , __S91E5, SAT_TRANSPONDER_COUNT( __S91E5), EAST_FLAG, 0x915, -1, "S91.5E" , 0.0 }, // 20120520: id changed.
+{ "S90E0", S90E0, "90.0 east Yamal 201" , __S90E0, SAT_TRANSPONDER_COUNT( __S90E0), EAST_FLAG, 0x900, -1, "S90E" , 0.0 }, // 20120520: id changed.
+{ "S88E0", S88E0, "88.0 east ST 2" , __S88E0, SAT_TRANSPONDER_COUNT( __S88E0), EAST_FLAG, 0x880, -1, "S88E" , 0.0 }, // 20120520: id && name changed.
+{ "S87E5", S87E5, "87.5 east ChinaSat 5A" , __S87E5, SAT_TRANSPONDER_COUNT( __S87E5), EAST_FLAG, 0x875, -1, "S87.5E" , 0.0 }, // 20120520: id && name changed.
+{ "S86E5", S86E5, "86.5 east KazSat 2" , __S86E5, SAT_TRANSPONDER_COUNT( __S86E5), EAST_FLAG, 0x865, -1, "S86.5E" , 0.0 }, // 20120520: new
+{ "S85E0", S85E0, "85.0 east Horisons 2 / Intelsat 15" , __S85E0, SAT_TRANSPONDER_COUNT( __S85E0), EAST_FLAG, 0x850, -1, "S85E" , 0.0 }, // 20120520: new
+{ "S83E0", S83E0, "83.0 east Insat 2E/4A" , __S83E0, SAT_TRANSPONDER_COUNT( __S83E0), EAST_FLAG, 0x830, -1, "S83E" , 0.0 }, // 20120517: id changed.
+{ "S78E5", S78E5, "78.5 east Thaicom 2/5" , __S78E5, SAT_TRANSPONDER_COUNT( __S78E5), EAST_FLAG, 0x785, -1, "S78.5E" , 0.0 },
+{ "S76E5", S76E5, "76.5 east Telstar 10 (Apstar 2R)" , __S76E5, SAT_TRANSPONDER_COUNT( __S76E5), EAST_FLAG, 0x765, -1, "S76.5E" , 0.0 }, // 20120517: id changed.
+{ "S75E0", S75E0, "75.0 east ABS-2" , __S75E0, SAT_TRANSPONDER_COUNT( __S75E0), EAST_FLAG, 0x750, -1, "S75E" , 0.0 }, // 20150525: name
+{ "S70E5", S70E5, "70.5 east Eutelsat 70B" , __S70E5, SAT_TRANSPONDER_COUNT( __S70E5), EAST_FLAG, 0x705, -1, "S70.5E" , 3.535}, // 20150525: name + offset
+{ "S68E5", S68E5, "68.5 east Intelsat 20" , __S68E5, SAT_TRANSPONDER_COUNT( __S68E5), EAST_FLAG, 0x685, -1, "S68.5E" , 0 }, // 20150225: name
+{ "S66E0", S66E0, "66.0 east Intelsat 17" , __S66E0, SAT_TRANSPONDER_COUNT( __S66E0), EAST_FLAG, 0x660, -1, "S66E" , 0 }, // new 20120517
+{ "S64E2", S64E2, "64.2 east Intelsat 906" , __S64E2, SAT_TRANSPONDER_COUNT( __S64E2), EAST_FLAG, 0x642, -1, "S64E" , 0 },
+{ "S62E0", S62E0, "62.0 east Intelsat 902" , __S62E0, SAT_TRANSPONDER_COUNT( __S62E0), EAST_FLAG, 0x620, -1, "S62E" , 0 }, // 20120517: id changed.
+{ "S60E0", S60E0, "60.0 east Intelsat 904" , __S60E0, SAT_TRANSPONDER_COUNT( __S60E0), EAST_FLAG, 0x600, -1, "S60E" , 0 }, // 20120517: id changed.
+{ "S57E0", S57E0, "57.0 east NSS 12" , __S57E0, SAT_TRANSPONDER_COUNT( __S57E0), EAST_FLAG, 0x570, -1, "S57E" , 0 },
+{ "S56E0", S56E0, "56.0 east Bonum 1" , __S56E0, SAT_TRANSPONDER_COUNT( __S56E0), EAST_FLAG, 0x560, -1, "S56E" , 0 }, // 20120517: id changed.
+{ "S53E0", S53E0, "53.0 east Express AM22" , __S53E0, SAT_TRANSPONDER_COUNT( __S53E0), EAST_FLAG, 0x530, -1, "S53E" , 0.000}, // 20150525: name + offset
+{ "S52E5", S52E5, "52.5 east Yahsat 1A" , __S52E5, SAT_TRANSPONDER_COUNT( __S52E5), EAST_FLAG, 0x525, -1, "S52.5E" , 0 },
+{ "S49E0", S49E0, "49.0 east Yamal 202" , __S49E0, SAT_TRANSPONDER_COUNT( __S49E0), EAST_FLAG, 0x490, -1, "S49E" , 0 },
+{ "S48E0", S48E0, "48.0 east Eutelsat 48D/Afghansat 1" , __S48E0, SAT_TRANSPONDER_COUNT( __S48E0), EAST_FLAG, 0x480, -1, "S48E" , 3.535}, // 20150525: new + name + offset
+{ "S45E0", S45E0, "45.0 east Intelsat 12" , __S45E0, SAT_TRANSPONDER_COUNT( __S45E0), EAST_FLAG, 0x450, -1, "S45E" , 0 },
+{ "S42E0", S42E0, "42.0 east Turksat 2A/3A/4A" , __S42E0, SAT_TRANSPONDER_COUNT( __S42E0), EAST_FLAG, 0x420, -1, "S42E" , 0 }, // 20150525: name
+{ "S40E0", S40E0, "40.0 east Express AM7" , __S40E0, SAT_TRANSPONDER_COUNT( __S40E0), EAST_FLAG, 0x400, -1, "S40E" , 0 }, // 20150525: name
+{ "S39E0", S39E0, "39.0 east Hellas Sat 2" , __S39E0, SAT_TRANSPONDER_COUNT( __S39E0), EAST_FLAG, 0x390, -1, "S39E" , 0 },
+{ "S38E0", S38E0, "38.0 east Paksat 1R" , __S38E0, SAT_TRANSPONDER_COUNT( __S38E0), EAST_FLAG, 0x380, -1, "S38E" , 0 }, // 20150525: name
+{ "S36E0", S36E0, "36.0 east Eutelsat 36A/36B" , __S36E0, SAT_TRANSPONDER_COUNT( __S36E0), EAST_FLAG, 0x360, -1, "S36E" , 3.535}, // 20150525: name + offset
+{ "S33E0", S33E0, "33.0 east Eutelsat 33B" , __S33E0, SAT_TRANSPONDER_COUNT( __S33E0), EAST_FLAG, 0x330, -1, "S33E" , 3.535}, // 20150525: Eurobird3 -> Eutelsat 31A; put Eutelsat 33B here.
+{ "S31E5", S31E5, "31.5 east Astra 5B" , __S31E5, SAT_TRANSPONDER_COUNT( __S31E5), EAST_FLAG, 0x315, -1, "S31.5E" , 0 }, // 20150525: name
+{ "S30E5", S30E5, "30.5 east Arabsat 5A" , __S30E5, SAT_TRANSPONDER_COUNT( __S30E5), EAST_FLAG, 0x305, -1, "S30.5E" , 0 }, // new 20120517
+{ "S28E2", S28E2, "28.2 east Astra 2E/F + Eutelsat 28A" , __S28E2, SAT_TRANSPONDER_COUNT( __S28E2), EAST_FLAG, 0x282, -1, "S28.2E" , 3.535}, // 20150525: name + offset
+{ "S26E0", S26E0, "26.X east Badr 4/5/6" , __S26E0, SAT_TRANSPONDER_COUNT( __S26E0), EAST_FLAG, 0x260, -1, "S26E" , 0 }, // 20150525: name
+{ "S25E5", S25E5, "25.5 east Eutelsat 25B" , __S25E5, SAT_TRANSPONDER_COUNT( __S25E5), EAST_FLAG, 0x255, -1, "S25.5E" , 3.535},
+{ "S23E5", S23E5, "23.5 east Astra 3B" , __S23E5, SAT_TRANSPONDER_COUNT( __S23E5), EAST_FLAG, 0x235, -1, "S23.5E" , 0 }, // 20150525: name
+{ "S21E5", S21E5, "21.5 east Eutelsat 21B" , __S21E5, SAT_TRANSPONDER_COUNT( __S21E5), EAST_FLAG, 0x216, -1, "S21.6E" , 3.535}, // 20150525: name + offset
+{ "S20E0", S20E0, "20.0 east Arabsat 5C" , __S20E0, SAT_TRANSPONDER_COUNT( __S20E0), EAST_FLAG, 0x200, -1, "S20E" , 0 }, // new 20120517
+{ "S19E2", S19E2, "19.2 east Astra 1KR/1L/1N/1M" , __S19E2, SAT_TRANSPONDER_COUNT( __S19E2), EAST_FLAG, 0x192, -1, "S19.2E" , 7.000}, // 20150525: name + offset
+{ "S16E0", S16E0, "16.0 east Eutelsat 16A" , __S16E0, SAT_TRANSPONDER_COUNT( __S16E0), EAST_FLAG, 0x160, -1, "S16E" , 3.535}, // 20150525: name + offset
+{ "S13E0", S13E0, "13.0 east Hotbird 13B/13C/13D" , __S13E0, SAT_TRANSPONDER_COUNT( __S13E0), EAST_FLAG, 0x130, -1, "S13E" , 0 }, // 20150525: name
+{ "S10E0", S10E0, "10.0 east Eutelsat 10A" , __S10E0, SAT_TRANSPONDER_COUNT( __S10E0), EAST_FLAG, 0x100, -1, "S10E" , 3.535}, // 20150525: name + offset
+{ "S9E0", S9E0, "9.0 east Eutelsat 9A" , __S9E0, SAT_TRANSPONDER_COUNT( __S9E0), EAST_FLAG, 0x90, -1, "S9E" , 3.535}, // 20150525: name + offset
+{ "S7E0", S7E0, "7.0 east Eutelsat 7A" , __S7E0, SAT_TRANSPONDER_COUNT( __S7E0), EAST_FLAG, 0x70, -1, "S7E" , 3.535}, // 20150525: name + offset
+{ "S4E8", S4E8, "4.8 east SES 5/Astra 4A" , __S4E8, SAT_TRANSPONDER_COUNT( __S4E8), EAST_FLAG, 0x48, -1, "S4.8E" , 0 }, // 20150525: name
+{ "S3E0", S3E0, "3.0 east Eutelsat 3B, Rascom QAF 1R" , __S3E0, SAT_TRANSPONDER_COUNT( __S3E0), EAST_FLAG, 0x30, -1, "S3E" , 3.535}, // 20150525: name + offset
+{ "S0W8", S0W8, "0.8 west Thor 5/6 & Intelsat 10-02" , __S0W8, SAT_TRANSPONDER_COUNT( __S0W8), WEST_FLAG, 0x8, -1, "S1W" , 0 }, // 20150525: name
+{ "S4W0", S4W0, "4.0 west Amos 2/3" , __S4W0, SAT_TRANSPONDER_COUNT( __S4W0), WEST_FLAG, 0x40, -1, "S4W" , 0 }, // 20150525: name
+{ "S5W0", S5W0, "5.0 west Eutelsat 5 West A" , __S5W0, SAT_TRANSPONDER_COUNT( __S5W0), WEST_FLAG, 0x50, -1, "S5W" , 0.000}, // 20150525: name + offset
+{ "S7W0", S7W0, "7.0 west Nilesat 201 & Eutelsat 7 West A" , __S7W0, SAT_TRANSPONDER_COUNT( __S7W0), WEST_FLAG, 0x700, -1, "S7W" , 3.535}, // 20150525: name + offset
+{ "S8W0", S8W0, "8.0 west Eutelsat 8 West A/D" , __S8W0, SAT_TRANSPONDER_COUNT( __S8W0), WEST_FLAG, 0x800, -1, "S8W" , 3.535}, // 20150525: name + offset
+{ "S11W0", S11W0, "11.0 west Express AM44" , __S11W0, SAT_TRANSPONDER_COUNT( __S11W0), WEST_FLAG, 0x110, -1, "S11W" , 0 }, // 20120517: id changed.
+{ "S12W5", S12W5, "12.5 west Eutelsat 12 West A" , __S12W5, SAT_TRANSPONDER_COUNT( __S12W5), WEST_FLAG, 0x125, -1, "S12.5W" , 3.535}, // 20150525: name + offset
+{ "S14W0", S14W0, "14.0 west Express A4" , __S14W0, SAT_TRANSPONDER_COUNT( __S14W0), WEST_FLAG, 0x140, -1, "S14W" , 0 },
+{ "S15W0", S15W0, "15.0 west Telstar 12" , __S15W0, SAT_TRANSPONDER_COUNT( __S15W0), WEST_FLAG, 0x150, -1, "S15W" , 0.000}, // 20150525: offset
+{ "S18W0", S18W0, "18.0 west Intelsat 901" , __S18W0, SAT_TRANSPONDER_COUNT( __S18W0), WEST_FLAG, 0x180, -1, "S18W" , 0 }, // 20120517: id changed.
+{ "S20W0", S20W0, "20.0 west NSS 7" , __S20W0, SAT_TRANSPONDER_COUNT( __S20W0), WEST_FLAG, 0x200, -1, "S20W" , 0 }, // 20150525: name
+{ "S22W0", S22W0, "22.0 west SES 4" , __S22W0, SAT_TRANSPONDER_COUNT( __S22W0), WEST_FLAG, 0x220, -1, "S22W" , 0 }, // 20150525: name, as NSS7 22W->20W
+{ "S24W5", S24W5, "24.5 west Intelsat 905" , __S24W5, SAT_TRANSPONDER_COUNT( __S24W5), WEST_FLAG, 0x245, -1, "S24.5W" , 0 }, // 20120517: id changed.
+{ "S27W5", S27W5, "27.X west Intelsat 907" , __S27W5, SAT_TRANSPONDER_COUNT( __S27W5), WEST_FLAG, 0x275, -1, "S27.5W" , 0 }, // 20120517: id changed.
+{ "S30W0", S30W0, "30.0 west Hispasat 1D/1E" , __S30W0, SAT_TRANSPONDER_COUNT( __S30W0), WEST_FLAG, 0x300, -1, "S30W" , 0 }, // 20150525: name
+{ "S31W5", S31W5, "31.5 west Intelsat 25" , __S31W5, SAT_TRANSPONDER_COUNT( __S31W5), WEST_FLAG, 0x315, -1, "S31.5W" , 0 }, // 20120517: new
+{ "S34W5", S34W5, "34.5 west Intelsat 903" , __S34W5, SAT_TRANSPONDER_COUNT( __S34W5), WEST_FLAG, 0x345, -1, "S34.5W" , 0 }, // 20120517: new
+{ "S37W5", S37W5, "37.5 west NSS 10 / Telstar 11N" , __S37W5, SAT_TRANSPONDER_COUNT( __S37W5), WEST_FLAG, 0x375, -1, "S37.5W" , 0 }, // 20120517: new
+{ "S40W5", S40W5, "40.5 west NSS 806" , __S40W5, SAT_TRANSPONDER_COUNT( __S40W5), WEST_FLAG, 0x405, -1, "S40.5W" , 0 }, // 20120517: new
+{ "S43W0", S43W0, "43.0 west Intelsat 11" , __S43W0, SAT_TRANSPONDER_COUNT( __S43W0), WEST_FLAG, 0x430, -1, "S43W" , 0 }, // 20120517: new
+{ "S45W0", S45W0, "45.0 west Intelsat 14" , __S45W0, SAT_TRANSPONDER_COUNT( __S45W0), WEST_FLAG, 0x450, -1, "S45W" , 0 }, // 20120517: new
+{ "S50W0", S50W0, "50.0 west Intelsat 1R" , __S50W0, SAT_TRANSPONDER_COUNT( __S50W0), WEST_FLAG, 0x500, -1, "S50W" , 0 }, // 20120517: new
+{ "S53W0", S53W0, "53.0 west Intelsat 707" , __S53W0, SAT_TRANSPONDER_COUNT( __S53W0), WEST_FLAG, 0x530, -1, "S53W" , 0 }, // 20120517: new
+{ "S55W5", S55W5, "55.5 west Intelsat 805" , __S55W5, SAT_TRANSPONDER_COUNT( __S55W5), WEST_FLAG, 0x555, -1, "S55.5W" , 0 }, // 20120517: new
+{ "S58W0", S58W0, "58.0 west Intelsat 9/16" , __S58W0, SAT_TRANSPONDER_COUNT( __S58W0), WEST_FLAG, 0x580, -1, "S58W" , 0 }, // 20120517: new
+{ "S63W0", S63W0, "63.0 west Telstar 14R" , __S63W0, SAT_TRANSPONDER_COUNT( __S63W0), WEST_FLAG, 0x630, -1, "S63W" , 0 }, // 20120520: new
+{ "S65W0", S65W0, "65.0 west Star One C1" , __S65W0, SAT_TRANSPONDER_COUNT( __S65W0), WEST_FLAG, 0x650, -1, "S65W" , 0 }, // 20120520: new
+{ "S70W0", S70W0, "70.0 west Star One C2" , __S70W0, SAT_TRANSPONDER_COUNT( __S70W0), WEST_FLAG, 0x700, -1, "S70W" , 0 }, // 20120520: new
+{ "S72W0", S72W0, "72.0 west AMC 6" , __S72W0, SAT_TRANSPONDER_COUNT( __S72W0), WEST_FLAG, 0x720, -1, "S72W" , 0 }, // 20120520: new
+{ "S78W0", S78W0, "78.0 west SIMON BOLIVAR" , __S78W0, SAT_TRANSPONDER_COUNT( __S78W0), WEST_FLAG, 0x780, -1, "S78W" , 0 }, // 20120520: new
+{ "S83W0", S83W0, "83.0 west AMC 9" , __S83W0, SAT_TRANSPONDER_COUNT( __S83W0), WEST_FLAG, 0x830, -1, "S83W" , 0 }, // 20120520: new
+{ "S84W0", S84W0, "84.0 west Brasilsat B4" , __S84W0, SAT_TRANSPONDER_COUNT( __S84W0), WEST_FLAG, 0x840, -1, "S84W" , 0 }, // 20120520: new
+{ "S85W0", S85W0, "85.0 west AMC 16" , __S85W0, SAT_TRANSPONDER_COUNT( __S85W0), WEST_FLAG, 0x850, -1, "S85W" , 0 }, // 20120520: new
+{ "S87W0", S87W0, "87.0 west SES 2" , __S87W0, SAT_TRANSPONDER_COUNT( __S87W0), WEST_FLAG, 0x870, -1, "S87W" , 0 }, // 20120520: new
+{ "S89W0", S89W0, "89.0 west Galaxy 28" , __S89W0, SAT_TRANSPONDER_COUNT( __S89W0), WEST_FLAG, 0x890, -1, "S89W" , 0 }, // 20120520: new
+{ "S91W0", S91W0, "95.0 west Nimiq 1" , __S91W0, SAT_TRANSPONDER_COUNT( __S91W0), WEST_FLAG, 0x910, -1, "S91W" , 0 }, // 20120520: new
+{ "S93W1", S93W1, "93.1 west Galaxy 25" , __S93W1, SAT_TRANSPONDER_COUNT( __S93W1), WEST_FLAG, 0x931, -1, "S93.1W" , 0 }, // 20120520: new
+{ "S95W0", S95W0, "95.0 west Galaxy 3C" , __S95W0, SAT_TRANSPONDER_COUNT( __S95W0), WEST_FLAG, 0x950, -1, "S95W" , 0 }, // 20120520: new
+{ "S97W0", S97W0, "97.0 west Galaxy 19" , __S97W0, SAT_TRANSPONDER_COUNT( __S97W0), WEST_FLAG, 0x970, -1, "S97W" , 0 }, // 20120520: id && name changed
+{ "S99W2", S99W2, "99.2 west Galaxy 16 / Spaceway 2" , __S99W2, SAT_TRANSPONDER_COUNT( __S99W2), WEST_FLAG, 0x992, -1, "S99W2" , 0 }, // 20120520: new
+{"S101W0", S101W0, "101.0 west SES 1" , __S101W0, SAT_TRANSPONDER_COUNT(__S101W0), WEST_FLAG, 0x1010, -1,"S101W" , 0 }, // 20120520: new
+{"S103W0", S103W0, "103.0 west AMC 1" , __S103W0, SAT_TRANSPONDER_COUNT(__S103W0), WEST_FLAG, 0x1030, -1,"S103W" , 0 }, // 20120520: new
+{"S105W0", S105W0, "105.0 west AMC 15/18" , __S105W0, SAT_TRANSPONDER_COUNT(__S105W0), WEST_FLAG, 0x1050, -1,"S105W" , 0 }, // 20120520: new
+{"S107W3", S107W3, "107.3 west Anik F1/F1R" , __S107W3, SAT_TRANSPONDER_COUNT(__S107W3), WEST_FLAG, 0x1073, -1,"S107.3W" , 0 }, // 20120520: new
+{"S111W1", S111W1, "111.1 west Anik F2" , __S111W1, SAT_TRANSPONDER_COUNT(__S111W1), WEST_FLAG, 0x1111, -1,"S111.1W" , 0 }, // 20120520: new
+{"S113W0", S113W0, "113.0 west SatMex 6" , __S113W0, SAT_TRANSPONDER_COUNT(__S113W0), WEST_FLAG, 0x1130, -1,"S113W" , 0 }, // 20120520: new
+{"S116W8", S116W8, "116.8 west SatMex 5" , __S116W8, SAT_TRANSPONDER_COUNT(__S116W8), WEST_FLAG, 0x1168, -1,"S116.8W" , 0 }, // 20120520: new
+{"S119W0", S119W0, "119.0 west Anik F3" , __S119W0, SAT_TRANSPONDER_COUNT(__S119W0), WEST_FLAG, 0x1190, -1,"S119W" , 0 }, // 20120520: new
+{"S121W0", S121W0, "121.0 west Echostar 9 / Galaxy 23" , __S121W0, SAT_TRANSPONDER_COUNT(__S121W0), WEST_FLAG, 0x1210, -1,"S121W" , 0 }, // 20120520: new
+{"S123W0", S123W0, "123.0 west Galaxy 18" , __S123W0, SAT_TRANSPONDER_COUNT(__S123W0), WEST_FLAG, 0x1230, -1,"S123W" , 0 }, // 20120520: new
+{"S125W0", S125W0, "125.0 west Galaxy 14 / AMC 21" , __S125W0, SAT_TRANSPONDER_COUNT(__S125W0), WEST_FLAG, 0x1250, -1,"S125W" , 0 }, // 20120520: new
+{"S127W0", S127W0, "127.0 west Galaxy 13 / Horizons 1" , __S127W0, SAT_TRANSPONDER_COUNT(__S127W0), WEST_FLAG, 0x1270, -1,"S127W" , 0 }, // 20120520: new
+{"S131W0", S131W0, "131.0 west AMC 11" , __S131W0, SAT_TRANSPONDER_COUNT(__S131W0), WEST_FLAG, 0x1310, -1,"S131W" , 0 }, // 20120520: new
+{"S133W0", S133W0, "133.0 west Galaxy 15" , __S133W0, SAT_TRANSPONDER_COUNT(__S133W0), WEST_FLAG, 0x1330, -1,"S133W" , 0 }, // 20120520: new
+{"S135W0", S135W0, "135.0 west AMC 10" , __S135W0, SAT_TRANSPONDER_COUNT(__S135W0), WEST_FLAG, 0x1350, -1,"S135W" , 0 }, // 20120520: new
+{"S137W0", S137W0, "135.0 west AMC 7" , __S137W0, SAT_TRANSPONDER_COUNT(__S137W0), WEST_FLAG, 0x1370, -1,"S137W" , 0 }, // 20120520: new
+{"S139W0", S139W0, "135.0 west AMC 8" , __S139W0, SAT_TRANSPONDER_COUNT(__S139W0), WEST_FLAG, 0x1390, -1,"S139W" , 0 }, // 20120520: new
+{"S177W0", S177W0, "177.0 west NSS 9" , __S177W0, SAT_TRANSPONDER_COUNT(__S177W0), WEST_FLAG, 0x1770, -1,"S177W" , 0 }, // 20120520: new
};
/******************************************************************************
diff --git a/satellites.h b/satellites.h
index 5b48d52..35e2851 100644
--- a/satellites.h
+++ b/satellites.h
@@ -73,6 +73,7 @@ struct cSat {
const uint16_t orbital_position;
int rotor_position; // Note: *not* const
const char * source_id; // VDR sources.conf
+ const int skew;
};
#define SAT_COUNT(x) (sizeof(x)/sizeof(struct cSat))
diff --git a/scan.c b/scan.c
index ac97e42..9d569cb 100644
--- a/scan.c
+++ b/scan.c
@@ -132,6 +132,7 @@ static struct scr scr_config = { // 20140101: DVB-S/S2, satellite
struct timespec start_time = { 0, 0 };
+static bool bandwidth_auto = true;
static enum fe_spectral_inversion caps_inversion = INVERSION_AUTO;
static enum fe_code_rate caps_fec = FEC_AUTO;
static enum fe_modulation caps_qam = QAM_AUTO;
@@ -154,7 +155,6 @@ enum __output_format {
};
static enum __output_format output_format = OUTPUT_VDR;
-
cList _scanned_transponders, * scanned_transponders = &_scanned_transponders;
cList _new_transponders, * new_transponders = &_new_transponders;
static struct transponder * current_tp;
@@ -175,21 +175,19 @@ struct transponder * alloc_transponder(uint32_t frequency, uint8_t type, uint8_t
struct transponder * t = calloc(1, sizeof(* t));
bool known = false;
char name[20];
- struct frequency_item * freq_item;
+ struct cell* cell;
t->source = 0;
t->frequency = frequency;
t->locks_with_params = false;
// save current freq to alternative list of freqs.
- sprintf(name, "freqs_%u", frequency);
- t->frequencies = &(t->_frequencies);
- NewList(t->frequencies, name);
- freq_item = calloc(1, sizeof(struct frequency_item));
- freq_item->frequency = frequency;
- freq_item->transposers = &(freq_item->_transposers);
- NewList(freq_item->transposers, "transposers");
- AddItem(t->frequencies, freq_item);
+ sprintf(name, "cells_%u", frequency);
+ t->cells = &(t->_cells);
+ NewList(t->cells, name);
+ cell = calloc(1, sizeof(struct cell));
+ cell->center_frequencies[cell->num_center_frequencies++] = frequency;
+ AddItem(t->cells, cell);
sprintf(name, "services_%u", frequency);
t->services = &(t->_services);
@@ -371,6 +369,7 @@ static struct transponder * find_transponder_by_freq(struct transponder * tn) {
if ((flags.scantype == SCAN_SATELLITE) && (t->polarization != tn->polarization))
continue;
if (is_nearly_same_frequency(t->frequency,tn->frequency,tn->type)) {
+ print_transponder(buffer, t);
verbose(" -> found 'scanned_transponders(%.3u)' %s\n", t->index, buffer);
free(buffer);
return t;
@@ -381,6 +380,7 @@ static struct transponder * find_transponder_by_freq(struct transponder * tn) {
if ((flags.scantype == SCAN_SATELLITE) && (t->polarization != tn->polarization))
continue;
if (is_nearly_same_frequency(t->frequency,tn->frequency,tn->type)) {
+ print_transponder(buffer, t);
verbose(" -> found 'new_transponders(%.3u)' %s\n", t->index, buffer);
free(buffer);
return t;
@@ -408,37 +408,25 @@ static struct transponder * find_transponder(uint16_t original_network_id, uint1
if (original_network_id != 0) {
for(t = scanned_transponders->first; t; t = t->next) {
- if ((t->original_network_id == original_network_id) && (t->transport_stream_id == transport_stream_id)) {
+ if ((t->original_network_id == original_network_id) &&
+ (t->transport_stream_id == transport_stream_id) &&
+ (t->network_id == network_id)) {
print_transponder(buf, t);
- verbose(" -> found 'scanned_transponders(%.3u)' %s\n", t->index, buf);
+ verbose(" -> found 'scanned_transponders(%.3u)' %s (line %d)\n", t->index, buf, __LINE__);
return t;
}
}
for(t = new_transponders->first; t; t = t->next) {
- if ((t->original_network_id == original_network_id) && (t->transport_stream_id == transport_stream_id)) {
+ if ((t->original_network_id == original_network_id) &&
+ (t->transport_stream_id == transport_stream_id) &&
+ (t->network_id == network_id)) {
print_transponder(buf, t);
- verbose(" -> found 'new_transponders(%.3u)' %s\n", t->index, buf);
+ verbose(" -> found 'new_transponders(%.3u)' %s (line %d)\n", t->index, buf, __LINE__);
return t;
}
}
}
- if (network_id != 0) {
- for(t = scanned_transponders->first; t; t = t->next) {
- if ((t->network_id == network_id) && (t->transport_stream_id == transport_stream_id)) {
- print_transponder(buf, t);
- verbose(" -> found 'scanned_transponders(%.3u)' %s\n", t->index, buf);
- return t;
- }
- }
- for(t = new_transponders->first; t; t = t->next) {
- if ((t->network_id == network_id) && (t->transport_stream_id == transport_stream_id)) {
- print_transponder(buf, t);
- verbose(" -> found 'new_transponders(%.3u)' %s\n", t->index, buf);
- return t;
- }
- }
- }
verbose(" -> not found.\n");
return NULL;
}
@@ -549,10 +537,32 @@ void list_transponders() {
verbose(" =============================================================\n");
}
+static void copy_duplicate_tp(struct transponder * t, struct transponder * t2) {
+ if ((t->type == SCAN_TERRESTRIAL) && !t->frequency)
+ t->frequency = t2->frequency;
+
+ if (t->original_network_id == 0)
+ t->original_network_id = t2->original_network_id;
+
+ if ((!t->source) && ((t2->source >> 8) == TABLE_NIT_ACT)) {
+ // t is guessed, but t2 from nit act
+ uint32_t f = t->frequency;
+ copy_fe_params(t, t2);
+ if (!t->frequency && f) {
+ // copy_fe_params overwrote t->freq with '0' from t2.
+ t->frequency = f;
+ }
+ }
+ // enshure that current_tp points to valid tp.
+ if (current_tp == t2)
+ current_tp = t;
+}
+
void check_duplicate_transponders() {
struct transponder * t, * t2;
char buf[128];
+
verbose(" %s()\n", __FUNCTION__);
for(t = scanned_transponders->first; t; t = t->next) {
for(t2 = t->next; t2; t2 = t2->next) {
@@ -564,12 +574,9 @@ void check_duplicate_transponders() {
continue;
if (t->transport_stream_id != t2->transport_stream_id)
continue;
- if ((t->type == SCAN_TERRESTRIAL) && !t->frequency)
- t->frequency = t2->frequency;
- if (current_tp == t2)
- current_tp = t;
+ copy_duplicate_tp(t,t2);
print_transponder(buf, t2);
- verbose(" DELETING DUPLICATE TRANSPONDER %s(%.3u): %s\n", scanned_transponders->name, t2->index, buf);
+ verbose(" DELETING DUPLICATE TRANSPONDER %s(%.3u): %s (line:%d)\n", scanned_transponders->name, t2->index, buf, __LINE__);
DeleteItem(scanned_transponders,t2);
return;
}
@@ -582,12 +589,9 @@ void check_duplicate_transponders() {
continue;
if (t->transport_stream_id != t2->transport_stream_id)
continue;
- if ((t->type == SCAN_TERRESTRIAL) && !t->frequency)
- t->frequency = t2->frequency;
- if (current_tp == t2)
- current_tp = t;
+ copy_duplicate_tp(t,t2);
print_transponder(buf, t2);
- verbose(" DELETING DUPLICATE TRANSPONDER %s(%.3u): %s\n", new_transponders->name, t2->index, buf);
+ verbose(" DELETING DUPLICATE TRANSPONDER %s(%.3u): %s (line:%d)\n", new_transponders->name, t2->index, buf, __LINE__);
DeleteItem(new_transponders,t2);
return;
}
@@ -602,25 +606,20 @@ void check_duplicate_transponders() {
continue;
if (t->transport_stream_id != t2->transport_stream_id)
continue;
- if ((t->type == SCAN_TERRESTRIAL) && !t->frequency)
- t->frequency = t2->frequency;
- if (current_tp == t2)
- current_tp = t;
+ copy_duplicate_tp(t,t2);
print_transponder(buf, t2);
- verbose(" DELETING DUPLICATE TRANSPONDER %s(%.3u): %s\n", new_transponders->name, t2->index, buf);
+ verbose(" DELETING DUPLICATE TRANSPONDER %s(%.3u): %s (line:%d)\n", new_transponders->name, t2->index, buf, __LINE__);
DeleteItem(new_transponders,t2);
return;
}
}
}
-
static void copy_transponder(struct transponder * dest, struct transponder * source) {
struct service * s, * sd;
- struct frequency_item * p, * p1;
+ struct cell * p/*, * p1*/;
copy_fe_params(dest, source);
-
dest->network_PID = source->network_PID;
dest->network_id = source->network_id;
dest->original_network_id = source->original_network_id;
@@ -634,37 +633,31 @@ static void copy_transponder(struct transponder * dest, struct transponder * sou
dest->network_name = (char *) calloc(strlen(source->network_name) + 1, 1);
memcpy(dest->network_name, source->network_name, strlen(source->network_name));
}
+ dest->cells = &(dest->_cells);
+ ClearList(dest->cells);
- dest->frequencies = &(dest->_frequencies);
- for(p = (dest->frequencies)->first; p; p = p->next)
- ClearList(p->transposers);
- ClearList(dest->frequencies);
-
- for(p = (source->frequencies)->first; p; p = p->next) {
- struct frequency_item * p2, * p3;
- p1 = calloc(1, sizeof(*p1));
- p1->transposers = &(p1->_transposers);
- NewList(p1->transposers, "transposers");
- p1->frequency = p->frequency;
- p1->cell_id = p->cell_id;
- for(p2 = (p->transposers)->first; p2; p2 = p2->next) {
- p3 = calloc(1, sizeof(*p3));
- p3->transposers = &(p3->_transposers);
- NewList(p3->transposers, "dont_use");
- p3->frequency = p2->frequency;
- p3->cell_id = p2->cell_id;
- AddItem(p1->transposers, p3);
+ for(p = (source->cells)->first; p; p = p->next) {
+ struct cell* p1;
+ int i;
+ p1 = calloc(1, sizeof(struct cell));
+ AddItem(dest->cells, p1);
+ for(i = 0; i < 6; i++)
+ p1->center_frequencies[i] = p->center_frequencies[i];
+ p1->num_center_frequencies = p->num_center_frequencies;
+ p1->cell_id = p->cell_id;
+
+ for(i = 0; i < 16; i++) {
+ p1->transposers[i].cell_id_extension = p->transposers[i].cell_id_extension;
+ p1->transposers[i].transposer_frequency = p->transposers[i].transposer_frequency;
}
- AddItem(dest->frequencies, p1);
+ p1->num_transposers = p->num_transposers;
}
-
dest->services = &(dest->_services);
ClearList(dest->services);
-
// be shure that we take all services from source to dest.
for(s = (source->services)->first; s; s = s->next) {
- sd = calloc(1, sizeof(*sd));
- memcpy(sd, s, sizeof(*sd));
+ sd = calloc(1, sizeof(struct service));
+ memcpy(sd, s, sizeof(struct service));
sd->priv = NULL;
sd->prev = NULL;
sd->next = NULL;
@@ -827,14 +820,12 @@ static void parse_descriptors(enum table_id t, const unsigned char * buf, int de
switch (buf[2]) { // descriptor_tag_extension;
// see descriptors.h: _extended_descriptors && 300468v011101p 6.4
case C2_delivery_system_descriptor:
- if ((scantype == SCAN_CABLE) && ((t == TABLE_NIT_ACT) || (t == TABLE_NIT_OTH)) &&
- (fe_info.caps & FE_CAN_2G_MODULATION)) {
+ if ((scantype == SCAN_CABLE) && ((t == TABLE_NIT_ACT) || (t == TABLE_NIT_OTH))) {
parse_C2_delivery_system_descriptor(buf, data, caps_inversion);
}
break;
case T2_delivery_system_descriptor:
- if ((scantype == SCAN_TERRESTRIAL) && ((t == TABLE_NIT_ACT) || (t == TABLE_NIT_OTH)) &&
- (fe_info.caps & FE_CAN_2G_MODULATION)) {
+ if ((scantype == SCAN_TERRESTRIAL) && ((t == TABLE_NIT_ACT) || (t == TABLE_NIT_OTH))) {
parse_T2_delivery_system_descriptor(buf, data, caps_inversion);
}
break;
@@ -928,16 +919,21 @@ em_static void parse_pat(const unsigned char * buf, uint16_t section_length, uin
hexdump(__FUNCTION__, buf, section_length);
if (current_tp->transport_stream_id != transport_stream_id) {
- char buffer[128];
- print_transponder(buffer, current_tp);
- info(" %s : updating transport_stream_id: -> (%u:%u:%u)\n",
- buffer,
- current_tp->original_network_id,
- current_tp->network_id,
- transport_stream_id);
- current_tp->transport_stream_id = transport_stream_id;
- check_duplicate_transponders();
- if (verbosity > 1) list_transponders();
+ if (current_tp->type == SCAN_TERRESTRIAL) {
+ char buffer[128];
+ print_transponder(buffer, current_tp);
+ info(" %s : updating transport_stream_id: -> (%u:%u:%u)\n",
+ buffer,
+ current_tp->original_network_id,
+ current_tp->network_id,
+ transport_stream_id);
+ current_tp->transport_stream_id = transport_stream_id;
+ check_duplicate_transponders();
+ if (verbosity > 1) list_transponders();
+ }
+ else if (current_tp->transport_stream_id)
+ verbose("unexpected transport_stream_id %d, expected %d\n",
+ transport_stream_id, current_tp->transport_stream_id);
}
while(section_length > 0) {
@@ -1223,6 +1219,7 @@ em_static void parse_pmt(const unsigned char * buf, uint16_t section_length, uin
em_static void parse_nit(const unsigned char * buf, uint16_t section_length, uint8_t table_id, uint16_t network_id, uint32_t section_flags) {
char buffer[128];
int descriptors_loop_len = ((buf[0] & 0x0f) << 8) | buf[1];
+ bool update_pids;
verbose("%s: (xxxx:%u:xxxx)\n", table_id == 0x40?"NIT(act)":"NIT(oth)", network_id);
hexdump(__FUNCTION__, buf, section_length);
@@ -1262,24 +1259,7 @@ em_static void parse_nit(const unsigned char * buf, uint16_t section_length, uin
break;
}
- //if (section_flags & SECTION_FLAG_INITIAL) {
- if (table_id == TABLE_NIT_ACT) {
- // first lookup of this transponders NIT
- // - high prio: try to find tp by ts_id && update nid, onid
- // - low prio: find other tp's
- //t = current_tp->transport_stream_id == transport_stream_id ? current_tp : NULL;
- t = find_transponder(0, network_id, transport_stream_id);
- if (t != NULL) {
- if (t->original_network_id != original_network_id) {
- print_transponder(buffer, t);
- info(" %s : updating original_network_id -> (%u:%u:%u)\n",
- buffer, original_network_id, t->network_id, t->transport_stream_id);
- t->original_network_id = original_network_id;
- if (verbosity > 1) list_transponders();
- }
- }
- }
-
+ update_pids = false;
memset(&tn, 0, sizeof(tn));
tn.type = current_tp->type;
tn.network_PID = current_tp->network_PID;
@@ -1290,8 +1270,8 @@ em_static void parse_nit(const unsigned char * buf, uint16_t section_length, uin
tn.services = &tn._services;
NewList(tn.services, "tn_services");
- tn.frequencies = &tn._frequencies;
- NewList(tn.frequencies, "tn_frequencies");
+ tn.cells = &tn._cells;
+ NewList(tn.cells, "tn_cells");
if ((current_tp->original_network_id == original_network_id) &&
(current_tp->transport_stream_id == transport_stream_id) &&
@@ -1304,13 +1284,41 @@ em_static void parse_nit(const unsigned char * buf, uint16_t section_length, uin
tn.source |= table_id << 8;
t = find_transponder(original_network_id, network_id, transport_stream_id); // try to find tp by transport_stream_id;
+ if (t == NULL) {
+ if ((t = find_transponder_by_freq(&tn))) {
+ print_transponder(buffer, t);
+ info(" already known: (%s), but not found by pids\n", buffer);
+ update_pids = true;
+ }
+ }
if (t != NULL) {
// this transponder is already known. Should we update its informations?
if (tn.other_frequency_flag)
tn.frequency = t->frequency;
+ if (t->locks_with_params && !tn.bandwidth)
+ tn.bandwidth = t->bandwidth;
if (table_id == TABLE_NIT_ACT) {
// only nit_actual should update transponders, too much garbage in satellite nit_other.
+ if (update_pids) {
+ update_pids = false;
+ // 300468: The combination of original_network_id and transport_stream_id allow each TS to be uniquely
+ // identified throughout the application area of the present document.
+ // Any sections of the NIT which describe the actual network (that is, the network of which
+ // the TS containing the NIT is a part) shall have the table_id 0x40. (TABLE_NIT_ACT)
+ if ((t->original_network_id != original_network_id) ||
+ (t->network_id != network_id) ||
+ (t->transport_stream_id != transport_stream_id)) {
+ print_transponder(buffer, t);
+ info(" %s : updating tp ids -> (%u:%u:%u)\n",
+ buffer, original_network_id, network_id, transport_stream_id);
+ t->original_network_id = original_network_id;
+ t->network_id = network_id;
+ t->transport_stream_id = transport_stream_id;
+ if (verbosity > 1) list_transponders();
+ check_duplicate_transponders();
+ }
+ }
if (is_different_transponder_deep_scan(t, &tn, 0) && ((! t->locks_with_params) || is_auto_params(t))) { // || t->source != tn.source) {
/* some of the informations is still set to AUTO */
print_transponder(buffer, t);
@@ -1318,14 +1326,14 @@ em_static void parse_nit(const unsigned char * buf, uint16_t section_length, uin
copy_transponder(t, &tn);
print_transponder(buffer, t);
info(" to (%s) 0x%.4X\n", buffer, t->source);
- if (t->frequencies->count > 0) {
- struct frequency_item * fi, * tr;
- for(fi = t->frequencies->first; fi; fi = fi->next) {
- verbose(" cell id %u, freq = %u\n", fi->cell_id, fi->frequency);
- if (fi->transposers->count > 0) {
- for(tr = fi->transposers->first; tr; tr = fi->next) {
- verbose(" transposer = %u\n", tr->frequency);
- }
+ if (t->cells->count > 0) {
+ struct cell* fi;
+ for(fi = (t->cells)->first; fi; fi = fi->next) {
+ int n;
+ for(n = 0; n < fi->num_center_frequencies; n++)
+ verbose(" cell%d: center_frequency%u\n", fi->cell_id, fi->center_frequencies[n]);
+ for(n = 0; n < fi->num_transposers; n++) {
+ verbose(" transposer%d transposer_frequency%u\n", n, fi->transposers[n].transposer_frequency);
}
}
}
@@ -1336,9 +1344,9 @@ em_static void parse_nit(const unsigned char * buf, uint16_t section_length, uin
else {
// we could not find the transponder by freq and fe_type. probably a new one - so adding it to scan list
if (flags.add_frequencies > 0 && (tn.type == flags.scantype)) {
- if (find_transponder_by_freq(&tn)) {
- print_transponder(buffer, &tn);
- info(" already known: (%s), but not found by pids\n", buffer);
+ if ((t = find_transponder_by_freq(&tn))) {
+ print_transponder(buffer, t);
+ info(" unexpected: already known tp (%s), but not found by pids\n", buffer);
}
else {
t = alloc_transponder(tn.frequency, tn.type, tn.polarization);
@@ -1347,17 +1355,18 @@ em_static void parse_nit(const unsigned char * buf, uint16_t section_length, uin
t->pilot = PILOT_AUTO;
print_transponder(buffer, t);
info(" new transponder: (%s) 0x%.4X\n", buffer, t->source);
- if (t->frequencies->count > 0) {
- struct frequency_item * fi, * tr;
- for(fi = t->frequencies->first; fi; fi = fi->next) {
- verbose(" cell id %u, freq = %u\n", fi->cell_id, fi->frequency);
- if (fi->transposers->count > 0) {
- for(tr = fi->transposers->first; tr; tr = fi->next) {
- verbose(" transposer = %u\n", tr->frequency);
- }
+ if (t->cells->count > 0) {
+ struct cell* fi;
+ for(fi = (t->cells)->first; fi; fi = fi->next) {
+ int n;
+ for(n = 0; n < fi->num_center_frequencies; n++)
+ verbose(" cell%d: center_frequency%u\n", fi->cell_id, fi->center_frequencies[n]);
+ for(n = 0; n < fi->num_transposers; n++) {
+ verbose(" transposer%d transposer_frequency%u\n", n, fi->transposers[n].transposer_frequency);
}
}
}
+ check_duplicate_transponders();
if (verbosity > 1) list_transponders();
}
}
@@ -2070,19 +2079,19 @@ static int set_frontend(int frontend_fd, struct transponder * t) {
// if (mem_is_zero(&t->param, sizeof(struct tuning_parameters)))
// return -1;
-
switch(flags.api_version) {
case 0x0500 ... 0x05FF:
- //debug("%s: using DVB API %u.%u\n",
- // __FUNCTION__,
- // flags.api_version >> 8,
- // flags.api_version & 0xFF);
-
- /* some 'shortcut' here :-)) --wk 20090324 */
+ #ifdef HWDBG
+ #define set_cmd_sequence(_cmd, _data) cmds[sequence_len].cmd = _cmd; \
+ cmds[sequence_len].u.data = _data; \
+ cmdseq.num = ++sequence_len; \
+ info("%s:%d: %-40s = %d\n", __FUNCTION__,__LINE__, \
+ property_name(_cmd), _data)
+ #else
#define set_cmd_sequence(_cmd, _data) cmds[sequence_len].cmd = _cmd; \
cmds[sequence_len].u.data = _data; \
cmdseq.num = ++sequence_len
-
+ #endif
set_cmd_sequence(DTV_CLEAR, DTV_UNDEFINED);
switch(t->type) {
case SCAN_SATELLITE:
@@ -2250,7 +2259,7 @@ static int __tune_to_transponder(int frontend_fd, struct transponder * t, int v)
t->locks_with_params = true;
return 0;
}
- t->locks_with_params = false;
+
if (v > 0)
info("----------no signal----------\n");
@@ -2258,7 +2267,7 @@ static int __tune_to_transponder(int frontend_fd, struct transponder * t, int v)
info("\n");
t->last_tuning_failed = 1;
- t->locks_with_params = 1;
+ t->locks_with_params = false;
/* tuning didnt work, retry with auto. */
if (t->delsys != SYS_DVBS2) t->modulation = QAM_AUTO;
@@ -2282,6 +2291,8 @@ static int tune_to_transponder(int frontend_fd, struct transponder * t) {
}
for(st = scanned_transponders->first; st; st = st->next) {
+ if ((flags.scantype == SCAN_SATELLITE) && (t->polarization != st->polarization))
+ continue;
if (is_nearly_same_frequency(st->frequency,t->frequency,t->type)) {
known = true;
break;
@@ -2317,15 +2328,15 @@ static int tune_to_next_transponder(int frontend_fd) {
if (t->frequency && (tune_to_transponder(frontend_fd, t) == 0))
return 0;
- if (t->other_frequency_flag && ((t->frequencies)->count > 0)) {
- while(i < (t->frequencies)->count) {
- struct transponder * test = NULL;
- struct frequency_item * next = GetItem(t->frequencies, i++);
+ if (t->other_frequency_flag && ((t->cells)->count > 0)) {
+ while(i < (t->cells)->count) {
+ struct transponder* test = NULL;
+ struct cell* next = GetItem(t->cells, i++);
if (next == NULL)
continue; // GetItem may return NULL; dont want to segfault here.
- t->frequency = next->frequency;
+ t->frequency = next->center_frequencies[0];
j = 0;
test = find_transponder_by_freq(t);
if ((test != NULL) && !(IsMember(scanned_transponders, test))) {
@@ -2334,9 +2345,8 @@ static int tune_to_next_transponder(int frontend_fd) {
return 0;
}
- while(j < (next->transposers)->count) {
- struct frequency_item * transposer = GetItem(next->transposers, j++);
- t->frequency = transposer->frequency;
+ while(j < next->num_transposers) {
+ t->frequency = next->transposers[j].transposer_frequency;
test = find_transponder_by_freq(t);
if ((test != NULL) && !(IsMember(scanned_transponders, test))) {
info("retrying with transposer_frequency = %u\n", t->frequency);
@@ -2527,8 +2537,10 @@ static int initial_tune(int frontend_fd, int tuning_data) {
// disable qam loop, disable symbolrate loop
modulation_min=modulation_max=0;
dvbc_symbolrate_min=dvbc_symbolrate_max=0;
+ // enable legacy delsys loop.
+ delsys_min = delsysloop_min(0, this_channellist);
// enable T2 loop.
- delsys_max = 1;
+ delsys_max = delsysloop_max(0, this_channellist);
break;
case SCAN_CABLE:
// if choosen srate is too high for channellist's bandwidth,
@@ -3979,6 +3991,14 @@ int main(int argc, char ** argv) {
info("FEC_AUTO not supported, trying FEC_NONE.\n");
caps_fec=FEC_NONE;
}
+ if (fe_info.caps & FE_CAN_BANDWIDTH_AUTO) {
+ info("BANDWIDTH_AUTO\n");
+ bandwidth_auto = true;
+ }
+ else {
+ info("BANDWIDTH_AUTO not supported, trying 6/7/8 MHz.\n");
+ bandwidth_auto = false;
+ }
if (fe_info.frequency_min == 0 || fe_info.frequency_max == 0) {
info("This dvb driver is *buggy*: the frequency limits are undefined - please report to linuxtv.org\n");
fe_info.frequency_min = 177500000; fe_info.frequency_max = 858000000;
diff --git a/si_types.h b/si_types.h
index c3b8987..e20b9bd 100644
--- a/si_types.h
+++ b/si_types.h
@@ -120,27 +120,36 @@ struct service {
/* transponder type.
******************************************************************************/
-struct frequency_item {
+struct transposer {
+ uint8_t cell_id_extension;
+ uint32_t transposer_frequency;
+};
+
+struct cell {
/*----------------------------*/
void * prev;
void * next;
uint32_t index;
/*----------------------------*/
- pList transposers;
- cList _transposers;
uint16_t cell_id;
- uint32_t frequency;
+
+ // if TFS: up to 6 RF freqs.
+ int num_center_frequencies;
+ uint32_t center_frequencies[6];
+
+ int num_transposers;
+ struct transposer transposers[16];
};
struct transponder {
/*----------------------------*/
- void * prev;
- void * next;
- uint32_t index;
- pList services;
+ void * prev;
+ void * next;
+ uint32_t index;
+ pList services;
cList _services;
- pList frequencies; /* DVB-T/T2 */
- cList _frequencies;
+ pList cells; /* DVB-T/T2 */
+ cList _cells;
/*----------------------------- starting from here copied by 'copy_fe_params' ------------------------------------------*/
/* NOTE: 'frequency' needs to be first item - dont touch! */
uint32_t frequency; /* unit Hz, except satellite: kHz 1..4 */
diff --git a/tools.c b/tools.c
index 55dd9b7..25a752c 100644
--- a/tools.c
+++ b/tools.c
@@ -41,7 +41,7 @@ int verbosity = 2; // need signed -> use of fatal()
* new implementation of double linked list since 20140118.
*
******************************************************************************/
-// #define LIST_DEBUG 1
+//#define LIST_DEBUG 1
#ifdef LIST_DEBUG
#define dbg(s...) info(s)
@@ -80,7 +80,7 @@ int alphabetically(void * a, void * b, int ascending) {
#endif
// initializes a list before first use
-void NewList(pList list, const char * name) {
+void NewList(pList const list, const char * name) {
dbg("%s %d: list:'%s'\n", __FUNCTION__,__LINE__,name);
list->first = NULL;
list->last = NULL;
@@ -109,7 +109,6 @@ void ClearList(pList list) {
pItem p = list->last;
while (p != NULL) {
- list->count--;
list->last=p->prev;
free(p);
p=list->last;
@@ -118,6 +117,7 @@ void ClearList(pList list) {
}
}
list->first=NULL;
+ list->count=0;
list->lock=false;
report(list);
}
@@ -589,6 +589,82 @@ const char * delivery_system_name(int delsys) {
}
}
+const char * property_name(int property) {
+ switch(property) {
+ case DTV_UNDEFINED : return "DTV_UNDEFINED";
+ case DTV_TUNE : return "DTV_TUNE";
+ case DTV_CLEAR : return "DTV_CLEAR";
+ case DTV_FREQUENCY : return "DTV_FREQUENCY";
+ case DTV_MODULATION : return "DTV_MODULATION";
+ case DTV_BANDWIDTH_HZ : return "DTV_BANDWIDTH_HZ";
+ case DTV_INVERSION : return "DTV_INVERSION";
+ case DTV_DISEQC_MASTER : return "DTV_DISEQC_MASTER";
+ case DTV_SYMBOL_RATE : return "DTV_SYMBOL_RATE";
+ case DTV_INNER_FEC : return "DTV_INNER_FEC";
+ case DTV_VOLTAGE : return "DTV_VOLTAGE";
+ case DTV_TONE : return "DTV_TONE";
+ case DTV_PILOT : return "DTV_PILOT";
+ case DTV_ROLLOFF : return "DTV_ROLLOFF";
+ case DTV_DISEQC_SLAVE_REPLY : return "DTV_DISEQC_SLAVE_REPLY";
+ case DTV_FE_CAPABILITY_COUNT : return "DTV_FE_CAPABILITY_COUNT";
+ case DTV_FE_CAPABILITY : return "DTV_FE_CAPABILITY";
+ case DTV_DELIVERY_SYSTEM : return "DTV_DELIVERY_SYSTEM";
+ case DTV_ISDBT_PARTIAL_RECEPTION : return "DTV_ISDBT_PARTIAL_RECEPTION";
+ case DTV_ISDBT_SOUND_BROADCASTING : return "DTV_ISDBT_SOUND_BROADCASTING";
+ case DTV_ISDBT_SB_SUBCHANNEL_ID : return "DTV_ISDBT_SB_SUBCHANNEL_ID";
+ case DTV_ISDBT_SB_SEGMENT_IDX : return "DTV_ISDBT_SB_SEGMENT_IDX";
+ case DTV_ISDBT_SB_SEGMENT_COUNT : return "DTV_ISDBT_SB_SEGMENT_COUNT";
+ case DTV_ISDBT_LAYERA_FEC : return "DTV_ISDBT_LAYERA_FEC";
+ case DTV_ISDBT_LAYERA_MODULATION : return "DTV_ISDBT_LAYERA_MODULATION";
+ case DTV_ISDBT_LAYERA_SEGMENT_COUNT : return "DTV_ISDBT_LAYERA_SEGMENT_COUNT";
+ case DTV_ISDBT_LAYERA_TIME_INTERLEAVING : return "DTV_ISDBT_LAYERA_TIME_INTERLEAVING";
+ case DTV_ISDBT_LAYERB_FEC : return "DTV_ISDBT_LAYERB_FEC";
+ case DTV_ISDBT_LAYERB_MODULATION : return "DTV_ISDBT_LAYERB_MODULATION";
+ case DTV_ISDBT_LAYERB_SEGMENT_COUNT : return "DTV_ISDBT_LAYERB_SEGMENT_COUNT";
+ case DTV_ISDBT_LAYERB_TIME_INTERLEAVING : return "DTV_ISDBT_LAYERB_TIME_INTERLEAVING";
+ case DTV_ISDBT_LAYERC_FEC : return "DTV_ISDBT_LAYERC_FEC";
+ case DTV_ISDBT_LAYERC_MODULATION : return "DTV_ISDBT_LAYERC_MODULATION";
+ case DTV_ISDBT_LAYERC_SEGMENT_COUNT : return "DTV_ISDBT_LAYERC_SEGMENT_COUNT";
+ case DTV_ISDBT_LAYERC_TIME_INTERLEAVING : return "DTV_ISDBT_LAYERC_TIME_INTERLEAVING";
+ case DTV_API_VERSION : return "DTV_API_VERSION";
+ case DTV_CODE_RATE_HP : return "DTV_CODE_RATE_HP";
+ case DTV_CODE_RATE_LP : return "DTV_CODE_RATE_LP";
+ case DTV_GUARD_INTERVAL : return "DTV_GUARD_INTERVAL";
+ case DTV_TRANSMISSION_MODE : return "DTV_TRANSMISSION_MODE";
+ case DTV_HIERARCHY : return "DTV_HIERARCHY";
+ case DTV_ISDBT_LAYER_ENABLED : return "DTV_ISDBT_LAYER_ENABLED";
+ case DTV_STREAM_ID : return "DTV_STREAM_ID";
+ case DTV_DVBT2_PLP_ID_LEGACY : return "DTV_DVBT2_PLP_ID_LEGACY";
+ case DTV_ENUM_DELSYS : return "DTV_ENUM_DELSYS";
+ case DTV_ATSCMH_FIC_VER : return "DTV_ATSCMH_FIC_VER";
+ case DTV_ATSCMH_PARADE_ID : return "DTV_ATSCMH_PARADE_ID";
+ case DTV_ATSCMH_NOG : return "DTV_ATSCMH_NOG";
+ case DTV_ATSCMH_TNOG : return "DTV_ATSCMH_TNOG";
+ case DTV_ATSCMH_SGN : return "DTV_ATSCMH_SGN";
+ case DTV_ATSCMH_PRC : return "DTV_ATSCMH_PRC";
+ case DTV_ATSCMH_RS_FRAME_MODE : return "DTV_ATSCMH_RS_FRAME_MODE";
+ case DTV_ATSCMH_RS_FRAME_ENSEMBLE : return "DTV_ATSCMH_RS_FRAME_ENSEMBLE";
+ case DTV_ATSCMH_RS_CODE_MODE_PRI : return "DTV_ATSCMH_RS_CODE_MODE_PRI";
+ case DTV_ATSCMH_RS_CODE_MODE_SEC : return "DTV_ATSCMH_RS_CODE_MODE_SEC";
+ case DTV_ATSCMH_SCCC_BLOCK_MODE : return "DTV_ATSCMH_SCCC_BLOCK_MODE";
+ case DTV_ATSCMH_SCCC_CODE_MODE_A : return "DTV_ATSCMH_SCCC_CODE_MODE_A";
+ case DTV_ATSCMH_SCCC_CODE_MODE_B : return "DTV_ATSCMH_SCCC_CODE_MODE_B";
+ case DTV_ATSCMH_SCCC_CODE_MODE_C : return "DTV_ATSCMH_SCCC_CODE_MODE_C";
+ case DTV_ATSCMH_SCCC_CODE_MODE_D : return "DTV_ATSCMH_SCCC_CODE_MODE_D";
+ case DTV_INTERLEAVING : return "DTV_INTERLEAVING";
+ case DTV_LNA : return "DTV_LNA";
+ case DTV_STAT_SIGNAL_STRENGTH : return "DTV_STAT_SIGNAL_STRENGTH";
+ case DTV_STAT_CNR : return "DTV_STAT_CNR";
+ case DTV_STAT_PRE_ERROR_BIT_COUNT : return "DTV_STAT_PRE_ERROR_BIT_COUNT";
+ case DTV_STAT_PRE_TOTAL_BIT_COUNT : return "DTV_STAT_PRE_TOTAL_BIT_COUNT";
+ case DTV_STAT_POST_ERROR_BIT_COUNT : return "DTV_STAT_POST_ERROR_BIT_COUNT";
+ case DTV_STAT_POST_TOTAL_BIT_COUNT : return "DTV_STAT_POST_TOTAL_BIT_COUNT";
+ case DTV_STAT_ERROR_BLOCK_COUNT : return "DTV_STAT_ERROR_BLOCK_COUNT";
+ case DTV_STAT_TOTAL_BLOCK_COUNT : return "DTV_STAT_TOTAL_BLOCK_COUNT";
+ default : return "(unknown dtv property)";
+ }
+}
+
const char * bool_name(bool t) {
if (t == false) return "false";
return "true";
diff --git a/tools.h b/tools.h
index 30bb74e..62fff09 100644
--- a/tools.h
+++ b/tools.h
@@ -89,6 +89,7 @@ const char * guard_interval_name(int guard_interval);
const char * hierarchy_name(int hierarchy);
const char * interleaving_name(int interleaving);
const char * delivery_system_name(int delsys);
+const char * property_name(int property);
const char * bool_name(bool t);
uint32_t freq_scale(uint32_t freq, double scale);
@@ -116,7 +117,7 @@ typedef struct {
uint32_t index;
} cItem, * pItem;
-void NewList(pList list, const char * name);
+void NewList(pList const list, const char * name);
void ClearList(pList list);
void SortList(pList list, cmp_func compare);
void AddItem(pList list, void * item);
diff --git a/version.h b/version.h
index deda43b..16661b5 100644
--- a/version.h
+++ b/version.h
@@ -1,6 +1,6 @@
/* AUTOMATICALLY GENERATED - DO NOT EDIT MANUALLY */
#ifndef W_SCAN_VERSION_H
#define W_SCAN_VERSION_H
-uint version=20141122;
+uint version=20161022;
#endif
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-vdr-dvb/w-scan.git
More information about the pkg-vdr-dvb-changes
mailing list