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>
This commit is contained in:
@@ -91,6 +91,17 @@ service Equipment {
|
||||
// as CarrierAction.
|
||||
rpc ReportCarrier(CarrierState) returns (Ack);
|
||||
|
||||
// E90 — substrate (wafer) tracking. Report each milestone of a wafer's
|
||||
// journey; the daemon drives the E90 FSMs and emits the standard CEIDs to
|
||||
// the host. ARRIVED creates the substrate. Only for tools that track
|
||||
// individual substrates.
|
||||
rpc ReportSubstrate(SubstrateReport) returns (Ack);
|
||||
|
||||
// E157 — module process tracking. Report a module's execution state; the
|
||||
// daemon drives the E157 FSM and emits the standard CEIDs. The module is
|
||||
// auto-created on first report. Only for tools with tracked modules.
|
||||
rpc ReportModule(ModuleReport) returns (Ack);
|
||||
|
||||
// ---- Diagnostics --------------------------------------------------------
|
||||
|
||||
// Live daemon/link status: distinguishes "host went offline" from "cable
|
||||
@@ -278,6 +289,33 @@ message Health {
|
||||
}
|
||||
}
|
||||
|
||||
// ---- Material tracking (E90 / E157) ----------------------------------------
|
||||
|
||||
message SubstrateReport {
|
||||
string substrate_id = 1;
|
||||
Milestone milestone = 2;
|
||||
string carrier_id = 3; // optional; recorded on ARRIVED
|
||||
uint32 slot = 4; // optional; 1-based slot within the carrier
|
||||
enum Milestone {
|
||||
ARRIVED = 0; // create; AtSource / NeedsProcessing
|
||||
AT_WORK = 1; // picked up for processing
|
||||
PROCESSING = 2; // processing started
|
||||
PROCESSED = 3; // processing finished
|
||||
AT_DESTINATION = 4; // returned / deposited
|
||||
}
|
||||
}
|
||||
|
||||
message ModuleReport {
|
||||
string module_id = 1;
|
||||
State state = 2;
|
||||
enum State {
|
||||
NOT_EXECUTING = 0;
|
||||
GENERAL_EXECUTING = 1;
|
||||
STEP_EXECUTING = 2;
|
||||
STEP_COMPLETED = 3;
|
||||
}
|
||||
}
|
||||
|
||||
// ---- Diagnostics & operations -----------------------------------------------
|
||||
|
||||
message EquipmentDescription {
|
||||
|
||||
Reference in New Issue
Block a user