On Wednesday 09 Nov 2005 01:18, Andrew de Quincey wrote: > > > I also think that simple Diseqc strings to manipulate a switch aren't > > > sufficient... and > > > that this isn't the place to put them. > > Come to think of it, what things can you think of that require more than > the simple strings? > > I can think of one from the doc you linked to: optimisation of the > positioning commands - e.g. if the dish is already pointing at 3 steps E, > and needs to move to 5 steps E, then it would better to issue a DRIVEE(2) > command instead of GOTO0, DRIVEE(5). I assume not everything supports the > "goto angular position" command. How about this idea: First: add a new command 'P' to the diseqc.conf commands. When encountered, this instructs libdvb2 to do whatever is necessary to position the dish. It currently would take no parameters. Then you define diseqc settings for the sources like: S-19.2E 11700 V 9750 t v W15 [E0 10 38 F0] P W15 A W15 t S-19.2E 99999 V 10600 t v W15 [E0 10 38 F1] P W15 A W15 T S-19.2E 11700 H 9750 t V W15 [E0 10 38 F2] P W15 A W15 t S-19.2E 99999 H 10600 t V W15 [E0 10 38 F3] P W15 A W15 T The sequence before the P command could be doing anything - e.g. controlling your network of multiple switches using diseqc/tone/voltage switching etc. You can also issue commands AFTER the positioning to perform further switch/LNB setup. adapters.conf would read something like: DVBS0.0 S-5E S-7E S-19.2E DVBS1.0 S-5E S-7E S-19.2E So that defines two DVBS cards, both attached to dishes that can receive the same satellite sources S-5E, S-7E, and S-19.2E. libdvb2 doesn't know/care at this point whether they're positional dishes, or multiswitches, or a combination of the two. That is all handled by whichever entry matches in diseqc.conf. Therefore the tune() function can work out which cards it is _possible_ to receive a signal on. The satellite positional information is extracted from the S-19.2E entry in sources.conf. I can't give an example as it doesn't contain this inrformation - yet :) Since libdvb2 is doing all the tuning, it knows which sources the cards are currently tuned to. Hence it knows their current rotational position. So the tune() command can make a choice based on which card is (a) unused, and (b) currently pointing in the closest direction. Then it executes the defined diseqc command (if necessary), with the positional commands when necessary. 'P' can do nothing if the dish already points in the right direction. This would seem to cover the positional issues you highlighted. The big unknown is the implementation of the 'P' command. It'll likely require further configuration somewhere (and obviously implementation!). I'll need to read up more about this area. I still need to extend diseqc.conf to handle non-DVBS sources for your multi-mode tuner example, but that should be quite easy.