Params ex-server
If you implement a server (autopilot or simulator), you can use IParamsServerEx for high-level parameter management with metadata, type-safe handling, and reactive updates.
First, register the params service during server device build:
var serverDevice = ServerDevice.Create(
new MavlinkIdentity(config.SystemId, config.ComponentId),
core,
builder =>
{
// register other services...
// IStatusTextServer has to be registered as well
config.RegisterStatus();
// Register base params service first
builder.RegisterParams();
// Then register ex-version with parameter descriptions
var paramDescriptions = new List<IMavParamTypeMetadata>
{
new MavParamTypeMetadata("BARO_PRIMARY", MavParamType.MavParamTypeUint8)
{
DefaultValue = new MavParamValue((byte)0),
MinValue = new MavParamValue((byte)0),
MaxValue = new MavParamValue((byte)2),
ShortDesc = "Primary barometer selection"
},
new MavParamTypeMetadata("WPNAV_SPEED", MavParamType.MavParamTypeInt32)
{
DefaultValue = new MavParamValue(500),
MinValue = new MavParamValue(10),
MaxValue = new MavParamValue(2000),
}
};
builder.RegisterParamsEx(paramDescriptions, new MavParamCStyleEncoding());
});
As you can see, some parameter metadata must be provided during server registration. You can read more about metadata here.
After building, you can get the service and work with parameters:
var paramsEx = serverDevice.GetParamsEx();
// Get parameter value
var value = paramsEx["BARO_PRIMARY"];
Console.WriteLine($"Value: {value}");
// Set parameter value
paramsEx["BARO_PRIMARY"] = new MavParamValue((byte)1);
// Subscribe to all parameter changes
using var allChanges = paramsEx.OnUpdated.Subscribe(evt =>
{
Console.WriteLine($"Parameter {evt.Metadata.Name} changed from {evt.OldValue} to {evt.NewValue}");
});
// Subscribe to specific parameter changes
using var specificChange = paramsEx.OnChange("BARO_PRIMARY").Subscribe(evt =>
{
Console.WriteLine($"BARO_PRIMARY changed to {evt.NewValue}");
});
You can also set up reactive callbacks for specific parameter types:
// React to float parameter changes
await paramsEx.OnR32(
myFloatParam,
disposeCancel,
logger,
async (value, firstChange, cancel) =>
{
if (firstChange)
{
Console.WriteLine($"Initial value: {value}");
}
else
{
Console.WriteLine($"Parameter changed to: {value}");
// Apply the new value to your system...
}
});
// React to uint8 parameter as boolean
await paramsEx.OnU8Bool(
myBoolParam,
disposeCancel,
logger,
async (value, firstChange, cancel) =>
{
Console.WriteLine($"Boolean parameter: {value}");
// Apply the boolean value...
});
// Command-style parameter (triggers action when changed from 0 to non-zero)
paramsEx.OnU8Command(
myCommandParam,
disposeCancel,
logger,
async (cancel) =>
{
Console.WriteLine("Command triggered!");
// Execute command action...
});
IParamsServerEx (source)
Represents a high-level parameter server with metadata support, type-safe handling, and reactive updates.
Property | Type | Description |
|---|
OnError
| Observable<Exception>
| Gets the observable sequence of exceptions that occur in the source sequence. |
OnUpdated
| Observable<ParamChangedEvent>
| Gets an observable sequence of ParamChangedEvent events that represents updates to the property. |
AllParamsList
| IReadOnlyList<IMavParamTypeMetadata>
| List of all parameter metadata. |
AllParamsDict
| IReadOnlyDictionary<string,(ushort,IMavParamTypeMetadata)>
| Dictionary of parameter metadata by name. |
Indexer | Type | Description |
|---|
this[string name]
| MavParamValue
| Gets or sets parameter value by name. |
this[IMavParamTypeMetadata param]
| MavParamValue
| Gets or sets parameter value by metadata. |
Method | Return Type | Description |
|---|
OnChange(string name)
| Observable<ParamChangedEvent>
| Filters parameter changes for a specific parameter. |
OnChange(IMavParamTypeMetadata param)
| Observable<ParamChangedEvent>
| Filters parameter changes for a specific parameter. |
OnRemoteChange(string name)
| Observable<ParamChangedEvent>
| Filters remote parameter changes for a specific parameter. |
OnRemoteChange(IMavParamTypeMetadata param)
| Observable<ParamChangedEvent>
| Filters remote parameter changes for a specific parameter. |
OnLocalChange(string name)
| Observable<ParamChangedEvent>
| Filters local parameter changes for a specific parameter. |
OnLocalChange(IMavParamTypeMetadata param)
| Observable<ParamChangedEvent>
| Filters local parameter changes for a specific parameter. |
SetOnChangeReal32(IMavParamTypeMetadata param, Action<float> setCallback)
| IDisposable
| Sets callback for float parameter changes (invokes with initial value then on each change). |
SetOnChangeInt32(IMavParamTypeMetadata param, Action<int> setCallback)
| IDisposable
| Sets callback for int32 parameter changes (invokes with initial value then on each change). |
SetOnChangeUint32(IMavParamTypeMetadata param, Action<uint> setCallback)
| IDisposable
| Sets callback for uint32 parameter changes (invokes with initial value then on each change). |
SetOnChangeUint16(IMavParamTypeMetadata param, Action<ushort> setCallback)
| IDisposable
| Sets callback for uint16 parameter changes (invokes with initial value then on each change). |
SetOnChangeInt16(IMavParamTypeMetadata param, Action<short> setCallback)
| IDisposable
| Sets callback for int16 parameter changes (invokes with initial value then on each change). |
SetOnChangeUint8(IMavParamTypeMetadata param, Action<byte> setCallback)
| IDisposable
| Sets callback for uint8 parameter changes (invokes with initial value then on each change). |
SetOnChangeInt8(IMavParamTypeMetadata param, Action<sbyte> setCallback)
| IDisposable
| Sets callback for int8 parameter changes (invokes with initial value then on each change). |
OnR32(IMavParamTypeMetadata param, CancellationToken disposeCancel, ILogger logger, ParamValueCallback<float> setCallback)
| Task
| Async callback for float parameter changes. |
OnU8(IMavParamTypeMetadata param, CancellationToken disposeCancel, ILogger logger, ParamValueCallback<byte> setCallback)
| Task
| Async callback for uint8 parameter changes. |
OnS8(IMavParamTypeMetadata param, CancellationToken disposeCancel, ILogger logger, ParamValueCallback<sbyte> setCallback)
| Task
| Async callback for int8 parameter changes. |
OnU16(IMavParamTypeMetadata param, CancellationToken disposeCancel, ILogger logger, ParamValueCallback<ushort> setCallback)
| Task
| Async callback for uint16 parameter changes. |
OnS16(IMavParamTypeMetadata param, CancellationToken disposeCancel, ILogger logger, ParamValueCallback<short> setCallback)
| Task
| Async callback for int16 parameter changes. |
OnU32(IMavParamTypeMetadata param, CancellationToken disposeCancel, ILogger logger, ParamValueCallback<uint> setCallback)
| Task
| Async callback for uint32 parameter changes. |
OnS32(IMavParamTypeMetadata param, CancellationToken disposeCancel, ILogger logger, ParamValueCallback<int> setCallback)
| Task
| Async callback for int32 parameter changes. |
OnU8Bool(IMavParamTypeMetadata param, CancellationToken disposeCancel, ILogger logger, ParamValueCallback<bool> setCallback)
| Task
| Async callback for uint8 parameter as boolean. |
OnU8Enum<TEnum>(IMavParamTypeMetadata param, CancellationToken disposeCancel, ILogger logger, ParamValueCallback<TEnum> setCallback)
| Task
| Async callback for uint8 parameter as enum. |
OnU8Command(IMavParamTypeMetadata param, CancellationToken disposeCancel, ILogger logger, Func<CancellationToken, Task> onEvent)
| void
| Command trigger on 0 to non-zero transition. |
OnInt32Command(IMavParamTypeMetadata param, CancellationToken disposeCancel, ILogger logger, Func<CancellationToken, Task> onEvent)
| void
| Command trigger on 0 to non-zero transition. |
ParamValueCallback<T> Delegate
A callback delegate used for parameter value change handlers.
public delegate Task ParamValueCallback<in T>(T value, bool firstChange, CancellationToken cancel);
Parameter | Type | Description |
|---|
value
| T
| The parameter value. |
firstChange
| bool
| True if this is the initial value, false for subsequent changes. |
cancel
| CancellationToken
| Cancellation token. |
OnChange* Methods
With name:
Parameter | Type | Description |
|---|
name
| string
| Parameter name to filter for. |
With param:
Parameter | Type | Description |
|---|
param
| IMavParamTypeMetadata
| Parameter metadata to filter for. |
SetOnChange* Methods
Parameter | Type | Description |
|---|
param
| IMavParamTypeMetadata
| Parameter metadata. |
setCallback
| Action<T>
| Callback invoked with parameter value on each change. |
On* Async Methods
Parameter | Type | Description |
|---|
param
| IMavParamTypeMetadata
| Parameter metadata. |
disposeCancel
| CancellationToken
| The cancellation token. |
logger
| ILogger
| Logger for error reporting. |
setCallback
| ParamValueCallback<T>
| Async callback invoked on parameter changes (initial and updates). |
On*Command Methods
Parameter | Type | Description |
|---|
param
| IMavParamTypeMetadata
| Parameter metadata. |
disposeCancel
| CancellationToken
| The cancellation token. |
logger
| ILogger
| Logger for error reporting. |
onEvent
| Func<CancellationToken, Task>
| Async handler triggered on 0→non-zero parameter change. |
Last modified: 31 October 2025