2011-07-20 15:32:52 +00:00
/*
Copyright 2011 Jun Wako < wakojun @ gmail . com >
This program is free software : you can redistribute it and / or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation , either version 2 of the License , or
( at your option ) any later version .
This program is distributed in the hope that it will be useful ,
but WITHOUT ANY WARRANTY ; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
GNU General Public License for more details .
You should have received a copy of the GNU General Public License
along with this program . If not , see < http : //www.gnu.org/licenses/>.
*/
2010-10-09 16:50:36 +00:00
/*
2010-10-26 12:32:45 +00:00
* Keymap for PFU HHKB Pro
2010-10-09 16:50:36 +00:00
*/
2010-10-27 11:51:45 +00:00
# include <stdint.h>
2010-10-13 13:13:41 +00:00
# include <stdbool.h>
2010-10-09 16:50:36 +00:00
# include <avr/pgmspace.h>
2011-02-10 06:51:30 +00:00
# include "host.h"
2010-10-26 12:32:45 +00:00
# include "usb_keycodes.h"
2010-10-23 16:17:26 +00:00
# include "print.h"
2010-10-26 12:32:45 +00:00
# include "debug.h"
2010-10-27 11:51:45 +00:00
# include "util.h"
2011-02-21 16:21:53 +00:00
# include "keymap.h"
2010-10-26 12:32:45 +00:00
2010-10-09 16:50:36 +00:00
2011-01-06 06:18:55 +00:00
// Convert physical keyboard layout to matrix array.
// This is a macro to define keymap easily in keyboard layout form.
2010-10-26 12:32:45 +00:00
# define KEYMAP( \
2011-09-17 13:39:50 +00:00
K31 , K30 , K00 , K10 , K11 , K20 , K21 , K40 , K41 , K60 , K61 , K70 , K71 , K50 , K51 , \
K32 , K01 , K02 , K13 , K12 , K23 , K22 , K42 , K43 , K62 , K63 , K73 , K72 , K52 , \
K33 , K04 , K03 , K14 , K15 , K24 , K25 , K45 , K44 , K65 , K64 , K74 , K53 , \
K34 , K05 , K06 , K07 , K16 , K17 , K26 , K46 , K66 , K76 , K75 , K55 , K54 , \
K35 , K36 , K37 , K57 , K56 \
2010-10-26 12:32:45 +00:00
) \
{ \
2011-09-17 13:39:50 +00:00
{ KB_ # # K00 , KB_ # # K01 , KB_ # # K02 , KB_ # # K03 , KB_ # # K04 , KB_ # # K05 , KB_ # # K06 , KB_ # # K07 } , \
{ KB_ # # K10 , KB_ # # K11 , KB_ # # K12 , KB_ # # K13 , KB_ # # K14 , KB_ # # K15 , KB_ # # K16 , KB_ # # K17 } , \
{ KB_ # # K20 , KB_ # # K21 , KB_ # # K22 , KB_ # # K23 , KB_ # # K24 , KB_ # # K25 , KB_ # # K26 , KB_NO } , \
{ KB_ # # K30 , KB_ # # K31 , KB_ # # K32 , KB_ # # K33 , KB_ # # K34 , KB_ # # K35 , KB_ # # K36 , KB_ # # K37 } , \
{ KB_ # # K40 , KB_ # # K41 , KB_ # # K42 , KB_ # # K43 , KB_ # # K44 , KB_ # # K45 , KB_ # # K46 , KB_NO } , \
{ KB_ # # K50 , KB_ # # K51 , KB_ # # K52 , KB_ # # K53 , KB_ # # K54 , KB_ # # K55 , KB_ # # K56 , KB_ # # K57 } , \
{ KB_ # # K60 , KB_ # # K61 , KB_ # # K62 , KB_ # # K63 , KB_ # # K64 , KB_ # # K65 , KB_ # # K66 , KB_NO } , \
{ KB_ # # K70 , KB_ # # K71 , KB_ # # K72 , KB_ # # K73 , KB_ # # K74 , KB_ # # K75 , KB_ # # K76 , KB_NO } \
2010-10-26 12:32:45 +00:00
}
2010-10-29 06:17:18 +00:00
# define KEYCODE(layer, row, col) (pgm_read_byte(&keymaps[(layer)][(row)][(col)]))
2010-10-09 16:50:36 +00:00
2010-10-13 13:13:41 +00:00
2011-01-06 06:18:55 +00:00
// Assign Fn key(0-7) to a layer to which switch with the Fn key pressed.
static const uint8_t PROGMEM fn_layer [ ] = {
2011-01-13 07:39:49 +00:00
0 , // Fn0
1 , // Fn1
2 , // Fn2
3 , // Fn3
2011-09-17 13:39:50 +00:00
3 , // Fn4
4 , // Fn5
2011-01-13 07:39:49 +00:00
0 , // Fn6
2011-02-13 14:58:12 +00:00
0 // Fn7
2011-01-06 06:18:55 +00:00
} ;
2010-10-25 06:17:40 +00:00
2011-01-06 06:18:55 +00:00
// Assign Fn key(0-7) to a keycode sent when release Fn key without use of the layer.
// See layer.c for details.
2010-10-23 16:17:26 +00:00
static const uint8_t PROGMEM fn_keycode [ ] = {
2011-01-13 07:39:49 +00:00
KB_NO , // Fn0
KB_NO , // Fn1
KB_SLSH , // Fn2
KB_SCLN , // Fn3
2011-09-17 13:39:50 +00:00
KB_NO , // Fn4
KB_SPC , // Fn5
2011-01-13 07:39:49 +00:00
KB_NO , // Fn6
KB_NO // Fn7
2010-10-13 13:13:41 +00:00
} ;
2010-10-23 16:17:26 +00:00
static const uint8_t PROGMEM keymaps [ ] [ MATRIX_ROWS ] [ MATRIX_COLS ] = {
2010-10-26 12:32:45 +00:00
/* Layer 0: Default Layer
* , - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - .
* | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` |
* | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
* | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Backs |
* | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
2010-11-16 05:56:06 +00:00
* | Contro | A | S | D | F | G | H | J | K | L | Fn3 | ' | Return |
2010-10-26 12:32:45 +00:00
* | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
2010-11-16 05:56:06 +00:00
* | Shift | Z | X | C | V | B | N | M | , | . | Fn2 | Shift | Fn1 |
2010-10-26 12:32:45 +00:00
* ` - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - '
2011-02-13 14:58:12 +00:00
* | Gui | Alt | Fn5 | Alt | Fn4 |
2010-10-26 12:32:45 +00:00
* ` - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - '
*/
2011-09-17 13:39:50 +00:00
KEYMAP ( ESC , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 , MINS , EQL , BSLS , GRV , \
TAB , Q , W , E , R , T , Y , U , I , O , P , LBRC , RBRC , BSPC , \
LCTL , A , S , D , F , G , H , J , K , L , FN3 , QUOT , ENT , \
LSFT , Z , X , C , V , B , N , M , COMM , DOT , FN2 , RSFT , FN1 , \
LGUI , LALT , FN5 , RALT , FN4 ) ,
2010-10-26 12:32:45 +00:00
/* Layer 1: HHKB mode (HHKB Fn)
* , - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - .
2010-11-18 13:35:49 +00:00
* | Esc | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Ins | Del |
2010-10-26 12:32:45 +00:00
* | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
* | Caps | | | | | | | | Psc | Slk | Pus | Up | | Backs |
* | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
2011-01-02 14:52:13 +00:00
* | Contro | VoD | VoU | Mut | | | * | / | Hom | PgU | Lef | Rig | Enter |
2010-10-26 12:32:45 +00:00
* | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
* | Shift | | | | | | + | - | End | PgD | Dow | Shift | xxx |
* ` - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - '
2010-10-28 06:43:51 +00:00
* | Gui | Alt | Space | Alt | xxx |
2010-10-26 12:32:45 +00:00
* ` - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - '
*/
2011-09-17 13:39:50 +00:00
KEYMAP ( ESC , F1 , F2 , F3 , F4 , F5 , F6 , F7 , F8 , F9 , F10 , F11 , F12 , INS , DEL , \
CAPS , NO , NO , NO , NO , NO , NO , NO , PSCR , SLCK , BRK , UP , NO , BSPC , \
LCTL , VOLD , VOLU , MUTE , NO , NO , PAST , PSLS , HOME , PGUP , LEFT , RGHT , ENT , \
LSFT , NO , NO , NO , NO , NO , PPLS , PMNS , END , PGDN , DOWN , RSFT , FN1 , \
LGUI , LALT , SPC , RALT , FN7 ) ,
2010-10-26 12:32:45 +00:00
2010-11-16 05:56:06 +00:00
/* Layer 2: Vi mode (Slash)
2010-10-26 12:32:45 +00:00
* , - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - .
* | Esc | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Ins | Del |
* | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
* | Tab | Hom | PgD | Up | PgU | End | Hom | PgD | PgUlEnd | | | | Backs |
* | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
2010-11-16 05:56:06 +00:00
* | Contro | | Lef | Dow | Rig | | Lef | Dow | Up | Rig | | | Return |
2010-10-26 12:32:45 +00:00
* | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
2010-11-16 05:56:06 +00:00
* | Shift | | | | | | Hom | PgD | PgUlEnd | xxx | Shift | |
2010-10-26 12:32:45 +00:00
* ` - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - '
2010-10-27 11:51:45 +00:00
* | Gui | Alt | Space | Alt | Gui |
2010-10-26 12:32:45 +00:00
* ` - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - '
*/
2011-09-17 13:39:50 +00:00
KEYMAP ( ESC , F1 , F2 , F3 , F4 , F5 , F6 , F7 , F8 , F9 , F10 , F11 , F12 , INS , DEL , \
TAB , HOME , PGDN , UP , PGUP , END , HOME , PGDN , PGUP , END , NO , NO , NO , BSPC , \
LCTL , NO , LEFT , DOWN , RGHT , NO , LEFT , DOWN , UP , RGHT , NO , NO , ENT , \
LSFT , NO , NO , NO , NO , NO , HOME , PGDN , PGUP , END , FN2 , RSFT , NO , \
LGUI , LALT , SPC , RALT , RGUI ) ,
2010-10-26 12:32:45 +00:00
/* Layer 3: Mouse mode (Semicolon)
* , - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - .
2010-10-28 06:43:51 +00:00
* | Esc | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Ins | Del |
2010-10-26 12:32:45 +00:00
* | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
2010-11-03 08:33:20 +00:00
* | Tab | MwL | MwU | McU | MwD | MwR | MwL | MwD | MwU | MwR | | | | Backs |
2010-10-26 12:32:45 +00:00
* | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
* | Contro | | McL | McD | McR | | McL | McD | McU | McR | xxx | | Return |
* | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
2010-11-16 05:56:06 +00:00
* | Shift | Mb4 | Mb5 | Mb1 | Mb2 | Mb3 | Mb2 | Mb1 | Mb4 | Mb5 | | Shift | |
2010-10-26 12:32:45 +00:00
* ` - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - '
* | Gui | Alt | Mb1 | Alt | Gui |
* ` - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - '
* Mc : Mouse Cursor / Mb : Mouse Button / Mw : Mouse Wheel
*/
2011-09-17 13:39:50 +00:00
# ifdef HOST_IWRAP
// iWRAP does not support mouse wheel, use these keycodes to remap as wheel
# define KB_KPPL KB_KP_PLUS
# define KB_KPMI KB_KP_MINUS
# define KB_KPAS KB_KP_ASTERISK
# define KB_KPSL KB_KP_SLASH
KEYMAP ( ESC , F1 , F2 , F3 , F4 , F5 , F6 , F7 , F8 , F9 , F10 , F11 , F12 , INS , DEL , \
TAB , KPAS , KPPL , MS_U , KPMI , KPSL , KPAS , KPPL , KPMI , KPSL , NO , NO , NO , BSPC , \
LCTL , NO , MS_L , MS_D , MS_R , NO , MS_L , MS_D , MS_U , MS_R , FN3 , NO , ENT , \
LSFT , BTN4 , BTN5 , BTN1 , BTN2 , BTN3 , BTN2 , BTN1 , NO , NO , NO , RSFT , NO , \
LGUI , LALT , BTN1 , RALT , FN4 ) ,
# else
KEYMAP ( ESC , F1 , F2 , F3 , F4 , F5 , F6 , F7 , F8 , F9 , F10 , F11 , F12 , INS , DEL , \
TAB , WH_L , WH_U , MS_U , WH_D , WH_R , WH_L , WH_D , WH_U , WH_R , NO , NO , NO , BSPC , \
LCTL , NO , MS_L , MS_D , MS_R , NO , MS_L , MS_D , MS_U , MS_R , FN3 , NO , ENT , \
LSFT , BTN4 , BTN5 , BTN1 , BTN2 , BTN3 , BTN2 , BTN1 , BTN4 , BTN5 , NO , RSFT , NO , \
LGUI , LALT , BTN1 , RALT , FN4 ) ,
# endif
2010-10-26 12:32:45 +00:00
/* Layer 4: Matias half keyboard style (Space)
* , - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - .
* | - | 0 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | | | | Esc |
* | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
* | Backs | P | O | I | U | Y | T | R | E | W | Q | | | Tab |
* | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
* | Contro | ; | L | K | J | H | G | F | D | S | A | Con | Control |
* | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
* | Shift | / | . | , | M | N | B | V | C | X | Z | Shift | |
* ` - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - '
* | Gui | Alt | xxxxxxxxxxxxxxxxxxxxxxx | Alt | Gui |
* ` - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - '
*/
2011-07-02 05:27:14 +00:00
/*
2011-09-17 13:39:50 +00:00
KEYMAP ( MINS , 0 , 9 , 8 , 7 , 6 , 5 , 4 , 3 , 2 , 1 , NO , NO , NO , ESC , \
BSPC , P , O , I , U , Y , T , R , E , W , Q , NO , NO , TAB , \
LCTL , SCLN , L , K , J , H , G , F , D , S , A , RCTL , RCTL , \
LSFT , SLSH , DOT , COMM , M , N , B , V , C , X , Z , RSFT , NO , \
LGUI , LALT , FN5 , RALT , RGUI )
2011-07-02 05:27:14 +00:00
*/
/* Mouse mode (Space) */
2011-09-17 13:39:50 +00:00
# ifdef HOST_IWRAP
KEYMAP ( ESC , F1 , F2 , F3 , F4 , F5 , F6 , F7 , F8 , F9 , F10 , F11 , F12 , INS , DEL , \
TAB , KPAS , KPPL , MS_U , KPMI , KPSL , KPAS , KPPL , KPMI , KPSL , NO , NO , NO , BSPC , \
LCTL , NO , MS_L , MS_D , MS_R , NO , MS_L , MS_D , MS_U , MS_R , FN3 , NO , ENT , \
LSFT , BTN4 , BTN5 , BTN1 , BTN2 , BTN3 , BTN2 , BTN1 , BTN4 , BTN5 , NO , RSFT , NO , \
LGUI , LALT , FN5 , RALT , RGUI ) ,
# else
KEYMAP ( ESC , F1 , F2 , F3 , F4 , F5 , F6 , F7 , F8 , F9 , F10 , F11 , F12 , INS , DEL , \
TAB , WH_L , WH_U , MS_U , WH_D , WH_R , WH_L , WH_D , WH_U , WH_R , NO , NO , NO , BSPC , \
LCTL , NO , MS_L , MS_D , MS_R , NO , MS_L , MS_D , MS_U , MS_R , FN3 , NO , ENT , \
LSFT , BTN4 , BTN5 , BTN1 , BTN2 , BTN3 , BTN2 , BTN1 , BTN4 , BTN5 , NO , RSFT , NO , \
LGUI , LALT , FN5 , RALT , RGUI ) ,
# endif
2010-10-09 16:50:36 +00:00
} ;
2010-10-29 06:17:18 +00:00
uint8_t keymap_get_keycode ( uint8_t layer , uint8_t row , uint8_t col )
2010-10-09 16:50:36 +00:00
{
2010-10-29 06:17:18 +00:00
return KEYCODE ( layer , row , col ) ;
2010-10-09 16:50:36 +00:00
}
2011-01-06 06:18:55 +00:00
uint8_t keymap_fn_layer ( uint8_t fn_bits )
2010-10-23 16:17:26 +00:00
{
2010-10-29 06:17:18 +00:00
return pgm_read_byte ( & fn_layer [ biton ( fn_bits ) ] ) ;
2010-10-23 16:17:26 +00:00
}
2010-10-18 16:03:27 +00:00
2010-10-29 06:17:18 +00:00
uint8_t keymap_fn_keycode ( uint8_t fn_bits )
2010-10-26 12:32:45 +00:00
{
2010-10-29 06:17:18 +00:00
return pgm_read_byte ( & fn_keycode [ ( biton ( fn_bits ) ) ] ) ;
2010-10-23 16:17:26 +00:00
}