]> git.donarmstrong.com Git - tmk_firmware.git/blob - converter/adb_usb/keymap.c
Fix Locking CapsLock support in ADB converter
[tmk_firmware.git] / converter / adb_usb / keymap.c
1 /*
2 Copyright 2011 Jun Wako <wakojun@gmail.com>
3
4 This program is free software: you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation, either version 2 of the License, or
7 (at your option) any later version.
8
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 GNU General Public License for more details.
13
14 You should have received a copy of the GNU General Public License
15 along with this program.  If not, see <http://www.gnu.org/licenses/>.
16 */
17
18 /*
19  * Keymap for ADB keyboard
20  */
21 #include <stdint.h>
22 #include <stdbool.h>
23 #include <avr/pgmspace.h>
24 #include "usb_keyboard.h"
25 #include "keycode.h"
26 #include "print.h"
27 #include "debug.h"
28 #include "util.h"
29 #include "keymap.h"
30
31
32 #define KEYCODE(layer, row, col) (pgm_read_byte(&keymaps[(layer)][(row)][(col)]))
33
34 #define KEYMAP_ALL( \
35     K35,  K7A,K78,K63,K76, K60,K61,K62,K64, K65,K6D,K67,K6F, K69,K6B,K71,              K7F, \
36     K32,K12,K13,K14,K15,K17,K16,K1A,K1C,K19,K1D,K1B,K18,K33, K72,K73,K74,  K47,K51,K4B,K43, \
37     K30,K0C,K0D,K0E,K0F,K11,K10,K20,K22,K1F,K23,K21,K1E,K2A, K75,K77,K79,  K59,K5B,K5C,K4E, \
38     K39,K00,K01,K02,K03,K05,K04,K26,K28,K25,K29,K27,    K24,               K56,K57,K58,K45, \
39     K38,K06,K07,K08,K09,K0B,K2D,K2E,K2B,K2F,K2C,        K7B,     K3E,      K53,K54,K55,     \
40     K36,K3A,K37,        K31,                    K7C,K7D,     K3B,K3D,K3C,  K52,    K41,K4C, \
41     /* for ISO/JIS keyboard */      \
42     K0A, /* NON-US \ and |  0x64 */ \
43     K34, /* Keypad ENTER    0x58 */ \
44     K40, /* F17             0x6C */ \
45     K44, /* F18?            0x6d */ \
46     K4F, /* F18             0x6d */ \
47     K50, /* F19             0x6e */ \
48     K5A, /* F20             0x6f */ \
49     K5D, /* INTL3(Yen)      0x89 */ \
50     K5E, /* INTL1(Ro)       0x87 */ \
51     K5F, /* Keypad Comma    0x85 */ \
52     K66, /* LANG2(Eisu)     0x91 */ \
53     K68, /* LANG1(Kana)     0x90 */ \
54     K6A, /* F16             0x6B */ \
55     K6E  /* Application     0x65 */ \
56 ) { \
57     { KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07 }, \
58     { KC_##K08, KC_##K09, KC_##K0A, KC_##K0B, KC_##K0C, KC_##K0D, KC_##K0E, KC_##K0F }, \
59     { KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17 }, \
60     { KC_##K18, KC_##K19, KC_##K1A, KC_##K1B, KC_##K1C, KC_##K1D, KC_##K1E, KC_##K1F }, \
61     { KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27 }, \
62     { KC_##K28, KC_##K29, KC_##K2A, KC_##K2B, KC_##K2C, KC_##K2D, KC_##K2E, KC_##K2F }, \
63     { KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37 }, \
64     { KC_##K38, KC_##K39, KC_##K3A, KC_##K3B, KC_##K3C, KC_##K3D, KC_##K3E, KC_NO    }, \
65     { KC_##K40, KC_##K41, KC_NO,    KC_##K43, KC_##K44, KC_##K45, KC_NO,    KC_##K47 }, \
66     { KC_NO,    KC_NO,    KC_NO,    KC_##K4B, KC_##K4C, KC_NO,    KC_##K4E, KC_##K4F }, \
67     { KC_##K50, KC_##K51, KC_##K52, KC_##K53, KC_##K54, KC_##K55, KC_##K56, KC_##K57 }, \
68     { KC_##K58, KC_##K59, KC_##K5A, KC_##K5B, KC_##K5C, KC_##K5D, KC_##K5E, KC_##K5F }, \
69     { KC_##K60, KC_##K61, KC_##K62, KC_##K63, KC_##K64, KC_##K65, KC_##K66, KC_##K67 }, \
70     { KC_##K68, KC_##K69, KC_##K6A, KC_##K6B, KC_NO,    KC_##K6D, KC_##K6E, KC_##K6F }, \
71     { KC_NO,    KC_##K71, KC_##K72, KC_##K73, KC_##K74, KC_##K75, KC_##K76, KC_##K77 }, \
72     { KC_##K78, KC_##K79, KC_##K7A, KC_##K7B, KC_##K7C, KC_##K7D, KC_NO,    KC_##K7F }  \
73 }
74
75
76
77 // Convert physical keyboard layout to matrix array.
78 // This is a macro to define keymap easily in keyboard layout form.
79 /* Apple Extended Keyboard */
80 #define KEYMAP_EXTENDED_US( \
81     K35,  K7A,K78,K63,K76, K60,K61,K62,K64, K65,K6D,K67,K6F, K69,K6B,K71,              K7F, \
82     K32,K12,K13,K14,K15,K17,K16,K1A,K1C,K19,K1D,K1B,K18,K33, K72,K73,K74,  K47,K51,K4B,K43, \
83     K30,K0C,K0D,K0E,K0F,K11,K10,K20,K22,K1F,K23,K21,K1E,K2A, K75,K77,K79,  K59,K5B,K5C,K4E, \
84     K39,K00,K01,K02,K03,K05,K04,K26,K28,K25,K29,K27,    K24,               K56,K57,K58,K45, \
85     K38,K06,K07,K08,K09,K0B,K2D,K2E,K2B,K2F,K2C,        K7B,     K3E,      K53,K54,K55,     \
86     K36,K3A,K37,        K31,                    K7C,K7D,     K3B,K3D,K3C,  K52,    K41,K4C  \
87 ) KEYMAP_ALL( \
88     K35,  K7A,K78,K63,K76, K60,K61,K62,K64, K65,K6D,K67,K6F, K69,K6B,K71,              K7F, \
89     K32,K12,K13,K14,K15,K17,K16,K1A,K1C,K19,K1D,K1B,K18,K33, K72,K73,K74,  K47,K51,K4B,K43, \
90     K30,K0C,K0D,K0E,K0F,K11,K10,K20,K22,K1F,K23,K21,K1E,K2A, K75,K77,K79,  K59,K5B,K5C,K4E, \
91     K39,K00,K01,K02,K03,K05,K04,K26,K28,K25,K29,K27,    K24,               K56,K57,K58,K45, \
92     K38,K06,K07,K08,K09,K0B,K2D,K2E,K2B,K2F,K2C,        K7B,     K3E,      K53,K54,K55,     \
93     K36,K3A,K37,        K31,                    K7C,K7D,     K3B,K3D,K3C,  K52,    K41,K4C, \
94     /* for ISO/JIS keyboard */               \
95     NONUS_BSLASH, /* NON-US \ and |  0x64 */ \
96     KP_ENTER,     /* Keypad ENTER    0x58 */ \
97     F17,          /* F17             0x6C */ \
98     F18,          /* F18?            0x6d */ \
99     F18,          /* F18             0x6d */ \
100     F19,          /* F19             0x6e */ \
101     F20,          /* F20             0x6f */ \
102     INT3,         /* INTL3(Yen)      0x89 */ \
103     INT1,         /* INTL1(Ro)       0x87 */ \
104     KP_COMMA,     /* Keypad Comma    0x85 */ \
105     LANG2,        /* LANG2(Eisu)     0x91 */ \
106     LANG1,        /* LANG1(Kana)     0x90 */ \
107     F16,          /* F16             0x6B */ \
108     APPLICATION   /* Application     0x65 */ \
109 )
110
111
112 // Assign Fn key(0-7) to a layer to which switch with the Fn key pressed.
113 static const uint8_t PROGMEM fn_layer[] = {
114     0,              // Fn0
115     0,              // Fn1
116     0,              // Fn2
117     0,              // Fn3
118     0,              // Fn4
119     0,              // Fn5
120     0,              // Fn6
121     0               // Fn7
122 };
123
124 // Assign Fn key(0-7) to a keycode sent when release Fn key without use of the layer.
125 // See layer.c for details.
126 static const uint8_t PROGMEM fn_keycode[] = {
127     KC_NO,          // Fn0
128     KC_NO,          // Fn1
129     KC_NO,          // Fn2
130     KC_NO,          // Fn3
131     KC_NO,          // Fn4
132     KC_NO,          // Fn5
133     KC_NO,          // Fn6
134     KC_NO           // Fn7
135 };
136
137 static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
138     /* Default Layer: plain keymap
139      * ,---.   ,---------------. ,---------------. ,---------------. ,-----------.             ,---.
140      * |Esc|   |F1 |F2 |F3 |F4 | |F5 |F6 |F7 |F8 | |F9 |F10|F11|F12| |PrS|ScL|Pau|             |Pwr|
141      * `---'   `---------------' `---------------' `---------------' `-----------'             `---'
142      * ,-----------------------------------------------------------. ,-----------. ,---------------.
143      * |  `|  1|  2|  3|  4|  5|  6|  7|  8|  9|  0|  -|  =|Backspa| |Ins|Hom|PgU| |NmL|  =|  /|  *|
144      * |-----------------------------------------------------------| |-----------| |---------------|
145      * |Tab  |  Q|  W|  E|  R|  T|  Y|  U|  I|  O|  P|  [|  ]|    \| |Del|End|PgD| |  7|  8|  9|  -|
146      * |-----------------------------------------------------------| `-----------' |---------------|
147      * |CapsLo|  A|  S|  D|  F|  G|  H|  J|  K|  L|  ;|  '|Return  |               |  4|  5|  6|  +|
148      * |-----------------------------------------------------------|     ,---.     |---------------|
149      * |Shift   |  Z|  X|  C|  V|  B|  N|  M|  ,|  ,|  /|Shift     |     |Up |     |  1|  2|  3|   |
150      * |-----------------------------------------------------------| ,-----------. |-----------|Ent|
151      * |Ctrl |Gui |Alt |         Space           |     |    |      | |Lef|Dow|Rig| |      0|  .|   |
152      * `-----------------------------------------------------------' `-----------' `---------------'
153      */
154     KEYMAP_EXTENDED_US(
155     ESC, F1,  F2,  F3,  F4,  F5,  F6,  F7,  F8,  F9,  F10, F11, F12,           PSCR,SLCK,PAUS,                   PWR,
156     GRV, 1,   2,   3,   4,   5,   6,   7,   8,   9,   0,   MINS,EQL, BSPC,     INS, HOME,PGUP,    NLCK,PEQL,PSLS,PAST,
157     TAB, Q,   W,   E,   R,   T,   Y,   U,   I,   O,   P,   LBRC,RBRC,BSLS,     DEL, END, PGDN,    P7,  P8,  P9,  PMNS,
158     LCAP,A,   S,   D,   F,   G,   H,   J,   K,   L,   SCLN,QUOT,     ENT,                         P4,  P5,  P6,  PPLS,
159     LSFT,Z,   X,   C,   V,   B,   N,   M,   COMM,DOT, SLSH,          RSFT,          UP,           P1,  P2,  P3,
160     LCTL,LGUI,LALT,          SPC,                               RGUI,RCTL,     LEFT,DOWN,RGHT,    P0,       PDOT,PENT
161     ),
162 };
163
164
165 uint8_t keymap_get_keycode(uint8_t layer, uint8_t row, uint8_t col)
166 {
167     return KEYCODE(layer, row, col);
168 }
169
170 uint8_t keymap_fn_layer(uint8_t index)
171 {
172     return pgm_read_byte(&fn_layer[index]);
173 }
174
175 uint8_t keymap_fn_keycode(uint8_t index)
176 {
177     return pgm_read_byte(&fn_keycode[index]);
178 }