Hey,
So i’ve trying to do some additional “power use” of my Atreus and i was wanting to try Chording. Since Chrysalis doesn’t seem to be able to do it on it’s own i decided to flash Kaleidoscope directly.
Managed to put Chording working but then i noticed a strange interaction. Seems like the “Shift to Layer” is just executing as a “Move To Layer”. I also do homerow mods and using them has even stranger behaviour. If i’m quick enough i observe the standard shift behaviour but if i held it a bit longer then the shift layer sticks (probably some weird interaction with QuKeys timeout?!). This also happens with CTRL and other modifiers.
So, what am i doing wrong here? From looking at source code it seems clear that Chrysalis is using the Kaleidoscope example provided for atreus as the base firmware, so this got me a little confused.
I backup my layout through Chrysalis and flashed on ArduinoIDE and restored the layout through Chrysalis again. I’ve also tried disabling the default keymap on the .ino file along with the used Macro “shorcuts” for moving and shifting to layer (they seemed to only be used by the hardecoded keymap so).
- Reset everything, restarted windows, picked up the .ino file again, cleaned up the default keymap and now chrysalis even says it can’t have both eeprom and hardcoded keymaps in.
- Reflashed it again and now Chrysalis can’t connect to the keyboard.
Yes, i am this new to firmware flashing
this is what i currently have flashed with.
/* -*- mode: c++ -*-
* Atreus -- Chrysalis-enabled Sketch for the Keyboardio Atreus
* Copyright (C) 2018-2022 Keyboard.io, Inc
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#ifndef BUILD_INFORMATION
#define BUILD_INFORMATION "locally built on " __DATE__ " at " __TIME__
#endif
#include "Kaleidoscope.h"
#include "Kaleidoscope-EEPROM-Settings.h"
#include "Kaleidoscope-EEPROM-Keymap.h"
#include "Kaleidoscope-Escape-OneShot.h"
#include "Kaleidoscope-FirmwareVersion.h"
#include "Kaleidoscope-FocusSerial.h"
#include "Kaleidoscope-Macros.h"
#include "Kaleidoscope-MouseKeys.h"
#include "Kaleidoscope-OneShot.h"
#include "Kaleidoscope-Qukeys.h"
#include "Kaleidoscope-SpaceCadet.h"
#include "Kaleidoscope-DynamicMacros.h"
#include "Kaleidoscope-Chord.h"
#include "Kaleidoscope-LayerNames.h"
#define MO(n) ShiftToLayer(n)
#define TG(n) LockLayer(n)
enum {
MACRO_VERSION_INFO
};
#define Key_Exclamation LSHIFT(Key_1)
#define Key_At LSHIFT(Key_2)
#define Key_Hash LSHIFT(Key_3)
#define Key_Dollar LSHIFT(Key_4)
#define Key_Percent LSHIFT(Key_5)
#define Key_Caret LSHIFT(Key_6)
#define Key_And LSHIFT(Key_7)
#define Key_Star LSHIFT(Key_8)
#define Key_Plus LSHIFT(Key_Equals)
KEYMAPS()
KALEIDOSCOPE_INIT_PLUGINS(
// ----------------------------------------------------------------------
// Chrysalis plugins
// The EEPROMSettings & EEPROMKeymap plugins make it possible to have an
// editable keymap in EEPROM.
EEPROMSettings,
EEPROMKeymap,
// Focus allows bi-directional communication with the host, and is the
// interface through which the keymap in EEPROM can be edited.
Focus,
// FocusSettingsCommand adds a few Focus commands, intended to aid in
// changing some settings of the keyboard, such as the default layer (via the
// `settings.defaultLayer` command)
FocusSettingsCommand,
// FocusEEPROMCommand adds a set of Focus commands, which are very helpful in
// both debugging, and in backing up one's EEPROM contents.
FocusEEPROMCommand,
// The FirmwareVersion plugin lets Chrysalis query the version of the firmware
// programmatically.
FirmwareVersion,
// The LayerNames plugin allows Chrysalis to display - and edit - custom layer
// names, to be shown instead of the default indexes.
LayerNames,
// ----------------------------------------------------------------------
// Keystroke-handling plugins
// The Qukeys plugin enables the "Secondary action" functionality in
// Chrysalis. Keys with secondary actions will have their primary action
// performed when tapped, but the secondary action when held.
Qukeys,
// SpaceCadet can turn your shifts into parens on tap, while keeping them as
// Shifts when held. SpaceCadetConfig lets Chrysalis configure some aspects of
// the plugin.
//SpaceCadet,
//SpaceCadetConfig,
// Enables the "Sticky" behavior for modifiers, and the "Layer shift when
// held" functionality for layer keys.
OneShot,
OneShotConfig,
EscapeOneShot,
EscapeOneShotConfig,
// The macros plugin adds support for macros
Macros,
// Enables dynamic, Chrysalis-editable macros.
DynamicMacros,
Chord
// The MouseKeys plugin lets you add keys to your keymap which move the mouse.
//MouseKeys,
//MouseKeysConfig //,
// The MagicCombo plugin lets you use key combinations to trigger custom
// actions - a bit like Macros, but triggered by pressing multiple keys at the
// same time.
// MagicCombo,
// Enables the GeminiPR Stenography protocol. Unused by default, but with the
// plugin enabled, it becomes configurable - and then usable - via Chrysalis.
// GeminiPR,
);
const macro_t *macroAction(uint8_t macro_id, KeyEvent &event) {
if (keyToggledOn(event.state)) {
switch (macro_id) {
case MACRO_VERSION_INFO:
Macros.type(PSTR("Keyboardio Atreus - Kaleidoscope "));
Macros.type(PSTR(BUILD_INFORMATION));
break;
default:
break;
}
}
return MACRO_NONE;
}
void setup() {
Kaleidoscope.setup();
EEPROMKeymap.setup(9);
DynamicMacros.reserve_storage(48);
LayerNames.reserve_storage(63);
Layer.move(EEPROMSettings.default_layer());
// To avoid any surprises, SpaceCadet is turned off by default. However, it
// can be permanently enabled via Chrysalis, so we should only disable it if
// no configuration exists.
SpaceCadetConfig.disableSpaceCadetIfUnconfigured();
}
void loop() {
Kaleidoscope.loop();
}