Firmware for the Keyboardio Model 01 and other keyboards with AVR or ARM MCUs.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
Go to file
Gergely Nagy 184981ff9a
Migrate to the onFocusEvent API
6 years ago
examples/EEPROM-Keymap Migrate to the onFocusEvent API 6 years ago
src Migrate to the onFocusEvent API 6 years ago
.gitignore Initial import 8 years ago
.travis.yml shellcheck should only be run in the Kaleidoscope repo 6 years ago
CONTRIBUTING.md Add CONTRIBUTING.md 6 years ago
COPYING Initial import 8 years ago
Makefile Update Makefile with OSX fixes and new paths 7 years ago
README.md Migrate to the onFocusEvent API 6 years ago
library.properties Assign my copyright to Keyboard.io 6 years ago

README.md

Kaleidoscope-EEPROM-Keymap

status Build Status

While keyboards usually ship with a keymap programmed in, to be able to change that keymap, without flashing new firmware, we need a way to place the keymap into a place we can update at run-time, and which persists across reboots. Fortunately, we have a bit of EEPROM on the keyboard, and can use it to store either the full keymap (and saving space in the firmware then), or store an overlay there. In the latter case, whenever there is a non-transparent key on the overlay, we will use that instead of the keyboard default.

In short, this plugin allows us to change our keymaps, without having to compile and flash new firmware. It does so through the use of the FocusSerial plugin.

Using the plugin

Using the plugin is reasonably simple: after including the header, enable the plugin, and configure how many layers at most we want to store in EEPROM. There are other settings one can tweak, but these two steps are enough to get started with.

Once these are set up, we can update the keymap via Focus.

#include <Kaleidoscope.h>
#include <Kaleidoscope-EEPROM-Keymap.h>
#include <Kaleidoscope-FocusSerial.h>

KALEIDOSCOPE_INIT_PLUGINS(EEPROMKeymap,
                          Focus,
                          FocusKeymapTransferCommand);

void setup() {
  Kaleidoscope.setup();

  EEPROMKeymap.max_layers(1);
}

Plugin methods

The plugin provides the EEPROMKeymap object, which has the following methods:

.max_layers(max)

Tells the extension to reserve space in EEPROM for up to max layers. Can only be called once, any subsequent call will be a no-op. This should be set to the number of keymap layers you want to be able to program from EEPROM (probably the number of layers you have defined in your keymap).

Focus commands

The plugin provides a keymap.map Focus command unconditionally, and a keymap.transfer via the FocusKeymapTransferCommand object.

keymap.map [codes...]

Without arguments, displays the keymap currently in effect. Each key is printed as its raw, 16-bit keycode.

With arguments, it stores as many keys as given. One does not need to set all keys, on all layers: the command will start from the first key on the first layer, and go on as long as it has input. It will not go past the layer set via the .max_layers() method.

keymap.transfer LAYER

Transfers the LAYER from the built-in memory of the keyboard into EEPROM storage.

Useful mostly when one wants to remove the built-in keymap, and wants to easily transfer it into EEPROM first.

This is generally not needed, and it is recommended to not enable this command, unless the feature this command implements is truly needed.

Dependencies

Further reading

Starting from the example is the recommended way of getting started with the plugin.