qmk_firmware

QMK firmware for my keyboards (Corne, Sweep Ferris) and trackball (Ploopy Adept)
Log | Files | Refs | Submodules | LICENSE

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