Problem
Touch-sensitive MIDI DJ controllers such as the Hercules DJControl Starlight can make AetherSDR's VFO Tune Knob mapping feel jumpy or flaky.
In the captured Starlight event stream, the jog wheel emits a touch NoteOn event before the actual rotation CC data. Rotation itself is emitted as relative CC pulses, commonly 1 for one direction and 127 for the other. If Learn captures the touch event or if the relative pulses are treated as absolute values, a small wheel movement can become a large VFO jump.
There is a second timing issue in the command flow: MIDI relative tuning calculated each new target from SliceModel::frequency(), while SliceModel also accepts asynchronous RF_frequency echoes from the radio. During rapid wheel movement, delayed radio echoes can become the base for the next MIDI step, causing apparent backward/forward jumps.
Expected behavior
- Learning
VFO Tune Knob from a touch-sensitive jog wheel should bind to the movement CC/PitchBend, not the touch sensor.
- Relative encoder pulses should map predictably to selected radio step increments.
- Rapid wheel movement should tune from the local in-flight target rather than stale radio echo.
Proposed fix
- Ignore touch-only
NoteOn messages while learning slider/knob targets; wait for continuous movement data (CC/PitchBend).
- Default learned
VFO Tune Knob CC bindings to relative mode.
- Treat common
1/127 VFO CC pulses as relative even for older non-relative saved bindings.
- Keep a short-lived MIDI VFO target in
MainWindow so repeated wheel pulses build from local intent until the wheel goes idle.
- Keep VFO relative detents exact, without MIDI-side acceleration/halving.
Validation
- Captured live Starlight MIDI messages with RtMidi on the same backend used by AetherSDR.
- Built
AetherSDR successfully.
- Ran
midi_settings_test successfully.
Notes
The final radio command remains the existing SmartSDR-compatible form:
slice tune <slice-id> <frequency-mhz> autopan=0
The change is limited to how MIDI learn and MIDI relative tuning compute the target frequency before that command is emitted.
Problem
Touch-sensitive MIDI DJ controllers such as the Hercules DJControl Starlight can make AetherSDR's
VFO Tune Knobmapping feel jumpy or flaky.In the captured Starlight event stream, the jog wheel emits a touch
NoteOnevent before the actual rotation CC data. Rotation itself is emitted as relative CC pulses, commonly1for one direction and127for the other. If Learn captures the touch event or if the relative pulses are treated as absolute values, a small wheel movement can become a large VFO jump.There is a second timing issue in the command flow: MIDI relative tuning calculated each new target from
SliceModel::frequency(), whileSliceModelalso accepts asynchronousRF_frequencyechoes from the radio. During rapid wheel movement, delayed radio echoes can become the base for the next MIDI step, causing apparent backward/forward jumps.Expected behavior
VFO Tune Knobfrom a touch-sensitive jog wheel should bind to the movement CC/PitchBend, not the touch sensor.Proposed fix
NoteOnmessages while learning slider/knob targets; wait for continuous movement data (CC/PitchBend).VFO Tune KnobCC bindings to relative mode.1/127VFO CC pulses as relative even for older non-relative saved bindings.MainWindowso repeated wheel pulses build from local intent until the wheel goes idle.Validation
AetherSDRsuccessfully.midi_settings_testsuccessfully.Notes
The final radio command remains the existing SmartSDR-compatible form:
The change is limited to how MIDI learn and MIDI relative tuning compute the target frequency before that command is emitted.