shithub: fork

Download patch

ref: fcca73f163f261b88653c981f5ed519e5de16bd7
parent: f13cc4cda769da6471495950516e8b0102ec17dc
author: qwx <qwx@sciops.net>
date: Mon Aug 18 21:25:51 EDT 2025

nusb/joy: /lib/joy devid print + nso gc controller wip

--- a/sys/src/cmd/nusb/joy/joy.c
+++ b/sys/src/cmd/nusb/joy/joy.c
@@ -292,13 +292,29 @@
 			else
 				p->axes[i] += (abs(v)<(g[LogiMax]*deadband))?0:v;
 			break;
+		case 0x010039:
+			switch(v){
+			case 0: m = 0x10000; break;	/* up */
+			case 1: m = 0x90000; break;	/* up + right */
+			case 2: m = 0x80000; break;	/* right */
+			case 3: m = 0xa0000; break;	/* right + down */
+			case 4: m = 0x20000; break;	/* down */
+			case 5: m = 0x60000; break;	/* down + left */
+			case 6: m = 0x40000; break;	/* left */
+			case 7: m = 0x50000; break;	/* left + up */
+			default: m = 0; break;
+			}
+			p->btns |= m;
+			break;
+		default:
+			p->btns &= ~0xf0000;
+			if((l[Usage] >> 16) == 0x09){
+				m = 1ULL << (l[Usage] & 0x3f);
+				p->btns &= ~m;
+				if(v != 0)
+					p->btns |= m;
+			}
 		}
-		if((l[Usage] >> 16) == 0x09){
-			m = 1ULL << (l[Usage] & 0x3f);
-			p->btns &= ~m;
-			if(v != 0)
-				p->btns |= m;
-		}
 	}
 	p->o += g[RepSize];
 }
@@ -330,6 +346,8 @@
 	lastb = 0;
 
 	nerrs = 0;
+
+	print("devid %.8ux\n", ((uint)(f->dev->usb->vid)<<16)|f->dev->usb->did);
 	for(;;){
 		if(f->ep == nil)
 			kbfatal(f, nil);
--