From ebbd74407de0fc4fea2ad0abc4da8e536dc56e49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A1szl=C3=B3=20Monda?= Date: Sun, 26 Nov 2017 21:35:50 +0100 Subject: [PATCH] Extract code into processMouseKineticState() and add mouse_kinetic_state_t --- right/src/usb_report_updater.c | 95 +++++++++++++++++++--------------- right/src/usb_report_updater.h | 22 ++++++++ 2 files changed, 75 insertions(+), 42 deletions(-) diff --git a/right/src/usb_report_updater.c b/right/src/usb_report_updater.c index 03ccc01..1d2a171 100644 --- a/right/src/usb_report_updater.c +++ b/right/src/usb_report_updater.c @@ -21,76 +21,89 @@ static uint32_t elapsedTime; 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 bool wasMoveAction; -static mouse_speed_t prevMouseSpeed = MouseSpeed_Normal; - static bool activeMouseStates[ACTIVE_MOUSE_STATES_COUNT]; -void processMouseActions() -{ - static float mouseMoveCurrentSpeed; +static mouse_kinetic_state_t mouseMoveState = { + .upState = SerializedMouseAction_MoveUp, + .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) { - mouseMoveCurrentSpeed = mouseMoveInitialSpeed; +void processMouseKineticState(mouse_kinetic_state_t *kineticState) +{ + if (!kineticState->wasMoveAction) { + kineticState->currentSpeed = kineticState->initialSpeed; } - bool isMoveAction = activeMouseStates[SerializedMouseAction_MoveUp] || - activeMouseStates[SerializedMouseAction_MoveDown] || - activeMouseStates[SerializedMouseAction_MoveLeft] || - activeMouseStates[SerializedMouseAction_MoveRight]; + bool isMoveAction = activeMouseStates[kineticState->upState] || + activeMouseStates[kineticState->downState] || + activeMouseStates[kineticState->leftState] || + activeMouseStates[kineticState->rightState]; - float targetSpeed; mouse_speed_t mouseSpeed = MouseSpeed_Normal; if (activeMouseStates[SerializedMouseAction_Accelerate]) { - targetSpeed = mouseMoveAcceleratedSpeed; + kineticState->targetSpeed = kineticState->acceleratedSpeed; mouseSpeed = MouseSpeed_Accelerated; } else if (activeMouseStates[SerializedMouseAction_Decelerate]) { - targetSpeed = mouseMoveDeceleratedSpeed; + kineticState->targetSpeed = kineticState->deceleratedSpeed; mouseSpeed = MouseSpeed_Decelerated; } else if (isMoveAction) { - targetSpeed = mouseMoveBaseSpeed; + kineticState->targetSpeed = kineticState->baseSpeed; } - if (mouseSpeed == MouseSpeed_Accelerated || (wasMoveAction && isMoveAction && (prevMouseSpeed != mouseSpeed))) { - mouseMoveCurrentSpeed = targetSpeed; + if (mouseSpeed == MouseSpeed_Accelerated || (kineticState->wasMoveAction && isMoveAction && (kineticState->prevMouseSpeed != mouseSpeed))) { + kineticState->currentSpeed = kineticState->targetSpeed; } if (isMoveAction) { - if (mouseMoveCurrentSpeed < targetSpeed) { - mouseMoveCurrentSpeed += mouseMoveAcceleration * elapsedTime / 1000; - if (mouseMoveCurrentSpeed > targetSpeed) { - mouseMoveCurrentSpeed = targetSpeed; + if (kineticState->currentSpeed < kineticState->targetSpeed) { + kineticState->currentSpeed += kineticState->acceleration * elapsedTime / 1000; + if (kineticState->currentSpeed > kineticState->targetSpeed) { + kineticState->currentSpeed = kineticState->targetSpeed; } } else { - mouseMoveCurrentSpeed -= mouseMoveAcceleration * elapsedTime / 1000; - if (mouseMoveCurrentSpeed < targetSpeed) { - mouseMoveCurrentSpeed = targetSpeed; + kineticState->currentSpeed -= kineticState->acceleration * elapsedTime / 1000; + if (kineticState->currentSpeed < kineticState->targetSpeed) { + kineticState->currentSpeed = kineticState->targetSpeed; } } - uint16_t distance = mouseMoveCurrentSpeed * elapsedTime / 10; + uint16_t distance = kineticState->currentSpeed * elapsedTime / 10; - if (activeMouseStates[SerializedMouseAction_MoveLeft]) { - ActiveUsbMouseReport->x = -distance; - } else if (activeMouseStates[SerializedMouseAction_MoveRight]) { - ActiveUsbMouseReport->x = distance; + if (activeMouseStates[kineticState->leftState]) { + kineticState->x = -distance; + } else if (activeMouseStates[kineticState->rightState]) { + kineticState->x = distance; } - if (activeMouseStates[SerializedMouseAction_MoveUp]) { - ActiveUsbMouseReport->y = -distance; - } else if (activeMouseStates[SerializedMouseAction_MoveDown]) { - ActiveUsbMouseReport->y = distance; + if (activeMouseStates[kineticState->upState]) { + kineticState->y = -distance; + } else if (activeMouseStates[kineticState->downState]) { + 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] || activeMouseStates[SerializedMouseAction_ScrollDown] || activeMouseStates[SerializedMouseAction_ScrollLeft] || @@ -130,8 +143,6 @@ void processMouseActions() ActiveUsbMouseReport->buttons |= MouseButton_Right; } - prevMouseSpeed = mouseSpeed; - wasMoveAction = isMoveAction; } static layer_id_t previousLayer = LayerId_Base; diff --git a/right/src/usb_report_updater.h b/right/src/usb_report_updater.h index 4fee195..1d92911 100644 --- a/right/src/usb_report_updater.h +++ b/right/src/usb_report_updater.h @@ -1,6 +1,10 @@ #ifndef __USB_REPORT_UPDATER_H__ #define __USB_REPORT_UPDATER_H__ +// Includes: + + #include "config_parser/parse_keymap.h" + // Macros: #define ACTIVE_MOUSE_STATES_COUNT (SerializedMouseAction_Last + 1) @@ -38,6 +42,24 @@ MouseSpeed_Decelerated, } 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: void UpdateUsbReports(void);