{
  "metadata": {
    "id": "rev-through-bore-encoder",
    "name": "REV Through Bore Encoder",
    "type": "sensor",
    "description": "REV Through Bore Encoder. Supports incremental (A/B/I) and absolute duty-cycle outputs for FRC.",
    "manufacturer": "REV Robotics",
    "part_number": "REV-11-1271",
    "datasheet_url": "https://www.revrobotics.com/content/docs/REV-11-1271-DS.pdf",
    "tags": [
      "FRC",
      "encoder",
      "through bore",
      "absolute",
      "incremental",
      "REV"
    ],
    "schema_version": "1.4.0",
    "version": "0.1.0",
    "taxonomy": [
      "sensor.encoder",
      "robotics.frc"
    ]
  },
  "domains": [
    {
      "domain": "electrical",
      "power_domains": [
        {
          "id": "5v-logic",
          "name": "5V Logic",
          "nominal_voltage_V": 5,
          "voltage_range_V": [
            4.5,
            5.5
          ],
          "max_current_mA": 50
        }
      ],
      "resources": [
        {
          "id": "vcc",
          "name": "VCC",
          "functions": [
            {
              "name": "VCC",
              "direction": "sink",
              "signal_class": "power"
            }
          ],
          "power_domain_id": "5v-logic"
        },
        {
          "id": "gnd",
          "name": "GND",
          "functions": [
            {
              "name": "GND",
              "direction": "sink",
              "signal_class": "ground"
            }
          ],
          "power_domain_id": "5v-logic"
        },
        {
          "id": "a-sig",
          "name": "A",
          "functions": [
            {
              "name": "A",
              "direction": "source",
              "signal_class": "data"
            }
          ]
        },
        {
          "id": "b-sig",
          "name": "B",
          "functions": [
            {
              "name": "B",
              "direction": "source",
              "signal_class": "data"
            }
          ]
        },
        {
          "id": "i-sig",
          "name": "I (Index)",
          "functions": [
            {
              "name": "I",
              "direction": "source",
              "signal_class": "data"
            }
          ]
        },
        {
          "id": "abs-pwm",
          "name": "ABS_PWM",
          "functions": [
            {
              "name": "ABS_PWM",
              "direction": "source",
              "signal_class": "data"
            }
          ]
        }
      ],
      "interfaces": [
        {
          "id": "incremental-abi",
          "name": "Incremental Output (ABI)",
          "protocol": {
            "type": "custom",
            "role": "output"
          },
          "requires": [
            {
              "function": "VCC",
              "count": 1,
              "shareable_with": [
                "all"
              ]
            },
            {
              "function": "GND",
              "count": 1,
              "shareable_with": [
                "all"
              ]
            },
            {
              "function": "A",
              "count": 1
            },
            {
              "function": "B",
              "count": 1
            },
            {
              "function": "I",
              "count": 1
            }
          ],
          "max_instances": 1,
          "description": "Quadrature encoder output with index"
        },
        {
          "id": "absolute-pwm",
          "name": "Absolute Output (PWM)",
          "protocol": {
            "type": "digital",
            "role": "output"
          },
          "requires": [
            {
              "function": "VCC",
              "count": 1,
              "shareable_with": [
                "all"
              ]
            },
            {
              "function": "GND",
              "count": 1,
              "shareable_with": [
                "all"
              ]
            },
            {
              "function": "ABS_PWM",
              "count": 1
            }
          ],
          "max_instances": 1,
          "description": "Absolute position via duty cycle"
        }
      ]
    }
  ],
  "node_geometry": {
    "xScale": 1,
    "yScale": 1,
    "outline": {
      "preset": "circle"
    }
  }
}