docs/reference/gds-plugins/communications.md
Communication Plugins allow users to swap out the mechanism used to send and receive raw bytes between the GDS and an F Prime deployment. These plugins provide a customizable interface for connecting to various communication layers, such as TCP/IP sockets, serial ports (UART), or custom radios.
By subclassing BaseAdapter, developers can integrate GDS with mission-specific or non-standard hardware interfaces while maintaining compatibility with the rest of the GDS infrastructure.
The F Prime IpAdapter is an example of a communication plugin supporting tcp.
Communication is a SELECTION type plugin meaning only one communication plugin will run. It will be selected by the user.
The Communication Plugin is responsible for performing byte-level I/O between the GDS and the F Prime deployment. This includes:
This plugin runs in the communications process in the GDS.
read() or write() will delay the rest of the GDS.To create a custom communication plugin, subclass the BaseAdapter class and implement the read() and write() methods.
from fprime_gds.common.communication.adapters.base import BaseAdapter
from fprime_gds.plugin.definitions import gds_plugin
@gds_plugin(BaseAdapter)
class ExampleAdapter(BaseAdapter):
"""Example adapter that connects to a TCP socket."""
def __init__(self):
import socket
self.sock = socket.create_connection(("localhost", 50000))
def read(self) -> bytes:
"""Read raw bytes from the communication channel."""
return self.sock.recv(4096)
def write(self, frame: bytes):
"""Send raw bytes to the communication channel."""
self.sock.sendall(frame)
[!NOTE] These methods may be called frequently and must not block unnecessarily. Use non-blocking I/O or short timeouts to maintain system responsiveness.