{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://catalog.lintel.tools/schemas/schemastore/vtcfg/versions/19.0.0.json",
  "title": "VT System Configuration",
  "description": "VT System Configuration.",
  "x-lintel": {
    "source": "https://www.schemastore.org/vtcfg-v19.0.0.json",
    "sourceSha256": "a418a73daf2af20d0b695cd29e345a14a1eb9a24f983148ba07704ffcd3284a4",
    "fileMatch": [
      "*.vtcfg"
    ]
  },
  "type": "object",
  "$ref": "#/$defs/vtcfg",
  "$defs": {
    "vtcfg": {
      "type": "object",
      "properties": {
        "version": {
          "title": "Version",
          "description": "Version of the YAML file format, e.g. 19.0.0.",
          "type": "string"
        },
        "modules": {
          "title": "Modules",
          "description": "List of VT System Modules.",
          "type": "array",
          "items": {
            "$ref": "#/$defs/Module"
          }
        },
        "vts-control-window": {
          "$ref": "#/$defs/VtsControlWindow"
        }
      },
      "required": [
        "version"
      ],
      "additionalProperties": false
    },
    "Module": {
      "title": "VT System Module",
      "description": "Describes a VT System module.",
      "type": "object",
      "properties": {
        "type": {
          "title": "ModuleType",
          "description": "Type of the VT System Module, e.g. 1004.",
          "type": "integer",
          "examples": [
            1004,
            2516,
            7001
          ]
        },
        "module-channel": {
          "$ref": "#/$defs/ModuleChannel"
        },
        "channels": {
          "title": "Channel",
          "description": "Describes a single channel.",
          "type": "array",
          "items": {
            "$ref": "#/$defs/Channel"
          }
        },
        "constraints": {
          "title": "Constraints",
          "description": "Describes the constraints for all channels of the module.",
          "type": "array",
          "items": {
            "$ref": "#/$defs/Constraint"
          }
        },
        "gui-labels": {
          "title": "GUI Labels",
          "description": "Specifies the labels shown in the VT System Control Window (only for CANoe DE).",
          "type": "array",
          "items": {
            "$ref": "#/$defs/GUILabel"
          }
        },
        "mdid": {
          "title": "MDID",
          "description": "Unique module identifier.",
          "type": "string"
        },
        "vdid": {
          "title": "VDID",
          "description": "Unique module identifier.",
          "type": "string"
        },
        "interface": {
          "title": "Interface",
          "description": "Interface version of the module's firmware.",
          "type": "integer",
          "examples": [
            0
          ],
          "default": 0
        },
        "vendor-id": {
          "title": "Vendor ID",
          "description": "Identifiers the vendor of this VT System module.",
          "type": "integer",
          "examples": [
            5
          ],
          "default": 5
        },
        "module-specific-settings": {
          "$ref": "#/$defs/ModuleSpecificSettings"
        }
      },
      "required": [
        "type",
        "module-channel"
      ],
      "additionalProperties": false
    },
    "Channel": {
      "title": "VT System Channel",
      "description": "Describes a channel of a VT System module.",
      "type": "object",
      "properties": {
        "name": {
          "title": "Name",
          "description": "User defined channel name.",
          "type": "string",
          "pattern": "^[a-zA-Z_][0-9a-zA-Z_]*$",
          "examples": [
            "MyName"
          ]
        },
        "active-values": {
          "title": "Active Values",
          "description": "A list of activated measurement values.",
          "type": "array",
          "items": {
            "$ref": "#/$defs/ChannelActiveValue"
          }
        },
        "start-values": {
          "title": "Start Values",
          "description": "A list of start value settings.",
          "type": "array",
          "items": {
            "$ref": "#/$defs/StartValue"
          }
        },
        "comment": {
          "title": "Comment",
          "description": "User defined comment for this channel.",
          "type": "string",
          "examples": [
            "My comment"
          ]
        },
        "start-state-enabled": {
          "title": "Start State Enabled",
          "description": "A flag indicating if the start state settings are actually applied.",
          "type": "boolean"
        }
      },
      "required": [
        "name"
      ],
      "additionalProperties": false
    },
    "ChannelActiveValue": {
      "title": "Channel Active Value",
      "description": "Active measurement value on a channel.",
      "type": "object",
      "properties": {
        "name": {
          "title": "Name",
          "description": "Name of the value.",
          "type": "string",
          "examples": [
            "CurVoltage",
            "StimulationRunning"
          ]
        },
        "cycle-time": {
          "title": "Cycle Time",
          "description": "Transmission cycle time for this value (e.g. 10ms).",
          "type": "string",
          "examples": [
            "10ms",
            "1s"
          ]
        },
        "integration-time": {
          "title": "Integration Time",
          "description": "Integration time of this value (e.g. 10ms).",
          "type": "string",
          "examples": [
            "100ms"
          ]
        }
      },
      "required": [
        "name"
      ],
      "additionalProperties": false
    },
    "StartValue": {
      "title": "Start Value",
      "description": "Describes a start value setting.",
      "type": "object",
      "properties": {
        "name": {
          "title": "Name",
          "description": "Name of the start value.",
          "type": "string"
        },
        "value": {
          "$ref": "#/$defs/Value"
        }
      },
      "required": [
        "name",
        "value"
      ],
      "additionalProperties": false
    },
    "Constraint": {
      "title": "Constraint",
      "description": "Describes a constraint.",
      "type": "object",
      "properties": {
        "value": {
          "title": "Value",
          "description": "The value that shall be constrained.",
          "type": "string",
          "examples": [
            "RelayBusBar1A"
          ]
        },
        "channel": {
          "title": "Channel",
          "description": "The channel number this constraint belongs to (1 ... n).",
          "type": "integer",
          "examples": [
            1,
            2,
            3,
            4
          ]
        },
        "conditions": {
          "title": "Conditions",
          "description": "List of constraint conditions.",
          "type": "array",
          "items": {
            "$ref": "#/$defs/Condition"
          }
        }
      },
      "required": [
        "value",
        "channel",
        "conditions"
      ],
      "additionalProperties": false
    },
    "Condition": {
      "title": "Condition",
      "description": "Describes a constraint condition.",
      "type": "object",
      "properties": {
        "operation": {
          "title": "Operation",
          "description": "The operation that is to be constrained.",
          "type": "string",
          "enum": [
            "open",
            "close",
            "configured"
          ],
          "examples": [
            "open",
            "close"
          ]
        },
        "sysvar": {
          "title": "System Variable",
          "description": "The system variable that is to be evaluated.",
          "type": "string",
          "examples": [
            "MynameSpace::MySysvar"
          ]
        },
        "operator": {
          "title": "Operator",
          "description": "The operator that is used for comparison.",
          "type": "string",
          "enum": [
            "less-than",
            "less-or-equal",
            "equal",
            "not-equal",
            "greater-than",
            "greater-or-equal",
            "open",
            "close",
            "forbidden",
            "configured"
          ],
          "examples": [
            "less-than",
            "less-or-equal",
            "not-equal",
            "forbidden"
          ]
        },
        "operand": {
          "title": "Operand",
          "description": "The operand that is used for comparison.",
          "type": "number",
          "examples": [
            42
          ]
        }
      },
      "required": [
        "operator"
      ],
      "additionalProperties": false
    },
    "GUILabel": {
      "title": "GUI Label",
      "description": "Describes a label in the VT System Control Window (only CANoe DE).",
      "type": "object",
      "properties": {
        "name": {
          "title": "Name",
          "description": "Name of the label (must match any of the predefined label names).",
          "type": "string"
        },
        "text": {
          "title": "Text",
          "description": "User defined text to show in the label.",
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "number"
            }
          ]
        }
      },
      "required": [
        "name",
        "text"
      ],
      "additionalProperties": false
    },
    "ModuleChannel": {
      "title": "Module Channel",
      "description": "Describes the module channel of a VT System Module.",
      "type": "object",
      "properties": {
        "name": {
          "title": "Name",
          "description": "User defined channel name.",
          "type": "string",
          "pattern": "^[a-zA-Z_][0-9a-zA-Z_]*$"
        },
        "comment": {
          "title": "Comment",
          "description": "User defined comment.",
          "type": "string",
          "examples": [
            "My Comment"
          ]
        },
        "start-state-enabled": {
          "title": "Start State Enabled",
          "description": "A flag indicating if the start state is actually applied.",
          "type": "boolean"
        },
        "active-values": {
          "title": "Active Values",
          "description": "A list of active measurement values.",
          "type": "array",
          "items": {
            "$ref": "#/$defs/ModuleChannelActiveValue"
          }
        },
        "start-values": {
          "title": "Start Values",
          "description": "A list of start values.",
          "type": "array",
          "items": {
            "$ref": "#/$defs/StartValue"
          }
        }
      },
      "required": [
        "name"
      ],
      "additionalProperties": false
    },
    "ModuleChannelActiveValue": {
      "title": "Module Channel Active Value",
      "description": "Describes a active measurement value on a module channel.",
      "type": "object",
      "properties": {
        "name": {
          "title": "Name",
          "description": "Name of the measurement value to activate.",
          "type": "string"
        },
        "cycle-time": {
          "title": "Cycle Time",
          "description": "Transmission cycle time of the measurement value (e.g. 10ms).",
          "type": "string",
          "examples": [
            "1ms",
            "10ms",
            "50ms",
            "1s"
          ]
        },
        "integration-time": {
          "title": "Integration Time",
          "description": "Integration time of this value (e.g. 10ms).",
          "type": "string",
          "examples": [
            "100ms"
          ]
        }
      },
      "required": [
        "name"
      ],
      "additionalProperties": false
    },
    "ModuleSpecificSettings": {
      "title": "Module Specific Settings",
      "description": "Additional settings, which are required for certain modules only.",
      "type": "object",
      "properties": {
        "supply-voltage": {
          "title": "Supply Voltage",
          "description": "VT2710: Supply voltage.",
          "type": "number",
          "examples": [
            3.3
          ]
        },
        "supply-voltage-lvds": {
          "title": "Supply Voltage For LVDS",
          "description": "VT2710: Supply voltage for LVDS.",
          "type": "number",
          "examples": [
            3.3
          ]
        },
        "supply-voltage-lvds-enabled": {
          "title": "LVDS Supply Voltage Enabled",
          "description": "VT2710: Enables the LVDS supply voltage.",
          "type": "boolean"
        },
        "lvds-connector-usage-1": {
          "title": "LVDS Connector Usage 1",
          "description": "VT2710: Sets the usage mode for LVDS connector 1.",
          "type": "string",
          "enum": [
            "fpga",
            "canoe"
          ],
          "examples": [
            "canoe"
          ]
        },
        "lvds-connector-usage-2": {
          "title": "LVDS Connector Usage 2",
          "description": "VT2710: Sets the usage mode for LVDS connector 2.",
          "type": "string",
          "enum": [
            "fpga",
            "canoe"
          ],
          "examples": [
            "canoe"
          ]
        },
        "connectors": {
          "title": "Connectors",
          "description": "VT2710: List of connector descriptions.",
          "type": "array",
          "items": {
            "$ref": "#/$defs/Connector"
          }
        },
        "smart-charging-mode": {
          "title": "Smart Charging Mode",
          "description": "VT5201: smart charging mode for this module.",
          "type": "string",
          "enum": [
            "evse",
            "ev",
            "legacy"
          ],
          "examples": [
            "evse"
          ]
        },
        "piggy-type": {
          "title": "Piggy Type",
          "description": "VT6306: Type of piggy to use.",
          "type": "string",
          "enum": [
            "none",
            "psi5-sent",
            "eth-100-base-t1",
            "eth-1000-base-t1"
          ],
          "examples": [
            "eth-1000-base-t1"
          ]
        }
      },
      "additionalProperties": false
    },
    "Connector": {
      "title": "Connector",
      "description": "Configures a VT2710 connector.",
      "type": "object",
      "properties": {
        "supply-mode": {
          "title": "Supply Mode",
          "description": "Defines the supply mode for this VT2710 connector.",
          "type": "string",
          "enum": [
            "internal",
            "external"
          ]
        },
        "int-to-ext": {
          "title": "Internal To External",
          "description": "A flag indicating if the internal voltage is also sent to the external voltage pins.",
          "type": "boolean"
        },
        "pins": {
          "title": "Pins",
          "description": "A list of pin configurations.",
          "type": "array",
          "items": {
            "$ref": "#/$defs/Pin"
          }
        }
      },
      "required": [
        "supply-mode",
        "int-to-ext",
        "pins"
      ],
      "additionalProperties": false
    },
    "Pin": {
      "title": "Pin",
      "description": "Contains settings for a VT2710 pin.",
      "type": "object",
      "properties": {
        "dio-direction": {
          "$ref": "#/$defs/DioDirection"
        },
        "user-fpga-mode": {
          "$ref": "#/$defs/UserFPGAMode"
        },
        "used-for": {
          "$ref": "#/$defs/UsedFor"
        }
      },
      "required": [
        "dio-direction",
        "user-fpga-mode",
        "used-for"
      ],
      "additionalProperties": false
    },
    "VtsControlWindow": {
      "title": "VT System Control Window",
      "description": "Section with internal settings for the VT System Control Window (only CANoe DE).",
      "type": "object",
      "properties": {
        "flip-rack-order": {
          "title": "Flip Rack Order",
          "description": "Flag to invert the rendering order of racks in the GUI.",
          "type": "boolean"
        },
        "serialized-config": {
          "title": "Serialized Config",
          "description": "Internal configuration string.",
          "type": "string"
        }
      },
      "required": [
        "flip-rack-order",
        "serialized-config"
      ],
      "additionalProperties": false
    },
    "DioDirection": {
      "title": "DIO Direction",
      "description": "Direction of a DIO pin.",
      "type": "string",
      "enum": [
        "input",
        "output",
        "mixed"
      ]
    },
    "UsedFor": {
      "title": "Used For",
      "description": "Function assignment for a VT2710 pin.",
      "type": "string",
      "enum": [
        "spi",
        "i2c",
        "dio",
        "rs232",
        "rs485",
        "uart",
        "fpga"
      ]
    },
    "UserFPGAMode": {
      "title": "User FPGA Mode",
      "description": "Specifies the FPGA mode for a VT2710 pin.",
      "type": "string",
      "enum": [
        "din",
        "dout",
        "i2c",
        "rs232",
        "rs485"
      ]
    },
    "Value": {
      "title": "Value",
      "description": "Value to set the start value to.",
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "string"
        }
      ]
    }
  }
}
