Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: Arthur 11. 10. 2011, 17:41:01

Název: JavaCommunications API pro Linux
Přispěvatel: Arthur 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
Název: Re: java comm linux
Přispěvatel: nhx 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?
Název: Re: java comm linux
Přispěvatel: Filip 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
Název: Re: java comm linux
Přispěvatel: nhx 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.
Název: Re: java comm linux
Přispěvatel: Arthur 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 ...
Název: Re: java comm linux
Přispěvatel: nhx 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.
Název: Re: java comm linux
Přispěvatel: JH 12. 10. 2011, 11:15:32
zkus:

http://rxtx.qbang.org/wiki/index.php/Main_Page
http://users.frii.com/jarvi/rxtx/
Název: Re: java comm linux
Přispěvatel: nhx 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.
Název: Re: JavaCommunications API pro Linux
Přispěvatel: michal.svatuska 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);
Název: Re: JavaCommunications API pro Linux
Přispěvatel: nhx 12. 10. 2011, 17:31:01
Runtime.getRuntime().exec("stty -F " + dev + " 9600 min 0 cs8 -parenb -cstopb");

Uaaa...
Název: Re: JavaCommunications API pro Linux
Přispěvatel: michal.svatuska 12. 10. 2011, 21:33:18
tož ja se rád poučím ... je lepší způsob???
Název: Re: JavaCommunications API pro Linux
Přispěvatel: michal.svatuska 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 ...
Název: Re: JavaCommunications API pro Linux
Přispěvatel: nhx 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/
Název: Re: JavaCommunications API pro Linux
Přispěvatel: michal.svatuska 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.