|
@@ -455,103 +455,29 @@ bool process_record_quantum(keyrecord_t *record) {
|
|
|
return process_action_kb(record);
|
|
|
}
|
|
|
|
|
|
-#ifdef JIS_KEYCODE
|
|
|
-static const uint16_t ascii_to_shift_lut[8] PROGMEM = {
|
|
|
- 0x0000,
|
|
|
- 0, 0, 0, 0, 0, 0, 0, 0,*/
|
|
|
- 0x0000,
|
|
|
- 0, 0, 0, 0, 0, 0, 0, 0,*/
|
|
|
- 0x7ff0,
|
|
|
- 1, 1, 1, 1, 0, 0, 0, 0,*/
|
|
|
- 0x000f,
|
|
|
- 0, 0, 0, 0, 1, 1, 1, 1,*/
|
|
|
- 0x7fff,
|
|
|
- 1, 1, 1, 1, 1, 1, 1, 1,*/
|
|
|
- 0xffe1,
|
|
|
- 1, 1, 1, 0, 0, 0, 0, 1,*/
|
|
|
- 0x8000,
|
|
|
- 0, 0, 0, 0, 0, 0, 0, 0,*/
|
|
|
- 0x001e,
|
|
|
- 0, 0, 0, 1, 1, 1, 1, 0*/
|
|
|
-};
|
|
|
-
|
|
|
-static const struct {
|
|
|
- uint8_t controls_0[16],
|
|
|
- controls_1[16],
|
|
|
- numerics[16],
|
|
|
- alphabets_0[16],
|
|
|
- alphabets_1[16];
|
|
|
-} lower_to_keycode PROGMEM = {
|
|
|
- .controls_0 = {
|
|
|
+#if defined SENDSTRING_JIS_KEYCODE
|
|
|
+
|
|
|
+const bool ascii_to_shift_lut[0x80] PROGMEM = {
|
|
|
0, 0, 0, 0, 0, 0, 0, 0,
|
|
|
- KC_BSPC, KC_TAB, KC_ENT, 0, 0, 0, 0, 0,
|
|
|
- },
|
|
|
- .controls_1 = {
|
|
|
0, 0, 0, 0, 0, 0, 0, 0,
|
|
|
- 0, 0, 0, KC_ESC, 0, 0, 0, 0,
|
|
|
- },
|
|
|
- .numerics = {
|
|
|
- KC_0, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7,
|
|
|
- KC_8, KC_9, KC_QUOT, KC_SCLN, KC_COMM, KC_MINS, KC_DOT, KC_SLSH,
|
|
|
- },
|
|
|
- .alphabets_0 = {
|
|
|
- KC_LBRC, KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G,
|
|
|
- KC_H, KC_I, KC_J, KC_K, KC_L, KC_M, KC_N, KC_O,
|
|
|
- },
|
|
|
- .alphabets_1 = {
|
|
|
- KC_P, KC_Q, KC_R, KC_S, KC_T, KC_U, KC_V, KC_W,
|
|
|
- KC_X, KC_Y, KC_Z, KC_RBRC, KC_JYEN, KC_BSLS, KC_EQL, KC_RO,
|
|
|
- },
|
|
|
-};
|
|
|
-static const uint8_t* ascii_to_keycode_lut[8] = {
|
|
|
- lower_to_keycode.controls_0,
|
|
|
- lower_to_keycode.controls_1,
|
|
|
- lower_to_keycode.numerics,
|
|
|
- lower_to_keycode.numerics,
|
|
|
- lower_to_keycode.alphabets_0,
|
|
|
- lower_to_keycode.alphabets_1,
|
|
|
- lower_to_keycode.alphabets_0,
|
|
|
- lower_to_keycode.alphabets_1
|
|
|
+ 0, 0, 0, 0, 0, 0, 0, 0,
|
|
|
+ 0, 0, 0, 0, 0, 0, 0, 0,
|
|
|
+ 0, 1, 1, 1, 1, 1, 1, 1,
|
|
|
+ 1, 1, 1, 1, 0, 0, 0, 0,
|
|
|
+ 0, 0, 0, 0, 0, 0, 0, 0,
|
|
|
+ 0, 0, 0, 0, 1, 1, 1, 1,
|
|
|
+ 0, 1, 1, 1, 1, 1, 1, 1,
|
|
|
+ 1, 1, 1, 1, 1, 1, 1, 1,
|
|
|
+ 1, 1, 1, 1, 1, 1, 1, 1,
|
|
|
+ 1, 1, 1, 0, 0, 0, 0, 1,
|
|
|
+ 1, 0, 0, 0, 0, 0, 0, 0,
|
|
|
+ 0, 0, 0, 0, 0, 0, 0, 0,
|
|
|
+ 0, 0, 0, 0, 0, 0, 0, 0,
|
|
|
+ 0, 0, 0, 1, 1, 1, 1, 0
|
|
|
};
|
|
|
-
|
|
|
-void send_string(const char *str) {
|
|
|
- while (1) {
|
|
|
- uint8_t keycode;
|
|
|
- bool shift;
|
|
|
- uint8_t ascii_code = pgm_read_byte(str);
|
|
|
-
|
|
|
- if ( ascii_code == 0x00u ){ break; }
|
|
|
- else if (ascii_code == 0x20u) {
|
|
|
- keycode = KC_SPC;
|
|
|
- shift = false;
|
|
|
- }
|
|
|
- else if (ascii_code == 0x7Fu) {
|
|
|
- keycode = KC_DEL;
|
|
|
- shift = false;
|
|
|
- }
|
|
|
- else {
|
|
|
- int hi = ascii_code>>4 & 0x0f,
|
|
|
- lo = ascii_code & 0x0f;
|
|
|
- keycode = pgm_read_byte(&ascii_to_keycode_lut[hi][lo]);
|
|
|
- shift = !!( pgm_read_word(&ascii_to_shift_lut[hi]) & (0x8000u>>lo) );
|
|
|
- }
|
|
|
-
|
|
|
- if (shift) {
|
|
|
- register_code(KC_LSFT);
|
|
|
- register_code(keycode);
|
|
|
- unregister_code(keycode);
|
|
|
- unregister_code(KC_LSFT);
|
|
|
- }
|
|
|
- else {
|
|
|
- register_code(keycode);
|
|
|
- unregister_code(keycode);
|
|
|
- }
|
|
|
- ++str;
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
#else
|
|
|
-static const bool ascii_to_qwerty_shift_lut[0x80] PROGMEM = {
|
|
|
+
|
|
|
+const bool ascii_to_shift_lut[0x80] PROGMEM = {
|
|
|
0, 0, 0, 0, 0, 0, 0, 0,
|
|
|
0, 0, 0, 0, 0, 0, 0, 0,
|
|
|
0, 0, 0, 0, 0, 0, 0, 0,
|
|
@@ -569,8 +495,73 @@ static const bool ascii_to_qwerty_shift_lut[0x80] PROGMEM = {
|
|
|
0, 0, 0, 0, 0, 0, 0, 0,
|
|
|
0, 0, 0, 1, 1, 1, 1, 0
|
|
|
};
|
|
|
+#endif
|
|
|
|
|
|
-static const uint8_t ascii_to_qwerty_keycode_lut[0x80] PROGMEM = {
|
|
|
+#if defined SENDSTRING_JIS_KEYCODE
|
|
|
+
|
|
|
+const uint8_t ascii_to_keycode_lut[0x80] PROGMEM = {
|
|
|
+ 0, 0, 0, 0, 0, 0, 0, 0,
|
|
|
+ KC_BSPC, KC_TAB, KC_ENT, 0, 0, 0, 0, 0,
|
|
|
+ 0, 0, 0, 0, 0, 0, 0, 0,
|
|
|
+ 0, 0, 0, KC_ESC, 0, 0, 0, 0,
|
|
|
+ KC_SPC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7,
|
|
|
+ KC_8, KC_9, KC_QUOT, KC_SCLN, KC_COMM, KC_MINS, KC_DOT, KC_SLSH,
|
|
|
+ KC_0, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7,
|
|
|
+ KC_8, KC_9, KC_QUOT, KC_SCLN, KC_COMM, KC_MINS, KC_DOT, KC_SLSH,
|
|
|
+ KC_LBRC, KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G,
|
|
|
+ KC_H, KC_I, KC_J, KC_K, KC_L, KC_M, KC_N, KC_O,
|
|
|
+ KC_P, KC_Q, KC_R, KC_S, KC_T, KC_U, KC_V, KC_W,
|
|
|
+ KC_X, KC_Y, KC_Z, KC_RBRC, KC_JYEN, KC_BSLS, KC_EQL, KC_RO,
|
|
|
+ KC_LBRC, KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G,
|
|
|
+ KC_H, KC_I, KC_J, KC_K, KC_L, KC_M, KC_N, KC_O,
|
|
|
+ KC_P, KC_Q, KC_R, KC_S, KC_T, KC_U, KC_V, KC_W,
|
|
|
+ KC_X, KC_Y, KC_Z, KC_RBRC, KC_JYEN, KC_BSLS, KC_EQL, KC_DEL,
|
|
|
+};
|
|
|
+#elif defined SENDSTRING_COLEMAK_KEYCODE
|
|
|
+
|
|
|
+#include "keymap_colemak.h"
|
|
|
+const uint8_t ascii_to_keycode_lut[0x80] PROGMEM = {
|
|
|
+ 0, 0, 0, 0, 0, 0, 0, 0,
|
|
|
+ KC_BSPC, KC_TAB, KC_ENT, 0, 0, 0, 0, 0,
|
|
|
+ 0, 0, 0, 0, 0, 0, 0, 0,
|
|
|
+ 0, 0, 0, KC_ESC, 0, 0, 0, 0,
|
|
|
+ KC_SPC, KC_1, KC_QUOT, KC_3, KC_4, KC_5, KC_7, KC_QUOT,
|
|
|
+ KC_9, KC_0, KC_8, KC_EQL, KC_COMM, KC_MINS, KC_DOT, KC_SLSH,
|
|
|
+ KC_0, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7,
|
|
|
+ KC_8, KC_9, CM_SCLN, CM_SCLN, KC_COMM, KC_EQL, KC_DOT, KC_SLSH,
|
|
|
+ KC_2, CM_A, CM_B, CM_C, CM_D, CM_E, CM_F, CM_G,
|
|
|
+ CM_H, CM_I, CM_J, CM_K, CM_L, CM_M, CM_N, CM_O,
|
|
|
+ CM_P, CM_Q, CM_R, CM_S, CM_T, CM_U, CM_V, CM_W,
|
|
|
+ CM_X, CM_Y, CM_Z, KC_LBRC, KC_BSLS, KC_RBRC, KC_6, KC_MINS,
|
|
|
+ KC_GRV, CM_A, CM_B, CM_C, CM_D, CM_E, CM_F, CM_G,
|
|
|
+ CM_H, CM_I, CM_J, CM_K, CM_L, CM_M, CM_N, CM_O,
|
|
|
+ CM_P, CM_Q, CM_R, CM_S, CM_T, CM_U, CM_V, CM_W,
|
|
|
+ CM_X, CM_Y, CM_Z, KC_LBRC, KC_BSLS, KC_RBRC, KC_GRV, KC_DEL
|
|
|
+};
|
|
|
+#elif defined SENDSTRING_DVORAK_KEYCODE
|
|
|
+
|
|
|
+#include "keymap_dvorak.h"
|
|
|
+const uint8_t ascii_to_keycode_lut[0x80] PROGMEM = {
|
|
|
+ 0, 0, 0, 0, 0, 0, 0, 0,
|
|
|
+ KC_BSPC, KC_TAB, KC_ENT, 0, 0, 0, 0, 0,
|
|
|
+ 0, 0, 0, 0, 0, 0, 0, 0,
|
|
|
+ 0, 0, 0, KC_ESC, 0, 0, 0, 0,
|
|
|
+ KC_SPC, DV_1, DV_QUOT, DV_3, DV_4, DV_5, DV_7, DV_QUOT,
|
|
|
+ DV_9, DV_0, DV_8, DV_EQL, DV_COMM, DV_MINS, DV_DOT, DV_SLSH,
|
|
|
+ DV_0, DV_1, DV_2, DV_3, DV_4, DV_5, DV_6, DV_7,
|
|
|
+ DV_8, DV_9, DV_SCLN, DV_SCLN, DV_COMM, DV_EQL, DV_DOT, DV_SLSH,
|
|
|
+ DV_2, DV_A, DV_B, DV_C, DV_D, DV_E, DV_F, DV_G,
|
|
|
+ DV_H, DV_I, DV_J, DV_K, DV_L, DV_M, DV_N, DV_O,
|
|
|
+ DV_P, DV_Q, DV_R, DV_S, DV_T, DV_U, DV_V, DV_W,
|
|
|
+ DV_X, DV_Y, DV_Z, DV_LBRC, DV_BSLS, DV_RBRC, DV_6, DV_MINS,
|
|
|
+ DV_GRV, DV_A, DV_B, DV_C, DV_D, DV_E, DV_F, DV_G,
|
|
|
+ DV_H, DV_I, DV_J, DV_K, DV_L, DV_M, DV_N, DV_O,
|
|
|
+ DV_P, DV_Q, DV_R, DV_S, DV_T, DV_U, DV_V, DV_W,
|
|
|
+ DV_X, DV_Y, DV_Z, DV_LBRC, DV_BSLS, DV_RBRC, DV_GRV, KC_DEL
|
|
|
+};
|
|
|
+#else
|
|
|
+
|
|
|
+const uint8_t ascii_to_keycode_lut[0x80] PROGMEM = {
|
|
|
0, 0, 0, 0, 0, 0, 0, 0,
|
|
|
KC_BSPC, KC_TAB, KC_ENT, 0, 0, 0, 0, 0,
|
|
|
0, 0, 0, 0, 0, 0, 0, 0,
|
|
@@ -588,14 +579,19 @@ static const uint8_t ascii_to_qwerty_keycode_lut[0x80] PROGMEM = {
|
|
|
KC_P, KC_Q, KC_R, KC_S, KC_T, KC_U, KC_V, KC_W,
|
|
|
KC_X, KC_Y, KC_Z, KC_LBRC, KC_BSLS, KC_RBRC, KC_GRV, KC_DEL
|
|
|
};
|
|
|
+#endif
|
|
|
|
|
|
void send_string(const char *str) {
|
|
|
+ send_string_with_delay(str, 0);
|
|
|
+}
|
|
|
+
|
|
|
+void send_string_with_delay(const char *str, uint8_t interval) {
|
|
|
while (1) {
|
|
|
uint8_t keycode;
|
|
|
uint8_t ascii_code = pgm_read_byte(str);
|
|
|
if (!ascii_code) break;
|
|
|
- keycode = pgm_read_byte(&ascii_to_qwerty_keycode_lut[ascii_code]);
|
|
|
- if (pgm_read_byte(&ascii_to_qwerty_shift_lut[ascii_code])) {
|
|
|
+ keycode = pgm_read_byte(&ascii_to_keycode_lut[ascii_code]);
|
|
|
+ if (pgm_read_byte(&ascii_to_shift_lut[ascii_code])) {
|
|
|
register_code(KC_LSFT);
|
|
|
register_code(keycode);
|
|
|
unregister_code(keycode);
|
|
@@ -606,55 +602,11 @@ void send_string(const char *str) {
|
|
|
unregister_code(keycode);
|
|
|
}
|
|
|
++str;
|
|
|
+
|
|
|
+ { uint8_t ms = interval; while (ms--) wait_ms(1); }
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-#endif
|
|
|
-
|
|
|
-
|
|
|
-#if 0
|
|
|
-#include "keymap_colemak.h"
|
|
|
-
|
|
|
-const bool ascii_to_colemak_shift_lut[0x80] PROGMEM = {
|
|
|
- 0, 0, 0, 0, 0, 0, 0, 0,
|
|
|
- 0, 0, 0, 0, 0, 0, 0, 0,
|
|
|
- 0, 0, 0, 0, 0, 0, 0, 0,
|
|
|
- 0, 0, 0, 0, 0, 0, 0, 0,
|
|
|
- 0, 1, 1, 1, 1, 1, 1, 0,
|
|
|
- 1, 1, 1, 1, 0, 0, 0, 0,
|
|
|
- 0, 0, 0, 0, 0, 0, 0, 0,
|
|
|
- 0, 0, 1, 0, 1, 0, 1, 1,
|
|
|
- 1, 1, 1, 1, 1, 1, 1, 1,
|
|
|
- 1, 1, 1, 1, 1, 1, 1, 1,
|
|
|
- 1, 1, 1, 1, 1, 1, 1, 1,
|
|
|
- 1, 1, 1, 0, 0, 0, 1, 1,
|
|
|
- 0, 0, 0, 0, 0, 0, 0, 0,
|
|
|
- 0, 0, 0, 0, 0, 0, 0, 0,
|
|
|
- 0, 0, 0, 0, 0, 0, 0, 0,
|
|
|
- 0, 0, 0, 1, 1, 1, 1, 0
|
|
|
-};
|
|
|
-
|
|
|
-const uint8_t ascii_to_colemak_keycode_lut[0x80] PROGMEM = {
|
|
|
- 0, 0, 0, 0, 0, 0, 0, 0,
|
|
|
- KC_BSPC, KC_TAB, KC_ENT, 0, 0, 0, 0, 0,
|
|
|
- 0, 0, 0, 0, 0, 0, 0, 0,
|
|
|
- 0, 0, 0, KC_ESC, 0, 0, 0, 0,
|
|
|
- KC_SPC, KC_1, KC_QUOT, KC_3, KC_4, KC_5, KC_7, KC_QUOT,
|
|
|
- KC_9, KC_0, KC_8, KC_EQL, KC_COMM, KC_MINS, KC_DOT, KC_SLSH,
|
|
|
- KC_0, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7,
|
|
|
- KC_8, KC_9, CM_SCLN, CM_SCLN, KC_COMM, KC_EQL, KC_DOT, KC_SLSH,
|
|
|
- KC_2, CM_A, CM_B, CM_C, CM_D, CM_E, CM_F, CM_G,
|
|
|
- CM_H, CM_I, CM_J, CM_K, CM_L, CM_M, CM_N, CM_O,
|
|
|
- CM_P, CM_Q, CM_R, CM_S, CM_T, CM_U, CM_V, CM_W,
|
|
|
- CM_X, CM_Y, CM_Z, KC_LBRC, KC_BSLS, KC_RBRC, KC_6, KC_MINS,
|
|
|
- KC_GRV, CM_A, CM_B, CM_C, CM_D, CM_E, CM_F, CM_G,
|
|
|
- CM_H, CM_I, CM_J, CM_K, CM_L, CM_M, CM_N, CM_O,
|
|
|
- CM_P, CM_Q, CM_R, CM_S, CM_T, CM_U, CM_V, CM_W,
|
|
|
- CM_X, CM_Y, CM_Z, KC_LBRC, KC_BSLS, KC_RBRC, KC_GRV, KC_DEL
|
|
|
-};
|
|
|
-
|
|
|
-#endif
|
|
|
-
|
|
|
void update_tri_layer(uint8_t layer1, uint8_t layer2, uint8_t layer3) {
|
|
|
if (IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2)) {
|
|
|
layer_on(layer3);
|