]>
Commit | Line | Data |
---|---|---|
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 | // Convert physical keyboard layout to matrix array. | |
35 | // This is a macro to define keymap easily in keyboard layout form. | |
36 | /* Apple Extended Keyboard */ | |
37 | #define KEYMAP( \ | |
38 | K35, K7A,K78,K63,K76, K60,K61,K62,K64, K65,K6D,K67,K6F, K69,K6B,K71, K7F, \ | |
39 | K32,K12,K13,K14,K15,K17,K16,K1A,K1C,K19,K1D,K1B,K18,K33, K72,K73,K74, K47,K51,K4B,K43, \ | |
40 | K30,K0C,K0D,K0E,K0F,K11,K10,K20,K22,K1F,K23,K21,K1E,K2A, K75,K77,K79, K59,K5B,K5C,K4E, \ | |
41 | K39,K00,K01,K02,K03,K05,K04,K26,K28,K25,K29,K27, K24, K56,K57,K58,K45, \ | |
42 | K38,K06,K07,K08,K09,K0B,K2D,K2E,K2B,K2F,K2C, K7B, K3E, K53,K54,K55, \ | |
43 | K36,K3A,K37, K31, K3B,K3D,K3C, K52, K41,K4C \ | |
44 | ) { \ | |
45 | { KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07 }, \ | |
46 | { KC_##K08, KC_##K09, KC_NO, KC_##K0B, KC_##K0C, KC_##K0D, KC_##K0E, KC_##K0F }, \ | |
47 | { KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17 }, \ | |
48 | { KC_##K18, KC_##K19, KC_##K1A, KC_##K1B, KC_##K1C, KC_##K1D, KC_##K1E, KC_##K1F }, \ | |
49 | { KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27 }, \ | |
50 | { KC_##K28, KC_##K29, KC_##K2A, KC_##K2B, KC_##K2C, KC_##K2D, KC_##K2E, KC_##K2F }, \ | |
51 | { KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_NO, KC_##K35, KC_##K36, KC_##K37 }, \ | |
52 | { KC_##K38, KC_##K39, KC_##K3A, KC_##K3B, KC_##K3C, KC_##K3D, KC_##K3E, KC_NO }, \ | |
53 | { KC_NO, KC_##K41, KC_NO, KC_##K43, KC_NO, KC_##K45, KC_NO, KC_##K47 }, \ | |
54 | { KC_NO, KC_NO, KC_NO, KC_##K4B, KC_##K4C, KC_NO, KC_##K4E, KC_NO }, \ | |
55 | { KC_NO, KC_##K51, KC_##K52, KC_##K53, KC_##K54, KC_##K55, KC_##K56, KC_##K57 }, \ | |
56 | { KC_##K58, KC_##K59, KC_NO, KC_##K5B, KC_##K5C, KC_NO, KC_NO, KC_NO }, \ | |
57 | { KC_##K60, KC_##K61, KC_##K62, KC_##K63, KC_##K64, KC_##K65, KC_NO, KC_##K67 }, \ | |
58 | { KC_NO, KC_##K69, KC_NO, KC_##K6B, KC_NO, KC_##K6D, KC_NO, KC_##K6F }, \ | |
59 | { KC_NO, KC_##K71, KC_##K72, KC_##K73, KC_##K74, KC_##K75, KC_##K76, KC_##K77 }, \ | |
60 | { KC_##K78, KC_##K79, KC_##K7A, KC_##K7B, KC_NO, KC_NO, KC_NO, KC_##K7F } \ | |
61 | } | |
62 | ||
63 | ||
64 | // Assign Fn key(0-7) to a layer to which switch with the Fn key pressed. | |
65 | static const uint8_t PROGMEM fn_layer[] = { | |
66 | 0, // Fn0 | |
67 | 0, // Fn1 | |
68 | 0, // Fn2 | |
69 | 0, // Fn3 | |
70 | 0, // Fn4 | |
71 | 0, // Fn5 | |
72 | 0, // Fn6 | |
73 | 0 // Fn7 | |
74 | }; | |
75 | ||
76 | // Assign Fn key(0-7) to a keycode sent when release Fn key without use of the layer. | |
77 | // See layer.c for details. | |
78 | static const uint8_t PROGMEM fn_keycode[] = { | |
79 | KC_NO, // Fn0 | |
80 | KC_NO, // Fn1 | |
81 | KC_NO, // Fn2 | |
82 | KC_NO, // Fn3 | |
83 | KC_NO, // Fn4 | |
84 | KC_NO, // Fn5 | |
85 | KC_NO, // Fn6 | |
86 | KC_NO // Fn7 | |
87 | }; | |
88 | ||
89 | static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |
90 | /* Default Layer: plain keymap | |
91 | * ,---. ,---------------. ,---------------. ,---------------. ,-----------. ,---. | |
92 | * |Esc| |F1 |F2 |F3 |F4 | |F5 |F6 |F7 |F8 | |F9 |F10|F11|F12| |PrS|ScL|Pau| |Pwr| | |
93 | * `---' `---------------' `---------------' `---------------' `-----------' `---' | |
94 | * ,-----------------------------------------------------------. ,-----------. ,---------------. | |
95 | * | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backspa| |Ins|Hom|PgU| |NmL| =| /| *| | |
96 | * |-----------------------------------------------------------| |-----------| |---------------| | |
97 | * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| |Del|End|PgD| | 7| 8| 9| -| | |
98 | * |-----------------------------------------------------------| `-----------' |---------------| | |
99 | * |CapsLo| A| S| D| F| G| H| J| K| L| ;| '|Return | | 4| 5| 6| +| | |
100 | * |-----------------------------------------------------------| ,---. |---------------| | |
101 | * |Shift | Z| X| C| V| B| N| M| ,| ,| /|Shift | |Up | | 1| 2| 3| | | |
102 | * |-----------------------------------------------------------| ,-----------. |-----------|Ent| | |
103 | * |Ctrl |Gui |Alt | Space | | | | |Lef|Dow|Rig| | 0| .| | | |
104 | * `-----------------------------------------------------------' `-----------' `---------------' | |
105 | */ | |
106 | KEYMAP( | |
107 | ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,PAUS, PWR, | |
108 | GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, INS, HOME,PGUP, NLCK,EQL, PSLS,PAST, | |
109 | TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, DEL, END, PGDN, P7, P8, P9, PMNS, | |
110 | CAPS,A, S, D, F, G, H, J, K, L, SCLN,QUOT, ENT, P4, P5, P6, PPLS, | |
111 | LSFT,Z, X, C, V, B, N, M, COMM,DOT, SLSH, RSFT, UP, P1, P2, P3, | |
112 | LCTL,LGUI,LALT, SPC, LEFT,DOWN,RGHT, P0, PDOT,PENT | |
113 | ), | |
114 | }; | |
115 | ||
116 | ||
117 | uint8_t keymap_get_keycode(uint8_t layer, uint8_t row, uint8_t col) | |
118 | { | |
119 | return KEYCODE(layer, row, col); | |
120 | } | |
121 | ||
122 | uint8_t keymap_fn_layer(uint8_t index) | |
123 | { | |
124 | return pgm_read_byte(&fn_layer[index]); | |
125 | } | |
126 | ||
127 | uint8_t keymap_fn_keycode(uint8_t index) | |
128 | { | |
129 | return pgm_read_byte(&fn_keycode[index]); | |
130 | } |