Package: rxtx
Severity: normal
Dear Maintainer,
* What led up to the situation?
I just got an Arduino Uno and I couldn't get the software to "see" the board -
no ports listed.
A few hours later I got it working - it would have been quicker if the error
reports told more.
I also found a reference to a file called "gnu.io.rxtx.properties" which is to
be found in one of the
Java extension directories - the attached patch handles the case where the
"java.ext.dirs"
system property contains more than one directory.
The real clincher was in SerialImp.h/c where I print the port and the open()
error return code.
This is how I found out that you need to log out and then back in again for
group additions to
take effect!
I entered the source tree after "apt-get source"ing rxtx and went through
configure --prefix=/usr; make; sudo make install
with debugging added with "make -DDEBUG_VERBOSE" I finally tracked it down.
Take the patch or leave it, but if you could, please get
sudo make uninstall
working from the source tree!
Thanks.
-- System Information:
Debian Release: wheezy/sid
APT prefers proposed-updates
APT policy: (500, 'proposed-updates'), (500, 'testing'), (500, 'stable')
Architecture: amd64 (x86_64)
Kernel: Linux 3.0.0-1-amd64 (SMP w/2 CPU cores)
Locale: LANG=en_IE.UTF-8, LC_CTYPE=en_IE.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
diff -Naur rxtx-2.2pre2/src/gnu/io/RXTXCommDriver.java rxtx-2.2pre2-new/src/gnu/io/RXTXCommDriver.java
--- rxtx-2.2pre2/src/gnu/io/RXTXCommDriver.java 2011-10-21 01:29:20.000000000 +0100
+++ rxtx-2.2pre2-new/src/gnu/io/RXTXCommDriver.java 2011-10-21 01:28:56.840173668 +0100
@@ -356,7 +356,7 @@
First try to register ports specified in the properties
file. If that doesn't exist, then scan for ports.
*/
- for (int PortType=CommPortIdentifier.PORT_SERIAL;PortType<=CommPortIdentifier.PORT_PARALLEL;PortType++) {
+ for (int PortType=CommPortIdentifier.PORT_SERIAL; PortType<=CommPortIdentifier.PORT_PARALLEL; PortType++) {
if (!registerSpecifiedPorts(PortType)) {
if (!registerKnownPorts(PortType)) {
registerScannedPorts(PortType);
@@ -375,10 +375,18 @@
while (tok.hasMoreElements())
{
String PortName = tok.nextToken();
-
- if (testRead(PortName, PortType))
+ if(debug)
+ System.out.println("Trying " + PortName + ".");
+ if (testRead(PortName, PortType)) {
CommPortIdentifier.addPortName(PortName,
PortType, this);
+ if(debug)
+ System.out.println("Success: Read from " + PortName + ".");
+ }else{
+ if(debug)
+ System.out.println("Fail: Cannot read from " + PortName
+ + ".");
+ }
}
}
@@ -402,26 +410,39 @@
private boolean registerSpecifiedPorts(int PortType)
{
String val = null;
- Properties origp = System.getProperties();//save system properties
-
- try
- {
+ Properties origp = System.getProperties(); // save system properties
- String ext_dir=System.getProperty("java.ext.dirs")+System.getProperty("file.separator");
- FileInputStream rxtx_prop=new FileInputStream(ext_dir+"gnu.io.rxtx.properties");
- Properties p=new Properties();
- p.load(rxtx_prop);
- System.setProperties(p);
- for (Iterator it = p.keySet().iterator(); it.hasNext();) {
- String key = (String) it.next();
- System.setProperty(key, p.getProperty(key));
- }
- }catch(Exception e){
- if (debug){
- System.out.println("The file: gnu.io.rxtx.properties doesn't exists.");
- System.out.println(e.toString());
- }//end if
+ String [] ext_dirs = System.getProperty("java.ext.dirs").split(":");
+ String fs = System.getProperty("file.separator");
+ for (int n = 0; n < ext_dirs.length; ++n) {
+ String ext_file = "?";
+ try{
+ ext_file = ext_dirs[n] + fs + "gnu.io.rxtx.properties";
+ FileInputStream rxtx_prop = new FileInputStream(ext_file);
+ Properties p=new Properties();
+ p.load(rxtx_prop);
+ System.setProperties(p);
+ for (Iterator it = p.keySet().iterator(); it.hasNext();) {
+ String key = (String) it.next();
+ String value = p.getProperty(key);
+ if(debug) {
+ System.out.println(key + " -> " + value);
+ }
+ System.setProperty(key, value);
+ }
+ }catch(Exception e){
+ if (debug){
+ System.out.println("The file \"" + ext_file
+ + "\" doesn't exist.");
+ System.out.println(e.toString());
+ }//end if
+ continue;
}//end catch
+ if (debug){
+ System.out.println("Read properties from \"" + ext_file
+ + "\".");
+ }//end if
+ }//end for
if (debug)
System.out.println("checking for system-known ports of type "+PortType);
diff -Naur rxtx-2.2pre2/src/SerialImp.c rxtx-2.2pre2-new/src/SerialImp.c
--- rxtx-2.2pre2/src/SerialImp.c 2011-10-21 01:29:20.000000000 +0100
+++ rxtx-2.2pre2-new/src/SerialImp.c 2011-10-21 00:10:59.449672026 +0100
@@ -4359,7 +4359,11 @@
if( fd < 0 )
{
- report_verbose( "testRead() open failed\n" );
+ report_verbose( "testRead() open \"" );
+ report_verbose( name );
+ report_verbose( "\" failed: " );
+ report_verbose( strerror(errno) );
+ report_verbose( "\n" );
ret = JNI_FALSE;
goto END;
}
@@ -5095,7 +5099,7 @@
exceptions: none
comments:
----------------------------------------------------------*/
-void report_warning(char *msg)
+void report_warning(const char *msg)
{
#ifndef DEBUG_MW
fprintf(stderr, msg);
@@ -5113,7 +5117,7 @@
exceptions: none
comments:
----------------------------------------------------------*/
-void report_verbose(char *msg)
+void report_verbose(const char *msg)
{
#ifdef DEBUG_VERBOSE
#ifdef DEBUG_MW
@@ -5132,7 +5136,7 @@
exceptions: none
comments:
----------------------------------------------------------*/
-void report_error(char *msg)
+void report_error(const char *msg)
{
#ifndef DEBUG_MW
fprintf(stderr, msg);
@@ -5150,7 +5154,7 @@
exceptions: none
comments:
----------------------------------------------------------*/
-void report(char *msg)
+void report(const char *msg)
{
#ifdef DEBUG
# ifndef DEBUG_MW
diff -Naur rxtx-2.2pre2/src/SerialImp.h rxtx-2.2pre2-new/src/SerialImp.h
--- rxtx-2.2pre2/src/SerialImp.h 2011-10-21 01:29:20.000000000 +0100
+++ rxtx-2.2pre2-new/src/SerialImp.h 2011-10-21 00:10:25.801637483 +0100
@@ -467,10 +467,10 @@
jboolean is_interrupted( struct event_info_struct * );
int send_event(struct event_info_struct *, jint, int );
void dump_termios(char *,struct termios *);
-void report_verbose(char *);
-void report_error(char *);
-void report_warning(char *);
-void report(char *);
+void report_verbose(const char *);
+void report_error(const char *);
+void report_warning(const char *);
+void report(const char *);
void throw_java_exception( JNIEnv *, char *, char *, char * );
int lock_device( const char * );
void unlock_device( const char * );
__
This is the maintainer address of Debian's Java team
<http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-java-maintainers>.
Please use
[email protected] for discussions and questions.