]> git.donarmstrong.com Git - tmk_firmware.git/blob - converter/pc98_usb/keymap.c
Change key_t to keypos_t
[tmk_firmware.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 uint16_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 }