My findings on raw DiSEqC 1.2 commands Written by BGonaSTICK. Intro G'day peeps. I've been fiddling about in my garden shed again, and have chucked together this 'rough and ready' guide to real-world DiSEqC 1.2 commands which you may find useful, especially if you're thinking of having a switch and a motor on the same setup, or just want to know how DiSEqC works. I couldn't find this on the 'Net when I was looking, so I hope it helps. I don't have the data for switches yet, or even know for sure if you can do the above. I'm still playing. I've pulled this data out of the SS2DiSeqC1.7 driver/plugin by Mibi, which I use to drive my Skystar2/Moteck SG2100 setup. Fortunately, you can access and edit the raw output commands to whatever you like and then forward them to the motor. Nice one Mibi. I entered in the various logical commands indicated, and copied the resultant raw commands into the tables below. After all the playing, my motor is as confused as I am, and my stored satellite positions are all shot to bits. My electricity bill also just went up by £20. Pretend you like this write-up - even if you're bored to tears. Spot the patterns and therefore the logic for yourself with the breakdown at the end of this write-up. If you can convert hexadecimal to decimal and visa versa, you're sorted. Use the scientific view in 'calc' in Windows if you like. If you've read the DiSEqC spec, then you know more than me. I'm purposely working backwards. It should also be noted that in the plugin, it has different options for motor 'type'. I have 'Moteck SG2100' selected. I suspect therefore that different settings may give different results. Excellent. There's nothing like having a standard is there? ...and this is nothing like having a standard. O.K. In no particular order then ... Goto position n Goto stored position 1 E0 31 6B 01 Goto stored position 2 E0 31 6B 02 Goto stored position 3 E0 31 6B 03 Goto stored position 4 E0 31 6B 04 Goto stored position 127 E0 31 6B 7F Note :- 127/7F is highest positively signed integer in one byte. Halt motor driving Halt Motor E0 31 60 Goto x.x Note :- ‘Goto angular position’ is same as ‘Goto x.x’. The figures given here are the actual figures saved in my setup, and obviously not the theoretical positions. Yes, I know they're rubbish, but they work for me. Goto Astra1 (Goto angular position 19.5E) E0 31 6E E1 38 Goto Eutelsat W2 (Goto angular position 15.8E) E0 31 6E E0 FD Goto Hotbird (Goto angular position 12.5E) E0 31 6E E0 C8 Goto Sirius (Goto angular position 3.4E) E0 31 6E E0 36 Goto Thor (Goto angular position 2.2W) E0 31 6E 00 23 Goto Nilesat (Goto angular position 9.3W) E0 31 6E 00 95 Goto Hispasat (Goto angular position 34.3W) E0 31 6E 02 25 Goto x.x - Playing about Based on the above results, I tried the following commands to extract the logic of how the raw command was built from the initial request. Goto 0.0 E E0 31 6E 00 00 Goto 0.0 W E0 31 6E 00 00 Goto 0.1 E E0 31 6E E0 02 Goto 0.1 W E0 31 6E 00 02 Goto 0.2 E E0 31 6E E0 03 Goto 0.2 W E0 31 6E 00 03 Goto 0.3 E E0 31 6E E0 05 Goto 0.3 W E0 31 6E 00 05 Goto 0.4 E E0 31 6E E0 06 Goto 0.4 W E0 31 6E 00 06 Goto 0.5 E E0 31 6E E0 08 Goto 0.5 W E0 31 6E 00 08 Goto 0.6 E E0 31 6E E0 0A Goto 0.6 W E0 31 6E 00 0A Goto 0.7 E E0 31 6E E0 0B Goto 0.7 W E0 31 6E 00 0B Goto 0.8 E E0 31 6E E0 0D Goto 0.8 W E0 31 6E 00 0D Goto 0.9 E E0 31 6E E0 0E Goto 0.9 W E0 31 6E 00 0E Goto 1.0 E E0 31 6E E0 10 Goto 1.0 W E0 31 6E 00 10 Goto 2.0 E E0 31 6E E0 20 Goto 2.0 W E0 31 6E 00 20 Goto 3.0 E E0 31 6E E0 30 Goto 3.0 W E0 31 6E 00 30 Goto 4.0 E E0 31 6E E0 40 Goto 4.0 W E0 31 6E 00 40 Goto 5.0 E E0 31 6E E0 50 Goto 5.0 W E0 31 6E 00 50 Goto 10.0 E E0 31 6E E0 A0 Goto 10.0 W E0 31 6E 00 A0 Goto 15.0 E E0 31 6E E0 F0 Goto 15.0 W E0 31 6E 00 F0 Goto 16.0 E E0 31 6E E1 00 Goto 16.0 W E0 31 6E 01 00 Drive motor n steps Drive motor east zero steps E0 31 68 00 Drive motor west zero steps E0 31 69 00 Drive motor east one step E0 31 68 FF Drive motor west one step E0 31 69 FF Drive motor east two steps E0 31 68 FE Drive motor west two steps E0 31 69 FE Drive motor east six steps E0 31 68 FA Drive motor west six steps E0 31 69 FA Drive motor east seven steps E0 31 68 F9 Drive motor west seven steps E0 31 69 F9 Drive motor east seventeen steps E0 31 68 EF Drive motor west seventeen steps E0 31 69 EF Drive motor n seconds Drive motor east zero seconds E0 31 68 00 Drive motor west zero seconds E0 31 69 00 Drive motor east one second E0 31 68 01 Drive motor west one second E0 31 69 01 Drive motor east two seconds E0 31 68 02 Drive motor west two seconds E0 31 69 02 Drive motor east nine seconds E0 31 68 09 Drive motor west nine seconds E0 31 69 09 Drive motor east ten seconds E0 31 68 0A Drive motor west ten seconds E0 31 69 0A Drive motor east sixteen seconds E0 31 68 10 Drive motor west sixteen seconds E0 31 69 10 Store satellite position in motor table Store in position 1 E0 31 6A 01 Store in position 9 E0 31 6A 09 Store in position 10 E0 31 6A 0A Store in position 15 E0 31 6A 0F Store in position 16 E0 31 6A 10 Store in position 127 E0 31 6A 7F Conclusion/Wrap-up From all this rubbish, I conclude the following. The first two bytes are fixed at 'E0 31'h Not sure what the 'E0' byte is there for (maybe a high-order differentiation byte for future expansion), but I think that the '31'h byte is the address of the motor, and is fixed for all DiSEqC 1.2 motors. I also think at this stage that the equivalent address byte for a DiSEqC 1.0 switch would be '15'h. Thus you could send one instruction to a switch 'Goto LNB 1' and another to a motor (on the same coax) 'Goto stored position 2' without impacting the other device. Onto the detailed analysis. The third byte is the op-code. This tells the device what to do. '6B'h is 'Goto stored position' with the stored position number as a 1 byte parameter. '60'h is 'Stop driving the motor'. No parameters required. '6E'h is 'Goto angular position'. This has effectively three parameters. The first is a half byte direction indicator, value 'E'h for east, and '0'h for west. The next byte is the integer value of the degrees to turn (relative to due south, not the current motor position). This would equate to the '19' in 19.2 degrees E. The last half byte is an approximation of the fraction of the previous degree (i.e. the .2), and can be calculated from the large chart above. As there are only ten decimal fractions of a degree in the standard x.x notation (e.g. 19.2 E) and sixteen hexadecimal fractions to play with, you can see that '.0'd is represented as '0'h, and '.9'd is effectively represented as 'E'h or '14'd (i.e. 14/16ths and not 9/10ths). Just refer to the table created above between Goto 0.0 and Goto 0.9 to look-up the fractions of a degree. To check your understanding of the above, see if you can calculate the real satellite positions in the 'Goto x.x' table above, by referring to the 'Goto x.x - Playing about' table. '68'h is 'Drive motor east'. This has a one-byte parameter of either the number of steps, or number of seconds to drive. Ascending from '00'h means seconds, and descending from 'FF'h means steps. I don't know the relationship between seconds and steps. I'm stupid! '69'h is 'Drive motor west'. This likewise has a one-byte parameter of either the number of steps, or number of seconds to drive. Ascending from '00'h means seconds, and descending from 'FF'h means steps. Hopefully they won't cross over in the middle! '6A'h is 'Store current angular position in motor sat-table'. Parameter is a one-byte table index, i.e. table entry 01, 02 etc. This will overwrite the settings in the motor satellite table as it was delivered from the factory. There may also be a read-only backup table in the motor, which is restored to the writeable memory upon performing a 'factory reset' of the motor. I'll update this with switch information if and when I find it.