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