qmk

Unnamed repository; edit this file 'description' to name the repository.
git clone git://git.z3bra.org/qmk.git
Log | Files | Refs | Submodules | LICENSE

commit 908966bdf36605301d27cdcae82c3201c156a43f
parent 6a4c54870cff157f1056ca65363c9e862920cbc9
Author: Drashna Jaelre <drashna@live.com>
Date:   Sun,  7 Apr 2019 19:19:00 -0700

Fixed tap/down/up handling in dynamic keymap macros (#5363)

* Fixed tap/down/up handling in dynamic keymap macros

* Added SS_TAP_CODE, SS_DOWN_CODE, SS_UP_CODE

Diffstat:
quantum/dynamic_keymap.c | 18+++++++++++++-----
quantum/quantum.c | 12++++++------
quantum/quantum.h | 4++++
3 files changed, 23 insertions(+), 11 deletions(-)

diff --git a/quantum/dynamic_keymap.c b/quantum/dynamic_keymap.c @@ -210,19 +210,27 @@ void dynamic_keymap_macro_send( uint8_t id ) ++p; } - // Send the macro string one char at a time - // by making temporary 1 char strings - char data[2] = { 0, 0 }; + // Send the macro string one or two chars at a time + // by making temporary 1 or 2 char strings + char data[3] = { 0, 0, 0 }; // We already checked there was a null at the end of // the buffer, so this cannot go past the end while ( 1 ) { - data[0] = eeprom_read_byte(p); + data[0] = eeprom_read_byte(p++); + data[1] = 0; // Stop at the null terminator of this macro string if ( data[0] == 0 ) { break; } + // If the char is magic (tap, down, up), + // add the next char (key to use) and send a 2 char string. + if ( data[0] == SS_TAP_CODE || data[0] == SS_DOWN_CODE || data[0] == SS_UP_CODE ) { + data[1] = eeprom_read_byte(p++); + if ( data[1] == 0 ) { + break; + } + } send_string(data); - ++p; } } diff --git a/quantum/quantum.c b/quantum/quantum.c @@ -882,16 +882,16 @@ void send_string_with_delay(const char *str, uint8_t interval) { while (1) { char ascii_code = *str; if (!ascii_code) break; - if (ascii_code == 1) { + if (ascii_code == SS_TAP_CODE) { // tap uint8_t keycode = *(++str); register_code(keycode); unregister_code(keycode); - } else if (ascii_code == 2) { + } else if (ascii_code == SS_DOWN_CODE) { // down uint8_t keycode = *(++str); register_code(keycode); - } else if (ascii_code == 3) { + } else if (ascii_code == SS_UP_CODE) { // up uint8_t keycode = *(++str); unregister_code(keycode); @@ -908,16 +908,16 @@ void send_string_with_delay_P(const char *str, uint8_t interval) { while (1) { char ascii_code = pgm_read_byte(str); if (!ascii_code) break; - if (ascii_code == 1) { + if (ascii_code == SS_TAP_CODE) { // tap uint8_t keycode = pgm_read_byte(++str); register_code(keycode); unregister_code(keycode); - } else if (ascii_code == 2) { + } else if (ascii_code == SS_DOWN_CODE) { // down uint8_t keycode = pgm_read_byte(++str); register_code(keycode); - } else if (ascii_code == 3) { + } else if (ascii_code == SS_UP_CODE) { // up uint8_t keycode = pgm_read_byte(++str); unregister_code(keycode); diff --git a/quantum/quantum.h b/quantum/quantum.h @@ -187,6 +187,10 @@ extern uint32_t default_layer_state; #define ADD_SLASH_X(y) STRINGIZE(\x ## y) #define SYMBOL_STR(x) ADD_SLASH_X(x) +#define SS_TAP_CODE 1 +#define SS_DOWN_CODE 2 +#define SS_UP_CODE 3 + #define SS_TAP(keycode) "\1" SYMBOL_STR(keycode) #define SS_DOWN(keycode) "\2" SYMBOL_STR(keycode) #define SS_UP(keycode) "\3" SYMBOL_STR(keycode)