ref: 1d59734c28a2599e680e02e5d8dfad0678e2e13e
parent: 6bafe777c88b1418e74baf163b70026a4c1dcc9b
author: qwx <qwx@sciops.net>
date: Mon Nov 3 04:27:31 EST 2025
nusb/joy: experimental fix for axes (thanks cgnarne)
--- a/sys/src/cmd/nusb/joy/joy.c
+++ b/sys/src/cmd/nusb/joy/joy.c
@@ -251,6 +251,7 @@
{int axes[Maxaxes];
int oldaxes[Maxaxes];
+ double normaxes[Maxaxes];
u64int btns;
int o;
@@ -258,6 +259,12 @@
uchar p[128];
};
+static double
+normalize(int val, int max, int min)
+{+ return (double)(val - min) / (max - min);
+}
+
static void
joyparse(int t, int f, int g[], int l[], int, void *a)
{@@ -287,8 +294,10 @@
case 0x010034:
case 0x010035:
i = l[Usage] - 0x010030;
- if((f & (Fabs|Frel)) == Fabs)
+ if((f & (Fabs|Frel)) == Fabs){p->axes[i] = (abs(v)<(g[LogiMax]*deadband))?0:v;
+ p->normaxes[i] = normalize(p->axes[i], g[LogiMax], g[LogiMin]);
+ }
else
p->axes[i] += (abs(v)<(g[LogiMax]*deadband))?0:v;
break;
@@ -374,7 +383,7 @@
repparse(f->rep, f->rep+f->nrep, joyparse, &p);
for(i = 0; i < Maxaxes; i++){if(p.axes[i] != p.oldaxes[i])
- print("axis %d %d\n", i, p.axes[i]);+ print("axis %d %d %.4f\n", i, p.axes[i], p.normaxes[i]);p.oldaxes[i] = p.axes[i];
}
for(i = 0; i < 64; i++)
--
⑨