- need to define USE_LEGACY_KEYMAP to use legacy keymapled_matrix
static action_t keycode_to_action(uint8_t keycode); | static action_t keycode_to_action(uint8_t keycode); | ||||
#ifdef USE_KEYMAP_V2 | |||||
/* converts key to action */ | /* converts key to action */ | ||||
action_t action_for_key(uint8_t layer, key_t key) | action_t action_for_key(uint8_t layer, key_t key) | ||||
{ | { | ||||
return keycode_to_action(keycode); | return keycode_to_action(keycode); | ||||
} | } | ||||
} | } | ||||
#else | |||||
/* | |||||
* legacy keymap support | |||||
*/ | |||||
/* translation for legacy keymap */ | |||||
action_t action_for_key(uint8_t layer, key_t key) | |||||
{ | |||||
/* convert from legacy keycode to action */ | |||||
/* layer 16-31 indicate 'overlay' but not supported in legacy keymap */ | |||||
uint8_t keycode = keymap_get_keycode((layer & OVERLAY_MASK), key.row, key.col); | |||||
action_t action; | |||||
switch (keycode) { | |||||
case KC_FN0 ... KC_FN31: | |||||
{ | |||||
uint8_t layer = keymap_fn_layer(FN_INDEX(keycode)); | |||||
uint8_t key = keymap_fn_keycode(FN_INDEX(keycode)); | |||||
if (key) { | |||||
action.code = ACTION_KEYMAP_TAP_KEY(layer, key); | |||||
} else { | |||||
action.code = ACTION_KEYMAP_MOMENTARY(layer); | |||||
} | |||||
} | |||||
return action; | |||||
default: | |||||
return keycode_to_action(keycode); | |||||
} | |||||
} | |||||
#endif | |||||
/* Macro */ | |||||
__attribute__ ((weak)) | __attribute__ ((weak)) | ||||
const prog_macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { return MACRO_NONE; } | |||||
const prog_macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) | |||||
{ | |||||
return MACRO_NONE; | |||||
} | |||||
/* Function */ | |||||
__attribute__ ((weak)) | __attribute__ ((weak)) | ||||
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {} | |||||
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) | |||||
{ | |||||
} | |||||
action_t action; | action_t action; | ||||
switch (keycode) { | switch (keycode) { | ||||
case KC_A ... KC_EXSEL: | case KC_A ... KC_EXSEL: | ||||
case KC_LCTRL ... KC_RGUI: | |||||
action.code = ACTION_KEY(keycode); | action.code = ACTION_KEY(keycode); | ||||
break; | break; | ||||
case KC_LCTRL ... KC_LGUI: | |||||
action.code = ACTION_LMOD(keycode); | |||||
break; | |||||
case KC_RCTRL ... KC_RGUI: | |||||
action.code = ACTION_RMOD(keycode); | |||||
break; | |||||
case KC_SYSTEM_POWER ... KC_SYSTEM_WAKE: | case KC_SYSTEM_POWER ... KC_SYSTEM_WAKE: | ||||
action.code = ACTION_USAGE_SYSTEM(KEYCODE2SYSTEM(keycode)); | action.code = ACTION_USAGE_SYSTEM(KEYCODE2SYSTEM(keycode)); | ||||
break; | break; | ||||
} | } | ||||
return action; | return action; | ||||
} | } | ||||
#ifdef USE_LEGACY_KEYMAP | |||||
/* | |||||
* Legacy keymap support | |||||
* Consider using new keymap API instead. | |||||
*/ | |||||
__attribute__ ((weak)) | |||||
uint8_t keymap_key_to_keycode(uint8_t layer, key_t key) | |||||
{ | |||||
return keymap_get_keycode(layer, key.row, key.col); | |||||
} | |||||
/* Legacy keymap support */ | |||||
__attribute__ ((weak)) | |||||
action_t keymap_fn_to_action(uint8_t keycode) | |||||
{ | |||||
action_t action = { .code = ACTION_NO }; | |||||
switch (keycode) { | |||||
case KC_FN0 ... KC_FN31: | |||||
{ | |||||
uint8_t layer = keymap_fn_layer(FN_INDEX(keycode)); | |||||
uint8_t key = keymap_fn_keycode(FN_INDEX(keycode)); | |||||
if (key) { | |||||
action.code = ACTION_KEYMAP_TAP_KEY(layer, key); | |||||
} else { | |||||
action.code = ACTION_KEYMAP_MOMENTARY(layer); | |||||
} | |||||
} | |||||
return action; | |||||
default: | |||||
return action; | |||||
} | |||||
} | |||||
#endif |
#include "action.h" | #include "action.h" | ||||
#ifdef USE_KEYMAP_V2 | |||||
/* translates key to keycode | |||||
* layer: 0-15 for base layers | |||||
* 16-31 for overlays | |||||
*/ | |||||
/* 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); | ||||
#else | |||||
#warning "You are using LEGACY KEYAMP. Consider using NEW KEYMAP." | |||||
#ifdef USE_LEGACY_KEYMAP | |||||
/* | /* | ||||
* legacy keymap support | |||||
* Legacy keymap | |||||
* Consider using new keymap API above instead. | |||||
*/ | */ | ||||
/* keycode of key */ | /* keycode of key */ | ||||
__attribute__ ((deprecated)) | |||||
uint8_t keymap_get_keycode(uint8_t layer, uint8_t row, uint8_t col); | uint8_t keymap_get_keycode(uint8_t layer, uint8_t row, uint8_t col); | ||||
/* layer to move during press Fn key */ | /* layer to move during press Fn key */ | ||||
__attribute__ ((deprecated)) | |||||
uint8_t keymap_fn_layer(uint8_t fn_bits); | uint8_t keymap_fn_layer(uint8_t fn_bits); | ||||
/* keycode to send when release Fn key without using */ | /* keycode to send when release Fn key without using */ | ||||
__attribute__ ((deprecated)) | |||||
uint8_t keymap_fn_keycode(uint8_t fn_bits); | uint8_t keymap_fn_keycode(uint8_t fn_bits); | ||||
#endif | #endif | ||||
#define MATRIX_ROWS 16 | #define MATRIX_ROWS 16 | ||||
#define MATRIX_COLS 8 | #define MATRIX_COLS 8 | ||||
/* To use new keymap framework */ | |||||
#define USE_KEYMAP_V2 | |||||
/* key combination for command */ | /* key combination for command */ | ||||
#define IS_COMMAND() ( \ | #define IS_COMMAND() ( \ | ||||
host_get_first_key() == KC_CANCEL \ | host_get_first_key() == KC_CANCEL \ |
#define PRODUCT Sun keyboard converter | #define PRODUCT Sun keyboard converter | ||||
#define DESCRIPTION converts Sun keyboard protocol into USB | #define DESCRIPTION converts Sun keyboard protocol into USB | ||||
/* matrix size */ | /* matrix size */ | ||||
#define MATRIX_ROWS 16 | #define MATRIX_ROWS 16 | ||||
#define MATRIX_COLS 8 | #define MATRIX_COLS 8 | ||||
/* key combination for command */ | /* key combination for command */ | ||||
#define IS_COMMAND() ( \ | #define IS_COMMAND() ( \ | ||||
keyboard_report->mods == (MOD_BIT(KC_LALT) | MOD_BIT(KC_RALT)) || \ | keyboard_report->mods == (MOD_BIT(KC_LALT) | MOD_BIT(KC_RALT)) || \ | ||||
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ | keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ | ||||
) | ) | ||||
/* legacy keymap support */ | |||||
#define USE_LEGACY_KEYMAP | |||||
/* Boot Section Size in *BYTEs* | |||||
* Teensy halfKay 512 | |||||
* Teensy++ halfKay 1024 | |||||
* Atmel DFU loader 4096 | |||||
* LUFA bootloader 4096 | |||||
* USBaspLoader 2048 | |||||
*/ | |||||
#define BOOTLOADER_SIZE 4096 | |||||
/* Serial(USART) configuration | /* Serial(USART) configuration | ||||
* asynchronous, negative logic, 1200baud, no flow control | * asynchronous, negative logic, 1200baud, no flow control |
#define DEVICE_VER 0x0001 | #define DEVICE_VER 0x0001 | ||||
#define MANUFACTURER geekhack | #define MANUFACTURER geekhack | ||||
#define PRODUCT GH60 | #define PRODUCT GH60 | ||||
/* message strings */ | |||||
#define DESCRIPTION t.m.k. keyboard firmware for GH60 | #define DESCRIPTION t.m.k. keyboard firmware for GH60 | ||||
/* Boot Section Size in *BYTEs* | |||||
* Teensy halfKay 512 | |||||
* Teensy++ halfKay 1024 | |||||
* Atmel DFU loader 4096 | |||||
* LUFA bootloader 4096 | |||||
* USBaspLoader 2048 | |||||
*/ | |||||
#define BOOTLOADER_SIZE 4096 | |||||
/* matrix size */ | /* matrix size */ | ||||
#define MATRIX_ROWS 5 | #define MATRIX_ROWS 5 | ||||
#define MATRIX_COLS 14 | #define MATRIX_COLS 14 | ||||
/* Set 0 if need no debouncing */ | /* Set 0 if need no debouncing */ | ||||
#define DEBOUNCE 5 | #define DEBOUNCE 5 | ||||
/* To use new keymap framework */ | |||||
#define USE_KEYMAP_V2 | |||||
/* key combination for command */ | /* key combination for command */ | ||||
#define IS_COMMAND() ( \ | #define IS_COMMAND() ( \ | ||||
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ | keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ | ||||
) | ) | ||||
/* Boot Section Size in *BYTEs* | |||||
* Teensy halfKay 512 | |||||
* Teensy++ halfKay 1024 | |||||
* Atmel DFU loader 4096 | |||||
* LUFA bootloader 4096 | |||||
* USBaspLoader 2048 | |||||
*/ | |||||
#define BOOTLOADER_SIZE 4096 | |||||
/* | /* | ||||
* Boot magic keys | * Boot magic keys | ||||
* call some function by pressing key when pluging cable or powering on. | * call some function by pressing key when pluging cable or powering on. |
#define MATRIX_ROWS 8 | #define MATRIX_ROWS 8 | ||||
#define MATRIX_COLS 8 | #define MATRIX_COLS 8 | ||||
/* To use new keymap framework */ | |||||
#define USE_KEYMAP_V2 | |||||
/* | /* | ||||
* Boot magic keys | * Boot magic keys | ||||
* call some function by pressing key when pluging cable or powering on. | * call some function by pressing key when pluging cable or powering on. |
#define MATRIX_ROWS 8 | #define MATRIX_ROWS 8 | ||||
#define MATRIX_COLS 8 | #define MATRIX_COLS 8 | ||||
/* To use new keymap framework */ | |||||
#define USE_KEYMAP_V2 | |||||
/* key combination for command */ | /* key combination for command */ | ||||
#define IS_COMMAND() (keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) | #define IS_COMMAND() (keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) | ||||