#include "keymap_common.h" | #include "keymap_common.h" | ||||
static uint8_t keymaps_cache[KEYMAPS_COUNT][MATRIX_ROWS][MATRIX_COLS]; | static uint8_t keymaps_cache[KEYMAPS_COUNT][MATRIX_ROWS][MATRIX_COLS]; | ||||
static uint8_t last_layer_number = 1; | |||||
void keymaps_cache_init(void) | void keymaps_cache_init(void) | ||||
{ | { | ||||
for (uint8_t layer = 0; layer < KEYMAPS_COUNT; layer++) { | for (uint8_t layer = 0; layer < KEYMAPS_COUNT; layer++) { | ||||
uint8_t non_empty_key = 0; | |||||
for (uint8_t row = 0; row < MATRIX_ROWS; row++) { | for (uint8_t row = 0; row < MATRIX_ROWS; row++) { | ||||
for (uint8_t col = 0; col < MATRIX_COLS; col++) { | for (uint8_t col = 0; col < MATRIX_COLS; col++) { | ||||
if (col == 3) { | |||||
keymaps_cache[layer][row][col] = KC_FN28; | |||||
} | |||||
else if (col == 4) { | |||||
keymaps_cache[layer][row][col] = KC_FN29; | |||||
} | |||||
else { | |||||
if (layer < CONFIG_LAYER) { | |||||
#ifndef KEYMAP_IN_EEPROM_ENABLE | #ifndef KEYMAP_IN_EEPROM_ENABLE | ||||
keymaps_cache[layer][row][col] = pgm_read_byte(&keymaps[layer][row][col]); | |||||
keymaps_cache[layer][row][col] = pgm_read_byte(&keymaps[layer][row][col]); | |||||
#else | #else | ||||
keymaps_cache[layer][row][col] = eeconfig_read_keymap_key(layer, row, col); | |||||
keymaps_cache[layer][row][col] = eeconfig_read_keymap_key(layer, row, col); | |||||
#endif | #endif | ||||
if (keymaps_cache[layer][row][col] > KC_TRANSPARENT) { | |||||
non_empty_key++; | |||||
} | |||||
} | |||||
else { | |||||
keymaps_cache[layer][row][col] = pgm_read_byte(&keymaps[layer][row][col]); | |||||
} | |||||
} | |||||
} | } | ||||
} | } | ||||
if (non_empty_key) { | |||||
last_layer_number = layer; | |||||
} | |||||
} | } | ||||
} | } | ||||
uint8_t last_layer(void) | |||||
{ | |||||
return last_layer_number; | |||||
} | |||||
/* translates key to keycode */ | /* translates key to keycode */ | ||||
uint8_t keymap_key_to_keycode(uint8_t layer, key_t key) | uint8_t keymap_key_to_keycode(uint8_t layer, key_t key) | ||||
{ | { | ||||
/* translates Fn keycode to action */ | /* translates Fn keycode to action */ | ||||
action_t keymap_fn_to_action(uint8_t keycode) | action_t keymap_fn_to_action(uint8_t keycode) | ||||
{ | { | ||||
return (action_t) { | |||||
#ifndef KEYMAP_IN_EEPROM_ENABLE | #ifndef KEYMAP_IN_EEPROM_ENABLE | ||||
return (action_t) { | |||||
.code = pgm_read_word(&fn_actions[FN_INDEX(keycode)]) | .code = pgm_read_word(&fn_actions[FN_INDEX(keycode)]) | ||||
}; | |||||
#else | #else | ||||
.code = eeconfig_read_keymap_fn_action(FN_INDEX(keycode)) | |||||
uint8_t index = FN_INDEX(keycode); | |||||
if (index < RESERVED_FN) { | |||||
return (action_t) { | |||||
.code = eeconfig_read_keymap_fn_action(index) | |||||
}; | |||||
} | |||||
else { | |||||
return (action_t) { | |||||
.code = pgm_read_word(&fn_actions[index]) | |||||
}; | |||||
} | |||||
#endif | #endif | ||||
}; | |||||
} | } | ||||
#ifdef KEYMAP_IN_EEPROM_ENABLE | #ifdef KEYMAP_IN_EEPROM_ENABLE |
extern const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS]; | extern const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS]; | ||||
extern const uint16_t fn_actions[]; | extern const uint16_t fn_actions[]; | ||||
#define CONFIG_LAYER (KEYMAPS_COUNT - 1) | |||||
#define RESERVED_FN (FN_ACTIONS_COUNT - 4) | |||||
void keymaps_cache_init(void); | void keymaps_cache_init(void); | ||||
uint8_t last_layer(void); | |||||
/* TentaPad keymap definition macro | /* TentaPad keymap definition macro | ||||
*/ | */ | ||||
#define KEYMAP( \ | #define KEYMAP( \ | ||||
K1, K2, TT, TP, FN \ | |||||
K1, K2, TT \ | |||||
) { \ | ) { \ | ||||
{ KC_##K1, KC_##K2, KC_##TT, KC_##TP, KC_##FN } \ | |||||
{ KC_##K1, KC_##K2, KC_##TT } \ | |||||
} | } | ||||
#endif | #endif |
#include "keymap_common.h" | #include "keymap_common.h" | ||||
enum function_id { | enum function_id { | ||||
CONFIG_MODE = 0, | |||||
TOUCH_PROXIMITY = 0, | |||||
CONFIG_MODE, | |||||
SWITCH_LAYOUT, | SWITCH_LAYOUT, | ||||
SWITCH_BACKLIGHT | SWITCH_BACKLIGHT | ||||
}; | }; | ||||
enum { | |||||
CONFIG_LAYER = 8, | |||||
}; | |||||
// Default | // Default | ||||
#ifdef KEYMAP_SECTION_ENABLE | #ifdef KEYMAP_SECTION_ENABLE | ||||
const uint8_t keymaps[KEYMAPS_COUNT][MATRIX_ROWS][MATRIX_COLS] __attribute__ ((section (".keymap.keymaps"))) = { | const uint8_t keymaps[KEYMAPS_COUNT][MATRIX_ROWS][MATRIX_COLS] __attribute__ ((section (".keymap.keymaps"))) = { | ||||
#else | #else | ||||
const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = { | const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = { | ||||
#endif | #endif | ||||
[0] = KEYMAP( Z, X, ESC, NO, FN0 ), | |||||
[1] = KEYMAP( BTN1,BTN2,ESC, NO, FN0 ), | |||||
[2] = KEYMAP( LEFT,RGHT,ESC, NO, FN0 ), | |||||
[3] = KEYMAP( UP, DOWN,ESC, NO, FN0 ), | |||||
[4] = KEYMAP( PGUP,PGDN,ESC, NO, FN0 ), | |||||
[5] = KEYMAP( SPC, ESC, ESC, NO, FN0 ), | |||||
[CONFIG_LAYER] = KEYMAP( FN1, FN2, NO, NO, FN0 ), | |||||
[0] = KEYMAP( Z, X, ESC ), | |||||
[1] = KEYMAP( BTN1,BTN2,ESC ), | |||||
[2] = KEYMAP( LEFT,RGHT,ESC ), | |||||
[3] = KEYMAP( UP, DOWN,ESC ), | |||||
[4] = KEYMAP( PGUP,PGDN,ESC ), | |||||
[5] = KEYMAP( SPC, ESC, ESC ), | |||||
[CONFIG_LAYER] = KEYMAP( FN30, FN31, NO ) | |||||
}; | }; | ||||
/* | /* | ||||
#else | #else | ||||
const uint16_t fn_actions[] PROGMEM = { | const uint16_t fn_actions[] PROGMEM = { | ||||
#endif | #endif | ||||
[0] = ACTION_FUNCTION(CONFIG_MODE), | |||||
[1] = ACTION_FUNCTION(SWITCH_LAYOUT), | |||||
[2] = ACTION_FUNCTION(SWITCH_BACKLIGHT) | |||||
[28] = ACTION_FUNCTION(TOUCH_PROXIMITY), | |||||
[29] = ACTION_FUNCTION(CONFIG_MODE), | |||||
[30] = ACTION_FUNCTION(SWITCH_LAYOUT), | |||||
[31] = ACTION_FUNCTION(SWITCH_BACKLIGHT) | |||||
}; | }; | ||||
#ifdef KEYMAP_IN_EEPROM_ENABLE | #ifdef KEYMAP_IN_EEPROM_ENABLE | ||||
if (config_mode) { | if (config_mode) { | ||||
default_layer_set(1UL<<layer); | default_layer_set(1UL<<layer); | ||||
eeconfig_write_default_layer(1UL<<layer); | eeconfig_write_default_layer(1UL<<layer); | ||||
layer = (layer + 1) % 6; | |||||
layer = (layer + 1) % (last_layer() + 1); | |||||
} | } | ||||
} | } | ||||
break; | break; |