UNPKG

@iotize/tap

Version:

IoTize Device client for Javascript

1,991 lines 124 kB
/**
 * This file has been generated from JSON file C:\Users\scale\dev\iotize\bitbucket\standalone\iotize-device-client.js\assets\schema\v1\tap-config.json
 */
export default {
    "title": "Tap configurator config",
    "$id": "http://iotize.com/schemas/v1/tap-config.json",
    "$schema": "http://json-schema.org/draft-07/schema#",
    "type": "object",
    "required": ["config"],
    "additionalProperties": false,
    "properties": {
        "meta": {
            "type": "object",
            "title": "TapConfiguratorOptions",
            "properties": {
                "version": {
                    "type": "string",
                    "pattern": "^(\\d+)\\.(\\d+)\\.(\\d+)$"
                },
                "options": {
                    "type": "object",
                    "description": "Options for the configurator engine",
                    "properties": {
                        "skipFactoryReset": {
                            "type": "boolean",
                            "description": "If set to true, configurator will not perform a factory reset before configuration. Values that are not written in this configuration will not be removed.",
                            "default": false
                        }
                    }
                }
            },
            "additionalProperties": true
        },
        "config": {
            "type": "object",
            "title": "TapConfig",
            "additionalProperties": false,
            "required": ["version"],
            "properties": {
                "version": {
                    "$ref": "#/definitions/semanticVersion"
                },
                "configFormatVersion": {
                    "type": "integer"
                },
                "target": {
                    "title": "TargetConfig",
                    "oneOf": [
                        {
                            "$ref": "#/definitions/TapnpassTargetConfig"
                        },
                        {
                            "$ref": "#/definitions/MCUTargetConfig"
                        }
                    ]
                },
                "wireless": {
                    "title": "Wireless Config",
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                        "options": {
                            "type": "object",
                            "title": "WirelessOptionsConfig",
                            "additionalProperties": false,
                            "properties": {
                                "inactivityTimeout": {
                                    "$ref": "#/definitions/uint8"
                                },
                                "authorizedProtocols": {
                                    "type": "array",
                                    "items": {
                                        "$ref": "#/definitions/HostProtocol"
                                    }
                                },
                                "pairing": {
                                    "$ref": "#/definitions/WirelessPairingConfig"
                                }
                            }
                        },
                        "protocols": {
                            "type": "object",
                            "title": "WirelessProtocolsConfig",
                            "additionalProperties": false,
                            "properties": {
                                "ble": {
                                    "title": "BleProtocolConfig",
                                    "type": "object",
                                    "required": [],
                                    "properties": {
                                        "pairingMode": {
                                            "deprecated": true,
                                            "type": "boolean",
                                            "description": "True to require BLE pairing. Deprecated, use wireless.options.pairing option instead."
                                        }
                                    }
                                },
                                "lora": {
                                    "title": "LoraProtocolConfig",
                                    "type": "object",
                                    "required": [],
                                    "properties": {
                                        "config": {
                                            "$ref": "#/definitions/LoraConfig"
                                        },
                                        "ids": {
                                            "$ref": "#/definitions/hexString"
                                        }
                                    }
                                },
                                "mqtt": {
                                    "title": "MqttProtocolConfig",
                                    "type": "object",
                                    "additionalProperties": false,
                                    "properties": {
                                        "brokerCertificate": {
                                            "title": "Broker certificate",
                                            "description": "MQTT broker certificate",
                                            "$ref": "#/definitions/Certificate"
                                        },
                                        "brokerHostname": {
                                            "type": "string",
                                            "description": "You can either specify the broker hostname or protocol://hostname. If protocol is not specified, it will be deduce from configured port."
                                        },
                                        "brokerPort": {
                                            "type": "string",
                                            "description": "Broker port. Default MQTT port are 1883 for non secure and 8883 to use with TLS."
                                        },
                                        "clientId": {
                                            "type": "string",
                                            "description": "MQTT client identifier."
                                        },
                                        "password": {
                                            "type": "string",
                                            "description": "Required only if your broker requires a username/password authentification"
                                        },
                                        "relayNetKey": {
                                            "type": "string",
                                            "deprecated": true,
                                            "description": "@deprecated This option is deprecated. Use request topic and response topic instead."
                                        },
                                        "topicPrefix": {
                                            "type": "string",
                                            "deprecated": true,
                                            "description": "@deprecated This option is deprecated. Use request topic and response topic instead."
                                        },
                                        "requestTopic": {
                                            "type": "string",
                                            "description": "Topic used to send requests for LwM2M over MQTT. Tap will subscribe to this topic and wait for incomming LwM2M requests."
                                        },
                                        "responseTopic": {
                                            "type": "string",
                                            "description": "Topic used to send response for LwM2M over MQTT. Tap will publish LwM2M responses on this."
                                        },
                                        "username": {
                                            "type": "string",
                                            "description": "Required only if your broker requires a username/password authentification"
                                        }
                                    }
                                },
                                "nfc": {
                                    "title": "NfcProtocolConfig",
                                    "type": "object",
                                    "required": [],
                                    "additionalProperties": false,
                                    "properties": {
                                        "autoLogProfileId": {
                                            "$ref": "#/definitions/uint16"
                                        },
                                        "connectionPriority": {
                                            "$ref": "#/definitions/NfcConnectionPriority"
                                        },
                                        "pairingMode": {
                                            "deprecated": true,
                                            "description": "This option has been moved. Use wireless.options.pairing option instead",
                                            "$ref": "#/definitions/NfcPairingModeConfig",
                                            "tsType": "NfcPairingModeConfig"
                                        }
                                    }
                                },
                                "wifi": {
                                    "title": "WifiProtocolConfig",
                                    "type": "object",
                                    "additionalProperties": false,
                                    "required": [],
                                    "properties": {
                                        "ip": {
                                            "$ref": "#/definitions/IPV4Address"
                                        },
                                        "gatewayIp": {
                                            "$ref": "#/definitions/IPV4Address"
                                        },
                                        "key": {
                                            "tsType": "string",
                                            "type": "string",
                                            "description": "WEP/WPA2 key of the Wi-Fi network access point",
                                            "maxLength": 64,
                                            "minLength": 8
                                        },
                                        "keyVisibility": {
                                            "$ref": "#/definitions/WifiKeyVisibility"
                                        },
                                        "mask": {
                                            "$ref": "#/definitions/IPV4AddressMask"
                                        },
                                        "mode": {
                                            "$ref": "#/definitions/WifiMode"
                                        },
                                        "protocol": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/definitions/WifiProtocol"
                                            }
                                        },
                                        "countryCode": {
                                            "description": "Country code ISO 3166",
                                            "type": "integer",
                                            "maximum": 999,
                                            "minimum": 0
                                        },
                                        "ssid": {
                                            "tsType": "string",
                                            "description": "Wi-Fi SSID",
                                            "type": "string",
                                            "maxLength": 32,
                                            "minLength": 1
                                        },
                                        "ssidVisibility": {
                                            "$ref": "#/definitions/WifiSSIDVisibility"
                                        },
                                        "txPower": {
                                            "$ref": "#/definitions/uint8"
                                        },
                                        "dnsIp": {
                                            "$ref": "#/definitions/IPV4Address"
                                        }
                                    }
                                },
                                "ethernet": {
                                    "title": "EthernetProtocolConfig",
                                    "type": "object",
                                    "required": [],
                                    "additionalProperties": false,
                                    "properties": {
                                        "dnsIp": {
                                            "$ref": "#/definitions/IPV4Address"
                                        }
                                    }
                                }
                            }
                        }
                    }
                },
                "slaveServer": {
                    "$ref": "#/definitions/SlaveServerConfig"
                },
                "ports": {
                    "description": "Communication ports",
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                        "ethernet": {
                            "$ref": "#/definitions/EthernetConfig"
                        }
                    }
                },
                "application": {
                    "$ref": "#/definitions/ApplicationConfig"
                },
                "jvm": {
                    "$ref": "#/definitions/JVMConfig"
                },
                "cloud": {
                    "$ref": "#/definitions/CloudConfig"
                },
                "tap": {
                    "$ref": "#/definitions/TapOptions"
                },
                "data": {
                    "type": "object",
                    "additionalProperties": false,
                    "title": "DataConfig",
                    "properties": {
                        "profiles": {
                            "type": "array",
                            "items": {
                                "type": "object",
                                "oneOf": [
                                    {
                                        "$ref": "#/definitions/specialprofile"
                                    },
                                    {
                                        "$ref": "#/definitions/anonymousprofile"
                                    },
                                    {
                                        "$ref": "#/definitions/profile"
                                    }
                                ]
                            }
                        },
                        "bundles": {
                            "type": "array",
                            "items": {
                                "type": "object",
                                "title": "BundleConfig",
                                "required": ["id"],
                                "properties": {
                                    "name": {
                                        "$id": "#/properties/config/properties/schema/properties/bundles/items/properties/name",
                                        "type": "string",
                                        "title": "Bundle name",
                                        "default": "",
                                        "examples": ["Sensors"],
                                        "pattern": "^(.*)$"
                                    },
                                    "id": {
                                        "$id": "#/properties/config/properties/schema/properties/bundles/items/properties/id",
                                        "type": "integer",
                                        "title": "Bundle id",
                                        "default": 0,
                                        "minimum": 0,
                                        "maximum": 65535,
                                        "examples": [1]
                                    },
                                    "dataLog": {
                                        "type": "object",
                                        "default": {
                                            "period": 0
                                        },
                                        "required": ["period"],
                                        "properties": {
                                            "period": {
                                                "type": "integer",
                                                "minimum": 0,
                                                "description": "Data log period acquisition in seconds"
                                            }
                                        }
                                    },
                                    "features": {
                                        "type": "array",
                                        "items": {
                                            "$ref": "#/definitions/SpecialFeature"
                                        }
                                    },
                                    "variables": {
                                        "type": "array",
                                        "items": {
                                            "title": "VariableConfig",
                                            "anyOf": [
                                                {
                                                    "$ref": "#/definitions/TargetVariable"
                                                },
                                                {
                                                    "$ref": "#/definitions/ModbusVariable"
                                                },
                                                {
                                                    "$ref": "#/definitions/InTapVariable"
                                                },
                                                {
                                                    "$ref": "#/definitions/GPIOVariable"
                                                }
                                            ]
                                        }
                                    },
                                    "acls": {
                                        "$id": "#/properties/config/properties/schema/properties/bundles/items/properties/acls",
                                        "type": "object",
                                        "title": "AclMapConfig",
                                        "additionalProperties": {
                                            "$id": "#/properties/config/properties/schema/properties/bundles/items/properties/acls/properties/anonymous",
                                            "type": "object",
                                            "title": "AclConfig",
                                            "required": ["read", "write"],
                                            "additionalProperties": false,
                                            "properties": {
                                                "read": {
                                                    "$id": "#/properties/config/properties/schema/properties/bundles/items/properties/acls/properties/anonymous/properties/read",
                                                    "type": "boolean",
                                                    "description": "Grant read right",
                                                    "default": false,
                                                    "examples": [true]
                                                },
                                                "write": {
                                                    "$id": "#/properties/config/properties/schema/properties/bundles/items/properties/acls/properties/anonymous/properties/write",
                                                    "type": "boolean",
                                                    "description": "Grant write right",
                                                    "default": false,
                                                    "examples": [false]
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    },
    "definitions": {
        "TargetConfig.Protocol.SWDConfig": {
            "title": "SWDProtocolConfig",
            "type": "object",
            "required": ["type"],
            "additionalProperties": false,
            "properties": {
                "type": {
                    "type": "string",
                    "enum": ["SWD"],
                    "default": "SWD"
                }
            }
        },
        "TargetConfig.Protocol.NoneConfig": {
            "title": "NoneProtocolConfig",
            "type": "object",
            "required": ["type"],
            "additionalProperties": false,
            "properties": {
                "type": {
                    "type": "string",
                    "enum": ["NONE"],
                    "default": "NONE"
                }
            }
        },
        "TargetConfig.Protocol.S3PConfig": {
            "title": "S3PProtocolConfig",
            "type": "object",
            "required": ["type", "config"],
            "additionalProperties": false,
            "properties": {
                "type": {
                    "enum": ["S3P"],
                    "default": "S3P"
                },
                "config": {
                    "title": "S3PConfig",
                    "type": "object",
                    "required": ["mode", "delay"],
                    "additionalProperties": false,
                    "properties": {
                        "mode": {
                            "$ref": "#/definitions/S3PModeConfig"
                        },
                        "delay": {
                            "$ref": "#/definitions/uint8"
                        }
                    }
                }
            }
        },
        "TargetConfig.Protocol.ModbusConfig": {
            "title": "ModbusProtocolConfig",
            "type": "object",
            "required": ["type"],
            "additionalProperties": false,
            "properties": {
                "type": {
                    "enum": ["MODBUS"],
                    "default": "MODBUS"
                },
                "config": {
                    "$ref": "#/definitions/ModbusConfig"
                }
            }
        },
        "TargetConfig.Protocol.ModbusTcpConfig": {
            "title": "ModbusTcpProtocolConfig",
            "type": "object",
            "required": ["type"],
            "additionalProperties": false,
            "properties": {
                "type": {
                    "enum": ["MODBUS_TCP"],
                    "default": "MODBUS_TCP"
                },
                "config": {
                    "$ref": "#/definitions/ModbusTcpConfig"
                }
            }
        },
        "TargetConfig.Protocol.DirectIOConfig": {
            "title": "DirectIOProtocolConfig",
            "type": "object",
            "required": ["type"],
            "additionalProperties": false,
            "properties": {
                "type": {
                    "enum": ["DIRECT_IO"],
                    "default": "DIRECT_IO"
                }
            }
        },
        "TargetConfig.Protocol.SerialConfig": {
            "title": "SerialProtocolConfig",
            "type": "object",
            "required": ["type"],
            "additionalProperties": false,
            "properties": {
                "type": {
                    "enum": ["SERIAL"],
                    "default": "SERIAL"
                },
                "config": {
                    "type": "object",
                    "required": ["serial"],
                    "additionalProperties": true,
                    "properties": {
                        "serial": {
                            "$ref": "#/definitions/TargetSerialModbusConfigurationConfig.Serial"
                        }
                    }
                }
            }
        },
        "TargetConfig.Protocol.CustomConfig": {
            "title": "CustomProtocolConfig",
            "type": "object",
            "required": ["type"],
            "additionalProperties": false,
            "properties": {
                "type": {
                    "enum": ["CUSTOM"],
                    "default": "CUSTOM"
                },
                "config": {
                    "$ref": "#/definitions/hexString"
                }
            }
        },
        "TargetConfig.Protocol.GPIOConfig": {
            "title": "GPIOProtocolConfig",
            "description": "Deprecated. Use DirectIO protocol instead.",
            "type": "object",
            "required": ["type"],
            "additionalProperties": false,
            "properties": {
                "type": {
                    "enum": ["GPIO"],
                    "default": "GPIO"
                }
            }
        },
        "TargetConfig.Protocol.CanConfig": {
            "title": "CanProtocolConfig",
            "type": "object",
            "required": ["type"],
            "additionalProperties": false,
            "properties": {
                "type": {
                    "enum": ["CAN"],
                    "default": "CAN"
                },
                "config": {
                    "$ref": "#/definitions/CanConfig"
                }
            }
        },
        "ApplicationConfig": {
            "title": "ApplicationConfig",
            "description": "Options related to the application that communicates with this Tap",
            "type": "object",
            "required": [],
            "additionalProperties": false,
            "properties": {
                "name": {
                    "type": "string",
                    "title": "Application name",
                    "description": "Application name (name will be broadcast with BLE or WiFi)",
                    "default": "TAP",
                    "examples": ["Sensor demo"],
                    "maxLength": 32,
                    "minLength": 1
                },
                "uri": {
                    "oneOf": [
                        {
                            "title": "ApplicationUriConfig",
                            "type": "object",
                            "required": ["value", "type"],
                            "additionalProperties": false,
                            "properties": {
                                "type": {
                                    "$ref": "#/definitions/AppPathType"
                                },
                                "value": {
                                    "type": "string",
                                    "maxLength": 64
                                }
                            }
                        },
                        {
                            "type": "string",
                            "title": "Application url",
                            "description": "Application url loaded by Tap Manager",
                            "default": "",
                            "examples": ["http://yourappyurl.com"],
                            "maxLength": 128
                        }
                    ]
                },
                "universalLink": {
                    "type": "string",
                    "title": "Universal link",
                    "default": "",
                    "examples": ["https://iotize.com"],
                    "maxLength": 128
                },
                "productCode": {
                    "description": "Product code. It can be used to identify which kind of target this Tap is linked to. It's used by multi tap configuration applications.",
                    "type": "string",
                    "maxLength": 32,
                    "default": "",
                    "examples": ["light", "motor-sensors"]
                },
                "data": {
                    "$ref": "#/definitions/hexString"
                }
            }
        },
        "BaseVariable": {
            "title": "BaseVariableConfig",
            "type": "object",
            "required": ["id"],
            "properties": {
                "id": {
                    "type": "integer",
                    "title": "Variable id",
                    "minimum": 0,
                    "maximum": 65535,
                    "default": 0,
                    "examples": [1]
                },
                "length": {
                    "type": "integer",
                    "description": "Variable length (number of items) > 1 if it's an array",
                    "default": 1,
                    "minimum": 0,
                    "maximum": 65535,
                    "examples": [1]
                },
                "meta": {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                        "name": {
                            "type": "string",
                            "title": "Variable name",
                            "default": "",
                            "examples": ["Temperature"],
                            "pattern": "^(.*)$",
                            "maxLength": 50,
                            "minLength": 0
                        },
                        "unit": {
                            "type": "string",
                            "title": "Unit",
                            "pattern": "^(.*)$",
                            "maxLength": 30,
                            "minLength": 0
                        }
                    }
                },
                "rawMeta": {
                    "$ref": "#/definitions/hexString"
                },
                "metaDataLength": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 200,
                    "description": "Size (in bytes) reserved for variable meta data"
                }
            }
        },
        "TargetVariable": {
            "title": "TargetVariableConfig",
            "additionalProperties": false,
            "required": ["id", "address", "dataType", "domain"],
            "properties": {
                "id": true,
                "meta": true,
                "rawMeta": true,
                "address": true,
                "domain": true,
                "dataType": true,
                "length": true,
                "metaDataLength": true
            },
            "allOf": [
                {
                    "$ref": "#/definitions/BaseVariable"
                },
                {
                    "type": "object",
                    "additionalProperties": true,
                    "required": ["address", "dataType", "domain"],
                    "properties": {
                        "dataType": {
                            "$ref": "#/definitions/VariableTypeConfig.Data"
                        },
                        "domain": {
                            "default": "TARGET",
                            "enum": ["TARGET"]
                        },
                        "address": {
                            "$ref": "#/definitions/address"
                        }
                    }
                }
            ]
        },
        "InTapVariable": {
            "title": "InTapVariableConfig",
            "type": "object",
            "allOf": [
                {
                    "$ref": "#/definitions/BaseVariable"
                },
                {
                    "type": "object",
                    "required": ["domain", "dataType"],
                    "properties": {
                        "domain": {
                            "enum": ["IN_TAP_STATIC", "IN_TAP_VOLATIL"]
                        },
                        "dataType": {
                            "$ref": "#/definitions/VariableTypeConfig.Data"
                        },
                        "value": {
                            "oneOf": [
                                {
                                    "oneOf": [
                                        {
                                            "$ref": "#/definitions/hexString"
                                        },
                                        {
                                            "type": "number"
                                        }
                                    ]
                                },
                                {
                                    "type": "array",
                                    "description": "Initial variable value for each item (according to variable length).",
                                    "items": {
                                        "oneOf": [
                                            {
                                                "$ref": "#/definitions/hexString"
                                            },
                                            {
                                                "type": "number"
                                            }
                                        ]
                                    }
                                }
                            ]
                        }
                    }
                }
            ]
        },
        "GPIOVariable": {
            "title": "GPIOVariableConfig",
            "type": "object",
            "additionalProperties": true,
            "allOf": [
                {
                    "$ref": "#/definitions/BaseVariable"
                },
                {
                    "type": "object",
                    "required": ["gpio"],
                    "properties": {
                        "gpio": {
                            "$ref": "#/definitions/GPIOMapping"
                        }
                    }
                }
            ]
        },
        "ModbusVariable": {
            "title": "ModbusVariableConfig",
            "type": "object",
            "additionalProperties": true,
            "allOf": [
                {
                    "$ref": "#/definitions/BaseVariable"
                },
                {
                    "type": "object",
                    "required": ["modbusAddress"],
                    "properties": {
                        "modbusAddress": {
                            "$ref": "#/definitions/ModbusVariableAddress"
                        },
                        "domain": {
                            "enum": ["TARGET"]
                        },
                        "dataType": {
                            "$ref": "#/definitions/VariableTypeConfig.Data"
                        }
                    }
                }
            ]
        },
        "anonymousprofile": {
            "title": "AnonymousProfileConfig",
            "required": ["username"],
            "properties": {
                "username": {
                    "enum": ["anonymous"]
                }
            }
        },
        "specialprofile": {
            "required": ["username"],
            "title": "SpecialProfileConfig",
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "key": {
                    "$ref": "#/definitions/userKey"
                },
                "password": {
                    "type": "string",
                    "default": "",
                    "examples": ["admin"],
                    "pattern": "^(.*)$",
                    "maxLength": 16
                },
                "username": {
                    "$ref": "#/definitions/SpecialUsername"
                },
                "lifeTime": {
                    "$id": "#/properties/config/properties/schema/properties/profiles/properties/admin/properties/lifeTime",
                    "type": "integer",
                    "title": "Session Lifetime",
                    "description": "Session lifetime in seconds",
                    "minimum": 0,
                    "maximum": 65535,
                    "default": 300,
                    "examples": [200]
                },
                "salt": {
                    "$id": "#/properties/config/properties/schema/properties/profiles/properties/admin/properties/salt",
                    "type": "integer",
                    "title": "Profile salt",
                    "default": 0,
                    "examples": [220238910087]
                },
                "users": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/user"
                    }
                }
            }
        },
        "user": {
            "required": ["id", "username"],
            "title": "UserConfig",
            "type": "object",
            "additionalProperties": true,
            "properties": {
                "key": {
                    "$ref": "#/definitions/userKey"
                },
                "password": {
                    "type": "string",
                    "default": "",
                    "examples": ["admin"],
                    "pattern": "^(.*)$",
                    "maxLength": 16
                },
                "username": {
                    "type": "string",
                    "description": "Username",
                    "default": "",
                    "examples": ["admin"],
                    "pattern": "^(.*)$",
                    "maxLength": 16
                },
                "id": {
                    "type": "integer",
                    "title": "Profile id",
                    "default": 0,
                    "minimum": 0,
                    "maximum": 65533,
                    "examples": [1]
                },
                "salt": {
                    "type": "integer",
                    "title": "Profile salt",
                    "default": 0,
                    "examples": [220238910087]
                }
            }
        },
        "profile": {
            "title": "ProfileConfig",
            "allOf": [
                {
                    "$ref": "#/definitions/user"
                },
                {
                    "type": "object",
                    "properties": {
                        "lifeTime": {
                            "type": "integer",
                            "title": "Session Lifetime",
                            "tsType": "number",
                            "description": "Session lifetime in seconds",
                            "minimum": 0,
                            "maximum": 65535,
                            "default": 300,
                            "examples": [200]
                        },
                        "users": {
                            "type": "array",
                            "items": {
                                "$ref": "#/definitions/user"
                            }
                        }
                    }
                }
            ]
        },
        "userKey": {
            "examples": ["0x99C243D5F82EB712C281D5FFE7D12097"],
            "allOf": [
                {
                    "$ref": "#/definitions/hexString"
                },
                {
                    "type": "string",
                    "tsType": "any",
                    "maxLength": 74,
                    "minLength": 34
                }
            ]
        },
        "JVMConfig": {
            "title": "JvmConfig",
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "codeSize": {
                    "description": "JVM code size in bytes. If not set, code size will be deduced from actual code size.",
                    "$ref": "#/definitions/uint32"
                },
                "code": {
                    "description": "Compressed byte code content",
                    "$ref": "#/definitions/hexString"
                },
                "profileId": {
                    "type": "integer",
                    "description": "User profile id"
                }
            }
        },
        "CloudConfig": {
            "type": "object",
            "title": "CloudConfig",
            "additionalProperties": false,
            "properties": {
                "platform": {
                    "$ref": "#/definitions/CloudPlatform"
                },
                "dataLog": {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                        "uploadPeriod": {
                            "$ref": "#/definitions/uint32"
                        },
                        "mqttPublishTopic": {
                            "type": "string"
                        },
                        "mqttSubscribeTopic": {
                            "type": "string"
                        }
                    }
                }
            }
        },
        "EthernetConfig": {
            "title": "EthernetConfig",
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "ip": {
                    "$ref": "#/definitions/IPV4Address"
                },
                "ipMask": {
                    "$ref": "#/definitions/IPV4AddressMask"
                },
                "gatewayIp": {
                    "$ref": "#/definitions/IPV4Address"
                }
            }
        },
        "ModbusTcpModbusConfig": {
            "title": "EthernetModbusConfig",
            "additionalProperties": false,
            "type": "object",
            "properties": {
                "defaultSlaveAddress": {
                    "title": "Default slave address",
                    "tsType": "string",
                    "$ref": "#/definitions/IPV4Address",
                    "description": "Default slave address for Modbus TCP protocol"
                },
                "port": {
                    "title": "Port",
                    "tsType": "number",
                    "type": "integer",
                    "description": "Port for Modbus TCP protocol",
                    "default": 502,
                    "minimum": 0,
                    "maximum": 65535
                },
                "timeout": {
                    "title": "Timeout",
                    "tsType": "number",
                    "description": "Timeout for Modbus TCP protocol",
                    "type": "integer",
                    "default": 100,
                    "minimum": 0,
                    "maximum": 3000
                },
                "firstRegisterAddress": {
                    "title": "First register address",
                    "tsType": "number",
                    "description": "First register address (0 or 1)",
                    "type": "integer",
                    "default": 0,
                    "minimum": 0,
                    "maximum": 1
                }
            }
        },
        "TapOptions": {
            "type": "object",
            "title": "Tap Options",
            "additionalProperties": false,
            "properties": {
                "certificate": {
                    "type": "object",
                    "required": [],
                    "additionalProperties": false,
                    "properties": {
                        "privateKey": {
                            "title": "Device private key",
                            "description": "Device private key. This key is private and must not be shared.",
                            "$ref": "#/definitions/Certificate"
                        },
                        "publicKey": {
                            "title": "Device public key",
                            "$ref": "#/definitions/Certificate"
                        },
                        "rootKey": {
                            "title": "Root certificate",
                            "description": "Public key certificate that identifies a root certificate authority (CA)",
                            "$ref": "#/definitions/Certificate"
                        }
                    }
                },
                "powerOptimization": {
                    "$ref": "#/definitions/LowPowerOptimizationLevel"
                },
                "scram": {
                    "type": "object",
                    "required": [],
                    "additionalProperties": false,
                    "properties": {
                        "hashIteration": {
                            "$ref": "#/definitions/uint16"
                        }
                    }
                },
                "security": {
                    "$ref": "#/definitions/SecurityOptions"
                },
                "time": {
                    "type": "object",
                    "title": "TapTimeConfig",
                    "description": "Configure time zone and NTP server for your Tap",
                    "required": [],
                    "additionalProperties": false,
                    "properties": {
                        "ntpServer": {
                            "title": "NTP server url",
                            "type": "string",
                            "tsType": "string",
                            "description": "URL of the NTP server for retrieving Universal Coordinated Time. (UTC)",
                            "maxLength": 100
                        },
                        "zone": {
                            "title": "Time zone",
                            "type": "string",
                            "tsType": "string",
                            "description": "Time zone\nExpecting a POSIX-style TZ string\nBlank string means revert to default Universal Time = 'UTC0'\nsee https://www.iana.org/time-zones for more information",
                            "examples": ["", "UTC-1", "CST-8", "EST+5EDT,M4.1.0/2,M10.5.0/2"],
                            "maxLength": 64
                        }
                    }
                },
                "autoRebootTimeout": {
                    "type": "integer",
                    "default": 0
                },
                "maxLowPowerTime": {
                    "type": "integer",
                    "default": 0
                }
            }
        },
        "MCUTargetConfig": {
            "title": "MCU Target config",
            "required": ["type", "protocol"],
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "type": {
                    "enum": ["MCU"],
                    "default": "MCU"
                },
                "firmwareVersion": {
                    "$ref": "#/definitions/semanticVersion"
                },
                "protocol": {
                    "title": "MCUTargetProtocolConfig",
                    "oneOf": [
                        {
                            "$ref": "#/definitions/TargetConfig.Protocol.SWDConfig"
                        },
                        {
                            "$ref": "#/definitions/TargetConfig.Protocol.NoneConfig"
                        },
                        {
                            "$ref": "#/definitions/TargetConfig.Protocol.S3PConfig"
                        },
                        {
                            "$ref": "#/definitions/TargetConfig.Protocol.ModbusConfig"
                        },
                        {
                            "$ref": "#/definitions/TargetConfig.Protocol.ModbusTcpConfig"
                        },
                        {
                            "$ref": "#/definitions/TargetConfig.Protocol.DirectIOConfig"
                        },
                        {
                            "$ref": "#/definitions/TargetConfig.Protocol.SerialConfig"
                        },
                        {
                            "$ref": "#/definitions/TargetConfig.Protocol.GPIOConfig"
                        },
                        {
                            "$ref": "#/definitions/TargetConfig.Protocol.CustomConfig"
                        },
                        {
                            "$ref": "#/definitions/TargetConfig.Protocol.CanConfig"
                        }
                    ]
                }
            }
        },
        "TapnpassTargetConfig": {
            "title": "Tapnpass Target config",
            "required": ["type", "protocol"],
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "type": {
                    "enum": ["TAPNPASS"],
                    "default": "TAPNPASS"
                },
                "firmwareVersion": {
                    "$ref": "#/definitions/semanticVersion"
                },
                "protocol": {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                        "config": {
                            "oneOf": [
                                {
                                    "$ref": "#/definitions/TapnpassProtocolConfigurationConfig"
                                }
                            ]
                        }
                    }
                }
            }
        },
        "SpecialUsername": {
            "title": "SpecialUsername config",
            "enum": ["admin", "supervisor"]
        },
        "S3PModeConfig": {
            "enum": ["INDEXED", "EMULATION"],
            "title": "S3P Mode Config"
        },
        "ModbusConfig": {
            "title": "ModbusProtocolConfig",
            "type": "object",
            "additionalProperties": false,
            "required": ["modbus", "serial"],
            "properties": {
                "modbus": {
                    "$ref": "#/definitions/TargetSerialModbusConfigurationConfig.Modbus"
                },
                "serial": {
                    "$ref": "#/definitions/TargetSerialModbusConfigurationConfig.Serial"
                },
                "usb": {
                    "$ref": "#/definitions/TapnpassProtocolConfigurationConfig.Usb"
                }
            }
        },
        "CanConfig": {
            "title": "CanConfig",
            "type": "object",
            "required": ["frequency", "mode", "filter", "code", "mask"],
            "additionalProperties": false,
            "properties": {
                "frequency": {
                    "$ref": "#/definitions/uint32",
                    "description": "Frequency in kbps"
                },
                "mode": {
                    "title": "CanModeConfig",
                    "type": "string",
                    "enum": ["NORMAL", "NO_ACK", "LISTEN"],
                    "default": "NORMAL"
                },
                "filter": {
                    "title": "CanFilterConfig",
                    "type": "string",
                    "enum": ["SINGLE", "DUAL"],
                    "default": "SINGLE"
                },
                "code": {
                    "$ref": "#/definitions/hexString",
                    "examples": ["0x00000000"],
                    "maxLength": 10
                },
                "mask": {
                    "$ref": "#/definitions/hexString",
                    "maxLength": 10
                }
            }
        },
        "ModbusTcpConfig": {
            "title": "ModbusTcpConfig",
            "type": "object",
            "additionalProperties": false,
            "required": [],
            "properties": {
                "modbus": {
                    "$ref": "#/definitions/ModbusTcpModbusConfig"
                }
            }
        },
        "GPIOMapping": {
            "title": "GPIO mapping config",
            "enum": [
                "RST",
                "TDI",
                "TDO",
                "SWDCK",
                "SWDIO",
                "SCL_FACTORYRST",
                "EXT_A2",
                "EXT_A3",
                "EXT_A4",
                "EXT_A5",
                "EXT_A6",
                "EXT_A7",
                "EXT_A8",
                "EXT_A9",
                "EXT_A10",
                "EXT_A11",
                "EXT_B2",
                "EXT_B3",
                "EXT_B4",
                "EXT_B5",
                "EXT_B6",
                "EXT_B7",
                "EXT_B8",
                "EXT_B9",
                "EXT_B10",
                "EXT_B11"
            ]
        },
        "SpecialFeature": {
            "title": "SpecialFeature config",
            "type": "string",
            "examples": ["SWD_DIRECT_ACCESS"],
            "enum": [
                "SWD_DIRECT_ACCESS",
                "SERIAL_ACCESS",
                "MODBUS_DIRECT_ACCESS",
                "TAPNPASS_CONTROL_ACCESS",
                "SP_CODEEXEC_ACCESS"
            ]
        },
        "SecurityConfig": {
            "title": "SecurityConfig",
            "additionalProperties": false,
            "type": "object",
            "required": [],
            "properties": {
                "scramActivated": {
                    "type": "boolean",
                    "title": "Enable SCAN authentification",
                    "default": false
                },
                "hashPassword": {
                    "type": "boolean",
                    "default": true
                },
                "disableHardwareFactoryReset": {
                    "title": "Locking factory reset with lwm2m",
                    "type": "boolean",
                    "default": false
                },
                "disableLoginWithUID": {
                    "title": "Disable login with UID",
                    "type": "boolean",
                    "default": false
                },
                "disableResourceFactoryReset": {
                    "title": "Disable hardware factory reset",
                    "type": "boolean",
                    "default": false
                }
            }
        },
        "AppPathType": {
            "type": "string",
            "enum": [
                "PRIMER_CLOUD_WEB_APP_URL",
                "URL",
                "ANDROID_APP_ID",
                "PRIMER_CLOUD_CONFIG_URL",
                "AAR_2"
            ]
        },
        "TargetSerialModbusConfigurationConfig.Modbus": {
            "title": "ModbusConfig",
            "type": "object",
            "required": ["slave", "offsetFirstRegister"],
            "additionalProperties": false,
            "properties": {
                "slave": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 256,
                    "default": 1,
                    "description": "Default slave address"
                },
                "offsetFirstRegister": {
                    "type": "boolean",
                    "default": false,
                    "description": "True if first register address will be 1\nFalse if first register address is 0"
                }
            }
        },
        "TargetSerialModbusConfigurationConfig.Serial": {
            "title": "SerialConfig",
            "type": "object",
            "required": [
                "baudRate",
                "stopBits",
                "bitParity",
                "dataBits",
                "handshakeDelimiter",
                "timeout"
            ],
            "additionalProperties": false,
            "properties": {
                "baudRate": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 1048576,
                    "default": 9600
                },
                "physicalPort": {
                    "$ref": "#/definitions/SerialSettings.PhysicalPort"
                },
                "stopBits": {
                    "$ref": "#/definitions/SerialSettings.StopBits"
                },
                "bitParity": {
                    "$ref": "#/definitions/SerialSettings.BitParity"
                },
                "dataBits": {
                    "$ref": "#/definitions/SerialSettings.DataBits"
                },
                "handshakeDelimiter": {
                    "$ref": "#/definitions/SerialSettings.HandshakeDelimiter"
                },
                "hardwareFlowControl": {
                    "$ref": "#/definitions/SerialSettings.HardwareFlowControl"
                },
                "timeout": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 256,
                    "default": 100
                }
            }
        },
        "SerialSettings.BitParity": {
            "title": "BitParity",
            "type": "string",
            "enum": ["NONE", "ODD", "EVEN"],
            "default": "NONE"
        },
        "SerialSettings.HardwareFlowControl": {
            "title": "Handshake",
            "type": "string",
            "enum": ["NONE", "RTS", "CTS", "RTS_CTS"],
            "default": "NONE",
            "description": "Type of handshake management"
        },
        "SerialSettings.StopBits": {
            "title": "StopBit",
            "type": "string",
            "enum": ["ONE", "ONE_AND_HALF", "TWO"],
            "default": "ONE"
        },
        "SerialSettings.PhysicalPort": {
            "title": "PhysicalPort",
            "type": "string",
            "default": "AUTO",
            "enum": [
                "NONE",
                "RS232",
                "USB",
                "AUTO",
                "RS485",
                "RS485_WITH_SIGNAL_DIRECTION"
            ]
        },
        "SerialSettings.HandshakeDelimiter": {
            "title": "HandshakeDelimiter",
            "type": "string",
            "enum": ["NONE", "CR", "LF", "CR_LF"],
            "default": "NONE"
        },
        "SerialSettings.DataBits": {
            "type": "string",
            "enum": ["_7", "_8", "_9"],
            "default": "_8"
        },
        "CloudPlatform": {
            "title": "CloudPlatformKey",
            "enum": [
                "CUSTOM",
                "IOTIZE",
                "IBM_BLUEMIX",
                "MICROSOFT_AZURE",
                "AMAZON_AWS"
            ]
        },
        "SecurityOptions": {
            "title": "SecurityOptions config",
            "type": "object",
            "required": [],
            "additionalProperties": false,
            "properties": {
                "scramActivated": {
                    "type": "boolean",
                    "description": "true if scram is activated"
                },
                "hashPassword": {
                    "type": "boolean",
                    "description": "true if login is done using the hash of the password instead of the password itself"
                },
                "disableHardwareFactoryReset": {
                    "type": "boolean",
                    "description": "true to disable factory reset using hardware"
                },
                "disableLoginWithUID": {
                    "type": "boolean",
                    "description": "true to disable login using UID (resource /1024//5)"
                },
                "disableResourceFactoryReset": {
                    "type": "boolean",
                    "description": "true to disable factory reset using LwM2M resource"
                }
            }
        },
        "LoraConfig": {
            "title": "LoraConfig",
            "type": "object",
            "required": [
                "classA",
                "classB",
                "classC",
                "dataLoggingEnabled",
                "singlePacketEnabled"
            ],
            "additionalProperties": false,
            "properties": {
                "classA": {
                    "type": "boolean"
                },
                "classB": {
                    "type": "boolean"
                },
                "classC": {
                    "type": "boolean"
                },
                "dataLoggingEnabled": {
                    "type": "boolean"
                },
                "singlePacketEnabled": {
                    "type": "boolean"
                }
            }
        },
        "HostProtocol": {
            "title": "Host protocol config",
            "type": "string",
            "examples": ["BLE"],
            "enum": [
                "NFC",
                "BLUETOOTH",
                "GSM",
                "USB_RLINK",
                "USB_CMISIS_DAP",
                "LORA",
                "WIFI",
                "BLE",
                "UART",
                "MQTT",
                "WEBSOCKET",
                "SLAVE_SERVER"
            ]
        },
        "NfcConnectionPriority": {
            "title": "NfcConnectionPriorityConfig",
            "enum": ["NFC_PRIORITY", "NFC_NON_PRIORITY"]
        },
        "NfcPairingModeConfig": {
            "title": "NfcPairingModeConfig",
            "type": "string",
            "enum": ["NO", "MANDATORY", "MANDATORY_FOR_LOGIN"],
            "default": "NO"
        },
        "LowPowerOptimizationLevel": {
            "title": "LowPowerOptimizationLevel config",
            "type": "string",
            "default": "NO",
            "examples": ["NO"],
            "enum": ["NO", "STANDBY", "SHUTDOWN"]
        },
        "WifiMode": {
            "title": "Network mode config",
            "type": "string",
            "default": "PEER_TO_PEER",
            "examples": ["PEER_TO_PEER"],
            "enum": ["PEER_TO_PEER", "NETWORK"]
        },
        "TapnpassProtocolConfigurationConfig": {
            "title": "TapnpassProtocolConfigurationConfig",
            "type": "object",
            "required": ["modbus", "serial", "usb"],
            "additionalProperties": false,
            "properties": {
                "modbus": {
                    "$ref": "#/definitions/TapnpassProtocolConfigurationConfig.Modbus"
                },
                "serial": {
                    "$ref": "#/definitions/TapnpassProtocolConfigurationConfig.Serial"
                },
                "usb": {
                    "$ref": "#/definitions/TapnpassProtocolConfigurationConfig.Usb"
                }
            }
        },
        "TapnpassProtocolConfigurationConfig.Modbus": {
            "title": "Modbus",
            "type": "object",
            "required": ["slave", "offsetFirstRegister"],
            "additionalProperties": false,
            "properties": {
                "slave": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 256
                },
                "offsetFirstRegister": {
                    "type": "boolean"
                }
            }
        },
        "TapnpassProtocolConfigurationConfig.Serial": {
            "title": "Serial",
            "type": "object",
            "required": [
                "baudRate",
                "identification",
                "ledStatus",
                "physicalPort",
                "stopBits",
                "bitParity",
                "dataBits",
                "handshakeDelimiter",
                "hardwareFlowControl",
                "timeout"
            ],
            "additionalProperties": false,
            "properties": {
                "baudRate": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 1048576
                },
                "identification": {
                    "type": "boolean"
                },
                "ledStatus": {
                    "type": "boolean"
                },
                "physicalPort": {
                    "$ref": "#/definitions/SerialSettings.PhysicalPort"
                },
                "stopBits": {
                    "$ref": "#/definitions/SerialSettings.StopBits"
                },
                "bitParity": {
                    "$ref": "#/definitions/SerialSettings.BitParity"
                },
                "dataBits": {
                    "$ref": "#/definitions/SerialSettings.DataBits"
                },
                "handshakeDelimiter": {
                    "$ref": "#/definitions/SerialSettings.HandshakeDelimiter"
                },
                "hardwareFlowControl": {
                    "$ref": "#/definitions/SerialSettings.HardwareFlowControl"
                },
                "timeout": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 256,
                    "default": 100
                }
            }
        },
        "TapnpassProtocolConfigurationConfig.Usb": {
            "type": "object",
            "required": ["aliases"],
            "additionalProperties": false,
            "properties": {
                "aliases": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/TapnpassProtocolConfigurationConfig.Usb.Alias"
                    }
                }
            }
        },
        "TapnpassProtocolConfigurationConfig.Usb.Alias": {
            "type": "object",
            "additionalProperties": false,
            "required": ["vid", "pid", "equ"],
            "properties": {
                "vid": {
                    "$ref": "#/definitions/uint16"
                },
                "pid": {
                    "$ref": "#/definitions/uint16"
                },
                "equ": {
                    "type": "integer",
                    "maximum": 5,
                    "minimum": 0
                }
            }
        },
        "TargetSerialModbusConfigurationConfig": {
            "title": "TargetSerialModbusConfigurationConfig",
            "type": "object",
            "required": ["modbus", "serial"],
            "additionalProperties": false,
            "properties": {
                "modbus": {
                    "$ref": "#/definitions/TargetSerialModbusConfigurationConfig.Modbus"
                },
                "serial": {
                    "$ref": "#/definitions/TargetSerialModbusConfigurationConfig.Serial"
                }
            }
        },
        "ModbusVariableAddress": {
            "title": "ModbusVariableAddress",
            "type": "object",
            "required": ["functionCode", "slave", "address"],
            "additionalProperties": false,
            "properties": {
                "functionCode": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 256
                },
                "slave": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 256
                },
                "address": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 65536
                }
            }
        },
        "WifiKeyVisibility": {
            "title": "WifiKeyVisibility",
            "enum": ["VISIBLE", "HIDDEN"]
        },
        "WifiSSIDVisibility": {
            "title": "WifiSSIDVisibility",
            "enum": ["VISIBLE", "HIDDEN_FROM_SCAN", "HIDDEN"]
        },
        "WirelessPairingConfig": {
            "type": "object",
            "additionalProperties": false,
            "required": [],
            "properties": {
                "blePairing": {
                    "tsType": "boolean",
                    "type": "boolean",
                    "description": "Set to true if Tap should try to activate BLE pairing"
                },
                "nfcPairingMode": {
                    "$ref": "#/definitions/NfcPairingModeConfig"
                }
            }
        },
        "WifiProtocol": {
            "title": "WifiProtocol",
            "enum": ["B", "G", "N"]
        },
        "TargetProtocol": {
            "title": "Target protocol config",
            "type": "string",
            "default": "NONE",
            "examples": ["SWD"],
            "enum": [
                "NONE",
                "SWD",
                "S3P",
                "JTAG",
                "MODBUS",
                "GPIO",
                "SERIAL",
                "CUSTOM",
                "CAN",
                "MODBUS_TCP"
            ]
        },
        "VariableFormat": {
            "title": "VariableFormat config",
            "type": "string",
            "default": "_32_BITS",
            "examples": ["_32_BITS"],
            "enum": ["_1_BIT", "_8_BITS", "_16_BITS", "_32_BITS"]
        },
        "VariableTypeConfig.Data": {
            "title": "VariableTypeDataConfig",
            "type": "string",
            "default": "UINT32",
            "examples": ["UINT32"],
            "enum": [
                "BOOLEAN",
                "INT8",
                "INT16",
                "INT32",
                "UINT8",
                "UINT16",
                "UINT32",
                "FLOAT32",
                "ASCII"
            ]
        },
        "VariableTypeConfig.Domain": {
            "title": "VariableTypeConfigDomain",
            "default": "target",
            "enum": ["IN_TAP_STATIC", "IN_TAP_VOLATIL", "GPIO", "TARGET"]
        },
        "VariableTypeConfig": {
            "title": "VariableTypeConfig",
            "type": "object",
            "required": ["domain", "data"],
            "additionalProperties": false,
            "properties": {
                "domain": {
                    "$ref": "#/definitions/VariableTypeConfig.Domain"
                },
                "data": {
                    "$ref": "#/definitions/VariableTypeConfig.Data"
                }
            },
            "definitions": {
                "Data": {
                    "title": "Data",
                    "enum": [
                        "BOOLEAN",
                        "INT8",
                        "INT16",
                        "INT32",
                        "ASCII",
                        "FLOAT32",
                        "UINT8",
                        "UINT16",
                        "UINT32"
                    ]
                },
                "Domain": {
                    "title": "Domain",
                    "enum": ["TARGET", "GPIO", "IN_TAP_STATIC", "IN_TAP_VOLATIL"]
                }
            }
        },
        "SlaveServerConfig": {
            "type": "object",
            "oneOf": [
                {
                    "$ref": "#/definitions/SlaveServerModbusTcpConfig"
                },
                {
                    "$ref": "#/definitions/SlaveServerModbusRtuConfig"
                },
                {
                    "$ref": "#/definitions/SlaveServerSpiConfig"
                },
                {
                    "$ref": "#/definitions/SlaveServerCanConfig"
                }
            ]
        },
        "SlaveServerModbusTcpConfig": {
            "type": "object",
            "required": ["type", "config"],
            "additionalProperties": false,
            "properties": {
                "type": {
                    "enum": ["MODBUS_TCP"]
                },
                "config": {
                    "type": "object",
                    "additionalProperties": false,
                    "required": ["port"],
                    "properties": {
                        "firstRegisterAddress": {
                            "title": "First register address",
                            "tsType": "number",
                            "description": "First register address (0 or 1)",
                            "type": "integer",
                            "default": 0,
                            "minimum": 0,
                            "maximum": 1
                        },
                        "port": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 655335,
                            "description": "Tcp port"
                        }
                    }
                }
            }
        },
        "SlaveServerModbusRtuConfig": {
            "type": "object",
            "required": ["type", "config"],
            "additionalProperties": false,
            "properties": {
                "type": {
                    "enum": ["MODBUS_RTU"]
                },
                "config": {
                    "$ref": "#/definitions/TapnpassProtocolConfigurationConfig"
                }
            }
        },
        "SlaveServerCanConfig": {
            "type": "object",
            "required": ["type", "config"],
            "additionalProperties": false,
            "properties": {
                "type": {
                    "enum": ["CAN"]
                },
                "config": {
                    "$ref": "#/definitions/CanConfig"
                }
            }
        },
        "SlaveServerSpiConfig": {
            "type": "object",
            "required": ["type"],
            "additionalProperties": false,
            "properties": {
                "type": {
                    "enum": ["SPI"]
                }
            }
        },
        "address": {
            "oneOf": [
                {
                    "type": "integer",
                    "minimum": 0,
                    "default": 0,
                    "examples": [192]
                },
                {
                    "type": "string",
                    "pattern": "^0x([0-9a-fA-F]+)$",
                    "examples": ["0x2000000"]
                }
            ]
        },
        "hexString": {
            "type": "string",
            "pattern": "^0x([0-9a-fA-F]+)$",
            "examples": ["0xB3"],
            "tsType": "string | Uint8Array",
            "default": ""
        },
        "Certificate": {
            "title": "Certificate",
            "type": "string",
            "examples": [],
            "tsType": "string | Uint8Array",
            "default": ""
        },
        "uint8": {
            "type": "integer",
            "minimum": 0,
            "maximum": 255,
            "description": "Unsigned integer on 8 bytes"
        },
        "int8": {
            "type": "integer",
            "minimum": -127,
            "maximum": 128,
            "description": "Signed integer on 8 bytes"
        },
        "uint16": {
            "type": "integer",
            "minimum": 0,
            "maximum": 65535,
            "description": "Unsigned integer on 16 bytes"
        },
        "uint32": {
            "type": "integer",
            "minimum": 0,
            "maximum": 4294967296,
            "description": "Unsigned integer on 32 bytes"
        },
        "semanticVersion": {
            "type": "string",
            "default": "1.0.0",
            "examples": ["1.0.0"],
            "pattern": "^(\\d+)\\.(\\d+)\\.(\\d+)$"
        },
        "IPV4Address": {
            "type": "string",
            "description": "IP V4",
            "examples": ["192.168.20.3"],
            "format": "ipv4"
        },
        "IPV4AddressMask": {
            "type": "string",
            "description": "IP V4 mask",
            "examples": ["255.255.0.1"],
            "default": "255.255.255.0",
            "format": "ipv4"
        }
    }
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFwLWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2NvbmZpZy9zY2hlbWEvdjEvc3JjL2xpYi9nZW4vdGFwLWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQTs7R0FFRztBQUNILGVBQWU7SUFDYixPQUFPLEVBQUUseUJBQXlCO0lBQ2xDLEtBQUssRUFBRSw4Q0FBOEM7SUFDckQsU0FBUyxFQUFFLHlDQUF5QztJQUNwRCxNQUFNLEVBQUUsUUFBUTtJQUNoQixVQUFVLEVBQUUsQ0FBQyxRQUFRLENBQUM7SUFDdEIsc0JBQXNCLEVBQUUsS0FBSztJQUM3QixZQUFZLEVBQUU7UUFDWixNQUFNLEVBQUU7WUFDTixNQUFNLEVBQUUsUUFBUTtZQUNoQixPQUFPLEVBQUUsd0JBQXdCO1lBQ2pDLFlBQVksRUFBRTtnQkFDWixTQUFTLEVBQUU7b0JBQ1QsTUFBTSxFQUFFLFFBQVE7b0JBQ2hCLFNBQVMsRUFBRSw0QkFBNEI7aUJBQ3hDO2dCQUNELFNBQVMsRUFBRTtvQkFDVCxNQUFNLEVBQUUsUUFBUTtvQkFDaEIsYUFBYSxFQUFFLHFDQUFxQztvQkFDcEQsWUFBWSxFQUFFO3dCQUNaLGtCQUFrQixFQUFFOzRCQUNsQixNQUFNLEVBQUUsU0FBUzs0QkFDakIsYUFBYSxFQUFFLDRKQUE0Sjs0QkFDM0ssU0FBUyxFQUFFLEtBQUs7eUJBQ2pCO3FCQUNGO2lCQUNGO2FBQ0Y7WUFDRCxzQkFBc0IsRUFBRSxJQUFJO1NBQzdCO1FBQ0QsUUFBUSxFQUFFO1lBQ1IsTUFBTSxFQUFFLFFBQVE7WUFDaEIsT0FBTyxFQUFFLFdBQVc7WUFDcEIsc0JBQXNCLEVBQUUsS0FBSztZQUM3QixVQUFVLEVBQUUsQ0FBQyxTQUFTLENBQUM7WUFDdkIsWUFBWSxFQUFFO2dCQUNaLFNBQVMsRUFBRTtvQkFDVCxNQUFNLEVBQUUsK0JBQStCO2lCQUN4QztnQkFDRCxxQkFBcUIsRUFBRTtvQkFDckIsTUFBTSxF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