mousekey.h
5859 bytes
1/*
2Copyright 2011 Jun Wako <wakojun@gmail.com>
3
4This program is free software: you can redistribute it and/or modify
5it under the terms of the GNU General Public License as published by
6the Free Software Foundation, either version 2 of the License, or
7(at your option) any later version.
8
9This program is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12GNU General Public License for more details.
13
14You should have received a copy of the GNU General Public License
15along with this program. If not, see <http://www.gnu.org/licenses/>.
16*/
17
18#pragma once
19
20#include <stdint.h>
21#include "host.h"
22
23#ifndef MK_3_SPEED
24
25/* max value on report descriptor */
26# ifndef MOUSEKEY_MOVE_MAX
27# define MOUSEKEY_MOVE_MAX 127
28# elif MOUSEKEY_MOVE_MAX > 127
29# error MOUSEKEY_MOVE_MAX needs to be smaller than 127
30# endif
31
32# ifndef MOUSEKEY_WHEEL_MAX
33# define MOUSEKEY_WHEEL_MAX 127
34# elif MOUSEKEY_WHEEL_MAX > 127
35# error MOUSEKEY_WHEEL_MAX needs to be smaller than 127
36# endif
37
38# ifndef MOUSEKEY_MOVE_DELTA
39# if defined(MK_KINETIC_SPEED)
40# define MOUSEKEY_MOVE_DELTA 16
41# elif defined(MOUSEKEY_INERTIA)
42# define MOUSEKEY_MOVE_DELTA 1
43# else
44# define MOUSEKEY_MOVE_DELTA 8
45# endif
46# endif
47# ifndef MOUSEKEY_DELAY
48# if defined(MK_KINETIC_SPEED)
49# define MOUSEKEY_DELAY 5
50# elif defined(MOUSEKEY_INERTIA)
51# define MOUSEKEY_DELAY 150 // allow single-pixel movements before repeat activates
52# else
53# define MOUSEKEY_DELAY 10
54# endif
55# endif
56# ifndef MOUSEKEY_INTERVAL
57# if defined(MK_KINETIC_SPEED)
58# define MOUSEKEY_INTERVAL 10
59# elif defined(MOUSEKEY_INERTIA)
60# define MOUSEKEY_INTERVAL 16 // 60 fps
61# else
62# define MOUSEKEY_INTERVAL 20
63# endif
64# endif
65# ifndef MOUSEKEY_MAX_SPEED
66# if defined(MOUSEKEY_INERTIA)
67# define MOUSEKEY_MAX_SPEED 32
68# else
69# define MOUSEKEY_MAX_SPEED 10
70# endif
71# endif
72# ifndef MOUSEKEY_TIME_TO_MAX
73# if defined(MOUSEKEY_INERTIA)
74# define MOUSEKEY_TIME_TO_MAX 32
75# else
76# define MOUSEKEY_TIME_TO_MAX 30
77# endif
78# endif
79# ifndef MOUSEKEY_WHEEL_DELAY
80# define MOUSEKEY_WHEEL_DELAY 10
81# endif
82# ifndef MOUSEKEY_WHEEL_INTERVAL
83# define MOUSEKEY_WHEEL_INTERVAL 80
84# endif
85# ifndef MOUSEKEY_WHEEL_DELTA
86# define MOUSEKEY_WHEEL_DELTA 1
87# endif
88# ifndef MOUSEKEY_WHEEL_MAX_SPEED
89# define MOUSEKEY_WHEEL_MAX_SPEED 8
90# endif
91# ifndef MOUSEKEY_WHEEL_TIME_TO_MAX
92# define MOUSEKEY_WHEEL_TIME_TO_MAX 40
93# endif
94
95# ifndef MOUSEKEY_FRICTION
96# define MOUSEKEY_FRICTION 24 // 0 to 255
97# endif
98# ifndef MOUSEKEY_INITIAL_SPEED
99# define MOUSEKEY_INITIAL_SPEED 100
100# endif
101# ifndef MOUSEKEY_BASE_SPEED
102# define MOUSEKEY_BASE_SPEED 5000
103# endif
104# ifndef MOUSEKEY_DECELERATED_SPEED
105# define MOUSEKEY_DECELERATED_SPEED 400
106# endif
107# ifndef MOUSEKEY_ACCELERATED_SPEED
108# define MOUSEKEY_ACCELERATED_SPEED 3000
109# endif
110# ifndef MOUSEKEY_WHEEL_INITIAL_MOVEMENTS
111# define MOUSEKEY_WHEEL_INITIAL_MOVEMENTS 16
112# endif
113# ifndef MOUSEKEY_WHEEL_BASE_MOVEMENTS
114# define MOUSEKEY_WHEEL_BASE_MOVEMENTS 32
115# endif
116# ifndef MOUSEKEY_WHEEL_ACCELERATED_MOVEMENTS
117# define MOUSEKEY_WHEEL_ACCELERATED_MOVEMENTS 48
118# endif
119# ifndef MOUSEKEY_WHEEL_DECELERATED_MOVEMENTS
120# define MOUSEKEY_WHEEL_DECELERATED_MOVEMENTS 8
121# endif
122
123#else /* #ifndef MK_3_SPEED */
124
125# ifndef MK_C_OFFSET_UNMOD
126# define MK_C_OFFSET_UNMOD 16
127# endif
128# ifndef MK_C_INTERVAL_UNMOD
129# define MK_C_INTERVAL_UNMOD 16
130# endif
131# ifndef MK_C_OFFSET_0
132# define MK_C_OFFSET_0 1
133# endif
134# ifndef MK_C_INTERVAL_0
135# define MK_C_INTERVAL_0 32
136# endif
137# ifndef MK_C_OFFSET_1
138# define MK_C_OFFSET_1 4
139# endif
140# ifndef MK_C_INTERVAL_1
141# define MK_C_INTERVAL_1 16
142# endif
143# ifndef MK_C_OFFSET_2
144# define MK_C_OFFSET_2 32
145# endif
146# ifndef MK_C_INTERVAL_2
147# define MK_C_INTERVAL_2 16
148# endif
149
150# ifndef MK_W_OFFSET_UNMOD
151# define MK_W_OFFSET_UNMOD 1
152# endif
153# ifndef MK_W_INTERVAL_UNMOD
154# define MK_W_INTERVAL_UNMOD 40
155# endif
156# ifndef MK_W_OFFSET_0
157# define MK_W_OFFSET_0 1
158# endif
159# ifndef MK_W_INTERVAL_0
160# define MK_W_INTERVAL_0 360
161# endif
162# ifndef MK_W_OFFSET_1
163# define MK_W_OFFSET_1 1
164# endif
165# ifndef MK_W_INTERVAL_1
166# define MK_W_INTERVAL_1 120
167# endif
168# ifndef MK_W_OFFSET_2
169# define MK_W_OFFSET_2 1
170# endif
171# ifndef MK_W_INTERVAL_2
172# define MK_W_INTERVAL_2 20
173# endif
174
175#endif /* #ifndef MK_3_SPEED */
176
177#ifndef MOUSEKEY_OVERLAP_MOVE_DELTA
178# define MOUSEKEY_OVERLAP_MOVE_DELTA MOUSEKEY_MOVE_DELTA
179#endif
180#ifndef MOUSEKEY_OVERLAP_WHEEL_DELTA
181# define MOUSEKEY_OVERLAP_WHEEL_DELTA MOUSEKEY_WHEEL_DELTA
182#endif
183#ifndef MOUSEKEY_OVERLAP_INTERVAL
184# define MOUSEKEY_OVERLAP_INTERVAL MOUSEKEY_INTERVAL
185#endif
186
187#ifdef __cplusplus
188extern "C" {
189#endif
190
191extern uint8_t mk_delay;
192extern uint8_t mk_interval;
193extern uint8_t mk_max_speed;
194extern uint8_t mk_time_to_max;
195extern uint8_t mk_wheel_max_speed;
196extern uint8_t mk_wheel_time_to_max;
197
198void mousekey_task(void);
199void mousekey_on(uint8_t code);
200void mousekey_off(uint8_t code);
201void mousekey_clear(void);
202void mousekey_send(void);
203report_mouse_t mousekey_get_report(void);
204bool should_mousekey_report_send(report_mouse_t *mouse_report);
205
206#ifdef __cplusplus
207}
208#endif