How to Configure Rudder Mode for Flight Simulation Integration with DIY FFB Pedals
Set the rudderMode value to 0 for standard aircraft rudder or 1 for helicopter-style yaw control in the SimHub plugin settings to configure rudder mode for flight simulation integration.
The chrgri/diy-sim-racing-ffb-pedal repository provides open-source force feedback pedal hardware and software for racing and flight simulators. When integrating with flight simulation software, configuring the rudder mode ensures your pedals deliver the correct resistance profile for either fixed-wing aircraft steering or rotary-wing cyclic yaw control. This article explains the two available rudder modes, their storage locations in the codebase, and how the firmware interprets your configuration.
Understanding Rudder Modes for Flight Simulation
The firmware supports two distinct rudder behaviors selected through the Rudder Mode setting. This value is stored as a uint field named rudderMode in the plugin settings.
Standard Aircraft Rudder (Mode 0)
Setting rudderMode to 0 enables standard two- or three-pedal steering suitable for fixed-wing aircraft. According to the source in SimHubPlugin/DIYFFBPedalSettings.cs at lines 74-75, this is the default value. When active, the firmware receives EnableRudderTwoPedals or EnableRudderThreePedals action codes depending on your physical pedal configuration.
Helicopter-Style Rudder (Mode 1)
Setting rudderMode to 1 configures the pedals for helicopter yaw control via cyclic input. This mode triggers EnableHeliRudderTwoPedals or EnableHeliRudderThreePedals action codes, altering the torque profile to match rotary-wing aircraft physics.
Locating the Rudder Mode Configuration
Persistent Storage in DIYFFBPedalSettings.cs
The setting is defined in SimHubPlugin/DIYFFBPedalSettings.cs at lines 74-75 as a public unsigned integer:
public uint rudderMode = 0; // 0 = standard aircraft, 1 = helicopter
SimHub serializes this field to DIYFFBPedalSettings.json located in %APPDATA%\SimHub\PluginSettings\. You can manually edit this JSON file to change the mode between 0 and 1 when SimHub is closed.
SimHub User Interface Controls
The SimHub plugin exposes this setting through check-boxes in the Rudder tab. In SimHubPlugin/UIFunction/SettingSection_Rudder.xaml.cs at lines 90-92 and 168-172, the UI binds to Settings.rudderMode:
- "Rudder Type 1" sets the value to
0 - "Rudder Type 2" sets the value to
1
Selecting either option triggers SettingsChangedEvent and updates the JSON configuration immediately without requiring a restart.
How Configuration Affects Firmware Communication
When transmitting commands to the Arduino/ESP32 firmware, the driver in SimHubPlugin/DIYFFBPedal.cs (lines 988-1004) constructs the Rudder_action payload based on the current mode:
if (Settings.rudderMode == 0) // normal aircraft rudder
{
if (Rudder_Pedal_idx[0] == 0)
tmp.payloadPedalAction_.Rudder_action = (byte)RudderAction.EnableRudderThreePedals;
else
tmp.payloadPedalAction_.Rudder_action = (byte)RudderAction.EnableRudderTwoPedals;
}
if (Settings.rudderMode == 1) // helicopter rudder
{
if (Rudder_Pedal_idx[0] == 0)
tmp.payloadPedalAction_.Rudder_action = (byte)RudderAction.EnableHeliRudderThreePedals;
else
tmp.payloadPedalAction_.Rudder_action = (byte)RudderAction.EnableHeliRudderTwoPedals;
}
The firmware interprets these byte codes to configure the motor controller with the appropriate force feedback curve for your selected flight simulation integration.
Step-by-Step Configuration Workflow
Follow these steps to configure rudder mode for flight simulation integration:
- Open the SimHub plugin UI and navigate to the Rudder tab.
- Select the desired behavior by checking "Rudder Type 1" for standard aircraft (value
0) or "Rudder Type 2" for helicopter (value1). - Save the configuration — SimHub automatically serializes
DIYFFBPedalSettingsto JSON. The change takes effect on the next communication cycle with the pedal hardware.
For manual configuration, edit %APPDATA%\SimHub\PluginSettings\DIYFFBPedalSettings.json and set "rudderMode": 0 or "rudderMode": 1, then restart SimHub.
Programmatic Configuration Examples
Changing Mode via C#
// Access the plugin settings instance
var settings = new DIYFFBPedalSettings();
// Configure helicopter rudder mode for flight simulation
settings.rudderMode = 1;
// Persist changes to JSON
PluginManager.SavePluginSettings(settings);
Manual JSON Configuration
{
"rudderMode": 0,
"rudderMaxForce": 10,
"rudderMinForce": 1,
"Rudder_RPM_effect_b": true,
"Rudder_ACC_effect_b": false
}
UI Binding Implementation
The check-boxes in SettingSection_Rudder.xaml use value converters to bind to the integer setting:
<CheckBox x:Name="CheckBox_RudderType_1"
Content="Standard Rudder"
IsChecked="{Binding Settings.rudderMode, Converter={StaticResource EqualityConverter}, ConverterParameter=0}"
Checked="CheckBox_RudderType_Checked"/>
<CheckBox x:Name="CheckBox_RudderType_2"
Content="Helicopter Rudder"
IsChecked="{Binding Settings.rudderMode, Converter={StaticResource EqualityConverter}, ConverterParameter=1}"
Checked="CheckBox_RudderType_Checked"/>
Rudder Mode Interaction with Other Settings
The rudderMode value affects how the firmware interprets related configuration flags defined in DIYFFBPedalSettings.cs:
Rudder_RPM_effect_b— Controls engine vibration feedback; evaluated according to the selected rudder mode's physics profile.Rudder_ACC_effect_b— Manages acceleration-based force effects; applied based on the active mode.Rudder_Pedal_idx— Array defining which physical pedals (2 or 3) serve as rudder inputs; the firmware uses this index regardless of whether mode0or1is selected.
Summary
- The DIY-Sim-Racing-FFB-Pedal supports two rudder modes:
0for standard aircraft and1for helicopter-style yaw control. - The setting persists as a
uintfield namedrudderModeinDIYFFBPedalSettings.csand serializes toDIYFFBPedalSettings.json. - The SimHub plugin UI provides check-boxes in the Rudder tab mapped to
Settings.rudderModeas implemented inSettingSection_Rudder.xaml.cs. - Firmware commands are constructed in
DIYFFBPedal.cs(lines 988-1004), translating the mode into specificRudder_actionbyte codes for the motor controller. - Related effects like RPM vibration and pedal indexing remain active but are interpreted according to the selected mode's profile.
Frequently Asked Questions
What is the difference between Rudder Type 1 and Rudder Type 2?
Rudder Type 1 (value 0) configures the pedals for standard fixed-wing aircraft rudder control using two or three pedals. Rudder Type 2 (value 1) enables helicopter-style rudder behavior where yaw is controlled via cyclic input, resulting in different force feedback torque profiles in the firmware.
Where is the rudder mode setting saved on disk?
SimHub saves the value in %APPDATA%\SimHub\PluginSettings\DIYFFBPedalSettings.json as the "rudderMode" property. You can manually edit this JSON file to change the mode between 0 and 1 when the application is closed.
Do I need to restart SimHub after changing the rudder mode?
No restart is required when changing via the UI. The plugin triggers SettingsChangedEvent immediately when you select a different check-box in the Rudder tab, and the next communication packet to the pedal firmware contains the updated Rudder_action payload. However, if editing the JSON file manually, you must restart SimHub for the file to be re-read.
Which source file handles the conversion of rudder mode to firmware commands?
The conversion logic resides in SimHubPlugin/DIYFFBPedal.cs at lines 988-1004. This code checks Settings.rudderMode and assigns the appropriate RudderAction enum value (EnableRudderTwoPedals, EnableRudderThreePedals, EnableHeliRudderTwoPedals, or EnableHeliRudderThreePedals) to the payload sent to the Arduino/ESP32 controller.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →