PDA

Visualizza la versione completa : javax.comm


scolpi
14-12-2003, 18:36
Ciao a tutti, volevo sapere se qualcuno ha incontrato difficoltà nel lavorare con la parallela (lpt1) usando javax.comm.
Io riesco solo a crivere nella porta, ma non a leggere per es. il metodo isPrinterBusy() mi restituisce sempre false a prescindere dalla presenza di un livello di tensione alto o basso sul pin BUSY del connettore della porta. Siccome uso windows xp mi è stato detto che può essere questa la causa. Qualcuno mi può dare conferma di ciò ed eventualmente esiste una soluzione?
Siccome sto diventando matto per risolvere questo problema spero che qualcuno mi possa aiutare.
Ciao e grazie.

hannibal/p
20-12-2003, 22:02
ciao
io ho provato qualche mese fà ma non ci sono riuscito!!
mi potresti spiegare ( magari con un codice di esempio ) come fai a scrivere sulla parallela???

grazie mille

ciao

scolpi
21-12-2003, 20:13
import java.io.*;

public class Port {


/** Creates a new instance of Port */
public Port() {
try{
FileOutputStream porta = new FileOutputStream("LPT1");
porta.write(0xf1);
}
catch(Exception e){}
}
}
public static void main(String args[]){
Port p = new Port();
}

Questo è il codice più semplice per scrivere nella parallela, ricorda però che i pin busy,paper empty,devono essere ad un livello di tensione basso (sono TTL) li devi collegare a massa.
L'analogo programma per leggere il registro di stato non funziona sotto XP, 2000, NT.
Per leggere l'unico modo di realizzare una libreria col c++ e nel caso di XP,2000,NT a causa della protezione del S.O. si devono usare le API di windows.
con le api di java si può solo scrivere nella porta, ma non leggere perchè pur essendo presenti i metodi per la lettura non funzionano, non sono implementati. Sono diventato scemo per capirlo!!!!
L'ho trovato nel forum della sun.

Per scrivere con javax.comm usa questo codice
import javax.comm.*;
import java.io.*;

// Questa classe permette di scrivere sulla porta parallela
// il cui nome è specificato nel costruttore della stessa.


public class ScriviSuParallela {



// Crea un oggetto che scrive il valore della stringa
// message sulla porta parallela port

public ScriviSuParallela(String port, String message){
try{
//Prendiamo il descrittore della porta scelta.
// Nel caso in cui la porta non esista verrà sollevata
// una eccezione
// di tipo NoSuchPortException

CommPortIdentifier id_porta;
id_porta= CommPortIdentifier.getPortIdentifier(port);

// Proviamo a prendere l'ownership della porta data.
// Nel caso in cui la porta sia già occupata verrà
// sollevata una eccezione di tipo PortInUseException


CommPort porta=id_porta.open("ScriviSuParallela",200);
// Otteniamo un riferimento all'OutputStream della porta

OutputStream out=porta.getOutputStream();
// Impostiamo il modo di comunicazione in LPT_MODE_ECP
// ovvero
// Enhanced capabilities port
// Nel caso in cui i valori impostati non siano supportati
// verrà sollevata una eccezione di tipo
// UnsupportedCommOperationException


ParallelPort porta_parallela=(ParallelPort)porta;
porta_parallela.setMode(ParallelPort.LPT_MODE_SPP) ;

// Procediamo, quindi, alla scrittura del messaggio
// sulla porta
PrintStream ps= new PrintStream(out);
ps.print(message);

// Chiudiamo la porta
ps.close();
porta.close();
System.out.println("Porta chiusa");
}
catch(NoSuchPortException ne){
System.out.println("La porta "+port+" non e' presente");
}

catch(PortInUseException pe){
System.out.println("La porta "+port+" e' occupata da "+
pe.currentOwner);
}

catch(UnsupportedCommOperationException ue){
System.out.println("La porta non supporta le proprietà
impostate");
}

catch(IOException ioe){
System.out.println("Errore di IO");
}// fine try/catch

}// fine



public static void main(String[] args){
if(args.length<2)
System.out.println("Usage java ScriviSuParallela <port name>
<message>");
else{
ScriviSuParallela scrivi= new ScriviSuParallela(args[0],args[1]);
}// fine else
}// fine


}// fine classe

Ricordati di mettere al posto giusto i file javax.comm javax.propretis e win32comm.dll
Se ti serve altro scrivi pure ciao.

hannibal/p
22-12-2003, 16:16
dove li devo mettere questi files ??
javax.comm javax.propretis e win32comm.dll

se ti puo interessare sul sito www.mokabyte.it ho trovato del materiale, comprese delle classi per scrivere e leggere sulla parallela e sulla seriale ( probabilmente non sono riuscito ad utilizzarle perche non mettevo in stato basso quei pin )

altro sito interessante è questo:
www.giobe2000.it
ti spiega nei particolari il funzionamento della porta parallela ecc

grazie
ciao

scolpi
29-12-2003, 21:35
I file in questione devono essere posti come qui di seguito scritto,(è il file jdk1.2.html che hai scaricato quando hai scaricato il file javacomm20-win32.zip.):

Installing the Java Communications API on JDK 1.2 (RC1)
<jdk> refers to the root directory of your JDK installation. If you installed JDK in c:\jdk1.2 then replace all reference to <jdk> with c:\jdk1.2.


Windows: place the win32com.dll in <jdk>\jre\bin directory.

Place the comm.jar in <jdk>\jre\lib\ext.

Place the javax.comm.properties in <jdk>\jre\lib .

Do not alter the CLASSPATH.

Nella directory jdk1.x.x è presente la dir ext, ad esempio se hai il jdk1.4.1 il file comm.jar lo devi mettere in jdk1.4.1\jre\lib\ext

Scusa se non ti ho risposto prima ma ero via ciao.

hannibal/p
29-12-2003, 23:33
grazie per la risposta provo e ti faccio sapere.
per curiosità, quale applicazione stai sviluppando che utilizza lpt??
probabilmente è la stessa cosa che vorrei fare io

ciao

hannibal/p
30-12-2003, 18:55
riesco a compilarla ma non ad eseguirla

cosi la lancio:

C:\Documents and Settings\Administrator\Desktop\provejava>java ScriviSuParallela

questo l'errore:

Exception in thread "main" java.lang.NoClassDefFoundError: javax/comm/Unsupporte
dCommOperationException

ho provato anche ad aggiungere la porta e il messaggio ma ricevo lo stesso errore

scolpi
31-12-2003, 13:28
Prova ad eliminare con un commento la seguente istruzione:
porta_parallela.setMode(ParallelPort.LPT_MODE_SPP) ;
è la responsabile dell'eccezione in questione
ed elimina il relativo blocco catch, tanto comunque col javax.comm non si può impostare altro modo che non l'SPP!

scolpi
15-01-2004, 21:18
Ti funziona il javax.comm?

Loading