diff options
author | marksard <38324387+marksard@users.noreply.github.com> | 2018-07-17 05:08:31 +0200 |
---|---|---|
committer | Drashna Jaelre <drashna@live.com> | 2018-07-17 05:08:31 +0200 |
commit | 4d4b845cf59749c4af4f91d05c39b9196b00ab99 (patch) | |
tree | 47ae4934c49c7b97d2e1d75a8608287466d37df2 /keyboards/helix | |
parent | 0fab3bbde33f82301a8c5e177c3c0ceb7ad2219c (diff) | |
download | qmk_firmware-4d4b845cf59749c4af4f91d05c39b9196b00ab99.tar.gz qmk_firmware-4d4b845cf59749c4af4f91d05c39b9196b00ab99.tar.xz |
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
Diffstat (limited to 'keyboards/helix')
4 files changed, 167 insertions, 152 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 <http://www.gnu.org/licenses/>. #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,45 +221,105 @@ 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<<USB_LED_NUM_LOCK)) ? 'N' : ' ', + (leds & (1<<USB_LED_CAPS_LOCK)) ? 'C' : ' ', + (leds & (1<<USB_LED_SCROLL_LOCK)) ? 'S' : ' ' + ); +} +#endif #ifdef AUDIO_ENABLE float tone_qwerty[][2] = SONG(QWERTY_SOUND); float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); -#endif -// define variables for reactive RGB -bool TOG_STATUS = false; -int RGB_current_mode; +void startup_user() +{ + _delay_ms(20); // gets rid of tick +} -void persistent_default_layer_set(uint16_t default_layer) { - eeconfig_update_default_layer(default_layer); - default_layer_set(default_layer); +void shutdown_user() +{ + _delay_ms(150); + stop_all_notes(); } +void music_on_user(void) +{ + music_scale_user(); +} + +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)) { - #ifdef RGBLIGHT_ENABLE - rgblight_mode(RGB_current_mode); - #endif + 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 @@ -267,79 +327,60 @@ void toggle_lower_raise_layer(bool pressed, uint16_t dist_layer, uint16_t lower_ 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 - if (dist_layer == _LOWER || dist_layer == _LOW_E) { - rgblight_mode(16); - } else { - rgblight_mode(15); - } + rgblight_mode((dist_layer == _LOWER || dist_layer == _LOW_E) ? 16 : 15); #endif } layer_on(dist_layer); - #ifdef ADJUST_MACRO_ENABLE - update_tri_layer_RGB(lower_layer, raise_layer, _ADJUST); - #endif + ADJUST_MACRO(lower_layer, raise_layer, _ADJUST); } else { - #ifdef RGBLIGHT_ENABLE - rgblight_mode(RGB_current_mode); // revert RGB to initial mode prior to RGB mode change - #endif + RGBLIGHT(RGB_current_mode); // revert RGB to initial mode prior to RGB mode change TOG_STATUS = false; layer_off(dist_layer); - #ifdef ADJUST_MACRO_ENABLE - update_tri_layer_RGB(lower_layer, raise_layer, _ADJUST); - #endif + 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) { - #ifdef AUDIO_ENABLE - PLAY_SONG(tone_qwerty); - #endif + PLAY_SONG(tone_qwerty); persistent_default_layer_set(1UL<<_BASE); } - return false; break; case BAS_E: if (record->event.pressed) { - #ifdef AUDIO_ENABLE - PLAY_SONG(tone_qwerty); - #endif + PLAY_SONG(tone_qwerty); 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 + RGBLIGHT(14); layer_on(_ADJUST); } else { - #ifdef RGBLIGHT_ENABLE - rgblight_mode(RGB_current_mode); - #endif + RGBLIGHT(RGB_current_mode); 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: @@ -350,7 +391,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { RGB_current_mode = rgblight_config.mode; } #endif - return false; break; case EISU: if (record->event.pressed) { @@ -362,7 +402,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } else { unregister_code(KC_LANG2); } - return false; break; #ifdef KANA_ENABLE case KANA: @@ -375,7 +414,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } else { unregister_code(KC_LANG1); } - return false; break; #endif case RGBRST: @@ -387,10 +425,11 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } #endif break; + default: + return true; } - return true; - // return process_layer_control(keycode, record, false) ? process_layer_control(keycode, record, true) : true; + return false; } void matrix_init_user(void) { @@ -407,33 +446,6 @@ void matrix_init_user(void) { #endif } - -#ifdef AUDIO_ENABLE - -void startup_user() -{ - _delay_ms(20); // gets rid of tick -} - -void shutdown_user() -{ - _delay_ms(150); - stop_all_notes(); -} - -void music_on_user(void) -{ - music_scale_user(); -} - -void music_scale_user(void) -{ - PLAY_SONG(music_scale); -} - -#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<<USB_LED_NUM_LOCK)) ? "NUMLOCK" : " ", - (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) ? "CAPS" : " ", - (host_keyboard_leds() & (1<<USB_LED_SCROLL_LOCK)) ? "SCLK" : " "); - matrix_write(matrix, led); + matrix_write(matrix, keylog); } - void iota_gfx_task_user(void) { struct CharacterMatrix matrix; diff --git a/keyboards/helix/rev2/keymaps/five_rows_jis/readme.md b/keyboards/helix/rev2/keymaps/five_rows_jis/readme.md index 54e226b03..ca408e391 100644 --- a/keyboards/helix/rev2/keymaps/five_rows_jis/readme.md +++ b/keyboards/helix/rev2/keymaps/five_rows_jis/readme.md @@ -61,9 +61,9 @@ Raise Layer ``` ,-----------------------------------------. ,-----------------------------------------. - | 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| |------+------+------+------+------+------+------+------+------+------+------+------+------+------| @@ -113,9 +113,9 @@ Raise Layer ``` ,-----------------------------------------.,-----------------------------------------. - | F1 | F2 | F3 | F4 | F5 | F6 || F7 | F8 | F9 | F10 | F11 | F12 | + | | F1 | F2 | F3 | F4 | F5 || F6 | F7 | F8 | F9 | F10 | F11 | |------+------+------+------+------+------||------+------+------+------+------+------| - | | | | | | || | | | | | | + | | | | | | || F12 | | | | | | |------+------+------+------+------+------||------+------+------+------+------+------| | | | | | | || | | | | | | ,------+------+------+------+------+------+------||------+------+------+------+------+------+------. diff --git a/keyboards/helix/rev2/keymaps/five_rows_jis/readme_jp.md b/keyboards/helix/rev2/keymaps/five_rows_jis/readme_jp.md index 783dc9bdf..0cbdd264e 100644 --- a/keyboards/helix/rev2/keymaps/five_rows_jis/readme_jp.md +++ b/keyboards/helix/rev2/keymaps/five_rows_jis/readme_jp.md @@ -67,9 +67,9 @@ Raiseレイヤー ``` ,-----------------------------------------. ,-----------------------------------------. - | 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| |------+------+------+------+------+------+------+------+------+------+------+------+------+------| @@ -129,9 +129,9 @@ Raiseレイヤー ``` ,-----------------------------------------.,-----------------------------------------. - | F1 | F2 | F3 | F4 | F5 | F6 || F7 | F8 | F9 | F10 | F11 | F12 | + | | F1 | F2 | F3 | F4 | F5 || F6 | F7 | F8 | F9 | F10 | F11 | |------+------+------+------+------+------||------+------+------+------+------+------| - | | | | | | || | | | | | | + | | | | | | || F12 | | | | | | |------+------+------+------+------+------||------+------+------+------+------+------| | | | | | | || | | | | | | ,------+------+------+------+------+------+------||------+------+------+------+------+------+------. |