CANbus Driver Release Notes
Andrew Johnson
This document describes the changes which have been made to my vxWorks/EPICS
CANbus driver as it has evolved since first release. The earliest version
appears at the bottom, with more recent releases above it. These release notes
first appeared in version 1.1b, but I have attempted to describe the
differences in previous releases where I can remember or discover what they
were by examining the source code. After version 1.1c the IPAC driver was
split off as a separate package (although this is still required for use by the
Tip810 driver), hence the IPAC related comments up to and including this
release.
Version 2.1
Incorporated changes from Carl Lionberger that move the receive message
callbacks into a fairly high priority task, rather than doing them in the ISR
itself. This allows a higher peak message rate to be handled, although the
average rate should be essentially unchanged.
Added:
- ISR funnels incoming CAN packets into a Message queue rather than run the
canMessage callbacks directly. NB: The canSignal callbacks
are still run from the ISR so must be interrupt-safe.
Version 2.0
First version since I joined APS, now restructured in an EPICS R3.13.1
<supporttop> application. drvIpac module and carrier drivers were split
off into a separate application directory.
Bug fixed:
- Gcc compilation warnings attended to.
Version 1.1c
Final release from the RGO. CVS repository transferred to APS.
Bugs fixed, courtesy Carl Lionberger at LBL:
- Reinstated Bus Errors causing records to go into alarm state with an
INVALID_ALARM severity. A Bus Off transition is very rarely if ever
seen, even pulling the cable only causes a Bus Error.
Version 1.1b
Added:
- Carl Lionberger's code to canIoParse which allows message IDs to
be calculated as the sum of several numbers. This makes it possible to use
templates and text substitution to generate IDs for many device types.
- These release notes.
Bugs fixed:
- Changed the alarm severities for Bus Off events and Timeouts to use the
EPICS standard INVALID_ALARM severity. A Bus Error now does not affect record
alarm state or severities at all, but now all Bus Status transitions cause a
message to be logged giving the bus name and the new status.
- ao, bo, mbbo and mbboDirect records which have a constant value in their
DOL field will now initialise properly to this value - the DOL values copied
into the VAL field by the record initialisation routines were being overwritten
as the CAN device support init_record routine was returning
OK => 0 => CONVERT, rather than the correct
DO_NOT_CONVERT => 2.
Version 1.1a
Bugs fixed:
- Removed a change introduced in V1.1 to when input records are processed on
the receipt of interrupts. Carl Lionberger discovered this change had been a
mistake...
- VIPC616 carrier driver address parameter handling fixed, changes courtesy
of Christoper Estes.
Version 1.1
Added:
- devBoTip810 device support to allow CANbus status bits to be tested from
within the EPICS database.
- Support files for EPICS R3.13 (.dbd, LIBOBJS). Not tested though.
- canMsgDelete routine which allows message callbacks to be
unregistered.
- canBusReset, canBusStop and canBusRestart
routines to allow resetting and halting bus operations.
- Usage instructions output by canTest if no bus name given.
- IPAC Prom structure declared volatile to prevent gcc optimiser from
generating long word accesses to it. Only affected some carrier boards.
- Separate support for both the GreenSpring VIPC610 and VIPC610-01 carrier
boards, which have different interrupt levels for the different slot
interrupts. From now on the correct carrier table vipc610 or
vipc610_01 should be used.
- Support for the the GreenSpring VIPC616 carrier board, table name
vipc616.
- HTML Documentation distributed in the release.
Bugs fixed:
- Significantly reduced the number of callbacks used in the event of a Bus
Error or Bus Off event, by only using one per device support type rather than
one per record. This solves the large number of "callback ring buffer full"
messages which would occur whenever a CANbus with a lot of I/O on it was
disconnected.
- RTR messages are now sent with length 8 rather than 0 as some CAN devices
use the RTR length field to indicate how long a message to return.
- Tip810 Interrupt was not enabled using correct drvIpac call and would not
work on some carrier boards.
- A Bus-Off event sometimes caused all further transmissions to be disabled
forever because transmit semaphore was not released when resetting the error.
Version 1.0
First full release.