$(COMMON_DIR)/action_tapping.c \ | $(COMMON_DIR)/action_tapping.c \ | ||||
$(COMMON_DIR)/action_oneshot.c \ | $(COMMON_DIR)/action_oneshot.c \ | ||||
$(COMMON_DIR)/action_macro.c \ | $(COMMON_DIR)/action_macro.c \ | ||||
$(COMMON_DIR)/layer_switch.c \ | |||||
$(COMMON_DIR)/action_layer.c \ | |||||
$(COMMON_DIR)/keymap.c \ | $(COMMON_DIR)/keymap.c \ | ||||
$(COMMON_DIR)/timer.c \ | $(COMMON_DIR)/timer.c \ | ||||
$(COMMON_DIR)/print.c \ | $(COMMON_DIR)/print.c \ |
#include "command.h" | #include "command.h" | ||||
#include "debug.h" | #include "debug.h" | ||||
#include "led.h" | #include "led.h" | ||||
#include "layer_switch.h" | |||||
#include "action_layer.h" | |||||
#include "action_tapping.h" | #include "action_tapping.h" | ||||
#include "action_oneshot.h" | #include "action_oneshot.h" | ||||
#include "action_macro.h" | #include "action_macro.h" |
#include "action.h" | #include "action.h" | ||||
#include "debug.h" | #include "debug.h" | ||||
#include "util.h" | #include "util.h" | ||||
#include "layer_switch.h" | |||||
#include "action_layer.h" | |||||
/* | /* |
You should have received a copy of the GNU General Public License | You should have received a copy of the GNU General Public License | ||||
along with this program. If not, see <http://www.gnu.org/licenses/>. | along with this program. If not, see <http://www.gnu.org/licenses/>. | ||||
*/ | */ | ||||
#ifndef LAYER_SWITCH_H | |||||
#define LAYER_SWITCH_H | |||||
#ifndef ACTION_LAYER_H | |||||
#define ACTION_LAYER_H | |||||
#include <stdint.h> | #include <stdint.h> | ||||
#include "keyboard.h" | #include "keyboard.h" |
#include "timer.h" | #include "timer.h" | ||||
#include "keyboard.h" | #include "keyboard.h" | ||||
#include "bootloader.h" | #include "bootloader.h" | ||||
#include "layer_switch.h" | |||||
#include "action_layer.h" | |||||
#include "eeconfig.h" | #include "eeconfig.h" | ||||
#include "sleep_led.h" | #include "sleep_led.h" | ||||
#include "led.h" | #include "led.h" |
#include "keymap.h" | #include "keymap.h" | ||||
#include "report.h" | #include "report.h" | ||||
#include "keycode.h" | #include "keycode.h" | ||||
#include "layer_switch.h" | |||||
#include "action_layer.h" | |||||
#include "action.h" | #include "action.h" | ||||
#include "action_macro.h" | #include "action_macro.h" | ||||
#include "debug.h" | #include "debug.h" |
#include "keycode.h" | #include "keycode.h" | ||||
#include "action.h" | #include "action.h" | ||||
#include "action_macro.h" | #include "action_macro.h" | ||||
#include "layer_switch.h" | |||||
#include "util.h" | #include "util.h" | ||||
#include "keymap.h" | #include "keymap.h" | ||||
* Fn actions | * Fn actions | ||||
*/ | */ | ||||
static const uint16_t PROGMEM fn_actions[] = { | static const uint16_t PROGMEM fn_actions[] = { | ||||
ACTION_KEYMAP_TAP_TOGGLE(0), // FN0 | |||||
ACTION_KEYMAP_TAP_KEY(1, KC_SLASH), // FN1 | |||||
ACTION_KEYMAP_TAP_KEY(2, KC_SCLN), // FN2 | |||||
ACTION_KEYMAP_MOMENTARY(2), // FN3 | |||||
ACTION_LAYER_TAP_TOGGLE(0), // FN0 | |||||
ACTION_LAYER_TAP_KEY(1, KC_SLASH), // FN1 | |||||
ACTION_LAYER_TAP_KEY(2, KC_SCLN), // FN2 | |||||
ACTION_LAYER_MOMENTARY(2), // FN3 | |||||
ACTION_MACRO(LBRACKET), // FN4 | ACTION_MACRO(LBRACKET), // FN4 | ||||
ACTION_MACRO(RBRACKET), // FN5 | ACTION_MACRO(RBRACKET), // FN5 | ||||
ACTION_MACRO(DUMMY), // FN6 | ACTION_MACRO(DUMMY), // FN6 | ||||
* No need to edit. | * No need to edit. | ||||
*/ | */ | ||||
#define KEYMAPS_SIZE (sizeof(keymaps) / sizeof(keymaps[0])) | #define KEYMAPS_SIZE (sizeof(keymaps) / sizeof(keymaps[0])) | ||||
#define OVERLAYS_SIZE (sizeof(overlays) / sizeof(overlays[0])) | |||||
#define FN_ACTIONS_SIZE (sizeof(fn_actions) / sizeof(fn_actions[0])) | #define FN_ACTIONS_SIZE (sizeof(fn_actions) / sizeof(fn_actions[0])) | ||||
/* 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) | ||||
{ | { | ||||
/* Overlay: 16-31(OVERLAY_BIT(0x10) | overlay_layer) */ | |||||
if (layer & OVERLAY_BIT) { | |||||
layer &= OVERLAY_MASK; | |||||
if (layer < OVERLAYS_SIZE) { | |||||
return pgm_read_byte(&overlays[(layer)][(key.row)][(key.col)]); | |||||
} else { | |||||
return KC_TRANSPARENT; | |||||
} | |||||
} | |||||
/* Keymap: 0-15 */ | |||||
else { | |||||
if (layer < KEYMAPS_SIZE) { | |||||
return pgm_read_byte(&keymaps[(layer)][(key.row)][(key.col)]); | |||||
} else { | |||||
// fall back to layer 0 | |||||
return pgm_read_byte(&keymaps[0][(key.row)][(key.col)]); | |||||
} | |||||
if (layer < KEYMAPS_SIZE) { | |||||
return pgm_read_byte(&keymaps[(layer)][(key.row)][(key.col)]); | |||||
} else { | |||||
// fall back to layer 0 | |||||
return pgm_read_byte(&keymaps[0][(key.row)][(key.col)]); | |||||
} | } | ||||
} | } | ||||
void matrix_init(void) | void matrix_init(void) | ||||
{ | { | ||||
print_enable = true; | |||||
// debug_enable = true; | |||||
// debug_matrix = true; | |||||
PC98_RST_DDR |= (1<<PC98_RST_BIT); | PC98_RST_DDR |= (1<<PC98_RST_BIT); | ||||
PC98_RDY_DDR |= (1<<PC98_RDY_BIT); | PC98_RDY_DDR |= (1<<PC98_RDY_BIT); | ||||
PC98_RTY_DDR |= (1<<PC98_RTY_BIT); | PC98_RTY_DDR |= (1<<PC98_RTY_BIT); |
#include "keycode.h" | #include "keycode.h" | ||||
#include "action.h" | #include "action.h" | ||||
#include "action_macro.h" | #include "action_macro.h" | ||||
#include "layer_switch.h" | |||||
#include "report.h" | #include "report.h" | ||||
#include "host.h" | #include "host.h" | ||||
#include "print.h" | #include "print.h" |
#include "keycode.h" | #include "keycode.h" | ||||
#include "action.h" | #include "action.h" | ||||
#include "action_macro.h" | #include "action_macro.h" | ||||
#include "layer_switch.h" | |||||
#include "report.h" | #include "report.h" | ||||
#include "host.h" | #include "host.h" | ||||
#include "print.h" | #include "print.h" | ||||
}; | }; | ||||
static const uint8_t PROGMEM overlays[][MATRIX_ROWS][MATRIX_COLS] = {}; | |||||
/* | /* | ||||
* Fn action definition | * Fn action definition | ||||
*/ | */ | ||||
#endif | #endif | ||||
#define KEYMAPS_SIZE (sizeof(keymaps) / sizeof(keymaps[0])) | #define KEYMAPS_SIZE (sizeof(keymaps) / sizeof(keymaps[0])) | ||||
#define OVERLAYS_SIZE (sizeof(overlays) / sizeof(overlays[0])) | |||||
#define FN_ACTIONS_SIZE (sizeof(fn_actions) / sizeof(fn_actions[0])) | #define FN_ACTIONS_SIZE (sizeof(fn_actions) / sizeof(fn_actions[0])) | ||||
/* 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) | ||||
{ | { | ||||
/* Overlay: 16-31(OVERLAY_BIT(0x10) | overlay_layer) */ | |||||
if (layer & OVERLAY_BIT) { | |||||
layer &= OVERLAY_MASK; | |||||
if (layer < OVERLAYS_SIZE) { | |||||
return pgm_read_byte(&overlays[(layer)][(key.row)][(key.col)]); | |||||
} else { | |||||
// XXX: this may cuaes bootlaoder_jump incositent fail. | |||||
//debug("key_to_keycode: overlay "); debug_dec(layer); debug(" is invalid.\n"); | |||||
return KC_TRANSPARENT; | |||||
} | |||||
} | |||||
/* Keymap: 0-15 */ | |||||
else { | |||||
if (layer < KEYMAPS_SIZE) { | |||||
return pgm_read_byte(&keymaps[(layer)][(key.row)][(key.col)]); | |||||
} else { | |||||
// XXX: this may cuaes bootlaoder_jump incositent fail. | |||||
//debug("key_to_keycode: base "); debug_dec(layer); debug(" is invalid.\n"); | |||||
// fall back to layer 0 | |||||
return pgm_read_byte(&keymaps[0][(key.row)][(key.col)]); | |||||
} | |||||
if (layer < KEYMAPS_SIZE) { | |||||
return pgm_read_byte(&keymaps[(layer)][(key.row)][(key.col)]); | |||||
} else { | |||||
return pgm_read_byte(&keymaps[0][(key.row)][(key.col)]); | |||||
} | } | ||||
} | } | ||||