FreeVario Communication Interface

The serial port of the FreeVario communicates via a driver that is using the XCsoar driver programming interface. The interface is communicating at a a baud rate of 115200.

We are using this interface to send data to XCSoar and receive data from XCSoar to the vario. The vario can not be used standalone and needs input from XCSoar (or another system) using NMEA styled messages.

The FreeVario is a typ of „external Display“ with some additions features like, changing the MC, QNH and bugs. All the information / data that is shown at the display is provided by XCSoar. The sound is generated by the FreeVario unit by using the given values of XCSoar. 

On boot of the FreeVario system, a NMEA message is send to XCSoar (or the system on the „other“ side) that both unity are in sync. A MC of 0.5 is set by the FreeVario using the commands described below and the default XCSoar QHN is set to 1013 and bugs to 0 percentage on first boot.

Because this value is set by the NMEA serial interface to XCSoar and looped back the the FreeVario by getting all updates back via NMEA, the system can check if the values are set and watch if the units are in sync.

Now when the value is changed by XCSoar, the value is also send to the FreeVario system, will be saved and showed on the display. If a value is changed by the FreeVario system this is also done by a NMEA message.

PTT and mute function
From firmware V.1.1.1 the FreeVario has a mute function when using the radio. The mute function of the FreeVario requires at least the image of FreeVario from 20295 on the OpenVario. In addition, at least firmware V.1.1.1 must be installed on the sound board as well as on the display board. If you are using the sound board with the 3-pin connector on the back, but without the diode D1, a small change has to be made here. Please write me about this by email (

Commands on the NMEA interface

We are using messages styled with the name syntax:

$PFV, [command] , [subcommand or value] , [checksum]

We implemented this commands in the XCSoar driver to be used by the FreeVario project:

Writing data to XCSoar:

  • $PFV,B,S,[0 – 50] – set Bugs to percent by capacity 0 – 50
  • $PFV,M,S,[MC value as double] – set MC External to defined value
  • $PFV,M,U – set MC external up by 0.1 m/s
  • $PFV,M,D – set MC external down by 0.1 m/s
  • $PFV,F,C – set Vario FlightMode to Circle
  • $PFV,F,S – set Vario SpeedToFly
  • $PFV,Q,S,[QHN value as double] – set QNH to defined value
  • $PFV,S,S,[0 bzw. 1 as Integer] – activate or deactivate mute function

Receive data from XCSoar:

$PFV,HIG,[value as double]
      • get barometric hight if not available GPS hight is provided. If this is not available too, value is 0.0 m
$PFV,HAG,[value as double]
      • get hight above ground in m if available
$PFV,TEM,[value as double]
      • get temperature in degree Celsius if available
$PFV,TAS,[value as double]
      • get true airspeed (TAS) in km/h if available
$PFV,GRS,[value as double]
      • get ground airspeed in km/h if available. If value is not valid -1 is returned
$PFV,STF,[value as double]
      • get speed to fly (STF) in km/h, if available
$PFV,MOD,[C oder S]
      • get actual mode in XCSoar C = cycling , s = speed to fly
$PFV,VAA,[value as double]
      • get vario average last 30 seconds in m/s
$PFV,VAR,[value as double]
      • current climb in m/s
$PFV,VAN,[value as double]
      • current net climb in m/s
$PFV,AWD,[value as double]
      • average relative wind direction of the last 30 seconds in degrees
$PFV,CWD,[value as double]
      • current, relative wind direction in degrees
$PFV,AWS,[value as double]
      • average wind speed of the last 30 seconds in m/s
$PFV,CWS,[value as double]
      • current wind speed in m/s
$PFV,MCE,[value as double]
      • get the external MC used by external devices in XCSoar
$PFV,MCI,[value as double]
      • provides the internal MC used in XCSoar
$PFV,QNH,[value as double]
      • returns the QNH used in XCSoar
$PFV,ATT,[value as integer]
      • get the value of which damping level is active for STF
$PFV,MUT,[value as integer]
    • get the value, if mute function is activ or inactiv