Comunicação USB HID e CDC [RESOLVIDO]

Bom dia, pessoal!

Então, necessito de fazer um projeto de interface no qual realizará comunicação USB HID ou CDC, porém, antes de optar, estou pesquisando características de cada comunicação em Java, quais as dificuldades que ambos apresentam e, principalmente, exemplos de comunicação (código, dll a ser usada, etc).

Poderiam me orientar?
Muito obrigada!

[quote=vanessa.tenorio]Bom dia, pessoal!

Então, necessito de fazer um projeto de interface no qual realizará comunicação USB HID ou CDC, porém, antes de optar, estou pesquisando características de cada comunicação em Java, quais as dificuldades que ambos apresentam e, principalmente, exemplos de comunicação (código, dll a ser usada, etc).

Poderiam me orientar?
Muito obrigada![/quote]

Nesse seu projeto o que utilizará?
Qual o objetivo?

Assim posso dar umas dicas…

Bom dia, Henrique!

Então, o objetivo final ainda não foi traçado, pois trata-se de um projeto empresarial, mas a visão geral é: construir um projeto em java, no qual poderá ser realizada a configuração via interface java de um equipamento, e, este equipamento estará conectado ao PC por um cabo USB.

Bem, em minhas pesquisas encontrei este site muito interessante tratando da comunicação USB HID: http://www.blog.kslemb.com/doku.php/en/projects/globx/java_hid, porém necessito de mais materiais, além de códigos e detalhes sobre a comunicação USB CDC, para análise.

Muito obrigada pela ajuda!!!

Vanessa

[quote=vanessa.tenorio]Bom dia, Henrique!

Então, o objetivo final ainda não foi traçado, pois trata-se de um projeto empresarial, mas a visão geral é: construir um projeto em java, no qual poderá ser realizada a configuração via interface java de um equipamento, e, este equipamento estará conectado ao PC por um cabo USB.

Bem, em minhas pesquisas encontrei este site muito interessante tratando da comunicação USB HID: http://www.blog.kslemb.com/doku.php/en/projects/globx/java_hid, porém necessito de mais materiais, além de códigos e detalhes sobre a comunicação USB CDC, para análise.

Muito obrigada pela ajuda!!!

Vanessa[/quote]

Desde já, deixo claro que o Java não tem nenhuma API oficial que implemente o protocolo USB, existem soluções alternativas que são:
jUSB -> http://javanoroeste.com.br/javanoroeste/novo/artigos/java_e_usb.html, http://www.steelbrothers.ch/jusb/, http://www.tel.fer.hr/_download/repository/JavaUSBforWindowsWeb.pdf . É importante ressaltar que o projeto para o S.O windows foi abandonado.

javax.usb -> Esta pretendia ser a API oficial conforme a JCP, http://www.ibm.com/developerworks/library/j-usb/index.html,
http://javax-usb.sourceforge.net/faq.html, http://www.ibm.com/developerworks/ibm/library/it-0701art35/, http://javax-usb.sourceforge.net/

USB4Java pode ser utilizada junto com a javax.usb, http://kayahr.github.com/usb4java/

Eu tentei utilizar todas estas bibliotecas tanto no windows e no linux, obtive erros, uns porque o S.O era 32 bits, problemas com dll, falhas na enumeração dos dispositivos e
problemas na comunicação com o dispositivo.

No começo eu queria criar um hardware meu, que usasse de fato o protocolo USB, eu fiz um hardware estilo o Arduino. O problema do Arduino é que ele é conectado via porta USB,

mas não existe comunicação USB de fato, o que ocorre é que o Arduino possui um chip ftdi que converte os pulsos da porta usb em serial, ou seja, o que existe é uma comunicação serial, para muitas pessoas isso já é o suficiente, se for, o que ocorre é que o Arduino será visto como uma porta COM no PC por causa do driver do chip ftdi embarcado nele.

O CLP (ATMEGA 386-P) do Arduino(UNO) não possui módulo USB nativo, sendo assim ele não pode ser visto com um dispositivo HID (mouse, teclado, etc), se fosse não era 

necessário criar um driver para ele. Atualmente existe uma versão do Arduino (Arduino Leonardo) que possui um CLP com módulo USB nativo, mas não tenho muito conhecimento quanto a isso.

Eu não uso o Arduino, nem vejo muita vantagem nele, para leigos talvez seja bom. Quem usa o Java, é possivel comunicar com o Arduino utilizando a biblioteca serial RxTx, bem fácil mesmo. Dependendo do projeto seja mais que suficiente este tipo de comunicação.
Links:
http://arduino.cc/en/Reference/Serial (biblioteca serial do arduino)
http://rxtx.qbang.org/wiki/index.php/Main_Page (Jar e dlls para se comunicar com o arduino)

Desenvolvi minha placa usando o CLP da microchip http://www.microchip.com/, o CLP 18F4550
que possui módulo USB nativo, e consigo que ele seja visto pelo S.O como um dispositivo HID. O problema é que como gosto do Java, queria implementar um comunicação USB com o Java, testei todas as bibliotecas citadas acima, mas por enquanto não obtive sucesso na transferência de dados.

No entanto, consegui utilizar a tal da comunicação CDC, neste caso utilizo a biblioteca serial para se comunicar com o 18F4550, é necessário também utilizar um driver do fabricante. Por enquanto isto está me quebrando o galho.

Tentei escrever minha própria biblioteca USB para o java, porém é necessário entender muito bem o protocolo USB, e como vocÊ sabe é muito complexo, sem contar que também é necessário escrever códigos nativos, ou seja, a pessoa tem que ter tempo.

Existem muitos projetos legais utilizando o Arduino, mas nada impede de criar o seu próprio Hardware!

Henrique, muitíssimo obrigada!!! Estou impressionada e honrada por você ter compartilhado todo este conhecimento comigo. Realmente, muito obrigada!

Então, fiz uma série de pesquisas e teste com base no conteúdo que você compartilhou e demais materiais, e pude concluir que realmente a utilização da biblioteca serial RXTX seja uma opção de fácil acesso. Também destaco que já possuo conhecimento em comunicação serial, logo a comunicação USB CDC se comporta como tal, e por esta característica facilitaria a manipulação.

Quanto ao Hardware ainda não foi decidido, mas acatando sua exposição sobre o Arduíno, penso que este pode ser muito bem empregado ao projeto. Realizarei pesquisas sobre o mesmo e o informarei sobre os resultados.

Abraço!
Vanessa

Pessoal, bom dia!

Ainda em tempo… através da apostila: Comunicação Serial Utilizando a API da SUN encontrada no site: http://www.ebah.com.br/content/ABAAAAAXsAL/java-comm-api e das informações do Henrique.tenorio , realizei uma comunicação serial perfeitamente, atendendo as necessidades do meu problema, utilizando USB CDC. A quem necessitar, espero ter ajudado.

Vanessa