bparzella/secsgem

View on GitHub
data/functions.yaml

Summary

Maintainability
Test Coverage
S00F00:
  description: Hsms communication
  to_host: True
  to_equipment: True
  reply: False
  reply_required: False
  multi_block: False

S01F00:
  description: abort transaction stream 1
  to_host: True
  to_equipment: True
  reply: False
  reply_required: False
  multi_block: False

S01F01:
  description: are you online - request
  to_host: True
  to_equipment: True
  reply: True
  reply_required: True
  multi_block: False

S01F02:
  description: on line data
  to_host: True
  to_equipment: True
  reply: False
  reply_required: False
  multi_block: False
  structure: [MDLN]
  sample_data:
    - data: '["secsgem", "0.0.6"]'
      info: E->H
    - data: ''
      info: H->E
  extra_help: |-
    .. caution::

        This Stream/function has different structures depending on the source.
        If it is sent from the eqipment side it has the structure below, if it
        is sent from the host it is an empty list.
        Be sure to fill the array accordingly.

    **Structure E->H**::

        {
            MDLN: A[20]
            SOFTREV: A[20]
        }

S01F03:
  description: Selected equipment status - request
  to_host: False
  to_equipment: True
  reply: True
  reply_required: True
  multi_block: False
  structure: [SVID]
  sample_data: '[1, "1337", 12]'

S01F04:
  description: selected equipment status - data
  to_host: True
  to_equipment: False
  reply: False
  reply_required: False
  multi_block: True
  structure: [SV]
  sample_data: '[secsgem.secs.variables.U1(1), "text", secsgem.secs.variables.U4(1337)]'

S01F11:
  description: status variable namelist - request
  to_host: False
  to_equipment: True
  reply: True
  reply_required: True
  multi_block: False
  structure: [SVID]
  sample_data: '[1, 1337]'
  extra_help: An empty list will return all available status variables.

S01F12:
  description: status variable namelist - reply
  to_host: True
  to_equipment: False
  reply: False
  reply_required: False
  multi_block: True
  structure: [[SVID, SVNAME, UNITS]]
  sample_data: |-
    [{"SVID": 1, "SVNAME": "SV1", "UNITS": "mm"},
    {"SVID": 1337, "SVNAME": "SV2", "UNITS": ""}]

S01F13:
  description: establish communication - request
  to_host: True
  to_equipment: True
  reply: True
  reply_required: True
  multi_block: False
  structure: [MDLN]
  sample_data:
    - data: '["secsgem", "0.0.6"]'
      info: E->H
    - data: ''
      info: H->E
  extra_help: |-
    .. caution::

        This Stream/function has different structures depending on the source.
        If it is sent from the eqipment side it has the structure below, if it
        is sent from the host it is an empty list.
        Be sure to fill the array accordingly.

    **Structure E->H**::

        {
            MDLN: A[20]
            SOFTREV: A[20]
        }

S01F14:
  description: establish communication - acknowledge
  to_host: True
  to_equipment: True
  reply: False
  reply_required: False
  multi_block: False
  structure: [COMMACK, [MDLN]]
  sample_data: |-
    {"COMMACK": secsgem.secs.data_items.COMMACK.ACCEPTED,
    "MDLN": ["secsgem", "0.0.6"]}
  extra_help: |-
    .. caution::

        This Stream/function has different structures depending on the source.
        See structure definition below for details.
        Be sure to fill the array accordingly.

    **Structure E->H**::

        {
            COMMACK: B[1]
            DATA: {
                MDLN: A[20]
                SOFTREV: A[20]
            }
        }

    **Structure H->E**::

        {
            COMMACK: B[1]
            DATA: []
        }

S01F15:
  description: request offline
  to_host: False
  to_equipment: True
  reply: True
  reply_required: True
  multi_block: False

S01F16:
  description: offline acknowledge
  to_host: True
  to_equipment: False
  reply: False
  reply_required: False
  multi_block: False
  structure: OFLACK
  sample_data: 'secsgem.secs.data_items.OFLACK.ACK'

S01F17:
  description: request online
  to_host: False
  to_equipment: True
  reply: True
  reply_required: True
  multi_block: False

S01F18:
  description: online acknowledge
  to_host: True
  to_equipment: False
  reply: False
  reply_required: False
  multi_block: False
  structure: ONLACK
  sample_data: 'secsgem.secs.data_items.ONLACK.ALREADY_ON'

S01F21:
  description: Data variable namelist request
  to_host: False
  to_equipment: True
  reply: True
  reply_required: True
  multi_block: False
  structure: [VID]
  sample_data: '[1, "VARIABLEID"]'

S01F22:
  description: Data variable namelist
  to_host: True
  to_equipment: False
  reply: False
  reply_required: False
  multi_block: False
  structure: [[VID, DVVALNAME, UNITS]]
  sample_data: '[{"VID": 1, "DVVALNAME": "EC1", "UNITS": "mm"}]'

S01F23:
  description: Collection event namelist request
  to_host: False
  to_equipment: True
  reply: True
  reply_required: True
  multi_block: False
  structure: [CEID]
  sample_data: '[1, "COLLEVTID"]'

S01F24:
  description: Collection event namelist
  to_host: True
  to_equipment: False
  reply: False
  reply_required: False
  multi_block: False
  structure: [[CEID, CENAME, [VID]]]
  sample_data: '[{"CEID": 1, "CENAME": "CE1", "VID": [1, "VARIABLEID"]}]'

S02F00:
  description: abort transaction stream 2
  to_host: True
  to_equipment: True
  reply: False
  reply_required: False
  multi_block: False

S02F13:
  description: equipment constant - request
  to_host: False
  to_equipment: True
  reply: True
  reply_required: True
  multi_block: False
  structure: [ECID]
  sample_data: '[1, 1337]'
  extra_help: An empty list will return all available equipment constants.

S02F14:
  description: equipment constant - data
  to_host: True
  to_equipment: False
  reply: False
  reply_required: False
  multi_block: True
  structure: [ECV]
  sample_data: '[secsgem.secs.variables.U1(1), "text"]'

S02F15:
  description: new equipment constant - send
  to_host: False
  to_equipment: True
  reply: True
  reply_required: True
  multi_block: False
  structure: [[ECID, ECV]]
  sample_data: |-
    [
    {"ECID": 1, "ECV": secsgem.secs.variables.U4(10)},
    {"ECID": "1337", "ECV": "text"}]

S02F16:
  description: new equipment constant - acknowledge
  to_host: True
  to_equipment: False
  reply: False
  reply_required: False
  multi_block: False
  structure: EAC
  sample_data: 'secsgem.secs.data_items.EAC.BUSY'

S02F17:
  description: date and time - request
  to_host: True
  to_equipment: True
  reply: True
  reply_required: True
  multi_block: False

S02F18:
  description: date and time - data
  to_host: True
  to_equipment: True
  reply: False
  reply_required: False
  multi_block: False
  structure: TIME
  sample_data: '"160816205942"'

S02F21:
  description: Remote command send
  to_host: False
  to_equipment: True
  reply: True
  reply_required: False
  multi_block: False
  structure: RCMD
  sample_data: '"COMMMAND1"'

S02F22:
  description: Remote command - acknowledge
  to_host: True
  to_equipment: False
  reply: False
  reply_required: False
  multi_block: False
  structure: CMDA
  sample_data: 'secsgem.secs.data_items.CMDA.DONE'

S02F23:
  description: Trace initialize
  to_host: False
  to_equipment: True
  reply: True
  reply_required: True
  multi_block: True
  structure: [TRID, DSPER, TOTSMP, REPGSZ, [SVID]]
  sample_data: |-
    {
    "TRID":1,
    "DSPER":'000010',
    "TOTSMP":secsgem.secs.variables.U4(10),
    "REPGSZ":secsgem.secs.variables.U4(1),
    "SVID":[1002004,400210]}

S02F24:
  description: Trace initialize - acknowledge
  to_host: True
  to_equipment: False
  reply: False
  reply_required: False
  multi_block: False
  structure: TIAACK
  sample_data: 'secsgem.secs.data_items.TIAACK.SVID_EXCEEDED'

S02F25:
  description: Loopback diagnostic request
  to_host: True
  to_equipment: True
  reply: True
  reply_required: True
  multi_block: False
  structure: ABS
  sample_data: '"Text"'

S02F26:
  description: Loopback diagnostic data
  to_host: True
  to_equipment: True
  reply: False
  reply_required: False
  multi_block: False
  structure: ABS
  sample_data: '"Text"'

S02F29:
  description: equipment constant namelist - request
  to_host: False
  to_equipment: True
  reply: True
  reply_required: True
  multi_block: False
  structure: [ECID]
  sample_data: '[1, 1337]'
  extra_help: An empty list will return all available equipment constants.

S02F30:
  description: equipment constant namelist
  to_host: True
  to_equipment: False
  reply: False
  reply_required: False
  multi_block: True
  structure: [[ECID, ECNAME, ECMIN, ECMAX, ECDEF, UNITS]]
  sample_data: |-
    [
    {"ECID": 1,
      "ECNAME": "EC1",
      "ECMIN": secsgem.secs.variables.U1(0),
      "ECMAX": secsgem.secs.variables.U1(100),
      "ECDEF": secsgem.secs.variables.U1(50),
      "UNITS": "mm"},
    {"ECID": 1337,
      "ECNAME": "EC2",
      "ECMIN": "",
      "ECMAX": "",
      "ECDEF": "",
      "UNITS": ""}]

S02F33:
  description: define report
  to_host: False
  to_equipment: True
  reply: True
  reply_required: True
  multi_block: True
  structure: [DATAID, [[RPTID, [VID]]]]
  sample_data: |-
    {"DATAID": 1, "DATA": [{"RPTID": 1000, "VID": [12, 1337]},
    {"RPTID": 1001, "VID": [1, 2355]}]}

S02F34:
  description: define report - acknowledge
  to_host: True
  to_equipment: False
  reply: False
  reply_required: False
  multi_block: False
  structure: DRACK
  sample_data: 'secsgem.secs.data_items.DRACK.INVALID_FORMAT'

S02F35:
  description: link event report
  to_host: False
  to_equipment: True
  reply: True
  reply_required: True
  multi_block: True
  structure: [DATAID, [[CEID, [RPTID]]]]
  sample_data: '{"DATAID": 1, "DATA": [{"CEID": 1337, "RPTID": [1000, 1001]}]}'

S02F36:
  description: link event report - acknowledge
  to_host: True
  to_equipment: False
  reply: False
  reply_required: False
  multi_block: False
  structure: LRACK
  sample_data: 'secsgem.secs.data_items.LRACK.CEID_UNKNOWN'

S02F37:
  description: en-/disable event report
  to_host: False
  to_equipment: True
  reply: True
  reply_required: True
  multi_block: False
  structure: [CEED, [CEID]]
  sample_data: '{"CEED": True, "CEID": [1337]}'

S02F38:
  description: en-/disable event report - acknowledge
  to_host: True
  to_equipment: False
  reply: False
  reply_required: False
  multi_block: False
  structure: ERACK
  sample_data: 'secsgem.secs.data_items.ERACK.CEID_UNKNOWN'

S02F41:
  description: host command - send
  to_host: False
  to_equipment: True
  reply: True
  reply_required: True
  multi_block: False
  structure: [RCMD, [["PARAMS", CPNAME, CPVAL]]]
  sample_data: |-
    {"RCMD": "COMMAND", "PARAMS": [{"CPNAME": "PARAM1", "CPVAL": "VAL1"},
    {"CPNAME": "PARAM2", "CPVAL": "VAL2"}]}

S02F42:
  description: host command - acknowledge
  to_host: True
  to_equipment: False
  reply: False
  reply_required: False
  multi_block: False
  structure: [HCACK, [["PARAMS", CPNAME, CPACK]]]
  sample_data: |-
    {
    "HCACK": secsgem.secs.data_items.HCACK.INVALID_COMMAND,
    "PARAMS": [
        {"CPNAME": "PARAM1", "CPACK": secsgem.secs.data_items.CPACK.CPVAL_ILLEGAL_VALUE},
        {"CPNAME": "PARAM2", "CPACK": secsgem.secs.data_items.CPACK.CPVAL_ILLEGAL_FORMAT}]}

S02F43:
  description: reset spooling streams and functions - send
  to_host: False
  to_equipment: True
  reply: True
  reply_required: True
  multi_block: False
  structure: [[STRID, [FCNID]]]
  sample_data: '[{"STRID": 1, "FCNID": [10, 20]}, {"STRID": 2, "FCNID": [30, 40]}]'

S02F44:
  description: reset spooling - acknowledge
  to_host: True
  to_equipment: False
  reply: False
  reply_required: False
  multi_block: False
  structure: [RSPACK, [[STRID, STRACK, [FCNID]]]]
  sample_data: |-
    {
    "RSPACK": secsgem.secs.data_items.RSPACK.REJECTED,
    "DATA": [
        {"STRID": 1, "STRACK": secsgem.secs.data_items.STRACK.NOT_ALLOWED, "FCNID": [10]},
        {"STRID": 2, "STRACK": secsgem.secs.data_items.STRACK.FUNCTION_UNKNOWN, "FCNID": [20]}]}

S02F45:
  description: Define variable limit attributes
  to_host: False
  to_equipment: True
  reply: True
  reply_required: True
  multi_block: True
  structure: [DATAID, [[VID, [[LIMITID, [UPPERDB, LOWERDB]]]]]]
  sample_data: |-
    {
    "DATAID": 1,
    "DATA": [{
        "VID": 2,
        "DATA": [{
            "LIMITID": 3,
            "DATA": [30, 20]
        }]
    }]}

S02F46:
  description: Define variable limit attributes - acknowledge
  to_host: True
  to_equipment: False
  reply: False
  reply_required: False
  multi_block: False
  structure: [VLAACK, [[VID, LVACK, [LIMITID, LIMITACK]]]]
  sample_data: |-
    {
    "VLAACK": secsgem.secs.data_items.VLAACK.LIMIT_DEF_ERROR,
    "DATA": [{
        "VID": 2,
        "LVACK": secsgem.secs.data_items.LVACK.VARIABLE_UNKNOWN,
        "DATA": {
            "LIMITID": 3,
            "LIMITACK": secsgem.secs.data_items.LIMITACK.ASCII_ILLEGAL
        }
    }]}

S02F47:
  description: Variable limit attribute request
  to_host: False
  to_equipment: True
  reply: True
  reply_required: True
  multi_block: False
  structure: [VID]
  sample_data: '[1, "VARIABLEID"]'

S02F48:
  description: Define variable limit attributes - acknowledge
  to_host: True
  to_equipment: False
  reply: False
  reply_required: False
  multi_block: False
  structure: [[VID, [UNITS, LIMITMIN, LIMITMAX, [[LIMITID, UPPERDB, LOWERDB ]]]]]
  sample_data: |-
    [{
    "VID": 1,
    "DATA": {
        "UNITS": "meters",
        "LIMITMIN": 10,
        "LIMITMAX": 20,
        "DATA": [{
            "LIMITID": 3,
            "UPPERDB": 50,
            "LOWERDB": 5
        }]
    }}]

S02F49:
  description: Enhanced remote command
  to_host: False
  to_equipment: True
  reply: False
  reply_required: False
  multi_block: True
  structure: [DATAID, OBJSPEC, RCMD, [["PARAMS", CPNAME, CEPVAL]]]
  sample_data: |-
    {
    "DATAID": 1,
    "OBJSPEC": 'test',
    "RCMD": "COMMAND1",
    "PARAMS": [{
        "CPNAME": "CPARAM",
        "CEPVAL": "VALUE"
    }]}

S02F50:
  description: Enhanced remote command - acknowledge
  to_host: True
  to_equipment: False
  reply: False
  reply_required: False
  multi_block: False
  structure: [HCACK, [["PARAMS", CPNAME, CPACK]]]
  sample_data: |-
    {
    "HCACK": secsgem.secs.data_items.HCACK.INVALID_COMMAND,
    "PARAMS": [
        {"CPNAME": "PARAM1", "CPACK": secsgem.secs.data_items.CPACK.CPVAL_ILLEGAL_VALUE},
        {"CPNAME": "PARAM2", "CPACK": secsgem.secs.data_items.CPACK.CPVAL_ILLEGAL_FORMAT}]}


S05F00:
  description: abort transaction stream 5
  to_host: True
  to_equipment: True
  reply: False
  reply_required: False
  multi_block: False

S05F01:
  description: alarm report - send
  to_host: True
  to_equipment: False
  reply: True
  reply_required: False
  multi_block: False
  structure: [ALCD, ALID, ALTX]
  sample_data: |-
    {
    "ALCD": secsgem.secs.data_items.ALCD.PERSONAL_SAFETY |
            secsgem.secs.data_items.ALCD.ALARM_SET,
    "ALID": 100,
    "ALTX": "text"}

S05F02:
  description: alarm report - acknowledge
  to_host: False
  to_equipment: True
  reply: False
  reply_required: False
  multi_block: False
  structure: ACKC5
  sample_data: 'secsgem.secs.data_items.ACKC5.ACCEPTED'

S05F03:
  description: en-/disable alarm - send
  to_host: False
  to_equipment: True
  reply: True
  reply_required: False
  multi_block: False
  structure: [ALED, ALID]
  sample_data: '{"ALED": secsgem.secs.data_items.ALED.ENABLE, "ALID": 100}'

S05F04:
  description: en-/disable alarm - acknowledge
  to_host: True
  to_equipment: False
  reply: False
  reply_required: False
  multi_block: False
  structure: ACKC5
  sample_data: 'secsgem.secs.data_items.ACKC5.ACCEPTED'

S05F05:
  description: list alarms - request
  to_host: False
  to_equipment: True
  reply: True
  reply_required: True
  multi_block: False
  structure: [ALID]
  sample_data: '[100, 200]'

S05F06:
  description: list alarms - data
  to_host: True
  to_equipment: False
  reply: False
  reply_required: False
  multi_block: True
  structure: [[ALCD, ALID, ALTX]]
  sample_data: |-
    [
    {"ALCD": secsgem.secs.data_items.ALCD.PERSONAL_SAFETY |
             secsgem.secs.data_items.ALCD.ALARM_SET,
     "ALID": 100,
     "ALTX": "text"}]

S05F07:
  description: list enabled alarms - request
  to_host: False
  to_equipment: True
  reply: True
  reply_required: True
  multi_block: False

S05F08:
  description: list enabled alarms - data
  to_host: True
  to_equipment: False
  reply: False
  reply_required: False
  multi_block: True
  structure: [[ALCD, ALID, ALTX]]
  sample_data: |-
    [
    {"ALCD": secsgem.secs.data_items.ALCD.PERSONAL_SAFETY |
             secsgem.secs.data_items.ALCD.ALARM_SET,
     "ALID": 100,
     "ALTX": "text"}]

S05F09:
  description: exception post - notify
  to_host: True
  to_equipment: False
  reply: True
  reply_required: False
  multi_block: False
  structure: [TIMESTAMP, EXID, EXTYPE, EXMESSAGE, [EXRECVRA]]
  sample_data: |-
    {
    "TIMESTAMP": "161006221500",
    "EXID": "EX123",
    "EXTYPE": "ALARM",
    "EXMESSAGE": "Exception",
    "EXRECVRA": ["EXRECVRA1", "EXRECVRA2"] }

S05F10:
  description: exception post - confirm
  to_host: False
  to_equipment: True
  reply: False
  reply_required: False
  multi_block: False

S05F11:
  description: exception clear - notify
  to_host: True
  to_equipment: False
  reply: True
  reply_required: False
  multi_block: False
  structure: [TIMESTAMP, EXID, EXTYPE, EXMESSAGE]
  sample_data: |-
    {
    "TIMESTAMP": "161006221500",
    "EXID": "EX123",
    "EXTYPE": "ALARM",
    "EXMESSAGE": "Exception"}

S05F12:
  description: exception clear - confirm
  to_host: False
  to_equipment: True
  reply: False
  reply_required: False
  multi_block: False

S05F13:
  description: exception recover - request
  to_host: False
  to_equipment: True
  reply: True
  reply_required: True
  multi_block: False
  structure: [EXID, EXRECVRA]
  sample_data: '{"EXID": "EX123", "EXRECVRA": "EXRECVRA2"}'

S05F14:
  description: exception recover - acknowledge
  to_host: True
  to_equipment: False
  reply: False
  reply_required: False
  multi_block: False
  structure: [EXID, [ACKA, [ERRCODE, ERRTEXT]]]
  sample_data: |-
    {
    "EXID": "EX123",
    "DATA": {"ACKA": False,
             "DATA": {"ERRCODE": 10,
                      "ERRTEXT": "Error"}}}

S05F15:
  description: exception recover complete - notify
  to_host: True
  to_equipment: False
  reply: True
  reply_required: False
  multi_block: False
  structure: [TIMESTAMP, EXID, [ACKA, [ERRCODE, ERRTEXT]]]
  sample_data: |-
    {
    "TIMESTAMP": "161006221500",
    "EXID": "EX123",
    "DATA": {
        "ACKA": False,
        "DATA": {
            "ERRCODE": 10,
            "ERRTEXT": "Error"
        }}}

S05F16:
  description: exception recover complete - confirm
  to_host: False
  to_equipment: True
  reply: False
  reply_required: False
  multi_block: False

S05F17:
  description: exception recover abort - request
  to_host: False
  to_equipment: True
  reply: True
  reply_required: True
  multi_block: False
  structure: EXID
  sample_data: '"EX123"'

S05F18:
  description: exception recover abort - acknowledge
  to_host: True
  to_equipment: False
  reply: False
  reply_required: False
  multi_block: False
  structure: [EXID, [ACKA, [ERRCODE, ERRTEXT]]]
  sample_data: |-
    {
    "EXID": "EX123",
    "DATA": {
        "ACKA": False,
        "DATA": {
            "ERRCODE": 10,
            "ERRTEXT": "Error"}}}

S06F00:
  description: abort transaction stream 6
  to_host: True
  to_equipment: True
  reply: False
  reply_required: False
  multi_block: False

S06F01:
  description: Trace data send
  to_host: True
  to_equipment: False
  reply: True
  reply_required: False
  multi_block: True
  structure: [TRID, SMPLN, STIME, [SV]]
  sample_data: |-
    {
    "TRID": 1,
    "SMPLN": 3,
    "STIME": "TIME",
    "SV": [1, 4]}

S06F02:
  description: Trace data - acknowledge
  to_host: False
  to_equipment: True
  reply: False
  reply_required: False
  multi_block: False
  structure: ACKC6
  sample_data: 'secsgem.secs.data_items.ACKC6.ACCEPTED'

S06F05:
  description: multi block data inquiry
  to_host: True
  to_equipment: False
  reply: True
  reply_required: True
  multi_block: False
  structure: [DATAID, DATALENGTH]
  sample_data: '{"DATAID": 1, "DATALENGTH": 1337}'

S06F06:
  description: multi block data grant
  to_host: False
  to_equipment: True
  reply: False
  reply_required: False
  multi_block: False
  structure: GRANT6
  sample_data: 'secsgem.secs.data_items.GRANT6.BUSY'

S06F07:
  description: data transfer request
  to_host: False
  to_equipment: True
  reply: True
  reply_required: True
  multi_block: False
  structure: DATAID
  sample_data: '1'

S06F08:
  description: data transfer data
  to_host: True
  to_equipment: False
  reply: False
  reply_required: False
  multi_block: True
  structure: [DATAID, CEID, [["DS", DSID, [["DV", DVNAME, DVVAL]]]]]
  sample_data: |-
    {
    "DATAID": 1,
    "CEID": 1337,
    "DS": [{
        "DSID": 1000,
        "DV": [
            {"DVNAME": "VAR1", "DVVAL": "VAR"},
            {"DVNAME": "VAR2", "DVVAL": secsgem.secs.variables.U4(100)}]}]}

S06F11:
  description: event report
  to_host: True
  to_equipment: False
  reply: True
  reply_required: True
  multi_block: True
  structure: [DATAID, CEID, [["RPT", RPTID, [V]]]]
  sample_data: |-
    {
    "DATAID": 1,
    "CEID": 1337,
    "RPT": [{
        "RPTID": 1000,
        "V": ["VAR", secsgem.secs.variables.U4(100)]}]}

S06F12:
  description: event report - acknowledge
  to_host: False
  to_equipment: True
  reply: False
  reply_required: False
  multi_block: False
  structure: ACKC6
  sample_data: 'secsgem.secs.data_items.ACKC6.ACCEPTED'

S06F15:
  description: event report request
  to_host: False
  to_equipment: True
  reply: True
  reply_required: True
  multi_block: False
  structure: CEID
  sample_data: '1337'

S06F16:
  description: event report data
  to_host: True
  to_equipment: False
  reply: False
  reply_required: False
  multi_block: True
  structure: [DATAID, CEID, [["RPT", RPTID, [V]]]]
  sample_data: |-
    {
    "DATAID": 1,
    "CEID": 1337,
    "RPT": [{
        "RPTID": 1000,
        "V": ["VAR", secsgem.secs.variables.U4(100)]}]}

S06F19:
  description: individual report request
  to_host: False
  to_equipment: True
  reply: True
  reply_required: True
  multi_block: False
  structure: RPTID
  sample_data: 'secsgem.secs.variables.U4(1337)'

S06F20:
  description: individual report data
  to_host: True
  to_equipment: False
  reply: False
  reply_required: False
  multi_block: True
  structure: [V]
  sample_data: '["ASD", 1337]'

S06F21:
  description: annotated individual report request
  to_host: False
  to_equipment: True
  reply: True
  reply_required: True
  multi_block: False
  structure: RPTID
  sample_data: 'secsgem.secs.variables.U4(1337)'

S06F22:
  description: annotated individual report data
  to_host: True
  to_equipment: False
  reply: False
  reply_required: False
  multi_block: True
  structure: [[VID, V]]
  sample_data: '[{"VID": "VID1", "V": "ASD"}, {"VID": 2, "V": 1337}]'

S06F23:
  description: Request spooled data
  to_host: False
  to_equipment: True
  reply: True
  reply_required: True
  multi_block: False
  structure: RSDC
  sample_data: 'secsgem.secs.data_items.RSDC.PURGE'

S06F24:
  description: Request spooled data acknowledge
  to_host: True
  to_equipment: False
  reply: False
  reply_required: False
  multi_block: False
  structure: RSDA
  sample_data: 'secsgem.secs.data_items.RSDA.ACK'

S07F00:
  description: abort transaction stream 7
  to_host: True
  to_equipment: True
  reply: False
  reply_required: False
  multi_block: False

S07F01:
  description: process program load - inquire
  to_host: True
  to_equipment: True
  reply: True
  reply_required: True
  multi_block: False
  structure: [PPID, LENGTH]
  sample_data: '{"PPID": "program", "LENGTH": 4}'

S07F02:
  description: process program load - grant
  to_host: True
  to_equipment: True
  reply: False
  reply_required: False
  multi_block: False
  structure: PPGNT
  sample_data: 'secsgem.secs.data_items.PPGNT.OK'

S07F03:
  description: process program - send
  to_host: True
  to_equipment: True
  reply: True
  reply_required: True
  multi_block: True
  structure: [PPID, PPBODY]
  sample_data: '{"PPID": "program", "PPBODY": secsgem.secs.variables.Binary("data")}'

S07F04:
  description: process program - acknowledge
  to_host: True
  to_equipment: True
  reply: False
  reply_required: False
  multi_block: False
  structure: ACKC7
  sample_data: 'secsgem.secs.data_items.ACKC7.MATRIX_OVERFLOW'

S07F05:
  description: process program - request
  to_host: True
  to_equipment: True
  reply: True
  reply_required: True
  multi_block: False
  structure: PPID
  sample_data: '"program"'

S07F06:
  description: process program - data
  to_host: True
  to_equipment: True
  reply: False
  reply_required: False
  multi_block: True
  structure: [PPID, PPBODY]
  sample_data: '{"PPID": "program", "PPBODY": secsgem.secs.variables.Binary("data")}'

S07F17:
  description: delete process program - send
  to_host: False
  to_equipment: True
  reply: True
  reply_required: True
  multi_block: False
  structure: [PPID]
  sample_data: '["program1", "program2"]'

S07F18:
  description: delete process program - acknowledge
  to_host: True
  to_equipment: False
  reply: False
  reply_required: False
  multi_block: False
  structure: ACKC7
  sample_data: 'secsgem.secs.data_items.ACKC7.MODE_UNSUPPORTED'

S07F19:
  description: current equipment process program - request
  to_host: False
  to_equipment: True
  reply: True
  reply_required: True
  multi_block: False

S07F20:
  description: current equipment process program - data
  to_host: True
  to_equipment: False
  reply: False
  reply_required: False
  multi_block: True
  structure: [PPID]
  sample_data: '["program1", "program2"]'

S09F00:
  description: abort transaction stream 9
  to_host: True
  to_equipment: True
  reply: False
  reply_required: False
  multi_block: False

S09F01:
  description: unrecognized device id
  to_host: True
  to_equipment: False
  reply: False
  reply_required: False
  multi_block: False
  structure: MHEAD
  sample_data: '"HEADERDATA"'

S09F03:
  description: unrecognized stream type
  to_host: True
  to_equipment: False
  reply: False
  reply_required: False
  multi_block: False
  structure: MHEAD
  sample_data: '"HEADERDATA"'

S09F05:
  description: unrecognized function type
  to_host: True
  to_equipment: False
  reply: False
  reply_required: False
  multi_block: False
  structure: MHEAD
  sample_data: '"HEADERDATA"'

S09F07:
  description: illegal data
  to_host: True
  to_equipment: False
  reply: False
  reply_required: False
  multi_block: False
  structure: MHEAD
  sample_data: '"HEADERDATA"'

S09F09:
  description: transaction timer timeout
  to_host: True
  to_equipment: False
  reply: False
  reply_required: False
  multi_block: False
  structure: SHEAD
  sample_data: '"HEADERDATA"'

S09F11:
  description: data too long
  to_host: True
  to_equipment: False
  reply: False
  reply_required: False
  multi_block: False
  structure: MHEAD
  sample_data: '"HEADERDATA"'

S09F13:
  description: conversation timeout
  to_host: True
  to_equipment: False
  reply: False
  reply_required: False
  multi_block: False
  structure: [MEXP, EDID]
  sample_data: '{"MEXP": "S01E01", "EDID": "data"}'

S10F00:
  description: abort transaction stream 10
  to_host: True
  to_equipment: True
  reply: False
  reply_required: False
  multi_block: False

S10F01:
  description: terminal - request
  to_host: True
  to_equipment: False
  reply: True
  reply_required: False
  multi_block: False
  structure: [TID, TEXT]
  sample_data: '{"TID": 0, "TEXT": "hello?"}'

S10F02:
  description: terminal - acknowledge
  to_host: False
  to_equipment: True
  reply: False
  reply_required: False
  multi_block: False
  structure: ACKC10
  sample_data: 'secsgem.secs.data_items.ACKC10.ACCEPTED'

S10F03:
  description: terminal single - display
  to_host: False
  to_equipment: True
  reply: True
  reply_required: False
  multi_block: False
  structure: [TID, TEXT]
  sample_data: '{"TID": 0, "TEXT": "hello!"}'

S10F04:
  description: terminal single - acknowledge
  to_host: True
  to_equipment: False
  reply: False
  reply_required: False
  multi_block: False
  structure: ACKC10
  sample_data: 'secsgem.secs.data_items.ACKC10.TERMINAL_NOT_AVAILABLE'

S12F00:
  description: abort transaction stream 12
  to_host: True
  to_equipment: True
  reply: False
  reply_required: False
  multi_block: False

S12F01:
  description: map setup data - send
  to_host: True
  to_equipment: False
  reply: True
  reply_required: True
  multi_block: False
  structure: [MID, IDTYP, FNLOC, FFROT, ORLOC, RPSEL, [REFP], DUTMS, XDIES, YDIES, ROWCT, COLCT, NULBC, PRDCT, PRAXI]
  sample_data: |-
    {
    "MID": "materialID",
    "IDTYP": secsgem.secs.data_items.IDTYP.WAFER,
    "FNLOC": 0,
    "FFROT": 0,
    "ORLOC": secsgem.secs.data_items.ORLOC.UPPER_LEFT,
    "RPSEL": 0,
    "REFP": [[1,2], [2,3]],
    "DUTMS": "unit",
    "XDIES": 100,
    "YDIES": 100,
    "ROWCT": 10,
    "COLCT": 10,
    "NULBC": "{x}",
    "PRDCT": 100,
    "PRAXI": secsgem.secs.data_items.PRAXI.ROWS_TOP_INCR}

S12F02:
  description: map setup data - acknowledge
  to_host: False
  to_equipment: True
  reply: False
  reply_required: False
  multi_block: False
  structure: SDACK
  sample_data: 'secsgem.secs.data_items.SDACK.ACK'

S12F03:
  description: map setup data - request
  to_host: True
  to_equipment: False
  reply: True
  reply_required: True
  multi_block: False
  structure: [MID, IDTYP, MAPFT, FNLOC, FFROT, ORLOC, PRAXI, BCEQU, NULBC]
  sample_data: |-
    {
    "MID": "materialID",
    "IDTYP": secsgem.secs.data_items.IDTYP.WAFER_CASSETTE,
    "MAPFT": secsgem.secs.data_items.MAPFT.ROW,
    "FNLOC": 0,
    "FFROT": 0,
    "ORLOC": secsgem.secs.data_items.ORLOC.LOWER_LEFT,
    "PRAXI": secsgem.secs.data_items.PRAXI.COLS_LEFT_INCR,
    "BCEQU": [1, 3, 5, 7],
    "NULBC": "{x}"}

S12F04:
  description: map setup data
  to_host: False
  to_equipment: True
  reply: False
  reply_required: False
  multi_block: False
  structure: [MID, IDTYP, FNLOC, ORLOC, RPSEL, [REFP], DUTMS, XDIES, YDIES, ROWCT, COLCT, PRDCT, BCEQU, NULBC, MLCL]
  sample_data: |-
    {
    "MID": "materialID",
    "IDTYP": secsgem.secs.data_items.IDTYP.FILM_FRAME,
    "FNLOC": 0,
    "ORLOC": secsgem.secs.data_items.ORLOC.CENTER_DIE,
    "RPSEL": 0,
    "REFP": [[1,2], [2,3]],
    "DUTMS": "unit",
    "XDIES": 100,
    "YDIES": 100,
    "ROWCT": 10,
    "COLCT": 10,
    "PRDCT": 100,
    "BCEQU": [1, 3, 5, 7],
    "NULBC": "{x}",
    "MLCL": 0}

S12F05:
  description: map transmit inquire
  to_host: True
  to_equipment: False
  reply: True
  reply_required: True
  multi_block: False
  structure: [MID, IDTYP, MAPFT, MLCL]
  sample_data: |-
    {
    "MID": "materialID",
    "IDTYP": secsgem.secs.data_items.IDTYP.WAFER,
    "MAPFT": secsgem.secs.data_items.MAPFT.ARRAY,
    "MLCL": 0}

S12F06:
  description: map transmit - grant
  to_host: False
  to_equipment: True
  reply: False
  reply_required: False
  multi_block: False
  structure: GRNT1
  sample_data: 'secsgem.secs.data_items.GRNT1.MATERIALID_UNKNOWN'

S12F07:
  description: map data type 1 - send
  to_host: True
  to_equipment: False
  reply: True
  reply_required: True
  multi_block: True
  structure: [MID, IDTYP, [[RSINF, BINLT]]]
  sample_data: |-
    {
    "MID": "materialID",
    "IDTYP": secsgem.secs.data_items.IDTYP.WAFER,
    "DATA": [
        {"RSINF": [1, 2, 3], "BINLT": [1, 2, 3, 4]},
        {"RSINF": [4, 5, 6], "BINLT": [5, 6, 7, 8]}]}

S12F08:
  description: map data type 1 - acknowledge
  to_host: False
  to_equipment: True
  reply: False
  reply_required: False
  multi_block: False
  structure: MDACK
  sample_data: 'secsgem.secs.data_items.MDACK.ABORT_MAP'

S12F09:
  description: map data type 2 - send
  to_host: True
  to_equipment: False
  reply: True
  reply_required: True
  multi_block: True
  structure: [MID, IDTYP, STRP, BINLT]
  sample_data: |-
    {
    "MID": "materialID",
    "IDTYP": secsgem.secs.data_items.IDTYP.WAFER,
    "STRP": [0, 1],
    "BINLT": [1, 2, 3, 4, 5, 6]}

S12F10:
  description: map data type 2 - acknowledge
  to_host: False
  to_equipment: True
  reply: False
  reply_required: False
  multi_block: False
  structure: MDACK
  sample_data: 'secsgem.secs.data_items.MDACK.ACK'

S12F11:
  description: map data type 3 - send
  to_host: True
  to_equipment: False
  reply: True
  reply_required: True
  multi_block: True
  structure: [MID, IDTYP, [[XYPOS, BINLT]]]
  sample_data: |-
    {
    "MID": "materialID",
    "IDTYP": secsgem.secs.data_items.IDTYP.WAFER,
    "DATA": [
        {"XYPOS": [1, 2], "BINLT": [1, 2, 3, 4]},
        {"XYPOS": [3, 4], "BINLT": [5, 6, 7, 8]}]}

S12F12:
  description: map data type 3 - acknowledge
  to_host: False
  to_equipment: True
  reply: False
  reply_required: False
  multi_block: False
  structure: MDACK
  sample_data: 'secsgem.secs.data_items.MDACK.FORMAT_ERROR'

S12F13:
  description: map data type 1 - request
  to_host: True
  to_equipment: False
  reply: True
  reply_required: True
  multi_block: False
  structure: [MID, IDTYP]
  sample_data: '{"MID": "materialID", "IDTYP": secsgem.secs.data_items.IDTYP.WAFER}'

S12F14:
  description: map data type 1
  to_host: False
  to_equipment: True
  reply: False
  reply_required: False
  multi_block: True
  structure: [MID, IDTYP, [[RSINF, BINLT]]]
  sample_data: |-
    {
    "MID": "materialID",
    "IDTYP": secsgem.secs.data_items.IDTYP.WAFER,
    "DATA": [
        {"RSINF": [1, 2, 3], "BINLT": [1, 2, 3, 4]},
        {"RSINF": [4, 5, 6], "BINLT": [5, 6, 7, 8]}]}

S12F15:
  description: map data type 2 - request
  to_host: True
  to_equipment: False
  reply: True
  reply_required: True
  multi_block: False
  structure: [MID, IDTYP]
  sample_data: '{"MID": "materialID", "IDTYP": secsgem.secs.data_items.IDTYP.WAFER}'

S12F16:
  description: map data type 2
  to_host: False
  to_equipment: True
  reply: False
  reply_required: False
  multi_block: True
  structure: [MID, IDTYP, STRP, BINLT]
  sample_data: |-
    {
    "MID": "materialID",
    "IDTYP": secsgem.secs.data_items.IDTYP.WAFER,
    "STRP": [0, 1],
    "BINLT": [1, 2, 3, 4, 5, 6]}

S12F17:
  description: map data type 3 - request
  to_host: True
  to_equipment: False
  reply: True
  reply_required: True
  multi_block: False
  structure: [MID, IDTYP, SDBIN]
  sample_data: |-
    {
    "MID": "materialID",
    "IDTYP": secsgem.secs.data_items.IDTYP.WAFER,
    "SDBIN": secsgem.secs.data_items.SDBIN.DONT_SEND}

S12F18:
  description: map data type 3
  to_host: False
  to_equipment: True
  reply: False
  reply_required: False
  multi_block: True
  structure: [MID, IDTYP, [[XYPOS, BINLT]]]
  sample_data: |-
    {
    "MID": "materialID",
    "IDTYP": secsgem.secs.data_items.IDTYP.WAFER,
    "DATA": [
        {"XYPOS": [1, 2], "BINLT": [1, 2, 3, 4]},
        {"XYPOS": [3, 4], "BINLT": [5, 6, 7, 8]}]}

S12F19:
  description: map error report - send
  to_host: True
  to_equipment: True
  reply: False
  reply_required: False
  multi_block: False
  structure: [MAPER, DATLC]
  sample_data: '{"MAPER": secsgem.secs.data_items.MAPER.INVALID_DATA, "DATLC": 0}'

S14F00:
  description: abort transaction stream 14
  to_host: True
  to_equipment: True
  reply: False
  reply_required: False
  multi_block: False

S14F01:
  description: GetAttr request
  to_host: True
  to_equipment: True
  reply: True
  reply_required: True
  multi_block: False
  structure: [OBJSPEC, OBJTYPE, [OBJID], [["FILTER", ATTRID, ATTRDATA, ATTRRELN]], [ATTRID]]
  sample_data: |-
    {
    "OBJSPEC": '',
    "OBJTYPE": 'StripMap',
    "OBJID": ['MAP001'],
    "FILTER": [],
    "ATTRID": ['OriginLocation', 'Rows', 'Columns', 'CellStatus', 'LotID']}

S14F02:
  description: GetAttr data
  to_host: True
  to_equipment: True
  reply: False
  reply_required: False
  multi_block: True
  structure: [[[OBJID, [["ATTRIBS", ATTRID, ATTRDATA]]]], ["ERRORS", OBJACK, [["ERROR", ERRCODE, ERRTEXT]]]]
  sample_data: |-
    {
    "DATA": [{
        "OBJID": "MAP001",
        "ATTRIBS": [
            {"ATTRID": "OriginLocation", "ATTRDATA": "0"},
            {"ATTRID": "Rows", "ATTRDATA": 4},
            {"ATTRID": "Columns", "ATTRDATA": 4},
            {"ATTRID": "CellStatus", "ATTRDATA": 6},
            {"ATTRID": "LotID", "ATTRDATA":"LOT001"}]}],
        "ERRORS": {"OBJACK": 0}}

S14F03:
  description: SetAttr request
  to_host: True
  to_equipment: True
  reply: True
  reply_required: True
  multi_block: False
  structure: [OBJSPEC, OBJTYPE, [OBJID], [["ATTRIBS", ATTRID, ATTRDATA]]]
  sample_data: |-
    {
      "OBJSPEC": '',
      "OBJTYPE": 'StripMap',
      "OBJID": ['MAP001'],
      "ATTRIBS": [{
          "ATTRID": "CellStatus",
          "ATTRDATA": "3"}]}

S14F04:
  description: SetAttr data
  to_host: True
  to_equipment: True
  reply: False
  reply_required: False
  multi_block: True
  structure: [[[OBJID, [["ATTRIBS", ATTRID, ATTRDATA]]]], ["ERRORS", OBJACK, [["ERROR", ERRCODE, ERRTEXT]]]]
  sample_data: |-
    {
    "DATA": [{
        "OBJID": "MAP001",
        "ATTRIBS": [
            {"ATTRID": "OriginLocation", "ATTRDATA": "0"},
            {"ATTRID": "Rows", "ATTRDATA": 4},
            {"ATTRID": "Columns", "ATTRDATA": 4},
            {"ATTRID": "CellStatus", "ATTRDATA": 6},
            {"ATTRID": "LotID", "ATTRDATA":"LOT001"}]}],
        "ERRORS": {"OBJACK": 0}}