[Java] USB-poort aansturen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • dwilmer
  • Registratie: Oktober 2008
  • Laatst online: 25-01 09:50
Beste tweakers,

Ik moet nu voor een project, dat geprogrammeerd wordt in Java, een usb-device (een RF-chip om robots draadloos aan te sturen) aansturen. Hier zijn nog geen drivers voor. Hoe kan ik deze RF-chip het beste aansturen?

Aangezien we ook een webcam met beeldverwerking moeten koppelen zijn we beperkt tot het gebruik van Windows, aangezien dit onder linux nog niet werkend is gekregen.

We hebben JUSB is geprobeerd, maar de JUSB-driver is enkel 32-bit en zorgt bovendien voor een BSOD zodra het device wordt ingeplugd.

Verder is er javax.usb, maar daar heb ik geen windows-implementatie voor kunnen vinden.

De beste oplossing die ik tot nu toe kan bedenken is om een linux-bak naast de PC te zetten om via het netwerk te verbinden, zodat de linux-machine het device aanstuurt. De twee machines (windows voor beeldverwerking, linux voor aansturen van de robots) communiceren dan via het netwerk, door middel van een Socket.

Ik heb nog geen communicatie geprobeerd vanuit linux, maar dit lijkt veel beter ondersteund te zijn dan het aansturen van een USB-poort vanuit windows.

Mijn vraag is nu: zijn er betere oplossingen? Het mag een beetje exotische oplossing zijn, zolang het maar werkt eigenlijk.

Ik heb enige ervaring met Assembly, C, C# en Java, en ik ben bereid om een nieuwe taal te leren. Er is echter wel een deadline, dus liever geen heel exotische of lastige taal zoals brainf*ck of iets met veel uitzoekwerk als Assembly :+.

EDIT: Nog enkele dingen die we hebben verzonnen: aansturing vanuit C# met communicatie dmv een socket, en aansturing vanuit C of C++ en communicatie dmv Java Native Interface.
Ik heb echter nog geen goede oplossing kunnen vinden in C(++) of C#.

[ Voor 7% gewijzigd door dwilmer op 28-04-2010 11:52 ]


Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Het is een beetje afhankelijk van wat voor device het is. Als het bijvoorbeeld gewoon een usb->serial converter is dan kun je gewoon een COM poort serieel uitlezen.

Anders zul je denk al snel naar JNI moeten grijpen, om zo windows API functies aan te roepen

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • Reptile209
  • Registratie: Juni 2001
  • Laatst online: 17:32

Reptile209

- gers -

Voor welke Windows-versie moet het werken? Gezien je opmerking over een 32-bits driver gok ik op een 64-bit OS. Probeer eens of de driver die je probeerde het wel doet op een 32-bits windows, dan kan je een en ander misschien al beperken tot maar één PC. Scheelt weer een boel ballast t.a.v. de netwerkverbinding in je software.
Hoe kom je aan het apparaat? Is het zelfbouw ofzo (gezien je opmerking dat er geen - geschikte - driver is)? En wat Woy al zegt: wat voor soort communicatie verwacht je device?

Zo scherp als een voetbal!


Acties:
  • 0 Henk 'm!

  • dwilmer
  • Registratie: Oktober 2008
  • Laatst online: 25-01 09:50
Het is een USB-stickje dat op 2.4GHz signalen verstuurt naar een stel robots dat rondrijdt.

In principe kunnen we elke windows-versie gebruiken, de uiteindelijke PC hebben we nog niet geïnstalleerd. We hebben tot nu toe geprobeerd op windows 7, zowel 32 als 64 bits. De JUSB driver (die nodig is om JUSB te laten werken) geeft onder 64 bits win7 de melding dat-ie niet voor 64 bits geschikt is, op een 32-bits win7 wordt de JUSB driver geinstalleerd, wat resulteert in een BSOD elke keer als het stickje wordt ingeplugd.

Er is wel een driver voor het stickje die werkt onder windows 7 32-bit, maar we hebben nog geen flauw idee hoe we die aan moeten spreken, mede omdat er geen documentatie van is.

Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Heb je geen specificaties van de USB stick? Daar kan je dan uit opmaken wat voor communicatie er gebruikt word.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • voodooless
  • Registratie: Januari 2002
  • Laatst online: 18:43

voodooless

Sound is no voodoo!

Inderdaad.. Die stick zal toch wel iets van een driver nodig hebben en zodoende een nieuw apparaat vormen.. Veelal emuleren dit soort dingen een seriële poort, en die kun je dan makkelijk aansturen.

Is iets dergelijks er niet en heb je geen specs van het protocol(USB is immers enkel een transport laag) zul je ook met JUSB bar weinig kunnen doen ben ik bang.

Do diamonds shine on the dark side of the moon :?


Acties:
  • 0 Henk 'm!

  • dwilmer
  • Registratie: Oktober 2008
  • Laatst online: 25-01 09:50
We hebben een programma dat via de USB stick signalen naar de robots stuurt(meegeleverd) en een USB sniffer, zodat we ongeveer het protocol kunnen achterhalen (heel erg ingewikkeld is het allemaal niet).
Dan zouden we via JUSB dat protocol kunnen emuleren en met wat aanklooien hopen dat het werkt.
Maar JUSB krijgen we niet aan de praat, dus dat werkt niet.

We moeten nu dus of JUSB op een andere manier aan de praat krijgen, of een vergelijkbaar pakket aan de praat krijgen, of met JNI dus iets klussen (of een andere, meer exotische omweg). Het probleem van het zelf klussen met JNI is dat we geen specificaties hebben van de driver die het wel doet. Zijn er tools die zoiets kunnen achterhalen/reverse engineeren?

[ Voor 4% gewijzigd door dwilmer op 28-04-2010 14:55 ]


Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Kijk eens gewoon of er een extra COM poort in je device manager erbij krijgt op het moment dat je het USB device aansluit ( Iets als "USB Serial Port (COMXX)" ).

Op die poort zou je dan gewoon een serial sniffer kunnen hangen om te kijken wat er precies over de lijn heen gaat, en dan proberen te reverse engineeren.

Anders gewoon eens contact opnemen met de leverancier van de USB stick. Misschien wil die wel gewoon documentatie aanleveren.

[ Voor 5% gewijzigd door Woy op 28-04-2010 16:09 ]

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • dwilmer
  • Registratie: Oktober 2008
  • Laatst online: 25-01 09:50
Nee, het wordt geen COM-poort, helaas :(

Acties:
  • 0 Henk 'm!

  • Steffannnn
  • Registratie: April 2009
  • Niet online
Wil niet vervelend doen, maar waarom geef je niet wat meer info vrij over de USB-stick? Misschien loopt hier wel iemand rond met net zo'n RF-stick en wellicht heeft die de complete documentatie en drivers zo voor je klaar liggen...

Tenzij je de informatie over het de USB-stick zelf ook niet hebt, en het een merk-/typeloos geval is.... maar dan is wellicht via de descriptors wel te achterhalen wat voor merk/type het is.

[ Voor 28% gewijzigd door Steffannnn op 28-04-2010 16:34 ]


Acties:
  • 0 Henk 'm!

  • dwilmer
  • Registratie: Oktober 2008
  • Laatst online: 25-01 09:50
Het is de USB stick die door de mOway robots (v2) gebruikt worden.
Dit krijg ik als een van de Hardware Ids in de device manager:

USB\VID_04D8&PID_0014&REV_0001&MI_00

Verder kom ik niet verder dan Moway RFUSB als naam...

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 18:28
Is daar wel een Linux driver voor dan? Ik kan er namelijk heel weinig over vinden (de vendor bestaat wel maar het bijbehorende product id is niet bekend).

Lijkt me dat als je het USB protocol moet reverse engineeren dat een veel groter probleem is dan hoe je de boel dan weer met Java verbindt. (Dat zou nog desnoods met JNI kunnen als je geen portable oplossing nodig hebt.)

Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Een andere oplossing is om te kijken welk RF protocol er gebruikt word. Als het bijvoorbeeld gewoon IEEE 802.15.4 of Bluetooth is, dan zijn er waarschijnlijk ook andere USB oplossingen te vinden die wel gewoon gedocumenteerd is.

De makkelijkste optie lijkt me nog steeds om gewoon eens contact te zoeken met de leverancier van het USB device. Misschien doen ze wel helemaal niet moeilijk om de documentatie vrij te geven.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • FragFrog
  • Registratie: September 2001
  • Laatst online: 16:21
Een webcam gebruiken & beeldbewerking uitvoeren onder linux kun je in principe vrij aardig doen met ARIA in combinatie met OpenCV (mits je cam tenminste ondersteunt wordt). We gebruiken deze libraries op het robotlab hier om pioneers en aibo's aan te sturen, al kan ik je helaas niet vertellen hoe dat exact geregeld is. USB devices op de pioneers zijn in elk geval geen probleem (zowel de webcam als de wifi adapter maken afaik gebruik van USB).

Aria heeft volgens mij ook een JAVA interface, maar wij coden alles in C++.

[ Voor 3% gewijzigd door FragFrog op 28-04-2010 18:13 ]

[ Site ] [ twitch ] [ jijbuis ]


Acties:
  • 0 Henk 'm!

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 10-09 14:31
Het "nadeel" van USB is dat je er 127 devices tegelijk aan kunt hangen; typisch via hubs. Je kunt daarom niet vanuit een app zomaar een USB poort aansturen.

Onder Windows is het gevolg dat je voor een device altijd een driver nodig hebt. Soms kun je een class driver gebruiken. - mass storage, of muizen bijvoorbeeld. Soms kun je de generieke WinUSB driver gebruiken. Het laatste alternatief is zelf een driver schrijven.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


Acties:
  • 0 Henk 'm!

  • dwilmer
  • Registratie: Oktober 2008
  • Laatst online: 25-01 09:50
Goed nieuws: de mensen van mOway hebben zelf een applicatie geschreven in .NET om ermee te communiceren, en ze hebben de source code meegegeven. Nu is het nog zaak om die .NET libraries aan te sturen via Java. Ik heb het volgende gevonden: https://dotnetfromjava.dev.java.net/. Ik heb er nog niet mee gespeeld, maar heeft iemand hier al ervaring mee?

Acties:
  • 0 Henk 'm!

  • Steffannnn
  • Registratie: April 2009
  • Niet online
Dan ben ik benieuwd hoe ze dat gedaan hebben, hebben ze het hele protocol zelf geïmplementeerd?
Maken ze gebruik van libraries als libusb, WinDriver(tm)?

(oftewel, is de software/code die ze jou gegeven hebben ergens online te vinden?)
Pagina: 1