Parent directory

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