Separating QGC from Mavlink

This may seem counterintuitive, but is there any way to use QGC without the Mavlink message structure? In other words, can I use the interface to represent vehicle control, but input the vehicle information not as a Mavlink message? I would like to be able to connect via UDP and communicate with QGC via a different form of communication (e.g. protobuf).

If this is possible, any starting advice would be appreciated. Mavlink is obviously a huge part of QGC, and I’m having trouble separating the two.

I think, it is possible but it might require major code changes.
Look into the following classes as starting point.

  1. UDPLink: This is the class which receives the bytes on UDP socket.
  2. LinkManager: This is the class which connect UDPLink to MAVLinkProtocol. Upon receive data on socket, the data is passed to MAVLinkProtocol for MAVLink related processing.
  3. MAVLinkProtocol: receiveBytes slots of this class process the raw bytes received on the link. Upon receiving a valid MAVLink message it inform the Vehicle class and all other classes about the newly received message.
  4. Vehicle: The _mavlinkMessageReceived method process the mavlink message and updates the Facts.

Probably you need to change the MAVLinkProtocol and Vehicle class for your required changes.
Hope this helps.


some places are not as neet. For example as far as I know, mission wp objects themselves contains info about which mavlink mission they represent. I think this is because depending on the mission (wp vs takeoff forexample) certain visuals changes.

you might want to allow only certain missions, and upload them according to specifications you want.