Switch to activation-order for Layers
Previously, we used index-ordering for layers, meaning, we looked keys up based
on the index of active layers. This turned out to be confusing, and in many
cases, limiting, since we couldn't easily shift to a lower layer from a higher
one. As such, index-ordering required careful planning of one's layers, and a
deeper understanding of the system.
This patch switches us to activation-ordering: the layer subsystem now keeps
track of the order in which layers are activated, and uses that order to look
keys up, instead of the index of layers. This makes it easier to understand how
the system works, and allows us to shift to lower layers too.
It does require a bit more resources, since we can't just store a bitmap of
active layers, but need 32 bytes to store the order. We still keep the bitmap,
to make `Layer.isActive()` fast: looking up a bit in the bitmap is more
efficient than walking the active layer array, and this function is often used
in cases where speed matters.
As a side effect of the switch, a number of methods were deprecated, and similar
ones with more appropriate names were introduced. See the updated `UPGRADING.md`
document for more details.
Plugins that used the deprecated methods were updated to use the new ones.
Fixes #857.
Signed-off-by: Gergely Nagy <algernon@keyboard.io>
4 years ago
|
|
|
/* -*- mode: c++ -*-
|
|
|
|
* Kaleidoscope - Firmware for computer input devices
|
|
|
|
* Copyright (C) 2020 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, version 3.
|
|
|
|
*
|
|
|
|
* 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, see <http://www.gnu.org/licenses/>.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include <Kaleidoscope.h>
|
|
|
|
#include <Kaleidoscope-FocusSerial.h>
|
|
|
|
#include <Kaleidoscope-MouseKeys.h>
|
|
|
|
|
|
|
|
enum {
|
|
|
|
PRIMARY,
|
|
|
|
NUMPAD,
|
|
|
|
FUNCTION,
|
|
|
|
}; // layers
|
Switch to activation-order for Layers
Previously, we used index-ordering for layers, meaning, we looked keys up based
on the index of active layers. This turned out to be confusing, and in many
cases, limiting, since we couldn't easily shift to a lower layer from a higher
one. As such, index-ordering required careful planning of one's layers, and a
deeper understanding of the system.
This patch switches us to activation-ordering: the layer subsystem now keeps
track of the order in which layers are activated, and uses that order to look
keys up, instead of the index of layers. This makes it easier to understand how
the system works, and allows us to shift to lower layers too.
It does require a bit more resources, since we can't just store a bitmap of
active layers, but need 32 bytes to store the order. We still keep the bitmap,
to make `Layer.isActive()` fast: looking up a bit in the bitmap is more
efficient than walking the active layer array, and this function is often used
in cases where speed matters.
As a side effect of the switch, a number of methods were deprecated, and similar
ones with more appropriate names were introduced. See the updated `UPGRADING.md`
document for more details.
Plugins that used the deprecated methods were updated to use the new ones.
Fixes #857.
Signed-off-by: Gergely Nagy <algernon@keyboard.io>
4 years ago
|
|
|
|
|
|
|
// clang-format off
|
Switch to activation-order for Layers
Previously, we used index-ordering for layers, meaning, we looked keys up based
on the index of active layers. This turned out to be confusing, and in many
cases, limiting, since we couldn't easily shift to a lower layer from a higher
one. As such, index-ordering required careful planning of one's layers, and a
deeper understanding of the system.
This patch switches us to activation-ordering: the layer subsystem now keeps
track of the order in which layers are activated, and uses that order to look
keys up, instead of the index of layers. This makes it easier to understand how
the system works, and allows us to shift to lower layers too.
It does require a bit more resources, since we can't just store a bitmap of
active layers, but need 32 bytes to store the order. We still keep the bitmap,
to make `Layer.isActive()` fast: looking up a bit in the bitmap is more
efficient than walking the active layer array, and this function is often used
in cases where speed matters.
As a side effect of the switch, a number of methods were deprecated, and similar
ones with more appropriate names were introduced. See the updated `UPGRADING.md`
document for more details.
Plugins that used the deprecated methods were updated to use the new ones.
Fixes #857.
Signed-off-by: Gergely Nagy <algernon@keyboard.io>
4 years ago
|
|
|
KEYMAPS(
|
|
|
|
[PRIMARY] = KEYMAP_STACKED
|
|
|
|
(___, Key_1, Key_2, Key_3, Key_4, Key_5, XXX,
|
|
|
|
Key_Backtick, Key_Q, Key_W, Key_E, Key_R, Key_T, Key_Tab,
|
|
|
|
Key_PageUp, Key_A, Key_S, Key_D, Key_F, Key_G,
|
|
|
|
Key_PageDown, Key_Z, Key_X, Key_C, Key_V, Key_B, Key_Escape,
|
|
|
|
Key_LeftControl, Key_Backspace, Key_LeftGui, Key_LeftShift,
|
|
|
|
ShiftToLayer(FUNCTION),
|
|
|
|
|
|
|
|
XXX, Key_6, Key_7, Key_8, Key_9, Key_0, LockLayer(NUMPAD),
|
|
|
|
Key_Enter, Key_Y, Key_U, Key_I, Key_O, Key_P, Key_Equals,
|
|
|
|
Key_H, Key_J, Key_K, Key_L, Key_Semicolon, Key_Quote,
|
|
|
|
Key_RightAlt, Key_N, Key_M, Key_Comma, Key_Period, Key_Slash, Key_Minus,
|
|
|
|
Key_RightShift, Key_LeftAlt, Key_Spacebar, Key_RightControl,
|
|
|
|
ShiftToLayer(FUNCTION)),
|
|
|
|
|
|
|
|
[NUMPAD] = KEYMAP_STACKED
|
|
|
|
(___, ___, ___, ___, ___, ___, ___,
|
|
|
|
___, ___, ___, ___, ___, ___, ___,
|
|
|
|
___, ___, ___, ___, ___, ___,
|
|
|
|
___, ___, ___, ___, ___, ___, ___,
|
|
|
|
___, ___, ___, ___,
|
|
|
|
___,
|
|
|
|
|
|
|
|
XXX, ___, Key_7, Key_8, Key_9, Key_KeypadSubtract, ___,
|
|
|
|
___, ___, Key_4, Key_5, Key_6, Key_KeypadAdd, ___,
|
|
|
|
___, Key_1, Key_2, Key_3, Key_Equals, ___,
|
|
|
|
___, ___, Key_0, Key_Period, Key_KeypadMultiply, Key_KeypadDivide, Key_Enter,
|
|
|
|
___, ___, ___, ___,
|
|
|
|
___),
|
|
|
|
|
|
|
|
[FUNCTION] = KEYMAP_STACKED
|
|
|
|
(ShiftToLayer(NUMPAD), Key_F1, Key_F2, Key_F3, Key_F4, Key_F5, Key_CapsLock,
|
|
|
|
Key_Tab, ___, Key_mouseUp, ___, Key_mouseBtnR, Key_mouseWarpEnd, Key_mouseWarpNE,
|
|
|
|
Key_Home, Key_mouseL, Key_mouseDn, Key_mouseR, Key_mouseBtnL, Key_mouseWarpNW,
|
|
|
|
Key_End, Key_PrintScreen, Key_Insert, ___, Key_mouseBtnM, Key_mouseWarpSW, Key_mouseWarpSE,
|
|
|
|
___, Key_Delete, ___, ___,
|
|
|
|
___,
|
|
|
|
|
|
|
|
Consumer_ScanPreviousTrack, Key_F6, Key_F7, Key_F8, Key_F9, Key_F10, Key_F11,
|
|
|
|
Consumer_PlaySlashPause, Consumer_ScanNextTrack, Key_LeftCurlyBracket, Key_RightCurlyBracket, Key_LeftBracket, Key_RightBracket, Key_F12,
|
|
|
|
Key_LeftArrow, Key_DownArrow, Key_UpArrow, Key_RightArrow, ___, ___,
|
|
|
|
Key_PcApplication, Consumer_Mute, Consumer_VolumeDecrement, Consumer_VolumeIncrement, ___, Key_Backslash, Key_Pipe,
|
|
|
|
___, ___, Key_Enter, ___,
|
|
|
|
___)
|
|
|
|
)
|
|
|
|
// clang-format on
|
Switch to activation-order for Layers
Previously, we used index-ordering for layers, meaning, we looked keys up based
on the index of active layers. This turned out to be confusing, and in many
cases, limiting, since we couldn't easily shift to a lower layer from a higher
one. As such, index-ordering required careful planning of one's layers, and a
deeper understanding of the system.
This patch switches us to activation-ordering: the layer subsystem now keeps
track of the order in which layers are activated, and uses that order to look
keys up, instead of the index of layers. This makes it easier to understand how
the system works, and allows us to shift to lower layers too.
It does require a bit more resources, since we can't just store a bitmap of
active layers, but need 32 bytes to store the order. We still keep the bitmap,
to make `Layer.isActive()` fast: looking up a bit in the bitmap is more
efficient than walking the active layer array, and this function is often used
in cases where speed matters.
As a side effect of the switch, a number of methods were deprecated, and similar
ones with more appropriate names were introduced. See the updated `UPGRADING.md`
document for more details.
Plugins that used the deprecated methods were updated to use the new ones.
Fixes #857.
Signed-off-by: Gergely Nagy <algernon@keyboard.io>
4 years ago
|
|
|
|
|
|
|
namespace kaleidoscope {
|
|
|
|
class LayerDumper : public Plugin {
|
Switch to activation-order for Layers
Previously, we used index-ordering for layers, meaning, we looked keys up based
on the index of active layers. This turned out to be confusing, and in many
cases, limiting, since we couldn't easily shift to a lower layer from a higher
one. As such, index-ordering required careful planning of one's layers, and a
deeper understanding of the system.
This patch switches us to activation-ordering: the layer subsystem now keeps
track of the order in which layers are activated, and uses that order to look
keys up, instead of the index of layers. This makes it easier to understand how
the system works, and allows us to shift to lower layers too.
It does require a bit more resources, since we can't just store a bitmap of
active layers, but need 32 bytes to store the order. We still keep the bitmap,
to make `Layer.isActive()` fast: looking up a bit in the bitmap is more
efficient than walking the active layer array, and this function is often used
in cases where speed matters.
As a side effect of the switch, a number of methods were deprecated, and similar
ones with more appropriate names were introduced. See the updated `UPGRADING.md`
document for more details.
Plugins that used the deprecated methods were updated to use the new ones.
Fixes #857.
Signed-off-by: Gergely Nagy <algernon@keyboard.io>
4 years ago
|
|
|
public:
|
|
|
|
LayerDumper() {}
|
|
|
|
|
|
|
|
static void dumpLayerState(uint8_t index, uint8_t layer) {
|
|
|
|
Serial.print(index);
|
|
|
|
Serial.print(" -> ");
|
|
|
|
Serial.println(layer);
|
|
|
|
}
|
|
|
|
|
|
|
|
EventHandlerResult onLayerChange() {
|
|
|
|
Serial.println("Active Layers:");
|
|
|
|
Layer.forEachActiveLayer(&dumpLayerState);
|
|
|
|
Serial.println();
|
|
|
|
return EventHandlerResult::OK;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
} // namespace kaleidoscope
|
Switch to activation-order for Layers
Previously, we used index-ordering for layers, meaning, we looked keys up based
on the index of active layers. This turned out to be confusing, and in many
cases, limiting, since we couldn't easily shift to a lower layer from a higher
one. As such, index-ordering required careful planning of one's layers, and a
deeper understanding of the system.
This patch switches us to activation-ordering: the layer subsystem now keeps
track of the order in which layers are activated, and uses that order to look
keys up, instead of the index of layers. This makes it easier to understand how
the system works, and allows us to shift to lower layers too.
It does require a bit more resources, since we can't just store a bitmap of
active layers, but need 32 bytes to store the order. We still keep the bitmap,
to make `Layer.isActive()` fast: looking up a bit in the bitmap is more
efficient than walking the active layer array, and this function is often used
in cases where speed matters.
As a side effect of the switch, a number of methods were deprecated, and similar
ones with more appropriate names were introduced. See the updated `UPGRADING.md`
document for more details.
Plugins that used the deprecated methods were updated to use the new ones.
Fixes #857.
Signed-off-by: Gergely Nagy <algernon@keyboard.io>
4 years ago
|
|
|
|
|
|
|
kaleidoscope::LayerDumper LayerDumper;
|
|
|
|
|
|
|
|
KALEIDOSCOPE_INIT_PLUGINS(Focus, LayerDumper, MouseKeys);
|
|
|
|
|
|
|
|
void setup() {
|
|
|
|
Kaleidoscope.setup();
|
|
|
|
}
|
|
|
|
|
|
|
|
void loop() {
|
|
|
|
Kaleidoscope.loop();
|
|
|
|
}
|