Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: 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
-
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?
-
zkus si stahnout JDK1.7.0 pro tu platformu ktera to ma obsahovat ( http://tinyurl.com/3b3wumx ), a najit to v tom
-
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.
-
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 ...
-
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.
-
zkus:
http://rxtx.qbang.org/wiki/index.php/Main_Page
http://users.frii.com/jarvi/rxtx/
-
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.
-
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);
-
Runtime.getRuntime().exec("stty -F " + dev + " 9600 min 0 cs8 -parenb -cstopb");
Uaaa...
-
tož ja se rád poučím ... je lepší způsob???
-
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 ...
-
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/
-
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.