diff options
| author | Ole Anders <git@swoy.org> | 2017-03-07 19:39:00 +0100 | 
|---|---|---|
| committer | Ole Anders <git@swoy.org> | 2017-03-07 19:39:00 +0100 | 
| commit | 25a7c941746d077d246468bec6bebdb01e478090 (patch) | |
| tree | 906b491bb1465be287ec4dc02e9857437f7582a6 /tmk_core/common | |
| parent | d1fb51976aeef8eeea5975c5bf75b6b1aa649826 (diff) | |
| parent | f5c8c5d4c854c5ae4dc586066c9b03557786c4c2 (diff) | |
Merge remote-tracking branch 'refs/remotes/qmk/master'
Diffstat (limited to 'tmk_core/common')
| -rw-r--r-- | tmk_core/common/action.c | 16 | ||||
| -rw-r--r-- | tmk_core/common/action_code.h | 10 | ||||
| -rw-r--r-- | tmk_core/common/action_macro.h | 26 | ||||
| -rw-r--r-- | tmk_core/common/keyboard.c | 1 | ||||
| -rw-r--r-- | tmk_core/common/matrix.h | 2 | ||||
| -rw-r--r-- | tmk_core/common/report.h | 7 | 
6 files changed, 41 insertions, 21 deletions
| diff --git a/tmk_core/common/action.c b/tmk_core/common/action.c index d485b46c77..f03670a7f7 100644 --- a/tmk_core/common/action.c +++ b/tmk_core/common/action.c @@ -49,6 +49,13 @@ void action_exec(keyevent_t event)      keyrecord_t record = { .event = event }; +#if (defined(ONESHOT_TIMEOUT) && (ONESHOT_TIMEOUT > 0)) +    if (has_oneshot_layer_timed_out()) { +        dprintf("Oneshot layer: timeout\n"); +        clear_oneshot_layer_state(ONESHOT_OTHER_KEY_PRESSED); +    } +#endif +  #ifndef NO_ACTION_TAPPING      action_tapping_process(record);  #else @@ -100,7 +107,7 @@ bool process_record_quantum(keyrecord_t *record) {      return true;  } -void process_record(keyrecord_t *record)  +void process_record(keyrecord_t *record)  {      if (IS_NOEVENT(record->event)) { return; } @@ -126,13 +133,6 @@ void process_action(keyrecord_t *record, action_t action)      uint8_t tap_count = record->tap.count;  #endif -#if (defined(ONESHOT_TIMEOUT) && (ONESHOT_TIMEOUT > 0)) -    if (has_oneshot_layer_timed_out()) { -        dprintf("Oneshot layer: timeout\n"); -        clear_oneshot_layer_state(ONESHOT_OTHER_KEY_PRESSED); -    } -#endif -      if (event.pressed) {          // clear the potential weak mods left by previously pressed keys          clear_weak_mods(); diff --git a/tmk_core/common/action_code.h b/tmk_core/common/action_code.h index 33da35f35f..b15aaa0eb3 100644 --- a/tmk_core/common/action_code.h +++ b/tmk_core/common/action_code.h @@ -47,10 +47,15 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.   * 0100|10| usage(10)     (reserved)   * 0100|11| usage(10)     (reserved)   * - * ACT_MOUSEKEY(0110): TODO: Not needed? + * + * ACT_MOUSEKEY(0101): TODO: Merge these two actions to conserve space?   * 0101|xxxx| keycode     Mouse key   * - * 011x|xxxx xxxx xxxx    (reseved) + * ACT_SWAP_HANDS(0110): + * 0110|xxxx| keycode     Swap hands (keycode on tap, or options) + * + * + * 0111|xxxx xxxx xxxx    (reserved)   *   *   * Layer Actions(10xx) @@ -67,7 +72,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.   *   ee:    on event(01:press, 10:release, 11:both)   *   * 1001|xxxx|xxxx xxxx   (reserved) - * 1001|oopp|BBBB BBBB   8-bit Bitwise Operation???   *   * ACT_LAYER_TAP(101x):   * 101E|LLLL| keycode    On/Off with tap key    (0x00-DF)[TAP] diff --git a/tmk_core/common/action_macro.h b/tmk_core/common/action_macro.h index aedc32ec6b..f373f5068e 100644 --- a/tmk_core/common/action_macro.h +++ b/tmk_core/common/action_macro.h @@ -20,11 +20,33 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  #include "progmem.h" -#define MACRO_NONE      0 + +typedef uint8_t macro_t; + +#define MACRO_NONE      (macro_t*)0  #define MACRO(...)      ({ static const macro_t __m[] PROGMEM = { __VA_ARGS__ }; &__m[0]; })  #define MACRO_GET(p)    pgm_read_byte(p) -typedef uint8_t macro_t; +// Sends press when the macro key is pressed, release when release, or tap_macro when the key has been tapped +#define MACRO_TAP_HOLD(record, press, release, tap_macro) ( ((record)->event.pressed) ? \ +     ( ((record)->tap.count <= 0 || (record)->tap.interrupted) ? (press) : MACRO_NONE ) : \ +     ( ((record)->tap.count > 0 && !((record)->tap.interrupted)) ? (tap_macro) : (release) ) ) + +// Holds down the modifier mod when the macro key is held, or sends macro instead when tapped +#define MACRO_TAP_HOLD_MOD(record, macro, mod) MACRO_TAP_HOLD(record, (MACRO(D(mod), END)), MACRO(U(mod), END), macro) + +// Holds down the modifier mod when the macro key is held, or pressed a shifted key when tapped (eg: shift+3 for #) +#define MACRO_TAP_SHFT_KEY_HOLD_MOD(record, key, mod) MACRO_TAP_HOLD_MOD(record, (MACRO(I(10), D(LSFT), T(key), U(LSFT), END)), mod) + + +// Momentary switch layer when held, sends macro if tapped +#define MACRO_TAP_HOLD_LAYER(record, macro, layer) ( ((record)->event.pressed) ? \ +     ( ((record)->tap.count <= 0 || (record)->tap.interrupted) ? ({layer_on((layer)); MACRO_NONE; }) : MACRO_NONE ) : \ +     ( ((record)->tap.count > 0 && !((record)->tap.interrupted)) ? (macro) : ({layer_off((layer)); MACRO_NONE; }) ) ) + +// Momentary switch layer when held, presses a shifted key when tapped (eg: shift+3 for #) +#define MACRO_TAP_SHFT_KEY_HOLD_LAYER(record, key, layer) MACRO_TAP_HOLD_LAYER(record, MACRO(I(10), D(LSFT), T(key), U(LSFT), END), layer) +       #ifndef NO_ACTION_MACRO diff --git a/tmk_core/common/keyboard.c b/tmk_core/common/keyboard.c index 7653507928..3aa82231b0 100644 --- a/tmk_core/common/keyboard.c +++ b/tmk_core/common/keyboard.c @@ -14,6 +14,7 @@ GNU General Public License for more details.  You should have received a copy of the GNU General Public License  along with this program.  If not, see <http://www.gnu.org/licenses/>.  */ +  #include <stdint.h>  #include "keyboard.h"  #include "matrix.h" diff --git a/tmk_core/common/matrix.h b/tmk_core/common/matrix.h index cee3593eee..2543f5abce 100644 --- a/tmk_core/common/matrix.h +++ b/tmk_core/common/matrix.h @@ -50,7 +50,7 @@ void matrix_init(void);  uint8_t matrix_scan(void);  /* whether modified from previous scan. used after matrix_scan. */  bool matrix_is_modified(void) __attribute__ ((deprecated)); -/* whether a swtich is on */ +/* whether a switch is on */  bool matrix_is_on(uint8_t row, uint8_t col);  /* matrix state on row */  matrix_row_t matrix_get_row(uint8_t row); diff --git a/tmk_core/common/report.h b/tmk_core/common/report.h index 0c799eca39..8fb28b6ce3 100644 --- a/tmk_core/common/report.h +++ b/tmk_core/common/report.h @@ -134,13 +134,6 @@ typedef union {      } nkro;  #endif  } __attribute__ ((packed)) report_keyboard_t; -/* -typedef struct { -    uint8_t mods; -    uint8_t reserved; -    uint8_t keys[REPORT_KEYS]; -} __attribute__ ((packed)) report_keyboard_t; -*/  typedef struct {      uint8_t buttons; | 
