linux usb driver xbox360(1)

집에서 놀고 있던 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

참조 사이트.

코멘트

댓글 남기기

이 사이트는 Akismet을 사용하여 스팸을 줄입니다. 댓글 데이터가 어떻게 처리되는지 알아보세요.