forked from mirrors/qmk_firmware
parent
66050bb809
commit
ce05dc6fa1
3 changed files with 22 additions and 4 deletions
|
@ -728,6 +728,7 @@ There are a few ways to control the auto mouse feature with both `config.h` opti
|
||||||
| `AUTO_MOUSE_TIME` | (Optional) Time layer remains active after activation | _ideally_ (250-1000) | _ms_ | `650 ms` |
|
| `AUTO_MOUSE_TIME` | (Optional) Time layer remains active after activation | _ideally_ (250-1000) | _ms_ | `650 ms` |
|
||||||
| `AUTO_MOUSE_DELAY` | (Optional) Lockout time after non-mouse key is pressed | _ideally_ (100-1000) | _ms_ | `TAPPING_TERM` or `200 ms` |
|
| `AUTO_MOUSE_DELAY` | (Optional) Lockout time after non-mouse key is pressed | _ideally_ (100-1000) | _ms_ | `TAPPING_TERM` or `200 ms` |
|
||||||
| `AUTO_MOUSE_DEBOUNCE` | (Optional) Time delay from last activation to next update | _ideally_ (10 - 100) | _ms_ | `25 ms` |
|
| `AUTO_MOUSE_DEBOUNCE` | (Optional) Time delay from last activation to next update | _ideally_ (10 - 100) | _ms_ | `25 ms` |
|
||||||
|
| `AUTO_MOUSE_THRESHOLD` | (Optional) Amount of mouse movement required to switch layers | 0 - | _units_ | `10 units` |
|
||||||
|
|
||||||
### Adding mouse keys
|
### Adding mouse keys
|
||||||
|
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
|
|
||||||
#ifdef POINTING_DEVICE_AUTO_MOUSE_ENABLE
|
#ifdef POINTING_DEVICE_AUTO_MOUSE_ENABLE
|
||||||
|
|
||||||
|
# include <stdlib.h>
|
||||||
# include <string.h>
|
# include <string.h>
|
||||||
# include "pointing_device_auto_mouse.h"
|
# include "pointing_device_auto_mouse.h"
|
||||||
# include "debug.h"
|
# include "debug.h"
|
||||||
|
@ -217,7 +218,11 @@ void auto_mouse_layer_off(void) {
|
||||||
* @return bool of pointing_device activation
|
* @return bool of pointing_device activation
|
||||||
*/
|
*/
|
||||||
__attribute__((weak)) bool auto_mouse_activation(report_mouse_t mouse_report) {
|
__attribute__((weak)) bool auto_mouse_activation(report_mouse_t mouse_report) {
|
||||||
return mouse_report.x != 0 || mouse_report.y != 0 || mouse_report.h != 0 || mouse_report.v != 0 || mouse_report.buttons;
|
auto_mouse_context.total_mouse_movement.x += mouse_report.x;
|
||||||
|
auto_mouse_context.total_mouse_movement.y += mouse_report.y;
|
||||||
|
auto_mouse_context.total_mouse_movement.h += mouse_report.h;
|
||||||
|
auto_mouse_context.total_mouse_movement.v += mouse_report.v;
|
||||||
|
return abs(auto_mouse_context.total_mouse_movement.x) > AUTO_MOUSE_THRESHOLD || abs(auto_mouse_context.total_mouse_movement.y) > AUTO_MOUSE_THRESHOLD || abs(auto_mouse_context.total_mouse_movement.h) > AUTO_MOUSE_THRESHOLD || abs(auto_mouse_context.total_mouse_movement.v) > AUTO_MOUSE_THRESHOLD || mouse_report.buttons;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -235,14 +240,16 @@ void pointing_device_task_auto_mouse(report_mouse_t mouse_report) {
|
||||||
// update activation and reset debounce
|
// update activation and reset debounce
|
||||||
auto_mouse_context.status.is_activated = auto_mouse_activation(mouse_report);
|
auto_mouse_context.status.is_activated = auto_mouse_activation(mouse_report);
|
||||||
if (is_auto_mouse_active()) {
|
if (is_auto_mouse_active()) {
|
||||||
auto_mouse_context.timer.active = timer_read();
|
auto_mouse_context.total_mouse_movement = (total_mouse_movement_t){.x = 0, .y = 0, .h = 0, .v = 0};
|
||||||
auto_mouse_context.timer.delay = 0;
|
auto_mouse_context.timer.active = timer_read();
|
||||||
|
auto_mouse_context.timer.delay = 0;
|
||||||
if (!layer_state_is((AUTO_MOUSE_TARGET_LAYER))) {
|
if (!layer_state_is((AUTO_MOUSE_TARGET_LAYER))) {
|
||||||
layer_on((AUTO_MOUSE_TARGET_LAYER));
|
layer_on((AUTO_MOUSE_TARGET_LAYER));
|
||||||
}
|
}
|
||||||
} else if (layer_state_is((AUTO_MOUSE_TARGET_LAYER)) && timer_elapsed(auto_mouse_context.timer.active) > auto_mouse_context.config.timeout) {
|
} else if (layer_state_is((AUTO_MOUSE_TARGET_LAYER)) && timer_elapsed(auto_mouse_context.timer.active) > auto_mouse_context.config.timeout) {
|
||||||
layer_off((AUTO_MOUSE_TARGET_LAYER));
|
layer_off((AUTO_MOUSE_TARGET_LAYER));
|
||||||
auto_mouse_context.timer.active = 0;
|
auto_mouse_context.timer.active = 0;
|
||||||
|
auto_mouse_context.total_mouse_movement = (total_mouse_movement_t){.x = 0, .y = 0, .h = 0, .v = 0};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -42,8 +42,17 @@
|
||||||
#ifndef AUTO_MOUSE_DEBOUNCE
|
#ifndef AUTO_MOUSE_DEBOUNCE
|
||||||
# define AUTO_MOUSE_DEBOUNCE 25
|
# define AUTO_MOUSE_DEBOUNCE 25
|
||||||
#endif
|
#endif
|
||||||
|
#ifndef AUTO_MOUSE_THRESHOLD
|
||||||
|
# define AUTO_MOUSE_THRESHOLD 10
|
||||||
|
#endif
|
||||||
|
|
||||||
/* data structure */
|
/* data structure */
|
||||||
|
typedef struct {
|
||||||
|
mouse_xy_report_t x;
|
||||||
|
mouse_xy_report_t y;
|
||||||
|
int8_t v;
|
||||||
|
int8_t h;
|
||||||
|
} total_mouse_movement_t;
|
||||||
typedef struct {
|
typedef struct {
|
||||||
struct {
|
struct {
|
||||||
bool is_enabled;
|
bool is_enabled;
|
||||||
|
@ -60,6 +69,7 @@ typedef struct {
|
||||||
bool is_toggled;
|
bool is_toggled;
|
||||||
int8_t mouse_key_tracker;
|
int8_t mouse_key_tracker;
|
||||||
} status;
|
} status;
|
||||||
|
total_mouse_movement_t total_mouse_movement;
|
||||||
} auto_mouse_context_t;
|
} auto_mouse_context_t;
|
||||||
|
|
||||||
/* ----------Set up and control------------------------------------------------------------------------------ */
|
/* ----------Set up and control------------------------------------------------------------------------------ */
|
||||||
|
|
Loading…
Reference in a new issue