import upstream maccel baseline
Tests / test_core_function (push) Failing after 12s

This commit is contained in:
2026-03-24 12:10:31 +00:00
parent 6e948d7b39
commit 5f1254d11a
108 changed files with 18930 additions and 0 deletions
+93
View File
@@ -0,0 +1,93 @@
#include "dbg.h"
#include "linux/input.h"
#include <linux/stddef.h>
#define NONE_EVENT_VALUE 0
typedef struct {
int *x;
int *y;
} mouse_move;
static mouse_move MOVEMENT = {.x = NULL, .y = NULL};
/*
* Track whether we injected synthetic storage for a missing axis.
* When rotation is active and the mouse only reports one axis (e.g. pure
* horizontal movement -> only REL_X), we need a place for f_accelerate
* to write the rotated cross-axis component. These synthetic values
* are later injected into the event stream by maccel_events().
*/
static bool injected_x = false;
static bool injected_y = false;
static int synthetic_x_val = 0;
static int synthetic_y_val = 0;
static inline void update_mouse_move(struct input_value *value) {
switch (value->code) {
case REL_X:
MOVEMENT.x = &value->value;
break;
case REL_Y:
MOVEMENT.y = &value->value;
break;
default:
dbg("bad movement input_value: (code, value) = (%d, %d)", value->code,
value->value);
}
}
static inline int get_x(mouse_move movement) {
if (movement.x == NULL) {
return NONE_EVENT_VALUE;
}
return *movement.x;
}
static inline int get_y(mouse_move movement) {
if (movement.y == NULL) {
return NONE_EVENT_VALUE;
}
return *movement.y;
}
static inline void set_x_move(int value) {
if (MOVEMENT.x == NULL) {
return;
}
*MOVEMENT.x = value;
}
static inline void set_y_move(int value) {
if (MOVEMENT.y == NULL) {
return;
}
*MOVEMENT.y = value;
}
/*
* When rotation is active and one axis is missing from the frame,
* point the missing axis to synthetic storage so f_accelerate can
* write the rotated component into it.
*/
static inline void ensure_axes_for_rotation(void) {
if (MOVEMENT.x == NULL) {
synthetic_x_val = 0;
MOVEMENT.x = &synthetic_x_val;
injected_x = true;
dbg("rotation: injecting synthetic REL_X storage (x=%d)", 0);
}
if (MOVEMENT.y == NULL) {
synthetic_y_val = 0;
MOVEMENT.y = &synthetic_y_val;
injected_y = true;
dbg("rotation: injecting synthetic REL_Y storage (y=%d)", 0);
}
}
static inline void clear_mouse_move(void) {
MOVEMENT.x = NULL;
MOVEMENT.y = NULL;
injected_x = false;
injected_y = false;
}