Files
raphael a2ebbf7c65 feat(client)+feat(daemon): eq.names, @eq.command, E90/E157 RPCs
Python client:
- eq.names.event.* / .alarm.* / .command.* / .var.* / .constant.*  —
  autocomplete-able, typo-safe name lookup backed by the Describe RPC
  (lazy, cached; AttributeError on bad name with close-match hints)
- @eq.command decorator — binds a handler by function name, validated
  against the equipment's real command set at decoration time
- eq.report_substrate() — E90 wafer milestone reporting
- eq.report_module() — E157 module state reporting (auto-create)

Daemon (C++ service):
- ReportSubstrate RPC — drives E90 location + processing FSMs
- ReportModule RPC — drives E157 module FSM (auto-create on first report)
- ack_from_outcome() helper — consistent Ack mapping for read_sync results

Proto: SubstrateReport, ModuleReport, EquipmentDescription,
       SpoolFlushRequest, TerminalMessage; Describe, FlushSpool,
       SendTerminalMessage RPCs

Tests: C++ FSM test (journey + ghost rejection + E157 illegal jump);
       interop coverage for names API and E90/E157 round-trip

Docs: ch42 RPC table + Python example updated; ch16 daemon-path section added

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-26 21:43:07 +02:00

117 lines
13 KiB
Python

# -*- coding: utf-8 -*-
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: equipment.proto
# Protobuf Python Version: 4.25.0
"""Generated protocol buffer code."""
from google.protobuf import descriptor as _descriptor
from google.protobuf import descriptor_pool as _descriptor_pool
from google.protobuf import symbol_database as _symbol_database
from google.protobuf.internal import builder as _builder
# @@protoc_insertion_point(imports)
_sym_db = _symbol_database.Default()
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0f\x65quipment.proto\x12\nsecsgem.v1\"\x89\x01\n\x05Value\x12\x0e\n\x04text\x18\x01 \x01(\tH\x00\x12\x11\n\x07integer\x18\x02 \x01(\x12H\x00\x12\x0e\n\x04real\x18\x03 \x01(\x01H\x00\x12\x11\n\x07\x62oolean\x18\x04 \x01(\x08H\x00\x12\x10\n\x06\x62inary\x18\x05 \x01(\x0cH\x00\x12 \n\x04list\x18\x06 \x01(\x0b\x32\x10.secsgem.v1.ListH\x00\x42\x06\n\x04kind\"(\n\x04List\x12 \n\x05items\x18\x01 \x03(\x0b\x32\x11.secsgem.v1.Value\"\x07\n\x05\x45mpty\"\x8a\x01\n\x0eVariableUpdate\x12\x36\n\x06values\x18\x01 \x03(\x0b\x32&.secsgem.v1.VariableUpdate.ValuesEntry\x1a@\n\x0bValuesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12 \n\x05value\x18\x02 \x01(\x0b\x32\x11.secsgem.v1.Value:\x02\x38\x01\"\x1e\n\rVariableQuery\x12\r\n\x05names\x18\x01 \x03(\t\"\x8e\x01\n\x10VariableSnapshot\x12\x38\n\x06values\x18\x01 \x03(\x0b\x32(.secsgem.v1.VariableSnapshot.ValuesEntry\x1a@\n\x0bValuesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12 \n\x05value\x18\x02 \x01(\x0b\x32\x11.secsgem.v1.Value:\x02\x38\x01\"\x80\x01\n\x05\x45vent\x12\x0c\n\x04name\x18\x01 \x01(\t\x12)\n\x04\x64\x61ta\x18\x02 \x03(\x0b\x32\x1b.secsgem.v1.Event.DataEntry\x1a>\n\tDataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12 \n\x05value\x18\x02 \x01(\x0b\x32\x11.secsgem.v1.Value:\x02\x38\x01\"\x15\n\x05\x41larm\x12\x0c\n\x04name\x18\x01 \x01(\t\"\"\n\x10SubscribeRequest\x12\x0e\n\x06\x63lient\x18\x01 \x01(\t\"\xa8\x01\n\x0c\x43ontrolState\x12-\n\x05state\x18\x01 \x01(\x0e\x32\x1e.secsgem.v1.ControlState.State\"i\n\x05State\x12\x15\n\x11\x45QUIPMENT_OFFLINE\x10\x00\x12\x12\n\x0e\x41TTEMPT_ONLINE\x10\x01\x12\x10\n\x0cHOST_OFFLINE\x10\x02\x12\x10\n\x0cONLINE_LOCAL\x10\x03\x12\x11\n\rONLINE_REMOTE\x10\x04\"F\n\x13\x43ontrolStateRequest\x12/\n\x07\x64\x65sired\x18\x01 \x01(\x0e\x32\x1e.secsgem.v1.ControlState.State\"\xbd\x02\n\x0bHostRequest\x12&\n\x07\x63ommand\x18\x01 \x01(\x0b\x32\x13.secsgem.v1.CommandH\x00\x12\x37\n\rcontrol_state\x18\x02 \x01(\x0b\x32\x1e.secsgem.v1.ControlStateChangeH\x00\x12.\n\x08\x63onstant\x18\x03 \x01(\x0b\x32\x1a.secsgem.v1.ConstantChangeH\x00\x12\x35\n\x0fprocess_program\x18\x04 \x01(\x0b\x32\x1a.secsgem.v1.ProcessProgramH\x00\x12,\n\x07\x63\x61rrier\x18\x05 \x01(\x0b\x32\x19.secsgem.v1.CarrierActionH\x00\x12-\n\x0bprocess_job\x18\x06 \x01(\x0b\x32\x16.secsgem.v1.ProcessJobH\x00\x42\t\n\x07request\"\x96\x01\n\x07\x43ommand\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12/\n\x06params\x18\x03 \x03(\x0b\x32\x1f.secsgem.v1.Command.ParamsEntry\x1a@\n\x0bParamsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12 \n\x05value\x18\x02 \x01(\x0b\x32\x11.secsgem.v1.Value:\x02\x38\x01\"C\n\x12\x43ontrolStateChange\x12-\n\x05state\x18\x01 \x01(\x0e\x32\x1e.secsgem.v1.ControlState.State\"@\n\x0e\x43onstantChange\x12\x0c\n\x04name\x18\x01 \x01(\t\x12 \n\x05value\x18\x02 \x01(\x0b\x32\x11.secsgem.v1.Value\",\n\x0eProcessProgram\x12\x0c\n\x04ppid\x18\x01 \x01(\t\x12\x0c\n\x04\x62ody\x18\x02 \x01(\x0c\"\x95\x01\n\rCarrierAction\x12\x12\n\ncarrier_id\x18\x01 \x01(\t\x12\x0c\n\x04port\x18\x02 \x01(\r\x12\x30\n\x06\x61\x63tion\x18\x03 \x01(\x0e\x32 .secsgem.v1.CarrierAction.Action\"0\n\x06\x41\x63tion\x12\r\n\tVERIFY_ID\x10\x00\x12\x0b\n\x07PROCEED\x10\x01\x12\n\n\x06\x43\x41NCEL\x10\x02\"\xae\x01\n\nProcessJob\x12\x0e\n\x06job_id\x18\x01 \x01(\t\x12\x0e\n\x06recipe\x18\x02 \x01(\t\x12-\n\x06\x61\x63tion\x18\x03 \x01(\x0e\x32\x1d.secsgem.v1.ProcessJob.Action\x12\x10\n\x08\x63\x61rriers\x18\x04 \x03(\t\"?\n\x06\x41\x63tion\x12\t\n\x05START\x10\x00\x12\x08\n\x04STOP\x10\x01\x12\t\n\x05PAUSE\x10\x02\x12\n\n\x06RESUME\x10\x03\x12\t\n\x05\x41\x42ORT\x10\x04\"9\n\rCommandResult\x12\n\n\x02id\x18\x01 \x01(\t\x12\x1c\n\x03\x61\x63k\x18\x02 \x01(\x0b\x32\x0f.secsgem.v1.Ack\"\x97\x01\n\x0fProcessJobState\x12\x0e\n\x06job_id\x18\x01 \x01(\t\x12\x30\n\x05state\x18\x02 \x01(\x0e\x32!.secsgem.v1.ProcessJobState.State\"B\n\x05State\x12\x0e\n\nSETTING_UP\x10\x00\x12\x0e\n\nPROCESSING\x10\x01\x12\x0c\n\x08\x43OMPLETE\x10\x02\x12\x0b\n\x07\x41\x42ORTED\x10\x03\"\xa1\x01\n\x0c\x43\x61rrierState\x12\x12\n\ncarrier_id\x18\x01 \x01(\t\x12\x0c\n\x04port\x18\x02 \x01(\r\x12-\n\x05state\x18\x03 \x01(\x0e\x32\x1e.secsgem.v1.CarrierState.State\x12\r\n\x05slots\x18\x04 \x03(\x08\"1\n\x05State\x12\x0b\n\x07WAITING\x10\x00\x12\r\n\tIN_ACCESS\x10\x01\x12\x0c\n\x08\x43OMPLETE\x10\x02\"\xbc\x01\n\x06Health\x12*\n\x04link\x18\x01 \x01(\x0e\x32\x1c.secsgem.v1.Health.LinkState\x12\x13\n\x0bspool_depth\x18\x02 \x01(\r\x12\x35\n\rcontrol_state\x18\x03 \x01(\x0e\x32\x1e.secsgem.v1.ControlState.State\":\n\tLinkState\x12\x10\n\x0c\x44ISCONNECTED\x10\x00\x12\r\n\tCONNECTED\x10\x01\x12\x0c\n\x08SELECTED\x10\x02\"\xdd\x01\n\x0fSubstrateReport\x12\x14\n\x0csubstrate_id\x18\x01 \x01(\t\x12\x38\n\tmilestone\x18\x02 \x01(\x0e\x32%.secsgem.v1.SubstrateReport.Milestone\x12\x12\n\ncarrier_id\x18\x03 \x01(\t\x12\x0c\n\x04slot\x18\x04 \x01(\r\"X\n\tMilestone\x12\x0b\n\x07\x41RRIVED\x10\x00\x12\x0b\n\x07\x41T_WORK\x10\x01\x12\x0e\n\nPROCESSING\x10\x02\x12\r\n\tPROCESSED\x10\x03\x12\x12\n\x0e\x41T_DESTINATION\x10\x04\"\xab\x01\n\x0cModuleReport\x12\x11\n\tmodule_id\x18\x01 \x01(\t\x12-\n\x05state\x18\x02 \x01(\x0e\x32\x1e.secsgem.v1.ModuleReport.State\"Y\n\x05State\x12\x11\n\rNOT_EXECUTING\x10\x00\x12\x15\n\x11GENERAL_EXECUTING\x10\x01\x12\x12\n\x0eSTEP_EXECUTING\x10\x02\x12\x12\n\x0eSTEP_COMPLETED\x10\x03\"\x98\x01\n\x14\x45quipmentDescription\x12\x12\n\nmodel_name\x18\x01 \x01(\t\x12\x14\n\x0csoftware_rev\x18\x02 \x01(\t\x12\x11\n\tvariables\x18\x03 \x03(\t\x12\x0e\n\x06\x65vents\x18\x04 \x03(\t\x12\x0e\n\x06\x61larms\x18\x05 \x03(\t\x12\x10\n\x08\x63ommands\x18\x06 \x03(\t\x12\x11\n\tconstants\x18\x07 \x03(\t\"\"\n\x11SpoolFlushRequest\x12\r\n\x05purge\x18\x01 \x01(\x08\",\n\x0fTerminalMessage\x12\x0b\n\x03tid\x18\x01 \x01(\r\x12\x0c\n\x04text\x18\x02 \x01(\t\"\xd0\x01\n\x03\x41\x63k\x12\"\n\x04\x63ode\x18\x01 \x01(\x0e\x32\x14.secsgem.v1.Ack.Code\x12\x0f\n\x07message\x18\x02 \x01(\t\"\x93\x01\n\x04\x43ode\x12\n\n\x06\x41\x43\x43\x45PT\x10\x00\x12\x13\n\x0fINVALID_COMMAND\x10\x01\x12\x11\n\rCANNOT_DO_NOW\x10\x02\x12\x15\n\x11PARAMETER_INVALID\x10\x03\x12\x1e\n\x1a\x41\x43\x43\x45PTED_WILL_FINISH_LATER\x10\x04\x12\x0c\n\x08REJECTED\x10\x05\x12\x12\n\x0eINVALID_OBJECT\x10\x06\x32\xa8\x08\n\tEquipment\x12;\n\x0cSetVariables\x12\x1a.secsgem.v1.VariableUpdate\x1a\x0f.secsgem.v1.Ack\x12G\n\x0cGetVariables\x12\x19.secsgem.v1.VariableQuery\x1a\x1c.secsgem.v1.VariableSnapshot\x12/\n\tFireEvent\x12\x11.secsgem.v1.Event\x1a\x0f.secsgem.v1.Ack\x12.\n\x08SetAlarm\x12\x11.secsgem.v1.Alarm\x1a\x0f.secsgem.v1.Ack\x12\x30\n\nClearAlarm\x12\x11.secsgem.v1.Alarm\x1a\x0f.secsgem.v1.Ack\x12>\n\x0fGetControlState\x12\x11.secsgem.v1.Empty\x1a\x18.secsgem.v1.ControlState\x12G\n\x13RequestControlState\x12\x1f.secsgem.v1.ControlStateRequest\x1a\x0f.secsgem.v1.Ack\x12\x44\n\tSubscribe\x12\x1c.secsgem.v1.SubscribeRequest\x1a\x17.secsgem.v1.HostRequest0\x01\x12=\n\x0f\x43ompleteCommand\x12\x19.secsgem.v1.CommandResult\x1a\x0f.secsgem.v1.Ack\x12@\n\x10ReportProcessJob\x12\x1b.secsgem.v1.ProcessJobState\x1a\x0f.secsgem.v1.Ack\x12:\n\rReportCarrier\x12\x18.secsgem.v1.CarrierState\x1a\x0f.secsgem.v1.Ack\x12?\n\x0fReportSubstrate\x12\x1b.secsgem.v1.SubstrateReport\x1a\x0f.secsgem.v1.Ack\x12\x39\n\x0cReportModule\x12\x18.secsgem.v1.ModuleReport\x1a\x0f.secsgem.v1.Ack\x12\x36\n\x0bWatchHealth\x12\x11.secsgem.v1.Empty\x1a\x12.secsgem.v1.Health0\x01\x12?\n\x08\x44\x65scribe\x12\x11.secsgem.v1.Empty\x1a .secsgem.v1.EquipmentDescription\x12<\n\nFlushSpool\x12\x1d.secsgem.v1.SpoolFlushRequest\x1a\x0f.secsgem.v1.Ack\x12\x43\n\x13SendTerminalMessage\x12\x1b.secsgem.v1.TerminalMessage\x1a\x0f.secsgem.v1.Ackb\x06proto3')
_globals = globals()
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'equipment_pb2', _globals)
if _descriptor._USE_C_DESCRIPTORS == False:
DESCRIPTOR._options = None
_globals['_VARIABLEUPDATE_VALUESENTRY']._options = None
_globals['_VARIABLEUPDATE_VALUESENTRY']._serialized_options = b'8\001'
_globals['_VARIABLESNAPSHOT_VALUESENTRY']._options = None
_globals['_VARIABLESNAPSHOT_VALUESENTRY']._serialized_options = b'8\001'
_globals['_EVENT_DATAENTRY']._options = None
_globals['_EVENT_DATAENTRY']._serialized_options = b'8\001'
_globals['_COMMAND_PARAMSENTRY']._options = None
_globals['_COMMAND_PARAMSENTRY']._serialized_options = b'8\001'
_globals['_VALUE']._serialized_start=32
_globals['_VALUE']._serialized_end=169
_globals['_LIST']._serialized_start=171
_globals['_LIST']._serialized_end=211
_globals['_EMPTY']._serialized_start=213
_globals['_EMPTY']._serialized_end=220
_globals['_VARIABLEUPDATE']._serialized_start=223
_globals['_VARIABLEUPDATE']._serialized_end=361
_globals['_VARIABLEUPDATE_VALUESENTRY']._serialized_start=297
_globals['_VARIABLEUPDATE_VALUESENTRY']._serialized_end=361
_globals['_VARIABLEQUERY']._serialized_start=363
_globals['_VARIABLEQUERY']._serialized_end=393
_globals['_VARIABLESNAPSHOT']._serialized_start=396
_globals['_VARIABLESNAPSHOT']._serialized_end=538
_globals['_VARIABLESNAPSHOT_VALUESENTRY']._serialized_start=297
_globals['_VARIABLESNAPSHOT_VALUESENTRY']._serialized_end=361
_globals['_EVENT']._serialized_start=541
_globals['_EVENT']._serialized_end=669
_globals['_EVENT_DATAENTRY']._serialized_start=607
_globals['_EVENT_DATAENTRY']._serialized_end=669
_globals['_ALARM']._serialized_start=671
_globals['_ALARM']._serialized_end=692
_globals['_SUBSCRIBEREQUEST']._serialized_start=694
_globals['_SUBSCRIBEREQUEST']._serialized_end=728
_globals['_CONTROLSTATE']._serialized_start=731
_globals['_CONTROLSTATE']._serialized_end=899
_globals['_CONTROLSTATE_STATE']._serialized_start=794
_globals['_CONTROLSTATE_STATE']._serialized_end=899
_globals['_CONTROLSTATEREQUEST']._serialized_start=901
_globals['_CONTROLSTATEREQUEST']._serialized_end=971
_globals['_HOSTREQUEST']._serialized_start=974
_globals['_HOSTREQUEST']._serialized_end=1291
_globals['_COMMAND']._serialized_start=1294
_globals['_COMMAND']._serialized_end=1444
_globals['_COMMAND_PARAMSENTRY']._serialized_start=1380
_globals['_COMMAND_PARAMSENTRY']._serialized_end=1444
_globals['_CONTROLSTATECHANGE']._serialized_start=1446
_globals['_CONTROLSTATECHANGE']._serialized_end=1513
_globals['_CONSTANTCHANGE']._serialized_start=1515
_globals['_CONSTANTCHANGE']._serialized_end=1579
_globals['_PROCESSPROGRAM']._serialized_start=1581
_globals['_PROCESSPROGRAM']._serialized_end=1625
_globals['_CARRIERACTION']._serialized_start=1628
_globals['_CARRIERACTION']._serialized_end=1777
_globals['_CARRIERACTION_ACTION']._serialized_start=1729
_globals['_CARRIERACTION_ACTION']._serialized_end=1777
_globals['_PROCESSJOB']._serialized_start=1780
_globals['_PROCESSJOB']._serialized_end=1954
_globals['_PROCESSJOB_ACTION']._serialized_start=1891
_globals['_PROCESSJOB_ACTION']._serialized_end=1954
_globals['_COMMANDRESULT']._serialized_start=1956
_globals['_COMMANDRESULT']._serialized_end=2013
_globals['_PROCESSJOBSTATE']._serialized_start=2016
_globals['_PROCESSJOBSTATE']._serialized_end=2167
_globals['_PROCESSJOBSTATE_STATE']._serialized_start=2101
_globals['_PROCESSJOBSTATE_STATE']._serialized_end=2167
_globals['_CARRIERSTATE']._serialized_start=2170
_globals['_CARRIERSTATE']._serialized_end=2331
_globals['_CARRIERSTATE_STATE']._serialized_start=2282
_globals['_CARRIERSTATE_STATE']._serialized_end=2331
_globals['_HEALTH']._serialized_start=2334
_globals['_HEALTH']._serialized_end=2522
_globals['_HEALTH_LINKSTATE']._serialized_start=2464
_globals['_HEALTH_LINKSTATE']._serialized_end=2522
_globals['_SUBSTRATEREPORT']._serialized_start=2525
_globals['_SUBSTRATEREPORT']._serialized_end=2746
_globals['_SUBSTRATEREPORT_MILESTONE']._serialized_start=2658
_globals['_SUBSTRATEREPORT_MILESTONE']._serialized_end=2746
_globals['_MODULEREPORT']._serialized_start=2749
_globals['_MODULEREPORT']._serialized_end=2920
_globals['_MODULEREPORT_STATE']._serialized_start=2831
_globals['_MODULEREPORT_STATE']._serialized_end=2920
_globals['_EQUIPMENTDESCRIPTION']._serialized_start=2923
_globals['_EQUIPMENTDESCRIPTION']._serialized_end=3075
_globals['_SPOOLFLUSHREQUEST']._serialized_start=3077
_globals['_SPOOLFLUSHREQUEST']._serialized_end=3111
_globals['_TERMINALMESSAGE']._serialized_start=3113
_globals['_TERMINALMESSAGE']._serialized_end=3157
_globals['_ACK']._serialized_start=3160
_globals['_ACK']._serialized_end=3368
_globals['_ACK_CODE']._serialized_start=3221
_globals['_ACK_CODE']._serialized_end=3368
_globals['_EQUIPMENT']._serialized_start=3371
_globals['_EQUIPMENT']._serialized_end=4435
# @@protoc_insertion_point(module_scope)