RC
RoboControl Documentation

Transport Layer API

Communication abstraction for serial, network, and other transport mechanisms.

ITransport Interface

Base interface for all transport implementations.

Copy
public interface ITransport : IDisposable
{
    ConnectionState State { get; }
    TransportStatistics Statistics { get; }
    
    Task ConnectAsync(CancellationToken ct = default);
    Task DisconnectAsync();
    Task SendAsync(IMessage message, CancellationToken ct = default);
    
    event EventHandler MessageReceived;
    event EventHandler ConnectionStateChanged;
}

Serial Transport

Communicate with robots over COM ports at high baudrates.

Copy
var config = new SerialTransportConfig
{
    PortName = "COM3",
    BaudRate = 115200,
    DataBits = 8,
    StopBits = StopBits.One
};

using var transport = new SerialTransport(config);
await transport.ConnectAsync();

transport.MessageReceived += (sender, args) =>
{
    Console.WriteLine($"Received: {args.Message}");
};

await transport.SendAsync(message);

UDP Transport

Network-based communication for wireless robots.

Copy
var config = new UdpTransportConfig
{
    RemoteAddress = "192.168.1.100",
    RemotePort = 5000,
    LocalPort = 5001
};

using var transport = new UdpTransport(config);
await transport.ConnectAsync();

Mock Transport

Simulated transport for testing without hardware.

Copy
var transport = new MockTransport();
await transport.ConnectAsync();

// Simulate receiving messages
transport.InjectMessage(simulatedMessage);

Message Protocol

Binary protocol for high-speed telemetry (100+ Hz).

Copy
// Message structure
var message = new SystemStatusMessage
{
    Timestamp = DateTime.UtcNow,
    Uptime = TimeSpan.FromSeconds(elapsed),
    Armed = true,
    BatteryVoltage = 13.2
};

var encoded = MessageEncoder.Encode(message);
await transport.SendAsync(encoded);

// Receive and decode
var decoder = new MessageDecoder();
decoder.OnMessageDecoded += (msg) =>
{
    if (msg is SystemStatusMessage status)
    {
        Console.WriteLine($"Battery: {status.BatteryVoltage}V");
    }
};