Add keymap
This commit is contained in:
parent
03b435fee8
commit
7ce8a8b114
@ -3,6 +3,150 @@
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
uint16_t keymap(int layer, int output, int input);
|
||||
uint16_t keymap(int output, int input, int layer);
|
||||
|
||||
// See http://www.techtoys.com.hk/Downloads/Download/Microchip/PS2_driver/ScanCode.pdf
|
||||
|
||||
// Should send 0xE0 before scancode bytes
|
||||
#define K_E0 0x0100
|
||||
|
||||
// Function keys
|
||||
|
||||
#define K_F1 (0x05)
|
||||
#define K_F2 (0x06)
|
||||
#define K_F3 (0x04)
|
||||
#define K_F4 (0x0C)
|
||||
#define K_F5 (0x03)
|
||||
#define K_F6 (0x0B)
|
||||
#define K_F7 (0x83)
|
||||
#define K_F8 (0x0A)
|
||||
#define K_F9 (0x01)
|
||||
#define K_F10 (0x09)
|
||||
#define K_F11 (0x78)
|
||||
#define K_F12 (0x07)
|
||||
|
||||
// Number keys
|
||||
|
||||
#define K_0 (0x45)
|
||||
#define K_1 (0x16)
|
||||
#define K_2 (0x1E)
|
||||
#define K_3 (0x26)
|
||||
#define K_4 (0x25)
|
||||
#define K_5 (0x2E)
|
||||
#define K_6 (0x36)
|
||||
#define K_7 (0x3D)
|
||||
#define K_8 (0x3E)
|
||||
#define K_9 (0x46)
|
||||
|
||||
// Letter keys
|
||||
|
||||
#define K_A (0x1C)
|
||||
#define K_B (0x32)
|
||||
#define K_C (0x21)
|
||||
#define K_D (0x23)
|
||||
#define K_E (0x24)
|
||||
#define K_F (0x2B)
|
||||
#define K_G (0x34)
|
||||
#define K_H (0x33)
|
||||
#define K_I (0x43)
|
||||
#define K_J (0x3B)
|
||||
#define K_K (0x42)
|
||||
#define K_L (0x4B)
|
||||
#define K_M (0x3A)
|
||||
#define K_N (0x31)
|
||||
#define K_O (0x44)
|
||||
#define K_P (0x4D)
|
||||
#define K_Q (0x15)
|
||||
#define K_R (0x2D)
|
||||
#define K_S (0x1B)
|
||||
#define K_T (0x2C)
|
||||
#define K_U (0x3C)
|
||||
#define K_V (0x2A)
|
||||
#define K_W (0x1D)
|
||||
#define K_X (0x22)
|
||||
#define K_Y (0x35)
|
||||
#define K_Z (0x1A)
|
||||
|
||||
// Special keys
|
||||
|
||||
// Escape key
|
||||
#define K_ESC (0x76)
|
||||
|
||||
//TODO: Print screen, scroll lock, pause
|
||||
|
||||
// Tick/tilde key
|
||||
#define K_TICK (0x0E)
|
||||
// Minus/underline key
|
||||
#define K_MINUS (0x4E)
|
||||
// Equals/plus key
|
||||
#define K_EQUALS (0x55)
|
||||
// Backspace key
|
||||
#define K_BKSP (0x66)
|
||||
|
||||
// Tab key
|
||||
#define K_TAB (0x0D)
|
||||
// Bracket open key
|
||||
#define K_BRACE_OPEN (0x54)
|
||||
// Bracket close key
|
||||
#define K_BRACE_CLOSE (0x5B)
|
||||
// Backslash/pipe key
|
||||
#define K_BACKSLASH (0x5D)
|
||||
|
||||
// Capslock
|
||||
#define K_CAPS (0x58)
|
||||
// Semicolon key
|
||||
#define K_SEMICOLON (0x4C)
|
||||
// Quote key
|
||||
#define K_QUOTE (0x52)
|
||||
// Enter key
|
||||
#define K_ENTER (0x5A)
|
||||
|
||||
// Left shift
|
||||
#define K_LEFT_SHIFT (0x12)
|
||||
// Comma key
|
||||
#define K_COMMA (0x41)
|
||||
// Period key
|
||||
#define K_PERIOD (0x49)
|
||||
// Slash key
|
||||
#define K_SLASH (0x4A)
|
||||
// Right shift
|
||||
#define K_RIGHT_SHIFT (0x59)
|
||||
|
||||
// Left control key
|
||||
#define K_LEFT_CTRL (0x14)
|
||||
// Left super key
|
||||
#define K_LEFT_SUPER (K_E0 | 0x1F)
|
||||
// Left alt key
|
||||
#define K_LEFT_ALT (0x11)
|
||||
// Space key
|
||||
#define K_SPACE (0x29)
|
||||
// Right alt key
|
||||
#define K_RIGHT_ALT (K_E0 | 0x11)
|
||||
// Right super key
|
||||
#define K_RIGHT_SUPER (K_E0 | 0x27)
|
||||
// Application key
|
||||
#define K_APP (K_E0 | 0x2F)
|
||||
// Right control key
|
||||
#define K_RIGHT_CTRL (K_E0 | 0x14)
|
||||
|
||||
// Arrow keys and related
|
||||
|
||||
// Insert key
|
||||
#define K_INSERT (K_E0 | 0x70)
|
||||
// Delete key
|
||||
#define K_DEL (K_E0 | 0x71)
|
||||
// Home key
|
||||
#define K_HOME (K_E0 | 0x6C)
|
||||
// End key
|
||||
#define K_END (K_E0 | 0x69)
|
||||
// Page up key
|
||||
#define K_PGUP (K_E0 | 0x7D)
|
||||
// Page down key
|
||||
#define K_PGDN (K_E0 | 0x7A)
|
||||
|
||||
#define K_UP (K_E0 | 0x75)
|
||||
#define K_LEFT (K_E0 | 0x6B)
|
||||
#define K_DOWN (K_E0 | 0x72)
|
||||
#define K_RIGHT (K_E0 | 0x74)
|
||||
|
||||
#endif // _BOARD_KEYMAP_H
|
||||
|
@ -41,15 +41,11 @@ void kbscan_event(void) {
|
||||
|
||||
uint8_t ksi = KSI;
|
||||
|
||||
printf(" %d: %02X\n", i, ksi);
|
||||
int j;
|
||||
for (j = 0; j < 8; j++) {
|
||||
if (!(ksi & (1 << j))) {
|
||||
printf(" %d, %d\n", i, j);
|
||||
uint16_t key = keymap(layer, i, j);
|
||||
if (key) {
|
||||
printf(" 0x%04X\n", key);
|
||||
}
|
||||
uint16_t key = keymap(i, j, layer);
|
||||
printf(" %d, %d, %d = 0x%04X\n", i, j, layer, key);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,20 +1,178 @@
|
||||
#include <board/keymap.h>
|
||||
|
||||
// Keymap layers (normal, Fn)
|
||||
#define KM_LAY 2
|
||||
// Keymap output pins
|
||||
#define KM_OUT 16
|
||||
// Keymap input pins
|
||||
#define KM_IN 8
|
||||
// Keymap layers (normal, Fn)
|
||||
#define KM_LAY 2
|
||||
|
||||
uint16_t __code KEYMAP[KM_IN][KM_OUT][KM_LAY] = {
|
||||
// TODO
|
||||
{ { 0 } }
|
||||
uint16_t __code KEYMAP[KM_OUT][KM_IN][KM_LAY] = {
|
||||
{ // 0
|
||||
{0, 0}, // 0
|
||||
{0, 0}, // 1
|
||||
{0, 0}, // 2
|
||||
{0, 0}, // 3
|
||||
{0, 0}, // 4
|
||||
{0, 0}, // 5
|
||||
{K_LEFT_SUPER, 0}, // 6
|
||||
{0, 0}, // 7
|
||||
},
|
||||
{ // 1
|
||||
{0, 0}, // 0
|
||||
{0, 0}, // 1
|
||||
{0, 0}, // 2
|
||||
{0, 0}, // 3
|
||||
{0, 0}, // 4
|
||||
{0, 0}, // 5
|
||||
{K_LEFT_CTRL, 0}, // 6
|
||||
{K_RIGHT_CTRL, 0}, // 7
|
||||
},
|
||||
{ // 2
|
||||
{0, 0}, // 0
|
||||
{0, 0}, // 1
|
||||
{0, 0}, // 2
|
||||
{0, 0}, // 3
|
||||
{0, 0}, // 4
|
||||
{0, 0}, // 5
|
||||
{K_LEFT_ALT, 0}, // 6
|
||||
{K_RIGHT_ALT, 0}, // 7
|
||||
},
|
||||
{ // 3
|
||||
{0, 0}, // 0
|
||||
{0, 0}, // 1
|
||||
{0, 0}, // 2
|
||||
{0, 0}, // 3
|
||||
{0, 0}, // 4
|
||||
{0, 0}, // 5
|
||||
{K_LEFT_SHIFT, 0}, // 6
|
||||
{K_RIGHT_SHIFT, 0}, // 7
|
||||
},
|
||||
{ // 4
|
||||
{K_X, 0}, // 0
|
||||
{K_Z, 0}, // 1
|
||||
{K_CAPS, 0}, // 2
|
||||
{K_A, 0}, // 3
|
||||
{K_TAB, 0}, // 4
|
||||
{0, 0}, // 5
|
||||
{K_SPACE, 0}, // 6
|
||||
{K_Q, 0}, // 7
|
||||
},
|
||||
{ // 5
|
||||
{K_V, 0}, // 0
|
||||
{K_C, 0}, // 1
|
||||
{0, 0}, // 2
|
||||
{K_D, 0}, // 3
|
||||
{0, 0}, // 4
|
||||
{0, 0}, // 5
|
||||
{0, 0}, // 6
|
||||
{K_E, 0}, // 7
|
||||
},
|
||||
{ // 6
|
||||
{0, 0}, // 0
|
||||
{K_B, 0}, // 1
|
||||
{K_F, 0}, // 2
|
||||
{K_G, 0}, // 3
|
||||
{K_R, 0}, // 4
|
||||
{K_T, 0}, // 5
|
||||
{0, 0}, // 6
|
||||
{0, 0}, // 7
|
||||
},
|
||||
{ // 7
|
||||
{0, 0}, // 0
|
||||
{K_N, 0}, // 1
|
||||
{K_H, 0}, // 2
|
||||
{K_Y, 0}, // 3
|
||||
{K_2, 0}, // 4
|
||||
{K_1, 0}, // 5
|
||||
{K_TICK, 0}, // 6
|
||||
{K_ESC, 0}, // 7
|
||||
},
|
||||
{ // 8
|
||||
{K_I, 0}, // 0
|
||||
{K_M, 0}, // 1
|
||||
{K_U, 0}, // 2
|
||||
{K_6, 0}, // 3
|
||||
{K_4, 0}, // 4
|
||||
{K_3, 0}, // 5
|
||||
{K_F2, 0}, // 6
|
||||
{K_F1, 0}, // 7
|
||||
},
|
||||
{ // 9
|
||||
{K_W, 0}, // 0
|
||||
{K_J, 0}, // 1
|
||||
{K_K, 0}, // 2
|
||||
{0, 0}, // 3
|
||||
{K_7, 0}, // 4
|
||||
{0, 0}, // 5
|
||||
{K_F4, 0}, // 6
|
||||
{K_F3, 0}, // 7
|
||||
},
|
||||
{ // 10
|
||||
{K_S, 0}, // 0
|
||||
{K_COMMA, 0}, // 1
|
||||
{K_L, 0}, // 2
|
||||
{K_O, 0}, // 3
|
||||
{K_9, 0}, // 4
|
||||
{K_8, 0}, // 5
|
||||
{K_F6, 0}, // 6
|
||||
{K_F5, 0}, // 7
|
||||
},
|
||||
{ // 11
|
||||
{0, 0}, // 0
|
||||
{K_UP, 0}, // 1
|
||||
{K_PERIOD, 0}, // 2
|
||||
{K_SEMICOLON, 0}, // 3
|
||||
{K_P, 0}, // 4
|
||||
{K_0, 0}, // 5
|
||||
{K_F8, 0}, // 6
|
||||
{K_F7, 0}, // 7
|
||||
},
|
||||
{ // 12
|
||||
{0, 0}, // 0
|
||||
{0, 0}, // 1
|
||||
{K_SLASH, 0}, // 2
|
||||
{K_QUOTE, 0}, // 3
|
||||
{K_BRACE_OPEN, 0}, // 4
|
||||
{K_MINUS, 0}, // 5
|
||||
{K_F10, 0}, // 6
|
||||
{K_F9, 0}, // 7
|
||||
},
|
||||
{ // 13
|
||||
{0, 0}, // 0
|
||||
{0, 0}, // 1
|
||||
{0 /* TODO: PrtSc/SysRq */, 0}, // 2
|
||||
{K_BRACE_CLOSE, 0}, // 3
|
||||
{K_EQUALS, 0}, // 4
|
||||
{K_RIGHT, 0}, // 5
|
||||
{0 /* TODO: Pause/Break */, 0}, // 6
|
||||
{K_F11, 0}, // 7
|
||||
},
|
||||
{ // 14
|
||||
{0, 0}, // 0
|
||||
{K_BACKSLASH, 0}, // 1
|
||||
{K_LEFT, 0}, // 2
|
||||
{K_BKSP, 0}, // 3
|
||||
{K_PGUP, 0}, // 4
|
||||
{K_INSERT, 0}, // 5
|
||||
{K_HOME, 0}, // 6
|
||||
{K_DEL, 0}, // 7
|
||||
},
|
||||
{ // 15
|
||||
{K_APP, 0}, // 0
|
||||
{0, 0}, // 1
|
||||
{K_ENTER, 0}, // 2
|
||||
{0, 0}, // 3
|
||||
{K_DOWN, 0}, // 4
|
||||
{K_F12, 0}, // 5
|
||||
{K_END, 0}, // 6
|
||||
{K_PGDN, 0}, // 7
|
||||
},
|
||||
};
|
||||
|
||||
uint16_t keymap(int layer, int output, int input) {
|
||||
if (layer < KM_LAY && output < KM_OUT && input < KM_IN) {
|
||||
return KEYMAP[input][output][layer];
|
||||
uint16_t keymap(int output, int input, int layer) {
|
||||
if (output < KM_OUT && input < KM_IN && layer < KM_LAY) {
|
||||
return KEYMAP[output][input][layer];
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user