-
-
Notifications
You must be signed in to change notification settings - Fork 3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat(mouse): Added mouse emulation #778
Closed
Closed
Changes from all commits
Commits
Show all changes
30 commits
Select commit
Hold shift + click to select a range
b14b024
Preliminary work for mouse click
krikun98 54ac765
Fine-tuning report, 16 buttons
krikun98 016256b
Bluetooth tuning, mouse wheel and movement backend
krikun98 3fb874f
Mouse-related behaviours
dc2e30d
Add mouse movement event
ee51487
Continuous mouse movement prototype
e2b97f1
Add mouse behaviour documentation
a339a9a
Cleaning out prototype traces
krikun98 141a525
clang-format
krikun98 345ef42
Implemented Rinh's suggestion to remove deadlocks
dtsykunov 58178a7
Raised BLE mouse report queue size
krikun98 571e457
Documentation refactor
krikun98 0893c76
Add the doc page to the sidebar
krikun98 fddadb9
Added new mouse movement macros
krikun98 9957b28
Review edits: macro, event override fix, cosmetics
krikun98 6de29af
Mouse movement coordinate signedness consistency
krikun98 359f35b
Reverted mouse buttons 9-16
krikun98 4d08f97
Report refactor (added macros)
krikun98 b4ec49e
Simplify binary arithmetic
okke-formsma 728f42e
Modified mouse_timer_unref to account for errors
krikun98 8fc5962
feat(mouse keys): add events, smoothing and acceleration
okke-formsma eb089b5
Added dedicated mouse work queue option
krikun98 96660dc
Simplified tick rate and made it configurable
krikun98 0bcd44a
Add messages to BLE queue without a waiting interval
krikun98 992bbc0
Cleanup and acceleration fixes
krikun98 8088585
Send mouse messages from dedicated thread
krikun98 cbce1db
Added documentation for new features
krikun98 ec85b7a
Moved tick duration
krikun98 2bf5e44
clang-format
krikun98 ee855f4
prettier
krikun98 File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
/ { | ||
behaviors { | ||
/omit-if-no-ref/ mkp: behavior_mouse_key_press { | ||
compatible = "zmk,behavior-mouse-key-press"; | ||
label = "MOUSE_KEY_PRESS"; | ||
#binding-cells = <1>; | ||
}; | ||
}; | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
/ { | ||
behaviors { | ||
/omit-if-no-ref/ mmv: behavior_mouse_move { | ||
compatible = "zmk,behavior-mouse-move"; | ||
label = "MOUSE_MOVE"; | ||
#binding-cells = <1>; | ||
delay-ms = <0>; | ||
time-to-max-speed-ms = <300>; | ||
acceleration-exponent = <1>; | ||
}; | ||
}; | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
/ { | ||
behaviors { | ||
/omit-if-no-ref/ mwh: msc: behavior_mouse_scroll { | ||
compatible = "zmk,behavior-mouse-scroll"; | ||
label = "MOUSE_SCROLL"; | ||
#binding-cells = <1>; | ||
delay-ms = <0>; | ||
time-to-max-speed-ms = <300>; | ||
acceleration-exponent = <0>; | ||
}; | ||
}; | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
description: Mouse key press/release behavior | ||
|
||
compatible: "zmk,behavior-mouse-key-press" | ||
|
||
include: one_param.yaml |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
description: Mouse move | ||
|
||
compatible: "zmk,behavior-mouse-move" | ||
|
||
include: one_param.yaml | ||
|
||
properties: | ||
delay-ms: | ||
type: int | ||
time-to-max-speed-ms: | ||
type: int | ||
acceleration-exponent: | ||
type: int |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
description: Mouse scroll | ||
|
||
compatible: "zmk,behavior-mouse-scroll" | ||
|
||
include: one_param.yaml | ||
|
||
properties: | ||
delay-ms: | ||
type: int | ||
time-to-max-speed-ms: | ||
type: int | ||
acceleration-exponent: | ||
type: int |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,55 @@ | ||
/* | ||
* Copyright (c) 2020 The ZMK Contributors | ||
* | ||
* SPDX-License-Identifier: MIT | ||
*/ | ||
#pragma once | ||
|
||
/* Mouse press behavior */ | ||
/* Left click */ | ||
#define MB1 (0x01) | ||
#define LCLK (MB1) | ||
|
||
/* Right click */ | ||
#define MB2 (0x02) | ||
#define RCLK (MB2) | ||
|
||
/* Middle click */ | ||
#define MB3 (0x04) | ||
#define MCLK (MB3) | ||
|
||
#define MB4 (0x08) | ||
|
||
#define MB5 (0x10) | ||
|
||
#define MB6 (0x20) | ||
|
||
#define MB7 (0x40) | ||
|
||
#define MB8 (0x80) | ||
|
||
/* Mouse move behavior */ | ||
#define MOVE_VERT(vert) ((vert)&0xFFFF) | ||
#define MOVE_VERT_DECODE(encoded) (int16_t)((encoded)&0x0000FFFF) | ||
#define MOVE_HOR(hor) (((hor)&0xFFFF) << 16) | ||
#define MOVE_HOR_DECODE(encoded) (int16_t)(((encoded)&0xFFFF0000) >> 16) | ||
|
||
#define MOVE(hor, vert) (MOVE_HOR(hor) + MOVE_VERT(vert)) | ||
|
||
#define MOVE_UP MOVE_VERT(-600) | ||
#define MOVE_DOWN MOVE_VERT(600) | ||
#define MOVE_LEFT MOVE_HOR(-600) | ||
#define MOVE_RIGHT MOVE_HOR(600) | ||
|
||
/* Mouse scroll behavior */ | ||
#define SCROLL_VERT(vert) ((vert)&0xFFFF) | ||
#define SCROLL_VERT_DECODE(encoded) (int16_t)((encoded)&0x0000FFFF) | ||
#define SCROLL_HOR(hor) (((hor)&0xFFFF) << 16) | ||
#define SCROLL_HOR_DECODE(encoded) (int16_t)(((encoded)&0xFFFF0000) >> 16) | ||
|
||
#define SCROLL(hor, vert) (SCROLL_HOR(hor) + SCROLL_VERT(vert)) | ||
|
||
#define SCROLL_UP SCROLL_VERT(10) | ||
#define SCROLL_DOWN SCROLL_VERT(-10) | ||
#define SCROLL_LEFT SCROLL_HOR(-10) | ||
#define SCROLL_RIGHT SCROLL_HOR(10) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
|
||
/* | ||
* Copyright (c) 2020 The ZMK Contributors | ||
* | ||
* SPDX-License-Identifier: MIT | ||
*/ | ||
|
||
#pragma once | ||
|
||
#include <zephyr.h> | ||
#include <zmk/hid.h> | ||
#include <zmk/event_manager.h> | ||
#include <zmk/mouse.h> | ||
|
||
struct zmk_mouse_button_state_changed { | ||
zmk_mouse_button_t buttons; | ||
bool state; | ||
int64_t timestamp; | ||
}; | ||
|
||
ZMK_EVENT_DECLARE(zmk_mouse_button_state_changed); | ||
|
||
static inline struct zmk_mouse_button_state_changed_event * | ||
zmk_mouse_button_state_changed_from_encoded(uint32_t encoded, bool pressed, int64_t timestamp) { | ||
return new_zmk_mouse_button_state_changed((struct zmk_mouse_button_state_changed){ | ||
.buttons = HID_USAGE_ID(encoded), .state = pressed, .timestamp = timestamp}); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
|
||
/* | ||
* Copyright (c) 2020 The ZMK Contributors | ||
* | ||
* SPDX-License-Identifier: MIT | ||
*/ | ||
|
||
#pragma once | ||
|
||
#include <zephyr.h> | ||
#include <zmk/event_manager.h> | ||
#include <zmk/mouse.h> | ||
|
||
struct zmk_mouse_move_state_changed { | ||
struct vector2d max_speed; | ||
struct mouse_config config; | ||
bool state; | ||
int64_t timestamp; | ||
}; | ||
|
||
ZMK_EVENT_DECLARE(zmk_mouse_move_state_changed); | ||
|
||
static inline struct zmk_mouse_move_state_changed_event * | ||
zmk_mouse_move_state_changed_from_encoded(uint32_t encoded, struct mouse_config config, | ||
bool pressed, int64_t timestamp) { | ||
struct vector2d max_speed = (struct vector2d){ | ||
.x = MOVE_HOR_DECODE(encoded), | ||
.y = MOVE_VERT_DECODE(encoded), | ||
}; | ||
|
||
return new_zmk_mouse_move_state_changed((struct zmk_mouse_move_state_changed){ | ||
.max_speed = max_speed, .config = config, .state = pressed, .timestamp = timestamp}); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
|
||
/* | ||
* Copyright (c) 2020 The ZMK Contributors | ||
* | ||
* SPDX-License-Identifier: MIT | ||
*/ | ||
|
||
#pragma once | ||
|
||
#include <zephyr.h> | ||
#include <zmk/event_manager.h> | ||
#include <zmk/mouse.h> | ||
#include <dt-bindings/zmk/mouse.h> | ||
|
||
struct zmk_mouse_scroll_state_changed { | ||
struct vector2d max_speed; | ||
struct mouse_config config; | ||
bool state; | ||
int64_t timestamp; | ||
}; | ||
|
||
ZMK_EVENT_DECLARE(zmk_mouse_scroll_state_changed); | ||
|
||
static inline struct zmk_mouse_scroll_state_changed_event * | ||
zmk_mouse_scroll_state_changed_from_encoded(uint32_t encoded, struct mouse_config config, | ||
bool pressed, int64_t timestamp) { | ||
struct vector2d max_speed = (struct vector2d){ | ||
.x = SCROLL_HOR_DECODE(encoded), | ||
.y = SCROLL_VERT_DECODE(encoded), | ||
}; | ||
|
||
return new_zmk_mouse_scroll_state_changed((struct zmk_mouse_scroll_state_changed){ | ||
.max_speed = max_speed, .config = config, .state = pressed, .timestamp = timestamp}); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
|
||
/* | ||
* Copyright (c) 2020 The ZMK Contributors | ||
* | ||
* SPDX-License-Identifier: MIT | ||
*/ | ||
|
||
#pragma once | ||
|
||
#include <dt-bindings/zmk/mouse.h> | ||
#include <zephyr.h> | ||
#include <zmk/event_manager.h> | ||
#include <zmk/mouse.h> | ||
|
||
struct zmk_mouse_tick { | ||
struct vector2d max_move; | ||
struct vector2d max_scroll; | ||
struct mouse_config move_config; | ||
struct mouse_config scroll_config; | ||
int64_t *start_time; | ||
int64_t timestamp; | ||
}; | ||
|
||
ZMK_EVENT_DECLARE(zmk_mouse_tick); | ||
|
||
static inline struct zmk_mouse_tick_event *zmk_mouse_tick(struct vector2d max_move, | ||
struct vector2d max_scroll, | ||
struct mouse_config move_config, | ||
struct mouse_config scroll_config, | ||
int64_t *movement_start) { | ||
return new_zmk_mouse_tick((struct zmk_mouse_tick){ | ||
.max_move = max_move, | ||
.max_scroll = max_scroll, | ||
.move_config = move_config, | ||
.scroll_config = scroll_config, | ||
.start_time = movement_start, | ||
.timestamp = k_uptime_get(), | ||
}); | ||
} |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
MPREV / MNEXT?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
As aliases? Sure, I'll add these in.