115 lines
		
	
	
	
		
			3.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			115 lines
		
	
	
	
		
			3.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* Copyright 2021 Colin Lam (Ploopy Corporation)
 | |
|  * Copyright 2020 Christopher Courtney, aka Drashna Jael're  (@drashna) <drashna@live.com>
 | |
|  * Copyright 2019 Sunjun Kim
 | |
|  * Copyright 2019 Hiroyuki Okada
 | |
|  *
 | |
|  * This program is free software: you can redistribute it and/or modify
 | |
|  * it under the terms of the GNU General Public License as published by
 | |
|  * the Free Software Foundation, either version 2 of the License, or
 | |
|  * (at your option) any later version.
 | |
|  *
 | |
|  * This program is distributed in the hope that it will be useful,
 | |
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | |
|  * GNU General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU General Public License
 | |
|  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| 
 | |
| #include "trackball_nano.h"
 | |
| #include "wait.h"
 | |
| 
 | |
| #ifndef OPT_DEBOUNCE
 | |
| #    define OPT_DEBOUNCE 5  // (ms) 			Time between scroll events
 | |
| #endif
 | |
| 
 | |
| #ifndef SCROLL_BUTT_DEBOUNCE
 | |
| #    define SCROLL_BUTT_DEBOUNCE 100  // (ms) 			Time between scroll events
 | |
| #endif
 | |
| 
 | |
| #ifndef OPT_THRES
 | |
| #    define OPT_THRES 150  // (0-1024) 	Threshold for actication
 | |
| #endif
 | |
| 
 | |
| #ifndef OPT_SCALE
 | |
| #    define OPT_SCALE 1  // Multiplier for wheel
 | |
| #endif
 | |
| 
 | |
| #ifndef PLOOPY_DPI_OPTIONS
 | |
| #    define PLOOPY_DPI_OPTIONS \
 | |
|         { 375, 750, 1375 }
 | |
| #    ifndef PLOOPY_DPI_DEFAULT
 | |
| #        define PLOOPY_DPI_DEFAULT 2
 | |
| #    endif
 | |
| #endif
 | |
| 
 | |
| #ifndef PLOOPY_DPI_DEFAULT
 | |
| #    define PLOOPY_DPI_DEFAULT 2
 | |
| #endif
 | |
| 
 | |
| keyboard_config_t keyboard_config;
 | |
| uint16_t          dpi_array[] = PLOOPY_DPI_OPTIONS;
 | |
| #define DPI_OPTION_SIZE (sizeof(dpi_array) / sizeof(uint16_t))
 | |
| 
 | |
| void cycle_dpi(void) {
 | |
|   keyboard_config.dpi_config = (keyboard_config.dpi_config + 1) % DPI_OPTION_SIZE;
 | |
|   pointing_device_set_cpi(dpi_array[keyboard_config.dpi_config]);
 | |
| #ifdef CONSOLE_ENABLE
 | |
|   uprintf("DPI is now %d\n", dpi_array[keyboard_config.dpi_config]);
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // TODO: Implement libinput profiles
 | |
| // https://wayland.freedesktop.org/libinput/doc/latest/pointer-acceleration.html
 | |
| // Compile time accel selection
 | |
| // Valid options are ACC_NONE, ACC_LINEAR, ACC_CUSTOM, ACC_QUADRATIC
 | |
| 
 | |
| // Trackball State
 | |
| bool     is_scroll_clicked = false;
 | |
| bool     BurstState        = false;  // init burst state for Trackball module
 | |
| uint16_t MotionStart       = 0;      // Timer for accel, 0 is resting state
 | |
| 
 | |
| void pointing_device_init_kb(void) {
 | |
|     // set the DPI.
 | |
|     pointing_device_set_cpi(dpi_array[keyboard_config.dpi_config]);
 | |
| }
 | |
| 
 | |
| // Hardware Setup
 | |
| void keyboard_pre_init_kb(void) {
 | |
|     // debug_enable = true;
 | |
|     // debug_matrix = true;
 | |
|     // debug_mouse = true;
 | |
|     // debug_encoder = true;
 | |
| 
 | |
|     /* Ground all output pins connected to ground. This provides additional
 | |
|      * pathways to ground. If you're messing with this, know this: driving ANY
 | |
|      * of these pins high will cause a short. On the MCU. Ka-blooey.
 | |
|      */
 | |
| #ifdef UNUSABLE_PINS
 | |
|     const pin_t unused_pins[] = UNUSABLE_PINS;
 | |
| 
 | |
|     for (uint8_t i = 0; i < (sizeof(unused_pins) / sizeof(pin_t)); i++) {
 | |
|         setPinOutput(unused_pins[i]);
 | |
|         writePinLow(unused_pins[i]);
 | |
|     }
 | |
| #endif
 | |
| 
 | |
|     keyboard_pre_init_user();
 | |
| }
 | |
| 
 | |
| void eeconfig_init_kb(void) {
 | |
|     keyboard_config.dpi_config = PLOOPY_DPI_DEFAULT;
 | |
|     eeconfig_update_kb(keyboard_config.raw);
 | |
|     eeconfig_init_user();
 | |
| }
 | |
| 
 | |
| void matrix_init_kb(void) {
 | |
|     // is safe to just read DPI setting since matrix init
 | |
|     // comes before pointing device init.
 | |
|     keyboard_config.raw = eeconfig_read_kb();
 | |
|     if (keyboard_config.dpi_config > DPI_OPTION_SIZE) {
 | |
|         eeconfig_init_kb();
 | |
|     }
 | |
|     matrix_init_user();
 | |
| }
 | 
