Olá,
Eu tenho um modem que possui suporte a Caller ID, inclusive com um programinha que baixei ele já identifica o número e tudo. O problema é fazer isso no java.
Segui um tutorial e criei duas classes para ler os dados da COM1 que é o meu modem, porém quando ligo pro telefone nao faz a identificação. Poderia me ajudar por favor??!! (Código abaixo)
Serei eternamente grato se me ajudar, estou há uns bons dias tentando fazer isso no Java e não consigo =S.
Ps.: O retorno que tenho quando executo o main abaixo é:
Stable Library
Native lib Version = RXTX-2.1-7
Java lib Version = RXTX-2.1-7
CLASSE: Serialcomleitura.java
package wo.WOPIZZARIAS.serialcomm;
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
import gnu.io.CommPortIdentifier;
import gnu.io.SerialPort;
import gnu.io.SerialPortEvent;
import gnu.io.SerialPortEventListener;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
/**
*
* @author João Lucas
*/
public class SerialComLeitura implements Runnable, SerialPortEventListener{
public String dadosLidos;
public int nodeBytes;
public int baudrate;
private int timeout;
private CommPortIdentifier cp;
private SerialPort serialPort;
private OutputStream saida;
private InputStream entrada;
private Thread threadLeitura;
private boolean IDPortaOK;
private boolean PortaOk;
private boolean leitura;
private boolean escrita;
private String porta;
protected String peso;
public SerialComLeitura(String porta, int baudrate, int timeout) {
this.baudrate = baudrate;
this.timeout = timeout;
this.porta = porta;
}
public void run(){
try{
Thread.sleep(5);
}catch(Exception e){
System.out.println("Erro de Thred: " + e);
}
}
public void serialEvent(SerialPortEvent event){
StringBuffer bufferLeitura = new StringBuffer();
int novoDado = 0;
switch(event.getEventType()){
case SerialPortEvent.BI:
case SerialPortEvent.FE:
case SerialPortEvent.OE:
case SerialPortEvent.PE:
case SerialPortEvent.CD:
case SerialPortEvent.CTS:
case SerialPortEvent.DSR:
case SerialPortEvent.RI:
case SerialPortEvent.OUTPUT_BUFFER_EMPTY:
break;
case SerialPortEvent.DATA_AVAILABLE:
while(novoDado != -1){
try{
novoDado = entrada.read();
if(novoDado == -1)
break;
if('\r' == (char)novoDado)
bufferLeitura.append('\n');
else
bufferLeitura.append((char)novoDado);
}catch(IOException ioE){
System.out.println("Erro de leitura serial: " + ioE);
}
}
setPeso(new String(bufferLeitura));
System.out.println(getPeso());
break;
}
}
public void fecharCom(){
try{
serialPort.close();
}catch(Exception e){
System.out.println("Erro fechando porta: " + e);
System.exit(0);
}
}
public String obterPorta(){
return porta;
}
public int obterBaudrate(){
return baudrate;
}
public void setPeso(String peso){
this.peso = peso;
}
public String getPeso(){
return peso;
}
public void habilitarEscrita(){
this.escrita = true;
this.leitura = false;
}
public void habilitarLeitura(){
this.escrita = false;
this.leitura = true;
}
public void obterIdPorta(){
try{
cp = CommPortIdentifier.getPortIdentifier(porta);
if(cp == null){
System.out.println("Erro na porta");
this.IDPortaOK = false;
System.exit(1);
}
this.IDPortaOK = true;
}catch(Exception e){
System.out.println("Erro obtendo ID da porta: " + e);
IDPortaOK = false;
System.exit(1);
}
}
public void abrirPorta(){
try{
this.serialPort = (SerialPort) this.cp.open("SerialComLeitura", timeout);
this.PortaOk = true;
//configurar parâmetros.
serialPort.setSerialPortParams(this.baudrate, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
serialPort.setFlowControlMode(SerialPort.FLOWCONTROL_NONE);
}catch(Exception e){
this.PortaOk = false;
System.out.println("Erro abrindo a comunicação: " + e.toString());
System.exit(1);
}
}
public void lerDados(){
if(this.escrita == false){
try{
this.entrada = serialPort.getInputStream();
}catch(Exception e){
System.out.println("Erro de stream: "+ e);
System.exit(1);
}
try{
serialPort.addEventListener(this);
}catch(Exception e){
System.out.println("Erro de listener: " + e);
System.exit(1);
}
serialPort.notifyOnDataAvailable(true);
try{
this.threadLeitura = new Thread(this);
this.threadLeitura.start();
this.run();
}catch(Exception e){
System.out.println("Erro de thread: " + e);
}
}
}
public void enviarString(String msg){
if(this.escrita == true){
try{
this.saida = serialPort.getOutputStream();
System.out.println("Fluxo OK");
}catch(Exception e){
System.out.println("Erro.STATUS: " + e);
}
try{
System.out.println("Enviando um byte para a porta: "+ this.porta);
System.out.println("Enviando: "+ msg);
saida.write(msg.getBytes());
Thread.sleep(100);
saida.flush();
}catch(Exception e){
System.out.println("Houve um erro durante o envio. ");
System.out.println("STATUS: " + e );
System.exit(1);
}
}else{
System.exit(1);
}
}
}
CLASSE: Serialcom.java
package wo.WOPIZZARIAS.serialcomm;
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
import gnu.io.CommPortIdentifier;
import java.util.Enumeration;
/**
*
* @author João Lucas
*/
public class SerialCom {
protected String[] portas;
protected Enumeration listaDePortas;
public SerialCom(){
this.listaDePortas = CommPortIdentifier.getPortIdentifiers();
}
public String[] getPortas(){
return this.portas;
}
public void listarPortas(){
int i=0;
portas = new String[10];
while(this.listaDePortas.hasMoreElements()){
CommPortIdentifier ips = (CommPortIdentifier) this.listaDePortas.nextElement();
System.out.println(ips.getName());
portas[i] = ips.getName();
i++;
}
}
public boolean portaExiste(String COMp){
String temp;
boolean e = false;
while(this.listaDePortas.hasMoreElements()){
CommPortIdentifier ips = (CommPortIdentifier) this.listaDePortas.nextElement();
temp = ips.getName();
if(temp.equals(COMp))
e = true;
}
return e;
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
//SerialCom serial = new SerialCom();
//serial.listarPortas();
//Leitura
SerialComLeitura leitura = new SerialComLeitura("COM1", 9600, 0);
leitura.habilitarEscrita();
leitura.obterIdPorta();
leitura.abrirPorta();
leitura.lerDados();
try{
Thread.sleep(15000);
}catch(Exception e){
System.out.println("Erro na Thread: "+ e);
}
leitura.fecharCom();
/*
//Leitura
SerialComLeitura escrita = new SerialComLeitura("COM1", 9600, 0);
escrita.habilitarEscrita();
escrita.obterIdPorta();
escrita.abrirPorta();
escrita.enviarString("Ola");
escrita.fecharCom();
*/
}
}
=======================================
SOLUÇÃO:
A porta estava sendo usada por outro programa. Encerrei o tal programa e executei novamente o meu código e fungou! =D