locked
Joystick Id su dispositivo usb composito RRS feed

  • Domanda

  • Ho creato un dispositivo usb composito configurabile avente 5 periferiche al suo interno: una periferica generic HID, una tastiera (con tasti multimediali e system power), un mouse e 2 joystick. Il dispositivo viene enumerato e funziona tutto correttamente, ma spesso trovo una duplicazione del Joystick Id nel registro "[HKEY_CURRENT_USER\System\CurrentControlSet\Control\MediaProperties\PrivateProperties\DirectInput" dello stesso che mi crea problemi.

    Nella sottochiave calibration del mio dispositivo sono presenti le chiavi 0,1,2,3,4. Se ho ben capito la chiave 0 indica la periferica generic HID, la chiave 1 indica la sezione multimediale della tastiera, la chiave 2 indica la sezione system power della tastiera, la chiave 3 indica il joy 1 e la chiave 4 indica il joy 2.

    Come è giusto che sia, inizialmente trovo la voce Joystick Id nelle chiavi 3 e 4. Successivamente, non so a seguito di quale evento, viene creata una voce Joystick Id anche nella chiave 2, che va a duplicare il valore di un altro joystick installato.

    Quale può essere il problema?

    lunedì 30 novembre 2015 17:11

Tutte le risposte

  • Ho trovato il problema. Uso la periferica 0 per lo scambio dei dati di configurazione. Comunico con questa periferica tramite la libreria https://github.com/signal11/hidapi che di default apre il canale di comunicazione in modo esclusivo.

    Quando la prima periferica è aperta, se apro l'applet "Periferiche di gioco" o un altro programma che utilizza le Directx, non pontendo accedere a tutte le periferiche, la 1 diventa 0, la 2 diventa 1 e così via a scalare.

    In questo modo il primo joystick diventa 2 ed il secondo joystick diventa 3 ed in questo momento si crea il problema. Nella chiave 3 è già presente la chiave Joystick Id e quindi non cambia nulla, ma viene creata la chiave Joystick Id anche nella chiave 2 che va a duplicare quella presente nella chiave 4 quando la periferica 0 sarà chiusa.

    Per risolvere il problema ho modificato il parametro della funzione CreatefileA() per aprire la periferica in modalità condivisa (FILE_SHARE_READ|FILE_SHARE_WRITE)

    C'è un motivo perchè è stato scelto di aprire le periferiche HID in maniera esclusiva? Possono esserci dei problemi con la mia modifica?




    • Modificato picerno76 giovedì 3 dicembre 2015 20:21
    giovedì 3 dicembre 2015 20:13