ipc-depth-hid (2026-11-01, r2): IPC reference lists, the runner, and the missing hid / audio / system-device rows¶
Branch claude/ipc-depth-hid-2026-11-01-r2, Mac. A command with no row stops the runtime (runtime/src/ipc.c unimplemented()); this round turns
"how deep is the IPC surface" into a measurement and fills the gaps of this package's services.
What changed¶
- Reference lists + runner.
runtime/tests/ipc_reference/<interface>.txt(30 files) list each interface's commands asid<TAB>name<TAB>min_fw<TAB>y|nwith# interface <name> (<source>)first;<name>is the runtime's interface string, matched exactly.runtime/tests/test_ipc_reference.creads the command tables fromruntime/src(IpcCmd x[] = {...}), binds them to interface names (IPC_OBJECT("name", table, ...),SUB(fn, "name", table),f(table, n, "name"); files whoseservice_register_*is never called are skipped:audin.c), and fails when an application-reachable id has no row.# alias/# tabledirectives cover bindings it cannot read. It runs inmake testandmake test-host;make test-ipc-referenceprints details (rows the reference does not list, name differences). - hid: 86 new rows, 148 of 148 app-reachable ids answered, all
IPC_IMPL(the existing test asserts no hid row is a stub). Rows 133-136 were one id low (133 answered the center clamp; 136 ClearNpadCaptureButtonAssignment was missing): fixed, Clear takes only the aruid and clears every style. New state lives inhid_core(accelerometer parameters, passthrough, ERM commands, permit sessions, seven six-axis, Palma devices). - audio / audrec: IAudioDevice 13 (two meanings, told apart by the output buffer), 14-21; IAudioRenderer 12/13; IAudioOut 12/13 (volume kept,
not applied:
IPC_STUB); IAudioIn 7/10; audin:u 5; hwopus 8/9; IHardwareOpusDecoder 8/9; IFinalOutputRecorder 10/11 (audrec_flush). The OpenAudioIn comment now matches the library: the microphone when permitted, silence otherwise. - settings:
set11 is GetDeviceNickName (was answered as a key code map), 12 GetKeyCodeMapByPort;set:sys53 time zone name (was at 62), 62 GetDebugModeFlag (the old row answered 'U' there, i.e. debug mode on), 77, 79. - psm 18; lbl 26 renamed EnableVrMode, 27-29; spsm named after switchbrew + 4/5; btm IBtmUserCore 19-21 renumbered, 1, 2, 22-37 added.
fgm's IRequest object is nowfgm::IRequest(nifm's IRequest has the same name; the runner matches names exactly).
Status¶
- tested:
make -C runtime test(includestest_ipc_reference: 30 fixtures, 368 app-reachable ids, 0 missing),make -C runtime test-services(60 service tests, all pass; new checks in test_svc_hid, test_svc_hidcore, test_svc_audio, test_svc_audrec, test_svc_settings, test_svc_lbl, test_svc_spsm, test_svc_psm, test_svc_btm),make test-hosttarget for the runner builds and passes on the Mac withcc. - verified: four-title headless boots with this runtime (SMO, MK8D, LAS, ACNH, 60 s each, private save root): all reach
notify-running,missing_ipcempty, no crashes, stub list unchanged (nvdrv:13), the same as the round-1 summaries. hid rows the titles call: 0, 1, 11, 21, 31, 66, 100, 102, 103, 106, 109, 120, 121, 124, 128, 200, 203, 206, 1004; none of them calls a renumbered row (hid 133-136, set 11, set:sys 53/62, btm 19-21). - Not verified on a title: none of the four titles calls the new hid / audio / btm rows (they were missing, and the titles boot), so the new rows are
exercised by unit tests only. Layouts marked
[unverified]in the sources (mode vibration, Palma data blocks, seven six-axis init, 1004/1005 on 20.0.0+).
Files¶
runtime/tests/test_ipc_reference.c, runtime/tests/ipc_reference/*.txt, runtime/Makefile (appended), runtime/src/services/{hid.c,hid_core.c,hid_core.h,
audio.c,audrec.c,audrec_core.c,audrec_core.h,settings.c,psm.c,lbl.c,lbl_core.h,spsm.c,btm.c,fgm.c}, the matching runtime/tests/test_svc_*.c,
docs/architecture/runtime-services.md (appended).