Dialogue avec périphérique USB
Bonjour à tous,
Voici mon problème. Je me suis acheté une manette de xbox 360 et j'aimerais controler l'affichage de ses LED. J'ai utilisé différentes bibliothèques (libhid, libusb ..) pour recevoir les rapports sortants et ca fonctionne à merveille, seulement impossible d'écrire sur le device sous Windows.
Le hic c'est que sous Unix/Mac ca fonctionne parfaitement d'où mon incompréhension.
L'histoire donc, pour controller les fameuses LED d'après divers sites/info trouvées par-ci par-là sur le web
* http://tattiebogle.net/index.php/Pro...roller/UsbInfo
* http://www.free60.org/GamePad
Il suffit d'envoyer un rapport de 3 octets au device, du type "0x01 0x03 0xXX" avec XX le pattern que l'on veut utiliser pour l'allumage des LED de la manette. En utilisant un sniffer USB, je retrouve bien de tels rapports sous Windows lors de la connexion de la manette au PC:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
|
...
[257 ms] <<< URB 11 coming back <<<
-- URB_FUNCTION_CONTROL_TRANSFER:
PipeHandle = 0e35a4d0
TransferFlags = 0000000b (USBD_TRANSFER_DIRECTION_IN, USBD_SHORT_TRANSFER_OK)
TransferBufferLength = 00000000
TransferBuffer = 0563a090
TransferBufferMDL = 00000000
UrbLink = 00000000
SetupPacket =
00000000: c1 01 00 01 00 00 14 00
[257 ms] UsbSnoop - MyInternalIOCTLCompletion(07b84ddc) : fido=00000000, Irp=06c50260, Context=05650b90, IRQL=2
[257 ms] <<< URB 16 coming back <<<
-- URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER:
PipeHandle = 06b4b5e8 [endpoint 0x00000081]
TransferFlags = 00000003 (USBD_TRANSFER_DIRECTION_IN, USBD_SHORT_TRANSFER_OK)
TransferBufferLength = 00000003
TransferBuffer = 06e03210
TransferBufferMDL = 00000000
00000000: 01 03 0e
UrbLink = 00000000
[258 ms] UsbSnoop - FilterDispatchAny(07b84b90) : IRP_MJ_INTERNAL_DEVICE_CONTROL
[258 ms] UsbSnoop - FdoHookDispatchInternalIoctl(07b84f8c) : fdo=06c66060, Irp=06c50260, IRQL=2
[258 ms] >>> URB 19 going down >>>
-- URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER:
PipeHandle = 06b4b5e8 [endpoint 0x00000081]
TransferFlags = 00000003 (USBD_TRANSFER_DIRECTION_IN, USBD_SHORT_TRANSFER_OK)
TransferBufferLength = 00000020
TransferBuffer = 06e03210
TransferBufferMDL = 00000000
UrbLink = 00000000
[259 ms] UsbSnoop - FilterDispatchPnp(07b8d20c) : IRP_MJ_PNP (IRP_MN_QUERY_DEVICE_RELATIONS)
[259 ms] UsbSnoop - FdoHookDispatchPnp(07b8d20c) : IRP_MJ_PNP (IRP_MN_QUERY_DEVICE_RELATIONS)
[259 ms] UsbSnoop - FilterDispatchAny(07b84b90) : IRP_MJ_SYSTEM_CONTROL
[260 ms] UsbSnoop - MyInternalIOCTLCompletion(07b84ddc) : fido=00000000, Irp=09012ad0, Context=05715e70, IRQL=2
[260 ms] <<< URB 12 coming back <<<
-- URB_FUNCTION_CONTROL_TRANSFER:
PipeHandle = 0e35a4d0
TransferFlags = 0000000b (USBD_TRANSFER_DIRECTION_IN, USBD_SHORT_TRANSFER_OK)
TransferBufferLength = 00000000
TransferBuffer = 0806a9e0
TransferBufferMDL = 00000000
UrbLink = 00000000
SetupPacket =
00000000: c1 01 00 00 00 00 08 00
... |
On peut voir un rapport concernant les LED ligne #20. Mais je n'arrive pas dans un petit programme home-made à écrire sur le device pour envoyer de type de rapport ... Un autre site web parle de la manette et ajoute ces informations
Citation:
XBox360 controller uses EP1 IN and EP2 OUT for the first interface.
Code:
1 2
| #define USB_GENERIC_IN_EP 0x81
#define USB_GENERIC_OUT_EP 0x02 |
C'est ma première experience hardware du genre, j'ai peut-être loupé quelque chose ! Une idée ?
Merci :)