In an earlier ticket, I got this response from Bryce Maisey. Thank you for the response; it was actually very informative, and I'm genuinely intrigued by how the X1 control panel will change with time.
But it made me curious about how the Z3 actually resolves inputs against profiles.
I'd assumed the X1 Control Panel was just an easier way to build macros, and that when saving to the mouse it "flattened" the profiles so each profile would already know the final output for each mapping, including ones inherited from parent profiles. The mouse would then only ever read the active profile's table and never walk up the hierarchy.
Inherited and not overridden mappings would point to a single shared copy. Switching profiles, including to a parent or child, would just mean changing which table is active, e.g. an index into an array of profile tables. Nesting depth would then not affect per-input lookup time.
So my questions are:
- Does the Z3 resolve the hierarchy at runtime rather than using precomputed tables? If so, why? Is it onboard storage, runtime state that can't be precomputed, like layers or modifiers that combine with the active profile or something else?
- Is the depth limit mainly about per-input processing time, or about storage on the mouse?
- Within a single mapping, actions can be nested with no limit (e.g. hold Right Trigger → press Left Button → press Right Button → and so on). I'd guess that's cheap because the mouse only tracks where it is in the chain and checks that level's options. Is that right? If so, could profiles work the same way, with the active profile acting as the "current position"?
For some background, I enjoy programming and embedded systems in my spare time, so I'm genuinely curious about the design decisions behind this. On that note, is there any chance at all that the X1 Control Panel will be made open source? Or does that have no chance of happening? I'd personally love to dig into how it all works.