{
  "_note": "Worked example for clause 8.1: the Property Exchange resources a video reference generator could serve. Illustrative; the manufacturer ID is the maker's own and is left as a placeholder here.",
  "ResourceList": [
    {
      "resource": "DeviceInfo"
    },
    {
      "resource": "AllCtrlList"
    },
    {
      "resource": "CtrlMapList"
    },
    {
      "resource": "JSONSchema"
    }
  ],
  "DeviceInfo": {
    "manufacturerId": "maker's own (USB-006)",
    "familyId": [
      1,
      0
    ],
    "modelId": [
      1,
      0
    ],
    "versionId": [
      1,
      0,
      2,
      0
    ],
    "manufacturer": "Example Maker",
    "family": "Video sync",
    "model": "Example video reference generator",
    "version": "1.0.2",
    "serialNumber": "E6614103E73F8A2C"
  },
  "AllCtrlList": [
    {
      "title": "Format",
      "paramPath": "Timing",
      "ctrlType": "nrpn",
      "ctrlIndex": [
        0,
        1
      ],
      "channel": 1,
      "typeHint": "valueSelect",
      "ctrlMapId": "formats",
      "default": 0
    },
    {
      "title": "Outputs",
      "paramPath": "Timing",
      "ctrlType": "nrpn",
      "ctrlIndex": [
        0,
        2
      ],
      "channel": 1,
      "minMax": [
        0,
        4294967295
      ],
      "typeHint": "toggle",
      "ctrlMapId": "offon",
      "default": 4294967295
    },
    {
      "title": "Genlock",
      "paramPath": "Genlock",
      "ctrlType": "nrpn",
      "ctrlIndex": [
        1,
        1
      ],
      "channel": 1,
      "minMax": [
        0,
        4294967295
      ],
      "typeHint": "toggle",
      "ctrlMapId": "offon",
      "default": 4294967295
    },
    {
      "title": "Phase",
      "paramPath": "Genlock",
      "ctrlType": "nrpn",
      "ctrlIndex": [
        1,
        2
      ],
      "channel": 1,
      "minMax": [
        0,
        4294967295
      ],
      "typeHint": "continuous",
      "default": 2147483648,
      "x-units": {
        "min": -32000,
        "max": 32000,
        "unit": "ns",
        "step": 1,
        "coarse": 100
      }
    },
    {
      "title": "Trim",
      "paramPath": "Genlock",
      "ctrlType": "nrpn",
      "ctrlIndex": [
        1,
        3
      ],
      "channel": 1,
      "minMax": [
        0,
        4294967295
      ],
      "typeHint": "continuous",
      "default": 2147483648,
      "x-units": {
        "min": -40,
        "max": 40,
        "unit": "ppm",
        "decimals": 1,
        "step": 0.1,
        "coarse": 1
      }
    },
    {
      "title": "Latch",
      "paramPath": "Genlock",
      "ctrlType": "nrpn",
      "ctrlIndex": [
        1,
        4
      ],
      "channel": 1,
      "minMax": [
        0,
        4294967295
      ],
      "typeHint": "continuous",
      "default": 946921923,
      "x-units": {
        "min": 0,
        "max": 127,
        "unit": "steps",
        "step": 1,
        "coarse": 4
      },
      "stepCount": 128
    },
    {
      "title": "Lock",
      "paramPath": "Status",
      "ctrlType": "nrpn",
      "ctrlIndex": [
        2,
        1
      ],
      "channel": 1,
      "typeHint": "valueSelect",
      "ctrlMapId": "lock",
      "default": 2,
      "recognize": false,
      "transmit": true
    },
    {
      "title": "Reference",
      "paramPath": "Status",
      "ctrlType": "nrpn",
      "ctrlIndex": [
        2,
        2
      ],
      "channel": 1,
      "typeHint": "valueSelect",
      "ctrlMapId": "ref",
      "default": 1,
      "recognize": false,
      "transmit": true
    }
  ],
  "CtrlMapList": {
    "offon": [
      {
        "value": 0,
        "title": "OFF"
      },
      {
        "value": 4294967295,
        "title": "ON"
      }
    ],
    "formats": [
      {
        "value": 0,
        "title": "525i59.94"
      },
      {
        "value": 1,
        "title": "625i50"
      },
      {
        "value": 2,
        "title": "480p59.94"
      },
      {
        "value": 3,
        "title": "576p50"
      },
      {
        "value": 4,
        "title": "720p50"
      },
      {
        "value": 5,
        "title": "720p59.94"
      },
      {
        "value": 6,
        "title": "720p60"
      },
      {
        "value": 7,
        "title": "1080i50"
      },
      {
        "value": 8,
        "title": "1080i59.94"
      },
      {
        "value": 9,
        "title": "1080i60"
      },
      {
        "value": 10,
        "title": "1080p23.98"
      },
      {
        "value": 11,
        "title": "1080p24"
      },
      {
        "value": 12,
        "title": "1080p25"
      },
      {
        "value": 13,
        "title": "1080p29.97"
      },
      {
        "value": 14,
        "title": "1080p30"
      }
    ],
    "lock": [
      {
        "value": 0,
        "title": "FREE-RUN"
      },
      {
        "value": 1,
        "title": "ACQUIRING"
      },
      {
        "value": 2,
        "title": "LOCKED"
      }
    ],
    "ref": [
      {
        "value": 0,
        "title": "NONE"
      },
      {
        "value": 1,
        "title": "525i59.94"
      },
      {
        "value": 2,
        "title": "625i50"
      },
      {
        "value": 3,
        "title": "1080i59.94"
      }
    ]
  },
  "JSONSchema": {
    "ctrl-units-v1": {
      "$schema": "http://json-schema.org/draft-07/schema#",
      "$id": "ctrl-units-v1",
      "title": "Control units v1: engineering units for MIDI-CI Property Exchange controller entries",
      "description": "Optional x-units object on an AllCtrlList / ChCtrlList entry (M2-117). Maps the entry's 32-bit minMax linearly onto an engineering range for display and stepping. A device that uses it serves this schema as JSONSchema with resId \"ctrl-units-v1\".",
      "type": "object",
      "properties": {
        "x-units": {
          "type": "object",
          "required": [
            "min",
            "max"
          ],
          "additionalProperties": false,
          "properties": {
            "min": {
              "type": "number",
              "description": "Engineering value at minMax[0]"
            },
            "max": {
              "type": "number",
              "description": "Engineering value at minMax[1]"
            },
            "unit": {
              "type": "string",
              "maxLength": 8,
              "description": "Shown after the value: an SI symbol (ns, kHz, ms, V), %, °, or a short word"
            },
            "decimals": {
              "type": "integer",
              "minimum": 0,
              "maximum": 6,
              "default": 0
            },
            "step": {
              "type": "number",
              "exclusiveMinimum": 0,
              "description": "Fine step in engineering units; values are rounded to it. Default 10^-decimals"
            },
            "coarse": {
              "type": "number",
              "exclusiveMinimum": 0,
              "description": "Normal (coarse) step; default = step"
            },
            "zero": {
              "type": "number",
              "description": "Bar origin for bipolar controls; default 0 when min < 0 < max, else min"
            }
          }
        }
      },
      "$comment": "EIS clause 8.1 (CTRL-USB). Published at https://lzxindustries.net/eis/data/ctrl-units-v1.schema.json; a device serves it as the PE JSONSchema resource with resId ctrl-units-v1."
    }
  }
}
