|
From: Zoilo G. <zo...@xs...> - 2007-05-06 21:06:07
|
Nico Sabbi wrote: > Nico Sabbi wrote: >> Zoilo Gomez wrote: >> >>>>> The Diseqc-specs at >>>>> http://www.eutelsat.com/satellites/pdf/Diseqc/Reference%20docs/bus_spec.pdf >>>>> (table on page 13) confirm that dvbtune is in fact sending the >>>>> wrong command. >>>>> >>>>> With a patched dvbtune (pol-bit and band-bit both inverted) it >>>>> works OK, and is also according to the Eutelsat specs. >>>>> >>> >>> I have attached a patch for you. >>> >>> The problem is only in dvbtune (version 0.5); you may not have been >>> using dvbtune (dvbtools); dvbscan and szap (linuxtv-dvb-apps) do not >>> suffer from this problem. >>> >>> Z. >>> >>> >>> ------------------------------------------------------------------------ >>> >>> >>> diff -Naur dvbtune-0.5.orig/tune.c dvbtune-0.5/tune.c >>> --- dvbtune-0.5.orig/tune.c 2004-02-06 15:00:36.000000000 +0100 >>> +++ dvbtune-0.5/tune.c 2007-04-30 21:22:53.000000000 +0200 >>> @@ -203,7 +203,7 @@ >>> * bits are: option, position, polarizaion, band >>> */ >>> cmd.cmd.msg[3] = >>> - 0xf0 | (((sat_no * 4) & 0x0f) | (hi_lo ? 1 : 0) | (pol ? 0 : >>> 2)); >>> + 0xf0 | (((sat_no * 4) & 0x0f) | (hi_lo ? 0 : 1) | (pol ? 2 : >>> 0)); >>> >>> diseqc_send_msg(secfd, pol, >>> &cmd, hi_lo, >> >> > > > I disagree with your changes: > according to the specs that you linked the fields are: > *switch-number > *switch option > *satellite position > *polarization > *frequency_is_in_hi_band > *bytecode > > > 1 A A V Lo F0 > 2 A A V Hi F1 > 3 A A H Lo F2 > 4 A A H Hi F3 > 5 A B V Lo F4 > 6 A B V Hi F5 > 7 A B H Lo F6 > 8 A B H Hi F7 > 9 B A V Lo F8 > 10 B A V Hi F9 > 11 B A H Lo FA > 12 B A H Hi FB > 13 B B V Lo FC > 14 B B V Hi FD > 15 B B H Lo FE > 16 B B H Hi FF > > assuming that in the code "pol" stands for "pol_is_vertical" and that > "hi_lo" stands for "hi_band" ( frequency above SLOF) and counting bits > from 8..1 > - the last bit must be set to 1 when hi_band is 1 > - the forelast bit (0x2) must be set when the polarization is > horizontal (this polv is 0). > > Please, explain why you believe that the current code is incorrect Not so much a matter of believe, but of results. My switch was not working, and selecting the wrong input. Hence I looked into the source, put some printfs and found that the DiSEqC command being sent was incorrect, i.e. different from the table above. So I changed the code, then it was working correctly. Perhaps it would be better to change the code in the calling function; your opinion that (hi_lo==1) means high band seems logical, but in that case the value being passed to the function is wrong. (pol==1) meaning "vertical" seems somewhat more ambiguous to me, perhaps a better name would be "vpol" (in which case however the calling function is sending the wrong value, inverted) or hpol (in which case it's OK). Z. |