0

そのため、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

デバイスは何かを返します。

私は何を間違えましたか?

編集:タイムアウトメソッドで読み込もうとしましたが、メソッドはタイムアウトをスローし続けます。

4

2 に答える 2

0

どうやら、メッセージと見なされるためには、入力文字列が CR で終わる必要があることを指定する仕様を見逃していたようです。CR 文字を追加した後、デバイスは何かを返しました。愚かな間違い (doh)。

于 2015-06-24T16:06:17.310 に答える