|
|
@ -21,29 +21,29 @@
|
|
|
|
#include <Kaleidoscope-Focus.h>
|
|
|
|
#include <Kaleidoscope-Focus.h>
|
|
|
|
|
|
|
|
|
|
|
|
namespace KaleidoscopePlugins {
|
|
|
|
namespace KaleidoscopePlugins {
|
|
|
|
uint16_t EEPROMKeymap::keymapBase;
|
|
|
|
uint16_t EEPROMKeymap::keymapBase;
|
|
|
|
uint8_t EEPROMKeymap::maxLayers;
|
|
|
|
uint8_t EEPROMKeymap::maxLayers;
|
|
|
|
|
|
|
|
|
|
|
|
EEPROMKeymap::EEPROMKeymap (void) {
|
|
|
|
EEPROMKeymap::EEPROMKeymap (void) {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
void
|
|
|
|
EEPROMKeymap::begin (void) {
|
|
|
|
EEPROMKeymap::begin (void) {
|
|
|
|
USE_PLUGINS (&::EEPROMSettings);
|
|
|
|
USE_PLUGINS (&::EEPROMSettings);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
void
|
|
|
|
EEPROMKeymap::reserveSpace (uint8_t layers) {
|
|
|
|
EEPROMKeymap::reserveSpace (uint8_t layers) {
|
|
|
|
maxLayers = layers;
|
|
|
|
maxLayers = layers;
|
|
|
|
keymapBase = ::EEPROMSettings.requestSlice (maxLayers * ROWS * COLS * 2);
|
|
|
|
keymapBase = ::EEPROMSettings.requestSlice (maxLayers * ROWS * COLS * 2);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
Key
|
|
|
|
Key
|
|
|
|
EEPROMKeymap::getKey (uint8_t layer, byte row, byte col) {
|
|
|
|
EEPROMKeymap::getKey (uint8_t layer, byte row, byte col) {
|
|
|
|
Key key;
|
|
|
|
Key key;
|
|
|
|
|
|
|
|
|
|
|
|
if (layer >= maxLayers)
|
|
|
|
if (layer >= maxLayers)
|
|
|
|
return Key_NoKey;
|
|
|
|
return Key_NoKey;
|
|
|
|
|
|
|
|
|
|
|
|
uint16_t pos = ((layer * ROWS * COLS) + (row * COLS) + col) * 2;
|
|
|
|
uint16_t pos = ((layer * ROWS * COLS) + (row * COLS) + col) * 2;
|
|
|
|
|
|
|
|
|
|
|
@ -51,89 +51,89 @@ namespace KaleidoscopePlugins {
|
|
|
|
key.keyCode = EEPROM.read (keymapBase + pos + 1);
|
|
|
|
key.keyCode = EEPROM.read (keymapBase + pos + 1);
|
|
|
|
|
|
|
|
|
|
|
|
return key;
|
|
|
|
return key;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
Key
|
|
|
|
Key
|
|
|
|
EEPROMKeymap::getKeyOverride (uint8_t layer, byte row, byte col) {
|
|
|
|
EEPROMKeymap::getKeyOverride (uint8_t layer, byte row, byte col) {
|
|
|
|
Key key;
|
|
|
|
Key key;
|
|
|
|
|
|
|
|
|
|
|
|
key = getKey (layer, row, col);
|
|
|
|
key = getKey (layer, row, col);
|
|
|
|
if (key == Key_Transparent)
|
|
|
|
if (key == Key_Transparent)
|
|
|
|
key = Layer.getKeyFromPROGMEM (layer, row, col);
|
|
|
|
key = Layer.getKeyFromPROGMEM (layer, row, col);
|
|
|
|
return key;
|
|
|
|
return key;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
uint16_t
|
|
|
|
uint16_t
|
|
|
|
EEPROMKeymap::base (void) {
|
|
|
|
EEPROMKeymap::base (void) {
|
|
|
|
return keymapBase;
|
|
|
|
return keymapBase;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
void
|
|
|
|
EEPROMKeymap::updateKey (uint16_t basePos, Key key) {
|
|
|
|
EEPROMKeymap::updateKey (uint16_t basePos, Key key) {
|
|
|
|
EEPROM.update (keymapBase + basePos * 2, key.flags);
|
|
|
|
EEPROM.update (keymapBase + basePos * 2, key.flags);
|
|
|
|
EEPROM.update (keymapBase + basePos * 2 + 1, key.keyCode);
|
|
|
|
EEPROM.update (keymapBase + basePos * 2 + 1, key.keyCode);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
Key
|
|
|
|
Key
|
|
|
|
EEPROMKeymap::parseKey (void) {
|
|
|
|
EEPROMKeymap::parseKey (void) {
|
|
|
|
Key key;
|
|
|
|
Key key;
|
|
|
|
|
|
|
|
|
|
|
|
key.raw = Serial.parseInt ();
|
|
|
|
key.raw = Serial.parseInt ();
|
|
|
|
|
|
|
|
|
|
|
|
return key;
|
|
|
|
return key;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
void
|
|
|
|
EEPROMKeymap::printKey (Key k) {
|
|
|
|
EEPROMKeymap::printKey (Key k) {
|
|
|
|
::Focus.printNumber (k.raw);
|
|
|
|
::Focus.printNumber (k.raw);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool
|
|
|
|
bool
|
|
|
|
EEPROMKeymap::focusKeymap (const char *command) {
|
|
|
|
EEPROMKeymap::focusKeymap (const char *command) {
|
|
|
|
if (strcmp_P (command, PSTR ("keymap.map")) != 0)
|
|
|
|
if (strcmp_P (command, PSTR ("keymap.map")) != 0)
|
|
|
|
return false;
|
|
|
|
return false;
|
|
|
|
|
|
|
|
|
|
|
|
if (Serial.peek () == '\n') {
|
|
|
|
if (Serial.peek () == '\n') {
|
|
|
|
for (uint8_t layer = 0; layer < maxLayers; layer++) {
|
|
|
|
for (uint8_t layer = 0; layer < maxLayers; layer++) {
|
|
|
|
for (uint8_t row = 0; row < ROWS; row++) {
|
|
|
|
for (uint8_t row = 0; row < ROWS; row++) {
|
|
|
|
for (uint8_t col = 0; col < COLS; col++) {
|
|
|
|
for (uint8_t col = 0; col < COLS; col++) {
|
|
|
|
Key k = getKey (layer, row, col);
|
|
|
|
Key k = getKey (layer, row, col);
|
|
|
|
|
|
|
|
|
|
|
|
printKey (k);
|
|
|
|
printKey (k);
|
|
|
|
::Focus.printSpace ();
|
|
|
|
::Focus.printSpace ();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
Serial.println ();
|
|
|
|
Serial.println ();
|
|
|
|
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
uint16_t i = 0;
|
|
|
|
uint16_t i = 0;
|
|
|
|
while ((Serial.peek () != '\n') && (i < ROWS * COLS * maxLayers)) {
|
|
|
|
while ((Serial.peek () != '\n') && (i < ROWS * COLS * maxLayers)) {
|
|
|
|
updateKey (i, parseKey ());
|
|
|
|
updateKey (i, parseKey ());
|
|
|
|
i++;
|
|
|
|
i++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool
|
|
|
|
bool
|
|
|
|
EEPROMKeymap::focusKeymapTransfer (const char *command) {
|
|
|
|
EEPROMKeymap::focusKeymapTransfer (const char *command) {
|
|
|
|
if (strcmp_P (command, PSTR ("keymap.transfer")) != 0)
|
|
|
|
if (strcmp_P (command, PSTR ("keymap.transfer")) != 0)
|
|
|
|
return false;
|
|
|
|
return false;
|
|
|
|
|
|
|
|
|
|
|
|
uint8_t layer = Serial.parseInt ();
|
|
|
|
uint8_t layer = Serial.parseInt ();
|
|
|
|
|
|
|
|
|
|
|
|
for (uint8_t row = 0; row < ROWS; row++) {
|
|
|
|
for (uint8_t row = 0; row < ROWS; row++) {
|
|
|
|
for (uint8_t col = 0; col < COLS; col++) {
|
|
|
|
for (uint8_t col = 0; col < COLS; col++) {
|
|
|
|
Key k = Layer.getKeyFromPROGMEM (layer, row, col);
|
|
|
|
Key k = Layer.getKeyFromPROGMEM (layer, row, col);
|
|
|
|
uint16_t pos = ((layer * ROWS * COLS) + (row * COLS) + col);
|
|
|
|
uint16_t pos = ((layer * ROWS * COLS) + (row * COLS) + col);
|
|
|
|
|
|
|
|
|
|
|
|
updateKey (pos, k);
|
|
|
|
updateKey (pos, k);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|