// NOTICE: SEMI makes no warranties or representations as to the suitability of // the standards set forth herein for any particular application. The // determination of the suitability of the standard is solely the responsibility // of the user. Users are cautioned to refer to manufacturer's instructions, // product labels, product data sheets, and other relevant literature, // respecting any materials or equipment mentioned herein. These standards // are subject to change without notice. // // By publication of this standard, Semiconductor Equipment and Materials // International (SEMI) takes no position respecting the validity of any patent // rights or copyrights asserted in connection with any items mentioned in this // standard. Users of this standard are expressly advised that determination of // any such patent rights or copyrights, and the risk of infringement of such // rights are entirely their own responsibility. // This proto file will define representations of objects in SEMI E125 in the Protocol Buffer 3 language syntax = "proto3"; package semi; // Import statements allow Protocol Buffer messages defined in this .proto file to use // Protocol Buffer messages defined in other .proto files // Import statements need to match the filenames of the corresponding .proto files to import for // this .proto file to compile properly. // // This .proto file can import .proto files corresponding to newer revisions of SEMI Standards // used by this SEMI Standard as long as they are compatible (e.g. the SEMI standard revision corresponding // to the .proto file to import is the latest revision referenced by the SEMI standard corresponding to this // .proto file. // * This allows referenced SEMI Standards to be updated without having to constantly update the import statements // used by this .proto file. // * For example, implementers can update the import statement referencing the .proto file corresponding to a newer // revision of SEMI E179. // * If a specific revision of the referenced SEMI Standard is required, this .proto file will be explicitly updated to // import the corresponding .proto file of the referenced SEMI standard as part of updates to this .proto file. import "semi_e179-1224.proto"; import "semi_e120-02-1224.proto"; import "semi_e132-02-1224.proto"; import "google/protobuf/descriptor.proto"; import "google/protobuf/timestamp.proto"; // *************************************************************** // Version information // *************************************************************** // Protobuf3 doesn't support the concept of constants // We want a way for the implementor to get the .proto file version // if they want to log or check this information. // We workaround the issue by exposing a file attribute with the version information // Information corresponding to the associated SEMI Standard as a custom file option on the .proto file. // // Note - the proto_buf_file_version will uniquely identify the .proto file version. // * For the .proto file associated with the official standard, the proto_buf_file_version will // be the SEMI Standard version (including the publication date in MMYY format) // For example, // proto_buf_file_version="E134.2-MMYY" will indicate this .proto file is for // an official SEMI Version (SEMI E134.2-MMYY) // * If the .proto file is for an interim release (for example as part of a ballot), // suffix information along the lines of "-Ballot-" can be added. // For example, // proto_buf_file_version="E134.2-Ballot1234-20180522" will indicate this .proto file is an interim version for // SEMI E134.2-XXXX Ballot 1234 and was released on May 22, 2018 // // Note - semi_standard_information Field is defined once in the SEMI E179 .proto file option (semi_standard_information) = { semi_standard : "SEMI E125.2", proto_buf_file_version : "SEMIE125-02-1224" }; // INTERNAL - For reference only // INTERNAL - E125.1 schema file (E125-1-V0710-Schema.xsd) defined and imported XML namespace as: // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - For reference only // INTERNAL - E125.1 schema file (E125-1-V0710-Schema.xsd) defined SEMIStandardVersion simpleType. // INTERNAL - It is validation code and not transmitted via gRPC/ProtocolBuffers // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // *************************************************************** // Enumerated Type Definitions // *************************************************************** // Best Practice is to specify Unknown element as index 0 for future proofing // Enum elements need to be unique across the namespace, so make sure Unknown element name // is meaningful to the enum. // INTERNAL - Enum ParameterTransientNature is the representation of isTransientEnum // INTERNAL - It is renamed to more clearly identify the enumerated type // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // Specifies the parameter's transient nature enum ParameterTransientNature { PARAMETER_TRANSIENT_NATURE_UNSPECIFIED = 0; // Value when unspecified enum value is received - per Protocol Buffers best practice TRANSIENT = 1; // Transient parameters are reportable only in association with certain // events and exceptions RESTRICTED = 2; // Restricted parameters are available to report data at any times in // certain conditions UNRESTRICTED = 3; // Unrestricted parameter are available to report data at any time the // equipment communication is available reserved 4 to 999; // Reserved for future use } // INTERNAL - SecsVariableTypeSpecifier enumerated type will replace the SECSVarEnumType // INTERNAL - It is renamed to more clearly identify the enumerated type // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // Specifies the valid type of SECS variables enum SecsVariableTypeSpecifier { SECS_VARIABLE_TYPE_SPECIFIER_UNSPECIFIED = 0; // Value when unspecified enum value is received - per Protocol Buffers best practice STATUS_VARIABLE = 1; // Status Variable (SV) EQUIPMENT_CONSTANT_VARIABLE = 2; // Equipment Constant Variable (ECV) DATA_VARIABLE = 3; // Data Variable (DV) reserved 4 to 999; // Reserved for future use } // INTERNAL - ExceptionSeveritySpecifier represents the severityEnumType // INTERNAL - It is renamed to more clearly identify the enumerated type // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // Specifies the valid exception severity levels enum ExceptionSeveritySpecifier { EXCEPTION_SEVERITY_SPECIFIER_UNSPECIFIED = 0; // Value when unspecified enum value is received - per Protocol Buffers best practice FATAL = 1; // Fatal exception severity ERROR = 2; // Error exception severity WARNING = 3; // Warning exception severity INFORMATIONAL = 4; // Informational exception severity reserved 5 to 999; // Reserved for future use } // *************************************************************** // Message Definitions // *************************************************************** // INTERNAL - SEMI E125.1 defined global complexType ParameterReferenceType as the XML Schema representation of // INTERNAL - a reference to a Parameter defined in the equipment metadata. // INTERNAL - This is no longer needed as SEMI E125 was reorganized on how parameters are handled. // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // Protobuf message names need to be unique. There is already a message ParameterReferenceType defined // in the .proto file corresponding for SEMI E134. // Use EquipmentParameterReferenceType as the message name for SEMI E125 ParameterReference message EquipmentParameterReferenceType { string parameter_name = 1; string parameter_id = 2; } // INTERNAL - SEMI E125.1 defined AssociatedParameterType. // INTERNAL - This is no longer needed as SEMI E125 was reorganized on how parameters are handled. // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - SEMI E125 was updated to replace EventToParameterMap with StateMachineInstanceEvent message StateMachineInstanceEventType // INTERNAL - { string event_id = 1; // Identifier for the StateMachine Event for which Parameters // might be available. // INTERNAL - string event_name = 2; // Name of the StateMachine Event oneof SecsInformation { uint64 secs_ceid = 3; // Populated if event corresponds to a SECS event // SECSEventRef only contains the CEID for the SECS event // No need to create a separate Protocol Buffers message for it // Use uint64 data type because largest CEID per SEMI E5 is // 8 byte integer (unsigned). } repeated EquipmentParameterReferenceType available_parameters = 4; // INTERNAL - } message StateMachineInstanceType // INTERNAL - { string state_machine_id = 1; // INTERNAL - string state_machine_name = 2; EquipmentParameterReferenceType current_state = 3; // INTERNAL - EquipmentParameterReferenceType previous_state = 4; // INTERNAL - repeated StateMachineInstanceEventType state_machine_instance_events = 5; // INTERNAL - This used to be the EventMaps attribute // INTERNAL - repeated StateMachineInstanceType nested_state_machines = 6; // INTERNAL - } // INTERNAL - SEMI E125 reworked how units are handled. // INTERNAL - Do not need a dedicated message for following elements defined // INTERNAL - in SEMI E125.1 - UnitConfigArrayType, UnitConfigType, UnitsType. // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - SEMI E125 reworked parameters are handled. // INTERNAL - Do not need a dedicated message for following elements defined // INTERNAL - in SEMI E125.1 - ParameterAssociationType. // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - Parameter Classification Type has a description field defined in SEMI E125 but // INTERNAL - not included in SEMI E125. Create a message to hold both the isTransient and Description // INTERNAL - information. If Description field is removed, no need to define this as a separate // INTERNAL - message - put the isTransient in the deriving messages message ParameterClassificationType // INTERNAL - { ParameterTransientNature is_transient = 1; // INTERNAL - string description = 2; } // INTERNAL - No need to define a message for a class that has no attributes or method // INTERNAL - Define isTransient attribute on parent message. // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - No need to define a message for a class that has no attributes or method // INTERNAL - Define isTransient attribute on parent message. // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - SEMI E125 was updated to remove AffectParameters as an attribute // INTERNAL - No need to define a message for a class that has no attributes or method // INTERNAL - Define isTransient attribute on parent message. // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - No need to define a message for a class that has no attributes or method // INTERNAL - Define isTransient attribute on parent message. // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - No need to define a message for a class that has no attributes or method // INTERNAL - Define isTransient attribute on parent message. // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - message ConstraintType // INTERNAL - { string name = 1; // INTERNAL - string description = 2; // INTERNAL - string definition = 3; // INTERNAL - } message SECSVarRefType // INTERNAL - { uint64 secs_vid = 1; // Use uint64 data type because largest VID per SEMI E5 is // 8 byte integer (unsigned). // INTERNAL - cannot use dashes in Field Name // INTERNAL - SecsVariableTypeSpecifier secs_var_class = 2; // Use enumerated value - calling code can map to text string // INTERNAL - } message CachedDataPropertiesType { double min_collection_interval = 1; // Positive real number double max_collection_interval = 2; // Positive real number sint32 min_reporting_interval = 3; // Positive Integer sint32 max_reporting_interval = 4; // Positive Integer } message ParameterType // INTERNAL - { string parameter_id = 1; // INTERNAL - string type_name = 2; // INTERNAL - string description = 3; // INTERNAL - repeated ConstraintType constraints = 4; // INTERNAL - oneof classification { ParameterClassificationType controls = 5; // INTERNAL - ParameterClassificationType configurations = 6; // INTERNAL - ParameterClassificationType data = 7; // INTERNAL - } ParameterUnitType unit = 8; oneof secs_information { SECSVarRefType secs_variable = 9; // Populated if this is a SECS variable // INTERNAL - } repeated CachedDataPropertiesType cached_data_properties = 10; // INTERNAL - // INTERNAL - These elements were originally defined in SEMI E125.1, but is not defined in SEMI E125 anymore // INTERNAL - } message ParameterUnitType { // INTERNAL - Use oneof structure because // INTERNAL - unit_id is used when there is one and only one unit possible. // INTERNAL - AvailableUnits is used when more than one unit is possible. oneof parameter_unit { string unit_id = 1; UnitConfigType available_unit = 2; } } message UnitConfigType { repeated string unit_ids = 1; EquipmentParameterReferenceType unit_symbol_parameter = 2; } message TransitionType // INTERNAL - { string transition_name = 1; // Human-readable name for this transition // INTERNAL - string transition_id = 2; // Unique identifier for this transition // INTERNAL - string description = 3; // INTERNAL - string source_state_id = 4; // State of origin for this transaction // INTERNAL - string target_state_id = 5; // Transitioned-to state // INTERNAL - } // INTERNAL - Do not need a dedicated message for TransitionReferenceType - // INTERNAL - have Parent message have an array of TransitionID directly // INTERNAL - // INTERNAL - // INTERNAL - message StateMachineEventType // INTERNAL - { string event_id = 1; // INTERNAL - string description = 2; // INTERNAL - repeated string transition_ids = 3; // INTERNAL - // INTERNAL - // INTERNAL - SEMI E125 was updated for State Machine and Events. ID attribute was removed (text unique across all StateMachines) // INTERNAL - } message StateType // INTERNAL - { string state_name = 1; // Human-readable name for this state // INTERNAL - string state_id = 2; // Unique identifier for this state // INTERNAL - string description = 3; // INTERNAL - oneof state // INTERNAL - { StatesType sub_state = 4; // INTERNAL - StateMachinesType state_machine = 5; // INTERNAL - } } // Container object of repeated StateType objects // INTERNAL - need to be in its own message because we can't use repeated keyword in the // INTERNAL - oneof State structure in the StateType message. message StatesType { repeated StateType states = 1; } message StateMachineType // INTERNAL - { string state_machine_id = 1; // INTERNAL - string description = 2; // INTERNAL - StateType top = 3; // Top level state for this state machine // INTERNAL - repeated TransitionType transitions = 4; // INTERNAL - repeated StateMachineEventType events = 5; // INTERNAL - // INTERNAL - SEMI E125 was reorganized around State Machines. // INTERNAL - The name attribute was removed // INTERNAL - } // Container object of repeated StateMachineType objects // INTERNAL - need to be in its own message because we can't use repeated keyword in the // INTERNAL - oneof State structure in the StateType message. message StateMachinesType { repeated StateMachineType state_machines = 1; } message StateMachineReferenceType { string state_machine_id = 1; // INTERNAL - Use oneof structure so you can easily tell if there is a transient parameter that // INTERNAL - identifies the object or item associated with the StateMachine instance // INTERNAL - Can have at most one ParameterReferenceType oneof state_machine_instance { EquipmentParameterReferenceType state_machine_instance_parameter = 2; } repeated StateMachineReferenceEventType state_machine_reference_events = 3; repeated StateMachineReferenceType nested_state_machines = 4; } message StateMachineReferenceEventType { string event_id = 1; string event_name = 2; oneof secs_information { uint64 secs_ceid = 3; // Populated if event corresponds to a SECS event // SECSEventRef only contains the CEID for the SECS event // No need to create a separate Protocol Buffers message for it // Use uint64 data type because largest CEID per SEMI E5 is // 8 byte integer (unsigned). // INTERNAL - cannot use dashes in Field Name} } repeated EquipmentParameterReferenceType available_parameters = 4; } message SimpleEventType // INTERNAL - { string event_id = 1; // INTERNAL - string description = 2; // INTERNAL - oneof secs_information { uint64 secs_ceid = 3; // Populated if event corresponds to a SECS event // SECSEventRef only contains the CEID for the SECS event // No need to create a separate Protocol Buffers message for it // Use uint64 data type because largest CEID per SEMI E5 is // 8 byte integer (unsigned). } // INTERNAL - SEMI E125 was updated to remove the name, availableParameter and SecsCEID attribute // INTERNAL - // INTERNAL - // INTERNAL - } message SimpleEventInstanceType { string event_name = 1; string event_id = 2; repeated EquipmentParameterReferenceType available_parameters = 3; } message SEMIObjType // INTERNAL - { string standard_version = 1; // INTERNAL - SEMI E125.1 defined Type SEMIStandardVersion as validation code // INTERNAL - on a string value. Protobufs don't support this - this will be done // INTERNAL - by implementations. // INTERNAL - string obj_type = 2; // INTERNAL - string state_machine_id = 3; repeated AttributeType attributes = 4; // INTERNAL - SEMI E125 was updated to add Attribute object // INTERNAL - // INTERNAL - // INTERNAL - SEMI E125 was updated to remove eventData, stateMachineInstances and simpleEvents attributes // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - } message AttributeType { string attribute_id = 1; string type_name = 2; EquipmentParameterReferenceType associated_parameter = 3; string description = 4; ParameterUnitType unit = 5; } // INTERNAL - Although the ObjType information could be used in the parent object (EquipmentNodeDescription) // INTERNAL - this class could be extended in the future to have additional attributes. // INTERNAL - To avoid breaking the interface, it is kept as a Protobuf message // INTERNAL - Since this is a configuration item, performance considerations are less important. message SEMIObjTypeReferenceType // INTERNAL - { string obj_type = 1; // Maps to type attribute (identifier for unique SEMIObjTypeReference // INTERNAL - } // INTERNAL - SEMI E125 was updated EquipmentReference to ExceptionInstance for consistency and reworked the object. // INTERNAL - This message defined in SEMI E125 is no longer required // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - message ExceptionType // INTERNAL - { string exception_id = 1; // INTERNAL - string description = 2; // INTERNAL - ExceptionSeveritySpecifier severity = 3; // INTERNAL - oneof SecsInformation { SECSExceptionRefType secs_exception = 4; // Populated if exception corresponds to a SECS alarm } // INTERNAL - // INTERNAL - SEMI E125 was updated to remove ExceptionName attribute and ExceptionParameters associated definition // INTERNAL - // INTERNAL - } // Specifies information about a SECS Alarm message SECSExceptionRefType { uint64 secs_alid = 1; // Use uint64 data type because largest ALID per SEMI E5 is // 8 byte integer (unsigned). uint64 secs_set_ceid = 2; // Use uint64 data type because largest CEID per SEMI E5 is // 8 byte integer (unsigned). uint64 secs_clear_ceid = 3; // Use uint64 data type because largest CEID per SEMI E5 is // 8 byte integer (unsigned). } message ExceptionInstanceType { string exception_name = 1; string exception_id = 2; repeated EquipmentParameterReferenceType exception_parameters = 3; } message EquipmentNodeDescriptionType // INTERNAL - { string equipment_node_id = 1; // Identifies an Equipment node // INTERNAL - SEMI E125.1 used SEMI E120 schema's LocatorType pattern to define structure // INTERNAL - of string text value. This will be handled by implementing code // INTERNAL - repeated StateMachineReferenceType state_machine_references = 2; repeated StateMachineInstanceType state_machine_instances = 3; // INTERNAL - repeated SEMIObjTypeReferenceType semi_obj_type_references = 4; // INTERNAL - SEMI E125 was reworked and this specific element from SEMI E125.1 no longer applies // INTERNAL - repeated ExceptionInstanceType exception_instances = 5; // INTERNAL - SEMI E125 was reworked and this specific element from SEMI E125.1 no longer applies // INTERNAL - repeated EquipmentParameterReferenceType parameter_references = 6; // INTERNAL - SEMI E125 was reworked and this specific element from SEMI E125.1 no longer applies // INTERNAL - repeated SimpleEventInstanceType simple_event_instances = 7; // INTERNAL - // INTERNAL - SEMI E125 was reworked and this specific element from SEMI E125.1 no longer applies // INTERNAL - } // INTERNAL - With E125.1, the SessionId of the EDA Client was specified in the SOAP Header // INTERNAL - With gRPC/Protocol Buffers, it will be specified in the gRPC metadata // INTERNAL - // Currently no information to be passed in this message message GetUnitsRequestType // INTERNAL - { } message GetUnitsResponseType // INTERNAL - { // INTERNAL - Use Units defined in SEMI E179 repeated UnitType units = 1; // INTERNAL - // INTERNAL - Even though Error information is not defined in E125's method definition, // INTERNAL - it was supported in the E125.1 implementation oneof ErrorInformation // INTERNAL - { ErrorType error = 2; // Use this for regular errors that use ErrorType content // for example UnrecognizedSession // INTERNAL - < UnauthorizedOperationType unauthorized_operation_error = 3; } } // Currently no information to be passed in this message message GetTypeDefinitionsRequestType // INTERNAL - { } message GetTypeDefinitionsResponseType // INTERNAL - { repeated TypeDefinitionType type_definitions = 1; // INTERNAL - // INTERNAL - Even though Error information is not defined in E125's method definition, // INTERNAL - it was supported in the E125.1 implementation oneof ErrorInformation // INTERNAL - { ErrorType error = 2; // Use this for regular errors that use ErrorType content // for example UnrecognizedSession // INTERNAL - < UnauthorizedOperationType unauthorized_operation_error = 3; } } // Currently no information to be passed in this message message GetStateMachinesRequestType // INTERNAL - { } message GetStateMachinesResponseType // INTERNAL - { repeated StateMachineType state_machines = 1; // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - Even though Error information is not defined in E125's method definition, // INTERNAL - it was supported in the E125.1 implementation oneof ErrorInformation // INTERNAL - { ErrorType error = 2; // Use this for regular errors that use ErrorType content // for example UnrecognizedSession // INTERNAL - < UnauthorizedOperationType unauthorized_operation_error = 3; } } // Currently no information to be passed in this message message GetSEMIObjTypesRequestType // INTERNAL - { } message GetSEMIObjTypesResponseType // INTERNAL - { repeated SEMIObjType obj_types = 1; // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - Even though Error information is not defined in E125's method definition, // INTERNAL - it was supported in the E125.1 implementation oneof ErrorInformation // INTERNAL - { ErrorType error = 2; // Use this for regular errors that use ErrorType content // for example UnrecognizedSession // INTERNAL - < UnauthorizedOperationType unauthorized_operation_error = 3; } } // Currently no information to be passed in this message message GetExceptionsRequestType // INTERNAL - { } message GetExceptionsResponseType // INTERNAL - { repeated ExceptionType exceptions = 1; // INTERNAL - // INTERNAL - // INTERNAL - Even though Error information is not defined in E125's method definition, // INTERNAL - it was supported in the E125.1 implementation oneof ErrorInformation // INTERNAL - { ErrorType error = 2; // Use this for regular errors that use ErrorType content // for example UnrecognizedSession // INTERNAL - < UnauthorizedOperationType unauthorized_operation_error = 3; } } // Currently no information to be passed in this message message GetParametersRequestType { } message GetParametersResponseType { repeated ParameterType parameters = 1; // Unordered list of Parameters // INTERNAL - // INTERNAL - Even though Error information is not defined in E125's method definition, // INTERNAL - it was supported in the E125.1 implementation oneof error_information // INTERNAL - { ErrorType error = 2; // Use this for regular errors that use ErrorType content // for example UnrecognizedSession // INTERNAL - < UnauthorizedOperationType unauthorized_operation_error = 3; } } // Currently no information to be passed in this message message GetSimpleEventsRequestType { } message GetSimpleEventsResponseType { repeated SimpleEventType simple_events = 1; // Unordered list of SimpleEvent // INTERNAL - // INTERNAL - Even though Error information is not defined in E125's method definition, // INTERNAL - it was supported in the E125.1 implementation oneof ErrorInformation // INTERNAL - { ErrorType error = 2; // Use this for regular errors that use ErrorType content // for example UnrecognizedSession // INTERNAL - < UnauthorizedOperationType unauthorized_operation_error = 3; } } // Currently no information to be passed in this message message GetEquipmentStructureRequestType // INTERNAL - { } message GetEquipmentStructureResponseType // INTERNAL - { EquipmentElementType equipment_structure = 1; // Structured data that represents the equipment as a whole // Type deriving from SEMI E120 EquipmentElement // INTERNAL - SEMI E125.1 would return the Equipment information as cem:Equipment // INTERNAL - where the Equipment element is defined in E120-1-V0310-Schema.xsd, // INTERNAL - // INTERNAL - // INTERNAL - Even though Error information is not defined in E125's method definition, // INTERNAL - it was supported in the E125.1 implementation oneof ErrorInformation // INTERNAL - { ErrorType error = 2; // Use this for regular errors that use ErrorType content // for example UnrecognizedSession // INTERNAL - < UnauthorizedOperationType unauthorized_operation_error = 3; } } message GetEquipmentNodeDescriptionsRequestType // INTERNAL - { repeated string equipment_node_ids = 1; // INTERNAL - SEMI E125.1 used SEMI E120 schema's LocatorType pattern to define structure // INTERNAL - of string text value. This will be handled by implementing code // INTERNAL - uint32 filter = 2; } message NodeDescriptionResultType // INTERNAL - { repeated EquipmentNodeDescriptionType node_descriptions = 1; // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - // INTERNAL - repeated string unrecognized_ids = 2; // INTERNAL - SEMI E125.1 used SEMI E120 schema's LocatorType pattern to define structure // INTERNAL - of string text value. This will be handled by implementing code // INTERNAL - } message GetEquipmentNodeDescriptionsResponseType // INTERNAL - { NodeDescriptionResultType equipment_node_description = 1; // INTERNAL - // INTERNAL - // INTERNAL - Even though Error information is not defined in E125's method definition, // INTERNAL - it was supported in the E125.1 implementation oneof error_information // INTERNAL - { ErrorType error = 2; // Use this for regular errors that use ErrorType content // for example UnrecognizedSession // INTERNAL - < UnauthorizedOperationType unauthorized_operation_error = 3; } } // Currently no information to be passed in this message message GetLatestRevisionRequestType // INTERNAL - { } message GetLatestRevisionResponseType // INTERNAL - { google.protobuf.Timestamp revision_date_time = 1; // INTERNAL - E125.1 specified type as DateTime, but Primary standard says this field is text. // INTERNAL - string metadata_fingerprint = 2; // INTERNAL - // INTERNAL - Even though Error information is not defined in E125's method definition, // INTERNAL - it was supported in the E125.1 implementation oneof error_information // INTERNAL - { ErrorType error = 3; // Use this for regular errors that use ErrorType content // for example UnrecognizedSession // INTERNAL - < UnauthorizedOperationType unauthorized_operation_error = 4; } } message NotifyOnRevisionsRequestType // INTERNAL - { bool enable = 1; // INTERNAL - } message NotifyOnRevisionsResponseType // INTERNAL - { // INTERNAL - Even though Error information is not defined in E125's method definition, // INTERNAL - it was supported in the E125.1 implementation oneof ErrorInformation // INTERNAL - { ErrorType error = 1; // Use this for regular errors that use ErrorType content // for example UnrecognizedSession // INTERNAL - < UnauthorizedOperationType unauthorized_operation_error = 2; } } message MetadataRevisedNotificationType // INTERNAL - { google.protobuf.Timestamp revision_date_time = 1; // INTERNAL - E125.1 specified type as DateTime, but Primary standard says this field is text. // INTERNAL - string metadata_fingerprint = 2; } // Container message for all the items that could be sent on the stream to the server related to Equipment Metadata // Note - Define the message as empty to accommodate future changes // (if adding input parameters, don't need to change the method interface) message EquipmentMetadataNotificationUsageStreamRequest { // INTERNAL - If in the future we have messages that could be sent on the stream // INTERNAL - it should be defined in the oneof structure // INTERNAL - oneof Request // INTERNAL - { // INTERNAL - // Add message definition // INTERNAL - } } // Container message for all the items that could be sent on the stream from the server // related to equipment metadata (unprompted information from the Server) message EquipmentMetadataNotificationUsageStreamResponse { oneof result { MetadataRevisedNotificationType metadata_revised_notification = 1; // INTERNAL - Webservice - } } // Container message for all the items that could be sent on the stream from the server related to Status Data message ConsumerEquipmentMetadataNotificationUsageStreamRequest { oneof request { MetadataRevisedNotificationType metadata_revised_notification = 1; // INTERNAL - Webservice - } } // Container message for all the items that could be sent on the stream to the server // Note - Define the message as empty to accommodate future changes // (if adding input parameters, don't need to change the method interface) message ConsumerEquipmentMetadataNotificationUsageStreamResponse { // INTERNAL - If in the future we have messages that could be sent on the stream // INTERNAL - it should be defined in the oneof structure // INTERNAL - oneof Result // INTERNAL - { // INTERNAL - // Add message definition // INTERNAL - } } // *************************************************************** // Service Definitions // *************************************************************** // This gRPC service looks after equipment metadata functionality defined in SEMI E125 that is handled by a Client (management and receiving messages) service E125EquipmentMetadataManagement { // ********************************************************************* // Unary Request/Response methods to manage equipment metadata // ********************************************************************* // INTERNAL - WebService - // INTERNAL - WebService - rpc GetUnits (GetUnitsRequestType) returns (GetUnitsResponseType){}; // INTERNAL - WebService - // INTERNAL - WebService - rpc GetTypeDefinitions (GetTypeDefinitionsRequestType) returns (GetTypeDefinitionsResponseType){}; // INTERNAL - WebService - // INTERNAL - WebService - rpc GetStateMachines (GetStateMachinesRequestType) returns (GetStateMachinesResponseType){}; // // INTERNAL - WebService - // INTERNAL - WebService - rpc GetSEMIObjTypes (GetSEMIObjTypesRequestType) returns (GetSEMIObjTypesResponseType){}; // INTERNAL - WebService - // INTERNAL - WebService - rpc GetExceptions (GetExceptionsRequestType) returns (GetExceptionsResponseType){}; rpc GetParameters (GetParametersRequestType) returns (GetParametersResponseType){}; rpc GetSimpleEvents (GetSimpleEventsRequestType) returns (GetSimpleEventsResponseType){}; // INTERNAL - WebService - // INTERNAL - WebService - rpc GetEquipmentStructure (GetEquipmentStructureRequestType) returns (GetEquipmentStructureResponseType){}; // INTERNAL - WebService - // INTERNAL - WebService - rpc GetEquipmentNodeDescriptions (GetEquipmentNodeDescriptionsRequestType) returns (GetEquipmentNodeDescriptionsResponseType){}; // INTERNAL - WebService - // INTERNAL - WebService - rpc GetLatestRevision (GetLatestRevisionRequestType) returns (GetLatestRevisionResponseType){}; // INTERNAL - WebService - // INTERNAL - WebService - rpc NotifyOnRevisions (NotifyOnRevisionsRequestType) returns (NotifyOnRevisionsResponseType){}; // ********************************************************************* // Streaming methods // ********************************************************************* // Note - there is no streaming gRPC method in this service for operational messages // from the Equipment Server since SEMI E125 does not support operational messages. // Establish stream to and from the Equipment Server for notification messages // Separate RPC method because not all Consumers are interested in these messages // INTERNAL - Put all messages related to 'unprompted' notification messages from the server into one stream // INTERNAL - coming from the EDA Server. This means several existing WebService are combined into one gRPC method // INTERNAL - // INTERNAL - Client -> Server messages // INTERNAL - Use a bi-directional stream, even though there won't be any messages going to the server // INTERNAL - This is for future functionality to make it easier to support sending a message to the Server on the stream, // INTERNAL - without changing the method interface // INTERNAL - Server -> Client messages // INTERNAL - Webservice - rpc EquipmentMetadataNotificationUsageStream (stream EquipmentMetadataNotificationUsageStreamRequest) returns (stream EquipmentMetadataNotificationUsageStreamResponse) {} } // This gRPC service looks after equipment metadata functionality defined in SEMI E125 that is handled by a Consumer // It is in a separate service because the Equipment Server opens the connection to the Consumer. service E125EquipmentMetadataConsumer { // ********************************************************************* // Unary Request/Response methods related tzo data collection // ********************************************************************* // None // ********************************************************************* // Streaming methods // ********************************************************************* // Note - there is no streaming gRPC method in this service for operational messages // from the Equipment Server since SEMI E125 does not support operational messages. // Establish stream to and from the Consumer for notification messages // Separate RPC method because not all Consumers are interested in these messages // INTERNAL - Put all messages related to 'unprompted' notification messages from the server into one stream // INTERNAL - coming from the EDA Server. This means several existing WebService are combined into one gRPC method // INTERNAL - // INTERNAL - Server -> Consumer messages // INTERNAL - Webservice - // INTERNAL - Consumer -> Server messages // INTERNAL - Use a bi-directional stream, even though there won't be any messages going to the server // INTERNAL - This is for future functionality to make it easier to support sending a message to the Server on the stream, // INTERNAL - without changing the method interface rpc ConsumerEquipmentMetadataNotificationUsageStream (stream ConsumerEquipmentMetadataNotificationUsageStreamRequest) returns (stream ConsumerEquipmentMetadataNotificationUsageStreamResponse) {} }