집에서 놀고 있던 8년 전에 구매한 xbox 360 유선 usb 패드를 raspberry pi4에 등록하여 사용하고 싶다. 나온 지 오래되어 이미 xpad 리눅스 드라이버가 공개되어 있다. 그러나 usb, input을 한번에 사용하여 잘 이해되지 않는다. 남은 출장 기간 중 천천히 공부 하기로 했다.
usb를 등록하려면 vendor id, product id, 연결되면 실행되는 call back probe, disconnect 등 을 알아야 한다. 인터넷에 공개된 좋은 자료, 소스를 공부했다. 관련 코드는 여기에 저장했다.
usb-devices로 xbox 패드를 확인하면 (I가 interface 인듯하다) 0, 1, 2, 3인터페이스가 등록되지 않았다.
pi@raspberrypi:~/rasp/xbox_driver $ usb-devices T: Bus=01 Lev=02 Prnt=02 Port=00 Cnt=01 Dev#= 3 Spd=12 MxCh= 0 D: Ver= 2.00 Cls=ff(vend.) Sub=ff Prot=ff MxPS= 8 #Cfgs= 1 P: Vendor=045e ProdID=028e Rev=01.14 S: Manufacturer=©Microsoft Corporation S: Product=Controller S: SerialNumber=0C59FC4 C: #Ifs= 4 Cfg#= 1 Atr=a0 MxPwr=500mA I: If#=0x0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=5d Prot=01 Driver=(none) I: If#=0x1 Alt= 0 #EPs= 4 Cls=ff(vend.) Sub=5d Prot=03 Driver=(none) I: If#=0x2 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=5d Prot=02 Driver=(none) I: If#=0x3 Alt= 0 #EPs= 0 Cls=ff(vend.) Sub=fd Prot=13 Driver=(none)
usb_register_dev로 interface 0, 1을 등록했다.
pi@raspberrypi:~/rasp/xbox_driver $ usb-devices T: Bus=01 Lev=02 Prnt=02 Port=00 Cnt=01 Dev#= 3 Spd=12 MxCh= 0 D: Ver= 2.00 Cls=ff(vend.) Sub=ff Prot=ff MxPS= 8 #Cfgs= 1 P: Vendor=045e ProdID=028e Rev=01.14 S: Manufacturer=©Microsoft Corporation S: Product=Controller S: SerialNumber=0C59FC4 C: #Ifs= 4 Cfg#= 1 Atr=a0 MxPwr=500mA I: If#=0x0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=5d Prot=01 Driver=xbox360 I: If#=0x1 Alt= 0 #EPs= 4 Cls=ff(vend.) Sub=5d Prot=03 Driver=xbox360 I: If#=0x2 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=5d Prot=02 Driver=(none) I: If#=0x3 Alt= 0 #EPs= 0 Cls=ff(vend.) Sub=fd Prot=13 Driver=(none) pi@raspberrypi:~/rasp/xbox_driver $ dmesg [48226.848081] xpad is 0c15d4e5, xpad->udev is 14758ec9 [48226.848101] interface is 913f883f [48226.848126] xbox360 1-1.1:1.0: interrupt in, out found. 55429370, 0119bb5d [48226.848528] xbox360 1-1.1:1.0: usb xbox360 driver was registerd [48226.848710] xpad is a5c87389, xpad->udev is 14758ec9 [48226.848726] interface is f687e098 [48226.848746] xbox360 1-1.1:1.1: interrupt in, out found. efcdcd2e, 2fcb2b2f [48226.849000] xbox360 1-1.1:1.1: usb xbox360 driver was registerd [48226.849162] xpad is 5c5394a1, xpad->udev is 14758ec9 [48226.849178] interface is 7fa06804 [48226.849196] xbox360 1-1.1:1.2: Could not find both interrupt-in and interrpt-out endpoints [48226.849211] error -6 [48226.849304] xpad is 5c5394a1, xpad->udev is 14758ec9 [48226.849320] interface is c9ea30ca [48226.849337] xbox360 1-1.1:1.3: Could not find both interrupt-in and interrpt-out endpoints [48226.849352] error -6 [48226.849490] usbcore: registered new interface driver xbox360
참조 사이트.