{
    "$schema": "http://json-schema.org/draft-04/schema#",
    "description": "",
    "type": "object",
    "properties": {
      "$schema": {
        "type": "string",
        "minLength": 1
      },
      "meta": {
        "description": "Meta information about the application and current setting. This is mainly for information purpose and not used by the application itself",
        "type": "object",
        "properties": {
          "inputFileType": {
            "type": "string",
            "minLength": 1
          },
          "inputFileVersion": {
            "type": "string",
            "minLength": 1
          },
          "targetMachine": {
            "type": "string",
            "minLength": 1
          },
          "programName": {
            "type": "string",
            "minLength": 1
          },
          "programVersion": {
            "type": "string",
            "minLength": 1
          }
        },
        "required": [
          "inputFileType",
          "inputFileVersion",
          "targetMachine",
          "programName",
          "programVersion"
        ],
        "examples": [
          {
            "inputFileType": "LumiScan-CtrlX-Cam-Driver",
            "inputFileVersion": "1.0.0",
            "targetMachine": "CtrlX7",
            "programName": "lumiscan-cam-driver",
            "programVersion": "2.1.0"
          }
        ]
      },
      "modules": {
        "type": "array",
        "description": "List of module setting files that will be loaded by the application. One camera per entry; each file is resolved next to this settings file.",
        "items": {
          "type":"string",
          "description": "Module setting file",
          "properties": {},
          "examples": [
            "lumiscan-cam-driver-example-module.json"
          ]
        },

        "minItems": 1,
        "examples": [
          [
            "lumiscan-cam-driver-example-module.json"
          ],
          [
            "camera-left.json",
            "camera-right.json"
          ]
        ]
      },
      "cameraDrivers": {
        "type": "array",
        "description": "GenTL producers (camera drivers) available to camera modules. Each camera references one of these by its 'driverId'.",
        "items": {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "minLength": 1,
              "default": "default",
              "description": "Unique id referenced by a camera module's 'driverId'.",
              "examples": [
                "basler-producer",
                "simulation-producer"
              ]
            },
            "gentlPath": {
              "type": "string",
              "minLength": 1,
              "description": "Path to the GenTL producer (.cti). Relative paths resolve from SNAP_COMMON; absolute paths are used as-is. For SIMULATION mode this should be a directory path.",
              "examples": [
                "GenTL_Producers/basler/ProducerGEV.cti",
                "/opt/lucid/lib64/TLTypeGEV.cti",
                "images"
              ]
            },
            "genTLConsumer": {
              "type": "string",
              "enum": [
                "DEFAULT",
                "SIMULATION",
                "BASLER",
                "BALLUFF",
                "LUCID",
                "PEPPER_FUCHS"
              ],
              "default": "DEFAULT",
              "description": "Type of GenTL consumer. DEFAULT uses Baumer. SIMULATION loads images from directory specified in gentlPath."
            }
          },
          "required": [
            "id",
            "gentlPath"
          ]
        }
      },
      "system": {
        "type": "object",
        "$ref": "system.schema.json"
      }
    },
    "required": [
      "meta",
      "modules"
    ],
    "examples": [
      {
        "$schema": "schemas/lumiscan-cam-driver.schema.json",
        "meta": {
          "inputFileType": "LumiScan-CtrlX-Cam-Driver",
          "inputFileVersion": "1.0.0",
          "targetMachine": "CtrlX7",
          "programName": "lumiscan-cam-driver",
          "programVersion": "2.1.0"
        },
        "modules": [
          "lumiscan-cam-driver-example-module.json"
        ],
        "cameraDrivers": [],
        "system": {
          "debug": false,
          "logLevel": "INFO",
          "storage": {
            "type": "Internal",
            "parameters": {
              "rootPath": "images"
            }
          },
          "unifiedStorage": false
        }
      },
      {
        "$schema": "schemas/lumiscan-cam-driver.schema.json",
        "meta": {
          "inputFileType": "LumiScan-CtrlX-Cam-Driver",
          "inputFileVersion": "1.0.0",
          "targetMachine": "CtrlX7",
          "programName": "lumiscan-cam-driver",
          "programVersion": "2.1.0"
        },
        "modules": [
          "camera-left.json",
          "camera-right.json"
        ],
        "cameraDrivers": [
          {
            "id": "basler-producer",
            "gentlPath": "GenTL_Producers/basler/ProducerGEV.cti",
            "genTLConsumer": "BASLER"
          }
        ],
        "system": {
          "debug": false,
          "logLevel": "INFO",
          "storage": {
            "type": "Samba",
            "parameters": {
              "ip": "192.168.1.50",
              "remotePath": "images",
              "domain": "WORKGROUP",
              "username": "lumiscan",
              "password": "secret"
            }
          },
          "unifiedStorage": false
        }
      }
    ]
  }