diff options
Diffstat (limited to 'interfaces/distrio_io.idl')
| -rw-r--r-- | interfaces/distrio_io.idl | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/interfaces/distrio_io.idl b/interfaces/distrio_io.idl new file mode 100644 index 0000000..25d69a8 --- /dev/null +++ b/interfaces/distrio_io.idl @@ -0,0 +1,111 @@ +#ifndef DISTRIO_IO_IDL +#define DISTRIO_IO_IDL + +#include "distrio_common.idl" + +/** + * @brief the implementation of these interfaces are responsible for + * controlling the I/O hardware + * + * @author Manuel Traut <manut@mecka.net> + * @copyright GPLv2 + */ + +module Distrio { + + interface Device; + + /** what should trigger a callback? */ + enum Digital_trigger { + TRIGGER_EDGE, + TRIGGER_RISING_EDGE, + TRIGGER_FALLING_EDGE + }; + + /** a digital input or output pin */ + interface Digital { + /** get the name of the hardware which is connected to this pin */ + Distrio::Error name (out string name); + /** set this pin (fails if it's a digital input) */ + Distrio::Error set (); + /** reset this pin (fails if it's a digital input) */ + Distrio::Error reset (); + /** get the value of the pin ( 0 = reset, rest = set */ + Distrio::Error get (out long value); + /** register a callback that is called if the state of the pin changes */ + Distrio::Error register_callback (in Device dev, in Digital_trigger trigger); + /** the id is given by Controller::Manager during registration */ + attribute long id; + }; + + typedef sequence<Digital> Digital_list; + + /** what should trigger a callback? */ + struct Analog_trigger { + /** used internal to store analog value of the last trigger */ + long last_value; + /** e.g. if current_value > last_value + jitter -> execute callback */ + long jitter; + }; + + /** an analog input or output pin */ + interface Analog { + /** name of the hardware which is connected to the pin */ + Distrio::Error name (out string name); + /** minimum allowed value */ + Distrio::Error min (out long min); + /** maximum allowd value */ + Distrio::Error max (out long max); + /** set new value (may fail if out of range or pin is an input) */ + Distrio::Error set (in long value); + /** get analog value of the pin */ + Distrio::Error get (out long value); + /** register a callback that is called if the trigger matches */ + Distrio::Error register_callback (in Device dev, in Analog_trigger trigger); + attribute long id; + }; + + typedef sequence<Analog> Analog_list; + + /** list of functions of all devices - new ones can be added if needed */ + enum Dev_function_id { + DEV_START, + DEV_STOP + }; + + /** definition to control the device, e.g. start or stop it */ + struct Dev_function { + string description; + long value; + Dev_function_id id; + }; + + typedef sequence<Dev_function> Dev_function_list; + + /** a device could have several io's and can export functions which can be + * controlled by a HID device or GUI + */ + interface Device { + /** name of the device */ + Distrio::Error name (out string name); + /** to execute a device specific function pass the Dev_function descriotion + * (retrived by (functions ()) as parameter + */ + Distrio::Error execute (in Dev_function func); + /** returns all device specific function descriptions */ + Distrio::Error functions (out Dev_function_list funcs); + /** called by the Digital object if this object is registered as a + * callback and the trigger hits */ + Distrio::Error callback_digital (in Digital io_dig); + /** called by the Digital object if this object is registered as a + * callback and the trigger hits */ + Distrio::Error callback_analog (in Analog io_ana); + /** ID is given by Controller::Manager during registration */ + attribute long id; + }; + + typedef sequence<Device> Device_list; + +}; + +#endif |
