2 Copyright 2012 Jun Wako <wakojun@gmail.com>
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.
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.
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/>.
20 #include <avr/pgmspace.h>
23 #include "action_macro.h"
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 `-----------------------------------------------'
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 \
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 } \
75 static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
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 `-----------------------------------------------'
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
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
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
117 static const uint8_t PROGMEM overlays[][MATRIX_ROWS][MATRIX_COLS] = {};
128 const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
130 keyevent_t event = record->event;
131 //uint8_t tap_count = record->tap_count;
135 return (event.pressed ?
136 MACRO( T(LBRC), END ) :
137 MACRO( T(LBRC), END ) );
139 return (event.pressed ?
140 MACRO( T(RBRC), END ) :
141 MACRO( T(RBRC), END ) );
149 void action_function(keyrecord_t *record, uint8_t id, uint8_t opt)
152 keyevent_t event = record->event;
153 uint8_t tap_count = record->tap_count;
156 action_macro_play(get_macro(opt, event.pressed));
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
184 #define KEYMAPS_SIZE (sizeof(keymaps) / sizeof(keymaps[0]))
185 #define FN_ACTIONS_SIZE (sizeof(fn_actions) / sizeof(fn_actions[0]))
187 /* translates key to keycode */
188 uint8_t keymap_key_to_keycode(uint8_t layer, key_t key)
190 if (layer < KEYMAPS_SIZE) {
191 return pgm_read_byte(&keymaps[(layer)][(key.row)][(key.col)]);
193 // fall back to layer 0
194 return pgm_read_byte(&keymaps[0][(key.row)][(key.col)]);
198 /* translates Fn keycode to action */
199 action_t keymap_fn_to_action(uint8_t keycode)
202 if (FN_INDEX(keycode) < FN_ACTIONS_SIZE) {
203 action.code = pgm_read_word(&fn_actions[FN_INDEX(keycode)]);
205 action.code = ACTION_NO;