// 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_TECHNICAL_STATEDEFVAR
#define ORGOMGC4ISERVICE_INTERFACESSUBSYSTEM_SERVICESSUBSYSTEM_CONTROLMANAGE_TECHNICAL_STATEDEFVAR
#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
          {
            // Contains operations and sequence diagrams for the Manage Technical State
            // interface.
            module Manage_Technical_State
            {
              // Interface used by CMS to receive periodic technical state reports from the
              // subsystem.
              // Manage Technical State causes the subsystem to provide or change its technical
              // state.
              // Special Requirements:
              // Initialization: Upon initialization, reset or power-on, the sub-system shall
              // transition to a pre-defined state and report the current state to the CMS.
              // Additional Information: 
              // If a critical component of the subsystem becomes NOT AVAILABLE, the technical
              // state shall transition to FAILED.
              // All states may transition to OFFLINE, but the subsystem shall only do so in
              // emergency situations or catastrophic damage, to indicate an uncontrolled shutdown
              // Startup, Shutdown, and Restart explain the sequence of
              // actions for nominal progression through the technical states.
              struct receive_periodic_technical_state_type
              {
                org::omg::c4i::Domain_Model::Subsystem_Domain::Subsystem_Control::technical_state_type technical_state;
                // 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
              };
#ifndef DDS_XTYPES
#pragma keylist receive_periodic_technical_state_type subsystem_id
#endif
              // struct holding keys for class receive_technical_state_type.
              struct receive_technical_state_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;
              };
              // Interface used by CMS to receive technical state reports from the subsystem which
              // were the result of a transition request from the CMS.
              // Manage Technical State causes the subsystem to provide or change its technical
              // state.
              // Special Requirements:
              // Initialization: Upon initialization, reset or power-on, the sub-system shall
              // transition to a pre-defined state and report the current state to the CMS.
              // Additional Information: 
              // If a critical component of the subsystem becomes NOT AVAILABLE, the technical
              // state shall transition to FAILED.
              // All states may transition to OFFLINE, but the subsystem shall only do so in
              // emergency situations or catastrophic damage, to indicate an uncontrolled shutdown
              // Startup, Shutdown, and Restart explain the sequence of
              // actions for nominal progression through the technical states.
              struct receive_technical_state_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::technical_state_type technical_state;
              };
#ifndef DDS_XTYPES
#pragma keylist receive_technical_state_type request_id subsystem_id
#endif
              // struct holding keys for class change_technical_state_type.
              struct change_technical_state_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;
              };
              // Interface used by the subsystem to receive requests from the CMS to change its
              // technical state.
              struct change_technical_state_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::technical_state_type technical_state;
              };
#ifndef DDS_XTYPES
#pragma keylist change_technical_state_type request_id subsystem_id
#endif
              // struct holding keys for class provide_technical_state_type.
              struct provide_technical_state_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;
              };
              // Interface used by the subsystem to receive requests from the CMS to provide its
              // current technical state.
              struct provide_technical_state_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
              };
#ifndef DDS_XTYPES
#pragma keylist provide_technical_state_type request_id subsystem_id
#endif
            };
          };
        };
      };
    };
  };
};
#endif