Serialio

SerialPort Version Changelog

Changes for version 9.6-9.7

MacOS M1 Apple Silicon support

Windows SerGetPortListReg method gets ports from the registry for devices not showing in the Windows Device Manager.

Changes for version 9.5-9.6

Windows Server 2022

Changes for version 9.3-9.5

Support Windows 11

Changes for version 9.2-9.3

Support Windows Server 2019

Changes for version 9.1-9.2

Linux x86 serGetPortList support, aarch64 architecture, ttyUSB 

Changes for version 9.0-9.1

Support Windows Server 2016

Changes for version 8.9-9.0

Support Raspberry Pi-3 (LuxArm 32-bit)
Support ODROID (in RPi-3 package – LuxArm 64-bit)

Changes for version 8.8-8.9

Support Windows 10

Changes for version 8.7-8.8

Windows Server 2012 R2

Changes for version 8.6-8.7

Support Windows 8.1

Changes for version 8.5-8.6

Support device type: Manufacturer: Ingenico – Description: Ingenico iSC350 Comm Port

Support device type: Manufacture: Conexant – Description: Conexant HDA D330 MDC V.92 Modem

Changes for version 8.4-8.5

Updated SerialPortLocal.java to load on Windows Server 2012

“stripCOM” method has been updated with regular expressions provided by customer which found NULL-pointer issue when port name has more letters than just COM. “getPortList()” also updated to initialize pList variable with more accurate information

Changes for version 8.2-8.4

Updated SerialPortLocal.java to load on Windows 8

Updated Windows Native Library DLL to show ports not listed by RegOpenKeyEx/RegEnumValue

Changes for version 7.9-8.2

Updated SerialPortLocal.java to load both Applets and Applications supporting new Windows 7 security update.

Support for Windows 2008 Server R2

SerialPortLocal.java tweaks for running Applets on Windows 7 (due to Windows 7 security changes)

Pre-built 32-bit and 64-bit libs for CentOS

JavaTermSwing app updated to display COM port details

JavaTermSwing app updated to support WiSnap discovery

Changes for version 7.8-7.9

Windows 7 support.

JavaTerm sioErrorEvent method updated to catch USB_RS-232 adapter pulled when JavaTerm running on port removed.

Changes for version 7.7-7.8

Added pre-built 64-bit shared library for OS X JDK 1.6 (aka Java 6) for 64-bit Mac

Support for Windows 2008 Server

Changes for version 7.6-7.7

Added pre-build 64-bit DLL for Windows Vista and Windows XP 64

Updated Mac build for supNoIndexBitRate=true

Fixed javax.comm.SerialPort for glitched caused when bitrates support for 50 and 75 added

javax.comm.SerialPort support for rates 460800, 921600

Changes for version 7.4-7.5

Fixed SerialPortLocal.GetPortList to reflect changes in when ports are added & removed (e.g. add/remove USB to RS-232 adaptor, Bluetooth RS-232 module, etc)

Include example code ReadScanTestLCAS.java showing how to use Java SerialPort to read scans from LaserChamap (aka Flic, aka Rov) scanner in real-time mode using sequence number acknowledgement to insure reliable scan data transfer.

Include example code BlueSnapM4GetRemAdr.java showing how to use Java SerialPort to interface with BlueSnap USB (model 4 aka M4) to read the Bluetooth address of the remote device the BlueSnap will connect with when it receives connect command.

javax.comm.SerialPort supports bitrates of 50 and 75

Changes for version 7.3-7.4

Support for Windows Vista

SerialPortLocal.GetPortList now provides numeric sorted list instead alpha sorted list for Windows

Changes for version 7.2-7.3

Support for Apple OS X Intel (Universal Binary)

SerialPortLocal.GetPortList now provides sorted list instead of list in platform order.

Added support for CPU architectures armv5l & armv5l

Changed Maximum bit rate support to 921600 on Windows Desktop/Server platform

Updated JavaTerm contains feature to easily define and send arbitrary commands.

Changes for version 7.1-7.2

Support for Windows 2003.

Added ByteTokenizer.setOffset and ByteTokenizer.setParseEnd methods to allow parsing of a partial buffer.

Functionality changed in native library on Windows and Windows CE (aka Pocket PC) so that current DTR & RTS settings are used. Prior versions reset these lines during SerialPortLocal.Configure. This change was made to support security sensitive modem implementations where setting modem S-Register to ignore short changes in DTR was not allowed.

Settings.java display fix (JavaTerm example).

Changes for version 7.0-7.1

Added new method SnoopInputStream.setEndTokenSnoop that allows specification of a single token to be used to fire events. All data received up to the specified token is delivered in the event. This was requrested by developers wanting to use SnoopInputStream to fire events based on a single token in the data stream (e.g. CR, LF, CRLF, etc).

OS X now supports for setRTS, sigDSR, sigCD for use with serial ports on Apple Xserve boxes, and USB-Serial Adaptors.

Fixed setTimeoutRx flag on OS X.

SerInputStream fixed for issue introduced with BufferedReader enhancement.

SerInputStream.java added to WSDD folder “SerialioMIDP\src\Serialio”.

JTermLite SWT version no longer closePort() in the shellDeactivated() method to allow functionality with Bluetooth devices.

Added FormatData object that Formats byte data as a hex string, and provides control for spaces between digits, and digits per line.

Support for Zaurus SL-6000. The Zaurus SL-6000 comes with Sun J2ME CVM. (SL-5×00 series come with Insignia Jeode)

New SerialPort library IPK for Zaurus compatible with J2ME that comes on SL-6000.

New JavaTerm IPK for Zaurus compatible with J2ME that comes on SL-6000.

Version 7.1 Release Note
Due to changes for SL-6000 support, note that the following changes should be made to to JavaTerm (Settings.java) when running JavaTerm on a screen larger than 640×480 (the first two lines are existing code, the 2nd two are changed code)

Change these lines
bNamePick.setBounds(getInsets().left + 65,getInsets().top + 12,30,28);
lbPortName.setBounds(getInsets().left + 12,getInsets().top + 12,35,28);

To these lines to look like this
bNamePick.setBounds(getInsets().left + 50,getInsets().top + 12,30,28);
lbPortName.setBounds(getInsets().left + 12,getInsets().top + 12,35,28);

Changes for version 7.0
(Version 7 marks the end of the 7th year of market leadership for SerialPort)

Support for J2ME using IBM J9 (WebSphere Micro Environment – WME) MIDP 1.0 on PalmOS 5.2

WSDD-WME Project file for JTermP MIDlet. Runs on Palm OS 5.2 with WME installed.

WSDD-WME Project file for SerialioMIDP. The MIDP build of the SerialPort API.

JTermLite SWT example code. Built and tested on J9 (WME) on Pocket PC.

SerialPortLocal reports ‘reserved’ printers on Windows. For example: printers are ‘reserved’ when selected by a print driver even when the printer is not active. Windows improperly allows a reserved com port to be opened, but it can’t be configured.

javax.comm.SerialPort InputStream changed to allow native blocking (SerInputStream.avoidNativeBlock=false) to work with BufferedReader.

Added sizing features for JavaTerm when running on a PDA.

Native sources for Linux X86 and ARM updated to report msgs in addition to numbers for errno’s of 2,19,13,16.

JavaTerm reports port failure msg to send box in (not just title bar) so msgs can be more easily determined running on a PDA.

Added check for port open during SerialPortLocal.configure to prevent native errors when wrapper classes fail to open the port before configuration.

Added German locale messages for modem class.

Modified modem class to use current locale of machine as default instead of en_US.

Support for Zaurus SL-760 CPU architecture “armv5tel”

Support for Pocket PC (aka Windows CE) CPU architecture “XSCALE”

FreeBSD x86 shared library recompiled to work with FreeBSD 4.8 and Java 1.4.1

SnoopInputStream enhanced to support single byte tokens where end of first token beginning is equivalent to the token end. For example consider the following where the token values are between the () characters BegTok =(dt=”) endTok=(“). This is helpful when using SnoopInputStream to Parse XML.

When changing port parameters using the javax.comm.SerialPort implementation, AND not using RTSCTS flow control, the ‘softRTS’ flag (the hardware does not provide read of this bit) was not processed properly so the line was not reset after changing port parameters. This has been fixed.

Added sigDSR to ModemInterfaceProvider.

SerOutputStream.setWriteTimeout() now calls SerialPortLocal.setTimeoutTx(tmo) . On windows, when a device was not hooked up, and a write request was made with hardware flow control enabled, a thread might block indefinitely without this call.

Added isSupported method to SerialPort interface.

New methods setInstanceLock, getInstanceLock added to SerialPortLocal.java. The InstanceLock methods are valuable for preventing multiple program instances on devices such as PDAs. The main PDA family to benefit from this feature is the Pocket PC, Smart Phone, Windows CE family. Other PDAs like the Zaurus that using Linux / Qtopia, have a built-in feature for controlling this (as well as icons on the PDA taskbar).

New methods for SerOutputStream.setTxBlockSize/getTxBlockSize. These allow setting of the transmit block size used to send data to the OS drivers. Some platforms don’t support transmit timeouts, and therefore may not properly very large transmit buffers. These methods provide the ability to send the data in more appropriate block sizes to match the capabilities of the OS.

SerialPortLocal now provides isSupported(“MarkSpaceParity”) to determine when the platform supports mark/space parity.

SerialPortLocal now throws IOException(“Unsupported Mark/Space parity”) if the platform does not support requested parity.

Added new method to static int ByteTokenizer.numberOfTokens(byte[] line, byte sep).

Fixed ByteTokenizer declaration to include public (this fixed issues encounted with some MIDP Java environments).

ByteTokenizer.numberOfTokens, now returns 0 for zero length buffers.

The LookForListener, SnoopListener, SnoopTokenListener interfaces in the MIDP implementation do not extend EventListener. The extension was never used, so this will not affect existing code. The extension was left in tact in the non-MIDP sources to prevent the need to rebuild existing Java projects.

Changes 6.0 – 6.1

New method SerialPortLocal.getPowerMode provided to detect the state of Compact flash slot power mode. This is valuable because CF cards go into a suspend state when the computer/PDA is turned ‘off’. For power saving they may not go active when computer/PDA is turned on. (Zaurus SL-5500/SL-5000D) New method SerialPortLocal.getResumeState provided to detect the power state of the computer/PDA. This method can be used in conjunction with SerialPortLocal.get/setPowerMode to enable a CF serial card after a ‘nap’ of the computer/PDA. (Zaurus SL-5500/SL-5000D)

Added support for T-Mobile XDA devices.New method SerialPortLocal.getStatusAPM provided to check on battery power for devices supporting this feature (Linux x86, Zaurus SL-5500/SL-5000D, Win32, WinCE)

New SerInputStream.setNativeBlock(boolean onOff) method. When this control is enabled, reads will never enter native mode until the number of bytes available to read is >= the set threshold. This is useful to prevent problems with buggy OS and 3rd party drivers. For example we have seen USB-to-Serial converters which have drivers that don’t properly implement blocking, and when read is call when bytes are not available, the read will NEVER return until a byte is available on the port.

Enhanced SnoopInputStream to provide mutually exclusive pattern matching.

Added SerOutputStream.setWriteTimeout() method to provide write timeout.

Added SerModem class that uses SerOutputStream.setWriteTimeout() enhancement. This is useful for detecting ports where modems that are not connected.

Provided new GET_CONNECT requestor to the modem class.

JavaTerm shows non-printable characters as <decimal_digit> Tool menu was added to JavaTerm. Battery Status feature added to Tool menu. This uses the new getStatusAPM method to report battery and external power status.

javax.comm.SerialPort.close() no longer uses interrupt(). This is for compatibility with SWT (note: due to SWT issues, sources must be compiled with JDK 1.1.8 for this to work)SerLooker did not effectively catch some repeating pattern types, this was fixed.

New interface ErrorStatusHandler, and new method SerialPortLocal.setErrorStatusHandler provide ability to redirect exceptions due to ‘unexpected’ events such as random removal of a CF card while software is using the card.

New class ExTimeout simplies catching of timeout events.

New class SerModem extends Modem class and uses SerOutputStream / SerInputStream which are more robust than OutputStream / InputStream. For example SerOutputStream.setWriteTimeout allows setting of a transmit timeout.

Windows Desktop Native lib enhanced to support 460,800 bps (this is useful when working with BlueTooth USB adaptors) JavaTerm enhanced for with options for 230,400 and 460,800 bps. SerialConfig enhanced for with option 460,800 bps.JavaTerm settings dialog fixup for display on Zaurus SL-5600. 

Changes 5.9 – 6.0

JavaTerm enhancements: for PDA display, and for input CR filter.

Mac native code enhancement to work around a bug in Mac OSX when using 7 bit data.

Linux x86 and Linux on Zaurus SL-5500 translate native code error # 19 (from errno.h) to “No such device”.

Linux x86 and Linux on Zaurus SL-5500 translate native code error # 13 (from errno.h) to “Permission denied”.

MARK and SPACE parity for Linux x86.

MARK and SPACE parity for Zaurus SL-5500.

Support for Applets under Linux x86 using Netscape 7 and the Java Plug-in.

Changes 5.8 – 5.9

Performance enhancements to SnoopInputStream token snooping feature.

ByteTokenizer checks for invalid length.

GPSGaugeLite fixed to work with NMEA streams that don’t supply ‘compass’ data ($GPRMC field 10 & 11).

New method SerialPortLocal.getResumeState() allows detection of a suspend/resume cycle of a PDA. This is useful since external serial cards commonly suspend when the PDA suspends. This requires a CF slot activation followed by a port reset to resume. Currently this method is supported only on Sharp Zaurus.

Changes 5.7 – 5.8

SerOutputStream now uses flush() instead of txDrain(). Since flush() allows control of txDrain() use via setWriteDrain(), this provides a workaround for an apparent bug in Microsoft driver code where txDrain can sometimes fail for no apparent reason.

Modified synchronization in SerialPortLocal.open() to prevent port cross-talk under certain conditions on Windows 2000 and Windows XP.

SerInputStream.read(byte buf[], int off, int len) is checked for invalid off/len requests, and will throw new IOException(“buf[] will not accomidate the off/len request”) if it sees one.

New methods SerialPortLocal.getPowerMode() and setPowerMode() providing developer control of serial port power features for serial devices that support power saving modes. For example with PCMCIA and Compact Flash (CF) serial cards.

Changes 5.6 – 5.7

New interface SnoopTokenListener for SnoopInputStream snooping.

SnoopInputStream enhanced to with the addTokenSnoop method and associated logic. This powerful, and easy to use new method allows snoop events based on tokenized data. Using addTokenSnoop you can avoid coding associated with parsing an input stream. It is especially useful when working with input streams from devices such as GPS receivers.

New ByteTokenizer class that works with null tokens (Java’s tokenizer skips null tokens)

SerialPortLocal has new getBuildNum that can be used for numeric checking.

GPSGauge example GPS reader application sources and project files now included with Professional and Enterprise packages.

Changes 5.5 – 5.6

Change JTermRcvTask.java to keep JDK 1.4.0 enhancement (addition of StringBuffer.append(StringBuffer)) to not cause crash when run on Jeode on Sharp Zaurus if compiled on JDK 1.4.0 and run on the Zaurus.

Modified Comm API implementation so that port could be opened in the same thread context as the PORT_UNOWNED event propogated from CommPortIdentifier.closeNotifcation().

Resolved an issue occuring under a certain condition, where the reported port name was not the actual port name when an open failed.

Fixed issue to deal with JDK 1.4.0 where in some cases when running as an Applet, the static block may not be executed causing the error “SerialPortLocal: Attempt to load: null”.

Changes 5.4 – 5.5

Support for Sharp SL-5500 Zaurus (and SL-5000D).

Native code for Unix modified so that flock is no longer used on a port. This is a result of much feedback on Unix platforms that indicate the lock (which is used to mark the port “in use”) causes more problems than it solves. The only native library built with this code change in this release is the Linux StrongARM library. All native library versions with a major number >= 4 will not use file locking.

JavaTerm screens (and some messaging) enhanced to accommodate the 240 x 320 display of Zaurus.

New examples for read timeout. Two additional examples provided one using the SerialPort API and the javax.comm.SerialPort, one using only javax.comm.SerialPort. These are in addition to the original one using the solely the SerialPort API.

Created a SerialioBean.jar file for inclusion into some GUI builders that like to see beans. This bean is not required in these environments, however it allows some of them to put the classes into their library. This file contains the same contents of Serialio.jar and what used to be SerialPortLocal.jar.

Changed the default transmit buffer size to 4096 in SerialConfig.java. Unix platforms typically only provide buffer size changes via a rebuild of the kernel, and since most newer builds have a default of 4096, this provides a better default match.

Changes 5.3 – 5.4

Mac OSX. Automatic port discovery finds all port names, preventing a “Port not valid” error, and eliminating the need to explicitly call SerialPortLocal.getPortList(). This bug does not affect OS 8/9.

JavaTerm option to send file contents now supports cancel and continuous sending.

SerialPortLocal.reset now checks to see if the port is open. Without this check, when a reset is called on a port that is not open, it could generate a JNI panic under JDK 1.4.         

JTermLite example code closes port on the ‘WindowClosing’ event. This should prevent the port being left open when running on Jeode since the Jeode VM does not call finalize the same as Sun’s pJava implementation.

Support for Pocket PC 2002 on ARM, MIPS, SH3, SH4.

Changes 5.2 – 5.3

Support for Windows XP.

Changes 5.1 – 5.2

Support for Mac OSX 10.1

Mac OS8/9. Better handling of Unicode port names in multi-byte languages, such as Japanese.

Mac OS8/9. Fixed a bug that caused data corruption when the number of received bytes exceeded the size of the receive buffer.

Added ‘ReadAsHex’ option to waitFor dialog of JavaTerm.

SerLooker has new method setSaveDataBeforeMatch allowing retreival of data upto the match pattern when a match occurs.

JavaTerm now has a “BS Filter” option allowing terminal like backspace handling.

JavaTerm WaitFor feature now allows input of HEX data.

SerialPortLocal.featureSetup() now uses “HP-UX” instead of “HP/UX”

SerialConfig.setHandshake() now includes “Windows 2000”

Fix for change in JDK 1.3.1 that caused OS name for Windows Me to change from Windows 98 to Windows Me

Removed deprecated method SerialPort.putData(byte[] data, int dLen). Deprecation is age is 3+ years. Use putData(dataBuf, off, len) instead.

Added RING detection to modem class, and modified SimpleModem example to demonstrate WAIT_RING feature.

RxTimeout not more accurate when executed from java code (when javaGetDataTimeout==true)

Provided system properties (JSP_OSNAME, JSP_OSARCH) to allow osName & osArch to be forced. (Java & OS vendors can’t seem to make up their mind with regard to the name of these variables, this allows them to be forced so that the whims of these vendors won’t required a recompile of the JAR)

SerOutputStream now has a drain feature. This feature is enabled by default, and is controlled by the SerOutputStream.setWriteDrain(boolean) method. When enabled, a write on the output stream will perform a txDrain before it returns. This solves issues on some OSes when writing blocks of data larger than the txBuffer size output.

Added switch for HP/UX to include osArch.equals(“PA_RISC”) as well as osArch.equals(“PA-RISC”). Apparently this was a change with JDK 1.2.

Added setDialCommand method to modem class. This method can be used to change the dial command from the default ATDT e.g. to pulse dial you could use setDialCommand(ATDP);

Changes Previous to 5.2 Consult the manufacture