1

Java プロジェクトでrxtx ライブラリを使用して、gps チップからのシリアル データを読み取ります。今、これをAndroid 4.0.3ストックROMを搭載したルート化されたGalaxy NexusであるAndroidデバイスに移植しようとしています。

すでにプロジェクトを作成し、クラスを Android バージョンに移植しました。次のように、Android 用の rxtx ライブラリを使用します。

public void init() {
    try {
        Enumeration portIdentifiers = CommPortIdentifier.getPortIdentifiers();
        // / See what ports are available. and latch on desired port
        while (portIdentifiers.hasMoreElements()) {
            CommPortIdentifier pid = (CommPortIdentifier) portIdentifiers.nextElement();
            if (pid.getPortType() == CommPortIdentifier.PORT_SERIAL && pid.getName().equals(PORT)) {
                portId = pid;
                break;
            }
        }
        serialPort = (SerialPort) portId.open("test", 5000);
        in = serialPort.getInputStream();
        dis = new DataInputStream(in);
        serialPort.addEventListener(this);
        serialPort.setSerialPortParams(BAUDRATE, SerialPort.DATABITS_8, SerialPort.STOPBITS_1,
                SerialPort.PARITY_NONE);
        serialPort.notifyOnDataAvailable(true);
    } catch (PortInUseException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (TooManyListenersException e) {
        e.printStackTrace();
    } catch (UnsupportedCommOperationException e) {
        e.printStackTrace();
    }

}

この後、serialEvent(SerialPortEvent event)-method を使用して着信データを読み取ろうとします。

しかし、ライブラリのネイティブ実装に問題があるため、データを読み取ることができません。これは私のlogcat出力です:

11-14 11:24:49.793: I/GNU.IO(15496): JNI_OnLoad called.
11-14 11:24:49.793: I/GNU.IO(15496): Testing the version.
11-14 11:24:49.800: I/GNU.IO(15496): entering RXTXCommDriver:getDeviceDirectory 
11-14 11:24:49.800: I/GNU.IO(15496): TestREAD.
11-14 11:24:49.808: I/GNU.IO(15496): /dev/ttyO0
11-14 11:24:49.808: I/GNU.IO(15496): entering RXTXPort:testRead 
11-14 11:24:49.808: I/GNU.IO(15496): RXTX Warning:  Removing stale lock file. /data/local/tmp/LCK..ttyO0
11-14 11:24:49.816: I/GNU.IO(15496): leaving RXTXPort:testRead 
11-14 11:24:49.832: I/GNU.IO(15496): entering RXTXCommDriver:getDeviceDirectory 
11-14 11:24:49.840: I/GNU.IO(15496): TestREAD.
11-14 11:24:49.847: I/GNU.IO(15496): /dev/ttyO0
11-14 11:24:49.847: I/GNU.IO(15496): entering RXTXPort:testRead 
11-14 11:24:49.847: I/GNU.IO(15496): leaving RXTXPort:testRead 
11-14 11:24:49.871: I/GNU.IO(15496): entering RXTXPort:Initialize 
11-14 11:24:49.879: I/GNU.IO(15496): entering RXTXPort:open 
11-14 11:24:49.886: I/GNU.IO(15496): leaving RXTXPort:open 
11-14 11:24:49.886: I/GNU.IO(15496): entering eventLoop
11-14 11:24:49.886: I/GNU.IO(15496):  
11-14 11:24:49.886: I/GNU.IO(15496): entering send_event 
11-14 11:24:49.886: I/GNU.IO(15496): send_event: !eventloop_interupted
11-14 11:24:49.886: I/GNU.IO(15496): send_event: jclazz
11-14 11:24:49.886: I/GNU.IO(15496): send_event: calling
11-14 11:24:49.886: I/GNU.IO(15496): send_event: called
11-14 11:24:49.886: I/GNU.IO(15496): leaving send_event 
11-14 11:24:49.886: I/GNU.IO(15496): entering check_tiocmget_changes
11-14 11:24:49.886: I/GNU.IO(15496): leaving check_tiocmget_changes
11-14 11:24:49.886: I/GNU.IO(15496): port_has_changed_fionread: change is 0
11-14 11:24:49.886: I/GNU.IO(15496): entering send_event 
11-14 11:24:49.886: I/GNU.IO(15496): send_event: !eventloop_interupted
11-14 11:24:49.886: I/GNU.IO(15496): send_event: jclazz
11-14 11:24:49.886: I/GNU.IO(15496): send_event: calling
11-14 11:24:49.886: I/GNU.IO(15496): send_event: called
11-14 11:24:49.886: I/GNU.IO(15496): leaving send_event 
11-14 11:24:49.886: I/GNU.IO(15496): entering check_tiocmget_changes
11-14 11:24:49.886: I/GNU.IO(15496): leaving check_tiocmget_changes
11-14 11:24:49.886: I/GNU.IO(15496): port_has_changed_fionread: change is 0
11-14 11:24:49.894: I/GNU.IO(15496): entering send_event 
11-14 11:24:49.894: I/GNU.IO(15496): send_event: !eventloop_interupted
11-14 11:24:49.894: I/GNU.IO(15496): send_event: jclazz
11-14 11:24:49.910: I/GNU.IO(15496): leaving RXTXPort:translate_speed 
11-14 11:24:49.910: I/GNU.IO(15496): entering RXTXPort:nativeSetSerialPortParams 
11-14 11:24:49.910: I/GNU.IO(15496): entering translate_date_bits 
11-14 11:24:49.910: I/GNU.IO(15496): entering translate_stop_bits 
11-14 11:24:49.910: I/GNU.IO(15496): leaving RXTXPort:translate_stop_bits 
11-14 11:24:49.910: I/GNU.IO(15496): entering translate_parity 
11-14 11:24:49.910: I/GNU.IO(15496): leaving translate_parity 
11-14 11:24:49.910: I/GNU.IO(15496): leaving RXTXPort:nativeSetSerialPortParams 
11-14 11:24:49.910: I/GNU.IO(15496): send_event: calling
11-14 11:24:49.910: I/GNU.IO(15496): send_event: called
11-14 11:24:49.910: I/GNU.IO(15496): leaving send_event 
11-14 11:24:49.910: I/GNU.IO(15496): entering check_tiocmget_changes
11-14 11:24:49.910: I/GNU.IO(15496): leaving check_tiocmget_changes
11-14 11:24:49.910: I/GNU.IO(15496): port_has_changed_fionread: change is 0
11-14 11:24:49.910: I/GNU.IO(15496): entering send_event 
11-14 11:24:49.910: I/GNU.IO(15496): send_event: !eventloop_interupted
11-14 11:24:49.910: I/GNU.IO(15496): send_event: jclazz
11-14 11:24:49.910: I/GNU.IO(15496): send_event: calling
11-14 11:24:49.910: I/GNU.IO(15496): send_event: called
11-14 11:24:49.910: I/GNU.IO(15496): leaving send_event 
11-14 11:24:49.910: I/GNU.IO(15496): entering check_tiocmget_changes
11-14 11:24:49.910: I/GNU.IO(15496): leaving check_tiocmget_changes
11-14 11:24:49.910: I/GNU.IO(15496): port_has_changed_fionread: change is 0
11-14 11:24:49.910: I/GNU.IO(15496): entering check_tiocmget_changes
11-14 11:24:49.910: I/GNU.IO(15496): leaving check_tiocmget_changes
11-14 11:24:49.910: I/GNU.IO(15496): port_has_changed_fionread: change is 0
11-14 11:24:49.918: I/GNU.IO(15496): entering check_tiocmget_changes
11-14 11:24:49.918: I/GNU.IO(15496): leaving check_tiocmget_changes
11-14 11:24:49.918: I/GNU.IO(15496): port_has_changed_fionread: change is 0
11-14 11:24:49.918: I/GNU.IO(15496): entering check_tiocmget_changes
11-14 11:24:49.918: I/GNU.IO(15496): leaving check_tiocmget_changes
11-14 11:24:49.918: I/GNU.IO(15496): port_has_changed_fionread: change is 0

最後の 3 行は、電話でプロセスを強制終了するまで繰り返されます。シリアルポートにはデータがありません。実際には、初期化さえされていないようです。これに対する提案はありますか?

4

1 に答える 1

0

Android でシリアル ポートを使用するには、次のライブラリを使用することをお勧めします: Serial Port API。私のために働き、あなたに役立つと信じています。

于 2014-12-12T18:14:18.253 に答える