Difference between revisions of "User talk:AndrewJohnson"

From EPICSWIKI
Line 52: Line 52:


struct with interface name: since record type needs to know interface name to be able to call the interface, why is it being specified in the DBD file, rather than in an interface lookup inside the record code?
struct with interface name: since record type needs to know interface name to be able to call the interface, why is it being specified in the DBD file, rather than in an interface lookup inside the record code?
=== DA Vampire ===
Allow plugins that get inserted between the records and the CA server, in two places.
* A plugin can insert itself into the server event notification lists for indiviual fields and hence get called in the context of the db_post_event() call (or equivalent) inside the record's process routine.
* The plugin can also add properties to a record's property catalog (or even replace existing properties) and hence change the outside view of the record's fields.
=== SuperRecords ===
* Extract the hardware I/O functionality from the AI, BI, etc. records into separate objects that have associated code - init, delete, special, and multiple phases of process (which are named)
* Create a standard wrapper record type that can instanciate a single one of these objects into a record. At process time, this will execute each of the object's process routines in order.
* Be also able to instanciate one or more of these objects into a record type that has its own process routine, which can select which of the sub-object process routines to call in which order.
I agreed (with Bob) to look at this approach for the next core meeting, flesh out the implications for the DB internals etc., how easy would it be to implement this, what it will look like.
Hmm, code segments in the DBD file - can we put the super-record's process routine into the DBD file?  Or extract DBD file information out of a .cpp file.

Revision as of 17:45, 3 May 2005

This page contains my notes from various meetings.

Notes

EPICS V4 Core

Interface Manager - need something to register and find interfaces.

  • Could we generate a hash of the interface definition? Would allow us to compare interfaces and match two.


V4 Driver Interface

  • Asyn Driver interfaces are now standardized, and are a good prototype for the V4 driver interface.
  • In V4 the record types will directly talk to these driver interfaces.
  • Hence device support will disappear in V4

Kay: These queryable interfaces are more like COM, although it seems that there is a difference in that in COM everything implements an interface that you can use to query what other interfaces an object implements.

We currently have interfaces for:

  • value interface, for doing I/O and finding out about the value width, includes a "value changed" registration interface used for I/O Interrupt
  • connection interface, for connecting/dis-connecting devices
  • Address parser? or is that part of connection?

Kay: device support needs to be able to introspect the record it belongs to, to get the scan rate for instance, or the display limits. Solution: give the driver the record's name (or some other record pointer) to allow the driver to use the db access routines to get at this data.

However, don't try to include all of the asyn model into base.

Might use a record with a value field being a Map, which we then use for reading and/or writing device configuration data.


Software Registration

Replacement for registrar() which requires that the code implements a basic interface. Maybe this includes a reference counter, as well as reporting, interface queries?


Redundancy Requirements

Goal: 5 second for fail-over to a backup system

Limit: 15 seconds


Record Support Interface

Most of the existing RSET routines are associated with the CA server interface to records, which go away with Data Access.

Divide records into sub-structures with a named interface, but how to actually use that interface? Nobody has any code that can call through an interface that we don't know about until runtime. Therefor all these "structures with interface" need to implement routines in a standard interface.

Links: Is a link really a struct with a specific interface type? Maybe it's shorthand.

struct with interface name: since record type needs to know interface name to be able to call the interface, why is it being specified in the DBD file, rather than in an interface lookup inside the record code?


DA Vampire

Allow plugins that get inserted between the records and the CA server, in two places.

  • A plugin can insert itself into the server event notification lists for indiviual fields and hence get called in the context of the db_post_event() call (or equivalent) inside the record's process routine.
  • The plugin can also add properties to a record's property catalog (or even replace existing properties) and hence change the outside view of the record's fields.


SuperRecords

  • Extract the hardware I/O functionality from the AI, BI, etc. records into separate objects that have associated code - init, delete, special, and multiple phases of process (which are named)
  • Create a standard wrapper record type that can instanciate a single one of these objects into a record. At process time, this will execute each of the object's process routines in order.
  • Be also able to instanciate one or more of these objects into a record type that has its own process routine, which can select which of the sub-object process routines to call in which order.

I agreed (with Bob) to look at this approach for the next core meeting, flesh out the implications for the DB internals etc., how easy would it be to implement this, what it will look like.

Hmm, code segments in the DBD file - can we put the super-record's process routine into the DBD file? Or extract DBD file information out of a .cpp file.