Java/Comunicazione seriale
Java |
categoria · sviluppo · modifica |
Guida alla programmazioneJava/Introduzione - Specifica di linguaggioJava/Tipi di dato - Libreria standard |
Questa è una pagina la cui traduzione dalla lingua inglese va completata o migliorata. La versione originale si trova al link [[1]] |
Questo modulo necessita di essere "wikificato", ovvero formattato secondo gli standard di Wikibooks. Nota: durante la traduzione si è perso un po' di wikificazione
Collabora anche tu a rendere questo modulo conforme alle linee guida e poi rimuovi questo avviso. |
Utilizzare Java per la comunicazione seriale
[modifica | modifica sorgente]Introduzione
[modifica | modifica sorgente]Il linguaggio di programmazione Java si è rivelato molto utilizzato negli ultimi anni e inevitabilmente è arrivata la richiesta di poter programmare le interfacce seriali in Java. In ogni caso, data l'indipendenza di Java dalla piattaforma, è necessaria una API standardizzata con implementazioni che tengono conto della piattaforma su cui si lavora.
Sfortunatamente, la Sun non ha prestato molta attenzione alla comunicazione seriale in Java, esiste una API definita dalla Sun per tale scopo, JavaComm, ma tale API non è prevista all'interno della Java Standard Edition. In particolare alla fine del 2005 la Sun fece sparire il supporto per Windows alla JavaComm. Sono disponibili implementazioni alternative a quella omessa dalla Sun. JavaComm non ha subito molta attività di manutenzione, la Sun ha fatto solo il minimo necessario, fatta eccezione per le pressioni degli acquirenti del client Sun Ray alle quali Sun ha risposto adattando il supporto per Windows per la JavaComm unicamente alla propria piattaforma, dimenticandosi del supporto per Windows.
Questa situazione, e il fatto che la Sun originariamente non ha proveduto ad un'implemntazione di JavaComm per Linux, ha diretto verso lo sviluppo di una libreria gratuita RxTx. RxTx è disponibile, non solo per Linux, ma per diverse piattaforme. Può essere usata con o senza l'appoggio della JavaComm(la RxTx fornisce i suoi driver specifici). Quando vengono utilizzate assieme, il collegamento tra JavaComm e RxTx viene gestito dalla JCL (JavaComm for Linux). La JCL fa parte della RxTx.
Il disinteresse della Sun per JavaComm e il modello di programmazione di quest'ultima contribuirono a raggiungere la reputazione di API inusabile. Fortunatamente in realtà non è così, tale reputazione si è diffusa tra la gente che non ha basi solide nella programmazione delle interfacce seriali e che attribuisce i propri errori all'API.
RxTx - se non è utilizzata come un driver JavaComm - fornisce un'interfaccia completa, ma che purtroppo non segue gli standard. RxTx supporta più piattaforme rispetto a JavaComm. Recentemente, RxTx è stata utilizzata per fornire le stesse interfacce fornite dalla JavaComm, tuttavia i nomi dei packages non corrispondono a quelli dei packages della Sun.
Quale libreria conviene usare? Se si cerca la massima portabilità, allora la JavaComm è una buona scelta. Se non esiste il supporto della JavaComm per una particolare piattaforma allora è bene passare alla RxTx, utilizzandola come driver per quella piattaforma per poi appoggiarsi a JavaComm. Utilizzando la JavaComm si può ottenere supporto per tutte le piattaforme che sono direttamente citate da quelle dichiarate dalla Sun e in aggiunta attraverso RxTx utilizzando JCL. In questo modo l'applicazione non necessita di cambiamenti, e può funzionare utilizzando una sola interfaccia, ovvero la JavaComm.
Questo modulo parla sia della JavaComm e della RxTx. Principalmente ha l'obbiettivo di dimostrare dei concetti chiave. Per coloro che vogliono copiare ad occhi chiusi il codice ci sono riferimenti al codice esempio fornito nei packages. Coloro che vogliono sapere quello che fanno potranno trovare informazioni importanti.
Requisiti
[modifica | modifica sorgente]- Conoscenza di base della comunicazione e programmazione seriale.
- Avere a portata di mano la documentazione del dispositivo con cui si vuole dialogare (es il modem).
- Configurare l'hardware coinvolto e testare l'ambiente di lavoro.
- Scarica l'implementazione delle API necessarie per il sistema operativo utilizzato.
- Letture
- guida all'installazione di JavaComm e/o di RxTx (riportate di seguito)
- documentazione sulle API
- codice esempio
Installazione
[modifica | modifica sorgente]Problemi Generali
[modifica | modifica sorgente]Sia JavaComm che RxTX presentano alcune particolarita' durante l'installazione. Si consiglia di seguire con estrema attenzione le istruzioni di installazione. Se viene detto che un file jar o una library condivisa devono andare in una directory particolare, cosí si deve fare! Se l'istruzione dice che un particolare file o una device necessita di avere una specifica proprietà o diritti di accesso, questo significa anche serietà. Molti semplici problemi di installazione derivano da non seguire le istruzioni precisamente.
Si deve esplicitamente notare che qualche versione di JavaComm avviene con due istruzioni di installazione. Una per Java 1.2 e versioni successive, una per Java 1.1. Usando quella sbagliata risulterà un'installazione non funzionante. Da un lato, qualche versione/builds/packages di RxTx avviene con istruzioni incomplete. In tali casi il corrispondente codice sorgente della distribuzione di RxTx necessita di essere verificata, i quali dovrebbero contenere le istruzioni complete.
Dovrebbe ulteriormente essere notato che è inoltre tipico dell'installazione del Windows JDK avvenire con fino a tre VM, e così tre indici di estensione.
- Uno ha parte nel JDK,
- Uno ha parte nel JRE privato il quale con il JDK fa eseguire i JDK tools, e
- uno ha parte nel JRE pubblico il quale con il JDK fa eseguire le applicazioni
Alcuni persino sostengono avere un quarto JRE in qualche luogo nella gerarchia indice di Windows
JavaComm dovrebbe essere installato almeno come estensione nel JDK ed in tutto il JRE pubblico.
Webstart
[modifica | modifica sorgente]JavaComm
[modifica | modifica sorgente]Un problema generale, sia perJavaCommeRxTxè, che si oppongono all'installazione via Java WebStart:
JavaComm' è noto, perché richiede un file chiamato' 'javax.comm.properties' 'per essere inserito nella directory lib JDK, qualcosa che non si può fare con Java WebStart. Ciò è particolarmente triste, perché il bisogno di quel file è il risultato di una progettazione inutili / decisioneJavaComme avrebbe potuto facilmente essere evitata mediante laJavaCommdesigner. Sun rifiuta costantemente per correggere questo errore, citando il meccanismo è essenziale. Che è, sono sdraiato con i denti quando si tratta diJavaComm, soprattutto, perché Java per lungo tempo ha una architettura service provider esattamente destinati a tali scopi.
Il contenuto del file di proprietà è in genere una sola riga, il nome della classe Java con il driver nativo, ad esempio:
driver = com.sun.comm.Win32Driver
Il seguente è un hack che permette di distribuire JavaComm via Web Start ignorando che il cervello di proprietà morti file. Si è gravi inconvenienti, e potrebbe non riuscire con le nuove uscite JavaComm - Sun dovrebbe mai venire intorno e fare una nuova versione.
In primo luogo, disattivare il gestore della sicurezza. Alcuni programmatori Doofus a Sun ha deciso che sarebbe bello nuovo e di nuovo per verificare l'esistenza del temutojavax.comm.propertiesfile, anche dopo che è stato caricato inizialmente, per nessun altro motivo apparente, rispetto al controllo per la file.
System.setSecurityManager (null);
Poi, quando si inizializza l'API JavaComm, inizializzare il driver manualmente:
driverName String = "com.sun.comm.Win32Driver"; / / o ottenere come una proprietà JNLP
CommDriver CommDriver = (CommDriver) Class.forName (driverName). NewInstance ();
commDriver.initialize ();
Collegamenti esterni
[modifica | modifica sorgente]- Sun Java Communications API
- Java Comm Serial API How-To for Linux
- RxTx Home Page
- Free Java Comm driver for Windows with proper handling of timeouts
- Unofficial Java Web Start/JNLP FAQ - How can I use Web Start and Comm API together?
- SerialIO has a free trial version of their SerialPort package
- Ben Resner has a free download of his SimpleSerial package and a newer version without the C++ code