Line 1 was replaced by lines 1-70 |
- !!EASE - An Easy way to Write Sample Environment Drivers] |
+ !!EASE - An Easy Way to Write Sample Environment Drivers |
+ |
+ !Motivation |
+ |
+ Drivers for sample environment (SE) have some special |
+ demands which were not fully supported by the original SICS |
+ environment controller (EVC): |
+ |
+ * SE is changing, therefore the creation of objects is |
+ dynamic (i.e. after startup). This was already supported, |
+ but with the drawback, that they had to be created again |
+ when restarting SICS. All EASE objects are dynamic |
+ and persistent. |
+ * As SE hardware might be changed, it is not always guaranteed, |
+ that a device is connected and switched on. With the devices |
+ implemented in EVC, waiting for a response blocks the SICS |
+ server. EASE objects work with a simple "finite state machine" |
+ (fsm.c) which simulates a parallel execution of the tasks to |
+ be performed. |
+ * Making an EVC driver means writing a lot of code for |
+ initialization. For a more complex driver you need also much |
+ parameter and subcommand handling. EASE does initialization |
+ and parameter handling for you. |
+ |
+ !pardef |
+ |
+ ''pardef.c'' contains the implementation base class ''ParData'' for a |
+ new type of SICS object. It contains parameter definition, parameter |
+ handling, parameter listing, logging and storing. The parameter definiton |
+ function is the heart of any object based on pardef. This function |
+ is called by the system for different actions which can be performed |
+ on an object. |
+ |
+ !EASE |
+ |
+ ''ease.c'' contains two classes: ''EaseBase'' inherits ''ParData''. It |
+ includes the finite state machine, and the handling of a serial |
+ connection to the hardware. ''EaseDriv'' inherits ''EaseBase''. |
+ It makes the object driveable. |
+ |
+ !fsm |
+ |
+ ''fsm.c'' is the implementation of a simple processor. The tasks |
+ which can be executed are functions (FsmFunc) which contain a switch |
+ statement, where every case is a step of the task to execute. When combined with |
+ EASE, the individual steps normally end with a command written to |
+ the device. After any step, the FsmFunc returns the line number |
+ of the next step. The system calles the FsmFunc again, when the response |
+ is ready. FsmFuncs might be nested. |
+ |
+ !Drivers based on EASE |
+ |
+ For a driver, one needs to define |
+ * the parameter definition function |
+ * the start function, an FsmFunc, called after connection to the device |
+ * the read function, called repeatedly. It should read all relevant |
+ information from the device |
+ * a protocol dependent handler, dealing with the specialities of |
+ a protocol. This is normally implemented in a separate source file, |
+ as it might be used for different devices using the same protocol. |
+ * for driveable objects, a run function. It should contain all |
+ operations needed to drive to the target value |
+ * the initializer, calling EaseMakeBase or EaseMakeDriv with some class |
+ information and the functions mentioned above as arguments |
+ * the init function, creating the class and inserting the initializer to |
+ the system |
+ |
+ For a list of predefined parameters and subcommands see [EaseParametersAndCommands] |
+ |
+ For list of a available drivers based on EASE see [EaseDrivers] |