[Keyboard] Fix up SplitKB keyboards (#13511)
This commit is contained in:
parent
d908970522
commit
4bb595f94b
110 changed files with 1010 additions and 312 deletions
98
keyboards/splitkb/kyria/keymaps/gotham/thumbstick.h
Normal file
98
keyboards/splitkb/kyria/keymaps/gotham/thumbstick.h
Normal file
|
@ -0,0 +1,98 @@
|
|||
#pragma once
|
||||
|
||||
typedef enum {
|
||||
THUMBSTICK_MODE_MOUSE = 0,
|
||||
THUMBSTICK_MODE_ARROWS,
|
||||
THUMBSTICK_MODE_SCROLL,
|
||||
_THUMBSTICK_MODE_LAST // Do not use, except for looping through enum values
|
||||
} thumbstick_mode_t;
|
||||
|
||||
// Parameters
|
||||
#define THUMBSTICK_DEAD_ZONE 90 // Values below this are ignored (deadzone)
|
||||
#define THUMBSTICK_FINE_ZONE 180 // Values below this enable fine movement
|
||||
|
||||
#define THUMBSTICK_MODE THUMBSTICK_MODE_MOUSE
|
||||
#define THUMBSTICK_SPEED 256
|
||||
#define THUMBSTICK_FINE_SPEED 96
|
||||
#define THUMBSTICK_SCROLL_SPEED 1
|
||||
|
||||
#define THUMBSTICK_EIGHT_AXIS true
|
||||
#define THUMBSTICK_AXIS_SEPARATION 0.5f
|
||||
|
||||
// Implicit and derived constants
|
||||
#define THUMBSTICK_TIMEOUT 10 // Mouse report throttling time in ms
|
||||
#define THUMBSTICK_SCROLL_TIMEOUT 200 // Mouse scroll throttling time in ms
|
||||
#define THUMBSTICK_RANGE_START 0
|
||||
#define THUMBSTICK_RANGE_STOP 1023
|
||||
#define THUMBSTICK_RANGE_CENTER (THUMBSTICK_RANGE_STOP - THUMBSTICK_RANGE_START + 1) / 2
|
||||
#define THUMBSTICK_RANGE_MOVEMENT (THUMBSTICK_RANGE_CENTER - THUMBSTICK_DEAD_ZONE)
|
||||
|
||||
#include "timer.h"
|
||||
#include "analog.h"
|
||||
#include "split_util.h"
|
||||
#include "pointing_device.h"
|
||||
|
||||
#if defined THUMBSTICK_DEBUG
|
||||
# include "print.h"
|
||||
uint16_t rawX;
|
||||
uint16_t rawY;
|
||||
uint16_t distX;
|
||||
uint16_t distY;
|
||||
uint16_t thumbstickLogTimer;
|
||||
#endif
|
||||
|
||||
typedef struct {
|
||||
thumbstick_mode_t mode;
|
||||
uint16_t deadZone;
|
||||
uint16_t fineZone;
|
||||
uint16_t speed;
|
||||
uint16_t fineSpeed;
|
||||
float axisSeparation;
|
||||
bool eightAxis;
|
||||
} thumbstick_config_t;
|
||||
|
||||
typedef struct {
|
||||
int16_t x;
|
||||
int16_t y;
|
||||
} thumbstick_vector_t;
|
||||
|
||||
typedef struct {
|
||||
bool up;
|
||||
bool right;
|
||||
bool down;
|
||||
bool left;
|
||||
} thumbstick_direction_t;
|
||||
|
||||
typedef struct {
|
||||
thumbstick_config_t config;
|
||||
thumbstick_vector_t vector;
|
||||
thumbstick_direction_t direction;
|
||||
thumbstick_direction_t lastDirection;
|
||||
report_mouse_t report;
|
||||
} thumbstick_state_t;
|
||||
|
||||
uint16_t thumbstickTimer;
|
||||
uint16_t thumbstickScrollTimer;
|
||||
|
||||
thumbstick_state_t thumbstick_state;
|
||||
|
||||
void thumbstick_mode_set(thumbstick_mode_t mode);
|
||||
|
||||
thumbstick_mode_t thumbstick_mode_get(void);
|
||||
|
||||
void thumbstick_mode_cycle(bool reverse);
|
||||
|
||||
void thumbstick_init(void);
|
||||
|
||||
// Axis-level wrapper to read raw value, do logging and calculate speed
|
||||
int16_t thumbstick_get_component(uint8_t pin);
|
||||
|
||||
// Get mouse speed
|
||||
int16_t thumbstick_get_mouse_speed(int16_t component);
|
||||
|
||||
// Fix direction within one of 8 axes (or 4 if 8-axis is disabled)
|
||||
thumbstick_direction_t thumbstick_get_discretized_direction(thumbstick_vector_t vector, float axisSeparation, bool eightAxis);
|
||||
|
||||
void thumbstick_process(void);
|
||||
|
||||
void update_keycode_status(uint16_t keycode, bool last, bool current);
|
Loading…
Add table
Add a link
Reference in a new issue