00001 /** @mainpage RCU Control Engine Implemented in C++ 00002 00003 This is a C++ implementation of the DCS RCU Control Engine 00004 00005 00006 @section content Contents 00007 00008 - @ref overview 00009 - @ref rcuce_bits 00010 - @ref rcuce_core 00011 - @ref rcuce_dcsc 00012 - @ref rcuce_rcu 00013 - @ref rcuce_fsm 00014 - @ref rcuce_serv 00015 - @ref rcuce_rcu_serv 00016 - @ref rcuce_fecs 00017 - @ref rcuce_msg 00018 00019 @section overview Overview 00020 00021 This is a re-implementation of the RCU control engine, based on 00022 the C++ reimplementation of the FeeServer. 00023 00024 The basics of the library is the RcuCE::ControlEngine class. This 00025 defines a the interface to the FeeServer. It handles incoming 00026 events, and updates the services defined in the server. The 00027 control engine defines a few commands it self (see @ref 00028 rcuce_bits), but delegates most other commands to the registered 00029 RcuCE::CommandHandler objects. The control engine also has a few 00030 services, but most other services are managed by registered 00031 ServiceProvider objects. 00032 00033 The library also defines a top-level interface to the RCU (@ref 00034 RcuCE::Rcu). This provides all the commands to read/write 00035 registers of the RCU and associated Front-end cards both via the 00036 ALTRO bus and the @f$ I^2C@f$. 00037 00038 The RcuCE::Rcu class uses the RcuCE::Dcsc class which is an 00039 abstraction over the Dcsc message buffer interface. 00040 00041 Front-end card services are not defined directly in the library. 00042 Instead, the user should provide a sub-class of the 00043 RcuCE::FecFactory class (see @ref rcuce_fecs) to create custom 00044 RcuCE::Fec objects whenever a front-end card becomes active. When 00045 the RcuCE::Rcu object sees that a FEC has been turned on, it 00046 suspends the monitor thread, and asks the RcuCE::FecFactory to 00047 give it a new RcuCE::Fec object. The RcuCE::Fec object should 00048 register new services via the RcuCE::ServiceProvider interface. 00049 After having made all needed Fec objects, the RcuCE::Rcu object 00050 resumes the monitor thread. A similar approach is used if a FEC 00051 disappeares: The monitor thread is suspended, the RcuCE::Fec 00052 object is removed, along with its services, and the monitor thread 00053 is resumed. 00054 00055 The library provides a Finite State Machine (FSM) interface that a 00056 user can derive from to define their own state machines. See also 00057 @ref rcuce_fsm. 00058 */ 00059 #error not for compilation. 00060 00061 // 00062 // EOF 00063 //