diff options
Diffstat (limited to 'keyboards/comet46/keymaps/satt/action_pseudo_lut.c')
-rw-r--r-- | keyboards/comet46/keymaps/satt/action_pseudo_lut.c | 212 |
1 files changed, 106 insertions, 106 deletions
diff --git a/keyboards/comet46/keymaps/satt/action_pseudo_lut.c b/keyboards/comet46/keymaps/satt/action_pseudo_lut.c index 5664d4d2a..0ac713359 100644 --- a/keyboards/comet46/keymaps/satt/action_pseudo_lut.c +++ b/keyboards/comet46/keymaps/satt/action_pseudo_lut.c | |||
@@ -10,133 +10,133 @@ static uint8_t send_key_shift_bit[SHIFT_BIT_SIZE]; | |||
10 | * Memo: Using other layer keymap to get keycode | 10 | * Memo: Using other layer keymap to get keycode |
11 | */ | 11 | */ |
12 | void action_pseudo_lut(keyrecord_t *record, uint8_t base_keymap_id, const uint16_t (*keymap)[2]) { | 12 | void action_pseudo_lut(keyrecord_t *record, uint8_t base_keymap_id, const uint16_t (*keymap)[2]) { |
13 | uint8_t prev_shift; | 13 | uint8_t prev_shift; |
14 | uint16_t keycode; | 14 | uint16_t keycode; |
15 | uint16_t pseudo_keycode; | 15 | uint16_t pseudo_keycode; |
16 | 16 | ||
17 | /* get keycode from keymap you specified */ | 17 | /* get keycode from keymap you specified */ |
18 | keycode = keymap_key_to_keycode(base_keymap_id, record->event.key); | 18 | keycode = keymap_key_to_keycode(base_keymap_id, record->event.key); |
19 | 19 | ||
20 | prev_shift = keyboard_report->mods & (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); | 20 | prev_shift = keyboard_report->mods & (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)); |
21 | 21 | ||
22 | if (record->event.pressed) { | 22 | if (record->event.pressed) { |
23 | /* when magic commands entered, keycode does not converted */ | 23 | /* when magic commands entered, keycode does not converted */ |
24 | if (IS_COMMAND()) { | 24 | if (IS_COMMAND()) { |
25 | if (prev_shift) { | 25 | if (prev_shift) { |
26 | add_shift_bit(keycode); | 26 | add_shift_bit(keycode); |
27 | } | 27 | } |
28 | register_code(keycode); | 28 | register_code(keycode); |
29 | return; | 29 | return; |
30 | } | 30 | } |
31 | 31 | ||
32 | if (prev_shift) { | 32 | if (prev_shift) { |
33 | pseudo_keycode = convert_keycode(keymap, keycode, true); | 33 | pseudo_keycode = convert_keycode(keymap, keycode, true); |
34 | dprintf("pressed: %02X, converted: %04X\n", keycode, pseudo_keycode); | 34 | dprintf("pressed: %02X, converted: %04X\n", keycode, pseudo_keycode); |
35 | add_shift_bit(keycode); | 35 | add_shift_bit(keycode); |
36 | 36 | ||
37 | if (IS_LSFT(pseudo_keycode)) { | 37 | if (IS_LSFT(pseudo_keycode)) { |
38 | register_code(QK_LSFT ^ pseudo_keycode); | 38 | register_code(QK_LSFT ^ pseudo_keycode); |
39 | } else { | 39 | } else { |
40 | /* delete shift mod temporarily */ | 40 | /* delete shift mod temporarily */ |
41 | del_mods(prev_shift); | 41 | del_mods(prev_shift); |
42 | send_keyboard_report(); | 42 | send_keyboard_report(); |
43 | register_code(pseudo_keycode); | 43 | register_code(pseudo_keycode); |
44 | add_mods(prev_shift); | 44 | add_mods(prev_shift); |
45 | send_keyboard_report(); | 45 | send_keyboard_report(); |
46 | } | 46 | } |
47 | } else { | 47 | } else { |
48 | pseudo_keycode = convert_keycode(keymap, keycode, false); | 48 | pseudo_keycode = convert_keycode(keymap, keycode, false); |
49 | dprintf("pressed: %02X, converted: %04X\n", keycode, pseudo_keycode); | 49 | dprintf("pressed: %02X, converted: %04X\n", keycode, pseudo_keycode); |
50 | 50 | ||
51 | if (IS_LSFT(pseudo_keycode)) { | 51 | if (IS_LSFT(pseudo_keycode)) { |
52 | add_weak_mods(MOD_BIT(KC_LSFT)); | 52 | add_weak_mods(MOD_BIT(KC_LSFT)); |
53 | send_keyboard_report(); | 53 | send_keyboard_report(); |
54 | register_code(QK_LSFT ^ pseudo_keycode); | 54 | register_code(QK_LSFT ^ pseudo_keycode); |
55 | /* on Windows, prevent key repeat to avoid unintended output */ | 55 | /* on Windows, prevent key repeat to avoid unintended output */ |
56 | unregister_code(QK_LSFT ^ pseudo_keycode); | 56 | unregister_code(QK_LSFT ^ pseudo_keycode); |
57 | del_weak_mods(MOD_BIT(KC_LSFT)); | 57 | del_weak_mods(MOD_BIT(KC_LSFT)); |
58 | send_keyboard_report(); | 58 | send_keyboard_report(); |
59 | } else { | 59 | } else { |
60 | register_code(pseudo_keycode); | 60 | register_code(pseudo_keycode); |
61 | } | 61 | } |
62 | } | 62 | } |
63 | } else { | ||
64 | if (get_shift_bit(keycode)) { | ||
65 | del_shift_bit(keycode); | ||
66 | pseudo_keycode = convert_keycode(keymap, keycode, true); | ||
63 | } else { | 67 | } else { |
64 | if (get_shift_bit(keycode)) { | 68 | pseudo_keycode = convert_keycode(keymap, keycode, false); |
65 | del_shift_bit(keycode); | 69 | } |
66 | pseudo_keycode = convert_keycode(keymap, keycode, true); | 70 | dprintf("released: %02X, converted: %04X\n", keycode, pseudo_keycode); |
67 | } else { | ||
68 | pseudo_keycode = convert_keycode(keymap, keycode, false); | ||
69 | } | ||
70 | dprintf("released: %02X, converted: %04X\n", keycode, pseudo_keycode); | ||
71 | 71 | ||
72 | if (IS_LSFT(pseudo_keycode)) { | 72 | if (IS_LSFT(pseudo_keycode)) { |
73 | unregister_code(QK_LSFT ^ pseudo_keycode); | 73 | unregister_code(QK_LSFT ^ pseudo_keycode); |
74 | } else { | 74 | } else { |
75 | unregister_code(pseudo_keycode); | 75 | unregister_code(pseudo_keycode); |
76 | } | ||
77 | } | 76 | } |
77 | } | ||
78 | } | 78 | } |
79 | 79 | ||
80 | uint16_t convert_keycode(const uint16_t (*keymap)[2], uint16_t keycode, bool shift_modded) | 80 | uint16_t convert_keycode(const uint16_t (*keymap)[2], uint16_t keycode, bool shift_modded) |
81 | { | 81 | { |
82 | uint16_t pseudo_keycode; | 82 | uint16_t pseudo_keycode; |
83 | 83 | ||
84 | switch (keycode) { | 84 | switch (keycode) { |
85 | case KC_A ... KC_CAPSLOCK: | 85 | case KC_A ... KC_CAPSLOCK: |
86 | #if defined(__AVR__) | 86 | #if defined(__AVR__) |
87 | if (shift_modded) { | 87 | if (shift_modded) { |
88 | pseudo_keycode = pgm_read_word(&keymap[keycode][1]); | 88 | pseudo_keycode = pgm_read_word(&keymap[keycode][1]); |
89 | } else { | 89 | } else { |
90 | pseudo_keycode = pgm_read_word(&keymap[keycode][0]); | 90 | pseudo_keycode = pgm_read_word(&keymap[keycode][0]); |
91 | } | 91 | } |
92 | #else | 92 | #else |
93 | if (shift_modded) { | 93 | if (shift_modded) { |
94 | pseudo_keycode = keymap[keycode][1]; | 94 | pseudo_keycode = keymap[keycode][1]; |
95 | } else { | 95 | } else { |
96 | pseudo_keycode = keymap[keycode][0]; | 96 | pseudo_keycode = keymap[keycode][0]; |
97 | } | 97 | } |
98 | #endif | 98 | #endif |
99 | /* if undefined, use got keycode as it is */ | 99 | /* if undefined, use got keycode as it is */ |
100 | if (pseudo_keycode == 0x00) { | 100 | if (pseudo_keycode == 0x00) { |
101 | if (shift_modded) { | 101 | if (shift_modded) { |
102 | pseudo_keycode = S(keycode); | 102 | pseudo_keycode = S(keycode); |
103 | } else { | 103 | } else { |
104 | pseudo_keycode = keycode; | 104 | pseudo_keycode = keycode; |
105 | } | 105 | } |
106 | } | 106 | } |
107 | break; | 107 | break; |
108 | default: | 108 | default: |
109 | if (shift_modded) { | 109 | if (shift_modded) { |
110 | pseudo_keycode = S(keycode); | 110 | pseudo_keycode = S(keycode); |
111 | } else { | 111 | } else { |
112 | pseudo_keycode = keycode; | 112 | pseudo_keycode = keycode; |
113 | } | 113 | } |
114 | break; | 114 | break; |
115 | } | 115 | } |
116 | return pseudo_keycode; | 116 | return pseudo_keycode; |
117 | } | 117 | } |
118 | 118 | ||
119 | uint8_t get_shift_bit(uint16_t keycode) { | 119 | uint8_t get_shift_bit(uint16_t keycode) { |
120 | if ((keycode >> 3) < SHIFT_BIT_SIZE) { | 120 | if ((keycode >> 3) < SHIFT_BIT_SIZE) { |
121 | return send_key_shift_bit[keycode >> 3] & (1 << (keycode & 7)); | 121 | return send_key_shift_bit[keycode >> 3] & (1 << (keycode & 7)); |
122 | } else { | 122 | } else { |
123 | dprintf("get_shift_bit: Can't get shift bit. keycode: %02X\n", keycode); | 123 | dprintf("get_shift_bit: Can't get shift bit. keycode: %02X\n", keycode); |
124 | return 0; | 124 | return 0; |
125 | } | 125 | } |
126 | } | 126 | } |
127 | 127 | ||
128 | void add_shift_bit(uint16_t keycode) { | 128 | void add_shift_bit(uint16_t keycode) { |
129 | if ((keycode >> 3) < SHIFT_BIT_SIZE) { | 129 | if ((keycode >> 3) < SHIFT_BIT_SIZE) { |
130 | send_key_shift_bit[keycode >> 3] |= (1 << (keycode & 7)); | 130 | send_key_shift_bit[keycode >> 3] |= (1 << (keycode & 7)); |
131 | } else { | 131 | } else { |
132 | dprintf("add_shift_bit: Can't add shift bit. keycode: %02X\n", keycode); | 132 | dprintf("add_shift_bit: Can't add shift bit. keycode: %02X\n", keycode); |
133 | } | 133 | } |
134 | } | 134 | } |
135 | 135 | ||
136 | void del_shift_bit(uint16_t keycode) { | 136 | void del_shift_bit(uint16_t keycode) { |
137 | if ((keycode >> 3) < SHIFT_BIT_SIZE) { | 137 | if ((keycode >> 3) < SHIFT_BIT_SIZE) { |
138 | send_key_shift_bit[keycode >> 3] &= ~(1 << (keycode & 7)); | 138 | send_key_shift_bit[keycode >> 3] &= ~(1 << (keycode & 7)); |
139 | } else { | 139 | } else { |
140 | dprintf("del_shift_bit: Can't delete shift bit. keycode: %02X\n", keycode); | 140 | dprintf("del_shift_bit: Can't delete shift bit. keycode: %02X\n", keycode); |
141 | } | 141 | } |
142 | } | 142 | } |