Extract code into processMouseKineticState() and add mouse_kinetic_state_t
This commit is contained in:
@@ -21,76 +21,89 @@ static uint32_t elapsedTime;
|
|||||||
|
|
||||||
static uint16_t doubleTapSwitchLayerTimeout = 300;
|
static uint16_t doubleTapSwitchLayerTimeout = 300;
|
||||||
|
|
||||||
static float mouseMoveInitialSpeed = 1;
|
|
||||||
static float mouseMoveAcceleration = 3;
|
|
||||||
static float mouseMoveDeceleratedSpeed = 2.5;
|
|
||||||
static float mouseMoveBaseSpeed = 5;
|
|
||||||
static float mouseMoveAcceleratedSpeed = 10;
|
|
||||||
|
|
||||||
static float mouseScrollSpeed = 0.1;
|
static float mouseScrollSpeed = 0.1;
|
||||||
|
|
||||||
static bool wasMoveAction;
|
|
||||||
static mouse_speed_t prevMouseSpeed = MouseSpeed_Normal;
|
|
||||||
|
|
||||||
static bool activeMouseStates[ACTIVE_MOUSE_STATES_COUNT];
|
static bool activeMouseStates[ACTIVE_MOUSE_STATES_COUNT];
|
||||||
|
|
||||||
void processMouseActions()
|
static mouse_kinetic_state_t mouseMoveState = {
|
||||||
{
|
.upState = SerializedMouseAction_MoveUp,
|
||||||
static float mouseMoveCurrentSpeed;
|
.downState = SerializedMouseAction_MoveDown,
|
||||||
|
.leftState = SerializedMouseAction_MoveLeft,
|
||||||
|
.rightState = SerializedMouseAction_MoveRight,
|
||||||
|
.initialSpeed = 1,
|
||||||
|
.acceleration = 3,
|
||||||
|
.deceleratedSpeed = 2.5,
|
||||||
|
.baseSpeed = 5,
|
||||||
|
.acceleratedSpeed = 10,
|
||||||
|
};
|
||||||
|
//static mouse_kinetic_state_t mouseScrollState;
|
||||||
|
|
||||||
if (!wasMoveAction) {
|
void processMouseKineticState(mouse_kinetic_state_t *kineticState)
|
||||||
mouseMoveCurrentSpeed = mouseMoveInitialSpeed;
|
{
|
||||||
|
if (!kineticState->wasMoveAction) {
|
||||||
|
kineticState->currentSpeed = kineticState->initialSpeed;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool isMoveAction = activeMouseStates[SerializedMouseAction_MoveUp] ||
|
bool isMoveAction = activeMouseStates[kineticState->upState] ||
|
||||||
activeMouseStates[SerializedMouseAction_MoveDown] ||
|
activeMouseStates[kineticState->downState] ||
|
||||||
activeMouseStates[SerializedMouseAction_MoveLeft] ||
|
activeMouseStates[kineticState->leftState] ||
|
||||||
activeMouseStates[SerializedMouseAction_MoveRight];
|
activeMouseStates[kineticState->rightState];
|
||||||
|
|
||||||
float targetSpeed;
|
|
||||||
mouse_speed_t mouseSpeed = MouseSpeed_Normal;
|
mouse_speed_t mouseSpeed = MouseSpeed_Normal;
|
||||||
if (activeMouseStates[SerializedMouseAction_Accelerate]) {
|
if (activeMouseStates[SerializedMouseAction_Accelerate]) {
|
||||||
targetSpeed = mouseMoveAcceleratedSpeed;
|
kineticState->targetSpeed = kineticState->acceleratedSpeed;
|
||||||
mouseSpeed = MouseSpeed_Accelerated;
|
mouseSpeed = MouseSpeed_Accelerated;
|
||||||
} else if (activeMouseStates[SerializedMouseAction_Decelerate]) {
|
} else if (activeMouseStates[SerializedMouseAction_Decelerate]) {
|
||||||
targetSpeed = mouseMoveDeceleratedSpeed;
|
kineticState->targetSpeed = kineticState->deceleratedSpeed;
|
||||||
mouseSpeed = MouseSpeed_Decelerated;
|
mouseSpeed = MouseSpeed_Decelerated;
|
||||||
} else if (isMoveAction) {
|
} else if (isMoveAction) {
|
||||||
targetSpeed = mouseMoveBaseSpeed;
|
kineticState->targetSpeed = kineticState->baseSpeed;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mouseSpeed == MouseSpeed_Accelerated || (wasMoveAction && isMoveAction && (prevMouseSpeed != mouseSpeed))) {
|
if (mouseSpeed == MouseSpeed_Accelerated || (kineticState->wasMoveAction && isMoveAction && (kineticState->prevMouseSpeed != mouseSpeed))) {
|
||||||
mouseMoveCurrentSpeed = targetSpeed;
|
kineticState->currentSpeed = kineticState->targetSpeed;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isMoveAction) {
|
if (isMoveAction) {
|
||||||
if (mouseMoveCurrentSpeed < targetSpeed) {
|
if (kineticState->currentSpeed < kineticState->targetSpeed) {
|
||||||
mouseMoveCurrentSpeed += mouseMoveAcceleration * elapsedTime / 1000;
|
kineticState->currentSpeed += kineticState->acceleration * elapsedTime / 1000;
|
||||||
if (mouseMoveCurrentSpeed > targetSpeed) {
|
if (kineticState->currentSpeed > kineticState->targetSpeed) {
|
||||||
mouseMoveCurrentSpeed = targetSpeed;
|
kineticState->currentSpeed = kineticState->targetSpeed;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
mouseMoveCurrentSpeed -= mouseMoveAcceleration * elapsedTime / 1000;
|
kineticState->currentSpeed -= kineticState->acceleration * elapsedTime / 1000;
|
||||||
if (mouseMoveCurrentSpeed < targetSpeed) {
|
if (kineticState->currentSpeed < kineticState->targetSpeed) {
|
||||||
mouseMoveCurrentSpeed = targetSpeed;
|
kineticState->currentSpeed = kineticState->targetSpeed;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
uint16_t distance = mouseMoveCurrentSpeed * elapsedTime / 10;
|
uint16_t distance = kineticState->currentSpeed * elapsedTime / 10;
|
||||||
|
|
||||||
if (activeMouseStates[SerializedMouseAction_MoveLeft]) {
|
if (activeMouseStates[kineticState->leftState]) {
|
||||||
ActiveUsbMouseReport->x = -distance;
|
kineticState->x = -distance;
|
||||||
} else if (activeMouseStates[SerializedMouseAction_MoveRight]) {
|
} else if (activeMouseStates[kineticState->rightState]) {
|
||||||
ActiveUsbMouseReport->x = distance;
|
kineticState->x = distance;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (activeMouseStates[SerializedMouseAction_MoveUp]) {
|
if (activeMouseStates[kineticState->upState]) {
|
||||||
ActiveUsbMouseReport->y = -distance;
|
kineticState->y = -distance;
|
||||||
} else if (activeMouseStates[SerializedMouseAction_MoveDown]) {
|
} else if (activeMouseStates[kineticState->downState]) {
|
||||||
ActiveUsbMouseReport->y = distance;
|
kineticState->y = distance;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
kineticState->prevMouseSpeed = mouseSpeed;
|
||||||
|
kineticState->wasMoveAction = isMoveAction;
|
||||||
|
}
|
||||||
|
|
||||||
|
void processMouseActions()
|
||||||
|
{
|
||||||
|
processMouseKineticState(&mouseMoveState);
|
||||||
|
ActiveUsbMouseReport->x = mouseMoveState.x;
|
||||||
|
ActiveUsbMouseReport->y = mouseMoveState.y;
|
||||||
|
mouseMoveState.x = 0;
|
||||||
|
mouseMoveState.y = 0;
|
||||||
|
|
||||||
bool isScrollAction = activeMouseStates[SerializedMouseAction_ScrollUp] ||
|
bool isScrollAction = activeMouseStates[SerializedMouseAction_ScrollUp] ||
|
||||||
activeMouseStates[SerializedMouseAction_ScrollDown] ||
|
activeMouseStates[SerializedMouseAction_ScrollDown] ||
|
||||||
activeMouseStates[SerializedMouseAction_ScrollLeft] ||
|
activeMouseStates[SerializedMouseAction_ScrollLeft] ||
|
||||||
@@ -130,8 +143,6 @@ void processMouseActions()
|
|||||||
ActiveUsbMouseReport->buttons |= MouseButton_Right;
|
ActiveUsbMouseReport->buttons |= MouseButton_Right;
|
||||||
}
|
}
|
||||||
|
|
||||||
prevMouseSpeed = mouseSpeed;
|
|
||||||
wasMoveAction = isMoveAction;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static layer_id_t previousLayer = LayerId_Base;
|
static layer_id_t previousLayer = LayerId_Base;
|
||||||
|
|||||||
@@ -1,6 +1,10 @@
|
|||||||
#ifndef __USB_REPORT_UPDATER_H__
|
#ifndef __USB_REPORT_UPDATER_H__
|
||||||
#define __USB_REPORT_UPDATER_H__
|
#define __USB_REPORT_UPDATER_H__
|
||||||
|
|
||||||
|
// Includes:
|
||||||
|
|
||||||
|
#include "config_parser/parse_keymap.h"
|
||||||
|
|
||||||
// Macros:
|
// Macros:
|
||||||
|
|
||||||
#define ACTIVE_MOUSE_STATES_COUNT (SerializedMouseAction_Last + 1)
|
#define ACTIVE_MOUSE_STATES_COUNT (SerializedMouseAction_Last + 1)
|
||||||
@@ -38,6 +42,24 @@
|
|||||||
MouseSpeed_Decelerated,
|
MouseSpeed_Decelerated,
|
||||||
} mouse_speed_t;
|
} mouse_speed_t;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
bool wasMoveAction;
|
||||||
|
serialized_mouse_action_t upState;
|
||||||
|
serialized_mouse_action_t downState;
|
||||||
|
serialized_mouse_action_t leftState;
|
||||||
|
serialized_mouse_action_t rightState;
|
||||||
|
mouse_speed_t prevMouseSpeed;
|
||||||
|
float currentSpeed;
|
||||||
|
float targetSpeed;
|
||||||
|
float initialSpeed;
|
||||||
|
float acceleration;
|
||||||
|
float deceleratedSpeed;
|
||||||
|
float baseSpeed;
|
||||||
|
float acceleratedSpeed;
|
||||||
|
int16_t x;
|
||||||
|
int16_t y;
|
||||||
|
} mouse_kinetic_state_t;
|
||||||
|
|
||||||
// Functions:
|
// Functions:
|
||||||
|
|
||||||
void UpdateUsbReports(void);
|
void UpdateUsbReports(void);
|
||||||
|
|||||||
Reference in New Issue
Block a user