Z3 profile's

Z3 profile's

Is there a reason I can only have a nested profile 1 level deep?
This is primarily a performance consideration. All profile mappings are processed on the mouse itself (not the X1), and every layer of profile nesting is another layer that the mouse needs to check on every input before it can determine the correct output. 

We may be able to lift this limit in a firmware update to the Z3, but I can't promise anything at this stage.

For now, if you just want three levels for your game profiles, you could add all your "generic" game binds to the Global profile. Then you have two layers beneath it for game, then character specific profiles. This would just limit you to two level for your non-gaming profiles, which may be a worthwhile trade off depending on your use case.

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:
  1. 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?
  2. Is the depth limit mainly about per-input processing time, or about storage on the mouse?
  3. 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.