{
  "metadata": {
    "id": "rev-control-hub-rev-31-1595",
    "name": "REV Robotics Control Hub",
    "type": "robot-controller",
    "manufacturer": "REV Robotics",
    "part_number": "REV-31-1595",
    "description": "All-in-one Android-based robot controller and I/O hub (FTC/FIRST Global). Provides motor, servo, encoder, analog, digital, and I2C ports plus XT30 battery in/out and a 16mm mounting pattern.",
    "datasheet_url": "https://revrobotics.ca/content/docs/REV-31-1595-UM.pdf",
    "tags": [
      "rev",
      "ftc",
      "first-global",
      "robot-controller",
      "control-hub"
    ],
    "schema_version": "1.4.0",
    "version": "0.3.0",
    "taxonomy": [
      "robotics.ftc"
    ]
  },
  "domains": [
    {
      "domain": "electrical",
      "resources": [
        {
          "id": "battery_in_pos",
          "connector_type": "xt30",
          "description": "XT30 battery input positive",
          "functions": [
            {
              "name": "power_input"
            }
          ]
        },
        {
          "id": "battery_in_gnd",
          "connector_type": "xt30",
          "description": "XT30 battery input ground",
          "functions": [
            {
              "name": "ground"
            }
          ]
        },
        {
          "id": "battery_out_pos",
          "connector_type": "xt30",
          "description": "XT30 pass-through output positive (to Expansion Hub)",
          "voltage_output_V": 12,
          "functions": [
            {
              "name": "power_output"
            }
          ]
        },
        {
          "id": "battery_out_gnd",
          "connector_type": "xt30",
          "description": "XT30 pass-through output ground (to Expansion Hub)",
          "functions": [
            {
              "name": "ground"
            }
          ]
        },
        {
          "id": "motor0_pos",
          "connector_type": "jst_vh_2",
          "description": "Motor port 0 positive",
          "functions": [
            {
              "name": "motor_pos"
            }
          ]
        },
        {
          "id": "motor0_neg",
          "connector_type": "jst_vh_2",
          "description": "Motor port 0 negative",
          "functions": [
            {
              "name": "motor_neg"
            }
          ]
        },
        {
          "id": "motor1_pos",
          "connector_type": "jst_vh_2",
          "description": "Motor port 1 positive",
          "functions": [
            {
              "name": "motor_pos"
            }
          ]
        },
        {
          "id": "motor1_neg",
          "connector_type": "jst_vh_2",
          "description": "Motor port 1 negative",
          "functions": [
            {
              "name": "motor_neg"
            }
          ]
        },
        {
          "id": "motor2_pos",
          "connector_type": "jst_vh_2",
          "description": "Motor port 2 positive",
          "functions": [
            {
              "name": "motor_pos"
            }
          ]
        },
        {
          "id": "motor2_neg",
          "connector_type": "jst_vh_2",
          "description": "Motor port 2 negative",
          "functions": [
            {
              "name": "motor_neg"
            }
          ]
        },
        {
          "id": "motor3_pos",
          "connector_type": "jst_vh_2",
          "description": "Motor port 3 positive",
          "functions": [
            {
              "name": "motor_pos"
            }
          ]
        },
        {
          "id": "motor3_neg",
          "connector_type": "jst_vh_2",
          "description": "Motor port 3 negative",
          "functions": [
            {
              "name": "motor_neg"
            }
          ]
        },
        {
          "id": "enc0_3v3",
          "connector_type": "jst_ph_4",
          "description": "Encoder port 0 3.3V supply",
          "voltage_output_V": 3.3,
          "functions": [
            {
              "name": "power_output"
            }
          ]
        },
        {
          "id": "enc0_gnd",
          "connector_type": "jst_ph_4",
          "description": "Encoder port 0 ground",
          "functions": [
            {
              "name": "ground"
            }
          ]
        },
        {
          "id": "enc0_a",
          "connector_type": "jst_ph_4",
          "description": "Encoder port 0 channel A",
          "functions": [
            {
              "name": "encoder_a"
            }
          ]
        },
        {
          "id": "enc0_b",
          "connector_type": "jst_ph_4",
          "description": "Encoder port 0 channel B",
          "functions": [
            {
              "name": "encoder_b"
            }
          ]
        },
        {
          "id": "enc1_3v3",
          "connector_type": "jst_ph_4",
          "description": "Encoder port 1 3.3V supply",
          "voltage_output_V": 3.3,
          "functions": [
            {
              "name": "power_output"
            }
          ]
        },
        {
          "id": "enc1_gnd",
          "connector_type": "jst_ph_4",
          "description": "Encoder port 1 ground",
          "functions": [
            {
              "name": "ground"
            }
          ]
        },
        {
          "id": "enc1_a",
          "connector_type": "jst_ph_4",
          "description": "Encoder port 1 channel A",
          "functions": [
            {
              "name": "encoder_a"
            }
          ]
        },
        {
          "id": "enc1_b",
          "connector_type": "jst_ph_4",
          "description": "Encoder port 1 channel B",
          "functions": [
            {
              "name": "encoder_b"
            }
          ]
        },
        {
          "id": "enc2_3v3",
          "connector_type": "jst_ph_4",
          "description": "Encoder port 2 3.3V supply",
          "voltage_output_V": 3.3,
          "functions": [
            {
              "name": "power_output"
            }
          ]
        },
        {
          "id": "enc2_gnd",
          "connector_type": "jst_ph_4",
          "description": "Encoder port 2 ground",
          "functions": [
            {
              "name": "ground"
            }
          ]
        },
        {
          "id": "enc2_a",
          "connector_type": "jst_ph_4",
          "description": "Encoder port 2 channel A",
          "functions": [
            {
              "name": "encoder_a"
            }
          ]
        },
        {
          "id": "enc2_b",
          "connector_type": "jst_ph_4",
          "description": "Encoder port 2 channel B",
          "functions": [
            {
              "name": "encoder_b"
            }
          ]
        },
        {
          "id": "enc3_3v3",
          "connector_type": "jst_ph_4",
          "description": "Encoder port 3 3.3V supply",
          "voltage_output_V": 3.3,
          "functions": [
            {
              "name": "power_output"
            }
          ]
        },
        {
          "id": "enc3_gnd",
          "connector_type": "jst_ph_4",
          "description": "Encoder port 3 ground",
          "functions": [
            {
              "name": "ground"
            }
          ]
        },
        {
          "id": "enc3_a",
          "connector_type": "jst_ph_4",
          "description": "Encoder port 3 channel A",
          "functions": [
            {
              "name": "encoder_a"
            }
          ]
        },
        {
          "id": "enc3_b",
          "connector_type": "jst_ph_4",
          "description": "Encoder port 3 channel B",
          "functions": [
            {
              "name": "encoder_b"
            }
          ]
        },
        {
          "id": "servo0_5v",
          "connector_type": "servo_header_3",
          "description": "Servo port 0 5V supply",
          "voltage_output_V": 5,
          "functions": [
            {
              "name": "power_output"
            }
          ]
        },
        {
          "id": "servo0_gnd",
          "connector_type": "servo_header_3",
          "description": "Servo port 0 ground",
          "functions": [
            {
              "name": "ground"
            }
          ]
        },
        {
          "id": "servo0_pwm",
          "connector_type": "servo_header_3",
          "description": "Servo port 0 PWM signal",
          "functions": [
            {
              "name": "pwm_output"
            }
          ]
        },
        {
          "id": "servo1_5v",
          "connector_type": "servo_header_3",
          "description": "Servo port 1 5V supply",
          "voltage_output_V": 5,
          "functions": [
            {
              "name": "power_output"
            }
          ]
        },
        {
          "id": "servo1_gnd",
          "connector_type": "servo_header_3",
          "description": "Servo port 1 ground",
          "functions": [
            {
              "name": "ground"
            }
          ]
        },
        {
          "id": "servo1_pwm",
          "connector_type": "servo_header_3",
          "description": "Servo port 1 PWM signal",
          "functions": [
            {
              "name": "pwm_output"
            }
          ]
        },
        {
          "id": "servo2_5v",
          "connector_type": "servo_header_3",
          "description": "Servo port 2 5V supply",
          "voltage_output_V": 5,
          "functions": [
            {
              "name": "power_output"
            }
          ]
        },
        {
          "id": "servo2_gnd",
          "connector_type": "servo_header_3",
          "description": "Servo port 2 ground",
          "functions": [
            {
              "name": "ground"
            }
          ]
        },
        {
          "id": "servo2_pwm",
          "connector_type": "servo_header_3",
          "description": "Servo port 2 PWM signal",
          "functions": [
            {
              "name": "pwm_output"
            }
          ]
        },
        {
          "id": "servo3_5v",
          "connector_type": "servo_header_3",
          "description": "Servo port 3 5V supply",
          "voltage_output_V": 5,
          "functions": [
            {
              "name": "power_output"
            }
          ]
        },
        {
          "id": "servo3_gnd",
          "connector_type": "servo_header_3",
          "description": "Servo port 3 ground",
          "functions": [
            {
              "name": "ground"
            }
          ]
        },
        {
          "id": "servo3_pwm",
          "connector_type": "servo_header_3",
          "description": "Servo port 3 PWM signal",
          "functions": [
            {
              "name": "pwm_output"
            }
          ]
        },
        {
          "id": "servo4_5v",
          "connector_type": "servo_header_3",
          "description": "Servo port 4 5V supply",
          "voltage_output_V": 5,
          "functions": [
            {
              "name": "power_output"
            }
          ]
        },
        {
          "id": "servo4_gnd",
          "connector_type": "servo_header_3",
          "description": "Servo port 4 ground",
          "functions": [
            {
              "name": "ground"
            }
          ]
        },
        {
          "id": "servo4_pwm",
          "connector_type": "servo_header_3",
          "description": "Servo port 4 PWM signal",
          "functions": [
            {
              "name": "pwm_output"
            }
          ]
        },
        {
          "id": "servo5_5v",
          "connector_type": "servo_header_3",
          "description": "Servo port 5 5V supply",
          "voltage_output_V": 5,
          "functions": [
            {
              "name": "power_output"
            }
          ]
        },
        {
          "id": "servo5_gnd",
          "connector_type": "servo_header_3",
          "description": "Servo port 5 ground",
          "functions": [
            {
              "name": "ground"
            }
          ]
        },
        {
          "id": "servo5_pwm",
          "connector_type": "servo_header_3",
          "description": "Servo port 5 PWM signal",
          "functions": [
            {
              "name": "pwm_output"
            }
          ]
        },
        {
          "id": "aux5v_0_5v",
          "connector_type": "header_0.1in_2",
          "description": "Aux 5V header 0 5V output",
          "voltage_output_V": 5,
          "functions": [
            {
              "name": "power_output"
            }
          ]
        },
        {
          "id": "aux5v_0_gnd",
          "connector_type": "header_0.1in_2",
          "description": "Aux 5V header 0 ground",
          "functions": [
            {
              "name": "ground"
            }
          ]
        },
        {
          "id": "aux5v_1_5v",
          "connector_type": "header_0.1in_2",
          "description": "Aux 5V header 1 5V output",
          "voltage_output_V": 5,
          "functions": [
            {
              "name": "power_output"
            }
          ]
        },
        {
          "id": "aux5v_1_gnd",
          "connector_type": "header_0.1in_2",
          "description": "Aux 5V header 1 ground",
          "functions": [
            {
              "name": "ground"
            }
          ]
        },
        {
          "id": "analog0_3v3",
          "connector_type": "jst_ph_4",
          "description": "Analog port 0 3.3V supply",
          "voltage_output_V": 3.3,
          "functions": [
            {
              "name": "power_output"
            }
          ]
        },
        {
          "id": "analog0_gnd",
          "connector_type": "jst_ph_4",
          "description": "Analog port 0 ground",
          "functions": [
            {
              "name": "ground"
            }
          ]
        },
        {
          "id": "analog0_ch0",
          "connector_type": "jst_ph_4",
          "description": "Analog port 0 channel 0",
          "functions": [
            {
              "name": "analog_input"
            }
          ]
        },
        {
          "id": "analog0_ch1",
          "connector_type": "jst_ph_4",
          "description": "Analog port 0 channel 1",
          "functions": [
            {
              "name": "analog_input"
            }
          ]
        },
        {
          "id": "analog1_3v3",
          "connector_type": "jst_ph_4",
          "description": "Analog port 1 3.3V supply",
          "voltage_output_V": 3.3,
          "functions": [
            {
              "name": "power_output"
            }
          ]
        },
        {
          "id": "analog1_gnd",
          "connector_type": "jst_ph_4",
          "description": "Analog port 1 ground",
          "functions": [
            {
              "name": "ground"
            }
          ]
        },
        {
          "id": "analog1_ch0",
          "connector_type": "jst_ph_4",
          "description": "Analog port 1 channel 0",
          "functions": [
            {
              "name": "analog_input"
            }
          ]
        },
        {
          "id": "analog1_ch1",
          "connector_type": "jst_ph_4",
          "description": "Analog port 1 channel 1",
          "functions": [
            {
              "name": "analog_input"
            }
          ]
        },
        {
          "id": "analog2_3v3",
          "connector_type": "jst_ph_4",
          "description": "Analog port 2 3.3V supply",
          "voltage_output_V": 3.3,
          "functions": [
            {
              "name": "power_output"
            }
          ]
        },
        {
          "id": "analog2_gnd",
          "connector_type": "jst_ph_4",
          "description": "Analog port 2 ground",
          "functions": [
            {
              "name": "ground"
            }
          ]
        },
        {
          "id": "analog2_ch0",
          "connector_type": "jst_ph_4",
          "description": "Analog port 2 channel 0",
          "functions": [
            {
              "name": "analog_input"
            }
          ]
        },
        {
          "id": "analog2_ch1",
          "connector_type": "jst_ph_4",
          "description": "Analog port 2 channel 1",
          "functions": [
            {
              "name": "analog_input"
            }
          ]
        },
        {
          "id": "analog3_3v3",
          "connector_type": "jst_ph_4",
          "description": "Analog port 3 3.3V supply",
          "voltage_output_V": 3.3,
          "functions": [
            {
              "name": "power_output"
            }
          ]
        },
        {
          "id": "analog3_gnd",
          "connector_type": "jst_ph_4",
          "description": "Analog port 3 ground",
          "functions": [
            {
              "name": "ground"
            }
          ]
        },
        {
          "id": "analog3_ch0",
          "connector_type": "jst_ph_4",
          "description": "Analog port 3 channel 0",
          "functions": [
            {
              "name": "analog_input"
            }
          ]
        },
        {
          "id": "analog3_ch1",
          "connector_type": "jst_ph_4",
          "description": "Analog port 3 channel 1",
          "functions": [
            {
              "name": "analog_input"
            }
          ]
        },
        {
          "id": "digital0_3v3",
          "connector_type": "jst_ph_4",
          "description": "Digital port 0 3.3V supply",
          "voltage_output_V": 3.3,
          "functions": [
            {
              "name": "power_output"
            }
          ]
        },
        {
          "id": "digital0_gnd",
          "connector_type": "jst_ph_4",
          "description": "Digital port 0 ground",
          "functions": [
            {
              "name": "ground"
            }
          ]
        },
        {
          "id": "digital0_io0",
          "connector_type": "jst_ph_4",
          "description": "Digital port 0 IO0",
          "functions": [
            {
              "name": "digital_io"
            }
          ]
        },
        {
          "id": "digital0_io1",
          "connector_type": "jst_ph_4",
          "description": "Digital port 0 IO1",
          "functions": [
            {
              "name": "digital_io"
            }
          ]
        },
        {
          "id": "digital1_3v3",
          "connector_type": "jst_ph_4",
          "description": "Digital port 1 3.3V supply",
          "voltage_output_V": 3.3,
          "functions": [
            {
              "name": "power_output"
            }
          ]
        },
        {
          "id": "digital1_gnd",
          "connector_type": "jst_ph_4",
          "description": "Digital port 1 ground",
          "functions": [
            {
              "name": "ground"
            }
          ]
        },
        {
          "id": "digital1_io0",
          "connector_type": "jst_ph_4",
          "description": "Digital port 1 IO0",
          "functions": [
            {
              "name": "digital_io"
            }
          ]
        },
        {
          "id": "digital1_io1",
          "connector_type": "jst_ph_4",
          "description": "Digital port 1 IO1",
          "functions": [
            {
              "name": "digital_io"
            }
          ]
        },
        {
          "id": "digital2_3v3",
          "connector_type": "jst_ph_4",
          "description": "Digital port 2 3.3V supply",
          "voltage_output_V": 3.3,
          "functions": [
            {
              "name": "power_output"
            }
          ]
        },
        {
          "id": "digital2_gnd",
          "connector_type": "jst_ph_4",
          "description": "Digital port 2 ground",
          "functions": [
            {
              "name": "ground"
            }
          ]
        },
        {
          "id": "digital2_io0",
          "connector_type": "jst_ph_4",
          "description": "Digital port 2 IO0",
          "functions": [
            {
              "name": "digital_io"
            }
          ]
        },
        {
          "id": "digital2_io1",
          "connector_type": "jst_ph_4",
          "description": "Digital port 2 IO1",
          "functions": [
            {
              "name": "digital_io"
            }
          ]
        },
        {
          "id": "digital3_3v3",
          "connector_type": "jst_ph_4",
          "description": "Digital port 3 3.3V supply",
          "voltage_output_V": 3.3,
          "functions": [
            {
              "name": "power_output"
            }
          ]
        },
        {
          "id": "digital3_gnd",
          "connector_type": "jst_ph_4",
          "description": "Digital port 3 ground",
          "functions": [
            {
              "name": "ground"
            }
          ]
        },
        {
          "id": "digital3_io0",
          "connector_type": "jst_ph_4",
          "description": "Digital port 3 IO0",
          "functions": [
            {
              "name": "digital_io"
            }
          ]
        },
        {
          "id": "digital3_io1",
          "connector_type": "jst_ph_4",
          "description": "Digital port 3 IO1",
          "functions": [
            {
              "name": "digital_io"
            }
          ]
        },
        {
          "id": "i2c0_3v3",
          "connector_type": "jst_ph_4",
          "description": "I2C port 0 3.3V supply",
          "voltage_output_V": 3.3,
          "functions": [
            {
              "name": "power_output"
            }
          ]
        },
        {
          "id": "i2c0_gnd",
          "connector_type": "jst_ph_4",
          "description": "I2C port 0 ground",
          "functions": [
            {
              "name": "ground"
            }
          ]
        },
        {
          "id": "i2c0_sda",
          "connector_type": "jst_ph_4",
          "description": "I2C port 0 SDA",
          "functions": [
            {
              "name": "i2c_sda"
            }
          ]
        },
        {
          "id": "i2c0_scl",
          "connector_type": "jst_ph_4",
          "description": "I2C port 0 SCL",
          "functions": [
            {
              "name": "i2c_scl"
            }
          ]
        },
        {
          "id": "i2c1_3v3",
          "connector_type": "jst_ph_4",
          "description": "I2C port 1 3.3V supply",
          "voltage_output_V": 3.3,
          "functions": [
            {
              "name": "power_output"
            }
          ]
        },
        {
          "id": "i2c1_gnd",
          "connector_type": "jst_ph_4",
          "description": "I2C port 1 ground",
          "functions": [
            {
              "name": "ground"
            }
          ]
        },
        {
          "id": "i2c1_sda",
          "connector_type": "jst_ph_4",
          "description": "I2C port 1 SDA",
          "functions": [
            {
              "name": "i2c_sda"
            }
          ]
        },
        {
          "id": "i2c1_scl",
          "connector_type": "jst_ph_4",
          "description": "I2C port 1 SCL",
          "functions": [
            {
              "name": "i2c_scl"
            }
          ]
        },
        {
          "id": "i2c2_3v3",
          "connector_type": "jst_ph_4",
          "description": "I2C port 2 3.3V supply",
          "voltage_output_V": 3.3,
          "functions": [
            {
              "name": "power_output"
            }
          ]
        },
        {
          "id": "i2c2_gnd",
          "connector_type": "jst_ph_4",
          "description": "I2C port 2 ground",
          "functions": [
            {
              "name": "ground"
            }
          ]
        },
        {
          "id": "i2c2_sda",
          "connector_type": "jst_ph_4",
          "description": "I2C port 2 SDA",
          "functions": [
            {
              "name": "i2c_sda"
            }
          ]
        },
        {
          "id": "i2c2_scl",
          "connector_type": "jst_ph_4",
          "description": "I2C port 2 SCL",
          "functions": [
            {
              "name": "i2c_scl"
            }
          ]
        },
        {
          "id": "i2c3_3v3",
          "connector_type": "jst_ph_4",
          "description": "I2C port 3 3.3V supply",
          "voltage_output_V": 3.3,
          "functions": [
            {
              "name": "power_output"
            }
          ]
        },
        {
          "id": "i2c3_gnd",
          "connector_type": "jst_ph_4",
          "description": "I2C port 3 ground",
          "functions": [
            {
              "name": "ground"
            }
          ]
        },
        {
          "id": "i2c3_sda",
          "connector_type": "jst_ph_4",
          "description": "I2C port 3 SDA",
          "functions": [
            {
              "name": "i2c_sda"
            }
          ]
        },
        {
          "id": "i2c3_scl",
          "connector_type": "jst_ph_4",
          "description": "I2C port 3 SCL",
          "functions": [
            {
              "name": "i2c_scl"
            }
          ]
        }
      ],
      "interfaces": [
        {
          "id": "battery_in",
          "name": "Battery Input (XT30)",
          "description": "12V nominal (8–15VDC) battery input via XT30 (male).",
          "protocol": {
            "type": "power",
            "role": "input"
          },
          "requires": [
            {
              "function": "power_input",
              "count": 1
            },
            {
              "function": "ground",
              "count": 1
            }
          ],
          "constraints": {
            "voltage_range_V": [
              8,
              15
            ]
          }
        },
        {
          "id": "battery_out",
          "name": "Battery Output (XT30)",
          "description": "12V pass-through output via XT30 (female) for powering an Expansion Hub.",
          "protocol": {
            "type": "power",
            "role": "output"
          },
          "requires": [
            {
              "function": "power_output",
              "count": 1
            },
            {
              "function": "ground",
              "count": 1
            }
          ],
          "constraints": {
            "voltage_range_V": [
              8,
              15
            ]
          }
        },
        {
          "id": "motor_0",
          "name": "Motor Port 0",
          "protocol": {
            "type": "brushed_motor_power",
            "role": "driver"
          },
          "requires": [
            {
              "function": "motor_pos",
              "count": 1
            },
            {
              "function": "motor_neg",
              "count": 1
            }
          ],
          "constraints": {
            "continuous_current_A": 10
          }
        },
        {
          "id": "motor_1",
          "name": "Motor Port 1",
          "protocol": {
            "type": "brushed_motor_power",
            "role": "driver"
          },
          "requires": [
            {
              "function": "motor_pos",
              "count": 1
            },
            {
              "function": "motor_neg",
              "count": 1
            }
          ],
          "constraints": {
            "continuous_current_A": 10
          }
        },
        {
          "id": "motor_2",
          "name": "Motor Port 2",
          "protocol": {
            "type": "brushed_motor_power",
            "role": "driver"
          },
          "requires": [
            {
              "function": "motor_pos",
              "count": 1
            },
            {
              "function": "motor_neg",
              "count": 1
            }
          ],
          "constraints": {
            "continuous_current_A": 10
          }
        },
        {
          "id": "motor_3",
          "name": "Motor Port 3",
          "protocol": {
            "type": "brushed_motor_power",
            "role": "driver"
          },
          "requires": [
            {
              "function": "motor_pos",
              "count": 1
            },
            {
              "function": "motor_neg",
              "count": 1
            }
          ],
          "constraints": {
            "continuous_current_A": 10
          }
        },
        {
          "id": "encoder_0",
          "name": "Encoder Port 0",
          "protocol": {
            "type": "quadrature",
            "role": "receiver"
          },
          "requires": [
            {
              "function": "power_output",
              "count": 1
            },
            {
              "function": "ground",
              "count": 1
            },
            {
              "function": "encoder_a",
              "count": 1
            },
            {
              "function": "encoder_b",
              "count": 1
            }
          ],
          "constraints": {
            "logic_high_V": 3.3,
            "input_voltage_max_V": 3.3
          }
        },
        {
          "id": "encoder_1",
          "name": "Encoder Port 1",
          "protocol": {
            "type": "quadrature",
            "role": "receiver"
          },
          "requires": [
            {
              "function": "power_output",
              "count": 1
            },
            {
              "function": "ground",
              "count": 1
            },
            {
              "function": "encoder_a",
              "count": 1
            },
            {
              "function": "encoder_b",
              "count": 1
            }
          ],
          "constraints": {
            "logic_high_V": 3.3,
            "input_voltage_max_V": 3.3
          }
        },
        {
          "id": "encoder_2",
          "name": "Encoder Port 2",
          "protocol": {
            "type": "quadrature",
            "role": "receiver"
          },
          "requires": [
            {
              "function": "power_output",
              "count": 1
            },
            {
              "function": "ground",
              "count": 1
            },
            {
              "function": "encoder_a",
              "count": 1
            },
            {
              "function": "encoder_b",
              "count": 1
            }
          ],
          "constraints": {
            "logic_high_V": 3.3,
            "input_voltage_max_V": 3.3
          }
        },
        {
          "id": "encoder_3",
          "name": "Encoder Port 3",
          "protocol": {
            "type": "quadrature",
            "role": "receiver"
          },
          "requires": [
            {
              "function": "power_output",
              "count": 1
            },
            {
              "function": "ground",
              "count": 1
            },
            {
              "function": "encoder_a",
              "count": 1
            },
            {
              "function": "encoder_b",
              "count": 1
            }
          ],
          "constraints": {
            "logic_high_V": 3.3,
            "input_voltage_max_V": 3.3
          }
        },
        {
          "id": "servo_0",
          "name": "Servo Port 0",
          "protocol": {
            "type": "pwm",
            "role": "output"
          },
          "requires": [
            {
              "function": "pwm_output",
              "count": 1
            },
            {
              "function": "power_output",
              "count": 1
            },
            {
              "function": "ground",
              "count": 1
            }
          ]
        },
        {
          "id": "servo_1",
          "name": "Servo Port 1",
          "protocol": {
            "type": "pwm",
            "role": "output"
          },
          "requires": [
            {
              "function": "pwm_output",
              "count": 1
            },
            {
              "function": "power_output",
              "count": 1
            },
            {
              "function": "ground",
              "count": 1
            }
          ]
        },
        {
          "id": "servo_2",
          "name": "Servo Port 2",
          "protocol": {
            "type": "pwm",
            "role": "output"
          },
          "requires": [
            {
              "function": "pwm_output",
              "count": 1
            },
            {
              "function": "power_output",
              "count": 1
            },
            {
              "function": "ground",
              "count": 1
            }
          ]
        },
        {
          "id": "servo_3",
          "name": "Servo Port 3",
          "protocol": {
            "type": "pwm",
            "role": "output"
          },
          "requires": [
            {
              "function": "pwm_output",
              "count": 1
            },
            {
              "function": "power_output",
              "count": 1
            },
            {
              "function": "ground",
              "count": 1
            }
          ]
        },
        {
          "id": "servo_4",
          "name": "Servo Port 4",
          "protocol": {
            "type": "pwm",
            "role": "output"
          },
          "requires": [
            {
              "function": "pwm_output",
              "count": 1
            },
            {
              "function": "power_output",
              "count": 1
            },
            {
              "function": "ground",
              "count": 1
            }
          ]
        },
        {
          "id": "servo_5",
          "name": "Servo Port 5",
          "protocol": {
            "type": "pwm",
            "role": "output"
          },
          "requires": [
            {
              "function": "pwm_output",
              "count": 1
            },
            {
              "function": "power_output",
              "count": 1
            },
            {
              "function": "ground",
              "count": 1
            }
          ]
        },
        {
          "id": "aux_5v_0",
          "name": "+5V Aux Power 0",
          "protocol": {
            "type": "power",
            "role": "output"
          },
          "requires": [
            {
              "function": "power_output",
              "count": 1
            },
            {
              "function": "ground",
              "count": 1
            }
          ],
          "constraints": {
            "max_current_A": 2
          }
        },
        {
          "id": "aux_5v_1",
          "name": "+5V Aux Power 1",
          "protocol": {
            "type": "power",
            "role": "output"
          },
          "requires": [
            {
              "function": "power_output",
              "count": 1
            },
            {
              "function": "ground",
              "count": 1
            }
          ],
          "constraints": {
            "max_current_A": 2
          }
        },
        {
          "id": "analog_0",
          "name": "Analog Port 0",
          "protocol": {
            "type": "analog",
            "role": "input"
          },
          "requires": [
            {
              "function": "power_output",
              "count": 1
            },
            {
              "function": "ground",
              "count": 1
            },
            {
              "function": "analog_input",
              "count": 2
            }
          ],
          "constraints": {
            "input_voltage_range_V": [
              0,
              3.3
            ]
          }
        },
        {
          "id": "analog_1",
          "name": "Analog Port 1",
          "protocol": {
            "type": "analog",
            "role": "input"
          },
          "requires": [
            {
              "function": "power_output",
              "count": 1
            },
            {
              "function": "ground",
              "count": 1
            },
            {
              "function": "analog_input",
              "count": 2
            }
          ],
          "constraints": {
            "input_voltage_range_V": [
              0,
              3.3
            ]
          }
        },
        {
          "id": "analog_2",
          "name": "Analog Port 2",
          "protocol": {
            "type": "analog",
            "role": "input"
          },
          "requires": [
            {
              "function": "power_output",
              "count": 1
            },
            {
              "function": "ground",
              "count": 1
            },
            {
              "function": "analog_input",
              "count": 2
            }
          ],
          "constraints": {
            "input_voltage_range_V": [
              0,
              3.3
            ]
          }
        },
        {
          "id": "analog_3",
          "name": "Analog Port 3",
          "protocol": {
            "type": "analog",
            "role": "input"
          },
          "requires": [
            {
              "function": "power_output",
              "count": 1
            },
            {
              "function": "ground",
              "count": 1
            },
            {
              "function": "analog_input",
              "count": 2
            }
          ],
          "constraints": {
            "input_voltage_range_V": [
              0,
              3.3
            ]
          }
        },
        {
          "id": "digital_0",
          "name": "Digital Port 0",
          "protocol": {
            "type": "digital",
            "role": "peer"
          },
          "requires": [
            {
              "function": "power_output",
              "count": 1
            },
            {
              "function": "ground",
              "count": 1
            },
            {
              "function": "digital_io",
              "count": 2
            }
          ],
          "constraints": {
            "logic_high_V": 3.3
          }
        },
        {
          "id": "digital_1",
          "name": "Digital Port 1",
          "protocol": {
            "type": "digital",
            "role": "peer"
          },
          "requires": [
            {
              "function": "power_output",
              "count": 1
            },
            {
              "function": "ground",
              "count": 1
            },
            {
              "function": "digital_io",
              "count": 2
            }
          ],
          "constraints": {
            "logic_high_V": 3.3
          }
        },
        {
          "id": "digital_2",
          "name": "Digital Port 2",
          "protocol": {
            "type": "digital",
            "role": "peer"
          },
          "requires": [
            {
              "function": "power_output",
              "count": 1
            },
            {
              "function": "ground",
              "count": 1
            },
            {
              "function": "digital_io",
              "count": 2
            }
          ],
          "constraints": {
            "logic_high_V": 3.3
          }
        },
        {
          "id": "digital_3",
          "name": "Digital Port 3",
          "protocol": {
            "type": "digital",
            "role": "peer"
          },
          "requires": [
            {
              "function": "power_output",
              "count": 1
            },
            {
              "function": "ground",
              "count": 1
            },
            {
              "function": "digital_io",
              "count": 2
            }
          ],
          "constraints": {
            "logic_high_V": 3.3
          }
        },
        {
          "id": "i2c_0",
          "name": "I2C Port 0",
          "protocol": {
            "type": "i2c",
            "role": "master"
          },
          "requires": [
            {
              "function": "power_output",
              "count": 1
            },
            {
              "function": "ground",
              "count": 1
            },
            {
              "function": "i2c_sda",
              "count": 1
            },
            {
              "function": "i2c_scl",
              "count": 1
            }
          ],
          "constraints": {
            "logic_high_V": 3.3,
            "bus_speeds_khz": [
              100,
              400
            ]
          }
        },
        {
          "id": "i2c_1",
          "name": "I2C Port 1",
          "protocol": {
            "type": "i2c",
            "role": "master"
          },
          "requires": [
            {
              "function": "power_output",
              "count": 1
            },
            {
              "function": "ground",
              "count": 1
            },
            {
              "function": "i2c_sda",
              "count": 1
            },
            {
              "function": "i2c_scl",
              "count": 1
            }
          ],
          "constraints": {
            "logic_high_V": 3.3,
            "bus_speeds_khz": [
              100,
              400
            ]
          }
        },
        {
          "id": "i2c_2",
          "name": "I2C Port 2",
          "protocol": {
            "type": "i2c",
            "role": "master"
          },
          "requires": [
            {
              "function": "power_output",
              "count": 1
            },
            {
              "function": "ground",
              "count": 1
            },
            {
              "function": "i2c_sda",
              "count": 1
            },
            {
              "function": "i2c_scl",
              "count": 1
            }
          ],
          "constraints": {
            "logic_high_V": 3.3,
            "bus_speeds_khz": [
              100,
              400
            ]
          }
        },
        {
          "id": "i2c_3",
          "name": "I2C Port 3",
          "protocol": {
            "type": "i2c",
            "role": "master"
          },
          "requires": [
            {
              "function": "power_output",
              "count": 1
            },
            {
              "function": "ground",
              "count": 1
            },
            {
              "function": "i2c_sda",
              "count": 1
            },
            {
              "function": "i2c_scl",
              "count": 1
            }
          ],
          "constraints": {
            "logic_high_V": 3.3,
            "bus_speeds_khz": [
              100,
              400
            ]
          }
        }
      ]
    },
    {
      "domain": "mechanical",
      "resources": [
        {
          "id": "mounting_holes",
          "connector_type": "mounting_holes",
          "description": "Mounting holes on a 16mm spacing",
          "functions": [
            {
              "name": "mechanical_mount"
            }
          ]
        }
      ],
      "interfaces": [
        {
          "id": "mount_pattern",
          "name": "Mounting Pattern",
          "description": "Mounting holes on a 16mm spacing; overall size 143×103×29.5mm.",
          "protocol": {
            "type": "mechanical_attachment",
            "role": "mounting_point"
          },
          "requires": [
            {
              "function": "mechanical_mount",
              "count": 1
            }
          ],
          "dimensions_mm": {
            "length": 143,
            "width": 103,
            "height": 29.5
          },
          "mounting": {
            "grid_pitch_mm": 16
          }
        }
      ]
    }
  ]
}