]> git.donarmstrong.com Git - tmk_firmware.git/blob - converter/terminal_usb/keymap.c
Fix rn42_linked() to use pullup
[tmk_firmware.git] / converter / terminal_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 "print.h"
23 #include "debug.h"
24 #include "util.h"
25 #include "keymap.h"
26
27
28
29
30 /* 
31  * IBM Terminal keyboard 6110345(122keys)/1392595(102keys)
32  * http://geekhack.org/showthread.php?10737-What-Can-I-Do-With-a-Terminal-Model-M
33  * http://www.seasip.info/VintagePC/ibm_1391406.html
34  *
35  * Keymap array:
36  *     8 bytes
37  *   +---------+
38  *  0|         |
39  *  :|         | 0x00-0x87
40  *  ;|         |
41  * 17|         |
42  *   +---------+
43  */
44 #define KEYMAP( \
45                   K08,K10,K18,K20,K28,K30,K38,K40,K48,K50,K57,K5F,                                         \
46                   K07,K0F,K17,K1F,K27,K2F,K37,K3F,K47,K4F,K56,K5E,                                         \
47                                                                                                            \
48     K05,K06,  K0E,K16,K1E,K26,K25,K2E,K36,K3D,K3E,K46,K45,K4E,K55,K5D,K66,  K67,K6E,K6F,  K76,K77,K7E,K84, \
49     K04,K0C,  K0D,K15,K1D,K24,K2D,K2C,K35,K3C,K43,K44,K4D,K54,K5B,    K5C,  K64,K65,K6D,  K6C,K75,K7D,K7C, \
50     K03,K0B,  K14,K1C,K1B,K23,K2B,K34,K33,K3B,K42,K4B,K4C,K52,    K53,K5A,      K63,      K6B,K73,K74,K7B, \
51     K83,K0A,  K12,K13,K1A,K22,K21,K2A,K32,K31,K3A,K41,K49,K4A,    K51,K59,  K61,K62,K6A,  K69,K72,K7A,K79, \
52     K01,K09,  K11,    K19,            K29,                    K39,    K58,      K60,      K68,K70,K71,K78  \
53 ) { \
54     { KC_NO,    KC_##K01, KC_NO,    KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07 }, \
55     { KC_##K08, KC_##K09, KC_##K0A, KC_##K0B, KC_##K0C, KC_##K0D, KC_##K0E, KC_##K0F }, \
56     { KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17 }, \
57     { KC_##K18, KC_##K19, KC_##K1A, KC_##K1B, KC_##K1C, KC_##K1D, KC_##K1E, KC_##K1F }, \
58     { KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27 }, \
59     { KC_##K28, KC_##K29, KC_##K2A, KC_##K2B, KC_##K2C, KC_##K2D, KC_##K2E, KC_##K2F }, \
60     { KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37 }, \
61     { KC_##K38, KC_##K39, KC_##K3A, KC_##K3B, KC_##K3C, KC_##K3D, KC_##K3E, KC_##K3F }, \
62     { KC_##K40, KC_##K41, KC_##K42, KC_##K43, KC_##K44, KC_##K45, KC_##K46, KC_##K47 }, \
63     { KC_##K48, KC_##K49, KC_##K4A, KC_##K4B, KC_##K4C, KC_##K4D, KC_##K4E, KC_##K4F }, \
64     { KC_##K50, KC_##K51, KC_##K52, KC_##K53, KC_##K54, KC_##K55, KC_##K56, KC_##K57 }, \
65     { KC_##K58, KC_##K59, KC_##K5A, KC_##K5B, KC_##K5C, KC_##K5D, KC_##K5E, KC_##K5F }, \
66     { KC_##K60, KC_##K61, KC_##K62, KC_##K63, KC_##K64, KC_##K65, KC_##K66, KC_##K67 }, \
67     { KC_##K68, KC_##K69, KC_##K6A, KC_##K6B, KC_##K6C, KC_##K6D, KC_##K6E, KC_##K6F }, \
68     { KC_##K70, KC_##K71, KC_##K72, KC_##K73, KC_##K74, KC_##K75, KC_##K76, KC_##K77 }, \
69     { KC_##K78, KC_##K79, KC_##K7A, KC_##K7B, KC_##K7C, KC_##K7D, KC_##K7E, KC_NO    }, \
70     { KC_NO,    KC_NO,    KC_NO,    KC_##K83, KC_##K84, KC_NO,    KC_NO,    KC_NO,   }, \
71 }
72
73
74 // Assign Fn key(0-7) to a layer to which switch with the Fn key pressed.
75 static const uint8_t PROGMEM fn_layer[] = {
76     0,              // Fn0
77     0,              // Fn1
78     0,              // Fn2
79     0,              // Fn3
80     0,              // Fn4
81     0,              // Fn5
82     0,              // Fn6
83     0               // Fn7
84 };
85
86 // Assign Fn key(0-7) to a keycode sent when release Fn key without use of the layer.
87 // See layer.c for details.
88 static const uint8_t PROGMEM fn_keycode[] = {
89     KC_NO,          // Fn0
90     KC_NO,          // Fn1
91     KC_NO,          // Fn2
92     KC_NO,          // Fn3
93     KC_NO,          // Fn4
94     KC_NO,          // Fn5
95     KC_NO,          // Fn6
96     KC_NO           // Fn7
97 };
98
99
100 static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
101     /* 0: default
102      * ,---.   ,---------------. ,---------------. ,---------------. ,-----------.
103      * |Esc|   |F1 |F2 |F3 |F4 | |F5 |F6 |F7 |F8 | |F9 |F10|F11|F12| |PrS|ScL|Pau|
104      * `---'   `---------------' `---------------' `---------------' `-----------'
105      * ,-----------------------------------------------------------. ,-----------. ,---------------.
106      * |  `|  1|  2|  3|  4|  5|  6|  7|  8|  9|  0|  -|  =|  \|BS | |Ins|Hom|PgU| |NmL|  /|  *|  -|
107      * |-----------------------------------------------------------| |-----------| |---------------|
108      * |Tab  |  Q|  W|  E|  R|  T|  Y|  U|  I|  O|  P|  [|  ]|    \| |Del|End|PgD| |  7|  8|  9|   |
109      * |-----------------------------------------------------------| `-----------' |-----------|  +|
110      * |CapsLo|  A|  S|  D|  F|  G|  H|  J|  K|  L|  ;|  '|  #|Retu|               |  4|  5|  6|   |
111      * |-----------------------------------------------------------|     ,---.     |---------------|
112      * |Shif|  \|  Z|  X|  C|  V|  B|  N|  M|  ,|  ,|  /|Shift     |     |Up |     |  1|  2|  3|   |
113      * |-----------------------------------------------------------| ,-----------. |-----------|Ent|
114      * |Ctrl|    |Alt |          Space              |Alt |    |Ctrl| |Lef|Dow|Rig| |      0|  .|   |
115      * `----'    `---------------------------------------'    `----' `-----------' `---------------'
116      */
117 /*
118     KEYMAP(
119                      F13, F14, F15, F16, F17, F18, F19, F20, F21, F22, F23, F24,
120                      F1,  F2,  F3,  F4,  F5,  F6,  F7,  F8,  F9,  F10, F11, F12,
121
122     PSCR,ESC,   GRV, 1,   2,   3,   4,   5,   6,   7,   8,   9,   0,   MINS,EQL, JYEN,BSPC,  INS, HOME,PGUP,  NLCK,PSLS,PAST,PMNS,
123     SLCK,INT4,  TAB, Q,   W,   E,   R,   T,   Y,   U,   I,   O,   P,   LBRC,RBRC,     BSLS,  DEL, END, PGDN,  P7,  P8,  P9,  PPLS,
124     PAUS,INT5,  CAPS,A,   S,   D,   F,   G,   H,   J,   K,   L,   SCLN,QUOT,     NUHS,ENT,        UP,         P4,  P5,  P6,  PCMM,
125     APP, INT6,  LSFT,NUBS,Z,   X,   C,   V,   B,   N,   M,   COMM,DOT, SLSH,     RO,  RSFT,  LEFT,INT2,RGHT,  P1,  P2,  P3,  PENT,
126     RGUI,LGUI,  LCTL,     LALT,               SPC,                          RALT,     RCTL,       DOWN,       NO,  P0,  PDOT,NO
127     ),
128 */
129     // pseudo ANSI
130     KEYMAP(
131                      F13, F14, F15, F16, F17, F18, F19, F20, F21, F22, F23, F24,
132                      F1,  F2,  F3,  F4,  F5,  F6,  F7,  F8,  F9,  F10, F11, F12,
133
134     PSCR,ESC,   ESC, 1,   2,   3,   4,   5,   6,   7,   8,   9,   0,   MINS,EQL, NO,  BSPC,  INS, HOME,PGUP,  NLCK,PSLS,PAST,PMNS,
135     SLCK,INT4,  TAB, Q,   W,   E,   R,   T,   Y,   U,   I,   O,   P,   LBRC,RBRC,     NO,    DEL, END, PGDN,  P7,  P8,  P9,  PPLS,
136     PAUS,INT5,  LCTL,A,   S,   D,   F,   G,   H,   J,   K,   L,   SCLN,QUOT,     BSLS,ENT,        UP,         P4,  P5,  P6,  PCMM,
137     APP, INT6,  LSFT,LSFT,Z,   X,   C,   V,   B,   N,   M,   COMM,DOT, SLSH,     NO,  RSFT,  LEFT,INT2,RGHT,  P1,  P2,  P3,  PENT,
138     RGUI,LGUI,  LCTL,     LALT,               SPC,                          LGUI,     GRV,        DOWN,       NO,  P0,  PDOT,NO
139     ),
140 };
141
142
143 uint8_t keymap_get_keycode(uint8_t layer, uint8_t row, uint8_t col)
144 {
145     return pgm_read_byte(&keymaps[(layer)][(row)][(col)]);
146 }
147
148 uint8_t keymap_fn_layer(uint8_t index)
149 {
150     return pgm_read_byte(&fn_layer[index]);
151 }
152
153 uint8_t keymap_fn_keycode(uint8_t index)
154 {
155     return pgm_read_byte(&fn_keycode[index]);
156 }