ump-utils: fix sysex encoding and add F7 continuation support

Fix spa_ump_from_midi() to correctly encode short sysex messages as
Complete (0x0) instead of Start (0x1) when the entire message fits in
one UMP packet. Handle bare F7 termination when no data bytes follow.
Support 0xF7 as a sysex continuation marker and optional trailing 0xF0
as a continuation boundary.

Add unit tests for UMP/MIDI conversion covering note on, program change,
sysex complete/multi-packet/continue, system realtime, F7 continuation,
bare F7 end/complete/orphan, and trailing F0 scenarios.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Wim Taymans 2026-05-22 17:00:09 +02:00
parent 4e1257a6e6
commit 552eb1e618
3 changed files with 619 additions and 2 deletions

View file

@ -27,6 +27,35 @@ if find.found()
endforeach
endif
test_apps = [
['test-ump-utils', []],
]
foreach a : test_apps
test('spa-' + a[0],
executable('spa-' + a[0], a[0] + '.c',
dependencies : [ spa_dep ],
include_directories : [configinc],
install : installed_tests_enabled,
install_dir : installed_tests_execdir,
),
env : [
'SPA_PLUGIN_DIR=@0@'.format(spa_dep.get_variable('plugindir')),
]
)
if installed_tests_enabled
test_conf = configuration_data()
test_conf.set('exec', installed_tests_execdir / 'spa-' + a[0])
configure_file(
input: installed_tests_template,
output: 'spa-' + a[0] + '.test',
install_dir: installed_tests_metadir,
configuration: test_conf,
)
endif
endforeach
benchmark_apps = [
['stress-ringbuffer', []],
['benchmark-pod', []],