summaryrefslogtreecommitdiff
path: root/interfaces/distrio_io.idl
diff options
context:
space:
mode:
authorManuel Traut <manut@mecka.net>2012-06-02 18:40:19 +0200
committerManuel Traut <manut@mecka.net>2012-06-02 18:40:19 +0200
commit89e787c826890aed88f632b1fd5cf4f65541067f (patch)
treef509b54ec7a5c44471da7634972f4ef8822cf726 /interfaces/distrio_io.idl
parent3fc5a341321c4c042bb464dbb1f62856fc2d31a4 (diff)
fix includes paths, etc
common, io, manager can be build now Signed-off-by: Manuel Traut <manut@mecka.net>
Diffstat (limited to 'interfaces/distrio_io.idl')
-rw-r--r--interfaces/distrio_io.idl111
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