Mailing List archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[linux-dvb] [RFC][ANNOUNCE] blindscan: auto search everything



Hi,

blindscan is a tool able to find all parameters of a DVB-S signal
(freq, pol, spectral inversion, symbol rate, fec, pids), with zero
prior information (only frequency range and symbol rate range).
And it's fast!

For example, let's check frequencies 10950-11200 on Eutelsat W3A (7E)
for SCPC feeds (at 2004/08/01T12:46:00+0200):
(olympics games are coming! :-))

------               10974 V + 6672 7/8 (10971+3)  FOUND!
------               10983 V + 6672 7/8 (10980+2)  FOUND!
------               10992 V + 6672 7/8 (10989+2)  FOUND!
------               11040 V + 6672 7/8 (11037+2)  FOUND!
------               11049 V + 6672 7/8 (11046+3)  FOUND!
------               11094 V + 6672 7/8 (11091+2)  FOUND!
------               11103 V + 6672 7/8 (11100+2)  FOUND!
------               11130 V + 5703 3/4 (11127+3)  FOUND!
------               11139 V + 6117 3/4 (11135+3)  FOUND!
------               10956 H + 6672 7/8 (10953+3)  FOUND!
------               10974 H + 6672 7/8 (10971+3)  FOUND!
------               11019 H + 6672 7/8 (11016+2)  FOUND!
------               11048 H + 6672 7/8 (11046+2)  FOUND!
------               11057 H + 6680 7/8 (11054+2)  FOUND!
------               11159 H - 5641 3/4 (11156+2)  FOUND!

500MHz searched and 15 signals found in only 68 seconds (auto pids
was disabled in this test)
Note the variety of the parameters (including one spectral
inverted signal).

Another example, find all MCPC transponders on hotbird:
  (results not pasted for brevity)
4100MHz searched and 82 signals found in only 55 seconds (!),
that is 74MHz/s and 0.67 s/signal
(*without* using any builtin or received table of transponders)

Amazing, but what about rescanning W3A with auto pids on?
  (pasted only one transponder)
------               11048 V + 6672 7/8 (11045+2)  FOUND!
         +------------+------------+------------+
         |    pid     | clear Mb/s | encr. Mb/s |
         +------------+------------+------------+
         |0000 (   0) |    0.007   |            |
         |0001 (   1) |    0.001   |            |
         |0010 (  16) |    0.001   |            |
         |0011 (  17) |    0.001   |            |
         |0012 (  18) |    0.001   |            |
         |0014 (  20) |    0.001   |            |
         |0020 (  32) |    0.007   |            |
         |0200 ( 512) |            |    9.874   |
         |1010 (4112) |            |    0.424   |
         |1020 (4128) |            |    0.423   |
         |1fc0 (8128) |            |    0.001   |
         |1ffe (8190) |            |    0.046   |
         +------------+------------+------------+
         |     TOTAL  |    0.021   |   10.769   |
         +------------+------------+------------+
we can see that there is a high quality video pid at 512 and
two audio pids at 4112 and 4128; there are encrypted, though.

Searching all 8192 pids in a transponder takes about one second
(no dependency on number of active pids or bit rate), but if you're
only interested in high bandwith pids (video and audio) one tenth of
a second is enough.

Now, how does it work? What do you need?
My setup is Skystar2 2.3p with mt312 frontend (vp310, exactly)
Requirements:

- auto symbol rate ability in the hardware (depends on the frontend)
- auto symbol rate ability in the driver (had to debug/improve mt312.c)
if not, you have to know the symbol rate with a good precision

- frequency offset ability in the hardware (depends on the frontend)
- frequency offset ability in the driver (had to improve mt312.c)
- frequency offset ability in the DVB API (had to create new ioctl)
if not, the frequency fine tuning is not available and the algorithm
has to be changed to explore nearby frequencies (at some cost of speed)

- auto FEC/inversion (frontends typically have this)
if not, you have to specify them manually

- full bandwidth ability (pid 8192) in the hardware (depends on
demultiplexer, skystar2 has it)
- full bandwidth ability (pid 8192) in the driver (skystar2.c has it)
if not, auto pid finding is not available

In conclusion, I attach the code of the tool and the patch I applied
to mt312.c and frontend.h (patch for DVB as in kernel 2.6.7).

The patch has a few small improvements easily acceptable for inclusion,
but there are two issues:
1) added a new ioctl (as other frontends may support the same
functionality, I don't think it should be very controversial)
2) brutally hacked the symbol_rate parameter; I use low values
(0-0xfff, well below symbol_rate_min) to ask for auto symbol rate;
I don't see an easy and elegant way to achieve abstraction from
hardware (this is very mt312 specific) without sacrifying
functionality (such as multi frequency ranges) or seriously extending
the API (set min and max symbol rate separately, at minimum).

All the parameters are hard coded ATM. Watch out for the 10750000
oscillator, you may want 10600000 there (for a universal LNB).

This is all under GPL.

Future plans: avoid patches, parse options, documentation, integrate
the pid finder with some existing table parser to group pids
belonging to the same program and detect anomalies (such as wrong
info from the broadcaster).

Comments, suggestions, successes, failures, ideas kindly welcome.
Have fun.

-- 
   Roberto Ragusa    mail at robertoragusa.it

Attachment: frontend.h.diff
Description: Binary data

Attachment: mt312.c.diff
Description: Binary data

Attachment: blindscan.c
Description: Binary data


Home | Main Index | Thread Index