]> git.gir.st - tmk_keyboard.git/blob - converter/pc98_usb/keymap.c
Fix keymap for new framework
[tmk_keyboard.git] / converter / pc98_usb / keymap.c
1 /*
2 Copyright 2012 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 #include <stdint.h>
19 #include <stdbool.h>
20 #include <avr/pgmspace.h>
21 #include "keycode.h"
22 #include "action.h"
23 #include "action_macro.h"
24 #include "layer_switch.h"
25 #include "util.h"
26 #include "keymap.h"
27
28
29
30
31 /* PC-9801-98-S02 Raku Raku keyboard(Luckyboard) Normal Mode
32 ,---------------------------------------------------------------.
33 | 60| 61| 62| 63| 64| 65| 66| 67| 68| 69| 6A| 6B| 36| 37| 3F| 3E|
34 `---------------------------------------------------------------'
35 ,---------------------------------------------------------------.
36 | 00| 01| 02| 03| 04| 05| 58| 71| 06| 07| 08| 09| 0A| 0E|
37 |---------------------------------------------------------------|
38 | 0F| 10| 11| 12| 13| 14| 3A | 15| 16| 17| 18| 19| 1C|
39 |---------------------------------------------------------'. |
40 | 74| 20| 21| 22| 23| 24| 3B | 3C | 25| 26| 27| 28| 29| |
41 |---------------------------------------------------------------|
42 | 70| 2A| 2B| 2C| 2D| 2E| 38| 3D | 39| 2F| 30| 31| 32| 33| 70|
43 `---------------------------------------------------------------'
44 | 73| 51| 5B| 59| 34| 5A| 35| xx|
45 `-----------------------------------------------'
46 xx: 74 35 F4 B5
47 */
48 #define KEYMAP( \
49 K60, K61, K62, K63, K64, K65, K66, K67, K68, K69, K6A, K6B, K36, K37, K3F, K3E, \
50 K00, K01, K02, K03, K04, K05, K58, K71, K06, K07, K08, K09, K0A, K0E, \
51 K0F, K10, K11, K12, K13, K14, K3A, K15, K16, K17, K18, K19, K1C, \
52 K74, K20, K21, K22, K23, K24, K3B, K3C, K25, K26, K27, K28, K29, \
53 K70,K2A, K2B, K2C, K2D, K2E, K38, K3D, K39, K2F, K30, K31, K32, K33, \
54 K73, K51, K5B, K59, K34, K5A, K35 \
55 ) { \
56 { KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07 }, \
57 { KC_##K08, KC_##K09, KC_##K0A, KC_NO, KC_NO, KC_NO, KC_##K0E, KC_##K0F }, \
58 { KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17 }, \
59 { KC_##K18, KC_##K19, KC_NO, KC_NO, KC_##K1C, KC_NO, KC_NO, KC_NO }, \
60 { KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27 }, \
61 { KC_##K28, KC_##K29, KC_##K2A, KC_##K2B, KC_##K2C, KC_##K2D, KC_##K2E, KC_##K2F }, \
62 { KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37 }, \
63 { KC_##K38, KC_##K39, KC_##K3A, KC_##K3B, KC_##K3C, KC_##K3D, KC_##K3E, KC_##K3F }, \
64 { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
65 { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
66 { KC_NO, KC_##K51, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
67 { KC_##K58, KC_##K59, KC_##K5A, KC_##K5B, KC_NO, KC_NO, KC_NO, KC_NO }, \
68 { KC_##K60, KC_##K61, KC_##K62, KC_##K63, KC_##K64, KC_##K65, KC_##K66, KC_##K67 }, \
69 { KC_##K68, KC_##K69, KC_##K6A, KC_##K6B, KC_NO, KC_NO, KC_NO, KC_NO }, \
70 { KC_##K70, KC_##K71, KC_NO, KC_##K73, KC_##K74, KC_NO, KC_NO, KC_NO }, \
71 { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO } \
72 }
73
74
75
76 static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
77 /*
78 ,---------------------------------------------------------------.
79 | 60| 61| 62| 63| 64| 65| 66| 67| 68| 69| 6A| 6B| 36| 37| 3F| 3E|
80 `---------------------------------------------------------------'
81 ,---------------------------------------------------------------.
82 | 00| 01| 02| 03| 04| 05| 58| 71| 06| 07| 08| 09| 0A| 0E|
83 |---------------------------------------------------------------|
84 | 0F| 10| 11| 12| 13| 14| 3A | 15| 16| 17| 18| 19| 1C|
85 |---------------------------------------------------------------|
86 | 74| 20| 21| 22| 23| 24| MINS| EQL| 25| 26| 27| 28| 29| |
87 |---------------------------------------------------------------|
88 | 70| 2A| 2B| 2C| 2D| 2E| 38| 3D | 39| 2F| 30| 31| 32| 33| 70|
89 `---------------------------------------------------------------'
90 | 73| 51| 5B| 59| 34| 5A| 35| xx|
91 `-----------------------------------------------'
92 */
93 KEYMAP(
94 CANCEL,COPY, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, F13, FN6,
95 ESC, 1, 2, 3, 4, 5, FN4, FN5, 6, 7, 8, 9, 0, BSPC,
96 TAB, Q, W, E, R, T, UP, Y, U, I, O, P, ENT,
97 LCTL, A, S, D, F, G, MINS, EQL, H, J, K, L, FN2,
98 LSFT, Z, X, C, V, B, GRV, BSLS, QUOT, N, M,COMM, DOT, FN1,
99 LGUI, LALT, LCTL, LSFT, SPC, SPC, RALT
100 ),
101 KEYMAP(
102 PAUS,COPY, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, F13, F14,
103 GRV, F1, F2, F3, F4, F5, NO, NO, F6, F7, F8, F9, F10, DEL,
104 TAB, Q, W, E, R, T, UP, HOME,PGDN,PGUP, END, P, ENT,
105 LCTL, A, S, D, F, G, MINS, EQL, LEFT,DOWN, UP,RGHT,SCLN,
106 LSFT, Z, X, C, V, B, INS, DOWN, DEL,HOME,PGDN,PGUP, END,TRNS,
107 LGUI, LALT, LCTL, LSFT, SPC, SPC, RALT
108 ),
109 KEYMAP(
110 PAUS,COPY, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, F13, F14,
111 GRV, F1, F2, F3, F4, F5, NO, NO, F6, F7, F8, F9, F10, DEL,
112 TAB, Q, W, E, R, T, UP, WH_L,WH_D,WH_U,WH_R, P, ENT,
113 LCTL, A, S, D, F, G, MINS, EQL, MS_L,MS_D,MS_U,MS_R,TRNS,
114 LSFT, Z, X, C, V, B, INS, DOWN, BTN3,BTN2,BTN1,BTN4,BTN5,TRNS,
115 LGUI, LALT, LCTL, LSFT, SPC, SPC, RALT
116 ),
117 };
118 static const uint8_t PROGMEM overlays[][MATRIX_ROWS][MATRIX_COLS] = {};
119
120 /*
121 * Macro definition
122 */
123 enum macro_id {
124 LBRACKET,
125 RBRACKET,
126 DUMMY,
127 };
128
129 const prog_macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
130 {
131 keyevent_t event = record->event;
132 //uint8_t tap_count = record->tap_count;
133
134 switch (id) {
135 case LBRACKET:
136 return (event.pressed ?
137 MACRO( T(LBRC), END ) :
138 MACRO( T(LBRC), END ) );
139 case RBRACKET:
140 return (event.pressed ?
141 MACRO( T(RBRC), END ) :
142 MACRO( T(RBRC), END ) );
143 }
144 return MACRO_NONE;
145 }
146
147 /*
148 * Action function
149 */
150 void action_function(keyrecord_t *record, uint8_t id, uint8_t opt)
151 {
152 /*
153 keyevent_t event = record->event;
154 uint8_t tap_count = record->tap_count;
155 switch (id) {
156 case 0xFF:
157 action_macro_play(get_macro(opt, event.pressed));
158 break;
159 }
160 */
161 }
162
163
164 /*
165 * Fn actions
166 */
167 static const uint16_t PROGMEM fn_actions[] = {
168 ACTION_KEYMAP_TAP_TOGGLE(0), // FN0
169 ACTION_KEYMAP_TAP_KEY(1, KC_SLASH), // FN1
170 ACTION_KEYMAP_TAP_KEY(2, KC_SCLN), // FN2
171 ACTION_KEYMAP_MOMENTARY(2), // FN3
172 ACTION_MACRO(LBRACKET), // FN4
173 ACTION_MACRO(RBRACKET), // FN5
174 ACTION_MACRO(DUMMY), // FN6
175 };
176
177
178
179
180
181
182 /*
183 * No need to edit.
184 */
185 #define KEYMAPS_SIZE (sizeof(keymaps) / sizeof(keymaps[0]))
186 #define OVERLAYS_SIZE (sizeof(overlays) / sizeof(overlays[0]))
187 #define FN_ACTIONS_SIZE (sizeof(fn_actions) / sizeof(fn_actions[0]))
188
189 /* translates key to keycode */
190 uint8_t keymap_key_to_keycode(uint8_t layer, key_t key)
191 {
192 /* Overlay: 16-31(OVERLAY_BIT(0x10) | overlay_layer) */
193 if (layer & OVERLAY_BIT) {
194 layer &= OVERLAY_MASK;
195 if (layer < OVERLAYS_SIZE) {
196 return pgm_read_byte(&overlays[(layer)][(key.row)][(key.col)]);
197 } else {
198 return KC_TRANSPARENT;
199 }
200 }
201 /* Keymap: 0-15 */
202 else {
203 if (layer < KEYMAPS_SIZE) {
204 return pgm_read_byte(&keymaps[(layer)][(key.row)][(key.col)]);
205 } else {
206 // fall back to layer 0
207 return pgm_read_byte(&keymaps[0][(key.row)][(key.col)]);
208 }
209 }
210 }
211
212 /* translates Fn keycode to action */
213 action_t keymap_fn_to_action(uint8_t keycode)
214 {
215 action_t action;
216 if (FN_INDEX(keycode) < FN_ACTIONS_SIZE) {
217 action.code = pgm_read_word(&fn_actions[FN_INDEX(keycode)]);
218 } else {
219 action.code = ACTION_NO;
220 }
221 return action;
222 }
Imprint / Impressum