From 4d4b845cf59749c4af4f91d05c39b9196b00ab99 Mon Sep 17 00:00:00 2001 From: marksard <38324387+marksard@users.noreply.github.com> Date: Tue, 17 Jul 2018 12:08:31 +0900 Subject: [PATCH] Keymap: Modified of 'Helix five rows JIS" keymap (#3425) * Change key layout in raise-layer. * Improvement update cycle to mouse key changes. * Update the readme.md --- .../helix/rev2/keymaps/five_rows_jis/config.h | 17 + .../helix/rev2/keymaps/five_rows_jis/keymap.c | 484 +++++++++--------- .../rev2/keymaps/five_rows_jis/readme.md | 8 +- .../rev2/keymaps/five_rows_jis/readme_jp.md | 8 +- 4 files changed, 266 insertions(+), 251 deletions(-) diff --git a/keyboards/helix/rev2/keymaps/five_rows_jis/config.h b/keyboards/helix/rev2/keymaps/five_rows_jis/config.h index b4390551e..f0904a6f9 100644 --- a/keyboards/helix/rev2/keymaps/five_rows_jis/config.h +++ b/keyboards/helix/rev2/keymaps/five_rows_jis/config.h @@ -114,4 +114,21 @@ along with this program. If not, see . #define USB_MAX_POWER_CONSUMPTION 100 #endif +#ifdef MOUSEKEY_ENABLE + #undef MOUSEKEY_INTERVAL + #define MOUSEKEY_INTERVAL 0 + + #undef MOUSEKEY_TIME_TO_MAX + #define MOUSEKEY_TIME_TO_MAX 150 + + #undef MOUSEKEY_MAX_SPEED + #define MOUSEKEY_MAX_SPEED 3 + + #undef MOUSEKEY_MOVE_DELTA + #define MOUSEKEY_MOVE_DELTA 5 + + #undef MOUSEKEY_DELAY + #define MOUSEKEY_DELAY 0 +#endif + #endif /* CONFIG_USER_H */ diff --git a/keyboards/helix/rev2/keymaps/five_rows_jis/keymap.c b/keyboards/helix/rev2/keymaps/five_rows_jis/keymap.c index 480ae2f03..eeb22df7a 100644 --- a/keyboards/helix/rev2/keymaps/five_rows_jis/keymap.c +++ b/keyboards/helix/rev2/keymaps/five_rows_jis/keymap.c @@ -159,9 +159,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Raise JIS Normal * ,-----------------------------------------. ,-----------------------------------------. - * | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 | + * | | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F11 | * |------+------+------+------+------+------| |------+------+------+------+------+------| - * | | | | | | | | | | | | Home |PageUp| + * | | | | | | | | F12 | | | | Home |PageUp| * |------+------+------+------+------+------| |------+------+------+------+------+------| * | | | | | | | | | | | | End |PageDn| * |------+------+------+------+------+------+------+------+------+------+------+------+------+------| @@ -171,8 +171,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-------------------------------------------------------------------------------------------------' */ [_RAISE] = LAYOUT( \ - KC_F1 , KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, \ - _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_HOME, KC_PGUP, \ + _______, KC_F1 , KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, \ + _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_F12 , XXXXXXX, XXXXXXX, XXXXXXX, KC_HOME, KC_PGUP, \ _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_END, KC_PGDN, \ _______, KC_BTN1, KC_BTN2, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MS_U, XXXXXXX, \ _______, _______, _______, _______, XXXXXXX, XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, KC_MS_L, KC_MS_D, KC_MS_R \ @@ -180,9 +180,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Raise JIS Exchange L and R * ,-----------------------------------------. ,-----------------------------------------. - * | F7 | F8 | F9 | F10 | F11 | F12 | | F1 | F2 | F3 | F4 | F5 | F6 | + * | F6 | F7 | F8 | F9 | F10 | F11 | | | F1 | F2 | F3 | F4 | F5 | * |------+------+------+------+------+------| |------+------+------+------+------+------| - * | | | | | | | | | | | | | | + * | F12 | | | | | | | | | | | | | * |------+------+------+------+------+------| |------+------+------+------+------+------| * | | | | | | | | | | | | | | * |------+------+------+------+------+------+------+------+------+------+------+------+------+------| @@ -192,8 +192,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-------------------------------------------------------------------------------------------------' */ [_RAI_E] = LAYOUT( \ - KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F1 , KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, \ - XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ + KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, _______, KC_F1 , KC_F2, KC_F3, KC_F4, KC_F5, \ + KC_F12, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MS_U, XXXXXXX, XXXXXXX, _______, KC_BTN1, KC_BTN2, XXXXXXX, XXXXXXX, XXXXXXX, \ _______, _______, XXXXXXX, _______, KC_MS_L, KC_MS_D, KC_MS_R, _______, _______, _______, _______, XXXXXXX, _______, XXXXXXX \ @@ -221,194 +221,46 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ), }; -#elif HELIX_ROWS == 4 - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - // Do it yourself :) -}; - #else #error "undefined keymaps" #endif +#ifdef SSD1306OLED +char keylog[20] = {}; +const char code_to_name[60] = { + ' ', ' ', ' ', ' ', 'a', 'b', 'c', 'd', 'e', 'f', + 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', + 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', + '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', + 'R', 'E', 'B', 'T', ' ', '-', ' ', '@', ' ', ' ', + ' ', ';', ':', ' ', ',', '.', '/', ' ', ' ', ' '}; + +inline void set_keylog(uint16_t keycode, keyrecord_t *record) +{ + char name = ' '; + uint8_t leds = host_keyboard_leds(); + + if (keycode < 60) + { + name = code_to_name[keycode]; + } + + // update keylog + snprintf(keylog, sizeof(keylog), "\n%dx%d %2x %c %c %c %c", + record->event.key.row, + record->event.key.col, + keycode, + name, + (leds & (1<event.pressed) { - #ifdef AUDIO_ENABLE - PLAY_SONG(tone_qwerty); - #endif - persistent_default_layer_set(1UL<<_BASE); - } - return false; - break; - case BAS_E: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - PLAY_SONG(tone_qwerty); - #endif - persistent_default_layer_set(1UL<<_BAS_E); - } - return false; - break; - case LOWER: - toggle_lower_raise_layer(record->event.pressed, _LOWER, _LOWER, _RAISE); - return false; - break; - case LOW_E: - toggle_lower_raise_layer(record->event.pressed, _LOW_E, _LOW_E, _RAI_E); - return false; - break; - case RAISE: - toggle_lower_raise_layer(record->event.pressed, _RAISE, _LOWER, _RAISE); - return false; - break; - case RAI_E: - toggle_lower_raise_layer(record->event.pressed, _RAI_E, _LOW_E, _RAI_E); - return false; - break; - case ADJUST: - if (record->event.pressed) { - #ifdef RGBLIGHT_ENABLE - rgblight_mode(14); - #endif - layer_on(_ADJUST); - } else { - #ifdef RGBLIGHT_ENABLE - rgblight_mode(RGB_current_mode); - #endif - layer_off(_ADJUST); - } - return false; - break; - //led operations - RGB mode change now updates the RGB_current_mode to allow the right RGB mode to be set after reactive keys are released - case RGB_MOD: - #ifdef RGBLIGHT_ENABLE - if (record->event.pressed) { - rgblight_mode(RGB_current_mode); - rgblight_step(); - RGB_current_mode = rgblight_config.mode; - } - #endif - return false; - break; - case EISU: - if (record->event.pressed) { - if (keymap_config.swap_lalt_lgui==false) { - register_code(KC_LANG2); - } else { - SEND_STRING(SS_LALT("`")); - } - } else { - unregister_code(KC_LANG2); - } - return false; - break; - #ifdef KANA_ENABLE - case KANA: - if (record->event.pressed) { - if(keymap_config.swap_lalt_lgui==false){ - register_code(KC_LANG1); - }else{ - SEND_STRING(SS_LALT("`")); - } - } else { - unregister_code(KC_LANG1); - } - return false; - break; - #endif - case RGBRST: - #ifdef RGBLIGHT_ENABLE - if (record->event.pressed) { - eeconfig_update_rgblight_default(); - rgblight_enable(); - RGB_current_mode = rgblight_config.mode; - } - #endif - break; - } - - return true; - // return process_layer_control(keycode, record, false) ? process_layer_control(keycode, record, true) : true; -} - -void matrix_init_user(void) { - #ifdef AUDIO_ENABLE - startup_user(); - #endif - #ifdef RGBLIGHT_ENABLE - RGB_current_mode = rgblight_config.mode; - #endif - //SSD1306 OLED init, make sure to add #define SSD1306OLED in config.h - #ifdef SSD1306OLED - TWI_Init(TWI_BIT_PRESCALE_1, TWI_BITLENGTH_FROM_FREQ(1, 800000)); - iota_gfx_init(!has_usb()); // turns on the display - #endif -} - - -#ifdef AUDIO_ENABLE void startup_user() { @@ -431,8 +283,168 @@ void music_scale_user(void) PLAY_SONG(music_scale); } +#else +float tone_qwerty; +float music_scale; +#define PLAY_SONG(tone) #endif +// define variables for reactive RGB +int RGB_current_mode; +#ifdef ADJUST_MACRO_ENABLE +// Setting ADJUST layer RGB back to default +void update_tri_layer_RGB(uint8_t layer1, uint8_t layer2, uint8_t layer3) { + if (IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2)) { + RGBLIGHT(RGB_current_mode); + layer_on(layer3); + } else { + layer_off(layer3); + } +} +#define ADJUST_MACRO(layer1, layer2, layer3) update_tri_layer_RGB(layer1, layer2, layer3) +#else +#define ADJUST_MACRO(layer1, layer2, layer3) +#endif + +#ifdef RGBLIGHT_ENABLE +#define RGBLIGHT(mode) rgblight_mode(mode) +#else +#define RGBLIGHT(mode) +#endif + + +inline void persistent_default_layer_set(uint16_t default_layer) { + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} + +bool TOG_STATUS = false; + +void toggle_lower_raise_layer(bool pressed, uint16_t dist_layer, uint16_t lower_layer, uint16_t raise_layer) { + if (pressed) { + //not sure how to have keyboard check mode and set it to a variable, so my work around + //uses another variable that would be set to true after the first time a reactive key is pressed. + if (!TOG_STATUS) { //TOG_STATUS checks is another reactive key currently pressed, only changes RGB mode if returns false + TOG_STATUS = !TOG_STATUS; + #ifdef RGBLIGHT_ENABLE + rgblight_mode((dist_layer == _LOWER || dist_layer == _LOW_E) ? 16 : 15); + #endif + } + + layer_on(dist_layer); + ADJUST_MACRO(lower_layer, raise_layer, _ADJUST); + } else { + RGBLIGHT(RGB_current_mode); // revert RGB to initial mode prior to RGB mode change + TOG_STATUS = false; + layer_off(dist_layer); + ADJUST_MACRO(lower_layer, raise_layer, _ADJUST); + } +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + #ifdef SSD1306OLED + if (record->event.pressed) { + set_keylog(keycode, record); + } + #endif + + switch (keycode) { + case BASE: + if (record->event.pressed) { + PLAY_SONG(tone_qwerty); + persistent_default_layer_set(1UL<<_BASE); + } + break; + case BAS_E: + if (record->event.pressed) { + PLAY_SONG(tone_qwerty); + persistent_default_layer_set(1UL<<_BAS_E); + } + break; + case LOWER: + toggle_lower_raise_layer(record->event.pressed, _LOWER, _LOWER, _RAISE); + break; + case LOW_E: + toggle_lower_raise_layer(record->event.pressed, _LOW_E, _LOW_E, _RAI_E); + break; + case RAISE: + toggle_lower_raise_layer(record->event.pressed, _RAISE, _LOWER, _RAISE); + break; + case RAI_E: + toggle_lower_raise_layer(record->event.pressed, _RAI_E, _LOW_E, _RAI_E); + break; + case ADJUST: + if (record->event.pressed) { + RGBLIGHT(14); + layer_on(_ADJUST); + } else { + RGBLIGHT(RGB_current_mode); + layer_off(_ADJUST); + } + break; + //led operations - RGB mode change now updates the RGB_current_mode to allow the right RGB mode to be set after reactive keys are released + case RGB_MOD: + #ifdef RGBLIGHT_ENABLE + if (record->event.pressed) { + rgblight_mode(RGB_current_mode); + rgblight_step(); + RGB_current_mode = rgblight_config.mode; + } + #endif + break; + case EISU: + if (record->event.pressed) { + if (keymap_config.swap_lalt_lgui==false) { + register_code(KC_LANG2); + } else { + SEND_STRING(SS_LALT("`")); + } + } else { + unregister_code(KC_LANG2); + } + break; + #ifdef KANA_ENABLE + case KANA: + if (record->event.pressed) { + if(keymap_config.swap_lalt_lgui==false){ + register_code(KC_LANG1); + }else{ + SEND_STRING(SS_LALT("`")); + } + } else { + unregister_code(KC_LANG1); + } + break; + #endif + case RGBRST: + #ifdef RGBLIGHT_ENABLE + if (record->event.pressed) { + eeconfig_update_rgblight_default(); + rgblight_enable(); + RGB_current_mode = rgblight_config.mode; + } + #endif + break; + default: + return true; + } + + return false; +} + +void matrix_init_user(void) { + #ifdef AUDIO_ENABLE + startup_user(); + #endif + #ifdef RGBLIGHT_ENABLE + RGB_current_mode = rgblight_config.mode; + #endif + //SSD1306 OLED init, make sure to add #define SSD1306OLED in config.h + #ifdef SSD1306OLED + TWI_Init(TWI_BIT_PRESCALE_1, TWI_BITLENGTH_FROM_FREQ(1, 800000)); + iota_gfx_init(!has_usb()); // turns on the display + #endif +} //SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h #ifdef SSD1306OLED @@ -441,7 +453,7 @@ void matrix_scan_user(void) { iota_gfx_task(); // this is what updates the display continuously } -void matrix_update(struct CharacterMatrix *dest, +inline void matrix_update(struct CharacterMatrix *dest, const struct CharacterMatrix *source) { if (memcmp(dest->display, source->display, sizeof(dest->display))) { memcpy(dest->display, source->display, sizeof(dest->display)); @@ -459,76 +471,62 @@ void matrix_update(struct CharacterMatrix *dest, #define L_RAI_E (1<<_RAI_E) #define L_ADJUST_TRIE (L_ADJUST|L_RAI_E|L_LOW_E) -static void render_logo(struct CharacterMatrix *matrix) { +const char helix_logo[]={ + 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,0x92,0x93,0x94, + 0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,0xb4, + 0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0,0xd1,0xd2,0xd3,0xd4, + 0}; +inline void render_logo(struct CharacterMatrix *matrix) { - static char logo[]={ - 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,0x92,0x93,0x94, - 0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,0xb4, - 0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0,0xd1,0xd2,0xd3,0xd4, - 0}; - matrix_write(matrix, logo); - //matrix_write_P(&matrix, PSTR(" Split keyboard kit")); + matrix_write(matrix, helix_logo); } - - -void render_status(struct CharacterMatrix *matrix) { +const char mac_win_logo[][2][3]={{{0x95,0x96,0},{0xb5,0xb6,0}},{{0x97,0x98,0},{0xb7,0xb8,0}}}; +inline void render_status(struct CharacterMatrix *matrix) { // Render to mode icon - static char logo[][2][3]={{{0x95,0x96,0},{0xb5,0xb6,0}},{{0x97,0x98,0},{0xb7,0xb8,0}}}; if(keymap_config.swap_lalt_lgui==false){ - matrix_write(matrix, logo[0][0]); + matrix_write(matrix, mac_win_logo[0][0]); matrix_write_P(matrix, PSTR("\n")); - matrix_write(matrix, logo[0][1]); + matrix_write(matrix, mac_win_logo[0][1]); } else { - matrix_write(matrix, logo[1][0]); + matrix_write(matrix, mac_win_logo[1][0]); matrix_write_P(matrix, PSTR("\n")); - matrix_write(matrix, logo[1][1]); + matrix_write(matrix, mac_win_logo[1][1]); } // Define layers here, Have not worked out how to have text displayed for each layer. Copy down the number you see and add a case for it below - char buf[16]; + char buf[20]; matrix_write_P(matrix, PSTR("\nLayer: ")); - switch (layer_state) { - case L_BASE: - if (default_layer_state == (1UL<<_BAS_E)) { - matrix_write_P(matrix, PSTR("Base_Ex")); - } else { - matrix_write_P(matrix, PSTR("Base")); - } - break; - case L_RAISE: - matrix_write_P(matrix, PSTR("Raise")); - break; - case L_RAI_E: - matrix_write_P(matrix, PSTR("Raise_Ex")); - break; - case L_LOWER: - matrix_write_P(matrix, PSTR("Lower")); - break; - case L_LOW_E: - matrix_write_P(matrix, PSTR("Lower_Ex")); - break; - case L_ADJUST: - case L_ADJUST_TRI: - case L_ADJUST_TRIE: - matrix_write_P(matrix, PSTR("Adjust")); - break; - default: - snprintf(buf, sizeof(buf), "Undef-%d", (short)layer_state); - matrix_write(matrix, buf); - } + switch (layer_state) { + case L_BASE: + matrix_write_P(matrix, default_layer_state == (1UL<<_BAS_E) ? PSTR("BaseEx") : PSTR("Base")); + break; + case L_RAISE: + matrix_write_P(matrix, PSTR("Raise")); + break; + case L_RAI_E: + matrix_write_P(matrix, PSTR("RaiseEx")); + break; + case L_LOWER: + matrix_write_P(matrix, PSTR("Lower")); + break; + case L_LOW_E: + matrix_write_P(matrix, PSTR("LowerEx")); + break; + case L_ADJUST: + case L_ADJUST_TRI: + case L_ADJUST_TRIE: + matrix_write_P(matrix, PSTR("Adjust")); + break; + default: + snprintf(buf, sizeof(buf), "%d", (short)layer_state); + matrix_write(matrix, buf); + } - // Host Keyboard LED Status - char led[32]; - snprintf(led, sizeof(led), "\n%s %s %s", - (host_keyboard_leds() & (1<