diff options
Diffstat (limited to 'tmk_core/common')
| -rw-r--r-- | tmk_core/common/action.c | 66 | ||||
| -rw-r--r-- | tmk_core/common/action_util.c | 31 | ||||
| -rw-r--r-- | tmk_core/common/action_util.h | 7 | ||||
| -rw-r--r-- | tmk_core/common/arm_atsam/suspend.c | 2 | ||||
| -rw-r--r-- | tmk_core/common/chibios/bootloader.c | 10 | ||||
| -rw-r--r-- | tmk_core/common/eeconfig.c | 13 | ||||
| -rw-r--r-- | tmk_core/common/keyboard.c | 21 | ||||
| -rw-r--r-- | tmk_core/common/keyboard.h | 3 | ||||
| -rw-r--r-- | tmk_core/common/matrix.h | 10 | ||||
| -rw-r--r-- | tmk_core/common/report.h | 4 | 
10 files changed, 129 insertions, 38 deletions
diff --git a/tmk_core/common/action.c b/tmk_core/common/action.c index ee9aa0df77..77da0139f2 100644 --- a/tmk_core/common/action.c +++ b/tmk_core/common/action.c @@ -37,9 +37,13 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  #    include "nodebug.h"  #endif +#ifdef POINTING_DEVICE_ENABLE +#    include "pointing_device.h" +#endif +  int tp_buttons; -#ifdef RETRO_TAPPING +#if defined(RETRO_TAPPING) || defined(RETRO_TAPPING_PER_KEY)  int retro_tapping_counter = 0;  #endif @@ -51,6 +55,10 @@ int retro_tapping_counter = 0;  __attribute__((weak)) bool get_ignore_mod_tap_interrupt(uint16_t keycode, keyrecord_t *record) { return false; }  #endif +#ifdef RETRO_TAPPING_PER_KEY +__attribute__((weak)) bool get_retro_tapping(uint16_t keycode, keyrecord_t *record) { return false; } +#endif +  #ifndef TAP_CODE_DELAY  #    define TAP_CODE_DELAY 0  #endif @@ -67,7 +75,7 @@ void action_exec(keyevent_t event) {          dprint("EVENT: ");          debug_event(event);          dprintln(); -#ifdef RETRO_TAPPING +#if defined(RETRO_TAPPING) || defined(RETRO_TAPPING_PER_KEY)          retro_tapping_counter++;  #endif      } @@ -220,6 +228,19 @@ void process_record_handler(keyrecord_t *record) {      process_action(record, action);  } +#if defined(PS2_MOUSE_ENABLE) || defined(POINTING_DEVICE_ENABLE) +void register_button(bool pressed, enum mouse_buttons button) { +#    ifdef PS2_MOUSE_ENABLE +    tp_buttons = pressed ? tp_buttons | button : tp_buttons & ~button; +#    endif +#    ifdef POINTING_DEVICE_ENABLE +    report_mouse_t currentReport = pointing_device_get_report(); +    currentReport.buttons        = pressed ? currentReport.buttons | button : currentReport.buttons & ~button; +    pointing_device_set_report(currentReport); +#    endif +} +#endif +  /** \brief Take an action and processes it.   *   * FIXME: Needs documentation. @@ -404,15 +425,23 @@ void process_action(keyrecord_t *record, action_t action) {              if (event.pressed) {                  mousekey_on(action.key.code);                  switch (action.key.code) { -#    ifdef PS2_MOUSE_ENABLE +#    if defined(PS2_MOUSE_ENABLE) || defined(POINTING_DEVICE_ENABLE)                      case KC_MS_BTN1: -                        tp_buttons |= (1 << 0); +                        register_button(true, MOUSE_BTN1);                          break;                      case KC_MS_BTN2: -                        tp_buttons |= (1 << 1); +                        register_button(true, MOUSE_BTN2);                          break;                      case KC_MS_BTN3: -                        tp_buttons |= (1 << 2); +                        register_button(true, MOUSE_BTN3); +                        break; +#    endif +#    ifdef POINTING_DEVICE_ENABLE +                    case KC_MS_BTN4: +                        register_button(true, MOUSE_BTN4); +                        break; +                    case KC_MS_BTN5: +                        register_button(true, MOUSE_BTN5);                          break;  #    endif                      default: @@ -422,15 +451,23 @@ void process_action(keyrecord_t *record, action_t action) {              } else {                  mousekey_off(action.key.code);                  switch (action.key.code) { -#    ifdef PS2_MOUSE_ENABLE +#    if defined(PS2_MOUSE_ENABLE) || defined(POINTING_DEVICE_ENABLE)                      case KC_MS_BTN1: -                        tp_buttons &= ~(1 << 0); +                        register_button(false, MOUSE_BTN1);                          break;                      case KC_MS_BTN2: -                        tp_buttons &= ~(1 << 1); +                        register_button(false, MOUSE_BTN2);                          break;                      case KC_MS_BTN3: -                        tp_buttons &= ~(1 << 2); +                        register_button(false, MOUSE_BTN3); +                        break; +#    endif +#    ifdef POINTING_DEVICE_ENABLE +                    case KC_MS_BTN4: +                        register_button(false, MOUSE_BTN4); +                        break; +                    case KC_MS_BTN5: +                        register_button(false, MOUSE_BTN5);                          break;  #    endif                      default: @@ -692,20 +729,23 @@ void process_action(keyrecord_t *record, action_t action) {  #endif  #ifndef NO_ACTION_TAPPING -#    ifdef RETRO_TAPPING +#    if defined(RETRO_TAPPING) || defined(RETRO_TAPPING_PER_KEY)      if (!is_tap_action(action)) {          retro_tapping_counter = 0;      } else {          if (event.pressed) {              if (tap_count > 0) {                  retro_tapping_counter = 0; -            } else {              }          } else {              if (tap_count > 0) {                  retro_tapping_counter = 0;              } else { -                if (retro_tapping_counter == 2) { +                if ( +#        ifdef RETRO_TAPPING_PER_KEY +                    get_retro_tapping(get_event_keycode(record->event, false), record) && +#        endif +                    retro_tapping_counter == 2) {                      tap_code(action.layer_tap.code);                  }                  retro_tapping_counter = 0; diff --git a/tmk_core/common/action_util.c b/tmk_core/common/action_util.c index fd0e4409f0..000503b082 100644 --- a/tmk_core/common/action_util.c +++ b/tmk_core/common/action_util.c @@ -290,6 +290,32 @@ void set_macro_mods(uint8_t mods) { macro_mods = mods; }  void clear_macro_mods(void) { macro_mods = 0; }  #ifndef NO_ACTION_ONESHOT +/** \brief get oneshot mods + * + * FIXME: needs doc + */ +uint8_t get_oneshot_mods(void) { return oneshot_mods; } + +void add_oneshot_mods(uint8_t mods) { +    if ((oneshot_mods & mods) != mods) { +#    if (defined(ONESHOT_TIMEOUT) && (ONESHOT_TIMEOUT > 0)) +        oneshot_time = timer_read(); +#    endif +        oneshot_mods |= mods; +        oneshot_mods_changed_kb(mods); +    } +} + +void del_oneshot_mods(uint8_t mods) { +    if (oneshot_mods & mods) { +        oneshot_mods &= ~mods; +#    if (defined(ONESHOT_TIMEOUT) && (ONESHOT_TIMEOUT > 0)) +        oneshot_time = oneshot_mods ? timer_read() : 0; +#    endif +        oneshot_mods_changed_kb(oneshot_mods); +    } +} +  /** \brief set oneshot mods   *   * FIXME: needs doc @@ -316,11 +342,6 @@ void clear_oneshot_mods(void) {          oneshot_mods_changed_kb(oneshot_mods);      }  } -/** \brief get oneshot mods - * - * FIXME: needs doc - */ -uint8_t get_oneshot_mods(void) { return oneshot_mods; }  #endif  /** \brief Called when the one shot modifiers have been changed. diff --git a/tmk_core/common/action_util.h b/tmk_core/common/action_util.h index 5dd8393da4..743ff1406b 100644 --- a/tmk_core/common/action_util.h +++ b/tmk_core/common/action_util.h @@ -57,12 +57,11 @@ void    set_macro_mods(uint8_t mods);  void    clear_macro_mods(void);  /* oneshot modifier */ -void    set_oneshot_mods(uint8_t mods);  uint8_t get_oneshot_mods(void); +void    add_oneshot_mods(uint8_t mods); +void    del_oneshot_mods(uint8_t mods); +void    set_oneshot_mods(uint8_t mods);  void    clear_oneshot_mods(void); -void    oneshot_toggle(void); -void    oneshot_enable(void); -void    oneshot_disable(void);  bool    has_oneshot_mods_timed_out(void);  uint8_t get_oneshot_locked_mods(void); diff --git a/tmk_core/common/arm_atsam/suspend.c b/tmk_core/common/arm_atsam/suspend.c index d1077be4c2..e51426128d 100644 --- a/tmk_core/common/arm_atsam/suspend.c +++ b/tmk_core/common/arm_atsam/suspend.c @@ -1,6 +1,6 @@  #include "matrix.h"  #include "i2c_master.h" -#include "led_matrix.h" +#include "md_rgb_matrix.h"  #include "suspend.h"  /** \brief Suspend idle diff --git a/tmk_core/common/chibios/bootloader.c b/tmk_core/common/chibios/bootloader.c index 7b2cf5c435..f6d016ec9d 100644 --- a/tmk_core/common/chibios/bootloader.c +++ b/tmk_core/common/chibios/bootloader.c @@ -32,7 +32,7 @@  extern uint32_t __ram0_end__; -void bootloader_jump(void) { +__attribute__((weak)) void bootloader_jump(void) {      // For STM32 MCUs with dual-bank flash, and we're incapable of jumping to the bootloader. The first valid flash      // bank is executed unconditionally after a reset, so it doesn't enter DFU unless BOOT0 is high. Instead, we do      // it with hardware...in this case, we pull a GPIO high/low depending on the configuration, connects 3.3V to @@ -58,7 +58,7 @@ void enter_bootloader_mode_if_requested(void) {}  // not needed at all, but if a  extern uint32_t __ram0_end__; -void bootloader_jump(void) { +__attribute__((weak)) void bootloader_jump(void) {      *MAGIC_ADDR = BOOTLOADER_MAGIC;  // set magic flag => reset handler will jump into boot loader      NVIC_SystemReset();  } @@ -85,8 +85,8 @@ void enter_bootloader_mode_if_requested(void) {  #    if defined(BOOTLOADER_KIIBOHD)  /* Kiibohd Bootloader (MCHCK and Infinity KB) */  #        define SCB_AIRCR_VECTKEY_WRITEMAGIC 0x05FA0000 -const uint8_t sys_reset_to_loader_magic[] = "\xff\x00\x7fRESET TO LOADER\x7f\x00\xff"; -void          bootloader_jump(void) { +const uint8_t              sys_reset_to_loader_magic[] = "\xff\x00\x7fRESET TO LOADER\x7f\x00\xff"; +__attribute__((weak)) void bootloader_jump(void) {      __builtin_memcpy((void *)VBAT, (const void *)sys_reset_to_loader_magic, sizeof(sys_reset_to_loader_magic));      // request reset      SCB->AIRCR = SCB_AIRCR_VECTKEY_WRITEMAGIC | SCB_AIRCR_SYSRESETREQ_Msk; @@ -95,7 +95,7 @@ void          bootloader_jump(void) {  #    else /* defined(BOOTLOADER_KIIBOHD) */  /* Default for Kinetis - expecting an ARM Teensy */  #        include "wait.h" -void bootloader_jump(void) { +__attribute__((weak)) void bootloader_jump(void) {      wait_ms(100);      __BKPT(0);  } diff --git a/tmk_core/common/eeconfig.c b/tmk_core/common/eeconfig.c index fe56c57d11..e15897552f 100644 --- a/tmk_core/common/eeconfig.c +++ b/tmk_core/common/eeconfig.c @@ -13,6 +13,10 @@  #    include "eeprom_driver.h"  #endif +#if defined(HAPTIC_ENABLE) +#    include "haptic.h" +#endif +  /** \brief eeconfig enable   *   * FIXME: needs doc @@ -65,6 +69,15 @@ void eeconfig_init_quantum(void) {      eeprom_update_byte(EECONFIG_HANDEDNESS, 0);  #endif +#if defined(HAPTIC_ENABLE) +    haptic_reset(); +#else +    // this is used in case haptic is disabled, but we still want sane defaults +    // in the haptic configuration eeprom. All zero will trigger a haptic_reset +    // when a haptic-enabled firmware is loaded onto the keyboard. +    eeprom_update_dword(EECONFIG_HAPTIC, 0); +#endif +      eeconfig_init_kb();  } diff --git a/tmk_core/common/keyboard.c b/tmk_core/common/keyboard.c index b0394af003..8c7bdc8b55 100644 --- a/tmk_core/common/keyboard.c +++ b/tmk_core/common/keyboard.c @@ -235,6 +235,20 @@ __attribute__((weak)) bool is_keyboard_left(void) { return true; }   */  __attribute__((weak)) bool should_process_keypress(void) { return is_keyboard_master(); } +/** \brief housekeeping_task_kb + * + * Override this function if you have a need to execute code for every keyboard main loop iteration. + * This is specific to keyboard-level functionality. + */ +__attribute__((weak)) void housekeeping_task_kb(void) {} + +/** \brief housekeeping_task_user + * + * Override this function if you have a need to execute code for every keyboard main loop iteration. + * This is specific to user/keymap-level functionality. + */ +__attribute__((weak)) void housekeeping_task_user(void) {} +  /** \brief keyboard_init   *   * FIXME: needs doc @@ -291,6 +305,10 @@ void keyboard_init(void) {      dip_switch_init();  #endif +#if defined(DEBUG_MATRIX_SCAN_RATE) && defined(CONSOLE_ENABLE) +    debug_enable = true; +#endif +      keyboard_post_init_kb(); /* Always keep this last */  } @@ -315,6 +333,9 @@ void keyboard_task(void) {      uint8_t keys_processed = 0;  #endif +    housekeeping_task_kb(); +    housekeeping_task_user(); +  #if defined(OLED_DRIVER_ENABLE) && !defined(OLED_DISABLE_TIMEOUT)      uint8_t ret = matrix_scan();  #else diff --git a/tmk_core/common/keyboard.h b/tmk_core/common/keyboard.h index 79d9490898..caa18e7e76 100644 --- a/tmk_core/common/keyboard.h +++ b/tmk_core/common/keyboard.h @@ -71,6 +71,9 @@ void keyboard_pre_init_user(void);  void keyboard_post_init_kb(void);  void keyboard_post_init_user(void); +void housekeeping_task_kb(void); +void housekeeping_task_user(void); +  #ifdef __cplusplus  }  #endif diff --git a/tmk_core/common/matrix.h b/tmk_core/common/matrix.h index 78506059e6..31ec844302 100644 --- a/tmk_core/common/matrix.h +++ b/tmk_core/common/matrix.h @@ -30,16 +30,6 @@ typedef uint32_t matrix_row_t;  #    error "MATRIX_COLS: invalid value"  #endif -#if (MATRIX_ROWS <= 8) -typedef uint8_t matrix_col_t; -#elif (MATRIX_ROWS <= 16) -typedef uint16_t matrix_col_t; -#elif (MATRIX_ROWS <= 32) -typedef uint32_t matrix_col_t; -#else -#    error "MATRIX_ROWS: invalid value" -#endif -  #define MATRIX_ROW_SHIFTER ((matrix_row_t)1)  #define MATRIX_IS_ON(row, col) (matrix_get_row(row) && (1 << col)) diff --git a/tmk_core/common/report.h b/tmk_core/common/report.h index 1aa33c998d..610addf431 100644 --- a/tmk_core/common/report.h +++ b/tmk_core/common/report.h @@ -192,7 +192,11 @@ typedef struct {  typedef struct {  #if JOYSTICK_AXES_COUNT > 0 +#    if JOYSTICK_AXES_RESOLUTION > 8 +    int16_t axes[JOYSTICK_AXES_COUNT]; +#    else      int8_t axes[JOYSTICK_AXES_COUNT]; +#    endif  #endif  #if JOYSTICK_BUTTON_COUNT > 0  | 
