mousekey.h (5859B)
1 /* 2 Copyright 2011 Jun Wako <wakojun@gmail.com> 3 4 This program is free software: you can redistribute it and/or modify 5 it under the terms of the GNU General Public License as published by 6 the Free Software Foundation, either version 2 of the License, or 7 (at your option) any later version. 8 9 This program is distributed in the hope that it will be useful, 10 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 GNU General Public License for more details. 13 14 You should have received a copy of the GNU General Public License 15 along 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 188 extern "C" { 189 #endif 190 191 extern uint8_t mk_delay; 192 extern uint8_t mk_interval; 193 extern uint8_t mk_max_speed; 194 extern uint8_t mk_time_to_max; 195 extern uint8_t mk_wheel_max_speed; 196 extern uint8_t mk_wheel_time_to_max; 197 198 void mousekey_task(void); 199 void mousekey_on(uint8_t code); 200 void mousekey_off(uint8_t code); 201 void mousekey_clear(void); 202 void mousekey_send(void); 203 report_mouse_t mousekey_get_report(void); 204 bool should_mousekey_report_send(report_mouse_t *mouse_report); 205 206 #ifdef __cplusplus 207 } 208 #endif