Closed aliglzr closed 4 months ago
You are missing an adapter for serial I/O, e.g., calimero-rxtx for RXTX as well as the RXTX library. Put those two libraries on the classpath, then calimero should be able to open the port.
I appreciate your reply!
I did what you said, and implemented this adapter:
implementation("com.github.calimero:calimero-rxtx:2.5")
but now it gives me another error:
java.lang.NoClassDefFoundError: gnu.io.RXTXCommDriver thrown while loading gnu.io.RXTXCommDriver
I Rejecting re-init on previously-failed class java.lang.Class<gnu.io.RXTXCommDriver>: java.lang.ExceptionInInitializerError:
at java.lang.Class java.lang.Class.classForName(java.lang.String, boolean, java.lang.ClassLoader) (Class.java:-2)
at java.lang.Class java.lang.Class.forName(java.lang.String, boolean, java.lang.ClassLoader) (Class.java:454)
at java.lang.Class java.lang.Class.forName(java.lang.String) (Class.java:379)
at void gnu.io.CommPortIdentifier.<clinit>() (CommPortIdentifier.java:109)
at java.util.Enumeration gnu.io.CommPortIdentifier.getPortIdentifiers() (CommPortIdentifier.java:318)
at void tuwien.auto.calimero.serial.RxtxAdapter.open(java.lang.String, int) (RxtxAdapter.java:156)
at void tuwien.auto.calimero.serial.RxtxAdapter.<init>(org.slf4j.Logger, java.lang.String, int) (RxtxAdapter.java:100)
at java.lang.Object java.lang.reflect.Constructor.newInstance0(java.lang.Object[]) (Constructor.java:-2)
at java.lang.Object java.lang.reflect.Constructor.newInstance(java.lang.Object[]) (Constructor.java:343)
at tuwien.auto.calimero.serial.LibraryAdapter tuwien.auto.calimero.serial.LibraryAdapter.open(org.slf4j.Logger, java.lang.String, int, int) (LibraryAdapter.java:151)
at void tuwien.auto.calimero.serial.TpuartConnection.<init>(java.lang.String, java.util.Collection) (TpuartConnection.java:183)
at void tuwien.auto.calimero.link.KNXNetworkMonitorTpuart.<init>(java.lang.String, boolean) (KNXNetworkMonitorTpuart.java:71)
at void com.example.myapplication.MainActivity2.onCreate(android.os.Bundle) (MainActivity2.java:40)
at void android.app.Activity.performCreate(android.os.Bundle, android.os.PersistableBundle) (Activity.java:8072)
at void android.app.Activity.performCreate(android.os.Bundle) (Activity.java:8052)
at void android.app.Instrumentation.callActivityOnCreate(android.app.Activity, android.os.Bundle) (Instrumentation.java:1341)
at android.app.Activity android.app.ActivityThread.performLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.content.Intent) (ActivityThread.java:3688)
at android.app.Activity android.app.ActivityThread.handleLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.app.servertransaction.PendingTransactionActions, android.content.Intent) (ActivityThread.java:3864)
at void android.app.servertransaction.LaunchActivityItem.execute(android.app.ClientTransactionHandler, android.os.IBinder, android.app.servertransaction.PendingTransactionActions) (LaunchActivityItem.java:103)
at void android.app.servertransaction.TransactionExecutor.executeCallbacks(android.app.servertransaction.ClientTransaction) (TransactionExecutor.java:135)
at void android.app.servertransaction.TransactionExecutor.execute(android.app.servertransaction.ClientTransaction) (TransactionExecutor.java:95)
at void android.app.ActivityThread$H.handleMessage(android.os.Message) (ActivityThread.java:2253)
at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:106)
at boolean android.os.Looper.loopOnce(android.os.Looper, long, int) (Looper.java:201)
at void android.os.Looper.loop() (Looper.java:288)
at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:7870)
at java.lang.Object java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object[]) (Method.java:-2)
at void com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run() (RuntimeInit.java:548)
at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:1003)
!!!! java.lang.NoClassDefFoundError: gnu.io.RXTXCommDriver thrown while loading gnu.io.RXTXCommDriver
tuwien.auto.calimero.KNXException: failed to open serial port /dev/ttyS4
at tuwien.auto.calimero.serial.RxtxAdapter.open(RxtxAdapter.java:192)
at tuwien.auto.calimero.serial.RxtxAdapter.<init>(RxtxAdapter.java:100)
at java.lang.reflect.Constructor.newInstance0(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
at tuwien.auto.calimero.serial.LibraryAdapter.open(LibraryAdapter.java:151)
at tuwien.auto.calimero.serial.TpuartConnection.<init>(TpuartConnection.java:183)
at tuwien.auto.calimero.link.KNXNetworkMonitorTpuart.<init>(KNXNetworkMonitorTpuart.java:71)
at com.example.myapplication.MainActivity2.onCreate(MainActivity2.java:40)
at android.app.Activity.performCreate(Activity.java:8072)
at android.app.Activity.performCreate(Activity.java:8052)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1341)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3688)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3864)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:103)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2253)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:201)
at android.os.Looper.loop(Looper.java:288)
at android.app.ActivityThread.main(ActivityThread.java:7870)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
Caused by: gnu.io.NoSuchPortException
at gnu.io.CommPortIdentifier.getPortIdentifier(CommPortIdentifier.java:274)
at tuwien.auto.calimero.serial.RxtxAdapter.open(RxtxAdapter.java:162)
... 23 more
I think it does not find the appropriate library. Thanks for your support! :)
calimero-rxtx configures as dependency the RXTX library com.neuronrobotics:nrjavaserial:5.2.1
. That library also contains gnu.io.RXTXCommDriver
which is said to be missing in your stacktrace. Do you have nrjavaserial
on your classpath?
Hello dear bmalinowsky,
Yes, I have nrjavaserial
in my project classpath.
The calimero-rxtx
have imported this library itself.
But I imported this library manually and the error still persists.
Thanks for your support.
I think nrjavaserial
does not support android because in the apk file, native libraries for android does not exist.
Is there any rxtx adapter for calimero-core
with another library that supports android?
Yes, from what I see nrjavaserial
dropped support for android due to permission changes in android 4.x.
I have another provider serial-native, which has a native implementation in C for serial communication. I tried the 3.0-SNAPSHOT on branch android and it seem to work with minor modifications in the emulator. I cannot test actual communication though, because I don't have an android device with serial port.
You would have to adjust the setup for serial-native v2.5.
Thank you very much!
You solved my problem and now it works using serial-native
library.
I really appreciate your help.
Thank you for this very complete and practical library that you developed.
Hello, I want to monitor tpuart network but it can not open serial port. I use below code to create tpuart network monitor:
but when I run the application it gives me this error:
I used another serial port library to connect to serial port and it works so I think the error is for calimero-core library Can you help me to fix it? Thank you in advance for your answers!