// 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 E134 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-1225.proto"; import "semi_e125-02-1225.proto"; import "semi_e132-02-1225.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 E134.2", proto_buf_file_version : "SEMIE134-02-1225" }; // *************************************************************** // 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. enum JobType { JOB_TYPE_UNSPECIFIED = 0; // Value when unspecified enum value is received - per Protocol Buffers best practice SEMI_E94_CONTROL_JOB = 1; SEMI_E40_PROCESS_JOB = 2; SEMI_E30_PP_SELECT = 3; SEMI_E30_RCP_SELECT = 4; reserved 5 to 200; // Reserved for future use } // Specifies possible values for Exception's state enum ExceptionState { EXCEPTION_STATE_UNSPECIFIED = 0; // Value when unspecified enum value is received - per Protocol Buffers best practice SET_STATE = 1; CLEAR_STATE = 2; NO_STATE = 3; reserved 4 to 200; // Reserved for future use } // *************************************************************** // Message Definitions // *************************************************************** // Represents one report type (TraceReport, EventReport or ExceptionReport) message ReportType { oneof report { TraceReportType trace_report = 1; EventReportType event_report = 2; ExceptionReportType exception_report = 3; CachedDataReportType cached_data_report = 4; } } message EventReportType { uint32 event_request_id = 1; // Unique identifier specified in the event request string source_id = 2; string event_name = 3; google.protobuf.Timestamp event_time = 4; uint64 numeric_id = 5; // Use uint64 data type because largest CEID per SEMI E5 is // 8 byte integer (unsigned). repeated ParameterValueType parameter_values = 6; // Maps to ParameterValues } message ExceptionReportType { uint32 exception_request_id = 1; // Unique identifier for this exception report string source_id = 2; string exception_name = 3; string description = 4; google.protobuf.Timestamp exception_time = 5; ExceptionSeveritySpecifier severity = 6; ExceptionState state = 7; uint64 numeric_id = 8; // Use uint64 data type because largest ALID per SEMI E5 is // 8 byte integer (unsigned). string details = 9; repeated ParameterValueType parameter_values = 10; // Maps to ParameterValues } message TraceReportType { uint32 trace_request_id = 1; google.protobuf.Timestamp report_time = 2; oneof start_trigger_time { google.protobuf.Timestamp start_trigger_timestamp = 3; } oneof stop_trigger_time { google.protobuf.Timestamp stop_trigger_timestamp = 4; } repeated TriggerSelectorType start_on = 5; repeated TriggerSelectorType stop_on = 6; repeated CollectedDataType collected_data = 7; } // Information about the collected data message CollectedDataType { uint32 index = 1; // Use uint32 since the index is always a positive number (starts at 1) google.protobuf.Timestamp collection_time = 2; repeated ParameterValueType parameter_values = 3; // Maps to ParameterValues } message CachedDataReportType { uint32 cached_data_request_id = 1; // Unique identifier specified in the cached data request google.protobuf.Timestamp report_time = 2; oneof start_trigger_time { google.protobuf.Timestamp start_trigger_timestamp = 3; } oneof stop_trigger_time { google.protobuf.Timestamp stop_trigger_timestamp = 4; } google.protobuf.Timestamp collection_time = 5; float collection_interval = 6; repeated TriggerSelectorType start_on = 7; repeated TriggerSelectorType stop_on = 8; repeated ArrayParameterValue parameter_array_values = 11; oneof error_information { CachedDataCollectionErrorType data_collection_error = 12; } } // Information about data collection errors processing a cached data report message CachedDataCollectionErrorType { uint32 error_code = 1; // Valid values 1 through 255 string description = 2; repeated uint32 not_valid_value_indicies = 3; } // Defines various trigger types (Event-based and Exception-based) // Can have multiple triggers of each type message TriggerSelectorType { oneof trigger { EventTriggerType event_triggers = 1; ExceptionTriggerType exception_triggers = 2; } } // Specifies the Event Trigger information message EventTriggerType { uint32 event_trigger_id = 1; // Unique identifier for this event trigger string source_id = 2; string event_name = 3; string state_machine = 4; // Corresponding State machine instance or state machine reference (if any) repeated ConditionType conditions = 5; } // Describes the Condition information // Note - ConditionValue should be a single data type value (not an Array or Structured item) message ConditionType { OperatorType operator = 1; ParameterValueType condition_value = 2; ParameterRequestType parameter = 3; } message ExceptionTriggerType { uint32 exception_trigger_id = 1; // Unique identifier for this exception trigger string source_id = 2; string exception_name = 3; ExceptionState exception_state = 4; } // *************************************************************** // Data Management Messages // *************************************************************** message ParameterRequestType { string source_id = 1; string parameter_name = 2; } message EventRequestType { uint32 event_request_id = 1; // Unique identifier for this event report string source_id = 2; string event_name = 3; string state_machine = 4; // Corresponding State machine instance or state machine reference (if any) repeated ParameterRequestType parameter_requests = 5; } message ExceptionRequestType { uint32 exception_request_id = 1; // Unique identifier for this exception report string source_id = 2; string exception_name = 3; ExceptionSeveritySpecifier severity = 4; } message TraceRequestType { uint32 trace_request_id = 1; // Unique identifier specified in the trace request float interval_in_seconds = 2; uint32 collection_count = 3; // Collection Count defined to be a positive integer, so use uint32 uint32 group_size = 4; // Group size defined to be a positive integer, so use uint32 bool is_cyclical = 5; repeated TriggerSelectorType start_on = 6; repeated TriggerSelectorType stop_on = 7; repeated ParameterRequestType parameter_requests = 8; } message CachedDataRequestType { uint32 cached_data_request_id = 1; // Unique identifier specified in the cached data request float collection_interval = 2; uint32 collection_count = 3; // Collection Count defined to be a positive integer, so use uint32 uint32 reporting_interval = 4; // Reporting Interval defined to be a positive integer, so use uint32 bool is_cyclical = 5; // If there is no trigger, do not populate the oneof field. repeated TriggerSelectorType start_on = 6; repeated TriggerSelectorType stop_on = 7; repeated ParameterRequestType parameter_requests = 8; } message RequestType { oneof request { EventRequestType event_request = 1; ExceptionRequestType exception_request = 2; TraceRequestType trace_request = 3; CachedDataRequestType cached_data_request = 4; } } message DataCollectionPlanType { string plan_name = 1; string plan_id = 2; uint32 buffer_time_in_seconds = 3; // BufferTimeInSeconds defined to be a positive integer, so use uint32 bool is_persistent = 4; string description = 5; repeated RequestType requests = 6; // Use RequestType to access oneof possible request type (Event, Exception, Trace) } message DCPDefinedType { string plan_id = 1; string plan_name = 2; google.protobuf.Timestamp time_defined = 3; // If this message is used as part of a client query response, use a plain-text ID. For example: InvalidPlanType, DefinePlanResponseType, GetDefinePlanIdsResponseType and ActivatePlanRequestType. // If this message is used as part of a notification usage stream, use a hashed ID. For example: DataCollectionNotificationUsageStreamResponse and ConsumerDataCollectionNotificationUsageStreamRequest. // Refer to SEMI E134.2 requirements. oneof defined_by { string client_id = 4; // ClientID value in plain-text string client_id_hash = 5; // ClientID value hashed } string description = 6; } message InvalidEventRequestType { string source_id = 1; string event_name = 2; bool invalid_source_id = 3; bool invalid_event_name = 4; bool not_produced_by_source = 5; bool is_duplicate = 6; bool is_request_id_invalid = 7; uint32 invalid_request_id = 8; repeated InvalidParameterRequestType invalid_parameters = 9; } message InvalidExceptionRequestType { string source_id = 1; string exception_name = 2; ExceptionSeveritySpecifier severity = 3; bool invalid_source_id = 4; bool invalid_exception_name = 5; bool invalid_severity = 6; bool not_produced_by_source = 7; bool is_duplicate = 8; bool is_request_id_invalid = 9; uint32 invalid_request_id = 10; } message InvalidParameterRequestType { string source_id = 1; string parameter_name = 2; bool invalid_source_id = 3; bool invalid_parameter_name = 4; bool not_produced_by_source = 5; bool invalid_context = 6; bool not_available_for_cached_data = 7; } message InvalidConditionType { bool unknown_operator = 1; bool bad_operator = 2; bool unknown_parameter = 3; bool invalid_parameter = 4; bool bad_value = 5; } message InvalidTriggerType { string source_id = 1; string item_name = 2; bool invalid_start_trigger = 3; bool invalid_event_trigger = 4; bool invalid_exception_state = 5; bool invalid_source_id = 6; bool invalid_item_name = 7; bool not_produced_by_source = 8; bool is_duplicate = 9; bool is_trigger_id_invalid = 10; uint32 invalid_trigger_id = 11; repeated InvalidConditionType invalid_conditions = 12; } message InvalidTraceRequestType { uint32 trace_request_id = 1; bool is_request_id_invalid = 2; repeated InvalidParameterRequestType invalid_parameters = 3; repeated InvalidTriggerType invalid_triggers = 4; // Use oneof structure to enforce 0..1 relationship - if the Interval is invalid, // implementing code should assign a value to InvalidInterval field. oneof invalid_interval_specified { InvalidIntervalType invalid_interval = 5; } // Use oneof structure to enforce 0..1 relationship - if the Cycle is invalid, // implementing code should assign a value to InvalidCycle field. oneof invalid_cycle_specified { InvalidCycleType invalid_cycle = 6; } // Use oneof structure to enforce 0..1 relationship - if the Cycle is invalid, // implementing code should assign a value to InvalidGroupSizeForInterval field. oneof invalid_group_size_for_interval_specified { InvalidGroupSizeForIntervalType invalid_group_size_for_interval = 7; } } // Although ValidInterval value could just be included in parent message, it // is defined in this message to map to current E134 specification. // (so if another attribute is added to the object in the specification, // it doesn't require an interface change in the .proto file) message InvalidIntervalType { float valid_interval = 1; // Valid trace interval closest to the requested interval } message InvalidCycleType { bool needs_start_trigger = 1; bool needs_stop_trigger = 2; } // Although ValidGroupSize value could just be included in parent message, it // is defined in this message to map to current E134 specification. // (so if another attribute is added to the object in the specification, // it doesn't require an interface change in the .proto file) message InvalidGroupSizeForIntervalType { uint32 valid_group_size = 1; // Smallest groupSize value allowed for the requested IntervalInSeconds } message InvalidCachedDataRequestType { uint32 cached_data_request_id = 1; bool is_request_id_invalid = 2; repeated InvalidParameterRequestType invalid_parameters = 3; repeated InvalidTriggerType invalid_triggers = 4; // Use oneof structure to enforce 0..1 relationship - if the Interval is invalid, // implementing code should assign a value to InvalidInterval field. oneof invalid_interval_specified { InvalidIntervalType invalid_interval = 5; } // Use oneof structure to enforce 0..1 relationship - if the Cycle is invalid, // implementing code should assign a value to InvalidCycle field. oneof invalid_cycle_specified { InvalidCycleType invalid_cycle = 6; } // Use oneof structure to enforce 0..1 relationship - if the Cycle is invalid, // implementing code should assign a value to InvalidReportingInterval field. oneof invalid_reporting_interval_specified { InvalidReportingIntervalType invalid_reporting_interval = 7; } } // Although ValidReportingInterval value could just be included in parent message, it // is defined in this message to map to current E134 specification. // (so if another attribute is added to the object in the specification, // it doesn't require an interface change in the .proto file) message InvalidReportingIntervalType { uint32 valid_reporting_interval = 1; // Reporting Interval defined to be a positive integer, so use uint32 } message InvalidPlanType { string plan_id = 1; string description = 2; repeated InvalidEventRequestType invalid_events = 3; repeated InvalidExceptionRequestType invalid_exceptions = 4; DCPDefinedType duplicate_plan_id = 5; repeated InvalidTraceRequestType invalid_trace_requests = 6; repeated InvalidCachedDataRequestType invalid_cached_data_requests = 7; } message DCPActivatedType { string plan_id = 1; string plan_name = 2; google.protobuf.Timestamp time_activated = 3; // If this message is used as part of a client query response, use a plain-text ID. For example: PerformanceStatusType, ActivatePlanResponseType, GetActivePlanIdsResponseType and DeletePlanResponseType. // If this message is used as part of a notification usage stream, use a hashed ID. For example: DataCollectionNotificationUsageStreamResponse and ConsumerDataCollectionNotificationUsageStreamRequest. // Refer to SEMI E134.2 requirements. oneof activated_by { string client_id = 4; // ClientID value in plain-text string client_id_hash = 5; // ClientID value hashed } string description = 6; } message DCPDeactivatedType { string plan_id = 1; google.protobuf.Timestamp time_deactivated = 2; // If this message is used as part of a client query response, use a plain-text ID. For example: DeactivatePlanResponseType // If this message is used as part of a notification usage stream, use a hashed ID. For example: DataCollectionNotificationUsageStreamResponse and ConsumerDataCollectionNotificationUsageStreamRequest. // Refer to SEMI E134.2 requirements. oneof deactivated_by { string client_id = 3; // ClientID value in plain-text string client_id_hash = 4; // ClientID value hashed } string reason = 5; } message DCPDeactivationType { repeated DCPDeactivatedType deactivation_notice = 1; } message DCPDeletedType { string plan_id = 1; google.protobuf.Timestamp time_deleted = 2; // If this message is used as part of a client query response, use a plain-text ID. For example: DeletePlanResponseType // If this message is used as part of a notification usage stream, use a hashed ID. For example: DataCollectionNotificationUsageStreamResponse and ConsumerDataCollectionNotificationUsageStreamRequest. // Refer to SEMI E134.2 requirements. oneof deleted_by { string client_id = 3; // ClientID value in plain-text string client_id_hash = 4; // ClientID value hashed } } message DCPActivationType { repeated DCPActivatedType activation_notices = 1; } message ObjTypeRequestType { string source_id = 1; string obj_type_id = 2; } message ObjTypeRequestErrorType { bool invalid_source = 1; bool invalid_obj_type = 2; bool source_does_not_produce_obj_type = 3; } message ObjTypeResultType { string source_id = 1; string obj_type_id = 2; oneof result { // Protocol Buffers does not support repeated datatypes within a oneof structure. Use helper Protocol Buffer messages to represented the repeated datatypes. ArrayObjTypeInstanceType obj_type_instances = 3; ObjTypeRequestErrorType obj_type_request_error = 4; } } // Array of ObjTypeInstanceIDs message ArrayObjTypeInstanceType { repeated string instance_ids = 1; } message ActiveJobType { string job_id = 1; JobType job_type = 2; } message AffectedSystemType { string equipment_component = 1; string description = 2; } message PerformanceStatusType { google.protobuf.Timestamp time_last_evaluated = 1; bool is_below_threshold = 2; string description = 3; repeated DCPActivatedType active_plans = 4; // Corresponds to activePlans parameter in E134 repeated ActiveJobType active_jobs = 5; // Corresponds to activeJobs parameter in E134 repeated AffectedSystemType affected_systems = 6; // Corresponds to affectedSystems in E134 } message DCPHibernatedType { string plan_id = 1; google.protobuf.Timestamp time_hibernated = 2; } message DCPHibernationType { repeated DCPHibernatedType hibernating_plans = 1; } message DefinePlanRequestType { DataCollectionPlanType new_plan = 1; } message DefinePlanResponseType { DCPDefinedType plan_defined = 1; oneof error_information { ErrorType error = 2; // Use this for regular errors that use ErrorType content // for example UnrecognizedSession UnauthorizedOperationType unauthorized_operation_error = 3; InvalidPlanType invalid_plan_error = 4; } } // Note - Define the message as empty to accommodate future changes // (if adding input parameters, don't need to change the method interface) message GetDefinedPlanIdsRequestType { } message GetDefinedPlanIdsResponseType { repeated DCPDefinedType defined_plans = 1; oneof error_information { ErrorType error = 2; // Use this for regular errors that use ErrorType content // for example UnrecognizedSession UnauthorizedOperationType unauthorized_operation_error = 3; } } message GetPlanDefinitionRequestType { string plan_id = 1; } message GetPlanDefinitionResponseType { DataCollectionPlanType plan_definition = 1; oneof error_information { ErrorType error = 2; // Use this for regular errors that use ErrorType content // for example UnrecognizedSession UnauthorizedOperationType unauthorized_operation_error = 3; string no_such_plan_error = 4; // If specified, string is the PlanID that does not exist. } } message ActivatePlanRequestType { string plan_id = 1; } message ActivatePlanResponseType { DCPActivatedType activated_plan = 1; oneof error_information { ErrorType error = 2; // Use this for regular errors that use ErrorType content // for example UnrecognizedSession UnauthorizedOperationType unauthorized_operation_error = 3; string no_such_plan_error = 4; // If specified, string is the PlanID that does not exist. InvalidPlanType invalid_plan_error = 5; DCPActivatedType dcp_is_active_error = 6; } } message GetActivePlanIdsRequestType { } message GetActivePlanIdsResponseType { repeated DCPActivatedType activated_plans = 1; // Corresponds to activePlans parameter in E134.GetActivePlanIds oneof error_information { ErrorType error = 2; // Use this for regular errors that use ErrorType content // for example UnrecognizedSession UnauthorizedOperationType unauthorized_operation_error = 3; } } message DeactivatePlanRequestType { string plan_id = 1; bool terminate = 2; } message DeactivatePlanResponseType { DCPDeactivatedType deactivated_plan = 1; oneof error_information { ErrorType error = 2; // Use this for regular errors that use ErrorType content // for example UnrecognizedSession UnauthorizedOperationType unauthorized_operation_error = 3; string no_such_plan_error = 4; // If specified, string is the PlanID that does not exist. string dcp_not_active_error = 5; // If specified, string is the PlanID that is not active. } } message DeletePlanRequestType { string plan_id = 1; } message DeletePlanResponseType { DCPDeletedType deleted_plan = 1; oneof error_information { ErrorType error = 2; // Use this for regular errors that use ErrorType content // for example UnrecognizedSession UnauthorizedOperationType unauthorized_operation_error = 3; string no_such_plan_error = 4; // If specified, string is the PlanID that does not exist. DCPActivatedType dcp_is_active_error = 5; } } message GetParameterValuesRequestType { repeated ParameterRequestType parameter_requests = 1; } message GetParameterValuesResponseType { google.protobuf.Timestamp report_time = 1; repeated ParameterValueType parameter_values = 2; oneof error_information { ErrorType error = 3; // Use this for regular errors that use ErrorType content // for example UnrecognizedSession UnauthorizedOperationType unauthorized_operation_error = 4; } } message GetObjTypeInstanceIdsRequestType { repeated ObjTypeRequestType obj_types = 1; } message GetObjTypeInstanceIdsResponseType { repeated ObjTypeResultType obj_type_results = 1; oneof error_information { ErrorType error = 2; // Use this for regular errors that use ErrorType content // for example UnrecognizedSession UnauthorizedOperationType unauthorized_operation_error = 3; } } message GetCurrentPerformanceStatusRequestType { } message GetCurrentPerformanceStatusResponseType { PerformanceStatusType status = 1; oneof error_information { ErrorType error = 2; // Use this for regular errors that use ErrorType content // for example UnrecognizedSession UnauthorizedOperationType unauthorized_operation_error = 3; } } message GetCurrentDateTimeRequestType { } message GetCurrentDateTimeResponseType { google.protobuf.Timestamp current_time = 1; oneof error_information { ErrorType error = 2; // Use this for regular errors that use ErrorType content // for example UnrecognizedSession UnauthorizedOperationType unauthorized_operation_error = 3; } } message GetCurrentSetExceptionsRequestType { } // Describes the exception set on the equipment message SetExceptionReportType { string source_id = 1; string exception_name = 2; string description = 3; google.protobuf.Timestamp exception_time = 4; ExceptionSeveritySpecifier severity = 5; } message GetCurrentSetExceptionsResponseType { repeated SetExceptionReportType set_exceptions = 1; oneof error_information { ErrorType error = 2; // Use this for regular errors that use ErrorType content // for example UnrecognizedSession UnauthorizedOperationType unauthorized_operation_error = 3; } } message GetObjTypeAttributesRequestType { ObjTypeRequestType obj_type = 1; repeated string obj_ids = 2; repeated string attr_ids = 3; } message ObjTypeAttributeResultType { string source_id = 1; string obj_type_id = 2; oneof result { // Protocol Buffers does not support repeated datatypes within a oneof structure. // Use helper Protocol Buffer messages to represented the repeated datatypes. ArrayObjTypeAttributeType obj_type_attributes = 3; ObjTypeRequestErrorType obj_type_request_error = 4; } } // Array of ObjectAttributeValueType message ArrayObjTypeAttributeType { repeated ObjectAttributeValueType obj_attribute_values = 1; } // Represents ObjectAttributeValues object from SEMI E134 message ObjectAttributeValueType { string obj_id = 1; repeated AttributeDataType attr_data_list = 2; } message AttributeDataType { string attribute_id = 1; ParameterValueType attribute_value = 2; } message GetObjTypeAttributesResponseType { ObjTypeAttributeResultType obj_type_attribute_result = 1; oneof error_information { ErrorType error = 2; // Use this for regular errors that use ErrorType content // for example UnrecognizedSession UnauthorizedOperationType unauthorized_operation_error = 3; } } message NewDataType { // This message is the content of the DataCollectionReport class google.protobuf.Timestamp report_time = 1; string plan_id = 2; google.protobuf.Timestamp buffer_start_time = 3; google.protobuf.Timestamp buffer_end_time = 4; repeated ReportType reports = 5; } // Container message for all the items that could be sent on the stream for the ConsumerData message ConsumerDataCollectionUsageStreamRequest { oneof request { NewDataType new_data = 1; } } // Container message for all the items that could be sent on the stream from the consumer to the EDA Server // when the EDA Server initiated gRPC Communications // Note - Define the message as empty to accommodate future changes // (if adding input parameters, don't need to change the method interface) message ConsumerDataCollectionUsageStreamResponse { } // Container message for all the items that could be sent on the stream to the server related to Status Data // Note - Define the message as empty to accommodate future changes // (if adding input parameters, don't need to change the method interface) message DataCollectionNotificationUsageStreamRequest { } // Container message for all the items that could be sent on the stream from the server // related to status (unprompted information from the Server) message DataCollectionNotificationUsageStreamResponse { oneof result { PerformanceStatusType performance_warning_notification = 1; PerformanceStatusType performance_restored_notification = 2; DCPDeactivationType dcp_deactivation_notification = 3; DCPHibernationType dcp_hibernation_notification = 4; DCPDefinedType dcp_defined_notification = 5; DCPDeletedType dcp_deleted_notification = 6; DCPActivationType dcp_activation_notification = 7; } } // Container message for all the items that could be sent on the stream from the server related to Status Data message ConsumerDataCollectionNotificationUsageStreamRequest { oneof request { PerformanceStatusType performance_warning_notification = 1; PerformanceStatusType performance_restored_notification = 2; DCPDeactivationType dcp_deactivation_notification = 3; DCPHibernationType dcp_hibernation_notification = 4; DCPDefinedType dcp_defined_notification = 5; DCPDeletedType dcp_deleted_notification = 6; DCPActivationType dcp_activation_notification = 7; } } // 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 ConsumerDataCollectionNotificationUsageStreamResponse { } // Container message for all the items that could be sent on the stream from the consumer to the server for collected data // (when gRPC communications is established by the EDA Consumer) message DataCollectionUsageStreamRequest { } // Container message for all the items that could be sent on the stream from the EDA Server to the consumer // (when gRPC communications is established by the EDA Consumer) message DataCollectionUsageStreamResponse { oneof result { NewDataType new_data = 1; } } // *************************************************************** // Service Definitions // *************************************************************** // This gRPC service looks after data collection functionality defined in SEMI E134 that is handled by a Client (management and receiving messages) service E134DataCollectionManagement { // ********************************************************************* // Unary Request/Response methods to manage Data Collection metadata // ********************************************************************* rpc DefinePlan (DefinePlanRequestType) returns (DefinePlanResponseType){}; rpc GetDefinedPlanIds (GetDefinedPlanIdsRequestType) returns (GetDefinedPlanIdsResponseType) {} rpc GetPlanDefinition (GetPlanDefinitionRequestType) returns (GetPlanDefinitionResponseType) {} rpc ActivatePlan (ActivatePlanRequestType) returns (ActivatePlanResponseType) {} rpc GetActivePlanIds (GetActivePlanIdsRequestType) returns (GetActivePlanIdsResponseType) {} rpc DeactivatePlan (DeactivatePlanRequestType) returns (DeactivatePlanResponseType) {} rpc DeletePlan (DeletePlanRequestType) returns (DeletePlanResponseType) {} rpc GetParameterValues (GetParameterValuesRequestType) returns (GetParameterValuesResponseType) {} rpc GetObjTypeInstanceIds (GetObjTypeInstanceIdsRequestType) returns (GetObjTypeInstanceIdsResponseType) {} rpc GetCurrentPerformanceStatus (GetCurrentPerformanceStatusRequestType) returns (GetCurrentPerformanceStatusResponseType) {} rpc GetCurrentDateTime (GetCurrentDateTimeRequestType) returns (GetCurrentDateTimeResponseType) {} rpc GetCurrentSetExceptions (GetCurrentSetExceptionsRequestType) returns (GetCurrentSetExceptionsResponseType) {} rpc GetObjTypeAttributes(GetObjTypeAttributesRequestType) returns(GetObjTypeAttributesResponseType) {} // ********************************************************************* // Streaming methods // ********************************************************************* // Establish stream to and from the Equipment Server for operational messages rpc DataCollectionUsageStream (stream DataCollectionUsageStreamRequest) returns (stream DataCollectionUsageStreamResponse) {} // Establish stream to and from the Equipment Server for notification messages // Separate RPC method because not all Clients are interested in these messages rpc DataCollectionNotificationUsageStream (stream DataCollectionNotificationUsageStreamRequest) returns (stream DataCollectionNotificationUsageStreamResponse) {} } // This gRPC service looks after data collection functionality defined in SEMI E134 that is handled by a Consumer // It is in a separate service because the Equipment Server opens the connection to the Consumer. service E134DataCollectionConsumer { // ********************************************************************* // Unary Request/Response methods related to data collection // ********************************************************************* // None // ********************************************************************* // Streaming methods // ********************************************************************* // Establish stream to and from the Consumer for operational messages rpc ConsumerDataCollectionUsageStream (stream ConsumerDataCollectionUsageStreamRequest) returns (stream ConsumerDataCollectionUsageStreamResponse) {} // Establish stream to and from the Consumer for notification messages // Separate RPC method because not all Consumers are interested in these messages rpc ConsumerDataCollectionNotificationUsageStream (stream ConsumerDataCollectionNotificationUsageStreamRequest) returns (stream ConsumerDataCollectionNotificationUsageStreamResponse) {} }