asyncapi: 2.6.0
info:
  title: SCPI (Standard Commands for Programmable Instruments) over RS-232
  version: SCPI-99 / IEEE 488.2
  description: ASCII line-based instrument control (oscilloscopes, PSUs, DMMs). Baud
    is configured manually on both sides -- no auto-negotiation -- and commonly must
    match exactly or the instrument just doesn't respond, with no error reported at
    all. Chains multiple independent commands onto one physical line via ';', which
    compoundMessageDelimiter exists specifically for.
servers:
  serial_link:
    url: serial://tty/9600
    protocol: serial
    description: Physical UART Transport (9600 bps, 8N1.0)
    bindings:
      serial:
        baudRate: 9600
        dataBits: 8
        parity: none
        stopBits: 1.0
        framingType: delimited
        integrity: none
channels:
  omniuart/cmd/Identify:
    publish:
      summary: 'Send command Identify (ID: *IDN?)'
      description: '*IDN? System identification query.'
      message:
        name: Identify_Message
        title: Identify Command
        payload:
          $ref: '#/components/schemas/Identify_Request'
  omniuart/cmd/Reset:
    publish:
      summary: 'Send command Reset (ID: *RST)'
      description: '*RST System reset command.'
      message:
        name: Reset_Message
        title: Reset Command
        payload:
          $ref: '#/components/schemas/Reset_Request'
  omniuart/cmd/ClearStatus:
    publish:
      summary: 'Send command ClearStatus (ID: *CLS)'
      description: '*CLS Clear status registers.'
      message:
        name: ClearStatus_Message
        title: ClearStatus Command
        payload:
          $ref: '#/components/schemas/ClearStatus_Request'
  omniuart/cmd/MeasureVoltageDC:
    publish:
      summary: 'Send command MeasureVoltageDC (ID: MEAS:VOLT:DC?)'
      description: MEAS:VOLT:DC? Measure DC voltage in Volts.
      message:
        name: MeasureVoltageDC_Message
        title: MeasureVoltageDC Command
        payload:
          $ref: '#/components/schemas/MeasureVoltageDC_Request'
  omniuart/cmd/MeasureCurrentDC:
    publish:
      summary: 'Send command MeasureCurrentDC (ID: MEAS:CURR:DC?)'
      description: MEAS:CURR:DC? Measure DC current in Amperes.
      message:
        name: MeasureCurrentDC_Message
        title: MeasureCurrentDC Command
        payload:
          $ref: '#/components/schemas/MeasureCurrentDC_Request'
  omniuart/cmd/SetVoltageOutput:
    publish:
      summary: 'Send command SetVoltageOutput (ID: SOUR:VOLT )'
      description: SOUR:VOLT <val> Set programmable power supply output voltage.
      message:
        name: SetVoltageOutput_Message
        title: SetVoltageOutput Command
        payload:
          $ref: '#/components/schemas/SetVoltageOutput_Request'
  omniuart/telemetry/IdentifyResult:
    subscribe:
      summary: 'Unsolicited telemetry message IdentifyResult (ID: IdentifyResult)'
      description: e.g. 'ACME,MM7,SN12345,FW2.1'
      message:
        name: IdentifyResult_Telemetry_Message
        title: IdentifyResult Telemetry
        payload:
          $ref: '#/components/schemas/IdentifyResult_Telemetry'
components:
  messages: {}
  schemas:
    Identify_Request:
      type: object
      properties:
        command_id:
          type: integer
          const: '*IDN?'
          description: Opcode ID for Identify
      description: '*IDN? System identification query.'
    Reset_Request:
      type: object
      properties:
        command_id:
          type: integer
          const: '*RST'
          description: Opcode ID for Reset
      description: '*RST System reset command.'
    ClearStatus_Request:
      type: object
      properties:
        command_id:
          type: integer
          const: '*CLS'
          description: Opcode ID for ClearStatus
      description: '*CLS Clear status registers.'
    MeasureVoltageDC_Request:
      type: object
      properties:
        command_id:
          type: integer
          const: MEAS:VOLT:DC?
          description: Opcode ID for MeasureVoltageDC
      description: MEAS:VOLT:DC? Measure DC voltage in Volts.
    MeasureCurrentDC_Request:
      type: object
      properties:
        command_id:
          type: integer
          const: MEAS:CURR:DC?
          description: Opcode ID for MeasureCurrentDC
      description: MEAS:CURR:DC? Measure DC current in Amperes.
    SetVoltageOutput_Request:
      type: object
      properties:
        command_id:
          type: integer
          const: 'SOUR:VOLT '
          description: Opcode ID for SetVoltageOutput
        voltage:
          type: number
      description: SOUR:VOLT <val> Set programmable power supply output voltage.
    IdentifyResult_Telemetry:
      type: object
      properties:
        manufacturer:
          type: string
        model:
          type: string
        serial:
          type: string
        firmware:
          type: string
      description: e.g. 'ACME,MM7,SN12345,FW2.1'
