An Object-Oriented Class Library for
Developing Device Control Application

Jie Chen, Walt Akers, Graham Heyes, Danjin Wu,
and Chip Watson
Continuous Electron Beam Accelerator Facility

The Control Device API (CDEV) is a highly modular and extensible object-oriented C++ class library that provides a standard interface to one or more underlying control or data acquisition packages such as EPICS or CODA (CEBAF On-line Data Acquisition) through a common framework into which system developers or integrators can fit custom code as building block.

CDEV defines a set of abstract classes from which a new CDEV service-layer can be developed by inheritance and accessed with the same API through run time dynamic binding. All I/O in the system is handled as synchronous or asynchronous messages to devices that may span multiple services. CDEV routes messages to appropriate services by a name service, and dispatches multiple cdevServices to handle service specific I/O events. The cdevServices are linked in at run time to allow an application to access a new service by name without re-compilation or re-linking; this allows general purpose applications such as operator displays to be configured by ascii files. In addition, CDEV handles data transfer through cdevData objects that may contain multiple tagged values of different types, allowing flexible I/O between clients and servers.

Current implementation of CDEV in C++ supports all features of channel access in EPICS, and only introduces on the order of 10% additional I/O processing for both establishing connections and for monitoring connected channels. Integrating CODA and services into CDEV is underway.