blahlicus / animus-family

keyboard firmware family for arduino compatible atmega u series microcontrollers
Apache License 2.0
76 stars 21 forks source link

Question about layers #9

Closed jleechpe closed 7 years ago

jleechpe commented 7 years ago

Do the layers on Animus work like the one on ErgoDox where you only need to specify changed keys (allowing for multiple layers to stack for specific uses)? Or is each layer a distinct key layout that would need to be fully defined

blahlicus commented 7 years ago

It is very hard to explain with words but the best way to put it is: "It is something in between which offers the best of both worlds."

I strongly recommend that you try out the Arbites rebinding tool to see what I mean, Arbites is portable and self contained so you could just test it, then delete it once you are done.

jleechpe commented 7 years ago

If I'm understanding the application correctly, as you add layers they inherit from Layer 0 for their base settings. You can check the Apply to all layers to have changes propagate to all layers that exist.

(I don't have a keyboard to actively test beyond looking at Arbites, I'm comparing Diverge to Ergodox and want to make sure I understand how configuration works on both. I'm assuming that Fn[#] switches to the appropriate [#] layer (1 if no # is shown) while ToggleFN[#] switches to that layer until untoggled/toggling another layer. I'm assuming the 2RoleFN[#] are Tap vs Hold to get the 2nd value (if that is the case why have SpaceFN[#] as well as Space/FN[#]))

What I can't see that ErgoDox/KLL supports is the dynamic partial layers.

Based on the Diverge 2/3 arb2d2 layout, adding a third layer for a numeric keypad on the right hand side (no other changes).

If I wanted to be able to use Arrow Cluster + 10Key I would need to define a Layer 3 that had the LHS from Layer 1 and RHS from Layer 2? Or is there a way to combine Layer 1 + Layer 2 using on-the-fly and get my desired end result.

blahlicus commented 7 years ago

Yes, most of what you assumed is true, "add layer" inherits from layer 0 and "apply to all layers" allows you to edit all of the layers at once.

The default layer is layer0, FN[number] keys switches the layer to layer[#], toggleFN/spaceFN/2RoleFN[#]/etc work as you have stated.

SpaceFN[#] and Space/FN[#] exist alongside each other because SpaceFN[#] is a deprecated version that does the same thing, it is kept in there for backwards compatibility.

If I wanted to be able to use Arrow Cluster + 10Key I would need to define a Layer 3 that had the LHS from Layer 1 and RHS from Layer 2? Or is there a way to combine Layer 1 + Layer 2 using on-the-fly and get my desired end result.

You will have to redefine the left handed arrow keys.


Unlike any of the TMK derived firmwares (KLL/QMK/etc), layout data in Animus is distinctively separated from firmware data due to the use of EEPROM, layout data is saved in the EEPROM of the microcontroller instead of being part of the firmware being saved in flash memory.

As such, the firmware is layout agnostic, so "hard coded" solutions such as what you are calling "dynamic partial layers" do not exist under Animus, instead, QOL and ease of configuration is handled by Arbites, the configuration tool, instead of by Animus, the firmware.

Is the existence of "partial layers" very important for your use case? I do not see how it is a big deal when you could just replicate your layers like the above example. Regardless, I could add a "copy layer" button/function into Arbites if that is a big deal for you.

jleechpe commented 7 years ago

It isn't overly important. It was more just trying to make sure I understood the difference in functionality. Having to define multiple layers would not overly complicate the process. From my reading of the KLL spec even the partial layers are all flattened down into distinct layers during compilation process.

Instead of a Copy Layer option perhaps a dropdown next to Add Layer that specifies which layer to derive from (effectively a Copy Layer). That would also allow for an Add NULL layer (if you need to define a completely different layout for the layer then it would make it easier since you wouldn't need to keep track of which you've converted).