2014-04-23 11 views
5

Sto cercando di ottenere il modulo node-hid (https://github.com/node-hid/node-hid) che funziona su Windows 7. Posso aprire un dispositivo e scrivere su di esso, ma nessun dato arriva mai.Ottenere il nodo nascosto in Windows

Ho verificato che il dispositivo sta inviando dati. Ho scavato attraverso il codice del nodo-HID (HID.cc) e provato diverse cose per farlo funzionare:

  • modificato il HID :: Funzione recvAsync di utilizzare un hid_read_timeout in un ciclo per vedere se sarebbe tornato nulla.
  • Imposta sia il blocco che il blocco.
  • Dimensioni buffer modificate per adattarsi esattamente a ciò che il dispositivo invia.

Su Windows 8, con la modifica della chiamata hid_read_timeout, tutto funziona correttamente. Non sono sicuro di cosa possa essere cambiato tra i due sistemi, ma ho intenzione di usarlo anche su Windows XP, quindi non posso semplicemente chiamarlo buono.

Sto faticando a trovare altre idee su come eseguire il debug di questo problema. Qualcuno l'ha fatto con successo prima? Esiste un'opzione migliore per utilizzare Node.js con un dispositivo HID?

+0

Hai provato qualcosa come Snoopy per vedere se i tuoi dati arrivano al dispositivo? Quando hai fatto 'npm install', tutto è stato creato correttamente? – Brad

+0

In risposta a Brad, sì, i messaggi stanno facendo in entrambi i modi, come ho provato con altri codici che utilizzano HIDAPI. Stranamente, provando questo su un computer Windows 8, ho funzionato una volta che ho fatto il codice utilizzare la chiamata hid_read_timeout. Sto cominciando a chiedermi se la mia abitudine di non riavviare la mia macchina Windows 7 verrà a mordermi. Pubblicherò quando posso tornare a quella macchina con un aggiornamento. – Chris

+0

Non riavvio mai ... a meno che non si lavori con l'hardware. Ho avuto problemi strani con chipset USB in cui le cose non funzionano correttamente. Potresti essere lì a qualcosa. – Brad

risposta

2

Dopo un serio debug, ho scoperto che per qualche motivo non ho ancora potuto determinare, il file sorgente, HID.cc per il modulo nodo node-hid, aveva bisogno di una chiamata a hid_init() all'interno del costruttore prima della chiamata hid_open. Presumo che in qualche modo questo venga colpito da più thread, rendendo la sicurezza di chiamare hid_init prima che hid_open sia necessario.

ora ho questo lavoro su Windows 7 e Windows 8.

Sintesi delle novità ho dovuto fare: Aggiungere hid_init prima della hid_open chiamare sto usando. Cambia hid_read in hid_read_timeout in un ciclo. (Dal momento che la lettura non tornerà su Windows XP quando si arresta in caso contrario.)

Una volta ripulito, invierò all'autore le mie modifiche.

+0

grazie per questo – Jay

Problemi correlati