/** * This is the TANGO interface defined in IDL. * TANGO is an extension of old TACO. * The fundamental idea of a device as a network object which * has methods and data has been retained. However * in TANGO objects will be real C++/Java objects which can be instantiated * and accessed via their methods and data by the client as if they were local * objects. * Certain aspects of the old DSAPI application programmer's * interface have been suppressed in order to simplify the client (e.g. import, * free, data collector api). * Features which have been considered missing in old TACO have been added * e.g. signals, events and groups. * Asynchronism and groups have been foreseen right from the beginning * this time. * This interface is defined in CORBA IDL. * The fundamental interface is Device. * All TANGO control objects will be of this type i.e. they will implement and * offer the Device interface. * New classes of control objects e.g. PowerSupply, will be created by * wrapping the Device class appropriately. * The wrapper class will hide the calls to the Device interface from * the client so that the client will only see the wrapper class. * All CORBA details will be hidden from the client as far as possible. **/ module Tango { //------------------------------------------------------------------------- // // Basic types to transport command data // //------------------------------------------------------------------------- typedef boolean DevBoolean; typedef double DevDouble; typedef float DevFloat; typedef short DevShort; typedef long DevLong; typedef long long DevLong64; typedef string DevString; typedef octet DevUChar; typedef unsigned short DevUShort; typedef unsigned long DevULong; typedef unsigned long long DevULong64; typedef sequence DevVarBooleanArray; typedef sequence DevVarDoubleArray; typedef sequence DevVarFloatArray; typedef sequence DevVarShortArray; typedef sequence DevVarLongArray; typedef sequence DevVarLong64Array; typedef sequence DevVarCharArray; typedef sequence DevVarStringArray; typedef sequence DevVarUShortArray; typedef sequence DevVarULongArray; typedef sequence DevVarULong64Array; struct DevVarLongStringArray { DevVarLongArray lvalue; DevVarStringArray svalue; }; struct DevVarDoubleStringArray { DevVarDoubleArray dvalue; DevVarStringArray svalue; }; struct DevEncoded { DevString encoded_format; DevVarCharArray encoded_data; }; typedef sequence DevVarEncodedArray; //------------------------------------------------------------------------- // // Data types for client identification // //------------------------------------------------------------------------- typedef unsigned long long JavaUUID[2]; typedef unsigned long CppClntIdent; struct JavaClntIdent { string MainClass; JavaUUID uuid; }; enum LockerLanguage { CPP, JAVA }; union ClntIdent switch (LockerLanguage) { case CPP: CppClntIdent cpp_clnt; case JAVA: JavaClntIdent java_clnt; }; //------------------------------------------------------------------------- // // Some enumerations // //------------------------------------------------------------------------- enum AttrQuality { ATTR_VALID, ATTR_INVALID, ATTR_ALARM, ATTR_CHANGING, ATTR_WARNING }; enum AttrWriteType { READ, READ_WITH_WRITE, WRITE, READ_WRITE, WT_UNKNOWN }; enum AttrDataFormat { SCALAR, SPECTRUM, IMAGE, FMT_UNKNOWN }; enum DevSource { DEV, CACHE, CACHE_DEV }; enum ErrSeverity { WARN, ERR, PANIC }; enum DevState { ON, OFF, CLOSE, OPEN, INSERT, EXTRACT, MOVING, STANDBY, FAULT, INIT, RUNNING, ALARM, DISABLE, UNKNOWN }; enum DispLevel { OPERATOR, EXPERT, DL_UNKNOWN }; typedef sequence DevVarStateArray; //------------------------------------------------------------------------- // // Some miscellaneous structures definitions // //------------------------------------------------------------------------- struct TimeVal { long tv_sec; long tv_usec; long tv_nsec; }; //------------------------------------------------------------------------- // // For the command query device operation // //------------------------------------------------------------------------- struct DevCmdInfo { string cmd_name; long cmd_tag; long in_type; long out_type; string in_type_desc; string out_type_desc; }; struct DevCmdInfo_2 { string cmd_name; DispLevel level; long cmd_tag; long in_type; long out_type; string in_type_desc; string out_type_desc; }; typedef sequence DevCmdInfoList; typedef sequence DevCmdInfoList_2; //------------------------------------------------------------------------- // // For the DevFailed exceptions // //------------------------------------------------------------------------- struct DevError { string reason; ErrSeverity severity; string desc; string origin; }; typedef sequence DevErrorList; struct NamedDevError { string name; long index_in_call; DevErrorList err_list; }; typedef sequence NamedDevErrorList; exception DevFailed { DevErrorList errors; }; exception MultiDevFailed { NamedDevErrorList errors; }; //------------------------------------------------------------------------- // // For attribute management // //------------------------------------------------------------------------- struct AttributeConfig { string name; AttrWriteType writable; AttrDataFormat data_format; long data_type; long max_dim_x; long max_dim_y; string description; string label; string unit; string standard_unit; string display_unit; string format; string min_value; string max_value; string min_alarm; string max_alarm; string writable_attr_name; DevVarStringArray extensions; }; struct AttributeConfig_2 { string name; AttrWriteType writable; AttrDataFormat data_format; long data_type; long max_dim_x; long max_dim_y; string description; string label; string unit; string standard_unit; string display_unit; string format; string min_value; string max_value; string min_alarm; string max_alarm; string writable_attr_name; DispLevel level; DevVarStringArray extensions; }; struct AttributeValue { any value; AttrQuality quality; TimeVal time; string name; long dim_x; long dim_y; }; struct AttributeDim { long dim_x; long dim_y; }; struct AttributeValue_3 { any value; AttrQuality quality; TimeVal time; string name; AttributeDim r_dim; AttributeDim w_dim; DevErrorList err_list; }; enum AttributeDataType { ATT_BOOL, ATT_SHORT, ATT_LONG, ATT_LONG64, ATT_FLOAT, ATT_DOUBLE, ATT_UCHAR, ATT_USHORT, ATT_ULONG, ATT_ULONG64, ATT_STRING, ATT_STATE, DEVICE_STATE, ATT_ENCODED, ATT_NO_DATA }; union AttrValUnion switch (AttributeDataType) { case ATT_BOOL: DevVarBooleanArray bool_att_value; case ATT_SHORT: DevVarShortArray short_att_value; case ATT_LONG: DevVarLongArray long_att_value; case ATT_LONG64: DevVarLong64Array long64_att_value; case ATT_FLOAT: DevVarFloatArray float_att_value; case ATT_DOUBLE: DevVarDoubleArray double_att_value; case ATT_UCHAR: DevVarCharArray uchar_att_value; case ATT_USHORT: DevVarUShortArray ushort_att_value; case ATT_ULONG: DevVarULongArray ulong_att_value; case ATT_ULONG64: DevVarULong64Array ulong64_att_value; case ATT_STRING: DevVarStringArray string_att_value; case ATT_STATE: DevVarStateArray state_att_value; case DEVICE_STATE: DevState dev_state_att; case ATT_ENCODED: DevVarEncodedArray encoded_att_value; case ATT_NO_DATA: DevBoolean union_no_data; }; struct AttributeValue_4 { AttrValUnion value; AttrQuality quality; AttrDataFormat data_format; TimeVal time; string name; AttributeDim r_dim; AttributeDim w_dim; DevErrorList err_list; }; struct AttributeValue_5 { AttrValUnion value; AttrQuality quality; AttrDataFormat data_format; long data_type; TimeVal time; string name; AttributeDim r_dim; AttributeDim w_dim; DevErrorList err_list; }; struct ChangeEventProp { string rel_change; string abs_change; DevVarStringArray extensions; }; struct PeriodicEventProp { string period; DevVarStringArray extensions; }; struct ArchiveEventProp { string rel_change; string abs_change; string period; DevVarStringArray extensions; }; struct EventProperties { ChangeEventProp ch_event; PeriodicEventProp per_event; ArchiveEventProp arch_event; }; struct AttributeAlarm { string min_alarm; string max_alarm; string min_warning; string max_warning; string delta_t; string delta_val; DevVarStringArray extensions; }; struct AttributeConfig_3 { string name; AttrWriteType writable; AttrDataFormat data_format; long data_type; long max_dim_x; long max_dim_y; string description; string label; string unit; string standard_unit; string display_unit; string format; string min_value; string max_value; string writable_attr_name; DispLevel level; AttributeAlarm att_alarm; EventProperties event_prop; DevVarStringArray extensions; DevVarStringArray sys_extensions; }; struct AttributeConfig_5 { string name; AttrWriteType writable; AttrDataFormat data_format; long data_type; boolean memorized; boolean mem_init; long max_dim_x; long max_dim_y; string description; string label; string unit; string standard_unit; string display_unit; string format; string min_value; string max_value; string writable_attr_name; DispLevel level; string root_attr_name; DevVarStringArray enum_labels; AttributeAlarm att_alarm; EventProperties event_prop; DevVarStringArray extensions; DevVarStringArray sys_extensions; }; typedef sequence AttributeConfigList; typedef sequence AttributeConfigList_2; typedef sequence AttributeConfigList_3; typedef sequence AttributeConfigList_5; typedef sequence AttributeValueList; typedef sequence AttributeValueList_3; typedef sequence AttributeValueList_4; typedef sequence AttributeValueList_5; //------------------------------------------------------------------------- // // For pipe management // //------------------------------------------------------------------------- enum PipeWriteType { PIPE_READ, PIPE_READ_WRITE, PIPE_WT_UNKNOWN }; struct PipeConfig { string name; string description; string label; DispLevel level; PipeWriteType writable; DevVarStringArray extensions; }; typedef sequence PipeConfigList; struct DevPipeDataElt; typedef sequence DevVarPipeDataEltArray; struct DevPipeDataElt { string name; AttrValUnion value; DevVarPipeDataEltArray inner_blob; string inner_blob_name; }; struct DevPipeBlob { string name; DevVarPipeDataEltArray blob_data; }; struct DevPipeData { string name; TimeVal time; DevPipeBlob data_blob; }; //------------------------------------------------------------------------- // // For data ready event // //------------------------------------------------------------------------- struct AttDataReady { string name; long data_type; long ctr; }; //------------------------------------------------------------------------- // // For device interface change event // //------------------------------------------------------------------------- struct DevIntrChange { boolean dev_started; DevCmdInfoList_2 cmds; AttributeConfigList_5 atts; }; //------------------------------------------------------------------------- // // For device interface info operation // //------------------------------------------------------------------------- struct DevInfo { string dev_class; string server_id; string server_host; long server_version; string doc_url; }; struct DevInfo_3 { string dev_class; string server_id; string server_host; long server_version; string doc_url; string dev_type; }; //------------------------------------------------------------------------- // // For command and attribute history // //------------------------------------------------------------------------- struct DevCmdHistory { TimeVal time; boolean cmd_failed; any value; DevErrorList errors; }; typedef sequence DevCmdHistoryList; struct DevAttrHistory { boolean attr_failed; AttributeValue value; DevErrorList errors; }; struct DevAttrHistory_3 { boolean attr_failed; AttributeValue_3 value; }; struct EltInArray { long start; long nb_elt; }; typedef sequence EltInArrayList; typedef sequence TimeValList; typedef sequence AttrQualityList; typedef sequence AttributeDimList; typedef sequence DevErrorListList; struct DevAttrHistory_4 { string name; TimeValList dates; any value; AttrQualityList quals; EltInArrayList quals_array; AttributeDimList r_dims; EltInArrayList r_dims_array; AttributeDimList w_dims; EltInArrayList w_dims_array; DevErrorListList errors; EltInArrayList errors_array; }; struct DevAttrHistory_5 { string name; AttrDataFormat data_format; long data_type; TimeValList dates; any value; AttrQualityList quals; EltInArrayList quals_array; AttributeDimList r_dims; EltInArrayList r_dims_array; AttributeDimList w_dims; EltInArrayList w_dims_array; DevErrorListList errors; EltInArrayList errors_array; }; struct DevCmdHistory_4 { TimeValList dates; any value; AttributeDimList dims; EltInArrayList dims_array; DevErrorListList errors; EltInArrayList errors_array; long cmd_type; }; typedef sequence DevAttrHistoryList; typedef sequence DevAttrHistoryList_3; //------------------------------------------------------------------------- // // For ZMQ event system // //------------------------------------------------------------------------- struct ZmqCallInfo { long version; unsigned long ctr; string method_name; DevVarCharArray oid; boolean call_is_except; }; //------------------------------------------------------------------------- // // Include the device interface // //------------------------------------------------------------------------- /** * The fundamental interface for all TANGO objects. * Each Device is a network object which can be accessed locally or via * network. * The network protocol on the wire will be IIOP. * The Device interface implements all the basic functions needed for doing * generic synchronous and asynchronous I/O on a device. * A Device object has data and actions. * Data are represented in the form of Attributes. * Actions are represented in the form of Commands. * The CORBA Device interface offers attributes and methods to access * the attributes and commands. * A client will either use these methods directly from C++ or Java or access * them via a wrapper class. * The Device interface describes only the remote network interface. * Implementation features like threads, command security, priority * etc. are dealt with in server side of the device server model. **/ interface Device { /** * name (readonly) - unique ascii identifier **/ readonly attribute string name; /** * description (readonly) - general description of device **/ readonly attribute string description; /** * state (readonly) - device state **/ readonly attribute DevState state; /** * status (readonly) - device state as ascii string **/ readonly attribute string status; /** * adm_name (readonly) - administrator device unique ascii identifier **/ readonly attribute string adm_name; /** * execute a command on a device synchronously with * one input parameter and one output parameter @param command ascii string e.g. "On" @param argin command input parameter e.g. float @return command result. **/ any command_inout(in string command, in any argin) raises(DevFailed); /** * read the configuration for a variable list of attributes from a device @param name list of attribute names to read @return list of attribute configurations read **/ AttributeConfigList get_attribute_config(in DevVarStringArray names) raises(DevFailed); /** * set the configuration for a variable list of attributes from the device @param new_conf list of attribute configuration to be set @return nothing **/ void set_attribute_config(in AttributeConfigList new_conf) raises(DevFailed); /** * read a variable list of attributes from a device @param name list of attribute names to read @return list of attribute values read **/ AttributeValueList read_attributes(in DevVarStringArray names) raises(DevFailed); /** * write a variable list of attributes to a device @param values list of attribute values to write @return nothing **/ void write_attributes(in AttributeValueList values) raises(DevFailed); /** * ping a device to see if it alive **/ void ping() raises(DevFailed); /** * read list of last N commands executed by clients @param number of commands to return @return list of command and clients **/ DevVarStringArray black_box(in long n) raises(DevFailed); /** * return general information about object e.g. class, type, ... @return device info **/ DevInfo info() raises(DevFailed); /** * query device to see what commands it supports @return list of commands and their types **/ DevCmdInfoList command_list_query() raises(DevFailed); /** * query device to see command argument @return command and its types @param command name **/ DevCmdInfo command_query(in string command) raises(DevFailed); }; //------------------------------------------------------------------------- // // The Device_2 interface // //------------------------------------------------------------------------- /** * A new release of the basic Device interface. * This new release has been introduced mainly to support Tango device server * internal polling. Inheritance is used between this new release and the * old one. This release mainly defines a new release of the command_inout and * read_attributes calls with a new parameter. It also add a new call to read * command or attributes result history. **/ interface Device_2: Device { /** * Execute a command on a device synchronously with * one input parameter and one output parameter @param command ascii string e.g. "On" @param argin command input parameter e.g. float @param source The data source. Used to specify if the command result must be read from the polling cache buffer or from the device itself @return command result. **/ any command_inout_2(in string command, in any argin, in DevSource source) raises(DevFailed); /** * Read a variable list of attributes from a device @param name list of attribute names to read @param source The data source. Used to specify if the command result must be read from the polling cache buffer or from the device itself @return list of attribute values read **/ AttributeValueList read_attributes_2(in DevVarStringArray names, in DevSource source) raises(DevFailed); /** * Read the configuration for a variable list of attributes from a device. * Compared to the Device interface, the attribute configuration has one more * field (The display level) @param name list of attribute names to read @return list of attribute configurations read **/ AttributeConfigList_2 get_attribute_config_2(in DevVarStringArray names) raises(DevFailed); /** * Query device to see what commands it supports. * Compared to the Device interface, the command configuration has one more * field (The display level) @return list of commands and their types **/ DevCmdInfoList_2 command_list_query_2() raises(DevFailed); /** * Query device to see command argument. * Compared to the Device interface, the command configuration has one more * field (The display level) @return command and its types @param command name **/ DevCmdInfo_2 command_query_2(in string command) raises(DevFailed); /** * Get command history buffer. * Return command result history for polled command @param command ascii string e.g. "On" @param n The history depth @return command history. **/ DevCmdHistoryList command_inout_history_2(in string command, in long n) raises (DevFailed); /** * Get attribute value history buffer. * Return attribute value history for polled attribute @param name ascii string @param n The history depth @return attribute value history. **/ DevAttrHistoryList read_attribute_history_2(in string name, in long n) raises (DevFailed); }; //------------------------------------------------------------------------- // // The Device_3 interface (corresponding to Tango V5) // //------------------------------------------------------------------------- interface Device_3: Device_2 { /** * Read a variable list of attributes from a device @param name list of attribute names to read @param source The data source. Used to specify if the command result must be read from the polling cache buffer or from the device itself @return list of attribute values read **/ AttributeValueList_3 read_attributes_3(in DevVarStringArray names, in DevSource source) raises(DevFailed); /** * write a variable list of attributes to a device @param values list of attribute values to write @return nothing **/ void write_attributes_3(in AttributeValueList values) raises(DevFailed,MultiDevFailed); /** * Get attribute value history buffer. * Return attribute value history for polled attribute @param name ascii string @param n The history depth @return attribute value history. **/ DevAttrHistoryList_3 read_attribute_history_3(in string name, in long n) raises (DevFailed); /** * return general information about object e.g. class, type, ... @return device info **/ DevInfo_3 info_3() raises(DevFailed); /** * Read the configuration for a variable list of attributes from a device. * Compared to the Device interface, the attribute configuration has one more * field (The display level) @param name list of attribute names to read @return list of attribute configurations read **/ AttributeConfigList_3 get_attribute_config_3(in DevVarStringArray names) raises(DevFailed); /** * set the configuration for a variable list of attributes from the device @param new_conf list of attribute configuration to be set @return nothing **/ void set_attribute_config_3(in AttributeConfigList_3 new_conf) raises(DevFailed); }; //------------------------------------------------------------------------- // // The Device_4 interface (corresponding to Tango V7) // //------------------------------------------------------------------------- interface Device_4: Device_3 { /** * Get attribute value history buffer. * Return attribute value history for polled attribute @param name ascii string @param n The history depth @return attribute value history. **/ DevAttrHistory_4 read_attribute_history_4(in string name, in long n) raises (DevFailed); /** * Get command history buffer. * Return command result history for polled command @param command ascii string e.g. "On" @param n The history depth @return command history. **/ DevCmdHistory_4 command_inout_history_4(in string command, in long n) raises (DevFailed); /** * Execute a command on a device synchronously with * one input parameter and one output parameter @param command ascii string e.g. "On" @param argin command input parameter e.g. float @param source The data source. Used to specify if the command result must be read from the polling cache buffer or from the device itself @param cl_ident The client identificator @return command result. **/ any command_inout_4(in string command, in any argin, in DevSource source, in ClntIdent cl_ident) raises(DevFailed); /** * Read a variable list of attributes from a device @param name list of attribute names to read @param source The data source. Used to specify if the command result must be read from the polling cache buffer or from the device itself @return list of attribute values read **/ AttributeValueList_4 read_attributes_4(in DevVarStringArray names, in DevSource source,in ClntIdent cl_ident) raises(DevFailed); /** * write a variable list of attributes to a device @param values list of attribute values to write @return nothing **/ void write_attributes_4(in AttributeValueList_4 values,in ClntIdent cl_ident) raises(DevFailed,MultiDevFailed); /** * set the configuration for a variable list of attributes from the device @param new_conf list of attribute configuration to be set @return nothing **/ void set_attribute_config_4(in AttributeConfigList_3 new_conf,in ClntIdent cl_ident) raises(DevFailed); /** * Write then Read device attribute(s) @param values List of attribute values to be written @param cl_ident The client identificator @return Attributes value read **/ AttributeValueList_4 write_read_attributes_4(in AttributeValueList_4 values,in ClntIdent cl_ident) raises(DevFailed,MultiDevFailed); }; //------------------------------------------------------------------------- // // The Device_5 interface (corresponding to Tango V9) // //------------------------------------------------------------------------- interface Device_5: Device_4 { /** * Read the configuration for a variable list of attributes from a device. * Compared to the Device interface, the attribute configuration has one more * field (The display level) @param name list of attribute names to read @return list of attribute configurations read **/ AttributeConfigList_5 get_attribute_config_5(in DevVarStringArray names) raises(DevFailed); /** * set the configuration for a variable list of attributes from the device @param new_conf list of attribute configuration to be set @return nothing **/ void set_attribute_config_5(in AttributeConfigList_5 new_conf,in ClntIdent cl_ident) raises(DevFailed); /** * Read a variable list of attributes from a device @param name list of attribute names to read @param source The data source. Used to specify if the command result must be read from the polling cache buffer or from the device itself @return list of attribute values read **/ AttributeValueList_5 read_attributes_5(in DevVarStringArray names, in DevSource source,in ClntIdent cl_ident) raises(DevFailed); /** * Write then Read device attribute(s) @param values List of attribute values to be written @param cl_ident The client identificator @return Attributes value read **/ AttributeValueList_5 write_read_attributes_5(in AttributeValueList_4 values,in DevVarStringArray r_names,in ClntIdent cl_ident) raises(DevFailed,MultiDevFailed); /** * Get attribute value history buffer. * Return attribute value history for polled attribute @param name ascii string @param n The history depth @return attribute value history. **/ DevAttrHistory_5 read_attribute_history_5(in string name, in long n) raises (DevFailed); /** * Read the configuration for a variable list of pipes from a device. @param names list of pipe names to read @return list of pipe configurations read **/ PipeConfigList get_pipe_config_5(in DevVarStringArray names) raises(DevFailed); /** * set the configuration for a variable list of pipes from the device @param new_conf list of pipe configuration to be set @return nothing **/ void set_pipe_config_5(in PipeConfigList new_conf,in ClntIdent cl_ident) raises(DevFailed); /** * Read a pipe from a device @param name pipe name @param cl_ident client identifier @return pipe value **/ DevPipeData read_pipe_5(in string name,in ClntIdent cl_ident) raises(DevFailed); /** * write a pipe to a device @param value new pipe value @param cl_ident client identifier @return nothing **/ void write_pipe_5(in DevPipeData value,in ClntIdent cl_ident) raises(DevFailed); /** * write then read a pipe to a device @param value new pipe value @param cl_ident client identifier @return pipe value **/ DevPipeData write_read_pipe_5(in DevPipeData value,in ClntIdent cl_ident) raises(DevFailed); }; }; /* module tango */