/*
|
|
* This class is one end of a test pair of programs
|
|
* SimpleSnuV1.class is the other end.
|
|
* To run the test requires two com ports
|
|
* and a null modem cable.
|
|
* Start SimpleSnuV1 and then run SimpleRead
|
|
* on the other machine/com port.
|
|
* This code is supplied for demonstration purposes only.
|
|
* You are free to use it as you please.
|
|
*/
|
|
|
|
import java.io.*;
|
|
import java.util.*;
|
|
import gnu.io.*;
|
|
|
|
public class SimpleRead implements Runnable, SerialPortEventListener {
|
|
|
|
static CommPortIdentifier portId;
|
|
static Enumeration portList;
|
|
SerialPort serialPort = null;
|
|
InputStream inputStream;
|
|
OutputStream outputStream;
|
|
|
|
Thread readThread;
|
|
String aS = "";
|
|
int numBytes = 0;
|
|
String num = "021891383";
|
|
String rst = "atz";
|
|
String dial ="atd";
|
|
String outData = "";
|
|
String outDataBuff = "";
|
|
boolean running = true;
|
|
boolean process = true;
|
|
boolean waitForInput = true;
|
|
boolean fatalErr = false;
|
|
String errMessage = "";
|
|
|
|
public static void main(String[] args) {
|
|
if (args.length < 1) {
|
|
System.out.print("SimpleRead.class /dev/ttyxx\n");
|
|
System.exit(-1);
|
|
}
|
|
portList = CommPortIdentifier.getPortIdentifiers();
|
|
while (portList.hasMoreElements()) {
|
|
portId = (CommPortIdentifier) portList.nextElement();
|
|
if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {
|
|
// if (portId.getName().equals("COM1")) {
|
|
if (portId.getName().equals(args[0])) {
|
|
SimpleRead reader = new SimpleRead();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public SimpleRead() {
|
|
try {
|
|
serialPort = (SerialPort) portId.open("SimpleReadApp", 2000);
|
|
} catch (PortInUseException e) {}
|
|
try {
|
|
inputStream = serialPort.getInputStream();
|
|
outputStream = serialPort.getOutputStream();
|
|
} catch (IOException e) {}
|
|
try {
|
|
serialPort.addEventListener(this);
|
|
} catch (TooManyListenersException e) {}
|
|
serialPort.notifyOnDataAvailable(true);
|
|
try {
|
|
serialPort.setSerialPortParams(19200, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
|
|
} catch (UnsupportedCommOperationException e) {}
|
|
readThread = new Thread(this);
|
|
readThread.start();
|
|
}
|
|
|
|
public void run() {
|
|
int resetCount = 0;
|
|
while (running) {
|
|
if (fatalErr) {
|
|
System.out.print("Fatal Error...\n");
|
|
System.exit(1);
|
|
}
|
|
if (!process) {
|
|
try {
|
|
Thread.sleep(500);
|
|
} catch (InterruptedException e) {}
|
|
continue;
|
|
}
|
|
if (num.equals("Nil")) {
|
|
try {
|
|
Thread.sleep(500);
|
|
} catch (InterruptedException e) {}
|
|
continue;
|
|
}
|
|
if (reset()) {
|
|
if (dial()) {
|
|
num = "Nil";
|
|
System.out.print("Yahoooo OK...\n");
|
|
//Here goes a class to handle any coms it gets passed the stuff it needs...
|
|
// SNHdlcMessage myMess = new SNHdlcMessage();
|
|
// String rply = myMess.processInput("loc1", "text", inputStream, outputStream);
|
|
// System.out.print(rply + "\n");
|
|
process = false;
|
|
running = false;
|
|
System.out.print("Normal Exit...\n");
|
|
System.exit(1);
|
|
} else {
|
|
System.out.print("Dial Error...\n");
|
|
process = false;
|
|
running = false;
|
|
System.exit(1);
|
|
}
|
|
} else {
|
|
System.out.print("Reset Error...\n");
|
|
resetCount ++;
|
|
if (resetCount > 2 ) {
|
|
System.out.print("Reset To Many Times Error ...\n");
|
|
System.exit(1);
|
|
}
|
|
}
|
|
try {
|
|
Thread.sleep(100);
|
|
} catch (InterruptedException e) {}
|
|
}
|
|
}
|
|
public void closePort(SerialPort serialPort) {
|
|
if (serialPort != null) {
|
|
serialPort.notifyOnDataAvailable(false);
|
|
serialPort.removeEventListener();
|
|
if (inputStream != null) {
|
|
try {
|
|
inputStream.close();
|
|
inputStream = null;
|
|
}
|
|
catch (IOException e) {}
|
|
}
|
|
if (outputStream != null) {
|
|
try {
|
|
outputStream.close();
|
|
outputStream = null;
|
|
}
|
|
catch (IOException e) {}
|
|
}
|
|
serialPort.close();
|
|
serialPort = null;
|
|
}
|
|
}
|
|
public boolean reset() {
|
|
try {
|
|
outputStream.write(new String("atz").getBytes());
|
|
outputStream.write((byte)0x0D);
|
|
System.out.print("--> atz\n");
|
|
} catch (IOException e) {
|
|
System.out.print("Reset Output IO Exception");
|
|
return false;
|
|
}
|
|
int waitingCount = 0;
|
|
waitForInput = true;
|
|
while (waitForInput) {
|
|
try {
|
|
Thread.sleep(100);
|
|
} catch (InterruptedException e) {}
|
|
waitingCount ++;
|
|
//2 seconds for it to reset
|
|
if (waitingCount > 20) {
|
|
return false;
|
|
}
|
|
}
|
|
int numBytesTotal = 0;
|
|
byte[] readBuffer = new byte[20];
|
|
String sReadBuff = "";
|
|
boolean dLoop = true;
|
|
while (dLoop) {
|
|
try {
|
|
while (inputStream.available() > 0) {
|
|
numBytes = inputStream.read(readBuffer);
|
|
numBytesTotal += numBytes;
|
|
String tmpR = new String(readBuffer);
|
|
sReadBuff += tmpR.substring(0, numBytes);
|
|
}
|
|
if (sReadBuff.indexOf("NO CARRIER") != -1) {
|
|
dLoop = false;
|
|
} else if (sReadBuff.indexOf("BUSY") != -1) {
|
|
dLoop = false;
|
|
} else if (sReadBuff.indexOf("NO DIALTONE") != -1) {
|
|
dLoop = false;
|
|
} else if (sReadBuff.indexOf("OK") != -1) {
|
|
dLoop = false;
|
|
System.out.print("<-- " + new String(sReadBuff));
|
|
return true;
|
|
} else if (sReadBuff.indexOf("CONNECT") != -1) {
|
|
dLoop = false;
|
|
}
|
|
} catch (IOException e) {
|
|
System.out.print("Reset Input IO Exception");
|
|
return false;
|
|
}
|
|
}
|
|
System.out.print("<-- " + new String(sReadBuff));
|
|
return false;
|
|
}
|
|
public boolean dial() {
|
|
try {
|
|
outputStream.write(new String("atd").getBytes());
|
|
outputStream.write(num.getBytes());
|
|
outputStream.write((byte)0x0D);
|
|
System.out.print("--> atdxxxxx\n");
|
|
} catch (IOException e) {
|
|
System.out.print("Dial Output IO Exception");
|
|
return false;
|
|
}
|
|
int waitingCount = 0;
|
|
waitForInput = true;
|
|
while (waitForInput) {
|
|
try {
|
|
Thread.sleep(100);
|
|
} catch (InterruptedException e) {}
|
|
waitingCount ++;
|
|
if (waitingCount > 1000) {
|
|
return false;
|
|
}
|
|
}
|
|
int numBytesTotal = 0;
|
|
byte[] readBuffer = new byte[20];
|
|
String sReadBuff = "";
|
|
boolean dLoop = true;
|
|
while (dLoop) {
|
|
try {
|
|
while (inputStream.available() > 0) {
|
|
numBytes = inputStream.read(readBuffer);
|
|
numBytesTotal += numBytes;
|
|
String tmpR = new String(readBuffer);
|
|
sReadBuff += tmpR.substring(0, numBytes);
|
|
}
|
|
if (sReadBuff.indexOf("NO CARRIER") != -1) {
|
|
dLoop = false;
|
|
} else if (sReadBuff.indexOf("BUSY") != -1) {
|
|
dLoop = false;
|
|
} else if (sReadBuff.indexOf("NO DIALTONE") != -1) {
|
|
dLoop = false;
|
|
} else if (sReadBuff.indexOf("OK") != -1) {
|
|
dLoop = false;
|
|
} else if (sReadBuff.indexOf("CONNECT") != -1) {
|
|
System.out.print("<-- " + new String(sReadBuff));
|
|
dLoop = false;
|
|
return true;
|
|
}
|
|
} catch (IOException e) {
|
|
System.out.print("Dial Input IO Exception");
|
|
return false;
|
|
}
|
|
}
|
|
System.out.print("<-- " + new String(sReadBuff));
|
|
return false;
|
|
}
|
|
public void serialEvent(SerialPortEvent event) {
|
|
switch(event.getEventType()) {
|
|
case SerialPortEvent.BI:
|
|
System.out.print("BI\n");
|
|
case SerialPortEvent.OE:
|
|
System.out.print("OE\n");
|
|
case SerialPortEvent.FE:
|
|
System.out.print("FE\n");
|
|
case SerialPortEvent.PE:
|
|
System.out.print("PE\n");
|
|
case SerialPortEvent.CD:
|
|
System.out.print("CD\n");
|
|
case SerialPortEvent.CTS:
|
|
System.out.print("CTS\n");
|
|
case SerialPortEvent.DSR:
|
|
System.out.print("DSR\n");
|
|
case SerialPortEvent.RI:
|
|
System.out.print("RI\n");
|
|
case SerialPortEvent.OUTPUT_BUFFER_EMPTY:
|
|
System.out.print("Out Buff Empty\n");
|
|
break;
|
|
case SerialPortEvent.DATA_AVAILABLE:
|
|
waitForInput = false;
|
|
// System.out.print("Data Available\n");
|
|
break;
|
|
}
|
|
}
|
|
}
|