// copyright 2013-2020 BAE Systems, Thales Group, Object Management Group Inc; 2013 Selex ES, DSTO, Atlas Elektronik, EADS Deutschland GmbH
#ifndef ORGOMGC4ISERVICE_INTERFACESSUBSYSTEM_SERVICESSUBSYSTEM_CONTROLMANAGE_SUBSYSTEM_PARAMETERSDEFVAR
#define ORGOMGC4ISERVICE_INTERFACESSUBSYSTEM_SERVICESSUBSYSTEM_CONTROLMANAGE_SUBSYSTEM_PARAMETERSDEFVAR
#include "Common_Types.idl"
#include "Requests.idl"
#include "Subsystem_Control.idl"
module org
{
  module omg
  {
    module c4i
    {
      module Service_Interfaces
      {
        module Subsystem_Services
        {
          module Subsystem_Control
          {
            module Manage_Subsystem_Parameters
            {
              // struct holding keys for class report_parameter_values_type.
              struct report_parameter_values_key_type
              {
                org::omg::c4i::Domain_Model::Common_Types::Requests::request_id_type request_id;
                // Indicates which subsystem published the data or is intended to read it as a
                // subscriber
                org::omg::c4i::Domain_Model::Common_Types::subsystem_id_type subsystem_id;
              };
              // The service allows the actor to obtain and modify the values of parameters of the
              // subsystem. It also provides the facilities to retrieve the descriptions of
              // parameters available in a certain subsystem. 
              // The actor of the service is the Combat Management System.
              // The service starts when the CMS requests one of the following:
              // 
              // 	- Parameter value retrieval//
- Parameter value modification//
- Retrieval of parameter descriptor,//
// with a list of parameter names (and values in case of modification).
              // A parameter value may be structured (e.g. a vector or a table).
              // The service ends when the subsystem has provided the requested information or
              // modified the parameter value.
              // It is the CMS's responsibility to initiate the determination of initial state by
              // making a request for information to the subsystem. 
              // Parameter names used by a subsystem are to be unique within the scope of that
              // subsystem. Requests for parameter descriptions and to get and set current values
              // are consequently well-defined. Parameter names may be structured using a
              // namespace scheme to promote uniqueness.
              // Unknown parameter
              // On receipt of a request for parameter value retrieval, parameter value
              // modification or parameter descriptor retrieval for an unknown parameter name, the
              // subsystem responds with an indication “unknown parameter”. Other (correctly
              // identified) parameters in the same request are processed as requested.
              // Illegal parameter value
              // On receipt of a request for parameter value modification with a parameter value
              // that is outside the allowable range of the specified parameter, the subsystem
              // responds with an indication “illegal parameter value” and does not change the
              // parameter value.
              // This includes inconsistencies of parameter type (e.g. real where integer is
              // expected) and structure (e.g. vector of 2 elements, where a vector of 3 is
              // expected).
              // Other parameters with legal values in the same request are modified as requested.
              // In case of an illegal value for an element of a structured parameter, the entire
              // parameter remains unchanged.
              // 
              // Modification of parameter value
              // A parameter value may only be modified in the technical state(s) as specified in
              // the descriptor of that parameter.
              // Security
              // Access to the service may be restricted to certain parts of the CMS because of
              // security restrictions. 
              struct report_parameter_values_type
              {
#ifdef DDS_XTYPES
                @key org::omg::c4i::Domain_Model::Common_Types::Requests::request_id_type request_id;
#else
                org::omg::c4i::Domain_Model::Common_Types::Requests::request_id_type request_id;
#endif
                // Indicates which subsystem published the data or is intended to read it as a
                // subscriber
#ifdef DDS_XTYPES
                @key org::omg::c4i::Domain_Model::Common_Types::subsystem_id_type subsystem_id;
#else
                org::omg::c4i::Domain_Model::Common_Types::subsystem_id_type subsystem_id;
#endif
                org::omg::c4i::Domain_Model::Subsystem_Domain::Subsystem_Control::name_value_sequence_type the_name_value_set;
                org::omg::c4i::Domain_Model::Subsystem_Domain::Subsystem_Control::name_error_sequence_type the_name_error_set;
              };
#ifndef DDS_XTYPES
#pragma keylist report_parameter_values_type request_id subsystem_id
#endif
              // struct holding keys for class report_parameter_descriptors_type.
              struct report_parameter_descriptors_key_type
              {
                org::omg::c4i::Domain_Model::Common_Types::Requests::request_id_type request_id;
                // Indicates which subsystem published the data or is intended to read it as a
                // subscriber
                org::omg::c4i::Domain_Model::Common_Types::subsystem_id_type subsystem_id;
              };
              // The service allows the actor to obtain and modify the values of parameters of the
              // subsystem. It also provides the facilities to retrieve the descriptions of
              // parameters available in a certain subsystem. 
              // The actor of the service is the Combat Management System.
              // The service starts when the CMS requests one of the following:
              //
              // 	- Parameter value retrieval//
- Parameter value modification//
- Retrieval of parameter descriptor,//
// with a list of parameter names (and values in case of modification).
              // A parameter value may be structured (e.g. a vector or a table).
              // The service ends when the subsystem has provided the requested information or
              // modified the parameter value.
              // It is the CMS's responsibility to initiate the determination of initial state by
              // making a request for information to the subsystem. 
              // Parameter names used by a subsystem are to be unique within the scope of that
              // subsystem. Requests for parameter descriptions and to get and set current values
              // are consequently well-defined. Parameter names may be structured using a
              // namespace scheme to promote uniqueness.
              // Unknown parameter
              // On receipt of a request for parameter value retrieval, parameter value
              // modification or parameter descriptor retrieval for an unknown parameter name, the
              // subsystem responds with an indication “unknown parameter”. Other (correctly
              // identified) parameters in the same request are processed as requested.
              // Illegal parameter value
              // On receipt of a request for parameter value modification with a parameter value
              // that is outside the allowable range of the specified parameter, the subsystem
              // responds with an indication “illegal parameter value” and does not change the
              // parameter value.
              // This includes inconsistencies of parameter type (e.g. real where integer is
              // expected) and structure (e.g. vector of 2 elements, where a vector of 3 is
              // expected).
              // Other parameters with legal values in the same request are modified as requested.
              // In case of an illegal value for an element of a structured parameter, the entire
              // parameter remains unchanged.
              // 
              // Modification of parameter value
              // A parameter value may only be modified in the technical state(s) as specified in
              // the descriptor of that parameter.
              // Security
              // Access to the service may be restricted to certain parts of the CMS because of
              // security restrictions. 
              struct report_parameter_descriptors_type
              {
#ifdef DDS_XTYPES
                @key org::omg::c4i::Domain_Model::Common_Types::Requests::request_id_type request_id;
#else
                org::omg::c4i::Domain_Model::Common_Types::Requests::request_id_type request_id;
#endif
                // Indicates which subsystem published the data or is intended to read it as a
                // subscriber
#ifdef DDS_XTYPES
                @key org::omg::c4i::Domain_Model::Common_Types::subsystem_id_type subsystem_id;
#else
                org::omg::c4i::Domain_Model::Common_Types::subsystem_id_type subsystem_id;
#endif
                org::omg::c4i::Domain_Model::Subsystem_Domain::Subsystem_Control::descriptor_sequence_type the_descriptor_sequence;
                org::omg::c4i::Domain_Model::Subsystem_Domain::Subsystem_Control::name_error_sequence_type the_name_error_set;
              };
#ifndef DDS_XTYPES
#pragma keylist report_parameter_descriptors_type request_id subsystem_id
#endif
              // struct holding keys for class retrieve_parameter_values_type.
              struct retrieve_parameter_values_key_type
              {
                org::omg::c4i::Domain_Model::Common_Types::Requests::request_id_type request_id;
                // Indicates which subsystem published the data or is intended to read it as a
                // subscriber
                org::omg::c4i::Domain_Model::Common_Types::subsystem_id_type subsystem_id;
              };
              struct retrieve_parameter_values_type
              {
#ifdef DDS_XTYPES
                @key org::omg::c4i::Domain_Model::Common_Types::Requests::request_id_type request_id;
#else
                org::omg::c4i::Domain_Model::Common_Types::Requests::request_id_type request_id;
#endif
                // Indicates which subsystem published the data or is intended to read it as a
                // subscriber
#ifdef DDS_XTYPES
                @key org::omg::c4i::Domain_Model::Common_Types::subsystem_id_type subsystem_id;
#else
                org::omg::c4i::Domain_Model::Common_Types::subsystem_id_type subsystem_id;
#endif
                org::omg::c4i::Domain_Model::Subsystem_Domain::Subsystem_Control::parameter_name_sequence_type the_name_set;
              };
#ifndef DDS_XTYPES
#pragma keylist retrieve_parameter_values_type request_id subsystem_id
#endif
              // struct holding keys for class modify_parameter_values_type.
              struct modify_parameter_values_key_type
              {
                org::omg::c4i::Domain_Model::Common_Types::Requests::request_id_type request_id;
                // Indicates which subsystem published the data or is intended to read it as a
                // subscriber
                org::omg::c4i::Domain_Model::Common_Types::subsystem_id_type subsystem_id;
              };
              struct modify_parameter_values_type
              {
#ifdef DDS_XTYPES
                @key org::omg::c4i::Domain_Model::Common_Types::Requests::request_id_type request_id;
#else
                org::omg::c4i::Domain_Model::Common_Types::Requests::request_id_type request_id;
#endif
                // Indicates which subsystem published the data or is intended to read it as a
                // subscriber
#ifdef DDS_XTYPES
                @key org::omg::c4i::Domain_Model::Common_Types::subsystem_id_type subsystem_id;
#else
                org::omg::c4i::Domain_Model::Common_Types::subsystem_id_type subsystem_id;
#endif
                org::omg::c4i::Domain_Model::Subsystem_Domain::Subsystem_Control::name_value_sequence_type the_name_value_set;
              };
#ifndef DDS_XTYPES
#pragma keylist modify_parameter_values_type request_id subsystem_id
#endif
              // struct holding keys for class retrieve_parameter_descriptors_type.
              struct retrieve_parameter_descriptors_key_type
              {
                org::omg::c4i::Domain_Model::Common_Types::Requests::request_id_type request_id;
                // Indicates which subsystem published the data or is intended to read it as a
                // subscriber
                org::omg::c4i::Domain_Model::Common_Types::subsystem_id_type subsystem_id;
              };
              struct retrieve_parameter_descriptors_type
              {
#ifdef DDS_XTYPES
                @key org::omg::c4i::Domain_Model::Common_Types::Requests::request_id_type request_id;
#else
                org::omg::c4i::Domain_Model::Common_Types::Requests::request_id_type request_id;
#endif
                // Indicates which subsystem published the data or is intended to read it as a
                // subscriber
#ifdef DDS_XTYPES
                @key org::omg::c4i::Domain_Model::Common_Types::subsystem_id_type subsystem_id;
#else
                org::omg::c4i::Domain_Model::Common_Types::subsystem_id_type subsystem_id;
#endif
                org::omg::c4i::Domain_Model::Subsystem_Domain::Subsystem_Control::parameter_name_sequence_type the_name_set;
              };
#ifndef DDS_XTYPES
#pragma keylist retrieve_parameter_descriptors_type request_id subsystem_id
#endif
            };
          };
        };
      };
    };
  };
};
#endif