aboutsummaryrefslogtreecommitdiff
path: root/comms/rxtx/files/patch-src-gnu-io-CommPortIdentifier.java
diff options
context:
space:
mode:
Diffstat (limited to 'comms/rxtx/files/patch-src-gnu-io-CommPortIdentifier.java')
-rw-r--r--comms/rxtx/files/patch-src-gnu-io-CommPortIdentifier.java850
1 files changed, 850 insertions, 0 deletions
diff --git a/comms/rxtx/files/patch-src-gnu-io-CommPortIdentifier.java b/comms/rxtx/files/patch-src-gnu-io-CommPortIdentifier.java
new file mode 100644
index 000000000000..1cbe33fe4f6f
--- /dev/null
+++ b/comms/rxtx/files/patch-src-gnu-io-CommPortIdentifier.java
@@ -0,0 +1,850 @@
+--- src/gnu/io/CommPortIdentifier.java.orig 2008-11-27 20:02:34.000000000 +0000
++++ src/gnu/io/CommPortIdentifier.java 2015-05-11 16:51:34.000000000 +0100
+@@ -76,85 +76,138 @@
+ public static final int PORT_RS485 = 4; // rs485 Port
+ public static final int PORT_RAW = 5; // Raw Port
+ private String PortName;
+- private boolean Available = true;
++ private static boolean init_clean = false;
++ private boolean Available = true;
+ private String Owner;
+ private CommPort commport;
+ private CommDriver RXTXDriver;
+ static CommPortIdentifier CommPortIndex;
+ CommPortIdentifier next;
+ private int PortType;
+- private final static boolean debug = false;
++ private final static boolean debug = "true".equals( System.getProperty( "gnu.io.rxtx.DEBUG" ) );
+ static Object Sync;
+ Vector ownershipListener;
+
+
+
+-/*------------------------------------------------------------------------------
+- static {} aka initialization
+- accept: -
+- perform: load the rxtx driver
+- return: -
+- exceptions: Throwable
+- comments: static block to initialize the class
+-------------------------------------------------------------------------------*/
+- // initialization only done once....
++ /**
++ * static {} aka initialization
++ * accept: -
++ * perform: load the rxtx driver
++ * return: -
++ * exceptions: Throwable
++ * comments: static block to initialize the class
++ *
++ * initialization only done once....
++ *
++ **/
++
+ static
+ {
+- if(debug) System.out.println("CommPortIdentifier:static initialization()");
++ if(debug) System.out.println("CommPortIdentifier:Static()");
++
+ Sync = new Object();
+ try
+ {
++ if(debug) System.out.println(" Pre RXTXDriver.Loading New Class (Clean)");
++
++ init_clean = true;
++
+ CommDriver RXTXDriver = (CommDriver) Class.forName("gnu.io.RXTXCommDriver").newInstance();
++
++ if(debug) System.out.println(" Pre RXTXDriver.initialize()");
++
+ RXTXDriver.initialize();
++
++ if(debug) System.out.println(" Post RXTXDriver.initialize()");
++
+ }
+ catch (Throwable e)
+ {
+- System.err.println(e + " thrown while loading " + "gnu.io.RXTXCommDriver");
++
++ if(debug) System.out.println(" " + e + " thrown while loading gnu.io.RXTXCommDriver");
++
++ System.err.println(e + " thrown while loading gnu.io.RXTXCommDriver");
++
++ init_clean = false;
++
+ }
+
+ String OS;
+
+ OS = System.getProperty("os.name");
++
++ if(debug) System.out.println(" The OS is " + OS);
++
+ if(OS.toLowerCase().indexOf("linux") == -1)
+ {
+- if (debug)
+- System.out.println("Have not implemented native_psmisc_report_owner(PortName)); in CommPortIdentifier");
++ if (debug)
++ {
++ System.out.println(" WARNING:");
++ System.out.println(" native_psmisc_System.out.println_owner(@)) not implemented");
++
++ /**
++ * Not Implemented:
++ *
++ * native_psmisc_System.out.println_owner(PortName)
++ * in CommPortIdentifier")
++ **/
++
++ }
+ }
++
++ if(debug) System.out.println(" Loading Library...");
++
+ System.loadLibrary( "rxtxSerial" );
+- }
+- CommPortIdentifier ( String pn, CommPort cp, int pt, CommDriver driver)
++
++ if(debug) System.out.println(" init_clean is " + init_clean);
++ if(debug) System.out.println("CommPortIdentifier:Static:Exit");
++
++ }
++ CommPortIdentifier
++ (
++ String pn,
++ CommPort cp,
++ int pt,
++ CommDriver driver
++ )
+ {
+ PortName = pn;
+ commport = cp;
+ PortType = pt;
+ next = null;
+ RXTXDriver = driver;
+-
+ }
+
+-/*------------------------------------------------------------------------------
+- addPortName()
+- accept: Name of the port s, Port type,
+- reverence to RXTXCommDriver.
+- perform: place a new CommPortIdentifier in the linked list
+- return: none.
+- exceptions: none.
+- comments:
+-------------------------------------------------------------------------------*/
++ /**
++ * addPortName()
++ * accept: Name of the port s, Port type,
++ * reference to RXTXCommDriver.
++ * perform: place a new CommPortIdentifier in the linked list
++ * return: none.
++ * exceptions: none.
++ * comments:
++ **/
++
+ public static void addPortName(String s, int type, CommDriver c)
+ {
+
+- if(debug) System.out.println("CommPortIdentifier:addPortName("+s+")");
++ if(debug) System.out.println("CommPortIdentifier:addPortName(" + s + ")");
++
+ AddIdentifierToList(new CommPortIdentifier(s, null, type, c));
++
++ if(debug) System.out.println("CommPortIdentifier:addPortName:Exit");
+ }
+-/*------------------------------------------------------------------------------
+- AddIdentifierToList()
+- accept: The cpi to add to the list.
+- perform:
+- return:
+- exceptions:
+- comments:
+-------------------------------------------------------------------------------*/
++
++ /**
++ * AddIdentifierToList()
++ * accept: The cpi to add to the list.
++ * perform:
++ * return:
++ * exceptions:
++ * comments:
++ **/
++
+ private static void AddIdentifierToList( CommPortIdentifier cpi)
+ {
+ if(debug) System.out.println("CommPortIdentifier:AddIdentifierToList()");
+@@ -163,7 +216,7 @@
+ if (CommPortIndex == null)
+ {
+ CommPortIndex = cpi;
+- if(debug) System.out.println("CommPortIdentifier:AddIdentifierToList() null");
++ if(debug) System.out.println(" Com Port Index is null!");
+ }
+ else
+ {
+@@ -171,264 +224,351 @@
+ while (index.next != null)
+ {
+ index = index.next;
+- if(debug) System.out.println("CommPortIdentifier:AddIdentifierToList() index.next");
+ }
+ index.next = cpi;
+ }
+ }
++
++ if(debug) System.out.println("CommPortIdentifier:addIdentifier:Exit");
++
+ }
+-/*------------------------------------------------------------------------------
+- addPortOwnershipListener()
+- accept:
+- perform:
+- return:
+- exceptions:
+- comments:
+-------------------------------------------------------------------------------*/
++
+ public void addPortOwnershipListener(CommPortOwnershipListener c)
+ {
+ if(debug) System.out.println("CommPortIdentifier:addPortOwnershipListener()");
+
+- /* is the Vector instantiated? */
++ /**
++ * is the Vector instantiated?
++ **/
+
+ if( ownershipListener == null )
+ {
+ ownershipListener = new Vector();
+ }
+
+- /* is the ownership listener already in the list? */
++ /**
++ * is the ownership listener already in the list?
++ **/
+
+ if ( ownershipListener.contains(c) == false)
+ {
+ ownershipListener.addElement(c);
+ }
++
++ if(debug) System.out.println("CommPortIdentifier:addPortOwnershipListener:Exit");
+ }
+-/*------------------------------------------------------------------------------
+- getCurrentOwner()
+- accept:
+- perform:
+- return:
+- exceptions:
+- comments:
+-------------------------------------------------------------------------------*/
++
+ public String getCurrentOwner()
+ {
+ if(debug) System.out.println("CommPortIdentifier:getCurrentOwner()");
++
+ return( Owner );
++
+ }
+-/*------------------------------------------------------------------------------
+- getName()
+- accept:
+- perform:
+- return:
+- exceptions:
+- comments:
+-------------------------------------------------------------------------------*/
++
+ public String getName()
+ {
+- if(debug) System.out.println("CommPortIdentifier:getName()");
++ if(debug) System.out.println("CommPortIdentifier:getName(" + PortName + ")");
++
+ return( PortName );
++
++
+ }
+-/*------------------------------------------------------------------------------
+- getPortIdentifier()
+- accept:
+- perform:
+- return:
+- exceptions:
+- comments:
+-------------------------------------------------------------------------------*/
++
+ static public CommPortIdentifier getPortIdentifier(String s) throws NoSuchPortException
+ {
+ if(debug) System.out.println("CommPortIdentifier:getPortIdentifier(" + s +")");
++
+ CommPortIdentifier index;
+
+ synchronized (Sync)
+ {
+ index = CommPortIndex;
+- while (index != null && !index.PortName.equals(s)) {
++
++ while (index != null && !index.PortName.equals(s))
++ {
+ index = index.next;
+ }
++
+ if (index == null) {
+- /* This may slow things down but if you pass the string for the port after
+- a device is plugged in, you can find it now.
+-
+- http://bugzilla.qbang.org/show_bug.cgi?id=48
+- */
++
++ /**
++ * This may slow things down but if you pass the string for the port after
++ * a device is plugged in, you can find it now.
++ *
++ * http://bugzilla.qbang.org/show_bug.cgi?id=48
++ **/
++
+ getPortIdentifiers();
++
+ index = CommPortIndex;
+- while (index != null && !index.PortName.equals(s)) {
++
++ while (index != null && !index.PortName.equals(s))
++ {
+ index = index.next;
+ }
++
+ }
++
+ }
++
+ if (index != null) return index;
+ else
+ {
+- if ( debug )
+- System.out.println("not found!" + s);
++ if (debug) System.out.println(" not found!" + s);
++
+ throw new NoSuchPortException();
+ }
++
++
++
+ }
+-/*------------------------------------------------------------------------------
+- getPortIdentifier()
+- accept:
+- perform:
+- return:
+- exceptions:
+- comments:
+-------------------------------------------------------------------------------*/
++
+ static public CommPortIdentifier getPortIdentifier(CommPort p)
+ throws NoSuchPortException
+ {
+- if(debug) System.out.println("CommPortIdentifier:getPortIdentifier(CommPort)");
++ if(debug) System.out.println("CommPortIdentifier:getPortIdentifier(" + p + ")");
++
+ CommPortIdentifier c;
++
+ synchronized( Sync )
+ {
++
+ c = CommPortIndex;
+- while ( c != null && c.commport != p )
++
++ while
++ (
++ c != null &&
++ c.commport != p
++ )
++ {
+ c = c.next;
++ }
+ }
++
+ if ( c != null )
+ return (c);
+
+- if ( debug )
+- System.out.println("not found!" + p.getName());
++ if ( debug ) System.out.println(" not found!" + p.getName());
++
+ throw new NoSuchPortException();
++
++
+ }
+-/*------------------------------------------------------------------------------
+- getPortIdentifiers()
+- accept:
+- perform:
+- return:
+- exceptions:
+- comments:
+-------------------------------------------------------------------------------*/
++
+ static public Enumeration getPortIdentifiers()
+ {
+- if(debug) System.out.println("static CommPortIdentifier:getPortIdentifiers()");
+- //Do not allow anybody get any ports while we are re-initializing
+- //because the CommPortIndex points to invalid instances during that time
++ if(debug) System.out.println("CommPortIdentifier:getPortIdentifiers()");
++
++ /**
++ * Do not allow anybody get any ports while we are re-initializing
++ * because the CommPortIndex points to invalid instances during that time
++ */
++
+ synchronized(Sync) {
+- //Remember old ports in order to restore them for ownership events later
++
++ /**
++ * Remember old ports in order to restore them for ownership events later
++ **/
++ if(debug) System.out.println(" backing up current ports");
+ HashMap oldPorts = new HashMap();
+ CommPortIdentifier p = CommPortIndex;
+- while(p!=null) {
++
++ while(p!=null)
++ {
+ oldPorts.put(p.PortName, p);
+ p = p.next;
+ }
++
+ CommPortIndex = null;
++
+ try
+ {
+- //Initialize RXTX: This leads to detecting all ports
+- //and writing them into our CommPortIndex through our method
+- //{@link #addPortName(java.lang.String, int, gnu.io.CommDriver)}
+- //This works while lock on Sync is held
+- CommDriver RXTXDriver = (CommDriver) Class.forName("gnu.io.RXTXCommDriver").newInstance();
+- RXTXDriver.initialize();
+- //Restore old CommPortIdentifier objects where possible,
+- //in order to support proper ownership event handling.
+- //Clients might still have references to old identifiers!
++ /**
++ * Initialize RXTX: This leads to detecting all ports
++ * and writing them into our CommPortIndex through our method
++ * {@link #addPortName(java.lang.String, int, gnu.io.CommDriver)}
++ * This works while lock on Sync is held
++ **/
++
++ /**
++ * However, if RXTX is being called invoked by
++ * CommPortIdentifier:getPortIdentifiers for the first
++ * time, they have just been enumerated by static() in
++ * this class, so we don't need to repeat on the first
++ * time.
++ **/
++
++ if ( init_clean == false )
++ {
++ if(debug) System.out.println(" RXTX init() is dirty");
++ if(debug) System.out.println(" Creating RXTX new instance");
++ CommDriver RXTXDriver = (CommDriver) Class.forName("gnu.io.RXTXCommDriver").newInstance();
++ if(debug) System.out.println(" Creating RXTX new instance");
++ RXTXDriver.initialize();
++
++ }
++ else
++ {
++ if(debug) System.out.println(" RXTX init() still clean, now marking as dirty");
++ init_clean = false;
++ }
++
++ /**
++ * Restore old CommPortIdentifier objects where possible,
++ * in order to support proper ownership event handling.
++ * Clients might still have references to old identifiers!
++ **/
++
+ CommPortIdentifier curPort = CommPortIndex;
+ CommPortIdentifier prevPort = null;
+- while(curPort!=null) {
++ while(curPort!=null)
++ {
+ CommPortIdentifier matchingOldPort = (CommPortIdentifier)oldPorts.get(curPort.PortName);
+- if(matchingOldPort!=null && matchingOldPort.PortType == curPort.PortType) {
+- //replace new port by old one
++ if
++ (
++ matchingOldPort!=null &&
++ matchingOldPort.PortType == curPort.PortType
++ )
++ {
++ /**
++ * replace new port by old one
++ **/
++
+ matchingOldPort.RXTXDriver = curPort.RXTXDriver;
+ matchingOldPort.next = curPort.next;
+- if(prevPort==null) {
++
++ if (prevPort==null)
++ {
+ CommPortIndex = matchingOldPort;
+- } else {
++ }
++ else
++ {
+ prevPort.next = matchingOldPort;
+ }
+ prevPort = matchingOldPort;
+- } else {
++ }
++ else
++ {
+ prevPort = curPort;
+ }
++
+ curPort = curPort.next;
++
+ }
++
+ }
+ catch (Throwable e)
+ {
++
++ System.out.println(" " + e + " thrown while loading gnu.io.RXTXCommDriver");
++
+ System.err.println(e + " thrown while loading " + "gnu.io.RXTXCommDriver");
++
+ System.err.flush();
++
+ }
+ }
++
++ if(debug) System.out.println("CommPortIdentifier:getPortIdentifiers:Exit");
++
+ return new CommPortEnumerator();
++
++
++
+ }
+-/*------------------------------------------------------------------------------
+- getPortType()
+- accept:
+- perform:
+- return:
+- exceptions:
+- comments:
+-------------------------------------------------------------------------------*/
++
+ public int getPortType()
+ {
+- if(debug) System.out.println("CommPortIdentifier:getPortType()");
++ if(debug) System.out.println("CommPortIdentifier:getPortType(" + PortType + ")");
++
+ return( PortType );
++
++
+ }
+-/*------------------------------------------------------------------------------
+- isCurrentlyOwned()
+- accept:
+- perform:
+- return:
+- exceptions:
+- comments:
+-------------------------------------------------------------------------------*/
++
+ public synchronized boolean isCurrentlyOwned()
+ {
+ if(debug) System.out.println("CommPortIdentifier:isCurrentlyOwned()");
++
+ return(!Available);
++
++
+ }
+-/*------------------------------------------------------------------------------
+- open()
+- accept:
+- perform:
+- return:
+- exceptions:
+- comments:
+-------------------------------------------------------------------------------*/
++
+ public synchronized CommPort open(FileDescriptor f) throws UnsupportedCommOperationException
+ {
+ if(debug) System.out.println("CommPortIdentifier:open(FileDescriptor)");
++
+ throw new UnsupportedCommOperationException();
++
+ }
+ private native String native_psmisc_report_owner(String PortName);
+
+-/*------------------------------------------------------------------------------
+- open()
+- accept: application making the call and milliseconds to block
+- during open.
+- perform: open the port if possible
+- return: CommPort if successful
+- exceptions: PortInUseException if in use.
+- comments:
+-------------------------------------------------------------------------------*/
++ /**
++ * open()
++ * accept: application making the call and milliseconds to block
++ * during open.
++ * perform: open the port if possible
++ * return: CommPort if successful
++ * exceptions: PortInUseException if in use.
++ * comments:
++ **/
++
+ private boolean HideOwnerEvents;
+
+- public CommPort open(String TheOwner, int i)
+- throws gnu.io.PortInUseException
++ public CommPort open(
++ String TheOwner,
++ int i
++ )
++ throws gnu.io.PortInUseException
+ {
+- if(debug) System.out.println("CommPortIdentifier:open("+TheOwner + ", " +i+")");
++ if(debug) System.out.println("CommPortIdentifier:open(" + TheOwner + ", " + i + ")");
++
+ boolean isAvailable;
+- synchronized(this) {
++
++ synchronized(this)
++ {
+ isAvailable = this.Available;
++
+ if (isAvailable) {
+- //assume ownership inside the synchronized block
++
++ /**
++ * assume ownership inside the synchronized block
++ * ? Of you and me !
++ **/
++
+ this.Available = false;
+ this.Owner = TheOwner;
+ }
+ }
++
+ if (!isAvailable)
+ {
+ long waitTimeEnd = System.currentTimeMillis() + i;
+- //fire the ownership event outside the synchronized block
+- fireOwnershipEvent(CommPortOwnershipListener.PORT_OWNERSHIP_REQUESTED);
++
++ /**
++ * Fire the ownership event outside the synchronized block
++ **/
++
++ fireOwnershipEvent
++ (
++ CommPortOwnershipListener.PORT_OWNERSHIP_REQUESTED
++ );
++
+ long waitTimeCurr;
+- synchronized(this) {
+- while(!Available && (waitTimeCurr=System.currentTimeMillis()) < waitTimeEnd) {
++
++ synchronized(this)
++ {
++
++ while
++ (
++ !Available &&
++ (
++ waitTimeCurr=System.currentTimeMillis()
++ ) < waitTimeEnd
++ )
++ {
+ try
+ {
+ wait(waitTimeEnd - waitTimeCurr);
+@@ -439,91 +579,134 @@
+ break;
+ }
+ }
++
+ isAvailable = this.Available;
++
+ if (isAvailable) {
+- //assume ownership inside the synchronized block
++ /**
++ * Assume ownership inside the synchronized block
++ * ? of you an me !
++ **/
+ this.Available = false;
+ this.Owner = TheOwner;
+ }
+ }
+ }
++
+ if (!isAvailable)
+ {
+ throw new gnu.io.PortInUseException(getCurrentOwner());
+ }
+- //At this point, the CommPortIdentifier is owned by us.
+- try {
++
++ /**
++ * At this point, the CommPortIdentifier is owned by us.
++ **/
++
++ try
++ {
+ if(commport == null)
+ {
+- commport = RXTXDriver.getCommPort(PortName,PortType);
++ commport = RXTXDriver.getCommPort(
++ PortName,
++ PortType
++ );
+ }
++
+ if(commport != null)
+ {
+- fireOwnershipEvent(CommPortOwnershipListener.PORT_OWNED);
++ fireOwnershipEvent(
++ CommPortOwnershipListener.PORT_OWNED
++ );
++
+ return commport;
+ }
+ else
+ {
+- throw new gnu.io.PortInUseException(
+- native_psmisc_report_owner(PortName));
++ throw new gnu.io.PortInUseException
++ (
++ native_psmisc_report_owner(PortName)
++ );
+ }
+- } finally {
++ }
++ finally
++ {
+ if(commport == null) {
+- //something went wrong reserving the commport -> unown the port
++
++ /**
++ * something went wrong reserving the commport
++ * -> release ownership (internal) of the port
++ **/
++
+ synchronized(this) {
++
+ this.Available = true;
+ this.Owner = null;
++
+ }
+ }
++ if(debug) System.out.println("CommPortIdentifier:open:Exit");
+ }
+- }
+-/*------------------------------------------------------------------------------
+- removePortOwnership()
+- accept:
+- perform:
+- return:
+- exceptions:
+- comments:
+-------------------------------------------------------------------------------*/
++
++
++
++ }
++
+ public void removePortOwnershipListener(CommPortOwnershipListener c)
+ {
+ if(debug) System.out.println("CommPortIdentifier:removePortOwnershipListener()");
+- /* why is this called twice? */
+- if(ownershipListener != null)
++
++ /**
++ * why is this called twice?
++ **/
++
++ if(ownershipListener != null)
++ {
++ if(debug) System.out.println(" I was owned!");
+ ownershipListener.removeElement(c);
++ }
++
++ if(debug) System.out.println("CommPortIdentifier:removePortOwnershipListener()");
+ }
+
+-/*------------------------------------------------------------------------------
+- internalClosePort()
+- accept: None
+- perform: clean up the Ownership information and send the event
+- return: None
+- exceptions: None
+- comments: None
+-------------------------------------------------------------------------------*/
++ /**
++ * internalClosePort()
++ * accept: None
++ * perform: clean up the Ownership information and send the event
++ * return:
++ * exceptions:
++ * comments:
++ **/
++
+ void internalClosePort()
+ {
++
++ if(debug) System.out.println("CommPortIdentifier:internalClosePort()");
++
+ synchronized(this) {
+- if(debug) System.out.println("CommPortIdentifier:internalClosePort()");
++
+ Owner = null;
+ Available = true;
+ commport = null;
+- /* this tosses null pointer?? */
++
++ /**
++ * this tosses null pointer??
++ **/
++ if(debug) System.out.println(" Notifying all...");
++
+ notifyAll();
++
+ }
++
+ fireOwnershipEvent(CommPortOwnershipListener.PORT_UNOWNED);
++
++ if(debug) System.out.println("CommPortIdentifier:internalClosePort:Exit");
+ }
+-/*------------------------------------------------------------------------------
+- fireOwnershipEvent()
+- accept:
+- perform:
+- return:
+- exceptions:
+- comments:
+-------------------------------------------------------------------------------*/
++
+ void fireOwnershipEvent(int eventType)
+ {
++
+ if(debug) System.out.println("CommPortIdentifier:fireOwnershipEvent( " + eventType + " )");
++
+ if (ownershipListener != null)
+ {
+ CommPortOwnershipListener c;
+@@ -532,6 +715,10 @@
+ c.ownershipChange(eventType))
+ c = (CommPortOwnershipListener) e.nextElement();
+ }
++
++ if(debug) System.out.println("CommPortIdentifier:fireOwnershipEvent:Exit");
+ }
++
++
+ }
+