Future Development Ideas

From EPICSWIKI
Revision as of 19:14, 30 January 2006 by AndrewJohnson (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

These are my notes for what I think we can/should add to V3 through an evolutionary process.

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. I see the modules as follows:

Core

These are the common parts used by everything:

  • Build system
  • OSI layer
  • libCom
  • Antelope
  • Flex
  • Replacement for makeBaseApp.pl

Channel Access

These are Jeff Hill's responsibility. He may want to further unbundle GDD and CAS, which is up to him.

  • CA-specific build rules (probably none)
  • CA client library
  • CA Tools
  • GDD
  • The CAS server tool
  • CA and CAS application templates

IOC

The rest is code that runs on the IOC.

  • IOC-specific build rules
  • Static and runtime database access
  • Runtime database
  • RSRV (the old CA server code)
  • Standard record types
  • Soft device support
  • The registry
  • IOC shell
  • IOC application templates


CA Event Filtering

LANSCE wants Time and Flavored Data. I think this should be implemented differently to how Jeff is currently planning, with my design involving much simpler changes to the core code but requiring a bit more applications work from the LANL software guys.

The main change would be to allow a CA client to subscribe to monitors on a channel but include another CHID in the subscription giving a channel that controls whether an individual event would be sent to that client or not. The conditional channel would give a boolean value, which would be checked every time a monitor event is notified to the server; if true the server sends it to this client, if false it doesn't. Initially that channel would have to be on the same IOC as the main channel, but if Jeff wants to implement a suitable CA client in the server that restriction could be removed.

To implement the Time and Flavored Data that they want LANSCE would have to create records (or record fields) in the IOCs that become true when their events are occurring and false otherwise. A client that wants to configure a non-standard flavor might have to ask a central facility to allocate and set up an appropriate calc record on its behalf.

The major advantage of this approach is that it only needs changes in the CA server and client code; there are no modifications needed to the database, record or device support layers at all. Other sites will be able to make use of the new CA facility as well, whereas Jeff's original requirement was very LANL-specific and would be unlikely to be used much elsewhere.


PV Aliases

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


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 facilities that we can implement, such as adding a new field type...


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. This can form the basis of a new string type for use in the database.


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.


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.


...