W_scan Single frequency search

  • hi
    I have a problem with w_scan.
    When I try to retrieve service information of a dvb-s2 freq in hotbird, w_scan can not deliver conf file. It locks the freq and find channels but don't write any information to file. Here is the command, frequency and log.


    command:

    Code
    1. w_scan -fs -ss13e0 -a0 -o2 -O1 -F -t3 -G -I dvbs.ini -v >> channels.conf


    frequency(in initial tuning file: dvbs.ini):
    S2 12437000 H 29900000 AUTO AUTO 8PSK
    S2 12437000 H 29900000 AUTO AUTO 8PSK


    log:
    w_scan version 20140102 (compiled for DVB API 5.4)
    using settings for 13.0 east Hotbird 6/7A/8
    parsing initial tuning data "dvbs.ini"..
    transponder S2 f = 12437 kHz H SR = 29900 AUTO 0,35 8PSK
    transponder S2 f = 12437 kHz H SR = 29900 AUTO 0,35 8PSK
    scan type SATELLITE, channellist 69
    output format gstreamer
    WARNING: could not guess your codepage. Falling back to 'UTF-8'
    output charset 'UTF-8', use -C <charset> to override
    -_-_-_-_ Getting frontend capabilities-_-_-_-_
    Using DVB API 5.3
    frontend 'TurboSight TBS 6984 DVBS/S2 frontend' supports
    INVERSION_AUTO
    DVB-S
    DVB-S2
    FREQ (0.95GHz ... 2.15GHz)
    SRATE (1.000MSym/s ... 45.000MSym/s)
    using LNB "UNIVERSAL"
    -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
    updating transponder list..
    S2 f = 12437 kHz H SR = 29900 AUTO 0,35 8PSK: (time: 00:00) DiSEqC: uncommitted switch pos 0
    DiSEqC: switch pos 0, 18V, hiband (index 3)
    (time: 00:03) DiSEqC: uncommitted switch pos 0
    DiSEqC: switch pos 0, 18V, hiband (index 3)
    signal ok
    NIT (actual TS)
    parse_satellite_delivery_system_descriptor: undefined inner fec 0
    parse_satellite_delivery_system_descriptor: fixing broken NIT, setting modulation_system to DVB-S2.
    updating transponder:
    (S2 f = 12437 kHz H SR = 29900 AUTO 0,35 8PSK) 0x0000
    to (S2 f = 12437 kHz H SR = 27500 AUTO 0,20 8PSK) 0x4043

    Info: no data from NIT(other)
    S2 f = 12437 kHz H SR = 29900 AUTO 0,35 8PSK: (time: 00:57) DiSEqC: uncommitted switch pos 0
    DiSEqC: switch pos 0, 18V, hiband (index 3)
    (time: 00:59) DiSEqC: uncommitted switch pos 0
    DiSEqC: switch pos 0, 18V, hiband (index 3)
    signal ok
    NIT (actual TS)
    parse_satellite_delivery_system_descriptor: undefined inner fec 0
    parse_satellite_delivery_system_descriptor: fixing broken NIT, setting modulation_system to DVB-S2.
    Info: no data from NIT(other)
    tune to: S2 f = 12437 kHz H SR = 27500 AUTO 0,20 8PSK
    (time: 01:54) DiSEqC: uncommitted switch pos 0
    DiSEqC: switch pos 0, 18V, hiband (index 3)
    >>> tuning status: 0x01 (NO LOCK)
    >>> tuning status: 0x01 (NO LOCK)
    >>> tuning status: 0x01 (NO LOCK)
    >>> tuning status: 0x01 (NO LOCK)
    >>> tuning status: 0x01 (NO LOCK)
    >>> tuning status: 0x01 (NO LOCK)
    >>> tuning status: 0x01 (NO LOCK)
    >>> tuning status: 0x01 (NO LOCK)
    >>> tuning status: 0x01 (NO LOCK)
    >>> tuning status: 0x01 (NO LOCK)
    >>> tuning status: 0x01 (NO LOCK)
    >>> tuning status: 0x01 (NO LOCK)
    >>> tuning status: 0x01 (NO LOCK)
    >>> tuning status: 0x01 (NO LOCK)
    >>> tuning status: 0x01 (NO LOCK)
    ----------no signal----------
    tune to: S2 f = 12437 kHz H SR = 27500 AUTO 0,20 8PSK (no signal)
    (time: 01:58) DiSEqC: uncommitted switch pos 0
    DiSEqC: switch pos 0, 18V, hiband (index 3)
    >>> tuning status: 0x01 (NO LOCK)
    >>> tuning status: 0x01 (NO LOCK)
    >>> tuning status: 0x01 (NO LOCK)
    >>> tuning status: 0x01 (NO LOCK)
    >>> tuning status: 0x01 (NO LOCK)
    >>> tuning status: 0x01 (NO LOCK)
    >>> tuning status: 0x01 (NO LOCK)
    >>> tuning status: 0x01 (NO LOCK)
    >>> tuning status: 0x01 (NO LOCK)
    >>> tuning status: 0x01 (NO LOCK)
    >>> tuning status: 0x01 (NO LOCK)
    >>> tuning status: 0x01 (NO LOCK)
    >>> tuning status: 0x01 (NO LOCK)
    >>> tuning status: 0x01 (NO LOCK)
    >>> tuning status: 0x01 (NO LOCK)
    ----------no signal----------
    tune to: S2 f = 12437 kHz H SR = 29900 AUTO 0,35 8PSK
    (time: 02:02) DiSEqC: uncommitted switch pos 0
    DiSEqC: switch pos 0, 18V, hiband (index 3)
    >>> tuning status: 0x1f (LOCK)
    PAT
    PMT 0x009a for service 0x1f12
    PMT 0x007f for service 0x1ef7
    PMT 0x0073 for service 0x1eeb
    PMT 0x0065 for service 0x1edd
    PMT 0x009c for service 0x1f14
    PMT 0x0097 for service 0x1f0f
    PMT 0x0072 for service 0x1eea
    PMT 0x0067 for service 0x1edf
    PMT 0x009f for service 0x1f17
    PMT 0x0078 for service 0x1ef0
    PMT 0x006e for service 0x1ee6
    PMT 0x006d for service 0x1ee5
    PMT 0x0066 for service 0x1ede
    PMT 0x00a1 for service 0x1f19
    PMT 0x009e for service 0x1f16
    PMT 0x0080 for service 0x1ef8
    PMT 0x006c for service 0x1ee4
    PMT 0x00a9 for service 0x1f21
    PMT 0x00a0 for service 0x1f18
    PMT 0x0099 for service 0x1f11
    PMT 0x0077 for service 0x1eef
    PMT 0x0070 for service 0x1ee8
    PMT 0x0068 for service 0x1ee0
    PMT 0x0069 for service 0x1ee1
    PMT 0x00b8 for service 0x1f30
    PMT 0x00a8 for service 0x1f20
    PMT 0x00a3 for service 0x1f1b
    PMT 0x0098 for service 0x1f10
    PMT 0x0082 for service 0x1efa
    PMT 0x0076 for service 0x1eee
    SDT (actual TS)
    service = IRIB TV1 (IRIB)
    service = IRIB TV2 (IRIB)
    service = IRIB TV3 (IRIB)
    service = IRIB TV4 (IRIB)
    service = IRIB TV5 (IRIB)
    service = IRINN (IRIB)
    service = IRIB QURAN (IRIB)
    service = IRIB MOSTANAD (IRIB)
    service = IRIB SHOMA (IRIB)
    service = IRIB NAMAYESH (IRIB)
    service = IRIB 1 (IRIB)
    service = iFILM (IRIB)
    service = PRESS TV (IRIB)
    service = IRIB POOYA (IRIB)
    service = IRIB SALAMAT (IRIB)
    service = IRIB TAMASHA (IRIB)
    service = IRIB 2 (IRIB)
    service = SAHAR 1 (IRIB)
    service = SAHAR 2 (IRIB)
    service = ALKAWTHAR (PROVIDER)
    service = RADIO IRAN (IRIB)
    service = RADIO PAYAM (IRIB)
    service = RADIO JAVAN (IRIB)
    service = RADIO MAAREF (IRIB)
    service = RADIO QURAN (IRIB)
    service = RADIO FARHANG (IRIB)
    service = RADIO SALAMAT (IRIB)
    service = RADIO VAEZESH (IRIB)
    service = RADIO EGHTESAD (IRIB)
    service = RADIO TEHRAN (IRIB)
    service = RADIO AVAA (IRIB)
    service = RADIO NAMAYESH (IRIB)
    service = RADIO FASLI (IRIB)
    service = RADIO CALL OF ISLAM (IRIB)
    service = RADIO SEDAYE ASHENA 3 (IRIB)
    service = RADIO KETAB (IRIB)
    service = RADIO DANESH (IRIB)
    service = RADIO TELAVAT (IRIB)
    service = RADIO GOFTEGO (IRIB)
    PMT 0x00bb for service 0x1f33
    PMT 0x00aa for service 0x1f22
    PMT 0x00a2 for service 0x1f1a
    PMT 0x009b for service 0x1f13
    PMT 0x007d for service 0x1ef5
    PMT 0x0071 for service 0x1ee9
    PMT 0x006a for service 0x1ee2
    PMT 0x00ba for service 0x1f32
    PMT 0x00a5 for service 0x1f1d
    PMT 0x009d for service 0x1f15
    PMT 0x00b5 for service 0x1f2d
    PMT 0x00a4 for service 0x1f1c
    PMT 0x00b7 for service 0x2637
    PMT 0x00a7 for service 0x1f1f
    PMT 0x00bc for service 0x1f34
    PMT 0x00b6 for service 0x1f2e
    PMT 0x00b9 for service 0x1f31
    SDT (actual TS)
    service = RADIO 01 WORLD SERVICE (IRIB)
    service = RADIO 02 WORLD SERVICE (IRIB)
    service = RADIO 03 WORLD SERVICE (IRIB)
    service = RADIO 04 WORLD SERVICE (IRIB)
    service = RADIO 05 WORLD SERVICE (IRIB)
    service = RADIO 06 WORLD SERVICE (IRIB)
    service = RADIO SEDAYE ASHNA 1 (IRIB)
    service = RADIO SEDAYE ASHNA 2 (IRIB)
    NIT (actual TS)
    parse_satellite_delivery_system_descriptor: undefined inner fec 0
    parse_satellite_delivery_system_descriptor: fixing broken NIT, setting modulation_system to DVB-S2.
    Info: no data from NIT(other)
    dumping lists (0 services)
    Done.
    ---------------------------------------------------------------------------------------------------------------------------------




    When I use just one line in inital tuning file w_scan can not even lock the frequency! I should Write same line twice! :(
    In log we can see symbol rate of 29900 has changed to 27500 by w_scan and it seems buggy !
    Any help will be appreciated.
    Thanks


  • The transponder data in the NIT delivered at the satellite contains invalid data.
    The value '0' for for fec_inner contradicts DVB specs.
    Furthermore, the new symbolrate 27500 comes also from the satellite.
    The Delivery System is reported as DVB-S, which is also wrong.


    So please, send this bug report to your satellite provider, asking to fix all three issues.


    Quote

    In log we can see symbol rate of 29900 has changed to 27500 by w_scan and it seems buggy !
    Any help will be appreciated.
    Thanks


    Ask your satellite provider to fix its NIT.

  • Thanks for the answer! Before reporting the bug to the satellite provider I want to be sure there is no way to survive this fault in NIT.
    In Set-top boxes there is no problem with searching and receiving this frequency and transponder. It also has no problem when streaming whole frequency transponder to network by MUMUDVBstreaming software.
    Maybe I don't have enough information about what happen when tuning the frequency and retrieving information from NIT or other stuffs in TS packets. :P By the way, what is the difference here and is there any way to survive this fault?


    another thing is that as i mention in the first post the program have retrieved channels(services) names and list them but didn dump any of them:

    Quote

    service = IRIB TV1 (IRIB)

    service = IRIB TV2 (IRIB)
    service = IRIB TV3 (IRIB)
    service = IRIB TV4 (IRIB)
    service = IRIB TV5 (IRIB)
    service = IRINN (IRIB)
    service = IRIB QURAN (IRIB)
    service = IRIB MOSTANAD (IRIB)
    service = IRIB SHOMA (IRIB)
    service = IRIB NAMAYESH (IRIB)
    service = IRIB 1 (IRIB)
    service = iFILM (IRIB)
    service = PRESS TV (IRIB)
    service = IRIB POOYA (IRIB)
    service = IRIB SALAMAT (IRIB)
    service = IRIB TAMASHA (IRIB)
    service = IRIB 2 (IRIB)
    service = SAHAR 1 (IRIB)
    service = SAHAR 2 (IRIB)
    service = ALKAWTHAR (PROVIDER)
    service = RADIO IRAN (IRIB)
    service = RADIO PAYAM (IRIB)
    service = RADIO JAVAN (IRIB)
    service = RADIO MAAREF (IRIB)
    service = RADIO QURAN (IRIB)
    service = RADIO FARHANG (IRIB)
    service = RADIO SALAMAT (IRIB)
    service = RADIO VAEZESH (IRIB)
    service = RADIO EGHTESAD (IRIB)
    service = RADIO TEHRAN (IRIB)
    service = RADIO AVAA (IRIB)
    service = RADIO NAMAYESH (IRIB)
    service = RADIO FASLI (IRIB)
    service = RADIO CALL OF ISLAM (IRIB)
    service = RADIO SEDAYE ASHENA 3 (IRIB)
    service = RADIO KETAB (IRIB)
    service = RADIO DANESH (IRIB)
    service = RADIO TELAVAT (IRIB)
    service = RADIO GOFTEGO (IRIB)
    PMT 0x00bb for service 0x1f33
    PMT 0x00aa for service 0x1f22
    PMT 0x00a2 for service 0x1f1a
    PMT 0x009b for service 0x1f13
    PMT 0x007d for service 0x1ef5
    PMT 0x0071 for service 0x1ee9
    PMT 0x006a for service 0x1ee2
    PMT 0x00ba for service 0x1f32
    PMT 0x00a5 for service 0x1f1d
    PMT 0x009d for service 0x1f15
    PMT 0x00b5 for service 0x1f2d
    PMT 0x00a4 for service 0x1f1c
    PMT 0x00b7 for service 0x2637
    PMT 0x00a7 for service 0x1f1f
    PMT 0x00bc for service 0x1f34
    PMT 0x00b6 for service 0x1f2e
    PMT 0x00b9 for service 0x1f31
    SDT (actual TS)
    service = RADIO 01 WORLD SERVICE (IRIB)
    service = RADIO 02 WORLD SERVICE (IRIB)
    service = RADIO 03 WORLD SERVICE (IRIB)
    service = RADIO 04 WORLD SERVICE (IRIB)
    service = RADIO 05 WORLD SERVICE (IRIB)
    service = RADIO 06 WORLD SERVICE (IRIB)
    service = RADIO SEDAYE ASHNA 1 (IRIB)
    service = RADIO SEDAYE ASHNA 2 (IRIB)


    ...
    ...
    dumping lists (0 services)

  • Yes, there is a way.
    Use such a specialized settop box and not a generic channel scanner trying to pickup standard-conform data.



    'channel scanning' means combining service data as transported in different tables,
    such as NIT, PAT, PMT, .. . If this transmitted data is just wrong or missing, the results will be also wrong. So easy.


    Transmitting a full transponder is not comparable, as parsing this tables is not needed.
    A settop box may include predefined transponder settings, or use a more intelligent dvb hardware figuring out some parameters by its own.


    Anyhow, i will not try to circumvent broken service tables.

  • it seems w-scan have problems in retrieving list of services for dvbs2 frequencies. I change the frequency to other dvbs2 that has 8PSK modulation and result was no list of services. I tested same frequencies with "scan-s2" program that is a dvb search program same as "w_scan" but with some less facilities. It didn't face with a problem in retrieving information. i also foung that this function in descriptor.c maybe need a new look at it! ;-) I will try to find the problem in code (if any) and report it. here is the functions:
    \\\



    void parse_S2_satellite_delivery_system_descriptor(const unsigned char *buf, void * dummy) {
    hd(buf);
    /* FIXME: finding that descriptor means that we're dealing with two
    * transponders on the same freq. I'm not shure now what to do this case.
    */
    //scrambling_sequence_selector 1 bslbf
    //scrambling_sequence_selector = (buf[2] & 0x80) >> 7;
    //multiple_input_stream_flag 1 bslbf
    //multiple_input_stream_flag = (buf[2] & 0x40) >> 6;
    //backwards_compatibility_indicator 1 bslbf
    //backwards_compatibility_indicator = (buf[2] & 0x20) >> 5;
    //reserved_future_use 5 bslbf
    //buf += 3;
    //if (scrambling_sequence_selector == 1) {
    // Reserved 6 bslbf
    // scrambling_sequence_index 18 uimsbf
    // scrambling_sequence_index = (*buf++ & 0x03) << 16;
    // scrambling_sequence_index |= *buf++ << 8;
    // scrambling_sequence_index |= *buf++;
    // }
    //if (multiple_input_stream_flag == 1) {
    // input_stream_identifier 8 uimsbf
    // input_stream_identifier = *buf++;
    //}
    verbose("S2_satellite_delivery_system_descriptor(skipped.)\n");
    }


    void parse_satellite_delivery_system_descriptor(const unsigned char *buf,
    struct transponder *t, fe_spectral_inversion_t inversion) {
    if (t == NULL)
    return;
    hd(buf);
    t->type = SCAN_SATELLITE;
    t->source = 0x43;
    t->param.inversion = inversion;
    /* frequency is coded in GHz, where the decimal point occurs after the
    * third character (e.g. 011,75725 GHz).
    */
    t->param.frequency = 10 * bcd32_to_cpu (buf[2], buf[3], buf[4], buf[5]);
    //orbital_position 16 bslbf
    t->param.u.sat.orbital_position = (buf[6] << 8) | buf[7];
    //west_east_flag 1 bslbf
    t->param.u.sat.west_east_flag = (buf[8] & 0x80) >> 7;
    //polarization 2 bslbf
    switch ((buf[8] & 0x60) >> 5) {
    case 0: t->param.u.sat.polarization = POLARIZATION_HORIZONTAL; break;
    case 1: t->param.u.sat.polarization = POLARIZATION_VERTICAL; break;
    case 2: t->param.u.sat.polarization = POLARIZATION_CIRCULAR_LEFT; break;
    case 3: t->param.u.sat.polarization = POLARIZATION_CIRCULAR_RIGHT; break;
    default:
    fatal("polarization decoding failed: %d\n", (buf[8] & 0x60) >> 5);
    }
    switch ((buf[8] & 0x18) >> 3) {
    case 0: t->param.u.sat.rolloff = ROLLOFF_35; break;
    case 1: t->param.u.sat.rolloff = ROLLOFF_25; break;
    case 2: t->param.u.sat.rolloff = ROLLOFF_20; break;
    case 3:
    warning("reserved rolloff value 3 found\n");
    t->param.u.sat.rolloff = ROLLOFF_AUTO;
    break;
    default:
    fatal("rolloff decoding failed: %d\n", (buf[8] & 0x18) >> 3);
    }
    switch ((buf[8] & 0x04) >> 2) {
    case 0: t->param.u.sat.modulation_system = SYS_DVBS; break;
    case 1: t->param.u.sat.modulation_system = SYS_DVBS2; break;
    default:
    t->param.u.sat.modulation_system = SYS_DVBS;
    }
    //modulation_type 2 bslbf
    switch (buf[8] & 0x03) {
    case 1: t->param.u.sat.modulation_type = QPSK; break;
    case 2: t->param.u.sat.modulation_type = PSK_8; break;
    case 3: t->param.u.sat.modulation_type = QAM_16; break;
    default:
    t->param.u.sat.modulation_type = QAM_AUTO;
    }
    if (t->param.u.sat.modulation_type == PSK_8)
    t->param.u.sat.modulation_system = SYS_DVBS2;
    //symbol_rate 28 bslbf
    t->param.u.sat.symbol_rate = 10 * bcd32_to_cpu (buf[9], buf[10], buf[11], buf[12] & 0xF0);
    //FEC_inner 4 bslbf
    switch (buf[12] & 0x0F) {
    case 1: t->param.u.sat.fec_inner = FEC_1_2; break;
    case 2: t->param.u.sat.fec_inner = FEC_2_3; break;
    case 3: t->param.u.sat.fec_inner = FEC_3_4; break;
    case 4: t->param.u.sat.fec_inner = FEC_5_6; break;
    case 5: t->param.u.sat.fec_inner = FEC_7_8; break;
    case 6: t->param.u.sat.fec_inner = FEC_8_9; break;
    case 7: t->param.u.sat.fec_inner = FEC_3_5; break;
    case 8: t->param.u.sat.fec_inner = FEC_4_5; break;
    case 9: t->param.u.sat.fec_inner = FEC_9_10; break;
    case 15:t->param.u.sat.fec_inner = FEC_NONE; break;
    default:
    verbose("\t%s: undefined inner fec %u\n",
    __FUNCTION__, buf[12] & 0x0F);
    t->param.u.sat.fec_inner = FEC_AUTO;
    }
    /* some NIT's are broken. */
    if ((t->param.u.sat.modulation_type == PSK_8) ||
    (t->param.u.sat.rolloff == ROLLOFF_25) ||
    (t->param.u.sat.rolloff == ROLLOFF_20) ||
    (t->param.u.sat.fec_inner == FEC_9_10) ||
    (t->param.u.sat.fec_inner == FEC_3_5)) {
    verbose("\t%s: fixing broken NIT, setting modulation_system to DVB-S2.\n",
    __FUNCTION__);
    t->param.u.sat.modulation_system = SYS_DVBS2;
    }

    }



    \\\\\




    I think it is not because of broken NIT but on the other hand I try to communicate with service provider and report this issue to be sure the problem is not in their Ts packet and Broken Service Tables.


    Best

  • Just use verbose mode ' -v -v -v ' of w_scan or better use dvbsnoop and compare bit for bit against specs en13818-1 && en300486.
    Capture all packets for NIT actual (pid 0x40) && compare.



    At the moment i really cannot see, that you're right here; the data comes that way from satellites SI tables;
    the actual NIT says: DVBS, 12437 kHz Horizontal SR = 27500 RO=0,20 8PSK; see parse_satellite_delivery_system_descriptor()
    not parse_S2_satellite_delivery_system_descriptor;


    Quote

    I think it is not because of broken NIT..


    Capture with dvbsnoop the NIT of that channel, then you know.