A3: S12 Wafer Maps stream (E5 §13)

Adds the core map-management messages: setup send/request (F1-F4),
transmit inquire/grant (F5/F6), data send in row format (F7/F8), and
the one-way error report (F19).  Reference points (REFP) are an
external struct shared across F1 and F4.

The alternative data encodings — array format (F9/F10), coordinate
format (F11/F12), and the corresponding request pairs (F13-F18) —
are scope-deferred.  They're mechanical YAML edits once a tool needs
them; the codec already handles the underlying BINARY/list shapes.

Three new ack enums: MapSetupAck (SDACK), MapTransmitGrant (GRANT),
MapDataAck (MAPER).  No state machine yet — maps are a data exchange,
not a lifecycle.

secsgem-py ships S12F0-F19 as a single block; this commit covers the
practically-used subset and matches their wire shapes where they
overlap.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-06-07 21:15:33 +02:00
parent fafbd2abd2
commit ec478ac9cb
4 changed files with 273 additions and 0 deletions
+31
View File
@@ -140,4 +140,35 @@ enum class TerminalAck : uint8_t { // S10F2, S10F4
TerminalNotAvailable = 2,
};
// E5 §13 S12 (Wafer Maps). Encoded as separate enums even though the
// underlying byte semantics differ slightly across F2/F6/F8 — keeping
// them distinct preserves call-site readability.
// Reference point on a wafer/substrate map (E5 §13.7.4 REFP). Declared
// out of line so the messages.yaml catalog can mark it `external_struct`
// and reuse the same C++ type across F1 / F4.
struct ReferencePoint {
int32_t x;
int32_t y;
};
enum class MapSetupAck : uint8_t { // S12F2 SDACK
Accept = 0,
Error = 1,
};
enum class MapTransmitGrant : uint8_t { // S12F6 GRANT
Granted = 0,
BusyTryAgain = 1,
NoSpaceAvailable = 2,
DuplicateMID = 3,
MaterialNotRecognized = 4,
};
enum class MapDataAck : uint8_t { // S12F8 MAPER
Accept = 0,
FormatError = 1,
UnknownID = 2,
AbortNoMap = 3,
};
} // namespace secsgem::gem