{
    "type" : "object",
    "required" : true,
    "properties" : {
        "device" : {
            "type" : "object",
            "required" : true,
            "properties" : {
                "name" : {
                    "type" : "string",
                    "required" : true
                },
                "type" : {
                    "type" : "string",
                    "required" : true
                },
                "output" : {
                    "type" : "string",
                    "required" : true
                },
                "rate" : {
                    "type" : "integer",
                    "required" : true,
                    "minimum" : 0
                },
                "colorOrder" : {
                    "type" : "string",
                    "required" : false
                },
                "bgr-output" : { // deprecated
                    "type" : "boolean",
                    "required" : false
                }
            },
            "additionalProperties" : false
        },
        "color": {
            "type":"object",
            "required":false,
            "properties": {
                "hsv" : {
                    "type" : "object",
                    "required" : false,
                    "properties" : {
                        "saturationGain" : {
                            "type" : "number",
                            "required" : false,
                            "minimum" : 0.0
                        },
                        "valueGain" : {
                            "type" : "number",
                            "required" : false,
                            "minimum" : 0.0
                        }
                    },
                    "additionalProperties" : false
                },
                "red": {
                    "type":"object",
                    "required":false,
                    "properties":{
                        "gamma": {
                            "type":"number",
                            "required":false
                        },
                        "blacklevel": {
                            "type":"number",
                            "required":false
                        },
                        "whitelevel": {
                            "type":"number",
                            "required":false
                        },
                        "threshold": {
                            "type":"number",
                            "required":false,
                            "minimum" : 0.0,
                            "maximum" : 1.0
                        }
                    },
                    "additionalProperties" : false
                },
                "green": {
                    "type":"object",
                    "required":false,
                    "properties":{
                        "gamma": {
                            "type":"number",
                            "required":false
                        },
                        "blacklevel": {
                            "type":"number",
                            "required":false
                        },
                        "whitelevel": {
                            "type":"number",
                            "required":false
                        },
                        "threshold": {
                            "type":"number",
                            "required":false,
                            "minimum" : 0.0,
                            "maximum" : 1.0
                        }
                    },
                    "additionalProperties" : false
                },
                "blue": {
                    "type":"object",
                    "required":false,
                    "properties":{
                        "gamma": {
                            "type":"number",
                            "required":false
                        },
                        "whitelevel": {
                            "type":"number",
                            "required":false
                        },
                        "blacklevel": {
                            "type":"number",
                            "required":false
                        },
                        "threshold": {
                            "type":"number",
                            "required":false,
                            "minimum" : 0.0,
                            "maximum" : 1.0
                        }
                    },
                    "additionalProperties" : false
                },
                "smoothing" : {
                    "type" : "object",
                    "required" : false,
                    "properties" : {
                        "type" : {
                            "type" : "enum",
                            "required" : true,
                            "values" : ["none", "linear"]
                        },
                        "time_ms" : {
                            "type" : "integer",
                            "required" : false,
                            "minimum" : 10
                        },
                        "updateFrequency" : {
                            "type" : "number",
                            "required" : false,
                            "minimum" : 0.001
                        }
                    },
                    "additionalProperties" : false
                }

            },
            "additionalProperties" : false
        },
        "leds": {
            "type":"array",
            "required":true,
            "items": {
                "type":"object",
                "properties": {
                    "index": {
                        "type":"integer",
                        "required":true
                    },
                    "hscan": {
                        "type":"object",
                        "required":true,
                        "properties": {
                            "minimum": {
                                "type":"number",
                                "required":true
                            },
                            "maximum": {
                                "type":"number",
                                "required":true
                            }
                        },
                        "additionalProperties" : false
                    },
                    "vscan": {
                        "type":"object",
                        "required":true,
                        "properties": {
                            "minimum": {
                                "type":"number",
                                "required":true
                            },
                            "maximum": {
                                "type":"number",
                                "required":true
                            }
                        },
                        "additionalProperties" : false
                    },
                    "colorOrder" : {
                        "type" : "string",
                        "required" : false
                    }
                },
                "additionalProperties" : false
            }
        },
        "effects" :
        {
            "type" : "object",
            "required" : false,
            "properties" : {
                "paths" : {
                    "type" : "array",
                    "required" : false,
                    "items" : {
                        "type" : "string"
                    }
                }
            },
            "additionalProperties" : false
        },
        "blackborderdetector" :
        {
            "type" : "object",
            "required" : false,
            "properties" : {
                "enable" : {
                    "type" : "boolean",
                    "required" : true
                },
                "threshold" : {
                    "type" : "number",
                    "required" : false,
                    "minimum" : 0.0,
                    "maximum" : 1.0
                }
            },
            "additionalProperties" : false
        },
        "xbmcVideoChecker" :
        {
            "type" : "object",
            "required" : false,
            "properties" : {
                "xbmcAddress" : {
                    "type" : "string",
                    "required" : true
                },
                "xbmcTcpPort" : {
                    "type" : "integer",
                    "required" : true
                },
                "grabVideo" : {
                    "type" : "boolean",
                    "required" : true
                },
                "grabPictures" : {
                    "type" : "boolean",
                    "required" : true
                },
                "grabAudio" : {
                    "type" : "boolean",
                    "required" : true
                },
                "grabMenu" : {
                    "type" : "boolean",
                    "required" : true
                },
                "grabScreensaver" : {
                    "type" : "boolean",
                    "required" : false
                },
                "enable3DDetection" : {
                    "type" : "boolean",
                    "required" : false
                }
            },
            "additionalProperties" : false
        },
        "bootsequence" :
        {
            "type" : "object",
            "required" : false,
            "properties" : {
                "path" : {
                    "type" : "string",
                    "required" : true
                },
                "effect" : {
                    "type" : "string",
                    "required" : true
                }
            },
            "additionalProperties" : false
        },
        "framegrabber" :
        {
            "type" : "object",
            "required" : false,
            "properties" : {
                "width" : {
                    "type" : "integer",
                    "required" : true
                },
                "height" : {
                    "type" : "integer",
                    "required" : true
                },
                "frequency_Hz" : {
                    "type" : "integer",
                    "required" : true
                }
            },
            "additionalProperties" : false
        },
        "jsonServer" :
        {
            "type" : "object",
            "required" : false,
            "properties" : {
                "port" : {
                    "type" : "integer",
                    "required" : true,
                    "minimum" : 0,
                    "maximum" : 65535
                }
            },
            "additionalProperties" : false
        },
        "protoServer" :
        {
            "type" : "object",
            "required" : false,
            "properties" : {
                "port" : {
                    "type" : "integer",
                    "required" : true,
                    "minimum" : 0,
                    "maximum" : 65535
                }
            },
            "additionalProperties" : false
        },
        "boblightServer" :
        {
            "type" : "object",
            "required" : false,
            "properties" : {
                "port" : {
                    "type" : "integer",
                    "required" : true,
                    "minimum" : 0,
                    "maximum" : 65535
                }
            },
            "additionalProperties" : false
        }
    },
    "additionalProperties" : false
}