mirror of
https://github.com/qmk/qmk_firmware
synced 2024-11-19 03:36:28 +00:00
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
This commit is contained in:
commit
908966bdf3
3 changed files with 23 additions and 11 deletions
|
@ -210,19 +210,27 @@ void dynamic_keymap_macro_send( uint8_t id )
|
||||||
++p;
|
++p;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Send the macro string one char at a time
|
// Send the macro string one or two chars at a time
|
||||||
// by making temporary 1 char strings
|
// by making temporary 1 or 2 char strings
|
||||||
char data[2] = { 0, 0 };
|
char data[3] = { 0, 0, 0 };
|
||||||
// We already checked there was a null at the end of
|
// We already checked there was a null at the end of
|
||||||
// the buffer, so this cannot go past the end
|
// the buffer, so this cannot go past the end
|
||||||
while ( 1 ) {
|
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
|
// Stop at the null terminator of this macro string
|
||||||
if ( data[0] == 0 ) {
|
if ( data[0] == 0 ) {
|
||||||
break;
|
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);
|
send_string(data);
|
||||||
++p;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -882,16 +882,16 @@ void send_string_with_delay(const char *str, uint8_t interval) {
|
||||||
while (1) {
|
while (1) {
|
||||||
char ascii_code = *str;
|
char ascii_code = *str;
|
||||||
if (!ascii_code) break;
|
if (!ascii_code) break;
|
||||||
if (ascii_code == 1) {
|
if (ascii_code == SS_TAP_CODE) {
|
||||||
// tap
|
// tap
|
||||||
uint8_t keycode = *(++str);
|
uint8_t keycode = *(++str);
|
||||||
register_code(keycode);
|
register_code(keycode);
|
||||||
unregister_code(keycode);
|
unregister_code(keycode);
|
||||||
} else if (ascii_code == 2) {
|
} else if (ascii_code == SS_DOWN_CODE) {
|
||||||
// down
|
// down
|
||||||
uint8_t keycode = *(++str);
|
uint8_t keycode = *(++str);
|
||||||
register_code(keycode);
|
register_code(keycode);
|
||||||
} else if (ascii_code == 3) {
|
} else if (ascii_code == SS_UP_CODE) {
|
||||||
// up
|
// up
|
||||||
uint8_t keycode = *(++str);
|
uint8_t keycode = *(++str);
|
||||||
unregister_code(keycode);
|
unregister_code(keycode);
|
||||||
|
@ -908,16 +908,16 @@ void send_string_with_delay_P(const char *str, uint8_t interval) {
|
||||||
while (1) {
|
while (1) {
|
||||||
char ascii_code = pgm_read_byte(str);
|
char ascii_code = pgm_read_byte(str);
|
||||||
if (!ascii_code) break;
|
if (!ascii_code) break;
|
||||||
if (ascii_code == 1) {
|
if (ascii_code == SS_TAP_CODE) {
|
||||||
// tap
|
// tap
|
||||||
uint8_t keycode = pgm_read_byte(++str);
|
uint8_t keycode = pgm_read_byte(++str);
|
||||||
register_code(keycode);
|
register_code(keycode);
|
||||||
unregister_code(keycode);
|
unregister_code(keycode);
|
||||||
} else if (ascii_code == 2) {
|
} else if (ascii_code == SS_DOWN_CODE) {
|
||||||
// down
|
// down
|
||||||
uint8_t keycode = pgm_read_byte(++str);
|
uint8_t keycode = pgm_read_byte(++str);
|
||||||
register_code(keycode);
|
register_code(keycode);
|
||||||
} else if (ascii_code == 3) {
|
} else if (ascii_code == SS_UP_CODE) {
|
||||||
// up
|
// up
|
||||||
uint8_t keycode = pgm_read_byte(++str);
|
uint8_t keycode = pgm_read_byte(++str);
|
||||||
unregister_code(keycode);
|
unregister_code(keycode);
|
||||||
|
|
|
@ -187,6 +187,10 @@ extern uint32_t default_layer_state;
|
||||||
#define ADD_SLASH_X(y) STRINGIZE(\x ## y)
|
#define ADD_SLASH_X(y) STRINGIZE(\x ## y)
|
||||||
#define SYMBOL_STR(x) ADD_SLASH_X(x)
|
#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_TAP(keycode) "\1" SYMBOL_STR(keycode)
|
||||||
#define SS_DOWN(keycode) "\2" SYMBOL_STR(keycode)
|
#define SS_DOWN(keycode) "\2" SYMBOL_STR(keycode)
|
||||||
#define SS_UP(keycode) "\3" SYMBOL_STR(keycode)
|
#define SS_UP(keycode) "\3" SYMBOL_STR(keycode)
|
||||||
|
|
Loading…
Reference in a new issue