shithub: fork

Download patch

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++)
--