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