Difference between revisions of "Future Development Ideas"

From EPICSWIKI
Line 5: Line 5:




== 3.14 Changes in progress ==
== 3.14 Changes completed ==


The following modifications are currently under way in the 3.14 branch.  They will probably be included in a R3.14.9 release, timescale TBD.
The following modifications are included in a R3.14.9 release.


* Add epicsUnitTest routines to libCom which generate output in the Test Anything Protocol (TAP) format.
* Add epicsUnitTest routines to libCom which generate output in the Test Anything Protocol (TAP) format.
Line 14: Line 14:
* Enhancements to the Access Security parser to improve diagnostics.
* Enhancements to the Access Security parser to improve diagnostics.
* Support for 64-bit CPUs (solaris-sparc64, linux-x86_64).
* Support for 64-bit CPUs (solaris-sparc64, linux-x86_64).
* Issues with multiple threaded CA clients
* Issues with multiple threaded CA clients.
 
* Fix so the PV Gateway supports the alarm handler.


== 3.14 Changes needed "soon" ==
== 3.14 Changes needed "soon" ==


* Full GDD support for alarm acknowledgements, or whatever changes the PV Gateway actually needs to properly support the alarm handler.
* Jeff: Enhance CALC to allow names to be included in the CALC expression.
 
Jeff: Enhance CALC to allow names to be included in the CALC expression.
 


== 3.15 Cleanup ==
== 3.15 Cleanup ==
Line 35: Line 32:
** Use this dir instead of the configure/O.arch directories so that a <tt>make clean</tt> doesn't remove them...
** Use this dir instead of the configure/O.arch directories so that a <tt>make clean</tt> doesn't remove them...
* Change script installation rules (see ctlsys)
* Change script installation rules (see ctlsys)
* Version numbering - switch from alpha/beta to release candidates RC1 etc. which probably needs some change to <tt>CONFIG_BASE_VERSION</tt>


Ben's Async dbGetLinkCallback: Defer to an upgrade to the record support interface, later in the process.  Or maybe include a dbGetLinkCallback() with the private callback routine, and require new record types to use this. Talk to synApps about this (Tim). 3.15
Ben's Async dbGetLinkCallback: Defer to an upgrade to the record support interface, later in the process.  Or maybe include a dbGetLinkCallback() with the private callback routine, and require new record types to use this. Talk to synApps about this (Tim).


Jeff: Multiple Master problem (non-EPICS changes to output values in a PLC or similar device). This could be resolved adding a new routine to the RSET that the device support calls back when it has a new raw ouptut value to back-propagate to the VAL field.  Currently done by setting PACT and calling the record's process routine to use its second-half processing only.  Again, talk to Tim about this.
Jeff: Multiple Master problem (non-EPICS changes to output values in a PLC or similar device). This could be resolved adding a new routine to the RSET that the device support calls back when it has a new raw ouptut value to back-propagate to the VAL field.  Currently done by setting PACT and calling the record's process routine to use its second-half processing only.  Again, talk to Tim about this.
Line 65: Line 61:
The ability to add aliases to existing records has already been demonstrated and is a desirable feature, although the implementation that goes into Base might be somewhat different.
The ability to add aliases to existing records has already been demonstrated and is a desirable feature, although the implementation that goes into Base might be somewhat different.


Jeff: Give CAS the ability to make use of a prefix for all PV names that get stipped before passing them to the tool.  Not efficient to implement this on RSRV.
Jeff: Give CAS the ability to make use of a prefix for all PV names that gets stipped before passing them to the tool.  Not efficient to implement this on RSRV.
 
 
== Named Soft Events ==
 
Add the ability to use an event name instead of a number in the EVNT field.  EVNT is currently a short, but we only allow soft event numbers to be 8 bits, so this allows us space to add a new set of event numbers for the named events.  Ideally the event names would not have to be declared in advance, although that does leave the possibility of typos causing havoc.




Line 83: Line 84:


* Build system
* Build system
* OSI layer
* libCom & OSI layer
* libCom
** Basic registry routines
** IOC shell
* Antelope
* Antelope
* Flex
* Flex
Line 126: Line 128:
* Standard record types
* Standard record types
* Soft device support
* Soft device support
* The registry
* The registry (device, driver, record, function)
* IOC shell
* IOC application makeApp templates
* IOC application makeApp templates


Line 149: Line 150:


There are calls to replace the existing DB file format with an XML-based format.  Currently the DB file parser is too highly integrated into the process of record creation to be able to add a second format, but it would be feasible to separate these two and hence allow an expat-based or similar parser to be written.  This would probably require a close analysis and upgrade to the locking arrangements of the database.
There are calls to replace the existing DB file format with an XML-based format.  Currently the DB file parser is too highly integrated into the process of record creation to be able to add a second format, but it would be feasible to separate these two and hence allow an expat-based or similar parser to be written.  This would probably require a close analysis and upgrade to the locking arrangements of the database.
Need to coordinate with VDCT folks, etc.




Line 158: Line 161:
== Dynamically Loaded Modules ==
== Dynamically Loaded Modules ==


After converting the DBD load process into table registration, it should become easier to allow support modules (containing record types, device support and other drivers) to be discovered and loaded dynamically.  Unloading is a very different matter though.
After converting the DBD load process into table registration, it should become easier to allow support modules (containing record types, device support and other drivers) to be discovered and loaded dynamically.  Unloading is a very different matter though, we don't have the shutdown facilities to allow that.




== ... ==
== ... ==

Revision as of 23:04, 26 January 2007

These are my notes for what I think we can/should add to V3 through an evolutionary process. The ordering is probably vaguely right, but not necessarily that accurate.



3.14 Changes completed

The following modifications are included in a R3.14.9 release.

  • Add epicsUnitTest routines to libCom which generate output in the Test Anything Protocol (TAP) format.
  • Convert the existing test programs in libCom/test to use epicsUnitTest routines, which automates these tests.
  • Major overhaul of the calc expression parser with improved diagnostics and additional functionality.
  • Enhancements to the Access Security parser to improve diagnostics.
  • Support for 64-bit CPUs (solaris-sparc64, linux-x86_64).
  • Issues with multiple threaded CA clients.
  • Fix so the PV Gateway supports the alarm handler.

3.14 Changes needed "soon"

  • Jeff: Enhance CALC to allow names to be included in the CALC expression.

3.15 Cleanup

3.15 already includes the Up change to the build system; the ramifications of this change have not been followed up completely though:

  • Provide a perl script for converting 3.14 apps to 3.15
  • Bring over latest templates from 3.14
  • Implications for building extensions not worked out
  • makeBaseExt.pl is probably no longer needed
  • Install RULES files into a top level directory
    • Use this dir instead of the configure/O.arch directories so that a make clean doesn't remove them...
  • Change script installation rules (see ctlsys)

Ben's Async dbGetLinkCallback: Defer to an upgrade to the record support interface, later in the process. Or maybe include a dbGetLinkCallback() with the private callback routine, and require new record types to use this. Talk to synApps about this (Tim).

Jeff: Multiple Master problem (non-EPICS changes to output values in a PLC or similar device). This could be resolved adding a new routine to the RSET that the device support calls back when it has a new raw ouptut value to back-propagate to the VAL field. Currently done by setting PACT and calling the record's process routine to use its second-half processing only. Again, talk to Tim about this.


Documentation

Lots to do here:

  • Write a "Building EPICS" guide (chapter in AppDevGuide?)
  • Restructure the AppDevGuide to make it more accessible
  • Convert AppDevGuide into an OpenDocument Text file (keeping index markers)
  • Update the Record Reference Manual to 3.14 and beyond (generate tables automatically from DBD files?)
  • Look at all the documentation we have and see what's missing
  • Data Access, other new CA-related documentation...


Compiling DBD Files

My Perl implementation of the DBD file parser is still in process, and I'm hoping to revive this development effort to convert all DBD file information into C tables that get compiled into the IOC executable.

With this parser now being written in Perl, it will become easier to extend the new facilities that we implement, such as adding new field types (see Variable Length Strings below).


PV Aliases

The ability to add aliases to existing records has already been demonstrated and is a desirable feature, although the implementation that goes into Base might be somewhat different.

Jeff: Give CAS the ability to make use of a prefix for all PV names that gets stipped before passing them to the tool. Not efficient to implement this on RSRV.


Named Soft Events

Add the ability to use an event name instead of a number in the EVNT field. EVNT is currently a short, but we only allow soft event numbers to be 8 bits, so this allows us space to add a new set of event numbers for the named events. Ideally the event names would not have to be declared in advance, although that does leave the possibility of typos causing havoc.


Unbundling

Split Base into three or more independent modules. Each module would have its own version number, and the modules can therefore each have an independent existance, although there would obviously be specific dependencies associated with particular versions.

If we adopt this, we should bundle working subsets of modules together and release the complete bundle as a tarfile.

I see the unbundled modules as follows:

Core

Depends on: Nothing

These are the common parts used by everything:

  • Build system
  • libCom & OSI layer
    • Basic registry routines
    • IOC shell
  • Antelope
  • Flex
  • makeApp tool


Channel Access Client

Depends on: Core

Jeff Hill's responsibility.

  • CA-specific build rules (probably none)
  • CA client library
  • CA Tools
  • CA application makeApp templates


Channel Access Server

Depends on: Core, IOC

Jeff Hill's responsibility.

  • CAS-specific build rules (probably none)
  • GDD
  • The CAS server tool
  • RSRV (the old CA server code)
  • CAS application makeApp templates


IOC

Depends on: Core, CAC, CAS

The rest is code that runs on the IOC.

  • IOC-specific build rules
  • Static and runtime database access
  • Runtime database
  • Standard record types
  • Soft device support
  • The registry (device, driver, record, function)
  • IOC application makeApp templates


Redundancy

DESY funded project for Bob & John to add redundant control of remote I/O, allowing hot-spare backup IOCs.


CA Event Filtering

LANSCE needs Time and Flavored Data to replace ancient VAXen. Jeff's plan is to be able to attach an expression to a channel subscription, which is evaluated by the client's server thread to check each monitor event to determine whether to send it to this client or not. This could use an enhanced CALC expression parser and evaluation routine to do the expression, we just need a better parser since the expression might include record names. Discussion about how the values for the expression get saved such that they have the value at the time the data was pushed into the event queue; they might have changed since them. Jeff's fixed size event that contains those expression value resolves that issue, but it is very restrictive in terms of flexibility.


Variable Length Strings

I'm already adding my new BaseString C++ classes to libCom, and I intend to create a set of C wrapper routines for the base class operations (started, currently incomplete). This can form the basis of a new string type for use in the database in addition to the DBF_STRING.


Alternate DB File Formats

There are calls to replace the existing DB file format with an XML-based format. Currently the DB file parser is too highly integrated into the process of record creation to be able to add a second format, but it would be feasible to separate these two and hence allow an expat-based or similar parser to be written. This would probably require a close analysis and upgrade to the locking arrangements of the database.

Need to coordinate with VDCT folks, etc.


Online Record Creation

With good database locking, it might be feasible to look at the ability to add new record instances at runtime, and maybe delete as well. This would probably need a change to the record interface to initialize the new instances.


Dynamically Loaded Modules

After converting the DBD load process into table registration, it should become easier to allow support modules (containing record types, device support and other drivers) to be discovered and loaded dynamically. Unloading is a very different matter though, we don't have the shutdown facilities to allow that.


...