Beginning to adapt Getreuer's Mouse Turbo Click into a mouse jiggler.
This commit is contained in:
+23
-22
@@ -1,4 +1,4 @@
|
|||||||
// Copyright 2022 Google LLC
|
// Copyright 2022 Google LLC, Copyright 2022 Jay Watson jmwtsn@gmail.com
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
@@ -13,19 +13,20 @@
|
|||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
// For full documentation, see
|
// Addapted from Pascal Getreuer's Mouse Turbo Click
|
||||||
|
// For full documentation of Pascal Getreuer's original project, see
|
||||||
// https://getreuer.info/posts/keyboards/mouse-turbo-click
|
// https://getreuer.info/posts/keyboards/mouse-turbo-click
|
||||||
|
|
||||||
#include "features/mouse_turbo_click.h"
|
#include "features/mister_smith.h"
|
||||||
|
|
||||||
// This library relies on that mouse keys and the deferred execution API are
|
// This library relies on that mouse keys and the deferred execution API are
|
||||||
// enabled, which we check for here. Enable them in you rules.mk by setting:
|
// enabled, which we check for here. Enable them in you rules.mk by setting:
|
||||||
// MOUSEKEY_ENABLE = yes
|
// MOUSEKEY_ENABLE = yes
|
||||||
// DEFERRED_EXEC_ENABLE = yes
|
// DEFERRED_EXEC_ENABLE = yes
|
||||||
#if !defined(MOUSEKEY_ENABLE)
|
#if !defined(MOUSEKEY_ENABLE)
|
||||||
#error "mouse_turbo_click: Please set `MOUSEKEY_ENABLE = yes` in rules.mk."
|
#error "get_jiggy_withit: Please set `MOUSEKEY_ENABLE = yes` in rules.mk."
|
||||||
#elif !defined(DEFERRED_EXEC_ENABLE)
|
#elif !defined(DEFERRED_EXEC_ENABLE)
|
||||||
#error "mouse_turbo_click: Please set `DEFERRED_EXEC_ENABLE = yes` in rules.mk."
|
#error "get_jiggy_withit: Please set `DEFERRED_EXEC_ENABLE = yes` in rules.mk."
|
||||||
#else
|
#else
|
||||||
|
|
||||||
// The click period in milliseconds. For instance a period of 200 ms would be 5
|
// The click period in milliseconds. For instance a period of 200 ms would be 5
|
||||||
@@ -33,34 +34,34 @@
|
|||||||
//
|
//
|
||||||
// WARNING: The keyboard might become unresponsive if the period is too small.
|
// WARNING: The keyboard might become unresponsive if the period is too small.
|
||||||
// I suggest setting this no smaller than 50.
|
// I suggest setting this no smaller than 50.
|
||||||
#define CLICK_PERIOD_MS 80
|
#define JIGGY_PERIOD 1000
|
||||||
|
|
||||||
static deferred_token click_token = INVALID_DEFERRED_TOKEN;
|
static deferred_token click_token = INVALID_DEFERRED_TOKEN;
|
||||||
static bool click_registered = false;
|
static bool click_registered = false;
|
||||||
|
|
||||||
// Callback used with deferred execution. It alternates between registering and
|
// Callback used with deferred execution. It alternates between tapping left
|
||||||
// unregisting the mouse button.
|
// and right mouse keys.
|
||||||
static uint32_t turbo_click_callback(uint32_t trigger_time, void *cb_arg) {
|
static uint32_t get_jiggy_callback(uint32_t trigger_time, void *cb_arg) {
|
||||||
if (click_registered) {
|
if (click_registered) {
|
||||||
unregister_code16(KC_MS_BTN1);
|
tap_code16(KC_MS_L);
|
||||||
click_registered = false;
|
click_registered = false;
|
||||||
} else {
|
} else {
|
||||||
click_registered = true;
|
click_registered = true;
|
||||||
register_code16(KC_MS_BTN1);
|
tap_code16(KC_MS_R);
|
||||||
}
|
}
|
||||||
return CLICK_PERIOD_MS / 2; // Execute callback again in half a period.
|
return JIGGY_PERIOD / 2; // Execute callback again in half a period.
|
||||||
}
|
}
|
||||||
|
|
||||||
// Starts Turbo Click, begins the callback.
|
// Starts Turbo Click, begins the callback.
|
||||||
static void turbo_click_start(void) {
|
static void get_jiggy_start(void) {
|
||||||
if (click_token == INVALID_DEFERRED_TOKEN) {
|
if (click_token == INVALID_DEFERRED_TOKEN) {
|
||||||
uint32_t next_delay_ms = turbo_click_callback(0, NULL);
|
uint32_t next_delay_ms = get_jiggy_callback(0, NULL);
|
||||||
click_token = defer_exec(next_delay_ms, turbo_click_callback, NULL);
|
click_token = defer_exec(next_delay_ms, get_jiggy_callback, NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Stops Turbo Click, cancels the callback.
|
// Stops Turbo Click, cancels the callback.
|
||||||
static void turbo_click_stop(void) {
|
static void get_jiggy_stop(void) {
|
||||||
if (click_token != INVALID_DEFERRED_TOKEN) {
|
if (click_token != INVALID_DEFERRED_TOKEN) {
|
||||||
cancel_deferred_exec(click_token);
|
cancel_deferred_exec(click_token);
|
||||||
click_token = INVALID_DEFERRED_TOKEN;
|
click_token = INVALID_DEFERRED_TOKEN;
|
||||||
@@ -72,13 +73,13 @@ static void turbo_click_stop(void) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool process_mouse_turbo_click(uint16_t keycode, keyrecord_t* record,
|
bool process_get_jiggy_withit(uint16_t keycode, keyrecord_t* record,
|
||||||
uint16_t turbo_click_keycode) {
|
uint16_t get_jiggy_keycode) {
|
||||||
static bool locked = false;
|
static bool locked = false;
|
||||||
static bool tapped = false;
|
static bool tapped = false;
|
||||||
static uint16_t tap_timer = 0;
|
static uint16_t tap_timer = 0;
|
||||||
|
|
||||||
if (keycode == turbo_click_keycode) {
|
if (keycode == get_jiggy_keycode) {
|
||||||
if (record->event.pressed) { // Turbo Click key was pressed.
|
if (record->event.pressed) { // Turbo Click key was pressed.
|
||||||
if (tapped && !timer_expired(record->event.time, tap_timer)) {
|
if (tapped && !timer_expired(record->event.time, tap_timer)) {
|
||||||
// If the key was recently tapped, lock turbo click.
|
// If the key was recently tapped, lock turbo click.
|
||||||
@@ -87,17 +88,17 @@ bool process_mouse_turbo_click(uint16_t keycode, keyrecord_t* record,
|
|||||||
// Otherwise if currently locked, unlock and stop.
|
// Otherwise if currently locked, unlock and stop.
|
||||||
locked = false;
|
locked = false;
|
||||||
tapped = false;
|
tapped = false;
|
||||||
turbo_click_stop();
|
get_jiggy_stop();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
// Set that the first tap occurred in a potential double tap.
|
// Set that the first tap occurred in a potential double tap.
|
||||||
tapped = true;
|
tapped = true;
|
||||||
tap_timer = record->event.time + TAPPING_TERM;
|
tap_timer = record->event.time + TAPPING_TERM;
|
||||||
|
|
||||||
turbo_click_start();
|
get_jiggy_start();
|
||||||
} else if (!locked) {
|
} else if (!locked) {
|
||||||
// If not currently locked, stop on key release.
|
// If not currently locked, stop on key release.
|
||||||
turbo_click_stop();
|
get_jiggy_stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
+5
-4
@@ -13,7 +13,8 @@
|
|||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
// Mouse Turbo Click - click the mouse rapidly
|
// Mouse jiggler - move the mouse once in a while to prevent screen time-out
|
||||||
|
// Addapted from Pascal Getreuer's Mouse Turbo Click.
|
||||||
//
|
//
|
||||||
// This library implements a "Turbo Click" button that clicks the mouse rapidly,
|
// This library implements a "Turbo Click" button that clicks the mouse rapidly,
|
||||||
// implemented using mouse keys and a periodic callback function:
|
// implemented using mouse keys and a periodic callback function:
|
||||||
@@ -28,7 +29,7 @@
|
|||||||
// MOUSEKEY_ENABLE = yes, DEFERRED_EXEC_ENABLE = yes.
|
// MOUSEKEY_ENABLE = yes, DEFERRED_EXEC_ENABLE = yes.
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
// For full documentation, see
|
// For full documentation of Pascal Getreuer's original project, see
|
||||||
// https://getreuer.info/posts/keyboards/mouse-turbo-click
|
// https://getreuer.info/posts/keyboards/mouse-turbo-click
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
@@ -48,5 +49,5 @@
|
|||||||
//
|
//
|
||||||
// return true;
|
// return true;
|
||||||
// }
|
// }
|
||||||
bool process_mouse_turbo_click(uint16_t keycode, keyrecord_t* record,
|
bool process_get_jiggy_withit(uint16_t keycode, keyrecord_t* record,
|
||||||
uint16_t turbo_click_keycode);
|
uint16_t get_jiggy_keycode);
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include QMK_KEYBOARD_H
|
#include QMK_KEYBOARD_H
|
||||||
#include "features/mouse_turbo_click.h"
|
#include "features/mister_smith.h"
|
||||||
|
|
||||||
enum custom_keycodes {
|
enum custom_keycodes {
|
||||||
MSG = SAFE_RANGE,
|
MSG = SAFE_RANGE,
|
||||||
@@ -29,32 +29,17 @@ enum custom_keycodes {
|
|||||||
NIS,
|
NIS,
|
||||||
SELNUM,
|
SELNUM,
|
||||||
DISCO,
|
DISCO,
|
||||||
TURBO,
|
|
||||||
NOCON,
|
NOCON,
|
||||||
SLSAST,
|
SLSAST,
|
||||||
ASTSLS,
|
ASTSLS,
|
||||||
NXT,
|
NXT,
|
||||||
JIGGY1,
|
JIGGY
|
||||||
JIGGY2
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/* Code for getreuer mouse_turbo_click
|
|
||||||
|
|
||||||
bool process_record_user(uint16_t keycode, keyrecord_t* record) {
|
|
||||||
|
|
||||||
// Your macros ...
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||||
|
|
||||||
if (!process_mouse_turbo_click(keycode, record, TURBO)) { return false; }
|
if (!process_get_jiggy_withit(keycode, record, JIGGY)) { return false; }
|
||||||
|
|
||||||
switch (keycode) {
|
switch (keycode) {
|
||||||
|
|
||||||
@@ -242,7 +227,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
|
|
||||||
[1] = LAYOUT( /*Numpad*/
|
[1] = LAYOUT( /*Numpad*/
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_LNUM, KC_DEL,
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_LNUM, KC_DEL,
|
||||||
_______, TURBO, _______, _______, _______, _______, KC_P7, KC_P8, KC_P9, KC_P0, _______, SLSAST, ASTSLS, _______, KC_VOLU,
|
_______, JIGGY, _______, _______, _______, _______, KC_P7, KC_P8, KC_P9, KC_P0, _______, SLSAST, ASTSLS, _______, KC_VOLU,
|
||||||
_______, _______, _______, DISCO, NOCON, _______, KC_P4, KC_P5, KC_P6, _______, _______, _______, _______, KC_VOLD,
|
_______, _______, _______, DISCO, NOCON, _______, KC_P4, KC_P5, KC_P6, _______, _______, _______, _______, KC_VOLD,
|
||||||
_______, _______, _______, NXT, _______, _______, KC_P1, KC_P2, KC_P3, _______, _______, _______, KC_PGUP, MU_TOG,
|
_______, _______, _______, NXT, _______, _______, KC_P1, KC_P2, KC_P3, _______, _______, _______, KC_PGUP, MU_TOG,
|
||||||
_______, _______, _______, _______, KC_P0, _______, KC_HOME, KC_PGDN, KC_END),
|
_______, _______, _______, _______, KC_P0, _______, KC_HOME, KC_PGDN, KC_END),
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
SRC += features/mouse_turbo_click.c
|
SRC += features/mister_smith.c
|
||||||
|
|
||||||
MOUSEKEY_ENABLE = yes
|
|
||||||
DEFERRED_EXEC_ENABLE = yes
|
DEFERRED_EXEC_ENABLE = yes
|
||||||
|
|||||||
Reference in New Issue
Block a user