summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDrashna Jaelre <drashna@live.com>2019-04-08 04:19:00 +0200
committerGitHub <noreply@github.com>2019-04-08 04:19:00 +0200
commit908966bdf36605301d27cdcae82c3201c156a43f (patch)
tree5749c833ad1b79de8958bdcfe2ddf2e1f06012a2
parent6a4c54870cff157f1056ca65363c9e862920cbc9 (diff)
parentd15bb05c935e378f2e1e912a46c3114697dd00e4 (diff)
downloadqmk_firmware-908966bdf36605301d27cdcae82c3201c156a43f.tar.gz
qmk_firmware-908966bdf36605301d27cdcae82c3201c156a43f.tar.xz
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
-rw-r--r--quantum/dynamic_keymap.c18
-rw-r--r--quantum/quantum.c12
-rw-r--r--quantum/quantum.h4
3 files changed, 23 insertions, 11 deletions
diff --git a/quantum/dynamic_keymap.c b/quantum/dynamic_keymap.c
index 14627a93d..38400e36f 100644
--- 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
index 48c338fc8..a62368ded 100644
--- 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
index d0b2bedb1..c7fce9a0f 100644
--- 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)