735 lines
22 KiB
JSON
735 lines
22 KiB
JSON
{
|
||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||
"title": "Schema for Dante Embedded Platform dante.json configuration file.",
|
||
"type": "object",
|
||
"properties": {
|
||
"$schema": {
|
||
"type": "string",
|
||
"description": "Removes superfluous warning on the schema field introduced by additionalProperties = false."
|
||
},
|
||
"platform": {
|
||
"type": "object",
|
||
"properties": {
|
||
"cgroupVersion": {
|
||
"type": "integer",
|
||
"oneOf": [
|
||
{
|
||
"enum": [1, 2]
|
||
}
|
||
],
|
||
"description": "Tells DEP which version of cgroups the system is configured for. Setting this value allows DEP to optimise the system more appropriately. If this value is not set at all then DEP will still function but possibly in a less optimal way."
|
||
},
|
||
"logDirectory": {
|
||
"type": "string",
|
||
"description": "Directory to write DEP log files. The directory must be available inside the container, DEP must have read/write access to the directory and the directory must exist before the DEP container is started."
|
||
},
|
||
"maxNumLogs": {
|
||
"type": "integer",
|
||
"default": 6,
|
||
"description": "Maximum number of versions of each DEP log file to keep."
|
||
},
|
||
"maxLogSize": {
|
||
"type": "integer",
|
||
"default": 102400,
|
||
"description": "Maximum number of bytes of each DEP log file."
|
||
},
|
||
"logLevel": {
|
||
"type": "string",
|
||
"oneOf": [
|
||
{
|
||
"enum": [
|
||
"Error",
|
||
"Warning",
|
||
"Notice",
|
||
"Info",
|
||
"Debug"
|
||
]
|
||
}
|
||
],
|
||
"default": "Warning",
|
||
"description": "The minimum log level to write to the log files."
|
||
}
|
||
},
|
||
"required": [
|
||
"logDirectory"
|
||
]
|
||
},
|
||
"audio": {
|
||
"type": "object",
|
||
"properties": {
|
||
"rxChannels": {
|
||
"type": "integer",
|
||
"minimum": 0,
|
||
"maximum": 512,
|
||
"description": "The number of receive channels. Actual number of available channels will be the minimum of this value and the licensed channels."
|
||
},
|
||
"txChannels": {
|
||
"type": "integer",
|
||
"minimum": 0,
|
||
"maximum": 512,
|
||
"description": "The number of transmit channels. Actual number of available channels will be the minimum of this value and the licensed channels."
|
||
},
|
||
"maxRxFlows": {
|
||
"type": "integer",
|
||
"description": "Maximum receive flows that DEP will allow. Default is 'MAX(2, (rxChannels + 1) / 2)'."
|
||
},
|
||
"maxTxFlows": {
|
||
"type": "integer",
|
||
"description": "Maximum transmit flows that DEP will allow. Default is 'MAX(2, (txChannels + 1) / 2)'."
|
||
},
|
||
"sampleRate": {
|
||
"type": "integer",
|
||
"oneOf": [
|
||
{
|
||
"enum": [
|
||
44100,
|
||
48000,
|
||
88200,
|
||
96000
|
||
]
|
||
}
|
||
],
|
||
"default": 48000,
|
||
"description": "Default sample rate of DEP."
|
||
},
|
||
"availableSampleRates": {
|
||
"type": "array",
|
||
"minItems": 1,
|
||
"items": {
|
||
"type": "integer",
|
||
"oneOf": [
|
||
{
|
||
"enum": [
|
||
44100,
|
||
48000,
|
||
88200,
|
||
96000
|
||
]
|
||
}
|
||
]
|
||
},
|
||
"default": [
|
||
44100,
|
||
48000,
|
||
88200,
|
||
96000
|
||
],
|
||
"contains": {
|
||
"const": 48000
|
||
},
|
||
"uniqueItems": true,
|
||
"description": "A list of sample rates that can be selected for the DEP device."
|
||
},
|
||
"samplesPerPeriod": {
|
||
"type": "integer",
|
||
"default": 16,
|
||
"description": "The number of samples between audio period events (ticks)."
|
||
},
|
||
"periodsPerBuffer": {
|
||
"type": "integer",
|
||
"default": 3000,
|
||
"description": "The number of periods in the buffer."
|
||
},
|
||
"networkLatencyMinMs": {
|
||
"type": "integer",
|
||
"oneOf": [
|
||
{
|
||
"enum": [
|
||
1,
|
||
2,
|
||
3,
|
||
4,
|
||
5,
|
||
10
|
||
]
|
||
}
|
||
],
|
||
"default": 2,
|
||
"description": "The minimum latency in milliseconds (ms) that this device can support."
|
||
},
|
||
"networkLatencyDefaultMs": {
|
||
"type": "integer",
|
||
"minimum": 1,
|
||
"maximum": 40,
|
||
"default": 4,
|
||
"description": "Default network latency in milliseconds (ms)."
|
||
},
|
||
"numDepCores": {
|
||
"anyOf": [
|
||
{
|
||
"type": "array",
|
||
"items": {
|
||
"type": "integer",
|
||
"minimum": 0
|
||
},
|
||
"minItems": 1,
|
||
"uniqueItems": true,
|
||
"description": "List of CPU core IDs DEP will run on."
|
||
},
|
||
{
|
||
"type": "integer",
|
||
"minimum": 0,
|
||
"description": "The number of CPU cores DEP will run on. DEP will run on the given number of consecutive cores starting from core 0"
|
||
}
|
||
],
|
||
"description": "The CPU cores DEP will run on. The host system is responsible for ensuring the configured cores are isolated exclusively for DEP use."
|
||
},
|
||
"percentCpuShare": {
|
||
"type": "integer",
|
||
"minimum": 1,
|
||
"maximum": 100,
|
||
"default": 100,
|
||
"description": "The share of CPU time DEP will be allocated when CPU time is under contention. NOTE: this setting has no effect when cgroups v2 is in use and will be deprecated soon."
|
||
},
|
||
"defaultEncoding": {
|
||
"type": "string",
|
||
"oneOf": [
|
||
{
|
||
"enum": [
|
||
"PCM16",
|
||
"PCM24",
|
||
"PCM32"
|
||
]
|
||
}
|
||
],
|
||
"description": "(DEPRECATED) The default native device encoding value. This field should no longer be used. The default should instead be specified as the first entry in supportedEncodings"
|
||
},
|
||
"supportedEncodings": {
|
||
"type": "array",
|
||
"items": {
|
||
"type": "string",
|
||
"oneOf": [
|
||
{
|
||
"enum": [
|
||
"PCM16",
|
||
"PCM24",
|
||
"PCM32"
|
||
]
|
||
}
|
||
]
|
||
},
|
||
"default": [
|
||
"PCM24"
|
||
],
|
||
"uniqueItems": true,
|
||
"description": "A list of supported native device encoding values."
|
||
},
|
||
"aes67Supported": {
|
||
"type": "boolean",
|
||
"default": false,
|
||
"description": "Whether this device supports the AES67 protocol."
|
||
},
|
||
"channelGroupsFile": {
|
||
"type": "string",
|
||
"description": "The full path to a separate JSON file that specifies logical channel groupings."
|
||
},
|
||
"defaultChannelNamesFile": {
|
||
"type": "string",
|
||
"description": "The full path to a separate JSON file that specifies custom default channel names."
|
||
},
|
||
"perChannelEncodingsFile": {
|
||
"type": "string",
|
||
"description": "The full path to a separate JSON file that specifies per-channel encodings."
|
||
},
|
||
"enableSelfSubscription": {
|
||
"type": "boolean",
|
||
"default": true,
|
||
"description": "Whether the device self-subscription capability should be enabled."
|
||
},
|
||
"silenceHeadDelayMs" : {
|
||
"type": "integer",
|
||
"default": 20,
|
||
"description": "DEP erases audio in the rx and tx audio buffer shortly after the network time for those frames passes. This controls the delay on this erasure measured in milliseconds."
|
||
}
|
||
},
|
||
"required": [
|
||
"txChannels",
|
||
"rxChannels",
|
||
"availableSampleRates",
|
||
"numDepCores"
|
||
]
|
||
},
|
||
"network": {
|
||
"type": "object",
|
||
"properties": {
|
||
"interfaceMode": {
|
||
"type": "string",
|
||
"oneOf": [
|
||
{
|
||
"enum": [
|
||
"Switched",
|
||
"Direct"
|
||
]
|
||
}
|
||
],
|
||
"default": "Direct",
|
||
"description": "DEP network interface mode. Direct means connected to the network via a PHY; Switched means connected to the network via a switch."
|
||
},
|
||
"interfaces": {
|
||
"type": "array",
|
||
"items": {
|
||
"anyOf": [
|
||
{ "type": "string" },
|
||
{ "type": "integer" }
|
||
]
|
||
},
|
||
"minItems": 1,
|
||
"maxItems": 2,
|
||
"uniqueItems": true,
|
||
"description": "List of network interface names or indexes DEP will use to connect to the Dante network."
|
||
},
|
||
"preferredLinkSpeed": {
|
||
"type": "string",
|
||
"oneOf": [
|
||
{
|
||
"enum": [
|
||
"LINK_SPEED_10G",
|
||
"LINK_SPEED_1G",
|
||
"LINK_SPEED_100M"
|
||
]
|
||
}
|
||
],
|
||
"default": "LINK_SPEED_1G",
|
||
"description": "The preferred link speed of the network interface/s used by DEP."
|
||
},
|
||
"webSocketPort": {
|
||
"type": "integer",
|
||
"minimum": 1024,
|
||
"maximum": 65535,
|
||
"description": "The websocket port used by DEP. If not set an ephemeral port is used."
|
||
}
|
||
},
|
||
"required": [
|
||
"interfaces"
|
||
]
|
||
},
|
||
"mdns": {
|
||
"type": "object",
|
||
"properties": {
|
||
"restrictInterfaces": {
|
||
"type": "boolean",
|
||
"default": true,
|
||
"description": "Whether to restrict mDNS advertisements to only the specified network interfaces."
|
||
}
|
||
}
|
||
},
|
||
"clock": {
|
||
"type": "object",
|
||
"properties": {
|
||
"enableHwTimestamping": {
|
||
"anyOf": [
|
||
{
|
||
"type": "boolean"
|
||
},
|
||
{
|
||
"const": "v1"
|
||
}
|
||
],
|
||
"default": false,
|
||
"description": "Whether to use hardware packet timestamping at the Network Interface Card (NIC) level."
|
||
},
|
||
"dsaTaggedPackets": {
|
||
"type": "boolean",
|
||
"default": false,
|
||
"description": "Whether packets read from the network interface have a DSA tag attached."
|
||
},
|
||
"hardwareInterfaces": {
|
||
"type": "array",
|
||
"items": {
|
||
"anyOf": [
|
||
{ "type": "string" },
|
||
{ "type": "integer" }
|
||
]
|
||
},
|
||
"minItems": 1,
|
||
"maxItems": 2,
|
||
"description": "List of network interface names or indexes that support hardware packet timestamping."
|
||
},
|
||
"followerOnly": {
|
||
"type": "boolean",
|
||
"default": false,
|
||
"description": "Whether the device should be in follower only mode. When true, DEP cannot become clock leader."
|
||
}
|
||
},
|
||
"if": {
|
||
"properties": {
|
||
"enableHwTimestamping": {
|
||
"anyOf": [
|
||
{ "const": true },
|
||
{ "const": "v1" }
|
||
]
|
||
},
|
||
"dsaTaggedPackets": { "const": true }
|
||
},
|
||
"required": [
|
||
"enableHwTimestamping", "dsaTaggedPackets"
|
||
]
|
||
},
|
||
"then": {
|
||
"required": [
|
||
"hardwareInterfaces"
|
||
]
|
||
}
|
||
},
|
||
"hardwareClock": {
|
||
"type": "object",
|
||
"properties": {
|
||
"useHwClock": {
|
||
"type": "boolean",
|
||
"default": false,
|
||
"description": "Enable use of clocking hardware."
|
||
},
|
||
"circuitName": {
|
||
"type": "string",
|
||
"description": "Name of the clock generator and adjustment circuitry. This field must be one of the supported strings in a DEP release."
|
||
},
|
||
"circuitRevision": {
|
||
"type": "integer",
|
||
"description": "An integer representing the circuit revision to use. This field must correspond to a supported revision and circuit in a DEP release."
|
||
},
|
||
"i2cBus": {
|
||
"type": "string",
|
||
"default": "/dev/i2c-0",
|
||
"description": "The I2C bus device to use to communicate with the clock circuitry. If not present, the first I2C bus device '/dev/i2c-0' is used.",
|
||
"pattern": "^\\/dev"
|
||
},
|
||
"i2cAddr": {
|
||
"type": "string",
|
||
"description": "The I2C address configurable for a circuit. If not present, the default addresses for the circuit are used."
|
||
},
|
||
"extClockInputDev": {
|
||
"type": "string",
|
||
"default": "/dev/extclkin",
|
||
"description": "The device path to the external clock input driver used in the clock feedback algorithm. If not present, this field defaults to '/dev/extclkin'.",
|
||
"pattern": "^\\/dev"
|
||
},
|
||
"bitClocks": {
|
||
"type": "array",
|
||
"description": "An array of mappings between the sample rate and bit clock configurations.",
|
||
"items": {
|
||
"type": "object",
|
||
"properties": {
|
||
"sampleRate": {
|
||
"type": "integer",
|
||
"description": "Sample rate of the mapping."
|
||
},
|
||
"tdmChannels": {
|
||
"type": "integer",
|
||
"description": "Number of TDM channels."
|
||
},
|
||
"bitDepth": {
|
||
"type": "integer",
|
||
"description": "Bit depth of mapping."
|
||
}
|
||
},
|
||
"required": [
|
||
"tdmChannels",
|
||
"bitDepth"
|
||
]
|
||
}
|
||
},
|
||
"loadCapacitance": {
|
||
"type": "integer",
|
||
"default": -1,
|
||
"description": "Value for the internal load capacitance in pf to set for the clock circuit. If not set or set to a negative number the circuit’s default will be used. The default and set of valid values are clock circuit specific. For DEP supported si5351b based clock circuits the default load capacitance is 10pF and the set of valid values for this field are 6, 8 and 10."
|
||
}
|
||
},
|
||
"if": {
|
||
"properties": {
|
||
"useHwClock": { "const": true }
|
||
},
|
||
"required": ["useHwClock"]
|
||
},
|
||
"then": {
|
||
"required": ["circuitName"]
|
||
}
|
||
},
|
||
"hostcpu": {
|
||
"type": "object",
|
||
"properties": {
|
||
"enableDdp": {
|
||
"type": "boolean",
|
||
"default": false,
|
||
"description": "Enable the 'Dante Device Protocol'."
|
||
}
|
||
},
|
||
"required": ["enableDdp"]
|
||
},
|
||
"alsaAsrc": {
|
||
"type": "object",
|
||
"properties": {
|
||
"enableAlsaAsrc": {
|
||
"type": "boolean",
|
||
"description": "Set to true to enable ALSA ASRC and false to disable."
|
||
},
|
||
"txLatencySamples": {
|
||
"type": "integer",
|
||
"default": 48,
|
||
"description": "Offset used by ASRC when writing audio to the DEP TX buffer measured in samples."
|
||
},
|
||
"pollMode": {
|
||
"type": "boolean",
|
||
"default": false,
|
||
"description": "If true, ALSA ASRC will not wait on the DEP shared memory semaphore and will instead poll the memory to determine when more data is available."
|
||
},
|
||
"schedulingPriority": {
|
||
"type": "integer",
|
||
"default": 70,
|
||
"minimum": 0,
|
||
"maximum": 100,
|
||
"description": "The real-time scheduling priority to run the ALSA ASRC application at."
|
||
},
|
||
"cpuAffinity": {
|
||
"type": "integer",
|
||
"minimum": 0,
|
||
"description": "The CPU core ID which should be exclusively assigned to ASRC. NOTE: for optimal performance, ensure that the selected CPU core ID is not already listed in the numDepCores value"
|
||
},
|
||
"deviceConfigurations": {
|
||
"type": "array",
|
||
"minItems": 1,
|
||
"uniqueItems": true,
|
||
"description": "List of devices to open. This key is required if Asrc is enabled.",
|
||
"items": {
|
||
"allOf": [
|
||
{
|
||
"type": "object",
|
||
"description": "Configuration options for each ALSA device to be opened",
|
||
"properties": {
|
||
"deviceIdentifier": {
|
||
"type": "string",
|
||
"description": "The ALSA device identifier for this device, e.g. \"hw:1,0\" or \"hw:CARD=sofhdadsp,DEV=0\"."
|
||
},
|
||
"direction": {
|
||
"enum": [
|
||
"playback",
|
||
"capture"
|
||
],
|
||
"description": "The direction to open the ALSA device in. Must be \"capture\" or \"playback\"."
|
||
},
|
||
"bitDepth": {
|
||
"enum": [
|
||
16,
|
||
24,
|
||
32
|
||
],
|
||
"default": 24,
|
||
"description": "The PCM bit depth to open the ALSA device with. The device will be opened with the first format it claims to support which is that depth. Typically this maps 8 to S8, 16 to S16_LE, 24 to S24_LE and 32 to S32_LE."
|
||
},
|
||
"bitWidthOverride": {
|
||
"enum": [
|
||
16,
|
||
24,
|
||
32
|
||
],
|
||
"description": "The number of bits each sample is packed into. For example, \"bitDepth\": 24, \"bitWidthOverride\": 24 is equivalent to S24_3LE, so the application writes samples aligned to 3 bytes. This overrides the alignment of the selected format. So if, for example, a device only claims to support S24_LE (24 bits aligned to 32 bit words) but actually writes 24 bit samples aligned to 24 bits, this setting can account for this."
|
||
},
|
||
"alsaFormat": {
|
||
"enum": [
|
||
"S16_LE",
|
||
"S24_LE",
|
||
"S32_LE",
|
||
"FLOAT_LE",
|
||
"S24_3LE",
|
||
"S16",
|
||
"S24",
|
||
"S32",
|
||
"FLOAT"
|
||
],
|
||
"description": "The specific ALSA format name to open the device with. Incompatible with bitDepth."
|
||
},
|
||
"numOpenChannels": {
|
||
"type": "integer",
|
||
"minimum": 1,
|
||
"default": 2,
|
||
"description": "The number of channels to open on the ALSA device."
|
||
},
|
||
"alsaChannelRange": {
|
||
"type": "string",
|
||
"pattern": "^[0-9]+-[0-9]+$",
|
||
"description": "The block of ALSA channels to use. Can only be provided if numOpenChannels is specified. String of the form \"X-Y\" where X and Y are zero indexed channel numbers, specifying the block [X,Y] inclusive. Defaults to 0-(numOpenChannels - 1)"
|
||
},
|
||
"danteChannelRange": {
|
||
"type": "string",
|
||
"pattern": "^[0-9]+-[0-9]+$",
|
||
"description": "The block of DEP channels this device will read from or write to. Can only be provided if numOpenChannels is specified. String of the form \"X-Y\" where X and Y are zero indexed channel numbers, specifying the block [X,Y] inclusive. Defaults to 0-(numOpenChannels-1)"
|
||
},
|
||
"gain": {
|
||
"type": "integer",
|
||
"default": 0,
|
||
"description": "Positive or negative gain in dB to apply to the audio for this device."
|
||
},
|
||
"bufferSize": {
|
||
"type": "integer",
|
||
"default": 64,
|
||
"description": "Size of the ALSA buffer to request the device to open with. Should never be less than 2 DEP periods or 2 ALSA periods. Note that the exact numbers for bufferSize and samplesPerPeriod are merely a request, and individual ALSA drivers are entitled to find other nearby valid values, if necessary."
|
||
},
|
||
"samplesPerPeriod": {
|
||
"type": "integer",
|
||
"default": 8,
|
||
"description": "Samples per period to request the ALSA device to open with. Note that the exact numbers for bufferSize and samplesPerPeriod are merely a request, and individual ALSA drivers are entitled to find other nearby valid values, if necessary."
|
||
},
|
||
"latency": {
|
||
"type": "integer",
|
||
"description": "By default, ASRC maintains the ALSA buffer at its halfway point - which corresponds to the insertion latency of ASRC. This key overrides this behaviour, specifying the target buffer point in samples."
|
||
},
|
||
"readWriteiBuffer": {
|
||
"type": "integer",
|
||
"description": "For drivers that don't support MMAP (memory-mapped) buffer operations, the application can emulate the memory mapping internally by inserting an additional buffer and services that through ALSA R/W calls. If this value is >0, it specifies the size of this additional buffer."
|
||
},
|
||
"forceArtificialAudioTime": {
|
||
"type": "boolean",
|
||
"description": "This setting provides an override for drivers which don't provide correct audio timestamps. If this is set to true, ASRC overrides the audio time with an artificial one calculated from sample counts."
|
||
}
|
||
},
|
||
"required": [
|
||
"deviceIdentifier",
|
||
"direction"
|
||
]
|
||
},
|
||
{
|
||
"description": "The alsaFormat option is incompatible with the bitDepth and bitWidthOverride option",
|
||
"if": {
|
||
"anyOf": [
|
||
{"required": ["bitDepth"]},
|
||
{"required": ["bitWidthOverride"]}
|
||
]
|
||
},
|
||
"then": {
|
||
"not": {"required": ["alsaFormat"]}
|
||
}
|
||
},
|
||
{
|
||
"description": "alsaChannelRange and danteChannelRange can each only be defined if numOpenChannels is specified",
|
||
"if": {
|
||
"anyOf": [
|
||
{"required": ["alsaChannelRange"]},
|
||
{"required": ["danteChannelRange"]}
|
||
]
|
||
},
|
||
"then": {
|
||
"required": ["numOpenChannels"]
|
||
}
|
||
}
|
||
]
|
||
}
|
||
}
|
||
},
|
||
"required": [
|
||
"enableAlsaAsrc"
|
||
]
|
||
},
|
||
"product": {
|
||
"type": "object",
|
||
"properties": {
|
||
"manfId": {
|
||
"type": "string",
|
||
"minLength": 1,
|
||
"maxLength": 8,
|
||
"description": "The ID of the device manufacturer. This value is assigned to the manufacturer by Audinate when signing up as a DEP licensee."
|
||
},
|
||
"manfName": {
|
||
"type": "string",
|
||
"minLength": 1,
|
||
"maxLength": 31,
|
||
"description": "Human-readable manufacturer name that users will see in Dante Controller."
|
||
},
|
||
"modelId": {
|
||
"type": "string",
|
||
"minLength": 1,
|
||
"maxLength": 8,
|
||
"description": "The device model ID, up to 8 characters long and unique for each product type produced by a manufacturer."
|
||
},
|
||
"modelName": {
|
||
"type": "string",
|
||
"minLength": 1,
|
||
"maxLength": 31,
|
||
"description": "Human-readable model name that users will see in Dante Controller."
|
||
},
|
||
"modelVersion": {
|
||
"type": "object",
|
||
"description": "3-part version number of the DEP device, this will be shown in Dante Controller.",
|
||
"properties": {
|
||
"major": {
|
||
"type": "integer",
|
||
"description": "Product version major number."
|
||
},
|
||
"minor": {
|
||
"type": "integer",
|
||
"description": "Product version minor number."
|
||
},
|
||
"bugfix": {
|
||
"type": "integer",
|
||
"description": "Product version bugfix number."
|
||
}
|
||
},
|
||
"required": [
|
||
"major",
|
||
"minor",
|
||
"bugfix"
|
||
]
|
||
},
|
||
"modelVersionString": {
|
||
"type": "string",
|
||
"description": "An arbitrary string that overrides the 'modelVersion'. If not set the 'modelVersion' fields will be used to construct a model version string.",
|
||
"minLength": 1,
|
||
"maxLength": 31
|
||
},
|
||
"devicePrefix": {
|
||
"type": "string",
|
||
"default": "DEP",
|
||
"minLength": 1,
|
||
"maxLength": 24,
|
||
"pattern": "^[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,23})?$",
|
||
"description": "Dante device name prefix. Up to 24 characters, legal characters are A-Z, a-z, 0-9, and '-' ('-' cannot be the first character)."
|
||
}
|
||
},
|
||
"required": [
|
||
"manfId",
|
||
"manfName",
|
||
"modelId",
|
||
"modelName",
|
||
"modelVersion"
|
||
]
|
||
},
|
||
"trialMode": {
|
||
"type": "boolean",
|
||
"default": false,
|
||
"description": "Set to true to start the container in 'Trial Mode'. If excluded or false, DEP will require activation."
|
||
},
|
||
"misc": {
|
||
"type": "object",
|
||
"properties": {
|
||
"enableIdentify": {
|
||
"type": "boolean",
|
||
"default": false,
|
||
"description": "Set to true to enable the device 'Identify' function and false to disable."
|
||
}
|
||
}
|
||
},
|
||
"ddhi": {
|
||
"type": "object",
|
||
"properties": {
|
||
"enable": {
|
||
"type": "boolean",
|
||
"default": true,
|
||
"description": "Set to true to enable Dante Device Host Interface (DDHI) and false to disable. All other properties in the ddhi object are only used if this value is true."
|
||
},
|
||
"clientRpcs": {
|
||
"type": "array",
|
||
"items": {
|
||
"type": "string"
|
||
},
|
||
"description": "List of DDHI RPCs supported by the platform DDHI client(s)"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"required": [
|
||
"platform",
|
||
"audio",
|
||
"network",
|
||
"product"
|
||
],
|
||
"additionalProperties" : false
|
||
}
|