Skip to content
F5OEO edited this page Mar 18, 2024 · 38 revisions

PlutoDVB2 Firmware (2023)

Description

PlutoDVB2 firmware is a dvb dedicated firmware. It uses dvbs2 modulator in fpga (https://github.com/OpenResearchInstitute/dvb_fpga/tree/master)

It can handle transport stream for video and also ip (dvb-gse).

It could also be used as a standard pluto and can be used by third party software like gnuradio, sdrconsole...with a PTT function on gpio.

Download beta firmware

You can download the pluto.frm at https://drive.google.com/drive/folders/10O82NgRc98lB2WofONvFOjZutOJEtm77 Note that it is still a beta version and mainly for experimenters.

Feedbacks are welcome on https://groups.io/g/plutodvb

Version of firmware

Each new firmware is tagged with a git commit. Name is created with :

  • Name : PlutoDVB2
  • Current tag
  • Number of commits since the current tag
  • Short version of commit

For example, PlutoDVB2-0.3-11-g1581cc1.

You can check which commit is referenced to by reading commits history at refere to the firmware built

Hardware

Pluto Rev B and D are supported. PlutoPlus and AntSDR soon.

A recommended setup is to use Pluto over ethernet instead of usb.

Several recent usb to ethernet adapters has successfully been tested :

For easy GSE operation, a minitiouner plugged on the ethernet hub adapter is recommanded.

Extensions

  • 2 CPUs enable by default
  • Frequency extension Tx/Rx : 46.875Mhz-6Ghz

Limitations

Roll-off is fixed by design : 0.20

SymbolRate beetween 20KS and 4MS.

Some special features

In dvbs2, modulation parameters could be changed regularly on bbframe granularity. Several strategies could be used to use this. A special mode called variable fec is able to change fec depending on input stream. In this mode null padding (pid 8191) is removed, thus some timing could be wrong with transport stream analyzers (PCR). However, it should be handled by video players (vlc, ffplay).

Main advantage is that you don't waste power with padding when the input stream is simple to encode (pattern for example) : it is used to increase correction errors which then should be decoded easier by receivers in difficult propagation condition or small dish on qo-100.

MQTT Quick reference

General

Mqtt messages are ordered in 2 main sections :

  1. cmd : where third party gives commands to pluto
  2. dt : where third party read the status of pluto

subtree is constructed with /pluto/$call

Example of status if call is F5OEO : dt/pluto/F5OEO/ this could be called the main command root.

All references are given above relative to this tree.

Note that call should be initialized once by sending a cmd/pluto/system/call with the call, and you should reset the device.

Setup commands

A first command should be perform before system could accept other commands : could be run only once ! This is the only command which not follow the general subtree. A reboot is required after that.

  • cmd/pluto/call : Set your callsign which will become the root of cmd and status
  • system/longmynd : {on,off} Launch longmynd process if a minitiouner us available on usb of pluto
  • system/reboot : {anything} Reboot the system

General commands

  • tx/frequency : Frequency in hertz {47Mhz..6000Mhz}
  • tx/gain : Attenuation gain in db{-80..0} by step of 0.25
  • tx/mute : Start/stop tx (and command PTT GPIO) : {0,1}

Stream commands

Stream mode

tx/stream/mode : choose stream mode of tx

  1. test : generate a tone
  2. pass : (default mode at reboot) : passtrough mode, pluto could be used with third party software (gnuradio ...)
  3. dvbs2-ts : dvbs2 with transport stream
  4. dvbs2-gse : dvbs2 with generic encapsulation (ip over dvb)
  5. dvbs : dvbs (only ts input)

Modulation setting (for dvbs2 modes)

  • tx/dvbs2/fec : set FEC {1/4,1/3,2/5,3/5,4/5,8/9,9/10}
  • tx/dvbs2/constel : set constellation {qpsk,8psk,16apsk,32apsk}
  • tx/dvbs2/frame : set frame type {short,long}
  • tx/dvbs2/pilots : indicates pilots {0,1}
  • tx/dvbs2/sr : set symbole rate {25000..4000000}
  • tx/dvbs2/digitalgain : fine tuning of gain (db) using constellation mapping {-20..3} step is 0.01db (only qpsk compatible)
  • tx/dvbs2/firfilter : {0,1} : 0 is 0.20 rolloff, 1 is 0.15 Rollof (output filtering mode)

Special functions (for dvbs2 modes)

  • tx/dvbs2/fecmode : {fixed,variable} FEC could be static (standard method) or could be calculated regarding the input stream. This dynamic FEC is at least the fec you set with tx/dvbs2/fec. In order to have a goid dynamic range, set fec to 1/4.
  • tx/dvbs2/fecrange {0..11} : When in variable, this constraint the max fec : initial fec+fecrange
  • tx/dvbs2/gainvariable : Dynamic gain regarding to fec {0,1}

Transport stream source (for dvbs2-s mode)

  • tx/dvbs2/tssourcemode : Source of transport stream {0 = udp, 1 = file, 2 = internal patern}
  • tx/dvbs2/tssourceaddress : adress:port if tssourcemode=udp
  • tx/dvbs2/tssourcefile : file path if tssourcemode=file. It could be usefull to set up a nfs sharing file on your PC

Stream status

Complete status is reported every second. Most of the status is reflects the device tree commands, but there are other

  • system/version : version of the current firmware. For example 0.3 is a tag version. 0.3-1-gdb8 means one commit after the tag 0.3 (intermediate version) and the actual commit is gdb8.
  • system/device : description of the pluto revision
  • tx/dvbs2/queue : Number of bbframes currently in the buffer. If this number is increasing regularly, it means input stream is too high.
  • tx/dvbs2/ts/bitrate : Theoretical bitrate of the input stream calculated from SR and FEC
  • tx/dvbs2/ts/fecvariable : Current FEC when mode is variable fec
  • tx/dvbs2/ts/ccerror : Report PID which contain latest cc error

Network (usefull for GSE)

  • ip/tunadress : ip address of your source (hope to be unique)
  • ip/iptables : send ip tables commands
  • ip/route : send route commands (example : add -net 44.0.0.0/24 gw 44.0.0.1)

Spectrum

A live spectrum is available through a websocket and a webpage is available.

  • rx/stream/mode : webfft to enable the spectrum
  • rx/webfft/frequency : set the central rx frequency
  • rx/webfft/span : set desired span. The result span could be greater than that.
  • rx/webfft/average : number of averaging (smooth spectrum but less responsive)
  • rx/webfft/rangemin : set the min range
  • rx/webfft/rangemax : set the max range
  • rx/webfft/autoscale : try to autoscale depending on the current spectrum

Minitiouner control with longmynd (https://github.com/F5OEO/longmynd)

By default topic should be post under cmd/longmynd until an $ID is defined : cmd/longmynd/$ID

  • sr : Symbol rate in KS
  • frequency : Tuning frequency in khz
  • swport : RF input port : 0 or 1
  • tsip : ip to output. Port is always 1234. Output format is transport stream or bbframe depending on received signal
  • polar : LNB polarisation voltage : {h,v,n} horizontal, vertical, no voltage

Helpers/GUI

This firmware is focused on a robust dvbs2 kernel. Human interface is out of scope, but interface to kernel should be easy with various way to implement. Here is some known helpers/gui from contributors (thanks them) :

Support

If you want to support the project and help me replacing pluto burnt during development , feel free to make a donation : https://www.paypal.me/f5oeo