因此,我尝试使用JSSC库向我的设备发送命令,但尚未成功。这是我的代码,由几个在线示例构建而成:
static SerialPort tPort = new SerialPort("/dev/ttyUSB0");
public static void main(String[] args) {
String[] portNames = SerialPortList.getPortNames();
for (String tPortName : portNames) {
System.out.println(tPortName);
}
try {
tPort.openPort();
tPort.setParams(
SerialPort.BAUDRATE_9600,
SerialPort.DATABITS_8,
SerialPort.STOPBITS_1,
SerialPort.PARITY_NONE);
tPort.setFlowControlMode(SerialPort.FLOWCONTROL_XONXOFF_IN|SerialPort.FLOWCONTROL_XONXOFF_OUT);
int mask = SerialPort.MASK_RXCHAR + SerialPort.MASK_CTS + SerialPort.MASK_DSR; //Prepare mask
tPort.writeBytes("AT".getBytes()); //Write data to port
tPort.setEventsMask(mask); //Set mask
tPort.addEventListener(new SerialPortReader()); //Add SerialPortEventListener
} catch (SerialPortException ex) {
ex.printStackTrace(System.out);
}
}
static class SerialPortReader implements SerialPortEventListener {
public void serialEvent(SerialPortEvent event) {
if(event.isRXCHAR()){//If data is available
System.out.println("available!");
if(event.getEventValue() == 10){//Check bytes count in the input buffer
//Read data, if 10 bytes available
try {
byte buffer[] = tPort.readBytes(10);
} catch (SerialPortException ex) {
System.out.println(ex);
}
}
} else if(event.isCTS()){//If CTS line has changed state
if(event.getEventValue() == 1){//If line is ON
System.out.println("CTS - ON");
} else {
System.out.println("CTS - OFF");
}
} else if(event.isDSR()){ //If DSR line has changed state
if(event.getEventValue() == 1){ //If line is ON
System.out.println("DSR - ON");
} else {
System.out.println("DSR - OFF");
}
}
}
}当我运行它时,我得到的唯一输出是
CTS - OFF
DSR - OFF设备没有明显的反应。但是当我使用这个配置的minicom时
lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk
x A - Serial Device : /dev/ttyUSB0 x
x B - Lockfile Location : /var/lock x
x C - Callin Program : x
x D - Callout Program : x
x E - Bps/Par/Bits : 9600 8N1 x
x F - Hardware Flow Control : No x
x G - Software Flow Control : No x
x x
x Change which setting? x
mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj设备会返回一些东西。
我做错什么了?
编辑:我试着用timeout方法读取,但这个方法一直抛出超时。
发布于 2015-06-24 15:40:08
至少您应该在发送到使用writeBytes.的端口之前调用addEventListener
如果您想要与minicom完全相同的设置,也应该设置.setFlowControl(SerialPort.FLOWCONTROL_NONE)。
发布于 2015-06-25 00:06:17
显然,我错过了规范,该规范规定,为了被视为消息,输入字符串必须以CR结尾。添加CR字符后,设备已返回内容。愚蠢的错误(doh)。
https://stackoverflow.com/questions/30994827
复制相似问题