Skip to content

Tuning Tool

tune.py is the primary user-facing tool for operating the SkyWalker-1 as a satellite receiver. It handles the complete signal chain: powering the demodulator, configuring LNB voltage and tone, sending DiSEqC switch commands, tuning to a transponder, monitoring signal quality, and capturing MPEG-2 transport stream data.

Terminal window
pip install pyusb
SubcommandPurpose
statusShow device config, firmware version, and signal info
tuneTune to a transponder frequency
streamCapture MPEG-2 transport stream data
diseqcSend DiSEqC switch commands
lnbControl LNB voltage and 22 kHz tone

Running with no subcommand defaults to status.

FlagDescription
-v, --verboseShow raw USB control transfer traffic
--jsonOutput machine-readable JSON (where supported)

Displays the current device state: firmware version, configuration status flags, signal lock, and SNR.

Terminal window
sudo python3 tools/tune.py status
Genpix SkyWalker-1 Status
==================================================
USB: Bus 1 Addr 12 (VID 0x09C0, PID 0x0203)
FW: 2.06.4 (built 2007-07-13)
Config: 0x07
[ ON] 8PSK Started
[ ON] BCM4500 FW Loaded
[ ON] LNB Power On
[off] DVB Mode
[off] 22 kHz Tone
[off] 18V Selected
[off] DC Tuned
[off] Armed (streaming)
Signal Lock: LOCKED
SNR: 8.2 dB (raw 0x0823)
Quality: [################------------------------] 42.3%

Use --json for programmatic access to all fields.


The 8-step tuning sequence: check status, boot demodulator, enable LNB power, set voltage (polarization), set extra voltage, set 22 kHz tone (band), send TUNE_8PSK command, wait for signal lock.

ArgumentDescription
FREQTransponder downlink frequency in MHz (e.g., 12520)
SRSymbol rate in ksps (e.g., 27500)
FlagDescription
--pol H/V/L/RPolarization: H (horizontal/18V), V (vertical/13V), L (left circular/18V), R (right circular/13V)
--band low/highLNB band: low (tone off, 9750 MHz LO) or high (tone on, 10600 MHz LO)
--lnb-lo MHZOverride LNB local oscillator frequency (default: 9750 low, 10600 high)
--mod TYPEModulation type (default: qpsk)
--fec RATEFEC rate (default: auto)
--timeout SECONDSSignal lock timeout (default: 10)
--extra-voltEnable +1V LNB voltage boost for long cables
--jsonOutput JSON result
NameDescriptionFEC Group
qpskDVB-S QPSKdvbs
turbo-qpskTurbo-coded QPSKturbo
turbo-8pskTurbo-coded 8PSKturbo
turbo-16qamTurbo-coded 16QAMturbo-16qam
dcii-comboDigicipher II Combodcii
dcii-iDigicipher II I-streamdcii
dcii-qDigicipher II Q-streamdcii
dcii-oqpskDigicipher II Offset QPSKdcii
dssDSS QPSKdvbs
bpskDVB BPSKdvbs
GroupAvailable Rates
dvbs1/2, 2/3, 3/4, 5/6, 7/8, auto, none
turbo1/2, 2/3, 3/4, 5/6, auto
turbo-16qam3/4, auto
dcii1/2, 2/3, 6/7, 3/4, 5/11, 1/2+, 2/3+, 6/7+, 3/4+, auto
Standard DVB-S QPSK, Ku-band high
sudo python3 tools/tune.py tune 12520 27500 --pol H --band high
DVB-S with explicit FEC
sudo python3 tools/tune.py tune 11836 27500 --pol V --band low --fec 3/4
C-band with custom LNB LO
sudo python3 tools/tune.py tune 3960 26667 --pol V --lnb-lo 5150
Tuning SkyWalker-1
==================================================
Downlink: 12520 MHz
LNB LO: 10600 MHz
IF Frequency: 1920.0 MHz (1920000 kHz)
Symbol Rate: 27500 ksps (27500000 sps)
Modulation: DVB-S QPSK (index 0)
FEC: auto (index 5)
Polarization: Horizontal (18V)
Band: high (22kHz on)
[1/8] Config status: 0x07
[2/8] Demodulator already running
[3/8] LNB power already on
[4/8] Setting LNB voltage: 18V
[5/8] Extra voltage: off
[6/8] 22 kHz tone: ON
[7/8] Sending TUNE_8PSK...
[8/8] Waiting for signal lock (timeout 10s)...
...
LOCKED
SNR: 8.2 dB (raw 0x0823)
Quality: [################------------------------] 42.3%

Captures MPEG-2 transport stream data from EP2 bulk endpoint after the device is tuned and locked. Requires a prior successful tune command (signal must be locked).

Capture to file for 60 seconds
sudo python3 tools/tune.py stream -o capture.ts --duration 60
Pipe directly to VLC
sudo python3 tools/tune.py stream --stdout | vlc -
Pipe to ffmpeg for recording
sudo python3 tools/tune.py stream --stdout | ffmpeg -i pipe: -c copy output.mp4
FlagDescription
-o, --output FILEWrite TS data to file
--stdoutWrite TS data to stdout (for piping)
--duration SECONDSCapture duration (default: until Ctrl-C)

The stream status is written to stderr when using --stdout, so it does not contaminate the TS data pipe.


Send DiSEqC 1.0 port selection, mini-DiSEqC tone bursts, or raw DiSEqC messages.

Select DiSEqC 1.0 port 1
sudo python3 tools/tune.py diseqc --port 1
Send tone burst A
sudo python3 tools/tune.py diseqc --tone-burst A
Send raw DiSEqC message
sudo python3 tools/tune.py diseqc --raw E0 10 38 F0
FlagDescription
--port 1-4DiSEqC 1.0 committed switch port
--tone-burst A/BMini-DiSEqC tone burst
--raw HH HH ...Raw DiSEqC bytes in hex (3—6 bytes)

For details on the DiSEqC signaling implementation, see DiSEqC Protocol.


Direct control of LNB voltage, 22 kHz tone, and power supply. Running with no flags shows the current LNB state.

Show LNB status
sudo python3 tools/tune.py lnb
Set voltage and tone
sudo python3 tools/tune.py lnb --voltage 18 --tone on
Power cycle the LNB
sudo python3 tools/tune.py lnb --power off
sudo python3 tools/tune.py lnb --power on
FlagDescription
--voltage 13/18LNB voltage (13V = vertical, 18V = horizontal)
--tone on/off22 kHz tone (on = high band, off = low band)
--extra-voltEnable +1V boost (13V becomes 14V, 18V becomes 19V)
--power on/offLNB power supply on/off

MetricSourceDescription
SNRGET_SIGNAL_STRENGTH (0x87)Signal-to-noise ratio in dB, read as 16-bit value (dBu * 256 units)
LockGET_SIGNAL_LOCK (0x90)BCM4500 register 0xA4, bit 5 indicates signal lock
Quality %ComputedSNR scaled: snr_raw * 17 maps to 0—100%, saturating at SNR >= 0x0F00

For details on the signal monitoring protocol, see Signal Monitoring.