Skip to content

E40 · E87 · E90 · E94 axes

GEM300 capability catalog

A declarative catalog in the SECS/GEM SDK that records, profile by profile, which GEM300 areas an equipment configuration covers and to what degree.

What it does

  • Profiles of up to four capabilities on four axes: ProcessJob (E40), Carrier (E87), Substrate (E90) and ControlJob (E94).
  • Each capability carries a status label, so a profile shows how far the equipment configuration covers each GEM300 area.
  • Replace the complete list of profiles in one atomic step and get the new revision back.
  • Snapshots keep their own copy, so later changes don't affect them.
  • Try it in the GEM300 workspace of the SECS/GEM simulator.

Example

Each binding shows code from a real example file in the examples folder of the PDComm SDK. The source file and line range appear above the code.

GEM300 catalog in C

Source: examples/gem300/catalog.c:82-113
PdcommGem300CapabilityCatalog *catalog = NULL;
PdcommStatus status = pdcomm_gem300_capability_catalog_create(&options, &catalog);
if (status != PDCOMM_OK) return failed("catalog_create", status);

/* Each profile lists at most one capability per axis. */
const PdcommGem300Capability line_a[] = {
    {"pj-model", 8, PDCOMM_GEM300_PROCESS_JOB, PDCOMM_GEM300_MODEL_ONLY, PDCOMM_GEM300_UNVERIFIED, 0},
    {"carrier", 7, PDCOMM_GEM300_CARRIER, PDCOMM_GEM300_PLANNED, PDCOMM_GEM300_UNVERIFIED, 0},
};
const PdcommGem300Capability line_b[] = {
    {"cj-trial", 8, PDCOMM_GEM300_CONTROL_JOB, PDCOMM_GEM300_EXPERIMENTAL, PDCOMM_GEM300_UNVERIFIED, 0},
};
const PdcommGem300CapabilityProfile profiles[] = {
    {"LINE-A", 6, line_a, 2},
    {"LINE-B", 6, line_b, 1},
};
uint64_t revision = 0;
uint8_t changed = 0;
/* Replace swaps the whole catalog atomically; equal contents keep the revision. */
status = pdcomm_gem300_capability_catalog_replace(catalog, profiles, 2, &revision, &changed);
if (status != PDCOMM_OK) {
    pdcomm_gem300_capability_catalog_destroy(catalog);
    return failed("catalog_replace", status);
}
printf("replace: revision %llu, changed %u\n", (unsigned long long)revision, (unsigned)changed);

/* A snapshot owns its copy and stays valid after the catalog changes. */
PdcommGem300CapabilitySnapshot *snapshot = NULL;
status = pdcomm_gem300_capability_catalog_snapshot(catalog, &snapshot);
pdcomm_gem300_capability_catalog_destroy(catalog);
if (status != PDCOMM_OK) return failed("catalog_snapshot", status);
int result = print_snapshot(snapshot);

From the C example: create a capability catalog, replace its contents atomically with two profiles (at most one capability per axis), then take a snapshot and read it back. The catalog is local data, independent of any HSMS session, and needs a license for the gem300 module.