GE Fanuc Embedded Systems Octal Serial Driver Release Notes
Software by Peregrine McGehee
Rewritten and maintained by Andrew Johnson
This document describes changes made to Peregrine McGehee's vxWorks driver
for the GE Fanuc Embedded Systems Octal RS232/RS422/RS485 IndustryPack modules
since this driver was merged into the unbundled EPICS ipac support area. Version
numbers refer to the release of the ipac support software as a whole. The
earliest version appears at the bottom, with more recent releases above
it.
Version 2.14
Bugs Fixed:
- tyGSOctalConfig() was not checking that the device returned by iosDevFind()
was an exact match to the name given. Now it does.
Changed:
- Define _VSB_CONFIG_FILE to prevent VxWorks 6.x compiler warning.
Version 2.13
Bugs Fixed:
- Fixed problems using this driver on MVME3100 and 6100 boards by changing the
ISR. It now only processes one channel per interrupt, and when called it starts
scanning for work to be done from the next channel in turn.
Version 2.12
Bugs Fixed:
- A high interrupt rate when many channels are in use could result in missing
characters. Some additional interrupt locking has been added to prevent this
problem.
- CPUs with longer or more complex write pipelines might not have flushed the
last write cycle from the interrupt service routine. A better flush location is
now used.
Added:
- Counters for read, write and interrupt events. The counter values are
reported by the tyGSOctalReport() routine.
Changed:
- Warning and error messages from configuration command routines are now
displayed using printf() instead of logMsg()
Version 2.9
Added:
- Eric Norum added RTEMS support for the tyGSOctal module, based on the
vxWorks driver code.
Changed:
- Added CLOCAL to the initial port settings; omitting it turns on hardware
flow control (actually this control bit should be CRTSCTS but vxWorks doesn't
actually define that in sioLib.h and the WRS drivers use CLOCAL instead), but
ports are supposed to default to no flow control. ASYN uses the ioctl
SIO_HW_OPTS_GET to query the port settings, and thus found the problem
— presumably everybody else who uses tyGSOctal has been explicitly setting
up each port.
- Updated source code comments to match the API changes in recent
versions.
- ioctl() now returns an ERROR status if an unsupported baud rate is
requested; previously it would silently set the rate to 9600 baud instead. More
error conditions now set errno where appropriate as well.
Version 2.8
Added:
- New device configuration routine tyGSOctalDevCreateAll() which
looks at all the ports on the indicated module and initializes any which have
not yet been initialized. The device name is generated by appending the port
number digit to the base name string given in the first argument. The remaining
parameters are the tyGS module number and the sizes of the read and write
buffers respectively.
Changed:
- Ron Sluiter changed the type of the module identifier from an integer that
is allocated internally to a string which is provided in the call to
tyGSOctalModuleInit. It is easier to read and understand a startup script if
you can use a name like this rather than just a number. The example startup
script in the documentation has been changed to
match this, and to use the new ipacLatestCarrier routine to get the drvIpac
carrier number.
- The interrupt vector is now written to the vector register using
vxMemProbe(), which will detect any VME Bus Error which a PowerPC CPU
might miss if the carrier board has been incorrectly configured.
Version 2.7
Added:
- Support for the ioctls SIO_HW_OPTS_GET and SIO_BAUD_GET
(defined in the vxWorks header file sioLib.h) to provide readback of the
current settings.
Changed:
- Hardware handshaking now works, thanks to much effort put in by Ron Sluiter
who discovered that it didn't and who spent time testing my fixes and helping
me to understand the chip documentation properly.
Version 2.6
Added:
- Support for the ioctls SIO_HW_OPTS_SET and SIO_BAUD_SET
(defined in the vxWorks header file sioLib.h).
- EPICS iocsh command tables and a registrar routine.
- The database definition file tyGSOctal.dbd.
Changed:
- Minor internal surgery/refactoring, including removal of unnecessarily
exported routines from the API.
- The type returned from tyGSOctalDevCreate() is now the char* name argument.
The first argument to tyGSOctalConfig() is now also the char* name for the
device. This change should be backwards compatible for all IOCs where the
initialization was being performed in the vxWorks startup script, but now
allows a slightly different set of initialization commands to be used from
either the vxWorks shell or the EPICS iocsh.
- This code now compiles to a library rather than an object file so the
method of linking it into an IOC application now matches other EPICS R3.14.x
support applications.
Version 2.5
Added:
- Support for the ioctl FIOBAUDRATE, needed for MPF.
- Mark the IP slot active at initialization time, and inactive again in the
reboot hook routine.
Bugs Fixed:
- Modified the reboot hook routine to fix a race condition.
Version 2.3
Changed:
- Modified documentation to indicate non-support of the new IP-OctalPlus
module family, which uses different UARTS.
Added:
- Burkhard W. Kolb's RebootHook routine to turn off interrupts.
Version 2.1
Updated due to changes made to drvIpac, and also actually tried it out for
myself - got some interrupts but I haven't done a full test.
Changed:
- Use ipmIntConnect() to attach the ISR.
Bugs fixed:
- Now works with the ipmv162 carrier driver - the interrupt vector register
was being accessed at an offset from the I/O space, which works on GreenSpring
carriers but doesn't meet the IPAC specification. The register is correctly
accessed in the IP memory space, which means that this must be mapped in.
Version 2.0
First version containing this driver, ipac support is now structured as an
EPICS R3.13.1 <supporttop> application.
Added:
- This driver software and these release notes.
Bugs fixed:
- Gcc compilation warnings attended to.