JavaCommunications API pro Linux

Arthur

JavaCommunications API pro Linux
« kdy: 11. 10. 2011, 17:41:01 »
Prosím vás,

ví někdo, kde se dá sehnat/stáhnout/obdržet  JavaCommunications API, neboli knihovna javax.comm , nejlépe pro Linux ?

Tvořím jednoduchý program v jave, který má načítat data po sériové lince. Nečekal jsem žádný problém. Mám několik stažených hotových příkladů kterak komunikovat po RS232, jenom je spustit...   akorát že je k tomu potřeba javax.comm.*  která není součástí defaultního SDK.

Oficiální stránka na Oraclu nemá žádný download link. Všechny stejné dotazy jiných uživatelů jsou buď nezodpovězeny nebo ukazují na starý sunovský link, který je přesměrován na tuto oraclovskou stránku bez ničeho.

Podle jednoho zdroje existuje implementace JavaComm API pro SUN,HP-UX a Linux,  podle jineho zdroje neni verze pro linux implementovana. Nicméně, nejsem schopen stáhnout vůbec nic.

Povedlo se mi najít jakousi starou kopii pro win32 a jdk1.4.

Přece to nemůže být takový problém...

Díky za pomoc
« Poslední změna: 12. 10. 2011, 12:32:14 od Petr Krčmář »


nhx

Re: java comm linux
« Odpověď #1 kdy: 11. 10. 2011, 20:54:15 »
V jave nejde otevirat soubory? Proc proste nectes / zapisujes do /dev/ttySx? Pokud potrebujes nastavovat parametry, co to vyresit volanim termios funkci pres java native interface?

Filip

Re: java comm linux
« Odpověď #2 kdy: 12. 10. 2011, 05:22:58 »
zkus si stahnout JDK1.7.0 pro tu platformu ktera to ma obsahovat ( http://tinyurl.com/3b3wumx ), a najit to v tom

nhx

Re: java comm linux
« Odpověď #3 kdy: 12. 10. 2011, 08:42:37 »
Citace
podle jineho zdroje neni verze pro linux implementovana

BTW, tohle je ta slavna prenositelnenost Javy? To je zradlo... Izoluju se od hostujiciho systemu natolik, ze muzu maximalne tak kreslit (oskliva) okynka.

Arthur

Re: java comm linux
« Odpověď #4 kdy: 12. 10. 2011, 11:01:08 »
Jako nejsem profi vývojář ani IT expert, ale občas potřebuju něco naprogramovat a v jave se mi to píše velmi dobře a hlavně kvůli té přenositelnosti.  Akorát teď jsem trochu narazil...

nicméně, zkusil jsem jen tak číst /dev/ttyUSB0  a ono to zdá-se funguje přesně tak jak potřebuju. Musím to sice předtím nakonfigurovat pomocí stty, ale to není žádný problém. Takže dík za nakopnutí, ona ta nejjednodušší řešení bývají nejlepší  :-)

Akorát by mě ještě zajímalo, jestli se to dá stejně jednoduše provést pod Win. Tam se přece jenom port,device atd chová jinak než file.  V linuxu je všechno file, že ...


nhx

Re: java comm linux
« Odpověď #5 kdy: 12. 10. 2011, 11:11:49 »
Jako nejsem profi vývojář ani IT expert, ale občas potřebuju něco naprogramovat a v jave se mi to píše velmi dobře a hlavně kvůli té přenositelnosti.  Akorát teď jsem trochu narazil...

nicméně, zkusil jsem jen tak číst /dev/ttyUSB0  a ono to zdá-se funguje přesně tak jak potřebuju. Musím to sice předtím nakonfigurovat pomocí stty, ale to není žádný problém. Takže dík za nakopnutí, ona ta nejjednodušší řešení bývají nejlepší  :-)

Akorát by mě ještě zajímalo, jestli se to dá stejně jednoduše provést pod Win. Tam se přece jenom port,device atd chová jinak než file.  V linuxu je všechno file, že ...

Zrovna seriove porty se chovaji taky jako soubory. Misto /dev/tty neco otevres soubor COMx (kde x je cislo). Mimochodem, k tomu nastavovani, myslim, ze by nebyl problem vytvorit si malou c knihovnicku, ktera by na POSIX systemech volala termios fce a na wokenicich SetCommState(), ci jak se to jmenuje. Tu bys pak volal pres Java Native Interface.

JH


nhx

Re: java comm linux
« Odpověď #7 kdy: 12. 10. 2011, 11:17:13 »
Ale stejne... pokud potrebujes casteji byt trochu bliz k hardwaru, doporucuju se naucit poradne C(++). S Javou je akorat otrava a navic te misto hledani reseni uci hledat knihovny.

michal.svatuska

Re: JavaCommunications API pro Linux
« Odpověď #8 kdy: 12. 10. 2011, 16:38:09 »
Zrovna tohle je lepší vyřešit asi po svojem ... tudiž ... dvě verze ... jedna pro Windows pomoci COM a druha pro Linux, Unix, Mac .. prostě cokoliv unix něco.

Tohle je ukázka pro druhou skupinu.

//port ttyUSBX, ttySx atd.
private String dev = "/dev/ttyUSBx";

//otevreni a nastaveni serioveho portu
Runtime.getRuntime().exec("stty -F " + dev + " 9600 min 0 cs8 -parenb -cstopb");
DataInputStream dis = new DataInputStream(new FileInputStream(dev));
DataOutputStream dos = new DataOutputStream(new FileOutputStream(dev));

byte bufRx[] = new byte[200];
int sizeRx = 0;

//Tx,Rx objekty třeba pakety cctalku nebo jinak reprezentovaná data
MsgTx
MsgRx


//zapisovaní a čtení
dos.write(msgTx.toByteArray());
Thread.sleep(100);
sizeRx = dis.read(bufRx);
msgRx = new MsgRx(bufRx, sizeRx);

nhx

Re: JavaCommunications API pro Linux
« Odpověď #9 kdy: 12. 10. 2011, 17:31:01 »
Runtime.getRuntime().exec("stty -F " + dev + " 9600 min 0 cs8 -parenb -cstopb");

Uaaa...

michal.svatuska

Re: JavaCommunications API pro Linux
« Odpověď #10 kdy: 12. 10. 2011, 21:33:18 »
tož ja se rád poučím ... je lepší způsob???

michal.svatuska

Re: JavaCommunications API pro Linux
« Odpověď #11 kdy: 12. 10. 2011, 21:40:33 »
btw ... nastartuje to proces stejne tak jako kdybys to použil v Cčku ... můžeš si všecko udělat přes C a volat to přes JNI .. ale stty bys stejnak musel zavolat ...

nhx

Re: JavaCommunications API pro Linux
« Odpověď #12 kdy: 12. 10. 2011, 21:58:29 »
btw ... nastartuje to proces stejne tak jako kdybys to použil v Cčku ... můžeš si všecko udělat přes C a volat to přes JNI .. ale stty bys stejnak musel zavolat ...

Proc bys musel z C spoustet stty? http://www.root.cz/man/3/termios/

michal.svatuska

Re: JavaCommunications API pro Linux
« Odpověď #13 kdy: 13. 10. 2011, 14:14:47 »
Ja vždycky používal stty ať už jsem to volal z bashe nebo z javy ... kouzlo stty je že je to součást OS a jednoduše to jde použít z libovolnýho jazyka (java, python, bash .. ) ... termios obecně cokoliv C přes JNI je jistě sofistikovaná cesta ... ale za předpokladu že STTY splnilo co jsem požadoval tak v jeho použití nevidím žádnej problem ... tak i tak je to šáhnutí mimo JVM(paměť atd.) ... prostě já použil tohle řešení ale rozhodně existujou i jiný cesty.