{
    "$schema": "https://json-schema.org/draft-04/schema#",
    "title": "AWG Command Table Schema",
    "description": "Schema for ZI HDAWG AWG Command Table",
    "definitions": {
        "header": {
            "properties": {
                "version": {
                    "type": "string",
                    "enum": [
                        "0.2"
                    ],
                    "description": "File format version. This version must match with the relevant schema version."
                },
                "partial": {
                    "description": "Set to true for incremental table updates",
                    "type": "boolean",
                    "default": "false"
                },
                "userString": {
                    "description": "User-definable label",
                    "type": "string",
                    "maxLength": 30
                }
            },
            "required": [
                "version"
            ]
        },
        "table": {
            "items": {
                "$ref": "#/definitions/entry"
            },
            "minItems": 0,
            "maxItems": 1024
        },
        "entry": {
            "properties": {
                "index": {
                    "$ref": "#/definitions/tableindex"
                },
                "waveform": {
                    "$ref": "#/definitions/waveform"
                },
                "phase0": {
                    "$ref": "#/definitions/phase"
                },
                "phase1": {
                    "$ref": "#/definitions/phase"
                },
                "amplitude0": {
                    "$ref": "#/definitions/amplitude"
                },
                "amplitude1": {
                    "$ref": "#/definitions/amplitude"
                }
            },
            "additionalProperties": false,
            "required": [
                "index"
            ]
        },
        "tableindex": {
            "type": "integer",
            "minimum": 0,
            "maximum": 1023,
            "exclusiveMinimum": false,
            "exclusiveMaximum": false
        },
        "waveform": {
            "properties": {
                "index": {
                    "$ref": "#/definitions/waveformindex"
                },
                "length": {
                    "$ref": "#/definitions/waveformlength"
                },
                "samplingRateDivider": {
                    "$ref": "#/definitions/samplingratedivider"
                },
                "awgChannel0": {
                    "$ref": "#/definitions/awgchannel"
                },
                "awgChannel1": {
                    "$ref": "#/definitions/awgchannel"
                },
                "precompClear": {
                    "$ref": "#/definitions/precompclear"
                },
                "playZero": {
                    "$ref": "#/definitions/playzero"
                }
            },
            "additionalProperties": false,
            "oneOf": [
                {
                    "required": [
                        "index"
                    ]
                },
                {
                    "required": [
                        "playZero",
                        "length"
                    ]
                }
            ]
        },
        "waveformindex": {
            "description": "Index of the waveform to play as defined with the assignWaveIndex sequencer instruction",
            "type": "integer",
            "minimum": 0,
            "maximum": 65535,
            "exclusiveMinimum": false,
            "exclusiveMaximum": false
        },
        "waveformlength": {
            "description": "The length of the waveform in samples",
            "type": "integer",
            "multipleOf": 16,
            "minimum": 32,
            "exclusiveMinimum": false
        },
        "samplingratedivider": {
            "descpription": "Integer exponent n of the sampling rate divider: 2.4 GSa/s / 2^n, n in range 0 ... 13",
            "type": "integer",
            "minimum": 0,
            "maximum": 13
        },
        "awgchannel": {
            "description": "Assign the given AWG channel to signal output 0 & 1",
            "type": "array",
            "minItems": 1,
            "maxItems": 2,
            "uniqueItems": true,
            "items": [
                {
                    "type": "string",
                    "enum": [
                        "sigout0",
                        "sigout1"
                    ]
                }
            ]
        },
        "precompclear": {
            "description": "Set to true to clear the precompensation filters",
            "type": "boolean",
            "default": false
        },
        "playzero": {
            "description": "Play a zero-valued waveform for specified length of waveform, equivalent to the playZero sequencer instruction",
            "type": "boolean",
            "default": "false"
        },
        "phase": {
            "properties": {
                "value": {
                    "description": "Phase value of the given sine generator in degree",
                    "type": "number"
                },
                "increment": {
                    "description": "Set to true for incremental phase value, or to false for absolute",
                    "type": "boolean",
                    "default": "false"
                }
            },
            "additionalProperties": false,
            "required": [
                "value"
            ]
        },
        "amplitude": {
            "properties": {
                "value": {
                    "description": "Amplitude scaling factor of the given AWG channel",
                    "type": "number",
                    "minimum": -1.0,
                    "maximum": 1.0,
                    "exclusiveMinimum": false,
                    "exclusiveMaximum": false
                },
                "increment": {
                    "description": "Set to true for incremental amplitude value, or to false for absolute",
                    "type": "boolean",
                    "default": "false"
                }
            },
            "additionalProperties": false,
            "required": [
                "value"
            ]
        }
    },
    "properties": {
        "$schema": {
            "type": "string"
        },
        "header": {
            "$ref": "#/definitions/header"
        },
        "table": {
            "$ref": "#/definitions/table"
        }
    },
    "additionalProperties": false,
    "required": [
        "header"
    ]
}
