From 1253e60ae12ec3ba8579a12ef5f2b423c5de2da6 Mon Sep 17 00:00:00 2001 From: brentru Date: Mon, 20 Apr 2026 13:04:34 -0400 Subject: [PATCH 01/15] Add - expander definition, schema, workflow --- .github/workflows/validate.yml | 6 +- components/expanders/ads7128/definition.json | 18 +++++ components/expanders/aw9523/definition.json | 27 +++++++ components/expanders/mcp23017/definition.json | 27 +++++++ components/expanders/pcf8574/definition.json | 19 +++++ components/expanders/pcf8575/definition.json | 27 +++++++ .../expanders/pi4ioe5v6408/definition.json | 18 +++++ components/expanders/schema.json | 78 +++++++++++++++++++ components/expanders/tca8418/definition.json | 29 +++++++ 9 files changed, 246 insertions(+), 3 deletions(-) create mode 100644 components/expanders/ads7128/definition.json create mode 100644 components/expanders/aw9523/definition.json create mode 100644 components/expanders/mcp23017/definition.json create mode 100644 components/expanders/pcf8574/definition.json create mode 100644 components/expanders/pcf8575/definition.json create mode 100644 components/expanders/pi4ioe5v6408/definition.json create mode 100644 components/expanders/schema.json create mode 100644 components/expanders/tca8418/definition.json diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml index 35c22617..20e7cde5 100644 --- a/.github/workflows/validate.yml +++ b/.github/workflows/validate.yml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - componentType: [pin, i2c, i2c_output, servo, ds18x20, pwm, pixel, uart, display] + componentType: [pin, i2c, i2c_output, servo, ds18x20, pwm, pixel, uart, display, expanders] name: Validate ${{ matrix.componentType }} Component Definition Files steps: @@ -84,10 +84,10 @@ jobs: EXIT_VALUE=0 # external contributors can modify some files - EXTERNAL_REGEX="^components\/(pin|i2c|servo|ds18x20|pwm|pixel|uart|i2c_output|display)\/.*\/(definition\.json|image\.(png|jpe?g|gif))$" + EXTERNAL_REGEX="^components\/(pin|i2c|servo|ds18x20|pwm|pixel|uart|i2c_output|display|expanders)\/.*\/(definition\.json|image\.(png|jpe?g|gif))$" # folks with write access to the repo (Adafruit team) can change more sensitive files - INTERNAL_REGEX="^(\.github\/.*|components\/(sensors.json|(pin|i2c|servo|ds18x20|pwm|pixel|uart|i2c_output|display)\/(schema.json|.*\/(definition\.json|image\.(png|jpe?g|gif)))))$" + INTERNAL_REGEX="^(\.github\/.*|components\/(sensors.json|(pin|i2c|servo|ds18x20|pwm|pixel|uart|i2c_output|display|expanders)\/(schema.json|.*\/(definition\.json|image\.(png|jpe?g|gif)))))$" # apply the appropriate regex based on permissions of the user if [[ $CAN_WRITE_TO_REPO ]]; then diff --git a/components/expanders/ads7128/definition.json b/components/expanders/ads7128/definition.json new file mode 100644 index 00000000..96c0b0a7 --- /dev/null +++ b/components/expanders/ads7128/definition.json @@ -0,0 +1,18 @@ +{ + "displayName": "ADS7128", + "description": "8-channel GPIO expander with 12-bit ADC.", + "published": false, + "vendor": "Texas Instruments", + "documentationURL": "https://www.ti.com/lit/gpn/ADS7128", + "i2cAddresses": ["0x10", "0x11", "0x12", "0x13", "0x14", "0x15", "0x16", "0x17"], + "channels": [ + { "channel": "AIN0", "type": ["analog-in", "digital-in-out"] }, + { "channel": "AIN1", "type": ["analog-in", "digital-in-out"] }, + { "channel": "AIN2", "type": ["analog-in", "digital-in-out"] }, + { "channel": "AIN3", "type": ["analog-in", "digital-in-out"] }, + { "channel": "AIN4", "type": ["analog-in", "digital-in-out"] }, + { "channel": "AIN5", "type": ["analog-in", "digital-in-out"] }, + { "channel": "AIN6", "type": ["analog-in", "digital-in-out"] }, + { "channel": "AIN7", "type": ["analog-in", "digital-in-out"] } + ] +} \ No newline at end of file diff --git a/components/expanders/aw9523/definition.json b/components/expanders/aw9523/definition.json new file mode 100644 index 00000000..93171f77 --- /dev/null +++ b/components/expanders/aw9523/definition.json @@ -0,0 +1,27 @@ +{ + "displayName": "AW9523", + "description": "16-pin GPIO expander and constant-current LED driver.", + "published": false, + "vendor": "Awinic", + "productURL": "https://www.adafruit.com/product/4886", + "documentationURL": "https://cdn-shop.adafruit.com/product-files/4886/AW9523%20English%20Datasheet.pdf", + "i2cAddresses": ["0x58", "0x59", "0x5A", "0x5B"], + "channels": [ + { "channel": "P0_0", "type": ["digital-in-out", "analog-out"] }, + { "channel": "P0_1", "type": ["digital-in-out", "analog-out"] }, + { "channel": "P0_2", "type": ["digital-in-out", "analog-out"] }, + { "channel": "P0_3", "type": ["digital-in-out", "analog-out"] }, + { "channel": "P0_4", "type": ["digital-in-out", "analog-out"] }, + { "channel": "P0_5", "type": ["digital-in-out", "analog-out"] }, + { "channel": "P0_6", "type": ["digital-in-out", "analog-out"] }, + { "channel": "P0_7", "type": ["digital-in-out", "analog-out"] }, + { "channel": "P1_0", "type": ["digital-in-out", "analog-out"] }, + { "channel": "P1_1", "type": ["digital-in-out", "analog-out"] }, + { "channel": "P1_2", "type": ["digital-in-out", "analog-out"] }, + { "channel": "P1_3", "type": ["digital-in-out", "analog-out"] }, + { "channel": "P1_4", "type": ["digital-in-out", "analog-out"] }, + { "channel": "P1_5", "type": ["digital-in-out", "analog-out"] }, + { "channel": "P1_6", "type": ["digital-in-out", "analog-out"] }, + { "channel": "P1_7", "type": ["digital-in-out", "analog-out"] } + ] +} \ No newline at end of file diff --git a/components/expanders/mcp23017/definition.json b/components/expanders/mcp23017/definition.json new file mode 100644 index 00000000..21a46793 --- /dev/null +++ b/components/expanders/mcp23017/definition.json @@ -0,0 +1,27 @@ +{ + "displayName": "MCP23017", + "description": "16-pin GPIO expander", + "published": true, + "vendor": "Microchip Technology", + "productURL": "https://www.adafruit.com/product/5346", + "documentationURL": "https://cdn-shop.adafruit.com/datasheets/mcp23017.pdf", + "i2cAddresses": ["0x20", "0x21", "0x22", "0x23", "0x24", "0x25", "0x26", "0x27"], + "channels": [ + { "channel": "A0", "type": ["digital-in-out"] }, + { "channel": "A1", "type": ["digital-in-out"] }, + { "channel": "A2", "type": ["digital-in-out"] }, + { "channel": "A3", "type": ["digital-in-out"] }, + { "channel": "A4", "type": ["digital-in-out"] }, + { "channel": "A5", "type": ["digital-in-out"] }, + { "channel": "A6", "type": ["digital-in-out"] }, + { "channel": "A7", "type": ["digital-in-out"] }, + { "channel": "B0", "type": ["digital-in-out"] }, + { "channel": "B1", "type": ["digital-in-out"] }, + { "channel": "B2", "type": ["digital-in-out"] }, + { "channel": "B3", "type": ["digital-in-out"] }, + { "channel": "B4", "type": ["digital-in-out"] }, + { "channel": "B5", "type": ["digital-in-out"] }, + { "channel": "B6", "type": ["digital-in-out"] }, + { "channel": "B7", "type": ["digital-in-out"] } + ] +} \ No newline at end of file diff --git a/components/expanders/pcf8574/definition.json b/components/expanders/pcf8574/definition.json new file mode 100644 index 00000000..39751952 --- /dev/null +++ b/components/expanders/pcf8574/definition.json @@ -0,0 +1,19 @@ +{ + "displayName": "PCF8574", + "description": "8-pin I2C GPIO expander.", + "published": false, + "vendor": "Texas Instruments", + "productURL": "https://www.adafruit.com/product/5545", + "documentationURL": "https://cdn-learn.adafruit.com/assets/assets/000/113/910/original/pcf8574.pdf?1659477228", + "i2cAddresses": ["0x20", "0x21", "0x22", "0x23", "0x24", "0x25", "0x26", "0x27"], + "channels": [ + { "channel": "P0", "type": ["digital-in-out"] }, + { "channel": "P1", "type": ["digital-in-out"] }, + { "channel": "P2", "type": ["digital-in-out"] }, + { "channel": "P3", "type": ["digital-in-out"] }, + { "channel": "P4", "type": ["digital-in-out"] }, + { "channel": "P5", "type": ["digital-in-out"] }, + { "channel": "P6", "type": ["digital-in-out"] }, + { "channel": "P7", "type": ["digital-in-out"] } + ] +} \ No newline at end of file diff --git a/components/expanders/pcf8575/definition.json b/components/expanders/pcf8575/definition.json new file mode 100644 index 00000000..2036b90d --- /dev/null +++ b/components/expanders/pcf8575/definition.json @@ -0,0 +1,27 @@ +{ + "displayName": "PCF8575", + "description": "16-pin I2C GPIO expander.", + "published": false, + "vendor": "Texas Instruments", + "productURL": "https://www.adafruit.com/product/5611", + "documentationURL": "https://www.ti.com/lit/ds/symlink/pcf8575.pdf", + "i2cAddresses": ["0x20", "0x21", "0x22", "0x23", "0x24", "0x25", "0x26", "0x27"], + "channels": [ + { "channel": "P0", "type": ["digital-in-out"] }, + { "channel": "P1", "type": ["digital-in-out"] }, + { "channel": "P2", "type": ["digital-in-out"] }, + { "channel": "P3", "type": ["digital-in-out"] }, + { "channel": "P4", "type": ["digital-in-out"] }, + { "channel": "P5", "type": ["digital-in-out"] }, + { "channel": "P6", "type": ["digital-in-out"] }, + { "channel": "P7", "type": ["digital-in-out"] }, + { "channel": "P8", "type": ["digital-in-out"] }, + { "channel": "P9", "type": ["digital-in-out"] }, + { "channel": "P10", "type": ["digital-in-out"] }, + { "channel": "P11", "type": ["digital-in-out"] }, + { "channel": "P12", "type": ["digital-in-out"] }, + { "channel": "P13", "type": ["digital-in-out"] }, + { "channel": "P14", "type": ["digital-in-out"] }, + { "channel": "P15", "type": ["digital-in-out"] } + ] +} \ No newline at end of file diff --git a/components/expanders/pi4ioe5v6408/definition.json b/components/expanders/pi4ioe5v6408/definition.json new file mode 100644 index 00000000..9af43bfe --- /dev/null +++ b/components/expanders/pi4ioe5v6408/definition.json @@ -0,0 +1,18 @@ +{ + "displayName": "PI4IOE5V6408", + "description": "8-pin GPIO expander.", + "published": false, + "vendor": "Diodes Incorporated", + "documentationURL": "https://www.mouser.com/datasheet/2/115/DIOD_S_A0004566212_1-2542464.pdf", + "i2cAddresses": ["0x43"], + "channels": [ + { "channel": "P0", "type": ["digital-in-out"] }, + { "channel": "P1", "type": ["digital-in-out"] }, + { "channel": "P2", "type": ["digital-in-out"] }, + { "channel": "P3", "type": ["digital-in-out"] }, + { "channel": "P4", "type": ["digital-in-out"] }, + { "channel": "P5", "type": ["digital-in-out"] }, + { "channel": "P6", "type": ["digital-in-out"] }, + { "channel": "P7", "type": ["digital-in-out"] } + ] +} \ No newline at end of file diff --git a/components/expanders/schema.json b/components/expanders/schema.json new file mode 100644 index 00000000..4c13485d --- /dev/null +++ b/components/expanders/schema.json @@ -0,0 +1,78 @@ +{ + "title": "Expander Component Definition", + "description": "A GPIO/Peripheral Expander component for use in Adafruit IO", + "type": "object", + "$defs": { + "expanderPin": { + "type": "object", + "description": "A single pin exposed by a GPIO/peripheral expander.", + "required": ["channel", "type"], + "additionalProperties": false, + "properties": { + "channel": { + "description": "The channel/port identifier on the expander chip.", + "type": "string", + "pattern": "^[A-Za-z0-9_]+$" + }, + "type": { + "description": "The pin's capability type(s), i.e.: analog, digital, pwm, etc.", + "type": "array", + "items": { + "type": "string" + }, + "minItems": 1, + "uniqueItems": true + } + } + } + }, + "required": ["displayName", "vendor", "i2cAddresses", "channels"], + "additionalProperties": false, + "properties": { + "displayName": { + "description": "The human-friendly name of this component.", + "type": "string", + "minLength": 3, + "maxLength": 24 + }, + "published": { + "description": "If true, this component is supported by the current firmware version and will be displayed to all users. If false, it is hidden behind a developer toggle so that contributors can still work on it against the production site.", + "type": "boolean" + }, + "description": { + "description": "A brief description describing this component's capabilities.", + "type": "string", + "minLength": 3, + "maxLength": 255 + }, + "productURL": { + "description": "Link to this component's homepage.", + "type": "string", + "format": "uri" + }, + "documentationURL": { + "description": "Link to this component's documentation.", + "type": "string", + "format": "uri" + }, + "vendor": { + "description": "Name of the company that makes this component.", + "type": "string", + "minLength": 3, + "maxLength": 24 + }, + "i2cAddresses": { + "description": "List of I2C addresses (as hex string, like \"0x38\") this component can appear on.", + "type": "array", + "items": { + "type": "string" + } + }, + "channels": { + "description": "List of channels exposed by this expander.", + "type": "array", + "items": { "$ref": "#/$defs/expanderPin" }, + "minItems": 1 + } + } +} \ No newline at end of file diff --git a/components/expanders/tca8418/definition.json b/components/expanders/tca8418/definition.json new file mode 100644 index 00000000..05b85899 --- /dev/null +++ b/components/expanders/tca8418/definition.json @@ -0,0 +1,29 @@ +{ + "displayName": "TCA8418", + "description": "18-pin I2C GPIO expander and keyboard matrix.", + "published": false, + "vendor": "Texas Instruments", + "productURL": "https://www.adafruit.com/product/4918", + "documentationURL": "https://cdn-learn.adafruit.com/assets/assets/000/115/118/original/tca8418.pdf?1663246975", + "i2cAddresses": ["0x34"], + "channels": [ + { "channel": "C0", "type": ["digital-in-out"] }, + { "channel": "C1", "type": ["digital-in-out"] }, + { "channel": "C2", "type": ["digital-in-out"] }, + { "channel": "C3", "type": ["digital-in-out"] }, + { "channel": "C4", "type": ["digital-in-out"] }, + { "channel": "C5", "type": ["digital-in-out"] }, + { "channel": "C6", "type": ["digital-in-out"] }, + { "channel": "C7", "type": ["digital-in-out"] }, + { "channel": "C8", "type": ["digital-in-out"] }, + { "channel": "C9", "type": ["digital-in-out"] }, + { "channel": "R0", "type": ["digital-in-out"] }, + { "channel": "R1", "type": ["digital-in-out"] }, + { "channel": "R2", "type": ["digital-in-out"] }, + { "channel": "R3", "type": ["digital-in-out"] }, + { "channel": "R4", "type": ["digital-in-out"] }, + { "channel": "R5", "type": ["digital-in-out"] }, + { "channel": "R6", "type": ["digital-in-out"] }, + { "channel": "R7", "type": ["digital-in-out"] } + ] +} \ No newline at end of file From 57b65c04db50efc3fa16df4e9e9ac7bbdc47fb6d Mon Sep 17 00:00:00 2001 From: brentru Date: Mon, 20 Apr 2026 16:32:00 -0400 Subject: [PATCH 02/15] Add displayName string for IO, pin mapping for firmware --- components/expanders/ads7128/definition.json | 18 ++++----- components/expanders/aw9523/definition.json | 34 ++++++++--------- components/expanders/mcp23017/definition.json | 34 ++++++++--------- components/expanders/pcf8574/definition.json | 18 ++++----- components/expanders/pcf8575/definition.json | 34 ++++++++--------- .../expanders/pi4ioe5v6408/definition.json | 18 ++++----- components/expanders/schema.json | 13 +++++-- components/expanders/tca8418/definition.json | 38 +++++++++---------- 8 files changed, 106 insertions(+), 101 deletions(-) diff --git a/components/expanders/ads7128/definition.json b/components/expanders/ads7128/definition.json index 96c0b0a7..7edb22ef 100644 --- a/components/expanders/ads7128/definition.json +++ b/components/expanders/ads7128/definition.json @@ -6,13 +6,13 @@ "documentationURL": "https://www.ti.com/lit/gpn/ADS7128", "i2cAddresses": ["0x10", "0x11", "0x12", "0x13", "0x14", "0x15", "0x16", "0x17"], "channels": [ - { "channel": "AIN0", "type": ["analog-in", "digital-in-out"] }, - { "channel": "AIN1", "type": ["analog-in", "digital-in-out"] }, - { "channel": "AIN2", "type": ["analog-in", "digital-in-out"] }, - { "channel": "AIN3", "type": ["analog-in", "digital-in-out"] }, - { "channel": "AIN4", "type": ["analog-in", "digital-in-out"] }, - { "channel": "AIN5", "type": ["analog-in", "digital-in-out"] }, - { "channel": "AIN6", "type": ["analog-in", "digital-in-out"] }, - { "channel": "AIN7", "type": ["analog-in", "digital-in-out"] } + { "displayName": "AIN0", "channel": 0, "type": ["analog-in", "digital-in-out"] }, + { "displayName": "AIN1", "channel": 1, "type": ["analog-in", "digital-in-out"] }, + { "displayName": "AIN2", "channel": 2, "type": ["analog-in", "digital-in-out"] }, + { "displayName": "AIN3", "channel": 3, "type": ["analog-in", "digital-in-out"] }, + { "displayName": "AIN4", "channel": 4, "type": ["analog-in", "digital-in-out"] }, + { "displayName": "AIN5", "channel": 5, "type": ["analog-in", "digital-in-out"] }, + { "displayName": "AIN6", "channel": 6, "type": ["analog-in", "digital-in-out"] }, + { "displayName": "AIN7", "channel": 7, "type": ["analog-in", "digital-in-out"] } ] -} \ No newline at end of file +} diff --git a/components/expanders/aw9523/definition.json b/components/expanders/aw9523/definition.json index 93171f77..78bffb7a 100644 --- a/components/expanders/aw9523/definition.json +++ b/components/expanders/aw9523/definition.json @@ -7,21 +7,21 @@ "documentationURL": "https://cdn-shop.adafruit.com/product-files/4886/AW9523%20English%20Datasheet.pdf", "i2cAddresses": ["0x58", "0x59", "0x5A", "0x5B"], "channels": [ - { "channel": "P0_0", "type": ["digital-in-out", "analog-out"] }, - { "channel": "P0_1", "type": ["digital-in-out", "analog-out"] }, - { "channel": "P0_2", "type": ["digital-in-out", "analog-out"] }, - { "channel": "P0_3", "type": ["digital-in-out", "analog-out"] }, - { "channel": "P0_4", "type": ["digital-in-out", "analog-out"] }, - { "channel": "P0_5", "type": ["digital-in-out", "analog-out"] }, - { "channel": "P0_6", "type": ["digital-in-out", "analog-out"] }, - { "channel": "P0_7", "type": ["digital-in-out", "analog-out"] }, - { "channel": "P1_0", "type": ["digital-in-out", "analog-out"] }, - { "channel": "P1_1", "type": ["digital-in-out", "analog-out"] }, - { "channel": "P1_2", "type": ["digital-in-out", "analog-out"] }, - { "channel": "P1_3", "type": ["digital-in-out", "analog-out"] }, - { "channel": "P1_4", "type": ["digital-in-out", "analog-out"] }, - { "channel": "P1_5", "type": ["digital-in-out", "analog-out"] }, - { "channel": "P1_6", "type": ["digital-in-out", "analog-out"] }, - { "channel": "P1_7", "type": ["digital-in-out", "analog-out"] } + { "displayName": "P0_0", "channel": 0, "type": ["digital-in-out", "analog-out"] }, + { "displayName": "P0_1", "channel": 1, "type": ["digital-in-out", "analog-out"] }, + { "displayName": "P0_2", "channel": 2, "type": ["digital-in-out", "analog-out"] }, + { "displayName": "P0_3", "channel": 3, "type": ["digital-in-out", "analog-out"] }, + { "displayName": "P0_4", "channel": 4, "type": ["digital-in-out", "analog-out"] }, + { "displayName": "P0_5", "channel": 5, "type": ["digital-in-out", "analog-out"] }, + { "displayName": "P0_6", "channel": 6, "type": ["digital-in-out", "analog-out"] }, + { "displayName": "P0_7", "channel": 7, "type": ["digital-in-out", "analog-out"] }, + { "displayName": "P1_0", "channel": 8, "type": ["digital-in-out", "analog-out"] }, + { "displayName": "P1_1", "channel": 9, "type": ["digital-in-out", "analog-out"] }, + { "displayName": "P1_2", "channel": 10, "type": ["digital-in-out", "analog-out"] }, + { "displayName": "P1_3", "channel": 11, "type": ["digital-in-out", "analog-out"] }, + { "displayName": "P1_4", "channel": 12, "type": ["digital-in-out", "analog-out"] }, + { "displayName": "P1_5", "channel": 13, "type": ["digital-in-out", "analog-out"] }, + { "displayName": "P1_6", "channel": 14, "type": ["digital-in-out", "analog-out"] }, + { "displayName": "P1_7", "channel": 15, "type": ["digital-in-out", "analog-out"] } ] -} \ No newline at end of file +} diff --git a/components/expanders/mcp23017/definition.json b/components/expanders/mcp23017/definition.json index 21a46793..60cc1c9b 100644 --- a/components/expanders/mcp23017/definition.json +++ b/components/expanders/mcp23017/definition.json @@ -7,21 +7,21 @@ "documentationURL": "https://cdn-shop.adafruit.com/datasheets/mcp23017.pdf", "i2cAddresses": ["0x20", "0x21", "0x22", "0x23", "0x24", "0x25", "0x26", "0x27"], "channels": [ - { "channel": "A0", "type": ["digital-in-out"] }, - { "channel": "A1", "type": ["digital-in-out"] }, - { "channel": "A2", "type": ["digital-in-out"] }, - { "channel": "A3", "type": ["digital-in-out"] }, - { "channel": "A4", "type": ["digital-in-out"] }, - { "channel": "A5", "type": ["digital-in-out"] }, - { "channel": "A6", "type": ["digital-in-out"] }, - { "channel": "A7", "type": ["digital-in-out"] }, - { "channel": "B0", "type": ["digital-in-out"] }, - { "channel": "B1", "type": ["digital-in-out"] }, - { "channel": "B2", "type": ["digital-in-out"] }, - { "channel": "B3", "type": ["digital-in-out"] }, - { "channel": "B4", "type": ["digital-in-out"] }, - { "channel": "B5", "type": ["digital-in-out"] }, - { "channel": "B6", "type": ["digital-in-out"] }, - { "channel": "B7", "type": ["digital-in-out"] } + { "displayName": "A0", "channel": 0, "type": ["digital-in-out"] }, + { "displayName": "A1", "channel": 1, "type": ["digital-in-out"] }, + { "displayName": "A2", "channel": 2, "type": ["digital-in-out"] }, + { "displayName": "A3", "channel": 3, "type": ["digital-in-out"] }, + { "displayName": "A4", "channel": 4, "type": ["digital-in-out"] }, + { "displayName": "A5", "channel": 5, "type": ["digital-in-out"] }, + { "displayName": "A6", "channel": 6, "type": ["digital-in-out"] }, + { "displayName": "A7", "channel": 7, "type": ["digital-in-out"] }, + { "displayName": "B0", "channel": 8, "type": ["digital-in-out"] }, + { "displayName": "B1", "channel": 9, "type": ["digital-in-out"] }, + { "displayName": "B2", "channel": 10, "type": ["digital-in-out"] }, + { "displayName": "B3", "channel": 11, "type": ["digital-in-out"] }, + { "displayName": "B4", "channel": 12, "type": ["digital-in-out"] }, + { "displayName": "B5", "channel": 13, "type": ["digital-in-out"] }, + { "displayName": "B6", "channel": 14, "type": ["digital-in-out"] }, + { "displayName": "B7", "channel": 15, "type": ["digital-in-out"] } ] -} \ No newline at end of file +} diff --git a/components/expanders/pcf8574/definition.json b/components/expanders/pcf8574/definition.json index 39751952..6d7f462d 100644 --- a/components/expanders/pcf8574/definition.json +++ b/components/expanders/pcf8574/definition.json @@ -7,13 +7,13 @@ "documentationURL": "https://cdn-learn.adafruit.com/assets/assets/000/113/910/original/pcf8574.pdf?1659477228", "i2cAddresses": ["0x20", "0x21", "0x22", "0x23", "0x24", "0x25", "0x26", "0x27"], "channels": [ - { "channel": "P0", "type": ["digital-in-out"] }, - { "channel": "P1", "type": ["digital-in-out"] }, - { "channel": "P2", "type": ["digital-in-out"] }, - { "channel": "P3", "type": ["digital-in-out"] }, - { "channel": "P4", "type": ["digital-in-out"] }, - { "channel": "P5", "type": ["digital-in-out"] }, - { "channel": "P6", "type": ["digital-in-out"] }, - { "channel": "P7", "type": ["digital-in-out"] } + { "displayName": "P0", "channel": 0, "type": ["digital-in-out"] }, + { "displayName": "P1", "channel": 1, "type": ["digital-in-out"] }, + { "displayName": "P2", "channel": 2, "type": ["digital-in-out"] }, + { "displayName": "P3", "channel": 3, "type": ["digital-in-out"] }, + { "displayName": "P4", "channel": 4, "type": ["digital-in-out"] }, + { "displayName": "P5", "channel": 5, "type": ["digital-in-out"] }, + { "displayName": "P6", "channel": 6, "type": ["digital-in-out"] }, + { "displayName": "P7", "channel": 7, "type": ["digital-in-out"] } ] -} \ No newline at end of file +} diff --git a/components/expanders/pcf8575/definition.json b/components/expanders/pcf8575/definition.json index 2036b90d..68fbb5cd 100644 --- a/components/expanders/pcf8575/definition.json +++ b/components/expanders/pcf8575/definition.json @@ -7,21 +7,21 @@ "documentationURL": "https://www.ti.com/lit/ds/symlink/pcf8575.pdf", "i2cAddresses": ["0x20", "0x21", "0x22", "0x23", "0x24", "0x25", "0x26", "0x27"], "channels": [ - { "channel": "P0", "type": ["digital-in-out"] }, - { "channel": "P1", "type": ["digital-in-out"] }, - { "channel": "P2", "type": ["digital-in-out"] }, - { "channel": "P3", "type": ["digital-in-out"] }, - { "channel": "P4", "type": ["digital-in-out"] }, - { "channel": "P5", "type": ["digital-in-out"] }, - { "channel": "P6", "type": ["digital-in-out"] }, - { "channel": "P7", "type": ["digital-in-out"] }, - { "channel": "P8", "type": ["digital-in-out"] }, - { "channel": "P9", "type": ["digital-in-out"] }, - { "channel": "P10", "type": ["digital-in-out"] }, - { "channel": "P11", "type": ["digital-in-out"] }, - { "channel": "P12", "type": ["digital-in-out"] }, - { "channel": "P13", "type": ["digital-in-out"] }, - { "channel": "P14", "type": ["digital-in-out"] }, - { "channel": "P15", "type": ["digital-in-out"] } + { "displayName": "P0", "channel": 0, "type": ["digital-in-out"] }, + { "displayName": "P1", "channel": 1, "type": ["digital-in-out"] }, + { "displayName": "P2", "channel": 2, "type": ["digital-in-out"] }, + { "displayName": "P3", "channel": 3, "type": ["digital-in-out"] }, + { "displayName": "P4", "channel": 4, "type": ["digital-in-out"] }, + { "displayName": "P5", "channel": 5, "type": ["digital-in-out"] }, + { "displayName": "P6", "channel": 6, "type": ["digital-in-out"] }, + { "displayName": "P7", "channel": 7, "type": ["digital-in-out"] }, + { "displayName": "P8", "channel": 8, "type": ["digital-in-out"] }, + { "displayName": "P9", "channel": 9, "type": ["digital-in-out"] }, + { "displayName": "P10", "channel": 10, "type": ["digital-in-out"] }, + { "displayName": "P11", "channel": 11, "type": ["digital-in-out"] }, + { "displayName": "P12", "channel": 12, "type": ["digital-in-out"] }, + { "displayName": "P13", "channel": 13, "type": ["digital-in-out"] }, + { "displayName": "P14", "channel": 14, "type": ["digital-in-out"] }, + { "displayName": "P15", "channel": 15, "type": ["digital-in-out"] } ] -} \ No newline at end of file +} diff --git a/components/expanders/pi4ioe5v6408/definition.json b/components/expanders/pi4ioe5v6408/definition.json index 9af43bfe..b1a6d3d1 100644 --- a/components/expanders/pi4ioe5v6408/definition.json +++ b/components/expanders/pi4ioe5v6408/definition.json @@ -6,13 +6,13 @@ "documentationURL": "https://www.mouser.com/datasheet/2/115/DIOD_S_A0004566212_1-2542464.pdf", "i2cAddresses": ["0x43"], "channels": [ - { "channel": "P0", "type": ["digital-in-out"] }, - { "channel": "P1", "type": ["digital-in-out"] }, - { "channel": "P2", "type": ["digital-in-out"] }, - { "channel": "P3", "type": ["digital-in-out"] }, - { "channel": "P4", "type": ["digital-in-out"] }, - { "channel": "P5", "type": ["digital-in-out"] }, - { "channel": "P6", "type": ["digital-in-out"] }, - { "channel": "P7", "type": ["digital-in-out"] } + { "displayName": "P0", "channel": 0, "type": ["digital-in-out"] }, + { "displayName": "P1", "channel": 1, "type": ["digital-in-out"] }, + { "displayName": "P2", "channel": 2, "type": ["digital-in-out"] }, + { "displayName": "P3", "channel": 3, "type": ["digital-in-out"] }, + { "displayName": "P4", "channel": 4, "type": ["digital-in-out"] }, + { "displayName": "P5", "channel": 5, "type": ["digital-in-out"] }, + { "displayName": "P6", "channel": 6, "type": ["digital-in-out"] }, + { "displayName": "P7", "channel": 7, "type": ["digital-in-out"] } ] -} \ No newline at end of file +} diff --git a/components/expanders/schema.json b/components/expanders/schema.json index 4c13485d..0be66811 100644 --- a/components/expanders/schema.json +++ b/components/expanders/schema.json @@ -6,13 +6,18 @@ "expanderPin": { "type": "object", "description": "A single pin exposed by a GPIO/peripheral expander.", - "required": ["channel", "type"], + "required": ["displayName", "channel", "type"], "additionalProperties": false, "properties": { + "displayName": { + "description": "The human-readable label for this pin, shown in the Adafruit IO UI.", + "type": "string", + "pattern": "^[A-Za-z0-9_]+$" + }, "channel": { - "description": "The channel/port identifier on the expander chip.", - "type": "string", - "pattern": "^[A-Za-z0-9_]+$" + "description": "The numeric pin/channel index passed to firmware (e.g. expander->pinMode(channel, OUTPUT)).", + "type": "integer", + "minimum": 0 }, "type": { "description": "The pin's capability type(s), i.e.: analog, digital, pwm, etc.", diff --git a/components/expanders/tca8418/definition.json b/components/expanders/tca8418/definition.json index 05b85899..bd912fed 100644 --- a/components/expanders/tca8418/definition.json +++ b/components/expanders/tca8418/definition.json @@ -7,23 +7,23 @@ "documentationURL": "https://cdn-learn.adafruit.com/assets/assets/000/115/118/original/tca8418.pdf?1663246975", "i2cAddresses": ["0x34"], "channels": [ - { "channel": "C0", "type": ["digital-in-out"] }, - { "channel": "C1", "type": ["digital-in-out"] }, - { "channel": "C2", "type": ["digital-in-out"] }, - { "channel": "C3", "type": ["digital-in-out"] }, - { "channel": "C4", "type": ["digital-in-out"] }, - { "channel": "C5", "type": ["digital-in-out"] }, - { "channel": "C6", "type": ["digital-in-out"] }, - { "channel": "C7", "type": ["digital-in-out"] }, - { "channel": "C8", "type": ["digital-in-out"] }, - { "channel": "C9", "type": ["digital-in-out"] }, - { "channel": "R0", "type": ["digital-in-out"] }, - { "channel": "R1", "type": ["digital-in-out"] }, - { "channel": "R2", "type": ["digital-in-out"] }, - { "channel": "R3", "type": ["digital-in-out"] }, - { "channel": "R4", "type": ["digital-in-out"] }, - { "channel": "R5", "type": ["digital-in-out"] }, - { "channel": "R6", "type": ["digital-in-out"] }, - { "channel": "R7", "type": ["digital-in-out"] } + { "displayName": "C0", "channel": 8, "type": ["digital-in-out"] }, + { "displayName": "C1", "channel": 9, "type": ["digital-in-out"] }, + { "displayName": "C2", "channel": 10, "type": ["digital-in-out"] }, + { "displayName": "C3", "channel": 11, "type": ["digital-in-out"] }, + { "displayName": "C4", "channel": 12, "type": ["digital-in-out"] }, + { "displayName": "C5", "channel": 13, "type": ["digital-in-out"] }, + { "displayName": "C6", "channel": 14, "type": ["digital-in-out"] }, + { "displayName": "C7", "channel": 15, "type": ["digital-in-out"] }, + { "displayName": "C8", "channel": 16, "type": ["digital-in-out"] }, + { "displayName": "C9", "channel": 17, "type": ["digital-in-out"] }, + { "displayName": "R0", "channel": 0, "type": ["digital-in-out"] }, + { "displayName": "R1", "channel": 1, "type": ["digital-in-out"] }, + { "displayName": "R2", "channel": 2, "type": ["digital-in-out"] }, + { "displayName": "R3", "channel": 3, "type": ["digital-in-out"] }, + { "displayName": "R4", "channel": 4, "type": ["digital-in-out"] }, + { "displayName": "R5", "channel": 5, "type": ["digital-in-out"] }, + { "displayName": "R6", "channel": 6, "type": ["digital-in-out"] }, + { "displayName": "R7", "channel": 7, "type": ["digital-in-out"] } ] -} \ No newline at end of file +} From 2a9e4afdc2a711d14ac1c7d59c00bc760a47d5e9 Mon Sep 17 00:00:00 2001 From: brentru Date: Tue, 21 Apr 2026 16:21:13 -0400 Subject: [PATCH 03/15] Use updated schema --- components/expanders/ads7128/definition.json | 16 ++++---- components/expanders/aw9523/definition.json | 32 +++++++-------- components/expanders/mcp23017/definition.json | 32 +++++++-------- components/expanders/pcf8574/definition.json | 16 ++++---- components/expanders/pcf8575/definition.json | 32 +++++++-------- .../expanders/pi4ioe5v6408/definition.json | 16 ++++---- components/expanders/schema.json | 40 ++++++++++++++----- components/expanders/tca8418/definition.json | 36 ++++++++--------- 8 files changed, 120 insertions(+), 100 deletions(-) diff --git a/components/expanders/ads7128/definition.json b/components/expanders/ads7128/definition.json index 7edb22ef..9d1561aa 100644 --- a/components/expanders/ads7128/definition.json +++ b/components/expanders/ads7128/definition.json @@ -6,13 +6,13 @@ "documentationURL": "https://www.ti.com/lit/gpn/ADS7128", "i2cAddresses": ["0x10", "0x11", "0x12", "0x13", "0x14", "0x15", "0x16", "0x17"], "channels": [ - { "displayName": "AIN0", "channel": 0, "type": ["analog-in", "digital-in-out"] }, - { "displayName": "AIN1", "channel": 1, "type": ["analog-in", "digital-in-out"] }, - { "displayName": "AIN2", "channel": 2, "type": ["analog-in", "digital-in-out"] }, - { "displayName": "AIN3", "channel": 3, "type": ["analog-in", "digital-in-out"] }, - { "displayName": "AIN4", "channel": 4, "type": ["analog-in", "digital-in-out"] }, - { "displayName": "AIN5", "channel": 5, "type": ["analog-in", "digital-in-out"] }, - { "displayName": "AIN6", "channel": 6, "type": ["analog-in", "digital-in-out"] }, - { "displayName": "AIN7", "channel": 7, "type": ["analog-in", "digital-in-out"] } + { "displayName": "AIN0", "channel": 0, "isGPIO": true, "direction": "INPUT_OUTPUT", "isADC": true }, + { "displayName": "AIN1", "channel": 1, "isGPIO": true, "direction": "INPUT_OUTPUT", "isADC": true }, + { "displayName": "AIN2", "channel": 2, "isGPIO": true, "direction": "INPUT_OUTPUT", "isADC": true }, + { "displayName": "AIN3", "channel": 3, "isGPIO": true, "direction": "INPUT_OUTPUT", "isADC": true }, + { "displayName": "AIN4", "channel": 4, "isGPIO": true, "direction": "INPUT_OUTPUT", "isADC": true }, + { "displayName": "AIN5", "channel": 5, "isGPIO": true, "direction": "INPUT_OUTPUT", "isADC": true }, + { "displayName": "AIN6", "channel": 6, "isGPIO": true, "direction": "INPUT_OUTPUT", "isADC": true }, + { "displayName": "AIN7", "channel": 7, "isGPIO": true, "direction": "INPUT_OUTPUT", "isADC": true } ] } diff --git a/components/expanders/aw9523/definition.json b/components/expanders/aw9523/definition.json index 78bffb7a..199086c2 100644 --- a/components/expanders/aw9523/definition.json +++ b/components/expanders/aw9523/definition.json @@ -7,21 +7,21 @@ "documentationURL": "https://cdn-shop.adafruit.com/product-files/4886/AW9523%20English%20Datasheet.pdf", "i2cAddresses": ["0x58", "0x59", "0x5A", "0x5B"], "channels": [ - { "displayName": "P0_0", "channel": 0, "type": ["digital-in-out", "analog-out"] }, - { "displayName": "P0_1", "channel": 1, "type": ["digital-in-out", "analog-out"] }, - { "displayName": "P0_2", "channel": 2, "type": ["digital-in-out", "analog-out"] }, - { "displayName": "P0_3", "channel": 3, "type": ["digital-in-out", "analog-out"] }, - { "displayName": "P0_4", "channel": 4, "type": ["digital-in-out", "analog-out"] }, - { "displayName": "P0_5", "channel": 5, "type": ["digital-in-out", "analog-out"] }, - { "displayName": "P0_6", "channel": 6, "type": ["digital-in-out", "analog-out"] }, - { "displayName": "P0_7", "channel": 7, "type": ["digital-in-out", "analog-out"] }, - { "displayName": "P1_0", "channel": 8, "type": ["digital-in-out", "analog-out"] }, - { "displayName": "P1_1", "channel": 9, "type": ["digital-in-out", "analog-out"] }, - { "displayName": "P1_2", "channel": 10, "type": ["digital-in-out", "analog-out"] }, - { "displayName": "P1_3", "channel": 11, "type": ["digital-in-out", "analog-out"] }, - { "displayName": "P1_4", "channel": 12, "type": ["digital-in-out", "analog-out"] }, - { "displayName": "P1_5", "channel": 13, "type": ["digital-in-out", "analog-out"] }, - { "displayName": "P1_6", "channel": 14, "type": ["digital-in-out", "analog-out"] }, - { "displayName": "P1_7", "channel": 15, "type": ["digital-in-out", "analog-out"] } + { "displayName": "P0_0", "channel": 0, "isGPIO": true, "direction": "INPUT_OUTPUT", "isPWM": true }, + { "displayName": "P0_1", "channel": 1, "isGPIO": true, "direction": "INPUT_OUTPUT", "isPWM": true }, + { "displayName": "P0_2", "channel": 2, "isGPIO": true, "direction": "INPUT_OUTPUT", "isPWM": true }, + { "displayName": "P0_3", "channel": 3, "isGPIO": true, "direction": "INPUT_OUTPUT", "isPWM": true }, + { "displayName": "P0_4", "channel": 4, "isGPIO": true, "direction": "INPUT_OUTPUT", "isPWM": true }, + { "displayName": "P0_5", "channel": 5, "isGPIO": true, "direction": "INPUT_OUTPUT", "isPWM": true }, + { "displayName": "P0_6", "channel": 6, "isGPIO": true, "direction": "INPUT_OUTPUT", "isPWM": true }, + { "displayName": "P0_7", "channel": 7, "isGPIO": true, "direction": "INPUT_OUTPUT", "isPWM": true }, + { "displayName": "P1_0", "channel": 8, "isGPIO": true, "direction": "INPUT_OUTPUT", "isPWM": true }, + { "displayName": "P1_1", "channel": 9, "isGPIO": true, "direction": "INPUT_OUTPUT", "isPWM": true }, + { "displayName": "P1_2", "channel": 10, "isGPIO": true, "direction": "INPUT_OUTPUT", "isPWM": true }, + { "displayName": "P1_3", "channel": 11, "isGPIO": true, "direction": "INPUT_OUTPUT", "isPWM": true }, + { "displayName": "P1_4", "channel": 12, "isGPIO": true, "direction": "INPUT_OUTPUT", "isPWM": true }, + { "displayName": "P1_5", "channel": 13, "isGPIO": true, "direction": "INPUT_OUTPUT", "isPWM": true }, + { "displayName": "P1_6", "channel": 14, "isGPIO": true, "direction": "INPUT_OUTPUT", "isPWM": true }, + { "displayName": "P1_7", "channel": 15, "isGPIO": true, "direction": "INPUT_OUTPUT", "isPWM": true } ] } diff --git a/components/expanders/mcp23017/definition.json b/components/expanders/mcp23017/definition.json index 60cc1c9b..beb95d70 100644 --- a/components/expanders/mcp23017/definition.json +++ b/components/expanders/mcp23017/definition.json @@ -7,21 +7,21 @@ "documentationURL": "https://cdn-shop.adafruit.com/datasheets/mcp23017.pdf", "i2cAddresses": ["0x20", "0x21", "0x22", "0x23", "0x24", "0x25", "0x26", "0x27"], "channels": [ - { "displayName": "A0", "channel": 0, "type": ["digital-in-out"] }, - { "displayName": "A1", "channel": 1, "type": ["digital-in-out"] }, - { "displayName": "A2", "channel": 2, "type": ["digital-in-out"] }, - { "displayName": "A3", "channel": 3, "type": ["digital-in-out"] }, - { "displayName": "A4", "channel": 4, "type": ["digital-in-out"] }, - { "displayName": "A5", "channel": 5, "type": ["digital-in-out"] }, - { "displayName": "A6", "channel": 6, "type": ["digital-in-out"] }, - { "displayName": "A7", "channel": 7, "type": ["digital-in-out"] }, - { "displayName": "B0", "channel": 8, "type": ["digital-in-out"] }, - { "displayName": "B1", "channel": 9, "type": ["digital-in-out"] }, - { "displayName": "B2", "channel": 10, "type": ["digital-in-out"] }, - { "displayName": "B3", "channel": 11, "type": ["digital-in-out"] }, - { "displayName": "B4", "channel": 12, "type": ["digital-in-out"] }, - { "displayName": "B5", "channel": 13, "type": ["digital-in-out"] }, - { "displayName": "B6", "channel": 14, "type": ["digital-in-out"] }, - { "displayName": "B7", "channel": 15, "type": ["digital-in-out"] } + { "displayName": "A0", "channel": 0, "isGPIO": true, "direction": "INPUT_OUTPUT" }, + { "displayName": "A1", "channel": 1, "isGPIO": true, "direction": "INPUT_OUTPUT" }, + { "displayName": "A2", "channel": 2, "isGPIO": true, "direction": "INPUT_OUTPUT" }, + { "displayName": "A3", "channel": 3, "isGPIO": true, "direction": "INPUT_OUTPUT" }, + { "displayName": "A4", "channel": 4, "isGPIO": true, "direction": "INPUT_OUTPUT" }, + { "displayName": "A5", "channel": 5, "isGPIO": true, "direction": "INPUT_OUTPUT" }, + { "displayName": "A6", "channel": 6, "isGPIO": true, "direction": "INPUT_OUTPUT" }, + { "displayName": "A7", "channel": 7, "isGPIO": true, "direction": "INPUT_OUTPUT" }, + { "displayName": "B0", "channel": 8, "isGPIO": true, "direction": "INPUT_OUTPUT" }, + { "displayName": "B1", "channel": 9, "isGPIO": true, "direction": "INPUT_OUTPUT" }, + { "displayName": "B2", "channel": 10, "isGPIO": true, "direction": "INPUT_OUTPUT" }, + { "displayName": "B3", "channel": 11, "isGPIO": true, "direction": "INPUT_OUTPUT" }, + { "displayName": "B4", "channel": 12, "isGPIO": true, "direction": "INPUT_OUTPUT" }, + { "displayName": "B5", "channel": 13, "isGPIO": true, "direction": "INPUT_OUTPUT" }, + { "displayName": "B6", "channel": 14, "isGPIO": true, "direction": "INPUT_OUTPUT" }, + { "displayName": "B7", "channel": 15, "isGPIO": true, "direction": "INPUT_OUTPUT" } ] } diff --git a/components/expanders/pcf8574/definition.json b/components/expanders/pcf8574/definition.json index 6d7f462d..a9802ff3 100644 --- a/components/expanders/pcf8574/definition.json +++ b/components/expanders/pcf8574/definition.json @@ -7,13 +7,13 @@ "documentationURL": "https://cdn-learn.adafruit.com/assets/assets/000/113/910/original/pcf8574.pdf?1659477228", "i2cAddresses": ["0x20", "0x21", "0x22", "0x23", "0x24", "0x25", "0x26", "0x27"], "channels": [ - { "displayName": "P0", "channel": 0, "type": ["digital-in-out"] }, - { "displayName": "P1", "channel": 1, "type": ["digital-in-out"] }, - { "displayName": "P2", "channel": 2, "type": ["digital-in-out"] }, - { "displayName": "P3", "channel": 3, "type": ["digital-in-out"] }, - { "displayName": "P4", "channel": 4, "type": ["digital-in-out"] }, - { "displayName": "P5", "channel": 5, "type": ["digital-in-out"] }, - { "displayName": "P6", "channel": 6, "type": ["digital-in-out"] }, - { "displayName": "P7", "channel": 7, "type": ["digital-in-out"] } + { "displayName": "P0", "channel": 0, "isGPIO": true, "direction": "INPUT_OUTPUT" }, + { "displayName": "P1", "channel": 1, "isGPIO": true, "direction": "INPUT_OUTPUT" }, + { "displayName": "P2", "channel": 2, "isGPIO": true, "direction": "INPUT_OUTPUT" }, + { "displayName": "P3", "channel": 3, "isGPIO": true, "direction": "INPUT_OUTPUT" }, + { "displayName": "P4", "channel": 4, "isGPIO": true, "direction": "INPUT_OUTPUT" }, + { "displayName": "P5", "channel": 5, "isGPIO": true, "direction": "INPUT_OUTPUT" }, + { "displayName": "P6", "channel": 6, "isGPIO": true, "direction": "INPUT_OUTPUT" }, + { "displayName": "P7", "channel": 7, "isGPIO": true, "direction": "INPUT_OUTPUT" } ] } diff --git a/components/expanders/pcf8575/definition.json b/components/expanders/pcf8575/definition.json index 68fbb5cd..ec1f03a3 100644 --- a/components/expanders/pcf8575/definition.json +++ b/components/expanders/pcf8575/definition.json @@ -7,21 +7,21 @@ "documentationURL": "https://www.ti.com/lit/ds/symlink/pcf8575.pdf", "i2cAddresses": ["0x20", "0x21", "0x22", "0x23", "0x24", "0x25", "0x26", "0x27"], "channels": [ - { "displayName": "P0", "channel": 0, "type": ["digital-in-out"] }, - { "displayName": "P1", "channel": 1, "type": ["digital-in-out"] }, - { "displayName": "P2", "channel": 2, "type": ["digital-in-out"] }, - { "displayName": "P3", "channel": 3, "type": ["digital-in-out"] }, - { "displayName": "P4", "channel": 4, "type": ["digital-in-out"] }, - { "displayName": "P5", "channel": 5, "type": ["digital-in-out"] }, - { "displayName": "P6", "channel": 6, "type": ["digital-in-out"] }, - { "displayName": "P7", "channel": 7, "type": ["digital-in-out"] }, - { "displayName": "P8", "channel": 8, "type": ["digital-in-out"] }, - { "displayName": "P9", "channel": 9, "type": ["digital-in-out"] }, - { "displayName": "P10", "channel": 10, "type": ["digital-in-out"] }, - { "displayName": "P11", "channel": 11, "type": ["digital-in-out"] }, - { "displayName": "P12", "channel": 12, "type": ["digital-in-out"] }, - { "displayName": "P13", "channel": 13, "type": ["digital-in-out"] }, - { "displayName": "P14", "channel": 14, "type": ["digital-in-out"] }, - { "displayName": "P15", "channel": 15, "type": ["digital-in-out"] } + { "displayName": "P0", "channel": 0, "isGPIO": true, "direction": "INPUT_OUTPUT" }, + { "displayName": "P1", "channel": 1, "isGPIO": true, "direction": "INPUT_OUTPUT" }, + { "displayName": "P2", "channel": 2, "isGPIO": true, "direction": "INPUT_OUTPUT" }, + { "displayName": "P3", "channel": 3, "isGPIO": true, "direction": "INPUT_OUTPUT" }, + { "displayName": "P4", "channel": 4, "isGPIO": true, "direction": "INPUT_OUTPUT" }, + { "displayName": "P5", "channel": 5, "isGPIO": true, "direction": "INPUT_OUTPUT" }, + { "displayName": "P6", "channel": 6, "isGPIO": true, "direction": "INPUT_OUTPUT" }, + { "displayName": "P7", "channel": 7, "isGPIO": true, "direction": "INPUT_OUTPUT" }, + { "displayName": "P8", "channel": 8, "isGPIO": true, "direction": "INPUT_OUTPUT" }, + { "displayName": "P9", "channel": 9, "isGPIO": true, "direction": "INPUT_OUTPUT" }, + { "displayName": "P10", "channel": 10, "isGPIO": true, "direction": "INPUT_OUTPUT" }, + { "displayName": "P11", "channel": 11, "isGPIO": true, "direction": "INPUT_OUTPUT" }, + { "displayName": "P12", "channel": 12, "isGPIO": true, "direction": "INPUT_OUTPUT" }, + { "displayName": "P13", "channel": 13, "isGPIO": true, "direction": "INPUT_OUTPUT" }, + { "displayName": "P14", "channel": 14, "isGPIO": true, "direction": "INPUT_OUTPUT" }, + { "displayName": "P15", "channel": 15, "isGPIO": true, "direction": "INPUT_OUTPUT" } ] } diff --git a/components/expanders/pi4ioe5v6408/definition.json b/components/expanders/pi4ioe5v6408/definition.json index b1a6d3d1..c86b7019 100644 --- a/components/expanders/pi4ioe5v6408/definition.json +++ b/components/expanders/pi4ioe5v6408/definition.json @@ -6,13 +6,13 @@ "documentationURL": "https://www.mouser.com/datasheet/2/115/DIOD_S_A0004566212_1-2542464.pdf", "i2cAddresses": ["0x43"], "channels": [ - { "displayName": "P0", "channel": 0, "type": ["digital-in-out"] }, - { "displayName": "P1", "channel": 1, "type": ["digital-in-out"] }, - { "displayName": "P2", "channel": 2, "type": ["digital-in-out"] }, - { "displayName": "P3", "channel": 3, "type": ["digital-in-out"] }, - { "displayName": "P4", "channel": 4, "type": ["digital-in-out"] }, - { "displayName": "P5", "channel": 5, "type": ["digital-in-out"] }, - { "displayName": "P6", "channel": 6, "type": ["digital-in-out"] }, - { "displayName": "P7", "channel": 7, "type": ["digital-in-out"] } + { "displayName": "P0", "channel": 0, "isGPIO": true, "direction": "INPUT_OUTPUT" }, + { "displayName": "P1", "channel": 1, "isGPIO": true, "direction": "INPUT_OUTPUT" }, + { "displayName": "P2", "channel": 2, "isGPIO": true, "direction": "INPUT_OUTPUT" }, + { "displayName": "P3", "channel": 3, "isGPIO": true, "direction": "INPUT_OUTPUT" }, + { "displayName": "P4", "channel": 4, "isGPIO": true, "direction": "INPUT_OUTPUT" }, + { "displayName": "P5", "channel": 5, "isGPIO": true, "direction": "INPUT_OUTPUT" }, + { "displayName": "P6", "channel": 6, "isGPIO": true, "direction": "INPUT_OUTPUT" }, + { "displayName": "P7", "channel": 7, "isGPIO": true, "direction": "INPUT_OUTPUT" } ] } diff --git a/components/expanders/schema.json b/components/expanders/schema.json index 0be66811..ce9704b0 100644 --- a/components/expanders/schema.json +++ b/components/expanders/schema.json @@ -6,7 +6,7 @@ "expanderPin": { "type": "object", "description": "A single pin exposed by a GPIO/peripheral expander.", - "required": ["displayName", "channel", "type"], + "required": ["displayName", "channel"], "additionalProperties": false, "properties": { "displayName": { @@ -19,15 +19,35 @@ "type": "integer", "minimum": 0 }, - "type": { - "description": "The pin's capability type(s), i.e.: analog, digital, pwm, etc.", - "type": "array", - "items": { - "type": "string" - }, - "minItems": 1, - "uniqueItems": true + "isGPIO": { + "description": "If true, this pin supports digital GPIO.", + "type": "boolean" + }, + "direction": { + "description": "The direction(s) this GPIO pin supports. Only valid when isGPIO is true.", + "type": "string", + "enum": ["INPUT", "OUTPUT", "INPUT_OUTPUT"] + }, + "isPWM": { + "description": "If true, this pin supports PWM / analog output (e.g. LED constant-current drive).", + "type": "boolean" + }, + "isADC": { + "description": "If true, this pin supports analog-to-digital conversion (analog input).", + "type": "boolean" } + }, + "anyOf": [ + { "required": ["isGPIO"] }, + { "required": ["isPWM"] }, + { "required": ["isADC"] } + ], + "if": { + "properties": { "isGPIO": { "const": true } }, + "required": ["isGPIO"] + }, + "then": { + "required": ["direction"] } } }, @@ -80,4 +100,4 @@ "minItems": 1 } } -} \ No newline at end of file +} diff --git a/components/expanders/tca8418/definition.json b/components/expanders/tca8418/definition.json index bd912fed..78c6ac13 100644 --- a/components/expanders/tca8418/definition.json +++ b/components/expanders/tca8418/definition.json @@ -7,23 +7,23 @@ "documentationURL": "https://cdn-learn.adafruit.com/assets/assets/000/115/118/original/tca8418.pdf?1663246975", "i2cAddresses": ["0x34"], "channels": [ - { "displayName": "C0", "channel": 8, "type": ["digital-in-out"] }, - { "displayName": "C1", "channel": 9, "type": ["digital-in-out"] }, - { "displayName": "C2", "channel": 10, "type": ["digital-in-out"] }, - { "displayName": "C3", "channel": 11, "type": ["digital-in-out"] }, - { "displayName": "C4", "channel": 12, "type": ["digital-in-out"] }, - { "displayName": "C5", "channel": 13, "type": ["digital-in-out"] }, - { "displayName": "C6", "channel": 14, "type": ["digital-in-out"] }, - { "displayName": "C7", "channel": 15, "type": ["digital-in-out"] }, - { "displayName": "C8", "channel": 16, "type": ["digital-in-out"] }, - { "displayName": "C9", "channel": 17, "type": ["digital-in-out"] }, - { "displayName": "R0", "channel": 0, "type": ["digital-in-out"] }, - { "displayName": "R1", "channel": 1, "type": ["digital-in-out"] }, - { "displayName": "R2", "channel": 2, "type": ["digital-in-out"] }, - { "displayName": "R3", "channel": 3, "type": ["digital-in-out"] }, - { "displayName": "R4", "channel": 4, "type": ["digital-in-out"] }, - { "displayName": "R5", "channel": 5, "type": ["digital-in-out"] }, - { "displayName": "R6", "channel": 6, "type": ["digital-in-out"] }, - { "displayName": "R7", "channel": 7, "type": ["digital-in-out"] } + { "displayName": "C0", "channel": 8, "isGPIO": true, "direction": "INPUT_OUTPUT" }, + { "displayName": "C1", "channel": 9, "isGPIO": true, "direction": "INPUT_OUTPUT" }, + { "displayName": "C2", "channel": 10, "isGPIO": true, "direction": "INPUT_OUTPUT" }, + { "displayName": "C3", "channel": 11, "isGPIO": true, "direction": "INPUT_OUTPUT" }, + { "displayName": "C4", "channel": 12, "isGPIO": true, "direction": "INPUT_OUTPUT" }, + { "displayName": "C5", "channel": 13, "isGPIO": true, "direction": "INPUT_OUTPUT" }, + { "displayName": "C6", "channel": 14, "isGPIO": true, "direction": "INPUT_OUTPUT" }, + { "displayName": "C7", "channel": 15, "isGPIO": true, "direction": "INPUT_OUTPUT" }, + { "displayName": "C8", "channel": 16, "isGPIO": true, "direction": "INPUT_OUTPUT" }, + { "displayName": "C9", "channel": 17, "isGPIO": true, "direction": "INPUT_OUTPUT" }, + { "displayName": "R0", "channel": 0, "isGPIO": true, "direction": "INPUT_OUTPUT" }, + { "displayName": "R1", "channel": 1, "isGPIO": true, "direction": "INPUT_OUTPUT" }, + { "displayName": "R2", "channel": 2, "isGPIO": true, "direction": "INPUT_OUTPUT" }, + { "displayName": "R3", "channel": 3, "isGPIO": true, "direction": "INPUT_OUTPUT" }, + { "displayName": "R4", "channel": 4, "isGPIO": true, "direction": "INPUT_OUTPUT" }, + { "displayName": "R5", "channel": 5, "isGPIO": true, "direction": "INPUT_OUTPUT" }, + { "displayName": "R6", "channel": 6, "isGPIO": true, "direction": "INPUT_OUTPUT" }, + { "displayName": "R7", "channel": 7, "isGPIO": true, "direction": "INPUT_OUTPUT" } ] } From 0c584c4cdfeb27886a95d4b1565d51da3bb5aea8 Mon Sep 17 00:00:00 2001 From: brentru Date: Tue, 21 Apr 2026 16:32:53 -0400 Subject: [PATCH 04/15] Add - Adafruit ATtiny Breakouts with seesaw --- .../seesaw_attiny1616/definition.json | 21 ++++++++++++++++ .../seesaw_attiny816/definition.json | 21 ++++++++++++++++ .../seesaw_attiny817/definition.json | 25 +++++++++++++++++++ 3 files changed, 67 insertions(+) create mode 100644 components/expanders/seesaw_attiny1616/definition.json create mode 100644 components/expanders/seesaw_attiny816/definition.json create mode 100644 components/expanders/seesaw_attiny817/definition.json diff --git a/components/expanders/seesaw_attiny1616/definition.json b/components/expanders/seesaw_attiny1616/definition.json new file mode 100644 index 00000000..ab8e3b2a --- /dev/null +++ b/components/expanders/seesaw_attiny1616/definition.json @@ -0,0 +1,21 @@ +{ + "displayName": "ATtiny1616 with Seesaw", + "description": "ATtiny1616 Breakout with seesaw.", + "published": false, + "vendor": "Adafruit", + "productURL": "https://www.adafruit.com/product/5690", + "i2cAddresses": ["0x49", "0x4A", "0x4B", "0x4C"], + "channels": [ + { "displayName": "0", "channel": 0, "isGPIO": true, "direction": "INPUT_OUTPUT", "isADC": true, "isPWM": true }, + { "displayName": "1", "channel": 1, "isGPIO": true, "direction": "INPUT_OUTPUT", "isADC": true, "isPWM": true }, + { "displayName": "2", "channel": 2, "isGPIO": true, "direction": "INPUT_OUTPUT", "isADC": true }, + { "displayName": "3", "channel": 3, "isGPIO": true, "direction": "INPUT_OUTPUT", "isADC": true }, + { "displayName": "4", "channel": 4, "isGPIO": true, "direction": "INPUT_OUTPUT", "isADC": true }, + { "displayName": "5", "channel": 5, "isGPIO": true, "direction": "INPUT_OUTPUT", "isADC": true }, + { "displayName": "7", "channel": 7, "isPWM": true }, + { "displayName": "11", "channel": 11, "isGPIO": true, "direction": "INPUT_OUTPUT", "isPWM": true }, + { "displayName": "14", "channel": 14, "isGPIO": true, "direction": "INPUT_OUTPUT", "isADC": true }, + { "displayName": "15", "channel": 15, "isGPIO": true, "direction": "INPUT_OUTPUT", "isADC": true }, + { "displayName": "16", "channel": 16, "isGPIO": true, "direction": "INPUT_OUTPUT", "isADC": true, "isPWM": true } + ] +} diff --git a/components/expanders/seesaw_attiny816/definition.json b/components/expanders/seesaw_attiny816/definition.json new file mode 100644 index 00000000..f6b8489e --- /dev/null +++ b/components/expanders/seesaw_attiny816/definition.json @@ -0,0 +1,21 @@ +{ + "displayName": "ATtiny816 with Seesaw", + "description": "ATtiny816 Breakout with seesaw.", + "published": false, + "vendor": "Adafruit", + "productURL": "https://www.adafruit.com/product/5681", + "i2cAddresses": ["0x49", "0x4A", "0x4B", "0x4C"], + "channels": [ + { "displayName": "0", "channel": 0, "isGPIO": true, "direction": "INPUT_OUTPUT", "isADC": true, "isPWM": true }, + { "displayName": "1", "channel": 1, "isGPIO": true, "direction": "INPUT_OUTPUT", "isADC": true, "isPWM": true }, + { "displayName": "2", "channel": 2, "isGPIO": true, "direction": "INPUT_OUTPUT", "isADC": true }, + { "displayName": "3", "channel": 3, "isGPIO": true, "direction": "INPUT_OUTPUT", "isADC": true }, + { "displayName": "4", "channel": 4, "isGPIO": true, "direction": "INPUT_OUTPUT", "isADC": true }, + { "displayName": "5", "channel": 5, "isGPIO": true, "direction": "INPUT_OUTPUT", "isADC": true }, + { "displayName": "7", "channel": 7, "isPWM": true }, + { "displayName": "11", "channel": 11, "isGPIO": true, "direction": "INPUT_OUTPUT", "isPWM": true }, + { "displayName": "14", "channel": 14, "isGPIO": true, "direction": "INPUT_OUTPUT", "isADC": true }, + { "displayName": "15", "channel": 15, "isGPIO": true, "direction": "INPUT_OUTPUT", "isADC": true }, + { "displayName": "16", "channel": 16, "isGPIO": true, "direction": "INPUT_OUTPUT", "isADC": true, "isPWM": true } + ] +} diff --git a/components/expanders/seesaw_attiny817/definition.json b/components/expanders/seesaw_attiny817/definition.json new file mode 100644 index 00000000..19e8dad4 --- /dev/null +++ b/components/expanders/seesaw_attiny817/definition.json @@ -0,0 +1,25 @@ +{ + "displayName": "ATtiny817 with Seesaw", + "description": "ATtiny817 Breakout with seesaw.", + "published": false, + "vendor": "Adafruit", + "productURL": "https://www.adafruit.com/product/5233", + "i2cAddresses": ["0x49", "0x4A", "0x4B", "0x4C"], + "channels": [ + { "displayName": "0", "channel": 0, "isGPIO": true, "direction": "INPUT_OUTPUT", "isADC": true, "isPWM": true }, + { "displayName": "1", "channel": 1, "isGPIO": true, "direction": "INPUT_OUTPUT", "isADC": true, "isPWM": true }, + { "displayName": "2", "channel": 2, "isGPIO": true, "direction": "INPUT_OUTPUT", "isADC": true }, + { "displayName": "3", "channel": 3, "isGPIO": true, "direction": "INPUT_OUTPUT", "isADC": true }, + { "displayName": "5", "channel": 5, "isGPIO": true, "direction": "OUTPUT" }, + { "displayName": "6", "channel": 6, "isGPIO": true, "direction": "INPUT_OUTPUT", "isADC": true }, + { "displayName": "7", "channel": 7, "isGPIO": true, "direction": "INPUT_OUTPUT", "isADC": true }, + { "displayName": "8", "channel": 8, "isGPIO": true, "direction": "INPUT_OUTPUT" }, + { "displayName": "9", "channel": 9, "isGPIO": true, "direction": "INPUT_OUTPUT", "isPWM": true }, + { "displayName": "12", "channel": 12, "isGPIO": true, "direction": "INPUT_OUTPUT", "isPWM": true }, + { "displayName": "13", "channel": 13, "isGPIO": true, "direction": "INPUT_OUTPUT", "isPWM": true }, + { "displayName": "14", "channel": 14, "isGPIO": true, "direction": "INPUT_OUTPUT" }, + { "displayName": "18", "channel": 18, "isGPIO": true, "direction": "INPUT_OUTPUT", "isADC": true }, + { "displayName": "19", "channel": 19, "isGPIO": true, "direction": "INPUT_OUTPUT", "isADC": true }, + { "displayName": "20", "channel": 20, "isGPIO": true, "direction": "INPUT_OUTPUT", "isADC": true } + ] +} From d6f8714d229f3c2435600d71377e47e77ae9922f Mon Sep 17 00:00:00 2001 From: brentru Date: Wed, 22 Apr 2026 14:49:45 -0400 Subject: [PATCH 05/15] Address @tyeth review --- components/expanders/seesaw_attiny1616/definition.json | 2 ++ components/expanders/seesaw_attiny816/definition.json | 1 + components/expanders/seesaw_attiny817/definition.json | 3 ++- 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/components/expanders/seesaw_attiny1616/definition.json b/components/expanders/seesaw_attiny1616/definition.json index ab8e3b2a..ff7126a0 100644 --- a/components/expanders/seesaw_attiny1616/definition.json +++ b/components/expanders/seesaw_attiny1616/definition.json @@ -4,6 +4,7 @@ "published": false, "vendor": "Adafruit", "productURL": "https://www.adafruit.com/product/5690", + "documentationURL": "https://learn.adafruit.com/adafruit-attiny817-seesaw", "i2cAddresses": ["0x49", "0x4A", "0x4B", "0x4C"], "channels": [ { "displayName": "0", "channel": 0, "isGPIO": true, "direction": "INPUT_OUTPUT", "isADC": true, "isPWM": true }, @@ -12,6 +13,7 @@ { "displayName": "3", "channel": 3, "isGPIO": true, "direction": "INPUT_OUTPUT", "isADC": true }, { "displayName": "4", "channel": 4, "isGPIO": true, "direction": "INPUT_OUTPUT", "isADC": true }, { "displayName": "5", "channel": 5, "isGPIO": true, "direction": "INPUT_OUTPUT", "isADC": true }, + { "displayName": "6", "channel": 6, "isGPIO": true, "direction": "INPUT_OUTPUT"}, { "displayName": "7", "channel": 7, "isPWM": true }, { "displayName": "11", "channel": 11, "isGPIO": true, "direction": "INPUT_OUTPUT", "isPWM": true }, { "displayName": "14", "channel": 14, "isGPIO": true, "direction": "INPUT_OUTPUT", "isADC": true }, diff --git a/components/expanders/seesaw_attiny816/definition.json b/components/expanders/seesaw_attiny816/definition.json index f6b8489e..a4a6c8bc 100644 --- a/components/expanders/seesaw_attiny816/definition.json +++ b/components/expanders/seesaw_attiny816/definition.json @@ -4,6 +4,7 @@ "published": false, "vendor": "Adafruit", "productURL": "https://www.adafruit.com/product/5681", + "documentationURL": "https://learn.adafruit.com/adafruit-attiny817-seesaw", "i2cAddresses": ["0x49", "0x4A", "0x4B", "0x4C"], "channels": [ { "displayName": "0", "channel": 0, "isGPIO": true, "direction": "INPUT_OUTPUT", "isADC": true, "isPWM": true }, diff --git a/components/expanders/seesaw_attiny817/definition.json b/components/expanders/seesaw_attiny817/definition.json index 19e8dad4..e43a1c2a 100644 --- a/components/expanders/seesaw_attiny817/definition.json +++ b/components/expanders/seesaw_attiny817/definition.json @@ -4,6 +4,7 @@ "published": false, "vendor": "Adafruit", "productURL": "https://www.adafruit.com/product/5233", + "documentationURL": "https://learn.adafruit.com/adafruit-attiny817-seesaw", "i2cAddresses": ["0x49", "0x4A", "0x4B", "0x4C"], "channels": [ { "displayName": "0", "channel": 0, "isGPIO": true, "direction": "INPUT_OUTPUT", "isADC": true, "isPWM": true }, @@ -20,6 +21,6 @@ { "displayName": "14", "channel": 14, "isGPIO": true, "direction": "INPUT_OUTPUT" }, { "displayName": "18", "channel": 18, "isGPIO": true, "direction": "INPUT_OUTPUT", "isADC": true }, { "displayName": "19", "channel": 19, "isGPIO": true, "direction": "INPUT_OUTPUT", "isADC": true }, - { "displayName": "20", "channel": 20, "isGPIO": true, "direction": "INPUT_OUTPUT", "isADC": true } + { "displayName": "20", "channel": 20, "isADC": true } ] } From f238c17bf25b3cda34fc57824dc652b28d7f8a00 Mon Sep 17 00:00:00 2001 From: brentru Date: Thu, 23 Apr 2026 15:11:38 -0400 Subject: [PATCH 06/15] Harmonize with Board def --- components/expanders/ads7128/definition.json | 18 +++++----- components/expanders/aw9523/definition.json | 32 ++++++++--------- components/expanders/mcp23017/definition.json | 32 ++++++++--------- components/expanders/pcf8574/definition.json | 16 ++++----- components/expanders/pcf8575/definition.json | 32 ++++++++--------- .../expanders/pi4ioe5v6408/definition.json | 16 ++++----- components/expanders/schema.json | 32 ++++++++--------- .../seesaw_attiny1616/definition.json | 24 ++++++------- .../seesaw_attiny816/definition.json | 22 ++++++------ .../seesaw_attiny817/definition.json | 30 ++++++++-------- components/expanders/tca8418/definition.json | 36 +++++++++---------- 11 files changed, 145 insertions(+), 145 deletions(-) diff --git a/components/expanders/ads7128/definition.json b/components/expanders/ads7128/definition.json index 9d1561aa..1c2b3781 100644 --- a/components/expanders/ads7128/definition.json +++ b/components/expanders/ads7128/definition.json @@ -1,18 +1,18 @@ { "displayName": "ADS7128", - "description": "8-channel GPIO expander with 12-bit ADC.", + "description": "8-name GPIO expander with 12-bit ADC.", "published": false, "vendor": "Texas Instruments", "documentationURL": "https://www.ti.com/lit/gpn/ADS7128", "i2cAddresses": ["0x10", "0x11", "0x12", "0x13", "0x14", "0x15", "0x16", "0x17"], "channels": [ - { "displayName": "AIN0", "channel": 0, "isGPIO": true, "direction": "INPUT_OUTPUT", "isADC": true }, - { "displayName": "AIN1", "channel": 1, "isGPIO": true, "direction": "INPUT_OUTPUT", "isADC": true }, - { "displayName": "AIN2", "channel": 2, "isGPIO": true, "direction": "INPUT_OUTPUT", "isADC": true }, - { "displayName": "AIN3", "channel": 3, "isGPIO": true, "direction": "INPUT_OUTPUT", "isADC": true }, - { "displayName": "AIN4", "channel": 4, "isGPIO": true, "direction": "INPUT_OUTPUT", "isADC": true }, - { "displayName": "AIN5", "channel": 5, "isGPIO": true, "direction": "INPUT_OUTPUT", "isADC": true }, - { "displayName": "AIN6", "channel": 6, "isGPIO": true, "direction": "INPUT_OUTPUT", "isADC": true }, - { "displayName": "AIN7", "channel": 7, "isGPIO": true, "direction": "INPUT_OUTPUT", "isADC": true } + {"displayName": "AIN0", "name": 0, "hasGPIO": true, "hasADC": true}, + {"displayName": "AIN1", "name": 1, "hasGPIO": true, "hasADC": true}, + {"displayName": "AIN2", "name": 2, "hasGPIO": true, "hasADC": true}, + {"displayName": "AIN3", "name": 3, "hasGPIO": true, "hasADC": true}, + {"displayName": "AIN4", "name": 4, "hasGPIO": true, "hasADC": true}, + {"displayName": "AIN5", "name": 5, "hasGPIO": true, "hasADC": true}, + {"displayName": "AIN6", "name": 6, "hasGPIO": true, "hasADC": true}, + {"displayName": "AIN7", "name": 7, "hasGPIO": true, "hasADC": true} ] } diff --git a/components/expanders/aw9523/definition.json b/components/expanders/aw9523/definition.json index 199086c2..3bf51db3 100644 --- a/components/expanders/aw9523/definition.json +++ b/components/expanders/aw9523/definition.json @@ -7,21 +7,21 @@ "documentationURL": "https://cdn-shop.adafruit.com/product-files/4886/AW9523%20English%20Datasheet.pdf", "i2cAddresses": ["0x58", "0x59", "0x5A", "0x5B"], "channels": [ - { "displayName": "P0_0", "channel": 0, "isGPIO": true, "direction": "INPUT_OUTPUT", "isPWM": true }, - { "displayName": "P0_1", "channel": 1, "isGPIO": true, "direction": "INPUT_OUTPUT", "isPWM": true }, - { "displayName": "P0_2", "channel": 2, "isGPIO": true, "direction": "INPUT_OUTPUT", "isPWM": true }, - { "displayName": "P0_3", "channel": 3, "isGPIO": true, "direction": "INPUT_OUTPUT", "isPWM": true }, - { "displayName": "P0_4", "channel": 4, "isGPIO": true, "direction": "INPUT_OUTPUT", "isPWM": true }, - { "displayName": "P0_5", "channel": 5, "isGPIO": true, "direction": "INPUT_OUTPUT", "isPWM": true }, - { "displayName": "P0_6", "channel": 6, "isGPIO": true, "direction": "INPUT_OUTPUT", "isPWM": true }, - { "displayName": "P0_7", "channel": 7, "isGPIO": true, "direction": "INPUT_OUTPUT", "isPWM": true }, - { "displayName": "P1_0", "channel": 8, "isGPIO": true, "direction": "INPUT_OUTPUT", "isPWM": true }, - { "displayName": "P1_1", "channel": 9, "isGPIO": true, "direction": "INPUT_OUTPUT", "isPWM": true }, - { "displayName": "P1_2", "channel": 10, "isGPIO": true, "direction": "INPUT_OUTPUT", "isPWM": true }, - { "displayName": "P1_3", "channel": 11, "isGPIO": true, "direction": "INPUT_OUTPUT", "isPWM": true }, - { "displayName": "P1_4", "channel": 12, "isGPIO": true, "direction": "INPUT_OUTPUT", "isPWM": true }, - { "displayName": "P1_5", "channel": 13, "isGPIO": true, "direction": "INPUT_OUTPUT", "isPWM": true }, - { "displayName": "P1_6", "channel": 14, "isGPIO": true, "direction": "INPUT_OUTPUT", "isPWM": true }, - { "displayName": "P1_7", "channel": 15, "isGPIO": true, "direction": "INPUT_OUTPUT", "isPWM": true } + {"displayName": "P0_0", "name": 0, "hasGPIO": true, "hasPWM": true}, + {"displayName": "P0_1", "name": 1, "hasGPIO": true, "hasPWM": true}, + {"displayName": "P0_2", "name": 2, "hasGPIO": true, "hasPWM": true}, + {"displayName": "P0_3", "name": 3, "hasGPIO": true, "hasPWM": true}, + {"displayName": "P0_4", "name": 4, "hasGPIO": true, "hasPWM": true}, + {"displayName": "P0_5", "name": 5, "hasGPIO": true, "hasPWM": true}, + {"displayName": "P0_6", "name": 6, "hasGPIO": true, "hasPWM": true}, + {"displayName": "P0_7", "name": 7, "hasGPIO": true, "hasPWM": true}, + {"displayName": "P1_0", "name": 8, "hasGPIO": true, "hasPWM": true}, + {"displayName": "P1_1", "name": 9, "hasGPIO": true, "hasPWM": true}, + {"displayName": "P1_2", "name": 10, "hasGPIO": true, "hasPWM": true}, + {"displayName": "P1_3", "name": 11, "hasGPIO": true, "hasPWM": true}, + {"displayName": "P1_4", "name": 12, "hasGPIO": true, "hasPWM": true}, + {"displayName": "P1_5", "name": 13, "hasGPIO": true, "hasPWM": true}, + {"displayName": "P1_6", "name": 14, "hasGPIO": true, "hasPWM": true}, + {"displayName": "P1_7", "name": 15, "hasGPIO": true, "hasPWM": true} ] } diff --git a/components/expanders/mcp23017/definition.json b/components/expanders/mcp23017/definition.json index beb95d70..6c897043 100644 --- a/components/expanders/mcp23017/definition.json +++ b/components/expanders/mcp23017/definition.json @@ -7,21 +7,21 @@ "documentationURL": "https://cdn-shop.adafruit.com/datasheets/mcp23017.pdf", "i2cAddresses": ["0x20", "0x21", "0x22", "0x23", "0x24", "0x25", "0x26", "0x27"], "channels": [ - { "displayName": "A0", "channel": 0, "isGPIO": true, "direction": "INPUT_OUTPUT" }, - { "displayName": "A1", "channel": 1, "isGPIO": true, "direction": "INPUT_OUTPUT" }, - { "displayName": "A2", "channel": 2, "isGPIO": true, "direction": "INPUT_OUTPUT" }, - { "displayName": "A3", "channel": 3, "isGPIO": true, "direction": "INPUT_OUTPUT" }, - { "displayName": "A4", "channel": 4, "isGPIO": true, "direction": "INPUT_OUTPUT" }, - { "displayName": "A5", "channel": 5, "isGPIO": true, "direction": "INPUT_OUTPUT" }, - { "displayName": "A6", "channel": 6, "isGPIO": true, "direction": "INPUT_OUTPUT" }, - { "displayName": "A7", "channel": 7, "isGPIO": true, "direction": "INPUT_OUTPUT" }, - { "displayName": "B0", "channel": 8, "isGPIO": true, "direction": "INPUT_OUTPUT" }, - { "displayName": "B1", "channel": 9, "isGPIO": true, "direction": "INPUT_OUTPUT" }, - { "displayName": "B2", "channel": 10, "isGPIO": true, "direction": "INPUT_OUTPUT" }, - { "displayName": "B3", "channel": 11, "isGPIO": true, "direction": "INPUT_OUTPUT" }, - { "displayName": "B4", "channel": 12, "isGPIO": true, "direction": "INPUT_OUTPUT" }, - { "displayName": "B5", "channel": 13, "isGPIO": true, "direction": "INPUT_OUTPUT" }, - { "displayName": "B6", "channel": 14, "isGPIO": true, "direction": "INPUT_OUTPUT" }, - { "displayName": "B7", "channel": 15, "isGPIO": true, "direction": "INPUT_OUTPUT" } + {"displayName": "A0", "name": 0, "hasGPIO": true}, + {"displayName": "A1", "name": 1, "hasGPIO": true}, + {"displayName": "A2", "name": 2, "hasGPIO": true}, + {"displayName": "A3", "name": 3, "hasGPIO": true}, + {"displayName": "A4", "name": 4, "hasGPIO": true}, + {"displayName": "A5", "name": 5, "hasGPIO": true}, + {"displayName": "A6", "name": 6, "hasGPIO": true}, + {"displayName": "A7", "name": 7, "hasGPIO": true}, + {"displayName": "B0", "name": 8, "hasGPIO": true}, + {"displayName": "B1", "name": 9, "hasGPIO": true}, + {"displayName": "B2", "name": 10, "hasGPIO": true}, + {"displayName": "B3", "name": 11, "hasGPIO": true}, + {"displayName": "B4", "name": 12, "hasGPIO": true}, + {"displayName": "B5", "name": 13, "hasGPIO": true}, + {"displayName": "B6", "name": 14, "hasGPIO": true}, + {"displayName": "B7", "name": 15, "hasGPIO": true} ] } diff --git a/components/expanders/pcf8574/definition.json b/components/expanders/pcf8574/definition.json index a9802ff3..3e0767a9 100644 --- a/components/expanders/pcf8574/definition.json +++ b/components/expanders/pcf8574/definition.json @@ -7,13 +7,13 @@ "documentationURL": "https://cdn-learn.adafruit.com/assets/assets/000/113/910/original/pcf8574.pdf?1659477228", "i2cAddresses": ["0x20", "0x21", "0x22", "0x23", "0x24", "0x25", "0x26", "0x27"], "channels": [ - { "displayName": "P0", "channel": 0, "isGPIO": true, "direction": "INPUT_OUTPUT" }, - { "displayName": "P1", "channel": 1, "isGPIO": true, "direction": "INPUT_OUTPUT" }, - { "displayName": "P2", "channel": 2, "isGPIO": true, "direction": "INPUT_OUTPUT" }, - { "displayName": "P3", "channel": 3, "isGPIO": true, "direction": "INPUT_OUTPUT" }, - { "displayName": "P4", "channel": 4, "isGPIO": true, "direction": "INPUT_OUTPUT" }, - { "displayName": "P5", "channel": 5, "isGPIO": true, "direction": "INPUT_OUTPUT" }, - { "displayName": "P6", "channel": 6, "isGPIO": true, "direction": "INPUT_OUTPUT" }, - { "displayName": "P7", "channel": 7, "isGPIO": true, "direction": "INPUT_OUTPUT" } + {"displayName": "P0", "name": 0, "hasGPIO": true}, + {"displayName": "P1", "name": 1, "hasGPIO": true}, + {"displayName": "P2", "name": 2, "hasGPIO": true}, + {"displayName": "P3", "name": 3, "hasGPIO": true}, + {"displayName": "P4", "name": 4, "hasGPIO": true}, + {"displayName": "P5", "name": 5, "hasGPIO": true}, + {"displayName": "P6", "name": 6, "hasGPIO": true}, + {"displayName": "P7", "name": 7, "hasGPIO": true} ] } diff --git a/components/expanders/pcf8575/definition.json b/components/expanders/pcf8575/definition.json index ec1f03a3..67dbaf7a 100644 --- a/components/expanders/pcf8575/definition.json +++ b/components/expanders/pcf8575/definition.json @@ -7,21 +7,21 @@ "documentationURL": "https://www.ti.com/lit/ds/symlink/pcf8575.pdf", "i2cAddresses": ["0x20", "0x21", "0x22", "0x23", "0x24", "0x25", "0x26", "0x27"], "channels": [ - { "displayName": "P0", "channel": 0, "isGPIO": true, "direction": "INPUT_OUTPUT" }, - { "displayName": "P1", "channel": 1, "isGPIO": true, "direction": "INPUT_OUTPUT" }, - { "displayName": "P2", "channel": 2, "isGPIO": true, "direction": "INPUT_OUTPUT" }, - { "displayName": "P3", "channel": 3, "isGPIO": true, "direction": "INPUT_OUTPUT" }, - { "displayName": "P4", "channel": 4, "isGPIO": true, "direction": "INPUT_OUTPUT" }, - { "displayName": "P5", "channel": 5, "isGPIO": true, "direction": "INPUT_OUTPUT" }, - { "displayName": "P6", "channel": 6, "isGPIO": true, "direction": "INPUT_OUTPUT" }, - { "displayName": "P7", "channel": 7, "isGPIO": true, "direction": "INPUT_OUTPUT" }, - { "displayName": "P8", "channel": 8, "isGPIO": true, "direction": "INPUT_OUTPUT" }, - { "displayName": "P9", "channel": 9, "isGPIO": true, "direction": "INPUT_OUTPUT" }, - { "displayName": "P10", "channel": 10, "isGPIO": true, "direction": "INPUT_OUTPUT" }, - { "displayName": "P11", "channel": 11, "isGPIO": true, "direction": "INPUT_OUTPUT" }, - { "displayName": "P12", "channel": 12, "isGPIO": true, "direction": "INPUT_OUTPUT" }, - { "displayName": "P13", "channel": 13, "isGPIO": true, "direction": "INPUT_OUTPUT" }, - { "displayName": "P14", "channel": 14, "isGPIO": true, "direction": "INPUT_OUTPUT" }, - { "displayName": "P15", "channel": 15, "isGPIO": true, "direction": "INPUT_OUTPUT" } + {"displayName": "P0", "name": 0, "hasGPIO": true}, + {"displayName": "P1", "name": 1, "hasGPIO": true}, + {"displayName": "P2", "name": 2, "hasGPIO": true}, + {"displayName": "P3", "name": 3, "hasGPIO": true}, + {"displayName": "P4", "name": 4, "hasGPIO": true}, + {"displayName": "P5", "name": 5, "hasGPIO": true}, + {"displayName": "P6", "name": 6, "hasGPIO": true}, + {"displayName": "P7", "name": 7, "hasGPIO": true}, + {"displayName": "P8", "name": 8, "hasGPIO": true}, + {"displayName": "P9", "name": 9, "hasGPIO": true}, + {"displayName": "P10", "name": 10, "hasGPIO": true}, + {"displayName": "P11", "name": 11, "hasGPIO": true}, + {"displayName": "P12", "name": 12, "hasGPIO": true}, + {"displayName": "P13", "name": 13, "hasGPIO": true}, + {"displayName": "P14", "name": 14, "hasGPIO": true}, + {"displayName": "P15", "name": 15, "hasGPIO": true} ] } diff --git a/components/expanders/pi4ioe5v6408/definition.json b/components/expanders/pi4ioe5v6408/definition.json index c86b7019..15e18dd4 100644 --- a/components/expanders/pi4ioe5v6408/definition.json +++ b/components/expanders/pi4ioe5v6408/definition.json @@ -6,13 +6,13 @@ "documentationURL": "https://www.mouser.com/datasheet/2/115/DIOD_S_A0004566212_1-2542464.pdf", "i2cAddresses": ["0x43"], "channels": [ - { "displayName": "P0", "channel": 0, "isGPIO": true, "direction": "INPUT_OUTPUT" }, - { "displayName": "P1", "channel": 1, "isGPIO": true, "direction": "INPUT_OUTPUT" }, - { "displayName": "P2", "channel": 2, "isGPIO": true, "direction": "INPUT_OUTPUT" }, - { "displayName": "P3", "channel": 3, "isGPIO": true, "direction": "INPUT_OUTPUT" }, - { "displayName": "P4", "channel": 4, "isGPIO": true, "direction": "INPUT_OUTPUT" }, - { "displayName": "P5", "channel": 5, "isGPIO": true, "direction": "INPUT_OUTPUT" }, - { "displayName": "P6", "channel": 6, "isGPIO": true, "direction": "INPUT_OUTPUT" }, - { "displayName": "P7", "channel": 7, "isGPIO": true, "direction": "INPUT_OUTPUT" } + {"displayName": "P0", "name": 0, "hasGPIO": true}, + {"displayName": "P1", "name": 1, "hasGPIO": true}, + {"displayName": "P2", "name": 2, "hasGPIO": true}, + {"displayName": "P3", "name": 3, "hasGPIO": true}, + {"displayName": "P4", "name": 4, "hasGPIO": true}, + {"displayName": "P5", "name": 5, "hasGPIO": true}, + {"displayName": "P6", "name": 6, "hasGPIO": true}, + {"displayName": "P7", "name": 7, "hasGPIO": true} ] } diff --git a/components/expanders/schema.json b/components/expanders/schema.json index ce9704b0..981e55b3 100644 --- a/components/expanders/schema.json +++ b/components/expanders/schema.json @@ -6,7 +6,7 @@ "expanderPin": { "type": "object", "description": "A single pin exposed by a GPIO/peripheral expander.", - "required": ["displayName", "channel"], + "required": ["displayName", "name"], "additionalProperties": false, "properties": { "displayName": { @@ -14,44 +14,44 @@ "type": "string", "pattern": "^[A-Za-z0-9_]+$" }, - "channel": { - "description": "The numeric pin/channel index passed to firmware (e.g. expander->pinMode(channel, OUTPUT)).", + "name": { + "description": "The numeric pin/name index passed to firmware (e.g. expander->pinMode(name, OUTPUT)).", "type": "integer", "minimum": 0 }, - "isGPIO": { + "hasGPIO": { "description": "If true, this pin supports digital GPIO.", "type": "boolean" }, "direction": { - "description": "The direction(s) this GPIO pin supports. Only valid when isGPIO is true.", + "description": "For pins that have a fixed direction, the pin's direction. Leave blank if it supports both.", "type": "string", - "enum": ["INPUT", "OUTPUT", "INPUT_OUTPUT"] + "enum": ["INPUT", "INPUT_PULLUP", "OUTPUT"] }, - "isPWM": { + "hasPWM": { "description": "If true, this pin supports PWM / analog output (e.g. LED constant-current drive).", "type": "boolean" }, - "isADC": { + "hasADC": { "description": "If true, this pin supports analog-to-digital conversion (analog input).", "type": "boolean" } }, "anyOf": [ - { "required": ["isGPIO"] }, - { "required": ["isPWM"] }, - { "required": ["isADC"] } + { "required": ["hasGPIO"] }, + { "required": ["hasPWM"] }, + { "required": ["hasADC"] } ], "if": { - "properties": { "isGPIO": { "const": true } }, - "required": ["isGPIO"] + "properties": { "hasGPIO": { "const": true } }, + "required": ["hasGPIO"] }, "then": { "required": ["direction"] } } }, - "required": ["displayName", "vendor", "i2cAddresses", "channels"], + "required": ["displayName", "vendor", "i2cAddresses", "pins"], "additionalProperties": false, "properties": { "displayName": { @@ -93,8 +93,8 @@ "type": "string" } }, - "channels": { - "description": "List of channels exposed by this expander.", + "pins": { + "description": "List of pins exposed by this expander.", "type": "array", "items": { "$ref": "#/$defs/expanderPin" }, "minItems": 1 diff --git a/components/expanders/seesaw_attiny1616/definition.json b/components/expanders/seesaw_attiny1616/definition.json index ff7126a0..4e2b6fd4 100644 --- a/components/expanders/seesaw_attiny1616/definition.json +++ b/components/expanders/seesaw_attiny1616/definition.json @@ -7,17 +7,17 @@ "documentationURL": "https://learn.adafruit.com/adafruit-attiny817-seesaw", "i2cAddresses": ["0x49", "0x4A", "0x4B", "0x4C"], "channels": [ - { "displayName": "0", "channel": 0, "isGPIO": true, "direction": "INPUT_OUTPUT", "isADC": true, "isPWM": true }, - { "displayName": "1", "channel": 1, "isGPIO": true, "direction": "INPUT_OUTPUT", "isADC": true, "isPWM": true }, - { "displayName": "2", "channel": 2, "isGPIO": true, "direction": "INPUT_OUTPUT", "isADC": true }, - { "displayName": "3", "channel": 3, "isGPIO": true, "direction": "INPUT_OUTPUT", "isADC": true }, - { "displayName": "4", "channel": 4, "isGPIO": true, "direction": "INPUT_OUTPUT", "isADC": true }, - { "displayName": "5", "channel": 5, "isGPIO": true, "direction": "INPUT_OUTPUT", "isADC": true }, - { "displayName": "6", "channel": 6, "isGPIO": true, "direction": "INPUT_OUTPUT"}, - { "displayName": "7", "channel": 7, "isPWM": true }, - { "displayName": "11", "channel": 11, "isGPIO": true, "direction": "INPUT_OUTPUT", "isPWM": true }, - { "displayName": "14", "channel": 14, "isGPIO": true, "direction": "INPUT_OUTPUT", "isADC": true }, - { "displayName": "15", "channel": 15, "isGPIO": true, "direction": "INPUT_OUTPUT", "isADC": true }, - { "displayName": "16", "channel": 16, "isGPIO": true, "direction": "INPUT_OUTPUT", "isADC": true, "isPWM": true } + {"displayName": "0", "name": 0, "hasGPIO": true, "hasADC": true, "hasPWM": true}, + {"displayName": "1", "name": 1, "hasGPIO": true, "hasADC": true, "hasPWM": true}, + {"displayName": "2", "name": 2, "hasGPIO": true, "hasADC": true}, + {"displayName": "3", "name": 3, "hasGPIO": true, "hasADC": true}, + {"displayName": "4", "name": 4, "hasGPIO": true, "hasADC": true}, + {"displayName": "5", "name": 5, "hasGPIO": true, "hasADC": true}, + {"displayName": "6", "name": 6, "hasGPIO": true}, + {"displayName": "7", "name": 7, "hasPWM": true}, + {"displayName": "11", "name": 11, "hasGPIO": true, "hasPWM": true}, + {"displayName": "14", "name": 14, "hasGPIO": true, "hasADC": true}, + {"displayName": "15", "name": 15, "hasGPIO": true, "hasADC": true}, + {"displayName": "16", "name": 16, "hasGPIO": true, "hasADC": true, "hasPWM": true} ] } diff --git a/components/expanders/seesaw_attiny816/definition.json b/components/expanders/seesaw_attiny816/definition.json index a4a6c8bc..bbeb453a 100644 --- a/components/expanders/seesaw_attiny816/definition.json +++ b/components/expanders/seesaw_attiny816/definition.json @@ -7,16 +7,16 @@ "documentationURL": "https://learn.adafruit.com/adafruit-attiny817-seesaw", "i2cAddresses": ["0x49", "0x4A", "0x4B", "0x4C"], "channels": [ - { "displayName": "0", "channel": 0, "isGPIO": true, "direction": "INPUT_OUTPUT", "isADC": true, "isPWM": true }, - { "displayName": "1", "channel": 1, "isGPIO": true, "direction": "INPUT_OUTPUT", "isADC": true, "isPWM": true }, - { "displayName": "2", "channel": 2, "isGPIO": true, "direction": "INPUT_OUTPUT", "isADC": true }, - { "displayName": "3", "channel": 3, "isGPIO": true, "direction": "INPUT_OUTPUT", "isADC": true }, - { "displayName": "4", "channel": 4, "isGPIO": true, "direction": "INPUT_OUTPUT", "isADC": true }, - { "displayName": "5", "channel": 5, "isGPIO": true, "direction": "INPUT_OUTPUT", "isADC": true }, - { "displayName": "7", "channel": 7, "isPWM": true }, - { "displayName": "11", "channel": 11, "isGPIO": true, "direction": "INPUT_OUTPUT", "isPWM": true }, - { "displayName": "14", "channel": 14, "isGPIO": true, "direction": "INPUT_OUTPUT", "isADC": true }, - { "displayName": "15", "channel": 15, "isGPIO": true, "direction": "INPUT_OUTPUT", "isADC": true }, - { "displayName": "16", "channel": 16, "isGPIO": true, "direction": "INPUT_OUTPUT", "isADC": true, "isPWM": true } + {"displayName": "0", "name": 0, "hasGPIO": true, "hasADC": true, "hasPWM": true}, + {"displayName": "1", "name": 1, "hasGPIO": true, "hasADC": true, "hasPWM": true}, + {"displayName": "2", "name": 2, "hasGPIO": true, "hasADC": true}, + {"displayName": "3", "name": 3, "hasGPIO": true, "hasADC": true}, + {"displayName": "4", "name": 4, "hasGPIO": true, "hasADC": true}, + {"displayName": "5", "name": 5, "hasGPIO": true, "hasADC": true}, + {"displayName": "7", "name": 7, "hasPWM": true}, + {"displayName": "11", "name": 11, "hasGPIO": true, "hasPWM": true}, + {"displayName": "14", "name": 14, "hasGPIO": true, "hasADC": true}, + {"displayName": "15", "name": 15, "hasGPIO": true, "hasADC": true}, + {"displayName": "16", "name": 16, "hasGPIO": true, "hasADC": true, "hasPWM": true} ] } diff --git a/components/expanders/seesaw_attiny817/definition.json b/components/expanders/seesaw_attiny817/definition.json index e43a1c2a..fd7d87f3 100644 --- a/components/expanders/seesaw_attiny817/definition.json +++ b/components/expanders/seesaw_attiny817/definition.json @@ -7,20 +7,20 @@ "documentationURL": "https://learn.adafruit.com/adafruit-attiny817-seesaw", "i2cAddresses": ["0x49", "0x4A", "0x4B", "0x4C"], "channels": [ - { "displayName": "0", "channel": 0, "isGPIO": true, "direction": "INPUT_OUTPUT", "isADC": true, "isPWM": true }, - { "displayName": "1", "channel": 1, "isGPIO": true, "direction": "INPUT_OUTPUT", "isADC": true, "isPWM": true }, - { "displayName": "2", "channel": 2, "isGPIO": true, "direction": "INPUT_OUTPUT", "isADC": true }, - { "displayName": "3", "channel": 3, "isGPIO": true, "direction": "INPUT_OUTPUT", "isADC": true }, - { "displayName": "5", "channel": 5, "isGPIO": true, "direction": "OUTPUT" }, - { "displayName": "6", "channel": 6, "isGPIO": true, "direction": "INPUT_OUTPUT", "isADC": true }, - { "displayName": "7", "channel": 7, "isGPIO": true, "direction": "INPUT_OUTPUT", "isADC": true }, - { "displayName": "8", "channel": 8, "isGPIO": true, "direction": "INPUT_OUTPUT" }, - { "displayName": "9", "channel": 9, "isGPIO": true, "direction": "INPUT_OUTPUT", "isPWM": true }, - { "displayName": "12", "channel": 12, "isGPIO": true, "direction": "INPUT_OUTPUT", "isPWM": true }, - { "displayName": "13", "channel": 13, "isGPIO": true, "direction": "INPUT_OUTPUT", "isPWM": true }, - { "displayName": "14", "channel": 14, "isGPIO": true, "direction": "INPUT_OUTPUT" }, - { "displayName": "18", "channel": 18, "isGPIO": true, "direction": "INPUT_OUTPUT", "isADC": true }, - { "displayName": "19", "channel": 19, "isGPIO": true, "direction": "INPUT_OUTPUT", "isADC": true }, - { "displayName": "20", "channel": 20, "isADC": true } + {"displayName": "0", "name": 0, "hasGPIO": true, "hasADC": true, "hasPWM": true}, + {"displayName": "1", "name": 1, "hasGPIO": true, "hasADC": true, "hasPWM": true}, + {"displayName": "2", "name": 2, "hasGPIO": true, "hasADC": true}, + {"displayName": "3", "name": 3, "hasGPIO": true, "hasADC": true}, + {"displayName": "5", "name": 5, "hasGPIO": true, "direction": "OUTPUT"}, + {"displayName": "6", "name": 6, "hasGPIO": true, "hasADC": true}, + {"displayName": "7", "name": 7, "hasGPIO": true, "hasADC": true}, + {"displayName": "8", "name": 8, "hasGPIO": true}, + {"displayName": "9", "name": 9, "hasGPIO": true, "hasPWM": true}, + {"displayName": "12", "name": 12, "hasGPIO": true, "hasPWM": true}, + {"displayName": "13", "name": 13, "hasGPIO": true, "hasPWM": true}, + {"displayName": "14", "name": 14, "hasGPIO": true}, + {"displayName": "18", "name": 18, "hasGPIO": true, "hasADC": true}, + {"displayName": "19", "name": 19, "hasGPIO": true, "hasADC": true}, + {"displayName": "20", "name": 20, "hasADC": true} ] } diff --git a/components/expanders/tca8418/definition.json b/components/expanders/tca8418/definition.json index 78c6ac13..6f5e54f2 100644 --- a/components/expanders/tca8418/definition.json +++ b/components/expanders/tca8418/definition.json @@ -7,23 +7,23 @@ "documentationURL": "https://cdn-learn.adafruit.com/assets/assets/000/115/118/original/tca8418.pdf?1663246975", "i2cAddresses": ["0x34"], "channels": [ - { "displayName": "C0", "channel": 8, "isGPIO": true, "direction": "INPUT_OUTPUT" }, - { "displayName": "C1", "channel": 9, "isGPIO": true, "direction": "INPUT_OUTPUT" }, - { "displayName": "C2", "channel": 10, "isGPIO": true, "direction": "INPUT_OUTPUT" }, - { "displayName": "C3", "channel": 11, "isGPIO": true, "direction": "INPUT_OUTPUT" }, - { "displayName": "C4", "channel": 12, "isGPIO": true, "direction": "INPUT_OUTPUT" }, - { "displayName": "C5", "channel": 13, "isGPIO": true, "direction": "INPUT_OUTPUT" }, - { "displayName": "C6", "channel": 14, "isGPIO": true, "direction": "INPUT_OUTPUT" }, - { "displayName": "C7", "channel": 15, "isGPIO": true, "direction": "INPUT_OUTPUT" }, - { "displayName": "C8", "channel": 16, "isGPIO": true, "direction": "INPUT_OUTPUT" }, - { "displayName": "C9", "channel": 17, "isGPIO": true, "direction": "INPUT_OUTPUT" }, - { "displayName": "R0", "channel": 0, "isGPIO": true, "direction": "INPUT_OUTPUT" }, - { "displayName": "R1", "channel": 1, "isGPIO": true, "direction": "INPUT_OUTPUT" }, - { "displayName": "R2", "channel": 2, "isGPIO": true, "direction": "INPUT_OUTPUT" }, - { "displayName": "R3", "channel": 3, "isGPIO": true, "direction": "INPUT_OUTPUT" }, - { "displayName": "R4", "channel": 4, "isGPIO": true, "direction": "INPUT_OUTPUT" }, - { "displayName": "R5", "channel": 5, "isGPIO": true, "direction": "INPUT_OUTPUT" }, - { "displayName": "R6", "channel": 6, "isGPIO": true, "direction": "INPUT_OUTPUT" }, - { "displayName": "R7", "channel": 7, "isGPIO": true, "direction": "INPUT_OUTPUT" } + {"displayName": "C0", "name": 8, "hasGPIO": true}, + {"displayName": "C1", "name": 9, "hasGPIO": true}, + {"displayName": "C2", "name": 10, "hasGPIO": true}, + {"displayName": "C3", "name": 11, "hasGPIO": true}, + {"displayName": "C4", "name": 12, "hasGPIO": true}, + {"displayName": "C5", "name": 13, "hasGPIO": true}, + {"displayName": "C6", "name": 14, "hasGPIO": true}, + {"displayName": "C7", "name": 15, "hasGPIO": true}, + {"displayName": "C8", "name": 16, "hasGPIO": true}, + {"displayName": "C9", "name": 17, "hasGPIO": true}, + {"displayName": "R0", "name": 0, "hasGPIO": true}, + {"displayName": "R1", "name": 1, "hasGPIO": true}, + {"displayName": "R2", "name": 2, "hasGPIO": true}, + {"displayName": "R3", "name": 3, "hasGPIO": true}, + {"displayName": "R4", "name": 4, "hasGPIO": true}, + {"displayName": "R5", "name": 5, "hasGPIO": true}, + {"displayName": "R6", "name": 6, "hasGPIO": true}, + {"displayName": "R7", "name": 7, "hasGPIO": true} ] } From 0faeb14952c302bf37725bc3953aa62ba52d1f84 Mon Sep 17 00:00:00 2001 From: brentru Date: Thu, 23 Apr 2026 15:44:58 -0400 Subject: [PATCH 07/15] Further work harmonizing --- components/expanders/aw9523/definition.json | 32 ++++++++-------- components/expanders/mcp23017/definition.json | 34 ++++++++--------- components/expanders/pcf8574/definition.json | 18 ++++----- components/expanders/pcf8575/definition.json | 34 ++++++++--------- components/expanders/schema.json | 14 +++++-- .../seesaw_attiny1616/definition.json | 24 ++++++------ .../seesaw_attiny816/definition.json | 22 +++++------ .../seesaw_attiny817/definition.json | 24 ++++++------ components/expanders/tca8418/definition.json | 38 +++++++++---------- 9 files changed, 124 insertions(+), 116 deletions(-) diff --git a/components/expanders/aw9523/definition.json b/components/expanders/aw9523/definition.json index 3bf51db3..b178d069 100644 --- a/components/expanders/aw9523/definition.json +++ b/components/expanders/aw9523/definition.json @@ -7,21 +7,21 @@ "documentationURL": "https://cdn-shop.adafruit.com/product-files/4886/AW9523%20English%20Datasheet.pdf", "i2cAddresses": ["0x58", "0x59", "0x5A", "0x5B"], "channels": [ - {"displayName": "P0_0", "name": 0, "hasGPIO": true, "hasPWM": true}, - {"displayName": "P0_1", "name": 1, "hasGPIO": true, "hasPWM": true}, - {"displayName": "P0_2", "name": 2, "hasGPIO": true, "hasPWM": true}, - {"displayName": "P0_3", "name": 3, "hasGPIO": true, "hasPWM": true}, - {"displayName": "P0_4", "name": 4, "hasGPIO": true, "hasPWM": true}, - {"displayName": "P0_5", "name": 5, "hasGPIO": true, "hasPWM": true}, - {"displayName": "P0_6", "name": 6, "hasGPIO": true, "hasPWM": true}, - {"displayName": "P0_7", "name": 7, "hasGPIO": true, "hasPWM": true}, - {"displayName": "P1_0", "name": 8, "hasGPIO": true, "hasPWM": true}, - {"displayName": "P1_1", "name": 9, "hasGPIO": true, "hasPWM": true}, - {"displayName": "P1_2", "name": 10, "hasGPIO": true, "hasPWM": true}, - {"displayName": "P1_3", "name": 11, "hasGPIO": true, "hasPWM": true}, - {"displayName": "P1_4", "name": 12, "hasGPIO": true, "hasPWM": true}, - {"displayName": "P1_5", "name": 13, "hasGPIO": true, "hasPWM": true}, - {"displayName": "P1_6", "name": 14, "hasGPIO": true, "hasPWM": true}, - {"displayName": "P1_7", "name": 15, "hasGPIO": true, "hasPWM": true} + {"displayName": "0", "name": 0, "hasGPIO": true, "hasPWM": true}, + {"displayName": "1", "name": 1, "hasGPIO": true, "hasPWM": true}, + {"displayName": "2", "name": 2, "hasGPIO": true, "hasPWM": true}, + {"displayName": "3", "name": 3, "hasGPIO": true, "hasPWM": true}, + {"displayName": "4", "name": 4, "hasGPIO": true, "hasPWM": true}, + {"displayName": "5", "name": 5, "hasGPIO": true, "hasPWM": true}, + {"displayName": "6", "name": 6, "hasGPIO": true, "hasPWM": true}, + {"displayName": "7", "name": 7, "hasGPIO": true, "hasPWM": true}, + {"displayName": "8", "name": 8, "hasGPIO": true, "hasPWM": true}, + {"displayName": "9", "name": 9, "hasGPIO": true, "hasPWM": true}, + {"displayName": "10", "name": 10, "hasGPIO": true, "hasPWM": true}, + {"displayName": "11", "name": 11, "hasGPIO": true, "hasPWM": true}, + {"displayName": "12", "name": 12, "hasGPIO": true, "hasPWM": true}, + {"displayName": "13", "name": 13, "hasGPIO": true, "hasPWM": true}, + {"displayName": "14", "name": 14, "hasGPIO": true, "hasPWM": true}, + {"displayName": "15", "name": 15, "hasGPIO": true, "hasPWM": true} ] } diff --git a/components/expanders/mcp23017/definition.json b/components/expanders/mcp23017/definition.json index 6c897043..60a0c441 100644 --- a/components/expanders/mcp23017/definition.json +++ b/components/expanders/mcp23017/definition.json @@ -4,24 +4,24 @@ "published": true, "vendor": "Microchip Technology", "productURL": "https://www.adafruit.com/product/5346", - "documentationURL": "https://cdn-shop.adafruit.com/datasheets/mcp23017.pdf", + "documentationURL": "https://learn.adafruit.com/adafruit-mcp23017-i2c-gpio-expander", "i2cAddresses": ["0x20", "0x21", "0x22", "0x23", "0x24", "0x25", "0x26", "0x27"], "channels": [ - {"displayName": "A0", "name": 0, "hasGPIO": true}, - {"displayName": "A1", "name": 1, "hasGPIO": true}, - {"displayName": "A2", "name": 2, "hasGPIO": true}, - {"displayName": "A3", "name": 3, "hasGPIO": true}, - {"displayName": "A4", "name": 4, "hasGPIO": true}, - {"displayName": "A5", "name": 5, "hasGPIO": true}, - {"displayName": "A6", "name": 6, "hasGPIO": true}, - {"displayName": "A7", "name": 7, "hasGPIO": true}, - {"displayName": "B0", "name": 8, "hasGPIO": true}, - {"displayName": "B1", "name": 9, "hasGPIO": true}, - {"displayName": "B2", "name": 10, "hasGPIO": true}, - {"displayName": "B3", "name": 11, "hasGPIO": true}, - {"displayName": "B4", "name": 12, "hasGPIO": true}, - {"displayName": "B5", "name": 13, "hasGPIO": true}, - {"displayName": "B6", "name": 14, "hasGPIO": true}, - {"displayName": "B7", "name": 15, "hasGPIO": true} + {"displayName": "A0", "name": 0, "hasGPIO": true, "hasPullup": true}, + {"displayName": "A1", "name": 1, "hasGPIO": true, "hasPullup": true}, + {"displayName": "A2", "name": 2, "hasGPIO": true, "hasPullup": true}, + {"displayName": "A3", "name": 3, "hasGPIO": true, "hasPullup": true}, + {"displayName": "A4", "name": 4, "hasGPIO": true, "hasPullup": true}, + {"displayName": "A5", "name": 5, "hasGPIO": true, "hasPullup": true}, + {"displayName": "A6", "name": 6, "hasGPIO": true, "hasPullup": true}, + {"displayName": "A7", "name": 7, "hasGPIO": true, "hasPullup": true}, + {"displayName": "B0", "name": 8, "hasGPIO": true, "hasPullup": true}, + {"displayName": "B1", "name": 9, "hasGPIO": true, "hasPullup": true}, + {"displayName": "B2", "name": 10, "hasGPIO": true, "hasPullup": true}, + {"displayName": "B3", "name": 11, "hasGPIO": true, "hasPullup": true}, + {"displayName": "B4", "name": 12, "hasGPIO": true, "hasPullup": true}, + {"displayName": "B5", "name": 13, "hasGPIO": true, "hasPullup": true}, + {"displayName": "B6", "name": 14, "hasGPIO": true, "hasPullup": true}, + {"displayName": "B7", "name": 15, "hasGPIO": true, "hasPullup": true} ] } diff --git a/components/expanders/pcf8574/definition.json b/components/expanders/pcf8574/definition.json index 3e0767a9..45c71c22 100644 --- a/components/expanders/pcf8574/definition.json +++ b/components/expanders/pcf8574/definition.json @@ -4,16 +4,16 @@ "published": false, "vendor": "Texas Instruments", "productURL": "https://www.adafruit.com/product/5545", - "documentationURL": "https://cdn-learn.adafruit.com/assets/assets/000/113/910/original/pcf8574.pdf?1659477228", + "documentationURL": "https://learn.adafruit.com/adafruit-pcf8574", "i2cAddresses": ["0x20", "0x21", "0x22", "0x23", "0x24", "0x25", "0x26", "0x27"], "channels": [ - {"displayName": "P0", "name": 0, "hasGPIO": true}, - {"displayName": "P1", "name": 1, "hasGPIO": true}, - {"displayName": "P2", "name": 2, "hasGPIO": true}, - {"displayName": "P3", "name": 3, "hasGPIO": true}, - {"displayName": "P4", "name": 4, "hasGPIO": true}, - {"displayName": "P5", "name": 5, "hasGPIO": true}, - {"displayName": "P6", "name": 6, "hasGPIO": true}, - {"displayName": "P7", "name": 7, "hasGPIO": true} + {"displayName": "P0", "name": 0, "hasGPIO": true, "hasPullup": true}, + {"displayName": "P1", "name": 1, "hasGPIO": true, "hasPullup": true}, + {"displayName": "P2", "name": 2, "hasGPIO": true, "hasPullup": true}, + {"displayName": "P3", "name": 3, "hasGPIO": true, "hasPullup": true}, + {"displayName": "P4", "name": 4, "hasGPIO": true, "hasPullup": true}, + {"displayName": "P5", "name": 5, "hasGPIO": true, "hasPullup": true}, + {"displayName": "P6", "name": 6, "hasGPIO": true, "hasPullup": true}, + {"displayName": "P7", "name": 7, "hasGPIO": true, "hasPullup": true} ] } diff --git a/components/expanders/pcf8575/definition.json b/components/expanders/pcf8575/definition.json index 67dbaf7a..70fc77dc 100644 --- a/components/expanders/pcf8575/definition.json +++ b/components/expanders/pcf8575/definition.json @@ -4,24 +4,24 @@ "published": false, "vendor": "Texas Instruments", "productURL": "https://www.adafruit.com/product/5611", - "documentationURL": "https://www.ti.com/lit/ds/symlink/pcf8575.pdf", + "documentationURL": "https://learn.adafruit.com/adafruit-pcf8575", "i2cAddresses": ["0x20", "0x21", "0x22", "0x23", "0x24", "0x25", "0x26", "0x27"], "channels": [ - {"displayName": "P0", "name": 0, "hasGPIO": true}, - {"displayName": "P1", "name": 1, "hasGPIO": true}, - {"displayName": "P2", "name": 2, "hasGPIO": true}, - {"displayName": "P3", "name": 3, "hasGPIO": true}, - {"displayName": "P4", "name": 4, "hasGPIO": true}, - {"displayName": "P5", "name": 5, "hasGPIO": true}, - {"displayName": "P6", "name": 6, "hasGPIO": true}, - {"displayName": "P7", "name": 7, "hasGPIO": true}, - {"displayName": "P8", "name": 8, "hasGPIO": true}, - {"displayName": "P9", "name": 9, "hasGPIO": true}, - {"displayName": "P10", "name": 10, "hasGPIO": true}, - {"displayName": "P11", "name": 11, "hasGPIO": true}, - {"displayName": "P12", "name": 12, "hasGPIO": true}, - {"displayName": "P13", "name": 13, "hasGPIO": true}, - {"displayName": "P14", "name": 14, "hasGPIO": true}, - {"displayName": "P15", "name": 15, "hasGPIO": true} + {"displayName": "P0", "name": 0, "hasGPIO": true, "hasPullup": true}, + {"displayName": "P1", "name": 1, "hasGPIO": true, "hasPullup": true}, + {"displayName": "P2", "name": 2, "hasGPIO": true, "hasPullup": true}, + {"displayName": "P3", "name": 3, "hasGPIO": true, "hasPullup": true}, + {"displayName": "P4", "name": 4, "hasGPIO": true, "hasPullup": true}, + {"displayName": "P5", "name": 5, "hasGPIO": true, "hasPullup": true}, + {"displayName": "P6", "name": 6, "hasGPIO": true, "hasPullup": true}, + {"displayName": "P7", "name": 7, "hasGPIO": true, "hasPullup": true}, + {"displayName": "P8", "name": 8, "hasGPIO": true, "hasPullup": true}, + {"displayName": "P9", "name": 9, "hasGPIO": true, "hasPullup": true}, + {"displayName": "10", "name": 10, "hasGPIO": true, "hasPullup": true}, + {"displayName": "11", "name": 11, "hasGPIO": true, "hasPullup": true}, + {"displayName": "12", "name": 12, "hasGPIO": true, "hasPullup": true}, + {"displayName": "13", "name": 13, "hasGPIO": true, "hasPullup": true}, + {"displayName": "14", "name": 14, "hasGPIO": true, "hasPullup": true}, + {"displayName": "15", "name": 15, "hasGPIO": true, "hasPullup": true} ] } diff --git a/components/expanders/schema.json b/components/expanders/schema.json index 981e55b3..7c9d0fad 100644 --- a/components/expanders/schema.json +++ b/components/expanders/schema.json @@ -12,7 +12,7 @@ "displayName": { "description": "The human-readable label for this pin, shown in the Adafruit IO UI.", "type": "string", - "pattern": "^[A-Za-z0-9_]+$" + "pattern": "^[A-Za-z0-9_][A-Za-z0-9_ \\-\\[\\]()]{2,}$" }, "name": { "description": "The numeric pin/name index passed to firmware (e.g. expander->pinMode(name, OUTPUT)).", @@ -26,7 +26,15 @@ "direction": { "description": "For pins that have a fixed direction, the pin's direction. Leave blank if it supports both.", "type": "string", - "enum": ["INPUT", "INPUT_PULLUP", "OUTPUT"] + "enum": ["INPUT", "OUTPUT"] + }, + "hasPullup": { + "description": "If true, this pin supports an internal pull-up resistor (only valid if hasGPIO is true).", + "type": "boolean" + }, + "hasPulldown": { + "description": "If true, this pin supports an internal pull-down resistor (only valid if hasGPIO is true).", + "type": "boolean" }, "hasPWM": { "description": "If true, this pin supports PWM / analog output (e.g. LED constant-current drive).", @@ -51,7 +59,7 @@ } } }, - "required": ["displayName", "vendor", "i2cAddresses", "pins"], + "required": ["displayName", "vendor", "description", "documentationURL", "productURL", "i2cAddresses", "pins"], "additionalProperties": false, "properties": { "displayName": { diff --git a/components/expanders/seesaw_attiny1616/definition.json b/components/expanders/seesaw_attiny1616/definition.json index 4e2b6fd4..a284f89d 100644 --- a/components/expanders/seesaw_attiny1616/definition.json +++ b/components/expanders/seesaw_attiny1616/definition.json @@ -7,17 +7,17 @@ "documentationURL": "https://learn.adafruit.com/adafruit-attiny817-seesaw", "i2cAddresses": ["0x49", "0x4A", "0x4B", "0x4C"], "channels": [ - {"displayName": "0", "name": 0, "hasGPIO": true, "hasADC": true, "hasPWM": true}, - {"displayName": "1", "name": 1, "hasGPIO": true, "hasADC": true, "hasPWM": true}, - {"displayName": "2", "name": 2, "hasGPIO": true, "hasADC": true}, - {"displayName": "3", "name": 3, "hasGPIO": true, "hasADC": true}, - {"displayName": "4", "name": 4, "hasGPIO": true, "hasADC": true}, - {"displayName": "5", "name": 5, "hasGPIO": true, "hasADC": true}, - {"displayName": "6", "name": 6, "hasGPIO": true}, - {"displayName": "7", "name": 7, "hasPWM": true}, - {"displayName": "11", "name": 11, "hasGPIO": true, "hasPWM": true}, - {"displayName": "14", "name": 14, "hasGPIO": true, "hasADC": true}, - {"displayName": "15", "name": 15, "hasGPIO": true, "hasADC": true}, - {"displayName": "16", "name": 16, "hasGPIO": true, "hasADC": true, "hasPWM": true} + {"displayName": "0", "name": 0, "hasGPIO": true, "hasPullup": true, "hasADC": true, "hasPWM": true}, + {"displayName": "1", "name": 1, "hasGPIO": true, "hasPullup": true, "hasADC": true, "hasPWM": true}, + {"displayName": "2", "name": 2, "hasGPIO": true, "hasPullup": true, "hasADC": true}, + {"displayName": "3", "name": 3, "hasGPIO": true, "hasPullup": true, "hasADC": true}, + {"displayName": "4", "name": 4, "hasGPIO": true, "hasPullup": true, "hasADC": true}, + {"displayName": "5", "name": 5, "hasGPIO": true, "hasPullup": true, "hasADC": true}, + {"displayName": "6", "name": 6, "hasGPIO": true, "hasPullup": true}, + {"displayName": "7", "name": 7, "hasGPIO": true, "hasPullup": true, "hasPWM": true}, + {"displayName": "11", "name": 11, "hasGPIO": true, "hasPullup": true, "hasPWM": true}, + {"displayName": "14", "name": 14, "hasGPIO": true, "hasPullup": true, "hasADC": true}, + {"displayName": "15", "name": 15, "hasGPIO": true, "hasPullup": true, "hasADC": true}, + {"displayName": "16", "name": 16, "hasGPIO": true, "hasPullup": true, "hasADC": true, "hasPWM": true} ] } diff --git a/components/expanders/seesaw_attiny816/definition.json b/components/expanders/seesaw_attiny816/definition.json index bbeb453a..faf963fd 100644 --- a/components/expanders/seesaw_attiny816/definition.json +++ b/components/expanders/seesaw_attiny816/definition.json @@ -7,16 +7,16 @@ "documentationURL": "https://learn.adafruit.com/adafruit-attiny817-seesaw", "i2cAddresses": ["0x49", "0x4A", "0x4B", "0x4C"], "channels": [ - {"displayName": "0", "name": 0, "hasGPIO": true, "hasADC": true, "hasPWM": true}, - {"displayName": "1", "name": 1, "hasGPIO": true, "hasADC": true, "hasPWM": true}, - {"displayName": "2", "name": 2, "hasGPIO": true, "hasADC": true}, - {"displayName": "3", "name": 3, "hasGPIO": true, "hasADC": true}, - {"displayName": "4", "name": 4, "hasGPIO": true, "hasADC": true}, - {"displayName": "5", "name": 5, "hasGPIO": true, "hasADC": true}, - {"displayName": "7", "name": 7, "hasPWM": true}, - {"displayName": "11", "name": 11, "hasGPIO": true, "hasPWM": true}, - {"displayName": "14", "name": 14, "hasGPIO": true, "hasADC": true}, - {"displayName": "15", "name": 15, "hasGPIO": true, "hasADC": true}, - {"displayName": "16", "name": 16, "hasGPIO": true, "hasADC": true, "hasPWM": true} + {"displayName": "0", "name": 0, "hasGPIO": true, "hasPullup": true, "hasADC": true, "hasPWM": true}, + {"displayName": "1", "name": 1, "hasGPIO": true, "hasPullup": true, "hasADC": true, "hasPWM": true}, + {"displayName": "2", "name": 2, "hasGPIO": true, "hasPullup": true, "hasADC": true}, + {"displayName": "3", "name": 3, "hasGPIO": true, "hasPullup": true, "hasADC": true}, + {"displayName": "4", "name": 4, "hasGPIO": true, "hasPullup": true, "hasADC": true}, + {"displayName": "5", "name": 5, "hasGPIO": true, "hasPullup": true, "hasADC": true}, + {"displayName": "7", "name": 7, "hasGPIO": true, "hasPullup": true, "hasPWM": true}, + {"displayName": "11", "name": 11, "hasGPIO": true, "hasPullup": true, "hasPWM": true}, + {"displayName": "14", "name": 14, "hasGPIO": true, "hasPullup": true, "hasADC": true}, + {"displayName": "15", "name": 15, "hasGPIO": true, "hasPullup": true, "hasADC": true}, + {"displayName": "16", "name": 16, "hasGPIO": true, "hasPullup": true, "hasADC": true, "hasPWM": true} ] } diff --git a/components/expanders/seesaw_attiny817/definition.json b/components/expanders/seesaw_attiny817/definition.json index fd7d87f3..cf077e54 100644 --- a/components/expanders/seesaw_attiny817/definition.json +++ b/components/expanders/seesaw_attiny817/definition.json @@ -7,18 +7,18 @@ "documentationURL": "https://learn.adafruit.com/adafruit-attiny817-seesaw", "i2cAddresses": ["0x49", "0x4A", "0x4B", "0x4C"], "channels": [ - {"displayName": "0", "name": 0, "hasGPIO": true, "hasADC": true, "hasPWM": true}, - {"displayName": "1", "name": 1, "hasGPIO": true, "hasADC": true, "hasPWM": true}, - {"displayName": "2", "name": 2, "hasGPIO": true, "hasADC": true}, - {"displayName": "3", "name": 3, "hasGPIO": true, "hasADC": true}, - {"displayName": "5", "name": 5, "hasGPIO": true, "direction": "OUTPUT"}, - {"displayName": "6", "name": 6, "hasGPIO": true, "hasADC": true}, - {"displayName": "7", "name": 7, "hasGPIO": true, "hasADC": true}, - {"displayName": "8", "name": 8, "hasGPIO": true}, - {"displayName": "9", "name": 9, "hasGPIO": true, "hasPWM": true}, - {"displayName": "12", "name": 12, "hasGPIO": true, "hasPWM": true}, - {"displayName": "13", "name": 13, "hasGPIO": true, "hasPWM": true}, - {"displayName": "14", "name": 14, "hasGPIO": true}, + {"displayName": "0", "name": 0, "hasGPIO": true, "hasPullup": true, "hasADC": true, "hasPWM": true}, + {"displayName": "1", "name": 1, "hasGPIO": true, "hasPullup": true, "hasADC": true, "hasPWM": true}, + {"displayName": "2", "name": 2, "hasGPIO": true, "hasPullup": true, "hasADC": true}, + {"displayName": "3", "name": 3, "hasGPIO": true, "hasPullup": true, "hasADC": true}, + {"displayName": "5", "name": 5, "hasGPIO": true, "hasPullup": true, "direction": "OUTPUT"}, + {"displayName": "6", "name": 6, "hasGPIO": true, "hasPullup": true, "hasADC": true}, + {"displayName": "7", "name": 7, "hasGPIO": true, "hasPullup": true, "hasADC": true}, + {"displayName": "8", "name": 8, "hasGPIO": true, "hasPullup": true}, + {"displayName": "9", "name": 9, "hasGPIO": true, "hasPullup": true, "hasPWM": true}, + {"displayName": "12", "name": 12, "hasGPIO": true, "hasPullup": true, "hasPWM": true}, + {"displayName": "13", "name": 13, "hasGPIO": true, "hasPullup": true, "hasPWM": true}, + {"displayName": "14", "name": 14, "hasGPIO": true, "hasPullup": true}, {"displayName": "18", "name": 18, "hasGPIO": true, "hasADC": true}, {"displayName": "19", "name": 19, "hasGPIO": true, "hasADC": true}, {"displayName": "20", "name": 20, "hasADC": true} diff --git a/components/expanders/tca8418/definition.json b/components/expanders/tca8418/definition.json index 6f5e54f2..d6ca0648 100644 --- a/components/expanders/tca8418/definition.json +++ b/components/expanders/tca8418/definition.json @@ -4,26 +4,26 @@ "published": false, "vendor": "Texas Instruments", "productURL": "https://www.adafruit.com/product/4918", - "documentationURL": "https://cdn-learn.adafruit.com/assets/assets/000/115/118/original/tca8418.pdf?1663246975", + "documentationURL": "https://learn.adafruit.com/adafruit-tca8418-keypad-matrix-and-gpio-expander-breakout", "i2cAddresses": ["0x34"], "channels": [ - {"displayName": "C0", "name": 8, "hasGPIO": true}, - {"displayName": "C1", "name": 9, "hasGPIO": true}, - {"displayName": "C2", "name": 10, "hasGPIO": true}, - {"displayName": "C3", "name": 11, "hasGPIO": true}, - {"displayName": "C4", "name": 12, "hasGPIO": true}, - {"displayName": "C5", "name": 13, "hasGPIO": true}, - {"displayName": "C6", "name": 14, "hasGPIO": true}, - {"displayName": "C7", "name": 15, "hasGPIO": true}, - {"displayName": "C8", "name": 16, "hasGPIO": true}, - {"displayName": "C9", "name": 17, "hasGPIO": true}, - {"displayName": "R0", "name": 0, "hasGPIO": true}, - {"displayName": "R1", "name": 1, "hasGPIO": true}, - {"displayName": "R2", "name": 2, "hasGPIO": true}, - {"displayName": "R3", "name": 3, "hasGPIO": true}, - {"displayName": "R4", "name": 4, "hasGPIO": true}, - {"displayName": "R5", "name": 5, "hasGPIO": true}, - {"displayName": "R6", "name": 6, "hasGPIO": true}, - {"displayName": "R7", "name": 7, "hasGPIO": true} + {"displayName": "C0", "name": 8, "hasGPIO": true, "hasPullup": true}, + {"displayName": "C1", "name": 9, "hasGPIO": true, "hasPullup": true}, + {"displayName": "C2", "name": 10, "hasGPIO": true, "hasPullup": true}, + {"displayName": "C3", "name": 11, "hasGPIO": true, "hasPullup": true}, + {"displayName": "C4", "name": 12, "hasGPIO": true, "hasPullup": true}, + {"displayName": "C5", "name": 13, "hasGPIO": true, "hasPullup": true}, + {"displayName": "C6", "name": 14, "hasGPIO": true, "hasPullup": true}, + {"displayName": "C7", "name": 15, "hasGPIO": true, "hasPullup": true}, + {"displayName": "C8", "name": 16, "hasGPIO": true, "hasPullup": true}, + {"displayName": "C9", "name": 17, "hasGPIO": true, "hasPullup": true}, + {"displayName": "R0", "name": 0, "hasGPIO": true, "hasPullup": true}, + {"displayName": "R1", "name": 1, "hasGPIO": true, "hasPullup": true}, + {"displayName": "R2", "name": 2, "hasGPIO": true, "hasPullup": true}, + {"displayName": "R3", "name": 3, "hasGPIO": true, "hasPullup": true}, + {"displayName": "R4", "name": 4, "hasGPIO": true, "hasPullup": true}, + {"displayName": "R5", "name": 5, "hasGPIO": true, "hasPullup": true}, + {"displayName": "R6", "name": 6, "hasGPIO": true, "hasPullup": true}, + {"displayName": "R7", "name": 7, "hasGPIO": true, "hasPullup": true} ] } From 939e6d9d3ac57b62655cfd74b1cca6d2fae10fe5 Mon Sep 17 00:00:00 2001 From: brentru Date: Thu, 23 Apr 2026 15:47:59 -0400 Subject: [PATCH 08/15] change: channels->pins --- components/expanders/ads7128/definition.json | 2 +- components/expanders/aw9523/definition.json | 2 +- components/expanders/mcp23017/definition.json | 2 +- components/expanders/pcf8574/definition.json | 2 +- components/expanders/pcf8575/definition.json | 2 +- components/expanders/pi4ioe5v6408/definition.json | 2 +- components/expanders/seesaw_attiny1616/definition.json | 2 +- components/expanders/seesaw_attiny816/definition.json | 2 +- components/expanders/seesaw_attiny817/definition.json | 2 +- components/expanders/tca8418/definition.json | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/components/expanders/ads7128/definition.json b/components/expanders/ads7128/definition.json index 1c2b3781..3585b817 100644 --- a/components/expanders/ads7128/definition.json +++ b/components/expanders/ads7128/definition.json @@ -5,7 +5,7 @@ "vendor": "Texas Instruments", "documentationURL": "https://www.ti.com/lit/gpn/ADS7128", "i2cAddresses": ["0x10", "0x11", "0x12", "0x13", "0x14", "0x15", "0x16", "0x17"], - "channels": [ + "pins": [ {"displayName": "AIN0", "name": 0, "hasGPIO": true, "hasADC": true}, {"displayName": "AIN1", "name": 1, "hasGPIO": true, "hasADC": true}, {"displayName": "AIN2", "name": 2, "hasGPIO": true, "hasADC": true}, diff --git a/components/expanders/aw9523/definition.json b/components/expanders/aw9523/definition.json index b178d069..c5fe90f6 100644 --- a/components/expanders/aw9523/definition.json +++ b/components/expanders/aw9523/definition.json @@ -6,7 +6,7 @@ "productURL": "https://www.adafruit.com/product/4886", "documentationURL": "https://cdn-shop.adafruit.com/product-files/4886/AW9523%20English%20Datasheet.pdf", "i2cAddresses": ["0x58", "0x59", "0x5A", "0x5B"], - "channels": [ + "pins": [ {"displayName": "0", "name": 0, "hasGPIO": true, "hasPWM": true}, {"displayName": "1", "name": 1, "hasGPIO": true, "hasPWM": true}, {"displayName": "2", "name": 2, "hasGPIO": true, "hasPWM": true}, diff --git a/components/expanders/mcp23017/definition.json b/components/expanders/mcp23017/definition.json index 60a0c441..8c8ce576 100644 --- a/components/expanders/mcp23017/definition.json +++ b/components/expanders/mcp23017/definition.json @@ -6,7 +6,7 @@ "productURL": "https://www.adafruit.com/product/5346", "documentationURL": "https://learn.adafruit.com/adafruit-mcp23017-i2c-gpio-expander", "i2cAddresses": ["0x20", "0x21", "0x22", "0x23", "0x24", "0x25", "0x26", "0x27"], - "channels": [ + "pins": [ {"displayName": "A0", "name": 0, "hasGPIO": true, "hasPullup": true}, {"displayName": "A1", "name": 1, "hasGPIO": true, "hasPullup": true}, {"displayName": "A2", "name": 2, "hasGPIO": true, "hasPullup": true}, diff --git a/components/expanders/pcf8574/definition.json b/components/expanders/pcf8574/definition.json index 45c71c22..ab838f8b 100644 --- a/components/expanders/pcf8574/definition.json +++ b/components/expanders/pcf8574/definition.json @@ -6,7 +6,7 @@ "productURL": "https://www.adafruit.com/product/5545", "documentationURL": "https://learn.adafruit.com/adafruit-pcf8574", "i2cAddresses": ["0x20", "0x21", "0x22", "0x23", "0x24", "0x25", "0x26", "0x27"], - "channels": [ + "pins": [ {"displayName": "P0", "name": 0, "hasGPIO": true, "hasPullup": true}, {"displayName": "P1", "name": 1, "hasGPIO": true, "hasPullup": true}, {"displayName": "P2", "name": 2, "hasGPIO": true, "hasPullup": true}, diff --git a/components/expanders/pcf8575/definition.json b/components/expanders/pcf8575/definition.json index 70fc77dc..d5bb3b35 100644 --- a/components/expanders/pcf8575/definition.json +++ b/components/expanders/pcf8575/definition.json @@ -6,7 +6,7 @@ "productURL": "https://www.adafruit.com/product/5611", "documentationURL": "https://learn.adafruit.com/adafruit-pcf8575", "i2cAddresses": ["0x20", "0x21", "0x22", "0x23", "0x24", "0x25", "0x26", "0x27"], - "channels": [ + "pins": [ {"displayName": "P0", "name": 0, "hasGPIO": true, "hasPullup": true}, {"displayName": "P1", "name": 1, "hasGPIO": true, "hasPullup": true}, {"displayName": "P2", "name": 2, "hasGPIO": true, "hasPullup": true}, diff --git a/components/expanders/pi4ioe5v6408/definition.json b/components/expanders/pi4ioe5v6408/definition.json index 15e18dd4..b636495c 100644 --- a/components/expanders/pi4ioe5v6408/definition.json +++ b/components/expanders/pi4ioe5v6408/definition.json @@ -5,7 +5,7 @@ "vendor": "Diodes Incorporated", "documentationURL": "https://www.mouser.com/datasheet/2/115/DIOD_S_A0004566212_1-2542464.pdf", "i2cAddresses": ["0x43"], - "channels": [ + "pins": [ {"displayName": "P0", "name": 0, "hasGPIO": true}, {"displayName": "P1", "name": 1, "hasGPIO": true}, {"displayName": "P2", "name": 2, "hasGPIO": true}, diff --git a/components/expanders/seesaw_attiny1616/definition.json b/components/expanders/seesaw_attiny1616/definition.json index a284f89d..64ba5c12 100644 --- a/components/expanders/seesaw_attiny1616/definition.json +++ b/components/expanders/seesaw_attiny1616/definition.json @@ -6,7 +6,7 @@ "productURL": "https://www.adafruit.com/product/5690", "documentationURL": "https://learn.adafruit.com/adafruit-attiny817-seesaw", "i2cAddresses": ["0x49", "0x4A", "0x4B", "0x4C"], - "channels": [ + "pins": [ {"displayName": "0", "name": 0, "hasGPIO": true, "hasPullup": true, "hasADC": true, "hasPWM": true}, {"displayName": "1", "name": 1, "hasGPIO": true, "hasPullup": true, "hasADC": true, "hasPWM": true}, {"displayName": "2", "name": 2, "hasGPIO": true, "hasPullup": true, "hasADC": true}, diff --git a/components/expanders/seesaw_attiny816/definition.json b/components/expanders/seesaw_attiny816/definition.json index faf963fd..89c73de3 100644 --- a/components/expanders/seesaw_attiny816/definition.json +++ b/components/expanders/seesaw_attiny816/definition.json @@ -6,7 +6,7 @@ "productURL": "https://www.adafruit.com/product/5681", "documentationURL": "https://learn.adafruit.com/adafruit-attiny817-seesaw", "i2cAddresses": ["0x49", "0x4A", "0x4B", "0x4C"], - "channels": [ + "pins": [ {"displayName": "0", "name": 0, "hasGPIO": true, "hasPullup": true, "hasADC": true, "hasPWM": true}, {"displayName": "1", "name": 1, "hasGPIO": true, "hasPullup": true, "hasADC": true, "hasPWM": true}, {"displayName": "2", "name": 2, "hasGPIO": true, "hasPullup": true, "hasADC": true}, diff --git a/components/expanders/seesaw_attiny817/definition.json b/components/expanders/seesaw_attiny817/definition.json index cf077e54..0e55e829 100644 --- a/components/expanders/seesaw_attiny817/definition.json +++ b/components/expanders/seesaw_attiny817/definition.json @@ -6,7 +6,7 @@ "productURL": "https://www.adafruit.com/product/5233", "documentationURL": "https://learn.adafruit.com/adafruit-attiny817-seesaw", "i2cAddresses": ["0x49", "0x4A", "0x4B", "0x4C"], - "channels": [ + "pins": [ {"displayName": "0", "name": 0, "hasGPIO": true, "hasPullup": true, "hasADC": true, "hasPWM": true}, {"displayName": "1", "name": 1, "hasGPIO": true, "hasPullup": true, "hasADC": true, "hasPWM": true}, {"displayName": "2", "name": 2, "hasGPIO": true, "hasPullup": true, "hasADC": true}, diff --git a/components/expanders/tca8418/definition.json b/components/expanders/tca8418/definition.json index d6ca0648..104b9e40 100644 --- a/components/expanders/tca8418/definition.json +++ b/components/expanders/tca8418/definition.json @@ -6,7 +6,7 @@ "productURL": "https://www.adafruit.com/product/4918", "documentationURL": "https://learn.adafruit.com/adafruit-tca8418-keypad-matrix-and-gpio-expander-breakout", "i2cAddresses": ["0x34"], - "channels": [ + "pins": [ {"displayName": "C0", "name": 8, "hasGPIO": true, "hasPullup": true}, {"displayName": "C1", "name": 9, "hasGPIO": true, "hasPullup": true}, {"displayName": "C2", "name": 10, "hasGPIO": true, "hasPullup": true}, From 0aedd17fa47c5abf5ac854690076e7834880d08b Mon Sep 17 00:00:00 2001 From: brentru Date: Thu, 23 Apr 2026 15:50:03 -0400 Subject: [PATCH 09/15] Direction isnt req'd for I&Os --- components/expanders/schema.json | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/components/expanders/schema.json b/components/expanders/schema.json index 7c9d0fad..f4c10ba0 100644 --- a/components/expanders/schema.json +++ b/components/expanders/schema.json @@ -49,14 +49,7 @@ { "required": ["hasGPIO"] }, { "required": ["hasPWM"] }, { "required": ["hasADC"] } - ], - "if": { - "properties": { "hasGPIO": { "const": true } }, - "required": ["hasGPIO"] - }, - "then": { - "required": ["direction"] - } + ] } }, "required": ["displayName", "vendor", "description", "documentationURL", "productURL", "i2cAddresses", "pins"], From 4536fa196853a19640e04c1a3325e7625d8f6df5 Mon Sep 17 00:00:00 2001 From: brentru Date: Thu, 23 Apr 2026 15:53:07 -0400 Subject: [PATCH 10/15] loosen pattern --- components/expanders/schema.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/expanders/schema.json b/components/expanders/schema.json index f4c10ba0..2a1ea757 100644 --- a/components/expanders/schema.json +++ b/components/expanders/schema.json @@ -12,7 +12,7 @@ "displayName": { "description": "The human-readable label for this pin, shown in the Adafruit IO UI.", "type": "string", - "pattern": "^[A-Za-z0-9_][A-Za-z0-9_ \\-\\[\\]()]{2,}$" + "pattern": "^[A-Za-z0-9_][A-Za-z0-9_ \\-\\[\\]()]*$" }, "name": { "description": "The numeric pin/name index passed to firmware (e.g. expander->pinMode(name, OUTPUT)).", From b8ca2c3afad2a002f4551478568100641389596c Mon Sep 17 00:00:00 2001 From: brentru Date: Thu, 23 Apr 2026 16:04:54 -0400 Subject: [PATCH 11/15] Not going to start with this wihtout hardware --- .../expanders/pi4ioe5v6408/definition.json | 18 ------------------ 1 file changed, 18 deletions(-) delete mode 100644 components/expanders/pi4ioe5v6408/definition.json diff --git a/components/expanders/pi4ioe5v6408/definition.json b/components/expanders/pi4ioe5v6408/definition.json deleted file mode 100644 index b636495c..00000000 --- a/components/expanders/pi4ioe5v6408/definition.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "displayName": "PI4IOE5V6408", - "description": "8-pin GPIO expander.", - "published": false, - "vendor": "Diodes Incorporated", - "documentationURL": "https://www.mouser.com/datasheet/2/115/DIOD_S_A0004566212_1-2542464.pdf", - "i2cAddresses": ["0x43"], - "pins": [ - {"displayName": "P0", "name": 0, "hasGPIO": true}, - {"displayName": "P1", "name": 1, "hasGPIO": true}, - {"displayName": "P2", "name": 2, "hasGPIO": true}, - {"displayName": "P3", "name": 3, "hasGPIO": true}, - {"displayName": "P4", "name": 4, "hasGPIO": true}, - {"displayName": "P5", "name": 5, "hasGPIO": true}, - {"displayName": "P6", "name": 6, "hasGPIO": true}, - {"displayName": "P7", "name": 7, "hasGPIO": true} - ] -} From 79198e402b1a5e5abf1522d64eba39648e01dabf Mon Sep 17 00:00:00 2001 From: brentru Date: Thu, 23 Apr 2026 16:07:10 -0400 Subject: [PATCH 12/15] https://www.ti.com/product/ADS7128 --- components/expanders/ads7128/definition.json | 1 + 1 file changed, 1 insertion(+) diff --git a/components/expanders/ads7128/definition.json b/components/expanders/ads7128/definition.json index 3585b817..e87050b6 100644 --- a/components/expanders/ads7128/definition.json +++ b/components/expanders/ads7128/definition.json @@ -3,6 +3,7 @@ "description": "8-name GPIO expander with 12-bit ADC.", "published": false, "vendor": "Texas Instruments", + "productURL": "https://www.ti.com/product/ADS7128", "documentationURL": "https://www.ti.com/lit/gpn/ADS7128", "i2cAddresses": ["0x10", "0x11", "0x12", "0x13", "0x14", "0x15", "0x16", "0x17"], "pins": [ From 70ecc4a8b36051b95d7702265f8269afa0835995 Mon Sep 17 00:00:00 2001 From: brentru Date: Fri, 24 Apr 2026 10:07:54 -0400 Subject: [PATCH 13/15] Change integer type for name --- components/expanders/ads7128/definition.json | 16 ++++----- components/expanders/aw9523/definition.json | 32 ++++++++--------- components/expanders/mcp23017/definition.json | 32 ++++++++--------- components/expanders/pcf8574/definition.json | 16 ++++----- components/expanders/pcf8575/definition.json | 32 ++++++++--------- components/expanders/schema.json | 6 ++-- .../seesaw_attiny1616/definition.json | 24 ++++++------- .../seesaw_attiny816/definition.json | 22 ++++++------ .../seesaw_attiny817/definition.json | 30 ++++++++-------- components/expanders/tca8418/definition.json | 36 +++++++++---------- 10 files changed, 123 insertions(+), 123 deletions(-) diff --git a/components/expanders/ads7128/definition.json b/components/expanders/ads7128/definition.json index e87050b6..dc6af39b 100644 --- a/components/expanders/ads7128/definition.json +++ b/components/expanders/ads7128/definition.json @@ -7,13 +7,13 @@ "documentationURL": "https://www.ti.com/lit/gpn/ADS7128", "i2cAddresses": ["0x10", "0x11", "0x12", "0x13", "0x14", "0x15", "0x16", "0x17"], "pins": [ - {"displayName": "AIN0", "name": 0, "hasGPIO": true, "hasADC": true}, - {"displayName": "AIN1", "name": 1, "hasGPIO": true, "hasADC": true}, - {"displayName": "AIN2", "name": 2, "hasGPIO": true, "hasADC": true}, - {"displayName": "AIN3", "name": 3, "hasGPIO": true, "hasADC": true}, - {"displayName": "AIN4", "name": 4, "hasGPIO": true, "hasADC": true}, - {"displayName": "AIN5", "name": 5, "hasGPIO": true, "hasADC": true}, - {"displayName": "AIN6", "name": 6, "hasGPIO": true, "hasADC": true}, - {"displayName": "AIN7", "name": 7, "hasGPIO": true, "hasADC": true} + {"displayName": "AIN0", "name": "0", "hasGPIO": true, "hasADC": true}, + {"displayName": "AIN1", "name": "1", "hasGPIO": true, "hasADC": true}, + {"displayName": "AIN2", "name": "2", "hasGPIO": true, "hasADC": true}, + {"displayName": "AIN3", "name": "3", "hasGPIO": true, "hasADC": true}, + {"displayName": "AIN4", "name": "4", "hasGPIO": true, "hasADC": true}, + {"displayName": "AIN5", "name": "5", "hasGPIO": true, "hasADC": true}, + {"displayName": "AIN6", "name": "6", "hasGPIO": true, "hasADC": true}, + {"displayName": "AIN7", "name": "7", "hasGPIO": true, "hasADC": true} ] } diff --git a/components/expanders/aw9523/definition.json b/components/expanders/aw9523/definition.json index c5fe90f6..b399c60e 100644 --- a/components/expanders/aw9523/definition.json +++ b/components/expanders/aw9523/definition.json @@ -7,21 +7,21 @@ "documentationURL": "https://cdn-shop.adafruit.com/product-files/4886/AW9523%20English%20Datasheet.pdf", "i2cAddresses": ["0x58", "0x59", "0x5A", "0x5B"], "pins": [ - {"displayName": "0", "name": 0, "hasGPIO": true, "hasPWM": true}, - {"displayName": "1", "name": 1, "hasGPIO": true, "hasPWM": true}, - {"displayName": "2", "name": 2, "hasGPIO": true, "hasPWM": true}, - {"displayName": "3", "name": 3, "hasGPIO": true, "hasPWM": true}, - {"displayName": "4", "name": 4, "hasGPIO": true, "hasPWM": true}, - {"displayName": "5", "name": 5, "hasGPIO": true, "hasPWM": true}, - {"displayName": "6", "name": 6, "hasGPIO": true, "hasPWM": true}, - {"displayName": "7", "name": 7, "hasGPIO": true, "hasPWM": true}, - {"displayName": "8", "name": 8, "hasGPIO": true, "hasPWM": true}, - {"displayName": "9", "name": 9, "hasGPIO": true, "hasPWM": true}, - {"displayName": "10", "name": 10, "hasGPIO": true, "hasPWM": true}, - {"displayName": "11", "name": 11, "hasGPIO": true, "hasPWM": true}, - {"displayName": "12", "name": 12, "hasGPIO": true, "hasPWM": true}, - {"displayName": "13", "name": 13, "hasGPIO": true, "hasPWM": true}, - {"displayName": "14", "name": 14, "hasGPIO": true, "hasPWM": true}, - {"displayName": "15", "name": 15, "hasGPIO": true, "hasPWM": true} + {"displayName": "0", "name": "0", "hasGPIO": true, "hasPWM": true}, + {"displayName": "1", "name": "1", "hasGPIO": true, "hasPWM": true}, + {"displayName": "2", "name": "2", "hasGPIO": true, "hasPWM": true}, + {"displayName": "3", "name": "3", "hasGPIO": true, "hasPWM": true}, + {"displayName": "4", "name": "4", "hasGPIO": true, "hasPWM": true}, + {"displayName": "5", "name": "5", "hasGPIO": true, "hasPWM": true}, + {"displayName": "6", "name": "6", "hasGPIO": true, "hasPWM": true}, + {"displayName": "7", "name": "7", "hasGPIO": true, "hasPWM": true}, + {"displayName": "8", "name": "8", "hasGPIO": true, "hasPWM": true}, + {"displayName": "9", "name": "9", "hasGPIO": true, "hasPWM": true}, + {"displayName": "10", "name": "10", "hasGPIO": true, "hasPWM": true}, + {"displayName": "11", "name": "11", "hasGPIO": true, "hasPWM": true}, + {"displayName": "12", "name": "12", "hasGPIO": true, "hasPWM": true}, + {"displayName": "13", "name": "13", "hasGPIO": true, "hasPWM": true}, + {"displayName": "14", "name": "14", "hasGPIO": true, "hasPWM": true}, + {"displayName": "15", "name": "15", "hasGPIO": true, "hasPWM": true} ] } diff --git a/components/expanders/mcp23017/definition.json b/components/expanders/mcp23017/definition.json index 8c8ce576..e4ba8ad6 100644 --- a/components/expanders/mcp23017/definition.json +++ b/components/expanders/mcp23017/definition.json @@ -7,21 +7,21 @@ "documentationURL": "https://learn.adafruit.com/adafruit-mcp23017-i2c-gpio-expander", "i2cAddresses": ["0x20", "0x21", "0x22", "0x23", "0x24", "0x25", "0x26", "0x27"], "pins": [ - {"displayName": "A0", "name": 0, "hasGPIO": true, "hasPullup": true}, - {"displayName": "A1", "name": 1, "hasGPIO": true, "hasPullup": true}, - {"displayName": "A2", "name": 2, "hasGPIO": true, "hasPullup": true}, - {"displayName": "A3", "name": 3, "hasGPIO": true, "hasPullup": true}, - {"displayName": "A4", "name": 4, "hasGPIO": true, "hasPullup": true}, - {"displayName": "A5", "name": 5, "hasGPIO": true, "hasPullup": true}, - {"displayName": "A6", "name": 6, "hasGPIO": true, "hasPullup": true}, - {"displayName": "A7", "name": 7, "hasGPIO": true, "hasPullup": true}, - {"displayName": "B0", "name": 8, "hasGPIO": true, "hasPullup": true}, - {"displayName": "B1", "name": 9, "hasGPIO": true, "hasPullup": true}, - {"displayName": "B2", "name": 10, "hasGPIO": true, "hasPullup": true}, - {"displayName": "B3", "name": 11, "hasGPIO": true, "hasPullup": true}, - {"displayName": "B4", "name": 12, "hasGPIO": true, "hasPullup": true}, - {"displayName": "B5", "name": 13, "hasGPIO": true, "hasPullup": true}, - {"displayName": "B6", "name": 14, "hasGPIO": true, "hasPullup": true}, - {"displayName": "B7", "name": 15, "hasGPIO": true, "hasPullup": true} + {"displayName": "A0", "name": "0", "hasGPIO": true, "hasPullup": true}, + {"displayName": "A1", "name": "1", "hasGPIO": true, "hasPullup": true}, + {"displayName": "A2", "name": "2", "hasGPIO": true, "hasPullup": true}, + {"displayName": "A3", "name": "3", "hasGPIO": true, "hasPullup": true}, + {"displayName": "A4", "name": "4", "hasGPIO": true, "hasPullup": true}, + {"displayName": "A5", "name": "5", "hasGPIO": true, "hasPullup": true}, + {"displayName": "A6", "name": "6", "hasGPIO": true, "hasPullup": true}, + {"displayName": "A7", "name": "7", "hasGPIO": true, "hasPullup": true}, + {"displayName": "B0", "name": "8", "hasGPIO": true, "hasPullup": true}, + {"displayName": "B1", "name": "9", "hasGPIO": true, "hasPullup": true}, + {"displayName": "B2", "name": "10", "hasGPIO": true, "hasPullup": true}, + {"displayName": "B3", "name": "11", "hasGPIO": true, "hasPullup": true}, + {"displayName": "B4", "name": "12", "hasGPIO": true, "hasPullup": true}, + {"displayName": "B5", "name": "13", "hasGPIO": true, "hasPullup": true}, + {"displayName": "B6", "name": "14", "hasGPIO": true, "hasPullup": true}, + {"displayName": "B7", "name": "15", "hasGPIO": true, "hasPullup": true} ] } diff --git a/components/expanders/pcf8574/definition.json b/components/expanders/pcf8574/definition.json index ab838f8b..2249e812 100644 --- a/components/expanders/pcf8574/definition.json +++ b/components/expanders/pcf8574/definition.json @@ -7,13 +7,13 @@ "documentationURL": "https://learn.adafruit.com/adafruit-pcf8574", "i2cAddresses": ["0x20", "0x21", "0x22", "0x23", "0x24", "0x25", "0x26", "0x27"], "pins": [ - {"displayName": "P0", "name": 0, "hasGPIO": true, "hasPullup": true}, - {"displayName": "P1", "name": 1, "hasGPIO": true, "hasPullup": true}, - {"displayName": "P2", "name": 2, "hasGPIO": true, "hasPullup": true}, - {"displayName": "P3", "name": 3, "hasGPIO": true, "hasPullup": true}, - {"displayName": "P4", "name": 4, "hasGPIO": true, "hasPullup": true}, - {"displayName": "P5", "name": 5, "hasGPIO": true, "hasPullup": true}, - {"displayName": "P6", "name": 6, "hasGPIO": true, "hasPullup": true}, - {"displayName": "P7", "name": 7, "hasGPIO": true, "hasPullup": true} + {"displayName": "P0", "name": "0", "hasGPIO": true, "hasPullup": true}, + {"displayName": "P1", "name": "1", "hasGPIO": true, "hasPullup": true}, + {"displayName": "P2", "name": "2", "hasGPIO": true, "hasPullup": true}, + {"displayName": "P3", "name": "3", "hasGPIO": true, "hasPullup": true}, + {"displayName": "P4", "name": "4", "hasGPIO": true, "hasPullup": true}, + {"displayName": "P5", "name": "5", "hasGPIO": true, "hasPullup": true}, + {"displayName": "P6", "name": "6", "hasGPIO": true, "hasPullup": true}, + {"displayName": "P7", "name": "7", "hasGPIO": true, "hasPullup": true} ] } diff --git a/components/expanders/pcf8575/definition.json b/components/expanders/pcf8575/definition.json index d5bb3b35..144a60d3 100644 --- a/components/expanders/pcf8575/definition.json +++ b/components/expanders/pcf8575/definition.json @@ -7,21 +7,21 @@ "documentationURL": "https://learn.adafruit.com/adafruit-pcf8575", "i2cAddresses": ["0x20", "0x21", "0x22", "0x23", "0x24", "0x25", "0x26", "0x27"], "pins": [ - {"displayName": "P0", "name": 0, "hasGPIO": true, "hasPullup": true}, - {"displayName": "P1", "name": 1, "hasGPIO": true, "hasPullup": true}, - {"displayName": "P2", "name": 2, "hasGPIO": true, "hasPullup": true}, - {"displayName": "P3", "name": 3, "hasGPIO": true, "hasPullup": true}, - {"displayName": "P4", "name": 4, "hasGPIO": true, "hasPullup": true}, - {"displayName": "P5", "name": 5, "hasGPIO": true, "hasPullup": true}, - {"displayName": "P6", "name": 6, "hasGPIO": true, "hasPullup": true}, - {"displayName": "P7", "name": 7, "hasGPIO": true, "hasPullup": true}, - {"displayName": "P8", "name": 8, "hasGPIO": true, "hasPullup": true}, - {"displayName": "P9", "name": 9, "hasGPIO": true, "hasPullup": true}, - {"displayName": "10", "name": 10, "hasGPIO": true, "hasPullup": true}, - {"displayName": "11", "name": 11, "hasGPIO": true, "hasPullup": true}, - {"displayName": "12", "name": 12, "hasGPIO": true, "hasPullup": true}, - {"displayName": "13", "name": 13, "hasGPIO": true, "hasPullup": true}, - {"displayName": "14", "name": 14, "hasGPIO": true, "hasPullup": true}, - {"displayName": "15", "name": 15, "hasGPIO": true, "hasPullup": true} + {"displayName": "P0", "name": "0", "hasGPIO": true, "hasPullup": true}, + {"displayName": "P1", "name": "1", "hasGPIO": true, "hasPullup": true}, + {"displayName": "P2", "name": "2", "hasGPIO": true, "hasPullup": true}, + {"displayName": "P3", "name": "3", "hasGPIO": true, "hasPullup": true}, + {"displayName": "P4", "name": "4", "hasGPIO": true, "hasPullup": true}, + {"displayName": "P5", "name": "5", "hasGPIO": true, "hasPullup": true}, + {"displayName": "P6", "name": "6", "hasGPIO": true, "hasPullup": true}, + {"displayName": "P7", "name": "7", "hasGPIO": true, "hasPullup": true}, + {"displayName": "P8", "name": "8", "hasGPIO": true, "hasPullup": true}, + {"displayName": "P9", "name": "9", "hasGPIO": true, "hasPullup": true}, + {"displayName": "10", "name": "10", "hasGPIO": true, "hasPullup": true}, + {"displayName": "11", "name": "11", "hasGPIO": true, "hasPullup": true}, + {"displayName": "12", "name": "12", "hasGPIO": true, "hasPullup": true}, + {"displayName": "13", "name": "13", "hasGPIO": true, "hasPullup": true}, + {"displayName": "14", "name": "14", "hasGPIO": true, "hasPullup": true}, + {"displayName": "15", "name": "15", "hasGPIO": true, "hasPullup": true} ] } diff --git a/components/expanders/schema.json b/components/expanders/schema.json index 2a1ea757..9b878b43 100644 --- a/components/expanders/schema.json +++ b/components/expanders/schema.json @@ -15,9 +15,9 @@ "pattern": "^[A-Za-z0-9_][A-Za-z0-9_ \\-\\[\\]()]*$" }, "name": { - "description": "The numeric pin/name index passed to firmware (e.g. expander->pinMode(name, OUTPUT)).", - "type": "integer", - "minimum": 0 + "description": "The pin identifier passed to firmware (e.g. expander->pinMode(name, OUTPUT)).", + "type": "string", + "pattern": "^[A-Za-z0-9_]+$" }, "hasGPIO": { "description": "If true, this pin supports digital GPIO.", diff --git a/components/expanders/seesaw_attiny1616/definition.json b/components/expanders/seesaw_attiny1616/definition.json index 64ba5c12..8cb2b3fc 100644 --- a/components/expanders/seesaw_attiny1616/definition.json +++ b/components/expanders/seesaw_attiny1616/definition.json @@ -7,17 +7,17 @@ "documentationURL": "https://learn.adafruit.com/adafruit-attiny817-seesaw", "i2cAddresses": ["0x49", "0x4A", "0x4B", "0x4C"], "pins": [ - {"displayName": "0", "name": 0, "hasGPIO": true, "hasPullup": true, "hasADC": true, "hasPWM": true}, - {"displayName": "1", "name": 1, "hasGPIO": true, "hasPullup": true, "hasADC": true, "hasPWM": true}, - {"displayName": "2", "name": 2, "hasGPIO": true, "hasPullup": true, "hasADC": true}, - {"displayName": "3", "name": 3, "hasGPIO": true, "hasPullup": true, "hasADC": true}, - {"displayName": "4", "name": 4, "hasGPIO": true, "hasPullup": true, "hasADC": true}, - {"displayName": "5", "name": 5, "hasGPIO": true, "hasPullup": true, "hasADC": true}, - {"displayName": "6", "name": 6, "hasGPIO": true, "hasPullup": true}, - {"displayName": "7", "name": 7, "hasGPIO": true, "hasPullup": true, "hasPWM": true}, - {"displayName": "11", "name": 11, "hasGPIO": true, "hasPullup": true, "hasPWM": true}, - {"displayName": "14", "name": 14, "hasGPIO": true, "hasPullup": true, "hasADC": true}, - {"displayName": "15", "name": 15, "hasGPIO": true, "hasPullup": true, "hasADC": true}, - {"displayName": "16", "name": 16, "hasGPIO": true, "hasPullup": true, "hasADC": true, "hasPWM": true} + {"displayName": "0", "name": "0", "hasGPIO": true, "hasPullup": true, "hasADC": true, "hasPWM": true}, + {"displayName": "1", "name": "1", "hasGPIO": true, "hasPullup": true, "hasADC": true, "hasPWM": true}, + {"displayName": "2", "name": "2", "hasGPIO": true, "hasPullup": true, "hasADC": true}, + {"displayName": "3", "name": "3", "hasGPIO": true, "hasPullup": true, "hasADC": true}, + {"displayName": "4", "name": "4", "hasGPIO": true, "hasPullup": true, "hasADC": true}, + {"displayName": "5", "name": "5", "hasGPIO": true, "hasPullup": true, "hasADC": true}, + {"displayName": "6", "name": "6", "hasGPIO": true, "hasPullup": true}, + {"displayName": "7", "name": "7", "hasGPIO": true, "hasPullup": true, "hasPWM": true}, + {"displayName": "11", "name": "11", "hasGPIO": true, "hasPullup": true, "hasPWM": true}, + {"displayName": "14", "name": "14", "hasGPIO": true, "hasPullup": true, "hasADC": true}, + {"displayName": "15", "name": "15", "hasGPIO": true, "hasPullup": true, "hasADC": true}, + {"displayName": "16", "name": "16", "hasGPIO": true, "hasPullup": true, "hasADC": true, "hasPWM": true} ] } diff --git a/components/expanders/seesaw_attiny816/definition.json b/components/expanders/seesaw_attiny816/definition.json index 89c73de3..d8a518cf 100644 --- a/components/expanders/seesaw_attiny816/definition.json +++ b/components/expanders/seesaw_attiny816/definition.json @@ -7,16 +7,16 @@ "documentationURL": "https://learn.adafruit.com/adafruit-attiny817-seesaw", "i2cAddresses": ["0x49", "0x4A", "0x4B", "0x4C"], "pins": [ - {"displayName": "0", "name": 0, "hasGPIO": true, "hasPullup": true, "hasADC": true, "hasPWM": true}, - {"displayName": "1", "name": 1, "hasGPIO": true, "hasPullup": true, "hasADC": true, "hasPWM": true}, - {"displayName": "2", "name": 2, "hasGPIO": true, "hasPullup": true, "hasADC": true}, - {"displayName": "3", "name": 3, "hasGPIO": true, "hasPullup": true, "hasADC": true}, - {"displayName": "4", "name": 4, "hasGPIO": true, "hasPullup": true, "hasADC": true}, - {"displayName": "5", "name": 5, "hasGPIO": true, "hasPullup": true, "hasADC": true}, - {"displayName": "7", "name": 7, "hasGPIO": true, "hasPullup": true, "hasPWM": true}, - {"displayName": "11", "name": 11, "hasGPIO": true, "hasPullup": true, "hasPWM": true}, - {"displayName": "14", "name": 14, "hasGPIO": true, "hasPullup": true, "hasADC": true}, - {"displayName": "15", "name": 15, "hasGPIO": true, "hasPullup": true, "hasADC": true}, - {"displayName": "16", "name": 16, "hasGPIO": true, "hasPullup": true, "hasADC": true, "hasPWM": true} + {"displayName": "0", "name": "0", "hasGPIO": true, "hasPullup": true, "hasADC": true, "hasPWM": true}, + {"displayName": "1", "name": "1", "hasGPIO": true, "hasPullup": true, "hasADC": true, "hasPWM": true}, + {"displayName": "2", "name": "2", "hasGPIO": true, "hasPullup": true, "hasADC": true}, + {"displayName": "3", "name": "3", "hasGPIO": true, "hasPullup": true, "hasADC": true}, + {"displayName": "4", "name": "4", "hasGPIO": true, "hasPullup": true, "hasADC": true}, + {"displayName": "5", "name": "5", "hasGPIO": true, "hasPullup": true, "hasADC": true}, + {"displayName": "7", "name": "7", "hasGPIO": true, "hasPullup": true, "hasPWM": true}, + {"displayName": "11", "name": "11", "hasGPIO": true, "hasPullup": true, "hasPWM": true}, + {"displayName": "14", "name": "14", "hasGPIO": true, "hasPullup": true, "hasADC": true}, + {"displayName": "15", "name": "15", "hasGPIO": true, "hasPullup": true, "hasADC": true}, + {"displayName": "16", "name": "16", "hasGPIO": true, "hasPullup": true, "hasADC": true, "hasPWM": true} ] } diff --git a/components/expanders/seesaw_attiny817/definition.json b/components/expanders/seesaw_attiny817/definition.json index 0e55e829..971669cc 100644 --- a/components/expanders/seesaw_attiny817/definition.json +++ b/components/expanders/seesaw_attiny817/definition.json @@ -7,20 +7,20 @@ "documentationURL": "https://learn.adafruit.com/adafruit-attiny817-seesaw", "i2cAddresses": ["0x49", "0x4A", "0x4B", "0x4C"], "pins": [ - {"displayName": "0", "name": 0, "hasGPIO": true, "hasPullup": true, "hasADC": true, "hasPWM": true}, - {"displayName": "1", "name": 1, "hasGPIO": true, "hasPullup": true, "hasADC": true, "hasPWM": true}, - {"displayName": "2", "name": 2, "hasGPIO": true, "hasPullup": true, "hasADC": true}, - {"displayName": "3", "name": 3, "hasGPIO": true, "hasPullup": true, "hasADC": true}, - {"displayName": "5", "name": 5, "hasGPIO": true, "hasPullup": true, "direction": "OUTPUT"}, - {"displayName": "6", "name": 6, "hasGPIO": true, "hasPullup": true, "hasADC": true}, - {"displayName": "7", "name": 7, "hasGPIO": true, "hasPullup": true, "hasADC": true}, - {"displayName": "8", "name": 8, "hasGPIO": true, "hasPullup": true}, - {"displayName": "9", "name": 9, "hasGPIO": true, "hasPullup": true, "hasPWM": true}, - {"displayName": "12", "name": 12, "hasGPIO": true, "hasPullup": true, "hasPWM": true}, - {"displayName": "13", "name": 13, "hasGPIO": true, "hasPullup": true, "hasPWM": true}, - {"displayName": "14", "name": 14, "hasGPIO": true, "hasPullup": true}, - {"displayName": "18", "name": 18, "hasGPIO": true, "hasADC": true}, - {"displayName": "19", "name": 19, "hasGPIO": true, "hasADC": true}, - {"displayName": "20", "name": 20, "hasADC": true} + {"displayName": "0", "name": "0", "hasGPIO": true, "hasPullup": true, "hasADC": true, "hasPWM": true}, + {"displayName": "1", "name": "1", "hasGPIO": true, "hasPullup": true, "hasADC": true, "hasPWM": true}, + {"displayName": "2", "name": "2", "hasGPIO": true, "hasPullup": true, "hasADC": true}, + {"displayName": "3", "name": "3", "hasGPIO": true, "hasPullup": true, "hasADC": true}, + {"displayName": "5", "name": "5", "hasGPIO": true, "hasPullup": true, "direction": "OUTPUT"}, + {"displayName": "6", "name": "6", "hasGPIO": true, "hasPullup": true, "hasADC": true}, + {"displayName": "7", "name": "7", "hasGPIO": true, "hasPullup": true, "hasADC": true}, + {"displayName": "8", "name": "8", "hasGPIO": true, "hasPullup": true}, + {"displayName": "9", "name": "9", "hasGPIO": true, "hasPullup": true, "hasPWM": true}, + {"displayName": "12", "name": "12", "hasGPIO": true, "hasPullup": true, "hasPWM": true}, + {"displayName": "13", "name": "13", "hasGPIO": true, "hasPullup": true, "hasPWM": true}, + {"displayName": "14", "name": "14", "hasGPIO": true, "hasPullup": true}, + {"displayName": "18", "name": "18", "hasGPIO": true, "hasADC": true}, + {"displayName": "19", "name": "19", "hasGPIO": true, "hasADC": true}, + {"displayName": "20", "name": "20", "hasADC": true} ] } diff --git a/components/expanders/tca8418/definition.json b/components/expanders/tca8418/definition.json index 104b9e40..69d8f509 100644 --- a/components/expanders/tca8418/definition.json +++ b/components/expanders/tca8418/definition.json @@ -7,23 +7,23 @@ "documentationURL": "https://learn.adafruit.com/adafruit-tca8418-keypad-matrix-and-gpio-expander-breakout", "i2cAddresses": ["0x34"], "pins": [ - {"displayName": "C0", "name": 8, "hasGPIO": true, "hasPullup": true}, - {"displayName": "C1", "name": 9, "hasGPIO": true, "hasPullup": true}, - {"displayName": "C2", "name": 10, "hasGPIO": true, "hasPullup": true}, - {"displayName": "C3", "name": 11, "hasGPIO": true, "hasPullup": true}, - {"displayName": "C4", "name": 12, "hasGPIO": true, "hasPullup": true}, - {"displayName": "C5", "name": 13, "hasGPIO": true, "hasPullup": true}, - {"displayName": "C6", "name": 14, "hasGPIO": true, "hasPullup": true}, - {"displayName": "C7", "name": 15, "hasGPIO": true, "hasPullup": true}, - {"displayName": "C8", "name": 16, "hasGPIO": true, "hasPullup": true}, - {"displayName": "C9", "name": 17, "hasGPIO": true, "hasPullup": true}, - {"displayName": "R0", "name": 0, "hasGPIO": true, "hasPullup": true}, - {"displayName": "R1", "name": 1, "hasGPIO": true, "hasPullup": true}, - {"displayName": "R2", "name": 2, "hasGPIO": true, "hasPullup": true}, - {"displayName": "R3", "name": 3, "hasGPIO": true, "hasPullup": true}, - {"displayName": "R4", "name": 4, "hasGPIO": true, "hasPullup": true}, - {"displayName": "R5", "name": 5, "hasGPIO": true, "hasPullup": true}, - {"displayName": "R6", "name": 6, "hasGPIO": true, "hasPullup": true}, - {"displayName": "R7", "name": 7, "hasGPIO": true, "hasPullup": true} + {"displayName": "C0", "name": "8", "hasGPIO": true, "hasPullup": true}, + {"displayName": "C1", "name": "9", "hasGPIO": true, "hasPullup": true}, + {"displayName": "C2", "name": "10", "hasGPIO": true, "hasPullup": true}, + {"displayName": "C3", "name": "11", "hasGPIO": true, "hasPullup": true}, + {"displayName": "C4", "name": "12", "hasGPIO": true, "hasPullup": true}, + {"displayName": "C5", "name": "13", "hasGPIO": true, "hasPullup": true}, + {"displayName": "C6", "name": "14", "hasGPIO": true, "hasPullup": true}, + {"displayName": "C7", "name": "15", "hasGPIO": true, "hasPullup": true}, + {"displayName": "C8", "name": "16", "hasGPIO": true, "hasPullup": true}, + {"displayName": "C9", "name": "17", "hasGPIO": true, "hasPullup": true}, + {"displayName": "R0", "name": "0", "hasGPIO": true, "hasPullup": true}, + {"displayName": "R1", "name": "1", "hasGPIO": true, "hasPullup": true}, + {"displayName": "R2", "name": "2", "hasGPIO": true, "hasPullup": true}, + {"displayName": "R3", "name": "3", "hasGPIO": true, "hasPullup": true}, + {"displayName": "R4", "name": "4", "hasGPIO": true, "hasPullup": true}, + {"displayName": "R5", "name": "5", "hasGPIO": true, "hasPullup": true}, + {"displayName": "R6", "name": "6", "hasGPIO": true, "hasPullup": true}, + {"displayName": "R7", "name": "7", "hasGPIO": true, "hasPullup": true} ] } From 1c37cf56a4206a7fbf83af2210c90fcce7e08c00 Mon Sep 17 00:00:00 2001 From: brentru Date: Fri, 24 Apr 2026 10:09:43 -0400 Subject: [PATCH 14/15] Overzealous find/replace --- components/expanders/ads7128/definition.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/expanders/ads7128/definition.json b/components/expanders/ads7128/definition.json index dc6af39b..7fcc825c 100644 --- a/components/expanders/ads7128/definition.json +++ b/components/expanders/ads7128/definition.json @@ -1,6 +1,6 @@ { "displayName": "ADS7128", - "description": "8-name GPIO expander with 12-bit ADC.", + "description": "8-channel GPIO expander with 12-bit ADC.", "published": false, "vendor": "Texas Instruments", "productURL": "https://www.ti.com/product/ADS7128", From 8b3ef3693b7af46f919ca1a6891f3e9c997546f5 Mon Sep 17 00:00:00 2001 From: brentru Date: Tue, 12 May 2026 11:03:25 -0400 Subject: [PATCH 15/15] Add ADS1x15 Fam --- components/expanders/ads1015/definition.json | 15 +++++++++++++++ components/expanders/ads1115/definition.json | 15 +++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 components/expanders/ads1015/definition.json create mode 100644 components/expanders/ads1115/definition.json diff --git a/components/expanders/ads1015/definition.json b/components/expanders/ads1015/definition.json new file mode 100644 index 00000000..4181edcc --- /dev/null +++ b/components/expanders/ads1015/definition.json @@ -0,0 +1,15 @@ +{ + "displayName": "ADS1015", + "description": "12-Bit ADC - 4 Channel.", + "published": true, + "vendor": "Adafruit Industries", + "productURL": "https://www.adafruit.com/product/1083", + "documentationURL": "https://learn.adafruit.com/adafruit-4-channel-adc-breakouts/", + "i2cAddresses": ["0x48", "0x49", "0x4A", "0x4B"], + "pins": [ + {"displayName": "A0", "name": "0", "hasGPIO": false, "hasADC": true}, + {"displayName": "A1", "name": "1", "hasGPIO": false, "hasADC": true}, + {"displayName": "A2", "name": "2", "hasGPIO": false, "hasADC": true}, + {"displayName": "A3", "name": "3", "hasGPIO": false, "hasADC": true} + ] +} diff --git a/components/expanders/ads1115/definition.json b/components/expanders/ads1115/definition.json new file mode 100644 index 00000000..fba9f782 --- /dev/null +++ b/components/expanders/ads1115/definition.json @@ -0,0 +1,15 @@ +{ + "displayName": "ADS1115", + "description": "16-bit ADC - 4 Channel.", + "published": true, + "vendor": "Adafruit Industries", + "productURL": "https://www.adafruit.com/product/1085", + "documentationURL": "https://learn.adafruit.com/adafruit-4-channel-adc-breakouts/", + "i2cAddresses": ["0x48", "0x49", "0x4A", "0x4B"], + "pins": [ + {"displayName": "A0", "name": "0", "hasGPIO": false, "hasADC": true}, + {"displayName": "A1", "name": "1", "hasGPIO": false, "hasADC": true}, + {"displayName": "A2", "name": "2", "hasGPIO": false, "hasADC": true}, + {"displayName": "A3", "name": "3", "hasGPIO": false, "hasADC": true} + ] +} \ No newline at end of file