Hey, just a software dev blog, I have been working on enhancing Animus as well as doing some optimisation along the way, dynamic live macros has been completed and the dual-role keys feature has been enhanced.

The macros

The live macros was really fun to develop for, but lets first cover some basics on what it does, the live macro plugin/mod supports up to 10 macros with each macros supporting up to 8 actions, pressing a key counts as an action and releasing a key counts as an action, this means it supports up to 4 key combos (such as the ever useful ctrl+shift+alt+n for new layer in photoshop), this separation of key down and key up state means that more complex macros could be done, most previous implementations of macros (including most commercial implementations) rely on “pyramid nesting,” where setting the macro “ctrl+alt+del” actually means “ctrlDown+altDown+delDown+delUp+altUp+ctrlUp,” you get the idea, whilst my implementation would allow for stuff like “ctrlDown+vDown+vUp+ctrlUp+altDown+F4Down+F4Up+altUp,” this example pastes something and closes the window, just some technical information that I would like to geek out about.

The live macro feature also allows users to call special keys, such as FN, media keys, all the keys defined within Animus is callable, this means you are not restricted to calling HID keystrokes, more importantly, this allows for macro-chaining, where you could call another macro from your macro, allowing you to effectively have a macro which has more key actions.

And of course, as are most layout related things in Animus, all the macro keystroke data are saved in EEPROM, which means no firmware reflashing needed to rebind any macros, in fact, I’ve implemented quite an extensive list of methods and functions for managing “dynamic” EEPROM addresses, allowing plugins/mods to be very modular and self-contained.

Dual-keys

Just in case that you don’t know what dual keys are, it is basically stuff like commaShift, spaceFN, etc. You could assign a modifier (including FN keys) to a key, if someone presses and releases commaShift without typing anything in between, then the keyboard would output a comma, if someone presses and holds commaShift, then it acts as a shift key.

This new implementation of the dual keys function is actually a derivative of the macro function where a lot of its core code is borrowed (such as EEPROM address handling) general enhancements such as again, key rebinding without needing to reflash the firmware is added, and a lot of the underlying code is also changed from the previous implementation of the dual-keys.

Sticky keys

A feature that is often overlooked and/or hated by PC gamers all over the world (Stop popping up! Sticky shift, I am just trying to sprint), I’ve decided to implement sticky keys as well for better accessibility and workflow improvements for those who like to use sticky keys on their keyboards, this is mostly useful on smaller keyboards such as the Diverge TM or the Terminus Mini where FN would often need to be used. This again borrows the EEPROM address handling from the macro mod and is pretty simple, since its only a few line of code.

General Animus Enhancements

Previously, pressing the FN key would release all keys first, including modifiers as a safety measure to ensure that no keys would be stuck in the “down” position when switching layers (as the FN key temporarily shifts the layer), this means Shift+FN did not work, instead people had to do FN+Shift, this is no longer the case if the shift keys on the two separate layers are at the same location, this is true for all other keys as well, including non-modifiers, I ended having to modify some code in the HID emulator, which was fun.

Some ints got turned into bytes (32 bit to 8 bit), just an optimisation on resource usage of Animus.

You may want to check out the source code for Animus over here.

Arbites Improvements Upcoming

Since Animus just received quite a major upgrade, Arbites will also be receiving upgrades, I’ll add the necessary UI elements for editing macros, dual role keys, etc, as well as adding a function to update the onboard firmware of plugged in keyboards, allowing users to easily update their firmware without needing to deal with Arduino IDEs.