]> git.donarmstrong.com Git - qmk_firmware.git/commitdiff
Fixed tap/down/up handling in dynamic keymap macros (#5363)
authorDrashna Jaelre <drashna@live.com>
Mon, 8 Apr 2019 02:19:00 +0000 (19:19 -0700)
committerGitHub <noreply@github.com>
Mon, 8 Apr 2019 02:19:00 +0000 (19:19 -0700)
* Fixed tap/down/up handling in dynamic keymap macros

* Added SS_TAP_CODE, SS_DOWN_CODE, SS_UP_CODE

quantum/dynamic_keymap.c
quantum/quantum.c
quantum/quantum.h

index 14627a93d6de80f83bdca802cea1bf03d0d90331..38400e36f10d39444f09b1dce259b249b0957f45 100644 (file)
@@ -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;
        }
 }
 
index 48c338fc85c02bae4c2fb92fad2ba7c431504f89..a62368ded29e2a029ed560971c2ed6296901a9fe 100644 (file)
@@ -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);
index d0b2bedb1b1c732f3cb9231194452a913e9e955d..c7fce9a0f6099d09c8611999cec22a0b4ed98fdf 100644 (file)
@@ -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)