/**
* This is the new TACO interface defined in IDL. New TACO (or TANGO)
* is a total rethink of (old) TACO which was based on remote procedure
* calls.
* 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.
* Generic clients will use the Device interface directly.
* In addition to Device TANGO offers the interfaces Monitor,
* GroupDevice and GroupSignal.
* These interfaces implement TANGO services for monitoring and
* executing grouped accesses to device/signals.
* Version history:
* 20/08/98 : 1.1 : First official release
* 18/08/99 : 2.0 : Separe idl and pseudo-idl
* 08/09/99 : 2.1 : Remove the applet attribute and the initiliase and serialise operation from the device interface
* 15/09/99 : 2.2 : Adapted to the ICALEPS show
* 06/12/99 : 2.3 : Less possible state and add strings in the DevCmdInfo struct
* 31/01/00 : 2.4 : Update DevVarCharArray to array of octet
* 10/02/00 : 2.5 : Updated all attribute related stuff
* 21/03/00 : 2.6 : Change arguments for the write_attributes device operation
* 15/09/00 : 2.7 : Change arguments for the read_attributes operation. Remove the
* CORBA field of the ErrFacility enumeration.
* Replace the WARMUP state by INIT.
* Change name of the dim_x and dim_y fields of the
* AttributeConfig structure to max_dim_x and max_dim_y
* 27/09/00 : 2.8 : Change the writable field type of the AttributeConfig structure
* 26/10/00 : 2.9 : Change the DevError structure fields
* 12/02/01 : 2.10 : Change in the ErrSeverity enum. Windows does not like enum member like ERROR
* 14/02/01 : 2.11 : Another change in the ErrSeverity enum. WARNING is now WARN
* 23/03/01 : 2.12 : Add a new attribute in the Device interface called adm_name
* 26/10/01 : 3.0 : Add a new Device interface version using inheritance
* Add a new parameter to command_inout operation
* Add the command and attribute display level in command and attribute config structure
* Add a new call to get command or attribute cache history
* 06/04/02 : 2.0 : Update release number to be coherent with the real Tango software release number
@author JM.Chaize,
A.Gotz,
W-D.Klotz,
J.Meyer,
E.Taurel
@version 2.0
**/
module Tango
{
//-------------------------------------------------------------------------
//
// Include all types, struct.... definition file
//
//-------------------------------------------------------------------------
//-------------------------------------------------------------------------
//
// Basic types to transport command data
//
//-------------------------------------------------------------------------
typedef boolean DevBoolean;
typedef double DevDouble;
typedef float DevFloat;
typedef long DevLong;
typedef short DevShort;
typedef string DevString;
typedef octet DevUChar;
typedef unsigned long DevULong;
typedef unsigned short DevUShort;
typedef sequence DevVarFloatArray;
typedef sequence DevVarDoubleArray;
typedef sequence DevVarShortArray;
typedef sequence DevVarLongArray;
typedef sequence DevVarCharArray;
typedef sequence DevVarStringArray;
typedef sequence DevVarUShortArray;
typedef sequence DevVarULongArray;
typedef sequence DevVarBooleanArray;
struct DevVarLongStringArray
{
DevVarLongArray lvalue;
DevVarStringArray svalue;
};
struct DevVarDoubleStringArray
{
DevVarDoubleArray dvalue;
DevVarStringArray svalue;
};
//-------------------------------------------------------------------------
//
// Some enumerations
//
//-------------------------------------------------------------------------
enum AttrQuality
{
ATTR_VALID,
ATTR_INVALID,
ATTR_ALARM,
ATTR_CHANGING,
ATTR_WARNING
};
enum AttrWriteType
{
READ,
READ_WITH_WRITE,
WRITE,
READ_WRITE
};
enum AttrDataFormat
{
SCALAR,
SPECTRUM,
IMAGE
};
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
};
//-------------------------------------------------------------------------
//
// 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;
};
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;
};
typedef sequence AttributeConfigList;
typedef sequence AttributeConfigList_2;
typedef sequence AttributeConfigList_3;
typedef sequence AttributeValueList;
typedef sequence AttributeValueList_3;
//-------------------------------------------------------------------------
//
// 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;
};
typedef sequence DevAttrHistoryList;
typedef sequence DevAttrHistoryList_3;
//-------------------------------------------------------------------------
//
// 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);
};
/**
* 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);
};
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);
};
}; /* module tango */