From 74150b4edf0c5730260d8bb688268a5f36739eca Mon Sep 17 00:00:00 2001 From: Stephan Linz Date: Sat, 23 Nov 2024 10:24:36 +0100 Subject: [PATCH 1/7] doc: sphinx: enable toggle button extension This enables the Sphinx toggle button extensions also for the Bridle documentation set and provides a common CSS tweak where ever the HTMl result of this new extension will be used, e.g. Brilde and Zephyr documentation set. Signed-off-by: Stephan Linz --- doc/_static/css/common.css | 10 ++++++++++ doc/bridle/conf.py | 1 + 2 files changed, 11 insertions(+) diff --git a/doc/_static/css/common.css b/doc/_static/css/common.css index 6ed691d2a6..9fd1cd8ebf 100644 --- a/doc/_static/css/common.css +++ b/doc/_static/css/common.css @@ -129,3 +129,13 @@ ul.edge-pinout > li { overflow: auto; width: 80ch; } + +/* tweak toggle-button link position and color */ +.rst-content .admonition.toggle { + overflow: visible; +} + +.rst-content .admonition.toggle button { + display: inline-flex; + color: var(--admonition-note-title-color); +} diff --git a/doc/bridle/conf.py b/doc/bridle/conf.py index 73e892ef07..537de9376d 100644 --- a/doc/bridle/conf.py +++ b/doc/bridle/conf.py @@ -146,6 +146,7 @@ 'zephyr.domain', # 'zephyr.api_overview', 'sphinx_copybutton', + 'sphinx_togglebutton', 'notfound.extension', 'bridle.link-roles', 'bridle.inventory_builder', From 151cd6456572d55ee60acf3eb8916dfd694d9427 Mon Sep 17 00:00:00 2001 From: Stephan Linz Date: Sun, 24 Nov 2024 22:04:42 +0100 Subject: [PATCH 2/7] shields: document the new "Grove LED Button" module This special Grove module is a composed module with one LED and one push button and supported by the both shileds Grove Button and Grove LED. Signed-off-by: Stephan Linz --- boards/shields/grove_btn/doc/index.rst | 114 ++++++++++++++---- .../grove_btn/doc/seeed_grove_led_button.jpg | Bin 0 -> 77897 bytes boards/shields/grove_led/doc/index.rst | 84 +++++++++---- .../grove_led/doc/seeed_grove_led_button.jpg | Bin 0 -> 77897 bytes doc/bridle/links.txt | 8 ++ 5 files changed, 164 insertions(+), 42 deletions(-) create mode 100644 boards/shields/grove_btn/doc/seeed_grove_led_button.jpg create mode 100644 boards/shields/grove_led/doc/seeed_grove_led_button.jpg diff --git a/boards/shields/grove_btn/doc/index.rst b/boards/shields/grove_btn/doc/index.rst index 6ada863a31..42e737dd43 100644 --- a/boards/shields/grove_btn/doc/index.rst +++ b/boards/shields/grove_btn/doc/index.rst @@ -21,27 +21,69 @@ Variants and Versions Here find the comparison between various variants and versions of Seeed Studio Button Shields: -+-----------------------+--------------+--------------+ -| Parameter | Button V1.2 | Button V1.0 | -+=======================+==============+==============+ -| Release Date | Dec 2016 | Apr 2011 | -+-----------------------+--------------+--------------+ -| Operation Voltage | 3.3V or 5V | 3.3V or 5V | -+-----------------------+--------------+--------------+ -| Operation Temperature | -25℃ to +70℃ | | -+-----------------------+--------------+--------------+ -| Grove Connectors | 1 | 1 | -+-----------------------+--------------+--------------+ -| Digital Ports | 1 | 1 | -+-----------------------+--------------+--------------+ -| Analog Ports | | | -+-----------------------+--------------+--------------+ -| UART Ports | | | -+-----------------------+--------------+--------------+ -| I2C Ports | | | -+-----------------------+--------------+--------------+ -| SPI Ports | | | -+-----------------------+--------------+--------------+ ++-----------------------+-----------------+--------------+--------------+ +| Parameter | LED Button V1.0 | Button V1.2 | Button V1.0 | ++=======================+=================+==============+==============+ +| Release Date | Jun 2018 | Dec 2016 | Apr 2011 | ++-----------------------+-----------------+--------------+--------------+ +| Operation Voltage | 3.3V or 5V | 3.3V or 5V | 3.3V or 5V | ++-----------------------+-----------------+--------------+--------------+ +| Operation Temperature | | -25℃ to +70℃ | -25℃ to +70℃ | ++-----------------------+-----------------+--------------+--------------+ +| Grove Connectors | 1 | 1 | 1 | ++-----------------------+-----------------+--------------+--------------+ +| Digital Ports | 1 | 1 | 1 | ++-----------------------+-----------------+--------------+--------------+ +| Analog Ports | | | | ++-----------------------+-----------------+--------------+--------------+ +| UART Ports | | | | ++-----------------------+-----------------+--------------+--------------+ +| I2C Ports | | | | ++-----------------------+-----------------+--------------+--------------+ +| SPI Ports | | | | ++-----------------------+-----------------+--------------+--------------+ + +Grove LED Button V1.0 +===================== + +Overview +-------- + +**Model:** 111020044 (r), 111020045 (y), 111020046 (b) + +The `Grove LED Button V1.0`_ is a combined module of either yellow, blue +or red LED with a momentary and tactile push button in Grove form factor. +It uses a N-Channel MOSFET to control the LED to ensure the high switching +speed and a low current consumption. The button is low active and drives +high in dormant state by an pull up resistance. + +.. figure:: seeed_grove_led_button.jpg + :align: center + :alt: SEEED_GROVE_LED_BUTTON + +Pinout Diagram +-------------- + +The pinout of Grove Button following the `Grove Digital Layout`_. + ++-----+----------+----------------+--------+--------+ +| Pin | Function | Meaning | Shield | Board | ++=====+==========+================+========+========+ +| 1 | Dn | Digital Signal | Input | Output | ++-----+----------+----------------+--------+--------+ +| 2 | Dn+1 | Digital Signal | Output | Input | ++-----+----------+----------------+--------+--------+ +| 3 | VCC | 3.3V or 5V | Input | Output | ++-----+----------+----------------+--------+--------+ +| 4 | GND | Ground | | | ++-----+----------+----------------+--------+--------+ + +Hardware +-------- + +The button outputs (Dn+1) a LOW signal when pressed, and HIGH when released. + +- `Grove LED Button V1.0 Eagle Files, Schematic and Layout`_ Grove Button V1.2 and V1.0 ========================== @@ -102,6 +144,36 @@ Set ``-DSHIELD=grove_btn_dX`` when you invoke ``west build``, wherein ``X`` corresponds to the ordinal number of a signal from the |Laced Grove Signal Interface|. For example: +.. rubric:: Grove LED Button V1.0 + +#. :ref:`grove_base_shield_v2` on |zephyr:board:mimxrt1060_evk| + for **GPIO driven Button** on Grove ``D4``: + + .. zephyr-app-commands:: + :app: bridle/samples/helloshell + :build-dir: helloshell-seeed_grove_base_v2-grove_btn_d4_inv + :board: mimxrt1060_evkb + :shield: "seeed_grove_base_v2 grove_btn_d4_inv" + :goals: flash + :west-args: -p + :host-os: unix + :tool: all + +#. :ref:`grove_base_shield_v13` or :ref:`grove_base_shield_v12` on + |zephyr:board:mimxrt1060_evk| for **GPIO driven Button** on Grove ``D4``: + + .. zephyr-app-commands:: + :app: bridle/samples/helloshell + :build-dir: helloshell-seeed_grove_base_v1-grove_btn_d4_inv + :board: mimxrt1060_evkb + :shield: "seeed_grove_base_v1 grove_btn_d4_inv" + :goals: flash + :west-args: -p + :host-os: unix + :tool: all + +.. rubric:: Grove Button V1.2 and V1.0 + #. :ref:`grove_base_shield_v2` on |zephyr:board:mimxrt1060_evk| for **GPIO driven Button** on Grove ``D4``: diff --git a/boards/shields/grove_btn/doc/seeed_grove_led_button.jpg b/boards/shields/grove_btn/doc/seeed_grove_led_button.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7959805765a6e8bbc0db00154a95b4e0e77a82b6 GIT binary patch literal 77897 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

ZR-r4g85DW1meox2m*g%1BA8S*{L2!V=$a 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 Ma7?-X0QeOD*;G4>2LJ#7 literal 0 HcmV?d00001 diff --git a/boards/shields/grove_led/doc/index.rst b/boards/shields/grove_led/doc/index.rst index 342bbdec0b..55ea311b0e 100644 --- a/boards/shields/grove_led/doc/index.rst +++ b/boards/shields/grove_led/doc/index.rst @@ -21,27 +21,69 @@ Variants and Versions Here find the comparison between various variants and versions of Seeed Studio LED Shields: -+-----------------------+----------------------------+------------+--------------------------------+ -| Parameter | LED Socket Kit V1.3 / V1.0 | LED V1.1 | Variable Color LED V1.1 / V1.0 | -+=======================+============================+============+================================+ -| Release Date | Oct 2015 / Feb 2013 | Apr 2011 | Sep 2017 / Apr 2011 | -+-----------------------+----------------------------+------------+--------------------------------+ -| Operation Voltage | 3.3V or 5V | 3.3V or 5V | 5V only | -+-----------------------+----------------------------+------------+--------------------------------+ -| Operation Temperature | | | | -+-----------------------+----------------------------+------------+--------------------------------+ -| Grove Connectors | 1 | 1 | 1 | -+-----------------------+----------------------------+------------+--------------------------------+ -| Digital Ports | 1 | 1 | 1 | -+-----------------------+----------------------------+------------+--------------------------------+ -| Analog Ports | | | | -+-----------------------+----------------------------+------------+--------------------------------+ -| UART Ports | | | | -+-----------------------+----------------------------+------------+--------------------------------+ -| I2C Ports | | | | -+-----------------------+----------------------------+------------+--------------------------------+ -| SPI Ports | | | | -+-----------------------+----------------------------+------------+--------------------------------+ ++-----------------------+-----------------+----------------------------+------------+--------------------------------+ +| Parameter | LED Button V1.0 | LED Socket Kit V1.3 / V1.0 | LED V1.1 | Variable Color LED V1.1 / V1.0 | ++=======================+=================+============================+============+================================+ +| Release Date | Jun 2018 | Oct 2015 / Feb 2013 | Apr 2011 | Sep 2017 / Apr 2011 | ++-----------------------+-----------------+----------------------------+------------+--------------------------------+ +| Operation Voltage | 3.3V or 5V | 3.3V or 5V | 3.3V or 5V | 5V only | ++-----------------------+-----------------+----------------------------+------------+--------------------------------+ +| Operation Temperature | | | | | ++-----------------------+-----------------+----------------------------+------------+--------------------------------+ +| Grove Connectors | 1 | 1 | 1 | 1 | ++-----------------------+-----------------+----------------------------+------------+--------------------------------+ +| Digital Ports | 1 | 1 | 1 | 1 | ++-----------------------+-----------------+----------------------------+------------+--------------------------------+ +| Analog Ports | | | | | ++-----------------------+-----------------+----------------------------+------------+--------------------------------+ +| UART Ports | | | | | ++-----------------------+-----------------+----------------------------+------------+--------------------------------+ +| I2C Ports | | | | | ++-----------------------+-----------------+----------------------------+------------+--------------------------------+ +| SPI Ports | | | | | ++-----------------------+-----------------+----------------------------+------------+--------------------------------+ + +Grove LED Button V1.0 +===================== + +Overview +-------- + +**Model:** 111020044 (r), 111020045 (y), 111020046 (b) + +The `Grove LED Button V1.0`_ is a combined module of either yellow, blue +or red LED with a momentary and tactile push button in Grove form factor. +It uses a N-Channel MOSFET to control the LED to ensure the high switching +speed and a low current consumption. The button is low active and drives +high in dormant state by an pull up resistance. + +.. figure:: seeed_grove_led_button.jpg + :align: center + :alt: SEEED_GROVE_LED_BUTTON + +Pinout Diagram +-------------- + +The pinout of Grove Button following the `Grove Digital Layout`_. + ++-----+----------+----------------+--------+--------+ +| Pin | Function | Meaning | Shield | Board | ++=====+==========+================+========+========+ +| 1 | Dn | Digital Signal | Input | Output | ++-----+----------+----------------+--------+--------+ +| 2 | Dn+1 | Digital Signal | Output | Input | ++-----+----------+----------------+--------+--------+ +| 3 | VCC | 3.3V or 5V | Input | Output | ++-----+----------+----------------+--------+--------+ +| 4 | GND | Ground | | | ++-----+----------+----------------+--------+--------+ + +Hardware +-------- + +When input pin (Dn) is logic HIGH, the LED will light up. + +- `Grove LED Button V1.0 Eagle Files, Schematic and Layout`_ Grove LED Socket Kit V1.3 and V1.0 ================================== diff --git a/boards/shields/grove_led/doc/seeed_grove_led_button.jpg b/boards/shields/grove_led/doc/seeed_grove_led_button.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7959805765a6e8bbc0db00154a95b4e0e77a82b6 GIT binary patch literal 77897 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

ZR-r4g85DW1meox2m*g%1BA8S*{L2!V=$a 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 Ma7?-X0QeOD*;G4>2LJ#7 literal 0 HcmV?d00001 diff --git a/doc/bridle/links.txt b/doc/bridle/links.txt index 1afd284fe2..e3ee4e2305 100644 --- a/doc/bridle/links.txt +++ b/doc/bridle/links.txt @@ -907,6 +907,14 @@ .. ### Links to the Grove Modules +.. #### Links to the Grove LED Button V1.0 + +.. _`Grove LED Button V1.0`: + https://wiki.seeedstudio.com/Grove-LED_Button + +.. _`Grove LED Button V1.0 Eagle Files, Schematic and Layout`: + https://files.seeedstudio.com/wiki/Grove-Red_LED_Button/res/Grove-Red_LED_Button.zip + .. #### Links to the Grove Button V1.2 .. _`Grove Button V1.2`: From 7e44c64117fd3b503a6cfc57e299331508c9eb0a Mon Sep 17 00:00:00 2001 From: Stephan Linz Date: Mon, 25 Nov 2024 06:15:13 +0100 Subject: [PATCH 3/7] shields: document new "Grove Dual Button" module This special Grove module is a composed module with two independent push buttons and supported by the Grove Button shield. Signed-off-by: Stephan Linz --- boards/shields/grove_btn/doc/index.rst | 84 +++++++++++++----- .../grove_btn/doc/seeed_grove_dual_button.jpg | Bin 0 -> 45449 bytes doc/bridle/links.txt | 11 +++ 3 files changed, 74 insertions(+), 21 deletions(-) create mode 100644 boards/shields/grove_btn/doc/seeed_grove_dual_button.jpg diff --git a/boards/shields/grove_btn/doc/index.rst b/boards/shields/grove_btn/doc/index.rst index 42e737dd43..102fae05ce 100644 --- a/boards/shields/grove_btn/doc/index.rst +++ b/boards/shields/grove_btn/doc/index.rst @@ -21,27 +21,69 @@ Variants and Versions Here find the comparison between various variants and versions of Seeed Studio Button Shields: -+-----------------------+-----------------+--------------+--------------+ -| Parameter | LED Button V1.0 | Button V1.2 | Button V1.0 | -+=======================+=================+==============+==============+ -| Release Date | Jun 2018 | Dec 2016 | Apr 2011 | -+-----------------------+-----------------+--------------+--------------+ -| Operation Voltage | 3.3V or 5V | 3.3V or 5V | 3.3V or 5V | -+-----------------------+-----------------+--------------+--------------+ -| Operation Temperature | | -25℃ to +70℃ | -25℃ to +70℃ | -+-----------------------+-----------------+--------------+--------------+ -| Grove Connectors | 1 | 1 | 1 | -+-----------------------+-----------------+--------------+--------------+ -| Digital Ports | 1 | 1 | 1 | -+-----------------------+-----------------+--------------+--------------+ -| Analog Ports | | | | -+-----------------------+-----------------+--------------+--------------+ -| UART Ports | | | | -+-----------------------+-----------------+--------------+--------------+ -| I2C Ports | | | | -+-----------------------+-----------------+--------------+--------------+ -| SPI Ports | | | | -+-----------------------+-----------------+--------------+--------------+ ++-----------------------+------------------+-----------------+--------------+--------------+ +| Parameter | Dual Button V1.0 | LED Button V1.0 | Button V1.2 | Button V1.0 | ++=======================+==================+=================+==============+==============+ +| Release Date | Sep 2019 | Jun 2018 | Dec 2016 | Apr 2011 | ++-----------------------+------------------+-----------------+--------------+--------------+ +| Operation Voltage | 3.3V or 5V | 3.3V or 5V | 3.3V or 5V | 3.3V or 5V | ++-----------------------+------------------+-----------------+--------------+--------------+ +| Operation Temperature | | | -25℃ to +70℃ | -25℃ to +70℃ | ++-----------------------+------------------+-----------------+--------------+--------------+ +| Grove Connectors | 1 | 1 | 1 | 1 | ++-----------------------+------------------+-----------------+--------------+--------------+ +| Digital Ports | 1 | 1 | 1 | 1 | ++-----------------------+------------------+-----------------+--------------+--------------+ +| Analog Ports | | | | | ++-----------------------+------------------+-----------------+--------------+--------------+ +| UART Ports | | | | | ++-----------------------+------------------+-----------------+--------------+--------------+ +| I2C Ports | | | | | ++-----------------------+------------------+-----------------+--------------+--------------+ +| SPI Ports | | | | | ++-----------------------+------------------+-----------------+--------------+--------------+ + +Grove Dual Button V1.0 +====================== + +Overview +-------- + +**Model:** 111020103 (r/g/b/w) + +The `Grove Dual Button V1.0`_ includes 2 buttons, controls two signal channel +with one module. Both buttons are low active and drives high in dormant state +by an pull up resistance. + +.. figure:: seeed_grove_dual_button.jpg + :align: center + :alt: SEEED_GROVE_DUAL_BUTTON + +Pinout Diagram +-------------- + +The pinout of Grove Button following the `Grove Digital Layout`_. + ++-----+----------+----------------+--------+--------+ +| Pin | Function | Meaning | Shield | Board | ++=====+==========+================+========+========+ +| 1 | Dn | Digital Signal | Output | Input | ++-----+----------+----------------+--------+--------+ +| 2 | Dn+1 | Digital Signal | Output | Input | ++-----+----------+----------------+--------+--------+ +| 3 | VCC | 3.3V or 5V | Input | Output | ++-----+----------+----------------+--------+--------+ +| 4 | GND | Ground | | | ++-----+----------+----------------+--------+--------+ + +Hardware +-------- + +The button outputs (Dn or Dn+1) a LOW signal when pressed, +and HIGH when released. + +- `Grove Dual Button V1.0 Eagle Files, Schematic and Layout`_ +- `Grove Dual Button V1.0 Schematic`_ Grove LED Button V1.0 ===================== diff --git a/boards/shields/grove_btn/doc/seeed_grove_dual_button.jpg b/boards/shields/grove_btn/doc/seeed_grove_dual_button.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2e857d3cd34ad14bb8400b6a6a5514a7fde2fe49 GIT binary patch literal 45449 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 literal 0 HcmV?d00001 diff --git a/doc/bridle/links.txt b/doc/bridle/links.txt index e3ee4e2305..0205eb1ed9 100644 --- a/doc/bridle/links.txt +++ b/doc/bridle/links.txt @@ -907,6 +907,17 @@ .. ### Links to the Grove Modules +.. #### Links to the Grove Dual Button V1.0 + +.. _`Grove Dual Button V1.0`: + https://wiki.seeedstudio.com/Grove-Dual-Button + +.. _`Grove Dual Button V1.0 Eagle Files, Schematic and Layout`: + https://files.seeedstudio.com/products/111020103/document/Grove-Dual-Button_eagle_file.zip + +.. _`Grove Dual Button V1.0 Schematic`: + https://files.seeedstudio.com/products/111020103/document/Grove-Dual-Button_v1_0_SCH_190916.pdf + .. #### Links to the Grove LED Button V1.0 .. _`Grove LED Button V1.0`: From 529307d7456b980f8c997fbf30df5440621905e4 Mon Sep 17 00:00:00 2001 From: Stephan Linz Date: Sun, 24 Nov 2024 19:55:40 +0100 Subject: [PATCH 4/7] shields: grove_btn: support inverted input With the new upcoming "Grove LED Button" module the Grove button shield needs also support for low active buttons. Signed-off-by: Stephan Linz --- boards/shields/grove_btn/Kconfig.shield | 34 ++++++++++++++++++- .../grove_btn/grove_btn_d0_inv.overlay | 19 +++++++++++ .../grove_btn/grove_btn_d10_inv.overlay | 19 +++++++++++ .../grove_btn/grove_btn_d11_inv.overlay | 19 +++++++++++ .../grove_btn/grove_btn_d12_inv.overlay | 19 +++++++++++ .../grove_btn/grove_btn_d13_inv.overlay | 19 +++++++++++ .../grove_btn/grove_btn_d14_inv.overlay | 19 +++++++++++ .../grove_btn/grove_btn_d15_inv.overlay | 19 +++++++++++ .../grove_btn/grove_btn_d16_inv.overlay | 19 +++++++++++ .../grove_btn/grove_btn_d17_inv.overlay | 19 +++++++++++ .../grove_btn/grove_btn_d18_inv.overlay | 19 +++++++++++ .../grove_btn/grove_btn_d19_inv.overlay | 19 +++++++++++ .../grove_btn/grove_btn_d1_inv.overlay | 19 +++++++++++ .../grove_btn/grove_btn_d20_inv.overlay | 19 +++++++++++ .../grove_btn/grove_btn_d21_inv.overlay | 19 +++++++++++ .../grove_btn/grove_btn_d22_inv.overlay | 19 +++++++++++ .../grove_btn/grove_btn_d23_inv.overlay | 19 +++++++++++ .../grove_btn/grove_btn_d24_inv.overlay | 19 +++++++++++ .../grove_btn/grove_btn_d25_inv.overlay | 19 +++++++++++ .../grove_btn/grove_btn_d26_inv.overlay | 19 +++++++++++ .../grove_btn/grove_btn_d27_inv.overlay | 19 +++++++++++ .../grove_btn/grove_btn_d28_inv.overlay | 19 +++++++++++ .../grove_btn/grove_btn_d29_inv.overlay | 19 +++++++++++ .../grove_btn/grove_btn_d2_inv.overlay | 19 +++++++++++ .../grove_btn/grove_btn_d30_inv.overlay | 19 +++++++++++ .../grove_btn/grove_btn_d31_inv.overlay | 19 +++++++++++ .../grove_btn/grove_btn_d3_inv.overlay | 19 +++++++++++ .../grove_btn/grove_btn_d4_inv.overlay | 19 +++++++++++ .../grove_btn/grove_btn_d5_inv.overlay | 19 +++++++++++ .../grove_btn/grove_btn_d6_inv.overlay | 19 +++++++++++ .../grove_btn/grove_btn_d7_inv.overlay | 19 +++++++++++ .../grove_btn/grove_btn_d8_inv.overlay | 19 +++++++++++ .../grove_btn/grove_btn_d9_inv.overlay | 19 +++++++++++ 33 files changed, 641 insertions(+), 1 deletion(-) create mode 100644 boards/shields/grove_btn/grove_btn_d0_inv.overlay create mode 100644 boards/shields/grove_btn/grove_btn_d10_inv.overlay create mode 100644 boards/shields/grove_btn/grove_btn_d11_inv.overlay create mode 100644 boards/shields/grove_btn/grove_btn_d12_inv.overlay create mode 100644 boards/shields/grove_btn/grove_btn_d13_inv.overlay create mode 100644 boards/shields/grove_btn/grove_btn_d14_inv.overlay create mode 100644 boards/shields/grove_btn/grove_btn_d15_inv.overlay create mode 100644 boards/shields/grove_btn/grove_btn_d16_inv.overlay create mode 100644 boards/shields/grove_btn/grove_btn_d17_inv.overlay create mode 100644 boards/shields/grove_btn/grove_btn_d18_inv.overlay create mode 100644 boards/shields/grove_btn/grove_btn_d19_inv.overlay create mode 100644 boards/shields/grove_btn/grove_btn_d1_inv.overlay create mode 100644 boards/shields/grove_btn/grove_btn_d20_inv.overlay create mode 100644 boards/shields/grove_btn/grove_btn_d21_inv.overlay create mode 100644 boards/shields/grove_btn/grove_btn_d22_inv.overlay create mode 100644 boards/shields/grove_btn/grove_btn_d23_inv.overlay create mode 100644 boards/shields/grove_btn/grove_btn_d24_inv.overlay create mode 100644 boards/shields/grove_btn/grove_btn_d25_inv.overlay create mode 100644 boards/shields/grove_btn/grove_btn_d26_inv.overlay create mode 100644 boards/shields/grove_btn/grove_btn_d27_inv.overlay create mode 100644 boards/shields/grove_btn/grove_btn_d28_inv.overlay create mode 100644 boards/shields/grove_btn/grove_btn_d29_inv.overlay create mode 100644 boards/shields/grove_btn/grove_btn_d2_inv.overlay create mode 100644 boards/shields/grove_btn/grove_btn_d30_inv.overlay create mode 100644 boards/shields/grove_btn/grove_btn_d31_inv.overlay create mode 100644 boards/shields/grove_btn/grove_btn_d3_inv.overlay create mode 100644 boards/shields/grove_btn/grove_btn_d4_inv.overlay create mode 100644 boards/shields/grove_btn/grove_btn_d5_inv.overlay create mode 100644 boards/shields/grove_btn/grove_btn_d6_inv.overlay create mode 100644 boards/shields/grove_btn/grove_btn_d7_inv.overlay create mode 100644 boards/shields/grove_btn/grove_btn_d8_inv.overlay create mode 100644 boards/shields/grove_btn/grove_btn_d9_inv.overlay diff --git a/boards/shields/grove_btn/Kconfig.shield b/boards/shields/grove_btn/Kconfig.shield index 573712aa38..8edc134971 100644 --- a/boards/shields/grove_btn/Kconfig.shield +++ b/boards/shields/grove_btn/Kconfig.shield @@ -3,34 +3,66 @@ config SHIELD_GROVE_BTN def_bool $(shields_list_contains,grove_btn_d0) || \ + $(shields_list_contains,grove_btn_d0_inv) || \ $(shields_list_contains,grove_btn_d1) || \ + $(shields_list_contains,grove_btn_d1_inv) || \ $(shields_list_contains,grove_btn_d2) || \ + $(shields_list_contains,grove_btn_d2_inv) || \ $(shields_list_contains,grove_btn_d3) || \ + $(shields_list_contains,grove_btn_d3_inv) || \ $(shields_list_contains,grove_btn_d4) || \ + $(shields_list_contains,grove_btn_d4_inv) || \ $(shields_list_contains,grove_btn_d5) || \ + $(shields_list_contains,grove_btn_d5_inv) || \ $(shields_list_contains,grove_btn_d6) || \ + $(shields_list_contains,grove_btn_d6_inv) || \ $(shields_list_contains,grove_btn_d7) || \ + $(shields_list_contains,grove_btn_d7_inv) || \ $(shields_list_contains,grove_btn_d8) || \ + $(shields_list_contains,grove_btn_d8_inv) || \ $(shields_list_contains,grove_btn_d9) || \ + $(shields_list_contains,grove_btn_d9_inv) || \ $(shields_list_contains,grove_btn_d10) || \ + $(shields_list_contains,grove_btn_d10_inv) || \ $(shields_list_contains,grove_btn_d11) || \ + $(shields_list_contains,grove_btn_d11_inv) || \ $(shields_list_contains,grove_btn_d12) || \ + $(shields_list_contains,grove_btn_d12_inv) || \ $(shields_list_contains,grove_btn_d13) || \ + $(shields_list_contains,grove_btn_d13_inv) || \ $(shields_list_contains,grove_btn_d14) || \ + $(shields_list_contains,grove_btn_d14_inv) || \ $(shields_list_contains,grove_btn_d15) || \ + $(shields_list_contains,grove_btn_d15_inv) || \ $(shields_list_contains,grove_btn_d16) || \ + $(shields_list_contains,grove_btn_d16_inv) || \ $(shields_list_contains,grove_btn_d17) || \ + $(shields_list_contains,grove_btn_d17_inv) || \ $(shields_list_contains,grove_btn_d18) || \ + $(shields_list_contains,grove_btn_d18_inv) || \ $(shields_list_contains,grove_btn_d19) || \ + $(shields_list_contains,grove_btn_d19_inv) || \ $(shields_list_contains,grove_btn_d20) || \ + $(shields_list_contains,grove_btn_d20_inv) || \ $(shields_list_contains,grove_btn_d21) || \ + $(shields_list_contains,grove_btn_d21_inv) || \ $(shields_list_contains,grove_btn_d22) || \ + $(shields_list_contains,grove_btn_d22_inv) || \ $(shields_list_contains,grove_btn_d23) || \ + $(shields_list_contains,grove_btn_d23_inv) || \ $(shields_list_contains,grove_btn_d24) || \ + $(shields_list_contains,grove_btn_d24_inv) || \ $(shields_list_contains,grove_btn_d25) || \ + $(shields_list_contains,grove_btn_d25_inv) || \ $(shields_list_contains,grove_btn_d26) || \ + $(shields_list_contains,grove_btn_d26_inv) || \ $(shields_list_contains,grove_btn_d27) || \ + $(shields_list_contains,grove_btn_d27_inv) || \ $(shields_list_contains,grove_btn_d28) || \ + $(shields_list_contains,grove_btn_d28_inv) || \ $(shields_list_contains,grove_btn_d29) || \ + $(shields_list_contains,grove_btn_d29_inv) || \ $(shields_list_contains,grove_btn_d30) || \ - $(shields_list_contains,grove_btn_d31) + $(shields_list_contains,grove_btn_d30_inv) || \ + $(shields_list_contains,grove_btn_d31) || \ + $(shields_list_contains,grove_btn_d31_inv) diff --git a/boards/shields/grove_btn/grove_btn_d0_inv.overlay b/boards/shields/grove_btn/grove_btn_d0_inv.overlay new file mode 100644 index 0000000000..cd2aca2af2 --- /dev/null +++ b/boards/shields/grove_btn/grove_btn_d0_inv.overlay @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2024 TiaC Systems + * SPDX-License-Identifier: Apache-2.0 + */ + +#include + +/ { + grove_btns { + status = "okay"; + + compatible = "gpio-keys"; + + grove_btn_d0: grove-btn-d0-inv { + label = "Grove Button D0 (inverted)"; + gpios = <&grove_gpios 0 (GPIO_PULL_DOWN | GPIO_ACTIVE_LOW)>; + }; + }; +}; diff --git a/boards/shields/grove_btn/grove_btn_d10_inv.overlay b/boards/shields/grove_btn/grove_btn_d10_inv.overlay new file mode 100644 index 0000000000..a8af07a7d4 --- /dev/null +++ b/boards/shields/grove_btn/grove_btn_d10_inv.overlay @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2024 TiaC Systems + * SPDX-License-Identifier: Apache-2.0 + */ + +#include + +/ { + grove_btns { + status = "okay"; + + compatible = "gpio-keys"; + + grove_btn_d10: grove-btn-d10-inv { + label = "Grove Button D10 (inverted)"; + gpios = <&grove_gpios 10 (GPIO_PULL_DOWN | GPIO_ACTIVE_LOW)>; + }; + }; +}; diff --git a/boards/shields/grove_btn/grove_btn_d11_inv.overlay b/boards/shields/grove_btn/grove_btn_d11_inv.overlay new file mode 100644 index 0000000000..1e703d2dfd --- /dev/null +++ b/boards/shields/grove_btn/grove_btn_d11_inv.overlay @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2024 TiaC Systems + * SPDX-License-Identifier: Apache-2.0 + */ + +#include + +/ { + grove_btns { + status = "okay"; + + compatible = "gpio-keys"; + + grove_btn_d11: grove-btn-d11-inv { + label = "Grove Button D11 (inverted)"; + gpios = <&grove_gpios 11 (GPIO_PULL_DOWN | GPIO_ACTIVE_LOW)>; + }; + }; +}; diff --git a/boards/shields/grove_btn/grove_btn_d12_inv.overlay b/boards/shields/grove_btn/grove_btn_d12_inv.overlay new file mode 100644 index 0000000000..de516300b6 --- /dev/null +++ b/boards/shields/grove_btn/grove_btn_d12_inv.overlay @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2024 TiaC Systems + * SPDX-License-Identifier: Apache-2.0 + */ + +#include + +/ { + grove_btns { + status = "okay"; + + compatible = "gpio-keys"; + + grove_btn_d12: grove-btn-d12-inv { + label = "Grove Button D12 (inverted)"; + gpios = <&grove_gpios 12 (GPIO_PULL_DOWN | GPIO_ACTIVE_LOW)>; + }; + }; +}; diff --git a/boards/shields/grove_btn/grove_btn_d13_inv.overlay b/boards/shields/grove_btn/grove_btn_d13_inv.overlay new file mode 100644 index 0000000000..79ebbbda9a --- /dev/null +++ b/boards/shields/grove_btn/grove_btn_d13_inv.overlay @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2024 TiaC Systems + * SPDX-License-Identifier: Apache-2.0 + */ + +#include + +/ { + grove_btns { + status = "okay"; + + compatible = "gpio-keys"; + + grove_btn_d13: grove-btn-d13-inv { + label = "Grove Button D13 (inverted)"; + gpios = <&grove_gpios 13 (GPIO_PULL_DOWN | GPIO_ACTIVE_LOW)>; + }; + }; +}; diff --git a/boards/shields/grove_btn/grove_btn_d14_inv.overlay b/boards/shields/grove_btn/grove_btn_d14_inv.overlay new file mode 100644 index 0000000000..1fa202a8a6 --- /dev/null +++ b/boards/shields/grove_btn/grove_btn_d14_inv.overlay @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2024 TiaC Systems + * SPDX-License-Identifier: Apache-2.0 + */ + +#include + +/ { + grove_btns { + status = "okay"; + + compatible = "gpio-keys"; + + grove_btn_d14: grove-btn-d14-inv { + label = "Grove Button D14 (inverted)"; + gpios = <&grove_gpios 14 (GPIO_PULL_DOWN | GPIO_ACTIVE_LOW)>; + }; + }; +}; diff --git a/boards/shields/grove_btn/grove_btn_d15_inv.overlay b/boards/shields/grove_btn/grove_btn_d15_inv.overlay new file mode 100644 index 0000000000..72ff096f89 --- /dev/null +++ b/boards/shields/grove_btn/grove_btn_d15_inv.overlay @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2024 TiaC Systems + * SPDX-License-Identifier: Apache-2.0 + */ + +#include + +/ { + grove_btns { + status = "okay"; + + compatible = "gpio-keys"; + + grove_btn_d15: grove-btn-d15-inv { + label = "Grove Button D15 (inverted)"; + gpios = <&grove_gpios 15 (GPIO_PULL_DOWN | GPIO_ACTIVE_LOW)>; + }; + }; +}; diff --git a/boards/shields/grove_btn/grove_btn_d16_inv.overlay b/boards/shields/grove_btn/grove_btn_d16_inv.overlay new file mode 100644 index 0000000000..78dbf0fd84 --- /dev/null +++ b/boards/shields/grove_btn/grove_btn_d16_inv.overlay @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2024 TiaC Systems + * SPDX-License-Identifier: Apache-2.0 + */ + +#include + +/ { + grove_btns { + status = "okay"; + + compatible = "gpio-keys"; + + grove_btn_d16: grove-btn-d16-inv { + label = "Grove Button D16 (inverted)"; + gpios = <&grove_gpios 16 (GPIO_PULL_DOWN | GPIO_ACTIVE_LOW)>; + }; + }; +}; diff --git a/boards/shields/grove_btn/grove_btn_d17_inv.overlay b/boards/shields/grove_btn/grove_btn_d17_inv.overlay new file mode 100644 index 0000000000..784534b031 --- /dev/null +++ b/boards/shields/grove_btn/grove_btn_d17_inv.overlay @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2024 TiaC Systems + * SPDX-License-Identifier: Apache-2.0 + */ + +#include + +/ { + grove_btns { + status = "okay"; + + compatible = "gpio-keys"; + + grove_btn_d17: grove-btn-d17-inv { + label = "Grove Button D17 (inverted)"; + gpios = <&grove_gpios 17 (GPIO_PULL_DOWN | GPIO_ACTIVE_LOW)>; + }; + }; +}; diff --git a/boards/shields/grove_btn/grove_btn_d18_inv.overlay b/boards/shields/grove_btn/grove_btn_d18_inv.overlay new file mode 100644 index 0000000000..0c278ae283 --- /dev/null +++ b/boards/shields/grove_btn/grove_btn_d18_inv.overlay @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2024 TiaC Systems + * SPDX-License-Identifier: Apache-2.0 + */ + +#include + +/ { + grove_btns { + status = "okay"; + + compatible = "gpio-keys"; + + grove_btn_d18: grove-btn-d18-inv { + label = "Grove Button D18 (inverted)"; + gpios = <&grove_gpios 18 (GPIO_PULL_DOWN | GPIO_ACTIVE_LOW)>; + }; + }; +}; diff --git a/boards/shields/grove_btn/grove_btn_d19_inv.overlay b/boards/shields/grove_btn/grove_btn_d19_inv.overlay new file mode 100644 index 0000000000..db41f5dc28 --- /dev/null +++ b/boards/shields/grove_btn/grove_btn_d19_inv.overlay @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2024 TiaC Systems + * SPDX-License-Identifier: Apache-2.0 + */ + +#include + +/ { + grove_btns { + status = "okay"; + + compatible = "gpio-keys"; + + grove_btn_d19: grove-btn-d19-inv { + label = "Grove Button D19 (inverted)"; + gpios = <&grove_gpios 19 (GPIO_PULL_DOWN | GPIO_ACTIVE_LOW)>; + }; + }; +}; diff --git a/boards/shields/grove_btn/grove_btn_d1_inv.overlay b/boards/shields/grove_btn/grove_btn_d1_inv.overlay new file mode 100644 index 0000000000..798af4b638 --- /dev/null +++ b/boards/shields/grove_btn/grove_btn_d1_inv.overlay @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2024 TiaC Systems + * SPDX-License-Identifier: Apache-2.0 + */ + +#include + +/ { + grove_btns { + status = "okay"; + + compatible = "gpio-keys"; + + grove_btn_d1: grove-btn-d1-inv { + label = "Grove Button D1 (inverted)"; + gpios = <&grove_gpios 1 (GPIO_PULL_DOWN | GPIO_ACTIVE_LOW)>; + }; + }; +}; diff --git a/boards/shields/grove_btn/grove_btn_d20_inv.overlay b/boards/shields/grove_btn/grove_btn_d20_inv.overlay new file mode 100644 index 0000000000..ea28efb483 --- /dev/null +++ b/boards/shields/grove_btn/grove_btn_d20_inv.overlay @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2024 TiaC Systems + * SPDX-License-Identifier: Apache-2.0 + */ + +#include + +/ { + grove_btns { + status = "okay"; + + compatible = "gpio-keys"; + + grove_btn_d20: grove-btn-d20-inv { + label = "Grove Button D20 (inverted)"; + gpios = <&grove_gpios 20 (GPIO_PULL_DOWN | GPIO_ACTIVE_LOW)>; + }; + }; +}; diff --git a/boards/shields/grove_btn/grove_btn_d21_inv.overlay b/boards/shields/grove_btn/grove_btn_d21_inv.overlay new file mode 100644 index 0000000000..6f5260ef60 --- /dev/null +++ b/boards/shields/grove_btn/grove_btn_d21_inv.overlay @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2024 TiaC Systems + * SPDX-License-Identifier: Apache-2.0 + */ + +#include + +/ { + grove_btns { + status = "okay"; + + compatible = "gpio-keys"; + + grove_btn_d21: grove-btn-d21-inv { + label = "Grove Button D21 (inverted)"; + gpios = <&grove_gpios 21 (GPIO_PULL_DOWN | GPIO_ACTIVE_LOW)>; + }; + }; +}; diff --git a/boards/shields/grove_btn/grove_btn_d22_inv.overlay b/boards/shields/grove_btn/grove_btn_d22_inv.overlay new file mode 100644 index 0000000000..7adc291266 --- /dev/null +++ b/boards/shields/grove_btn/grove_btn_d22_inv.overlay @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2024 TiaC Systems + * SPDX-License-Identifier: Apache-2.0 + */ + +#include + +/ { + grove_btns { + status = "okay"; + + compatible = "gpio-keys"; + + grove_btn_d22: grove-btn-d22-inv { + label = "Grove Button D22 (inverted)"; + gpios = <&grove_gpios 22 (GPIO_PULL_DOWN | GPIO_ACTIVE_LOW)>; + }; + }; +}; diff --git a/boards/shields/grove_btn/grove_btn_d23_inv.overlay b/boards/shields/grove_btn/grove_btn_d23_inv.overlay new file mode 100644 index 0000000000..6e489171ab --- /dev/null +++ b/boards/shields/grove_btn/grove_btn_d23_inv.overlay @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2024 TiaC Systems + * SPDX-License-Identifier: Apache-2.0 + */ + +#include + +/ { + grove_btns { + status = "okay"; + + compatible = "gpio-keys"; + + grove_btn_d23: grove-btn-d23-inv { + label = "Grove Button D23 (inverted)"; + gpios = <&grove_gpios 23 (GPIO_PULL_DOWN | GPIO_ACTIVE_LOW)>; + }; + }; +}; diff --git a/boards/shields/grove_btn/grove_btn_d24_inv.overlay b/boards/shields/grove_btn/grove_btn_d24_inv.overlay new file mode 100644 index 0000000000..69723d670b --- /dev/null +++ b/boards/shields/grove_btn/grove_btn_d24_inv.overlay @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2024 TiaC Systems + * SPDX-License-Identifier: Apache-2.0 + */ + +#include + +/ { + grove_btns { + status = "okay"; + + compatible = "gpio-keys"; + + grove_btn_d24: grove-btn-d24-inv { + label = "Grove Button D24 (inverted)"; + gpios = <&grove_gpios 24 (GPIO_PULL_DOWN | GPIO_ACTIVE_LOW)>; + }; + }; +}; diff --git a/boards/shields/grove_btn/grove_btn_d25_inv.overlay b/boards/shields/grove_btn/grove_btn_d25_inv.overlay new file mode 100644 index 0000000000..d08a88353f --- /dev/null +++ b/boards/shields/grove_btn/grove_btn_d25_inv.overlay @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2024 TiaC Systems + * SPDX-License-Identifier: Apache-2.0 + */ + +#include + +/ { + grove_btns { + status = "okay"; + + compatible = "gpio-keys"; + + grove_btn_d25: grove-btn-d25-inv { + label = "Grove Button D25 (inverted)"; + gpios = <&grove_gpios 25 (GPIO_PULL_DOWN | GPIO_ACTIVE_LOW)>; + }; + }; +}; diff --git a/boards/shields/grove_btn/grove_btn_d26_inv.overlay b/boards/shields/grove_btn/grove_btn_d26_inv.overlay new file mode 100644 index 0000000000..035cb4ba5a --- /dev/null +++ b/boards/shields/grove_btn/grove_btn_d26_inv.overlay @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2024 TiaC Systems + * SPDX-License-Identifier: Apache-2.0 + */ + +#include + +/ { + grove_btns { + status = "okay"; + + compatible = "gpio-keys"; + + grove_btn_d26: grove-btn-d26-inv { + label = "Grove Button D26 (inverted)"; + gpios = <&grove_gpios 26 (GPIO_PULL_DOWN | GPIO_ACTIVE_LOW)>; + }; + }; +}; diff --git a/boards/shields/grove_btn/grove_btn_d27_inv.overlay b/boards/shields/grove_btn/grove_btn_d27_inv.overlay new file mode 100644 index 0000000000..aaaa535e59 --- /dev/null +++ b/boards/shields/grove_btn/grove_btn_d27_inv.overlay @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2024 TiaC Systems + * SPDX-License-Identifier: Apache-2.0 + */ + +#include + +/ { + grove_btns { + status = "okay"; + + compatible = "gpio-keys"; + + grove_btn_d27: grove-btn-d27-inv { + label = "Grove Button D27 (inverted)"; + gpios = <&grove_gpios 27 (GPIO_PULL_DOWN | GPIO_ACTIVE_LOW)>; + }; + }; +}; diff --git a/boards/shields/grove_btn/grove_btn_d28_inv.overlay b/boards/shields/grove_btn/grove_btn_d28_inv.overlay new file mode 100644 index 0000000000..6597797e21 --- /dev/null +++ b/boards/shields/grove_btn/grove_btn_d28_inv.overlay @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2024 TiaC Systems + * SPDX-License-Identifier: Apache-2.0 + */ + +#include + +/ { + grove_btns { + status = "okay"; + + compatible = "gpio-keys"; + + grove_btn_d28: grove-btn-d28-inv { + label = "Grove Button D28 (inverted)"; + gpios = <&grove_gpios 28 (GPIO_PULL_DOWN | GPIO_ACTIVE_LOW)>; + }; + }; +}; diff --git a/boards/shields/grove_btn/grove_btn_d29_inv.overlay b/boards/shields/grove_btn/grove_btn_d29_inv.overlay new file mode 100644 index 0000000000..81562f2108 --- /dev/null +++ b/boards/shields/grove_btn/grove_btn_d29_inv.overlay @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2024 TiaC Systems + * SPDX-License-Identifier: Apache-2.0 + */ + +#include + +/ { + grove_btns { + status = "okay"; + + compatible = "gpio-keys"; + + grove_btn_d29: grove-btn-d29-inv { + label = "Grove Button D29 (inverted)"; + gpios = <&grove_gpios 29 (GPIO_PULL_DOWN | GPIO_ACTIVE_LOW)>; + }; + }; +}; diff --git a/boards/shields/grove_btn/grove_btn_d2_inv.overlay b/boards/shields/grove_btn/grove_btn_d2_inv.overlay new file mode 100644 index 0000000000..bdf5cecaa5 --- /dev/null +++ b/boards/shields/grove_btn/grove_btn_d2_inv.overlay @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2024 TiaC Systems + * SPDX-License-Identifier: Apache-2.0 + */ + +#include + +/ { + grove_btns { + status = "okay"; + + compatible = "gpio-keys"; + + grove_btn_d2: grove-btn-d2-inv { + label = "Grove Button D2 (inverted)"; + gpios = <&grove_gpios 2 (GPIO_PULL_DOWN | GPIO_ACTIVE_LOW)>; + }; + }; +}; diff --git a/boards/shields/grove_btn/grove_btn_d30_inv.overlay b/boards/shields/grove_btn/grove_btn_d30_inv.overlay new file mode 100644 index 0000000000..a54cdb97fc --- /dev/null +++ b/boards/shields/grove_btn/grove_btn_d30_inv.overlay @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2024 TiaC Systems + * SPDX-License-Identifier: Apache-2.0 + */ + +#include + +/ { + grove_btns { + status = "okay"; + + compatible = "gpio-keys"; + + grove_btn_d30: grove-btn-d30-inv { + label = "Grove Button D30 (inverted)"; + gpios = <&grove_gpios 30 (GPIO_PULL_DOWN | GPIO_ACTIVE_LOW)>; + }; + }; +}; diff --git a/boards/shields/grove_btn/grove_btn_d31_inv.overlay b/boards/shields/grove_btn/grove_btn_d31_inv.overlay new file mode 100644 index 0000000000..ee16f6e8fd --- /dev/null +++ b/boards/shields/grove_btn/grove_btn_d31_inv.overlay @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2024 TiaC Systems + * SPDX-License-Identifier: Apache-2.0 + */ + +#include + +/ { + grove_btns { + status = "okay"; + + compatible = "gpio-keys"; + + grove_btn_d31: grove-btn-d31-inv { + label = "Grove Button D31 (inverted)"; + gpios = <&grove_gpios 31 (GPIO_PULL_DOWN | GPIO_ACTIVE_LOW)>; + }; + }; +}; diff --git a/boards/shields/grove_btn/grove_btn_d3_inv.overlay b/boards/shields/grove_btn/grove_btn_d3_inv.overlay new file mode 100644 index 0000000000..f69ab6c79d --- /dev/null +++ b/boards/shields/grove_btn/grove_btn_d3_inv.overlay @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2024 TiaC Systems + * SPDX-License-Identifier: Apache-2.0 + */ + +#include + +/ { + grove_btns { + status = "okay"; + + compatible = "gpio-keys"; + + grove_btn_d3: grove-btn-d3-inv { + label = "Grove Button D3 (inverted)"; + gpios = <&grove_gpios 3 (GPIO_PULL_DOWN | GPIO_ACTIVE_LOW)>; + }; + }; +}; diff --git a/boards/shields/grove_btn/grove_btn_d4_inv.overlay b/boards/shields/grove_btn/grove_btn_d4_inv.overlay new file mode 100644 index 0000000000..404592c5ea --- /dev/null +++ b/boards/shields/grove_btn/grove_btn_d4_inv.overlay @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2024 TiaC Systems + * SPDX-License-Identifier: Apache-2.0 + */ + +#include + +/ { + grove_btns { + status = "okay"; + + compatible = "gpio-keys"; + + grove_btn_d4: grove-btn-d4-inv { + label = "Grove Button D4 (inverted)"; + gpios = <&grove_gpios 4 (GPIO_PULL_DOWN | GPIO_ACTIVE_LOW)>; + }; + }; +}; diff --git a/boards/shields/grove_btn/grove_btn_d5_inv.overlay b/boards/shields/grove_btn/grove_btn_d5_inv.overlay new file mode 100644 index 0000000000..25aea19c4a --- /dev/null +++ b/boards/shields/grove_btn/grove_btn_d5_inv.overlay @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2024 TiaC Systems + * SPDX-License-Identifier: Apache-2.0 + */ + +#include + +/ { + grove_btns { + status = "okay"; + + compatible = "gpio-keys"; + + grove_btn_d5: grove-btn-d5-inv { + label = "Grove Button D5 (inverted)"; + gpios = <&grove_gpios 5 (GPIO_PULL_DOWN | GPIO_ACTIVE_LOW)>; + }; + }; +}; diff --git a/boards/shields/grove_btn/grove_btn_d6_inv.overlay b/boards/shields/grove_btn/grove_btn_d6_inv.overlay new file mode 100644 index 0000000000..597da72766 --- /dev/null +++ b/boards/shields/grove_btn/grove_btn_d6_inv.overlay @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2024 TiaC Systems + * SPDX-License-Identifier: Apache-2.0 + */ + +#include + +/ { + grove_btns { + status = "okay"; + + compatible = "gpio-keys"; + + grove_btn_d6: grove-btn-d6-inv { + label = "Grove Button D6 (inverted)"; + gpios = <&grove_gpios 6 (GPIO_PULL_DOWN | GPIO_ACTIVE_LOW)>; + }; + }; +}; diff --git a/boards/shields/grove_btn/grove_btn_d7_inv.overlay b/boards/shields/grove_btn/grove_btn_d7_inv.overlay new file mode 100644 index 0000000000..1b02601d52 --- /dev/null +++ b/boards/shields/grove_btn/grove_btn_d7_inv.overlay @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2024 TiaC Systems + * SPDX-License-Identifier: Apache-2.0 + */ + +#include + +/ { + grove_btns { + status = "okay"; + + compatible = "gpio-keys"; + + grove_btn_d7: grove-btn-d7-inv { + label = "Grove Button D7 (inverted)"; + gpios = <&grove_gpios 7 (GPIO_PULL_DOWN | GPIO_ACTIVE_LOW)>; + }; + }; +}; diff --git a/boards/shields/grove_btn/grove_btn_d8_inv.overlay b/boards/shields/grove_btn/grove_btn_d8_inv.overlay new file mode 100644 index 0000000000..1265ecaa75 --- /dev/null +++ b/boards/shields/grove_btn/grove_btn_d8_inv.overlay @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2024 TiaC Systems + * SPDX-License-Identifier: Apache-2.0 + */ + +#include + +/ { + grove_btns { + status = "okay"; + + compatible = "gpio-keys"; + + grove_btn_d8: grove-btn-d8-inv { + label = "Grove Button D8 (inverted)"; + gpios = <&grove_gpios 8 (GPIO_PULL_DOWN | GPIO_ACTIVE_LOW)>; + }; + }; +}; diff --git a/boards/shields/grove_btn/grove_btn_d9_inv.overlay b/boards/shields/grove_btn/grove_btn_d9_inv.overlay new file mode 100644 index 0000000000..dbd7d11a0b --- /dev/null +++ b/boards/shields/grove_btn/grove_btn_d9_inv.overlay @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2024 TiaC Systems + * SPDX-License-Identifier: Apache-2.0 + */ + +#include + +/ { + grove_btns { + status = "okay"; + + compatible = "gpio-keys"; + + grove_btn_d9: grove-btn-d9-inv { + label = "Grove Button D9 (inverted)"; + gpios = <&grove_gpios 9 (GPIO_PULL_DOWN | GPIO_ACTIVE_LOW)>; + }; + }; +}; From f9bab16adb3590d943a99d4932ceab33ff0bf275 Mon Sep 17 00:00:00 2001 From: Stephan Linz Date: Sun, 24 Nov 2024 17:54:02 +0100 Subject: [PATCH 5/7] shields: x_grove_testbed: add Mini USB RP2024 Prepares the Grove testbed for the new upcoming board "Mini USB RP2024" by UICPAL, AliExpress store. Signed-off-by: Stephan Linz --- .../x_grove_testbed/boards/mini_usb_rp2040.overlay | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 boards/shields/x_grove_testbed/boards/mini_usb_rp2040.overlay diff --git a/boards/shields/x_grove_testbed/boards/mini_usb_rp2040.overlay b/boards/shields/x_grove_testbed/boards/mini_usb_rp2040.overlay new file mode 100644 index 0000000000..02cec32430 --- /dev/null +++ b/boards/shields/x_grove_testbed/boards/mini_usb_rp2040.overlay @@ -0,0 +1,12 @@ +/* + * Copyright (c) 2024 TiaC Systems + * SPDX-License-Identifier: Apache-2.0 + */ + +/ { + aliases { + pwm-led0 = &grove_pwm_led_d17; + led0 = &grove_led_d17; + sw0 = &grove_btn_d16; + }; +}; From 0b09e9f0d4e2881df9b09871a7ed31772e98dec4 Mon Sep 17 00:00:00 2001 From: Stephan Linz Date: Sun, 24 Nov 2024 22:00:03 +0100 Subject: [PATCH 6/7] tests: grove: btn: support support inverted input With the new "Grove LED Button" module, the Grove Button Shield also supports low-active buttons that require further testing. Signed-off-by: Stephan Linz --- tests/quarantine.yaml | 98 +++ .../grove_btn/dts_bindings/CMakeLists.txt | 71 +- .../grove_btn/dts_bindings/testcase.yaml | 754 +++++++++++++++++- 3 files changed, 887 insertions(+), 36 deletions(-) diff --git a/tests/quarantine.yaml b/tests/quarantine.yaml index 16e197c859..d026729d46 100644 --- a/tests/quarantine.yaml +++ b/tests/quarantine.yaml @@ -356,11 +356,17 @@ - waveshare_rp2040_eth/rp2040 scenarios: - grove.rpipico.v1.grove_btn.gpio.d16 + - grove.rpipico.v1.grove_btn.gpio.d16.inv - grove.rpipico.v1.grove_btn.gpio.d17 + - grove.rpipico.v1.grove_btn.gpio.d17.inv - grove.rpipico.v1.grove_btn.gpio.d18 + - grove.rpipico.v1.grove_btn.gpio.d18.inv - grove.rpipico.v1.grove_btn.gpio.d19 + - grove.rpipico.v1.grove_btn.gpio.d19.inv - grove.rpipico.v1.grove_btn.gpio.d20 + - grove.rpipico.v1.grove_btn.gpio.d20.inv - grove.rpipico.v1.grove_btn.gpio.d21 + - grove.rpipico.v1.grove_btn.gpio.d21.inv # Grove Connectors (directly) On-Board @@ -396,112 +402,204 @@ - seeeduino_cm0/samd21g18a scenarios: - grove.connectors.grove_btn.gpio.d2 + - grove.connectors.grove_btn.gpio.d2.inv - grove.connectors.grove_btn.gpio.d3 + - grove.connectors.grove_btn.gpio.d3.inv - grove.connectors.grove_btn.gpio.d4 + - grove.connectors.grove_btn.gpio.d4.inv - grove.connectors.grove_btn.gpio.d5 + - grove.connectors.grove_btn.gpio.d5.inv - grove.connectors.grove_btn.gpio.d6 + - grove.connectors.grove_btn.gpio.d6.inv - grove.connectors.grove_btn.gpio.d7 + - grove.connectors.grove_btn.gpio.d7.inv - grove.connectors.grove_btn.gpio.d8 + - grove.connectors.grove_btn.gpio.d8.inv - grove.connectors.grove_btn.gpio.d9 + - grove.connectors.grove_btn.gpio.d9.inv - grove.connectors.grove_btn.gpio.d10 + - grove.connectors.grove_btn.gpio.d10.inv - grove.connectors.grove_btn.gpio.d11 + - grove.connectors.grove_btn.gpio.d11.inv - grove.connectors.grove_btn.gpio.d12 + - grove.connectors.grove_btn.gpio.d12.inv - grove.connectors.grove_btn.gpio.d13 + - grove.connectors.grove_btn.gpio.d13.inv - grove.connectors.grove_btn.gpio.d14 + - grove.connectors.grove_btn.gpio.d14.inv - grove.connectors.grove_btn.gpio.d15 + - grove.connectors.grove_btn.gpio.d15.inv - grove.connectors.grove_btn.gpio.d16 + - grove.connectors.grove_btn.gpio.d16.inv - grove.connectors.grove_btn.gpio.d17 + - grove.connectors.grove_btn.gpio.d17.inv - grove.connectors.grove_btn.gpio.d20 + - grove.connectors.grove_btn.gpio.d20.inv - grove.connectors.grove_btn.gpio.d21 + - grove.connectors.grove_btn.gpio.d21.inv - grove.connectors.grove_btn.gpio.d22 + - grove.connectors.grove_btn.gpio.d22.inv - grove.connectors.grove_btn.gpio.d23 + - grove.connectors.grove_btn.gpio.d23.inv - grove.connectors.grove_btn.gpio.d24 + - grove.connectors.grove_btn.gpio.d24.inv - grove.connectors.grove_btn.gpio.d25 + - grove.connectors.grove_btn.gpio.d25.inv - grove.connectors.grove_btn.gpio.d26 + - grove.connectors.grove_btn.gpio.d26.inv - grove.connectors.grove_btn.gpio.d27 + - grove.connectors.grove_btn.gpio.d27.inv - grove.connectors.grove_btn.gpio.d28 + - grove.connectors.grove_btn.gpio.d28.inv - grove.connectors.grove_btn.gpio.d29 + - grove.connectors.grove_btn.gpio.d29.inv - grove.connectors.grove_btn.gpio.d30 + - grove.connectors.grove_btn.gpio.d30.inv - grove.connectors.grove_btn.gpio.d31 + - grove.connectors.grove_btn.gpio.d31.inv - comment: "shield(grove.connectors.grove_btn): seeeduino_lotus: invalid board condition." platforms: - seeeduino_lotus/samd21g18a scenarios: - grove.connectors.grove_btn.gpio.d9 + - grove.connectors.grove_btn.gpio.d9.inv - grove.connectors.grove_btn.gpio.d10 + - grove.connectors.grove_btn.gpio.d10.inv - grove.connectors.grove_btn.gpio.d11 + - grove.connectors.grove_btn.gpio.d11.inv - grove.connectors.grove_btn.gpio.d12 + - grove.connectors.grove_btn.gpio.d12.inv - grove.connectors.grove_btn.gpio.d13 + - grove.connectors.grove_btn.gpio.d13.inv - grove.connectors.grove_btn.gpio.d20 + - grove.connectors.grove_btn.gpio.d20.inv - grove.connectors.grove_btn.gpio.d21 + - grove.connectors.grove_btn.gpio.d21.inv - grove.connectors.grove_btn.gpio.d22 + - grove.connectors.grove_btn.gpio.d22.inv - grove.connectors.grove_btn.gpio.d23 + - grove.connectors.grove_btn.gpio.d23.inv - grove.connectors.grove_btn.gpio.d24 + - grove.connectors.grove_btn.gpio.d24.inv - grove.connectors.grove_btn.gpio.d25 + - grove.connectors.grove_btn.gpio.d25.inv - grove.connectors.grove_btn.gpio.d26 + - grove.connectors.grove_btn.gpio.d26.inv - grove.connectors.grove_btn.gpio.d27 + - grove.connectors.grove_btn.gpio.d27.inv - grove.connectors.grove_btn.gpio.d28 + - grove.connectors.grove_btn.gpio.d28.inv - grove.connectors.grove_btn.gpio.d29 + - grove.connectors.grove_btn.gpio.d29.inv - grove.connectors.grove_btn.gpio.d30 + - grove.connectors.grove_btn.gpio.d30.inv - grove.connectors.grove_btn.gpio.d31 + - grove.connectors.grove_btn.gpio.d31.inv - comment: "shield(grove.connectors.grove_btn): cytron_maker_nano_rp2040: invalid board condition." platforms: - cytron_maker_nano_rp2040/rp2040 scenarios: - grove.connectors.grove_btn.gpio.d2 + - grove.connectors.grove_btn.gpio.d2.inv - grove.connectors.grove_btn.gpio.d3 + - grove.connectors.grove_btn.gpio.d3.inv - grove.connectors.grove_btn.gpio.d4 + - grove.connectors.grove_btn.gpio.d4.inv - grove.connectors.grove_btn.gpio.d5 + - grove.connectors.grove_btn.gpio.d5.inv - grove.connectors.grove_btn.gpio.d6 + - grove.connectors.grove_btn.gpio.d6.inv - grove.connectors.grove_btn.gpio.d7 + - grove.connectors.grove_btn.gpio.d7.inv - grove.connectors.grove_btn.gpio.d8 + - grove.connectors.grove_btn.gpio.d8.inv - grove.connectors.grove_btn.gpio.d9 + - grove.connectors.grove_btn.gpio.d9.inv - grove.connectors.grove_btn.gpio.d10 + - grove.connectors.grove_btn.gpio.d10.inv - grove.connectors.grove_btn.gpio.d11 + - grove.connectors.grove_btn.gpio.d11.inv - grove.connectors.grove_btn.gpio.d12 + - grove.connectors.grove_btn.gpio.d12.inv - grove.connectors.grove_btn.gpio.d13 + - grove.connectors.grove_btn.gpio.d13.inv - grove.connectors.grove_btn.gpio.d16 + - grove.connectors.grove_btn.gpio.d16.inv - grove.connectors.grove_btn.gpio.d17 + - grove.connectors.grove_btn.gpio.d17.inv - grove.connectors.grove_btn.gpio.d18 + - grove.connectors.grove_btn.gpio.d18.inv - grove.connectors.grove_btn.gpio.d19 + - grove.connectors.grove_btn.gpio.d19.inv - grove.connectors.grove_btn.gpio.d20 + - grove.connectors.grove_btn.gpio.d20.inv - grove.connectors.grove_btn.gpio.d21 + - grove.connectors.grove_btn.gpio.d21.inv - grove.connectors.grove_btn.gpio.d22 + - grove.connectors.grove_btn.gpio.d22.inv - grove.connectors.grove_btn.gpio.d23 + - grove.connectors.grove_btn.gpio.d23.inv - grove.connectors.grove_btn.gpio.d24 + - grove.connectors.grove_btn.gpio.d24.inv - grove.connectors.grove_btn.gpio.d25 + - grove.connectors.grove_btn.gpio.d25.inv - grove.connectors.grove_btn.gpio.d26 + - grove.connectors.grove_btn.gpio.d26.inv - grove.connectors.grove_btn.gpio.d27 + - grove.connectors.grove_btn.gpio.d27.inv - grove.connectors.grove_btn.gpio.d28 + - grove.connectors.grove_btn.gpio.d28.inv - grove.connectors.grove_btn.gpio.d29 + - grove.connectors.grove_btn.gpio.d29.inv - grove.connectors.grove_btn.gpio.d30 + - grove.connectors.grove_btn.gpio.d30.inv - grove.connectors.grove_btn.gpio.d31 + - grove.connectors.grove_btn.gpio.d31.inv - comment: "shield(grove.connectors.grove_btn): cytron_maker_pi_rp2040: invalid board condition." platforms: - cytron_maker_pi_rp2040/rp2040 scenarios: - grove.connectors.grove_btn.gpio.d8 + - grove.connectors.grove_btn.gpio.d8.inv - grove.connectors.grove_btn.gpio.d9 + - grove.connectors.grove_btn.gpio.d9.inv - grove.connectors.grove_btn.gpio.d10 + - grove.connectors.grove_btn.gpio.d10.inv - grove.connectors.grove_btn.gpio.d11 + - grove.connectors.grove_btn.gpio.d11.inv - grove.connectors.grove_btn.gpio.d12 + - grove.connectors.grove_btn.gpio.d12.inv - grove.connectors.grove_btn.gpio.d13 + - grove.connectors.grove_btn.gpio.d13.inv - grove.connectors.grove_btn.gpio.d14 + - grove.connectors.grove_btn.gpio.d14.inv - grove.connectors.grove_btn.gpio.d15 + - grove.connectors.grove_btn.gpio.d15.inv - grove.connectors.grove_btn.gpio.d18 + - grove.connectors.grove_btn.gpio.d18.inv - grove.connectors.grove_btn.gpio.d19 + - grove.connectors.grove_btn.gpio.d19.inv - grove.connectors.grove_btn.gpio.d20 + - grove.connectors.grove_btn.gpio.d20.inv - grove.connectors.grove_btn.gpio.d21 + - grove.connectors.grove_btn.gpio.d21.inv - grove.connectors.grove_btn.gpio.d22 + - grove.connectors.grove_btn.gpio.d22.inv - grove.connectors.grove_btn.gpio.d23 + - grove.connectors.grove_btn.gpio.d23.inv - grove.connectors.grove_btn.gpio.d24 + - grove.connectors.grove_btn.gpio.d24.inv - grove.connectors.grove_btn.gpio.d25 + - grove.connectors.grove_btn.gpio.d25.inv - grove.connectors.grove_btn.gpio.d29 + - grove.connectors.grove_btn.gpio.d29.inv - grove.connectors.grove_btn.gpio.d30 + - grove.connectors.grove_btn.gpio.d30.inv - grove.connectors.grove_btn.gpio.d31 + - grove.connectors.grove_btn.gpio.d31.inv ############################################################################## # diff --git a/tests/shields/grove_btn/dts_bindings/CMakeLists.txt b/tests/shields/grove_btn/dts_bindings/CMakeLists.txt index ef1b7eae40..f0b3b01036 100644 --- a/tests/shields/grove_btn/dts_bindings/CMakeLists.txt +++ b/tests/shields/grove_btn/dts_bindings/CMakeLists.txt @@ -8,12 +8,13 @@ project(grove_btn_shields) target_sources(app PRIVATE src/main.c) -function(test_if config node_parent node_label node_dscr) +function(test_if config node_parent node_label node_dscr node_alt_dscr) if(${config}) dt_nodelabel(node_path NODELABEL "${node_label}") if(DEFINED node_path AND "${node_path}" MATCHES "${node_parent}") dt_prop(node_prop PATH "${node_path}" PROPERTY "label") - if(DEFINED node_prop AND "${node_prop}" STREQUAL "${node_dscr}") + if(DEFINED node_prop AND ("${node_prop}" STREQUAL "${node_dscr}" + OR "${node_prop}" STREQUAL "${node_alt_dscr}")) message(STATUS "Found label \"${node_label}\" at \"${node_path}\" " "as \"${node_prop}\"") else() @@ -21,7 +22,7 @@ function(test_if config node_parent node_label node_dscr) "actual either " "the node path \"${node_path}\" at label \"${node_label}\" " "was not found or has no \"label\" property with \"${node_dscr}\" or " - "the node labels are missing or misspelled." + "\"${node_alt_dscr}\" or the node labels are missing or misspelled." ) endif() else() @@ -48,35 +49,35 @@ endif() # ) #endif() -test_if(CONFIG_SHIELD_GROVE_BTN_D0 "/grove_btns" "grove_btn_d0" "Grove Button D0") -test_if(CONFIG_SHIELD_GROVE_BTN_D1 "/grove_btns" "grove_btn_d1" "Grove Button D1") -test_if(CONFIG_SHIELD_GROVE_BTN_D2 "/grove_btns" "grove_btn_d2" "Grove Button D2") -test_if(CONFIG_SHIELD_GROVE_BTN_D3 "/grove_btns" "grove_btn_d3" "Grove Button D3") -test_if(CONFIG_SHIELD_GROVE_BTN_D4 "/grove_btns" "grove_btn_d4" "Grove Button D4") -test_if(CONFIG_SHIELD_GROVE_BTN_D5 "/grove_btns" "grove_btn_d5" "Grove Button D5") -test_if(CONFIG_SHIELD_GROVE_BTN_D6 "/grove_btns" "grove_btn_d6" "Grove Button D6") -test_if(CONFIG_SHIELD_GROVE_BTN_D7 "/grove_btns" "grove_btn_d7" "Grove Button D7") -test_if(CONFIG_SHIELD_GROVE_BTN_D8 "/grove_btns" "grove_btn_d8" "Grove Button D8") -test_if(CONFIG_SHIELD_GROVE_BTN_D9 "/grove_btns" "grove_btn_d9" "Grove Button D9") -test_if(CONFIG_SHIELD_GROVE_BTN_D10 "/grove_btns" "grove_btn_d10" "Grove Button D10") -test_if(CONFIG_SHIELD_GROVE_BTN_D11 "/grove_btns" "grove_btn_d11" "Grove Button D11") -test_if(CONFIG_SHIELD_GROVE_BTN_D12 "/grove_btns" "grove_btn_d12" "Grove Button D12") -test_if(CONFIG_SHIELD_GROVE_BTN_D13 "/grove_btns" "grove_btn_d13" "Grove Button D13") -test_if(CONFIG_SHIELD_GROVE_BTN_D14 "/grove_btns" "grove_btn_d14" "Grove Button D14") -test_if(CONFIG_SHIELD_GROVE_BTN_D15 "/grove_btns" "grove_btn_d15" "Grove Button D15") -test_if(CONFIG_SHIELD_GROVE_BTN_D16 "/grove_btns" "grove_btn_d16" "Grove Button D16") -test_if(CONFIG_SHIELD_GROVE_BTN_D17 "/grove_btns" "grove_btn_d17" "Grove Button D17") -test_if(CONFIG_SHIELD_GROVE_BTN_D18 "/grove_btns" "grove_btn_d18" "Grove Button D18") -test_if(CONFIG_SHIELD_GROVE_BTN_D19 "/grove_btns" "grove_btn_d19" "Grove Button D19") -test_if(CONFIG_SHIELD_GROVE_BTN_D20 "/grove_btns" "grove_btn_d20" "Grove Button D20") -test_if(CONFIG_SHIELD_GROVE_BTN_D21 "/grove_btns" "grove_btn_d21" "Grove Button D21") -test_if(CONFIG_SHIELD_GROVE_BTN_D22 "/grove_btns" "grove_btn_d22" "Grove Button D22") -test_if(CONFIG_SHIELD_GROVE_BTN_D23 "/grove_btns" "grove_btn_d23" "Grove Button D23") -test_if(CONFIG_SHIELD_GROVE_BTN_D24 "/grove_btns" "grove_btn_d24" "Grove Button D24") -test_if(CONFIG_SHIELD_GROVE_BTN_D25 "/grove_btns" "grove_btn_d25" "Grove Button D25") -test_if(CONFIG_SHIELD_GROVE_BTN_D26 "/grove_btns" "grove_btn_d26" "Grove Button D26") -test_if(CONFIG_SHIELD_GROVE_BTN_D27 "/grove_btns" "grove_btn_d27" "Grove Button D27") -test_if(CONFIG_SHIELD_GROVE_BTN_D28 "/grove_btns" "grove_btn_d28" "Grove Button D28") -test_if(CONFIG_SHIELD_GROVE_BTN_D29 "/grove_btns" "grove_btn_d29" "Grove Button D29") -test_if(CONFIG_SHIELD_GROVE_BTN_D30 "/grove_btns" "grove_btn_d30" "Grove Button D30") -test_if(CONFIG_SHIELD_GROVE_BTN_D31 "/grove_btns" "grove_btn_d31" "Grove Button D31") +test_if(CONFIG_SHIELD_GROVE_BTN_D0 "/grove_btns" "grove_btn_d0" "Grove Button D0" "Grove Button D0 (inverted)") +test_if(CONFIG_SHIELD_GROVE_BTN_D1 "/grove_btns" "grove_btn_d1" "Grove Button D1" "Grove Button D1 (inverted)") +test_if(CONFIG_SHIELD_GROVE_BTN_D2 "/grove_btns" "grove_btn_d2" "Grove Button D2" "Grove Button D2 (inverted)") +test_if(CONFIG_SHIELD_GROVE_BTN_D3 "/grove_btns" "grove_btn_d3" "Grove Button D3" "Grove Button D3 (inverted)") +test_if(CONFIG_SHIELD_GROVE_BTN_D4 "/grove_btns" "grove_btn_d4" "Grove Button D4" "Grove Button D4 (inverted)") +test_if(CONFIG_SHIELD_GROVE_BTN_D5 "/grove_btns" "grove_btn_d5" "Grove Button D5" "Grove Button D5 (inverted)") +test_if(CONFIG_SHIELD_GROVE_BTN_D6 "/grove_btns" "grove_btn_d6" "Grove Button D6" "Grove Button D6 (inverted)") +test_if(CONFIG_SHIELD_GROVE_BTN_D7 "/grove_btns" "grove_btn_d7" "Grove Button D7" "Grove Button D7 (inverted)") +test_if(CONFIG_SHIELD_GROVE_BTN_D8 "/grove_btns" "grove_btn_d8" "Grove Button D8" "Grove Button D8 (inverted)") +test_if(CONFIG_SHIELD_GROVE_BTN_D9 "/grove_btns" "grove_btn_d9" "Grove Button D9" "Grove Button D9 (inverted)") +test_if(CONFIG_SHIELD_GROVE_BTN_D10 "/grove_btns" "grove_btn_d10" "Grove Button D10" "Grove Button D10 (inverted)") +test_if(CONFIG_SHIELD_GROVE_BTN_D11 "/grove_btns" "grove_btn_d11" "Grove Button D11" "Grove Button D11 (inverted)") +test_if(CONFIG_SHIELD_GROVE_BTN_D12 "/grove_btns" "grove_btn_d12" "Grove Button D12" "Grove Button D12 (inverted)") +test_if(CONFIG_SHIELD_GROVE_BTN_D13 "/grove_btns" "grove_btn_d13" "Grove Button D13" "Grove Button D13 (inverted)") +test_if(CONFIG_SHIELD_GROVE_BTN_D14 "/grove_btns" "grove_btn_d14" "Grove Button D14" "Grove Button D14 (inverted)") +test_if(CONFIG_SHIELD_GROVE_BTN_D15 "/grove_btns" "grove_btn_d15" "Grove Button D15" "Grove Button D15 (inverted)") +test_if(CONFIG_SHIELD_GROVE_BTN_D16 "/grove_btns" "grove_btn_d16" "Grove Button D16" "Grove Button D16 (inverted)") +test_if(CONFIG_SHIELD_GROVE_BTN_D17 "/grove_btns" "grove_btn_d17" "Grove Button D17" "Grove Button D17 (inverted)") +test_if(CONFIG_SHIELD_GROVE_BTN_D18 "/grove_btns" "grove_btn_d18" "Grove Button D18" "Grove Button D18 (inverted)") +test_if(CONFIG_SHIELD_GROVE_BTN_D19 "/grove_btns" "grove_btn_d19" "Grove Button D19" "Grove Button D19 (inverted)") +test_if(CONFIG_SHIELD_GROVE_BTN_D20 "/grove_btns" "grove_btn_d20" "Grove Button D20" "Grove Button D20 (inverted)") +test_if(CONFIG_SHIELD_GROVE_BTN_D21 "/grove_btns" "grove_btn_d21" "Grove Button D21" "Grove Button D21 (inverted)") +test_if(CONFIG_SHIELD_GROVE_BTN_D22 "/grove_btns" "grove_btn_d22" "Grove Button D22" "Grove Button D22 (inverted)") +test_if(CONFIG_SHIELD_GROVE_BTN_D23 "/grove_btns" "grove_btn_d23" "Grove Button D23" "Grove Button D23 (inverted)") +test_if(CONFIG_SHIELD_GROVE_BTN_D24 "/grove_btns" "grove_btn_d24" "Grove Button D24" "Grove Button D24 (inverted)") +test_if(CONFIG_SHIELD_GROVE_BTN_D25 "/grove_btns" "grove_btn_d25" "Grove Button D25" "Grove Button D25 (inverted)") +test_if(CONFIG_SHIELD_GROVE_BTN_D26 "/grove_btns" "grove_btn_d26" "Grove Button D26" "Grove Button D26 (inverted)") +test_if(CONFIG_SHIELD_GROVE_BTN_D27 "/grove_btns" "grove_btn_d27" "Grove Button D27" "Grove Button D27 (inverted)") +test_if(CONFIG_SHIELD_GROVE_BTN_D28 "/grove_btns" "grove_btn_d28" "Grove Button D28" "Grove Button D28 (inverted)") +test_if(CONFIG_SHIELD_GROVE_BTN_D29 "/grove_btns" "grove_btn_d29" "Grove Button D29" "Grove Button D29 (inverted)") +test_if(CONFIG_SHIELD_GROVE_BTN_D30 "/grove_btns" "grove_btn_d30" "Grove Button D30" "Grove Button D30 (inverted)") +test_if(CONFIG_SHIELD_GROVE_BTN_D31 "/grove_btns" "grove_btn_d31" "Grove Button D31" "Grove Button D31 (inverted)") diff --git a/tests/shields/grove_btn/dts_bindings/testcase.yaml b/tests/shields/grove_btn/dts_bindings/testcase.yaml index 628aab1832..dd29d7d964 100644 --- a/tests/shields/grove_btn/dts_bindings/testcase.yaml +++ b/tests/shields/grove_btn/dts_bindings/testcase.yaml @@ -60,18 +60,36 @@ tests: dt_nodelabel_enabled("grove_uart_header") and dt_label_with_parent_compat_enabled("grove_btn_d0", "gpio-keys") extra_args: SHIELD=seeed_grove_base_v2;grove_btn_d0 + grove.base.v2.grove_btn.gpio.d0.inv: + depends_on: arduino_gpio + filter: dt_nodelabel_enabled("grove_d0_header") and + dt_nodelabel_enabled("grove_uart_header") and + dt_label_with_parent_compat_enabled("grove_btn_d0", "gpio-keys") + extra_args: SHIELD=seeed_grove_base_v2;grove_btn_d0_inv grove.base.v1.grove_btn.gpio.d0: depends_on: arduino_gpio filter: ( dt_nodelabel_enabled("grove_d0_header") or dt_nodelabel_enabled("grove_uart_header") ) and dt_label_with_parent_compat_enabled("grove_btn_d0", "gpio-keys") extra_args: SHIELD=seeed_grove_base_v1;grove_btn_d0 + grove.base.v1.grove_btn.gpio.d0.inv: + depends_on: arduino_gpio + filter: ( dt_nodelabel_enabled("grove_d0_header") or + dt_nodelabel_enabled("grove_uart_header") ) and + dt_label_with_parent_compat_enabled("grove_btn_d0", "gpio-keys") + extra_args: SHIELD=seeed_grove_base_v1;grove_btn_d0_inv grove.base.v2.grove_btn.gpio.d1: depends_on: arduino_gpio filter: dt_nodelabel_enabled("grove_d0_header") and dt_nodelabel_enabled("grove_uart_header") and dt_label_with_parent_compat_enabled("grove_btn_d1", "gpio-keys") extra_args: SHIELD=seeed_grove_base_v2;grove_btn_d1 + grove.base.v2.grove_btn.gpio.d1.inv: + depends_on: arduino_gpio + filter: dt_nodelabel_enabled("grove_d0_header") and + dt_nodelabel_enabled("grove_uart_header") and + dt_label_with_parent_compat_enabled("grove_btn_d1", "gpio-keys") + extra_args: SHIELD=seeed_grove_base_v2;grove_btn_d1_inv grove.base.v1.grove_btn.gpio.d1: depends_on: arduino_gpio filter: ( dt_nodelabel_enabled("grove_d1_header") or @@ -79,53 +97,107 @@ tests: dt_nodelabel_enabled("grove_uart_header") ) and dt_label_with_parent_compat_enabled("grove_btn_d1", "gpio-keys") extra_args: SHIELD=seeed_grove_base_v1;grove_btn_d1 + grove.base.v1.grove_btn.gpio.d1.inv: + depends_on: arduino_gpio + filter: ( dt_nodelabel_enabled("grove_d1_header") or + dt_nodelabel_enabled("grove_d0_header") or + dt_nodelabel_enabled("grove_uart_header") ) and + dt_label_with_parent_compat_enabled("grove_btn_d1", "gpio-keys") + extra_args: SHIELD=seeed_grove_base_v1;grove_btn_d1_inv grove.base.v2.grove_btn.gpio.d2: depends_on: arduino_gpio filter: dt_nodelabel_enabled("grove_d2_header") and dt_label_with_parent_compat_enabled("grove_btn_d2", "gpio-keys") extra_args: SHIELD=seeed_grove_base_v2;grove_btn_d2 + grove.base.v2.grove_btn.gpio.d2.inv: + depends_on: arduino_gpio + filter: dt_nodelabel_enabled("grove_d2_header") and + dt_label_with_parent_compat_enabled("grove_btn_d2", "gpio-keys") + extra_args: SHIELD=seeed_grove_base_v2;grove_btn_d2_inv grove.base.v1.grove_btn.gpio.d2: depends_on: arduino_gpio filter: ( dt_nodelabel_enabled("grove_d2_header") or dt_nodelabel_enabled("grove_d1_header") ) and dt_label_with_parent_compat_enabled("grove_btn_d2", "gpio-keys") extra_args: SHIELD=seeed_grove_base_v1;grove_btn_d2 + grove.base.v1.grove_btn.gpio.d2.inv: + depends_on: arduino_gpio + filter: ( dt_nodelabel_enabled("grove_d2_header") or + dt_nodelabel_enabled("grove_d1_header") ) and + dt_label_with_parent_compat_enabled("grove_btn_d2", "gpio-keys") + extra_args: SHIELD=seeed_grove_base_v1;grove_btn_d2_inv grove.base.v2.grove_btn.gpio.d3: depends_on: arduino_gpio filter: ( dt_nodelabel_enabled("grove_d3_header") or dt_nodelabel_enabled("grove_d2_header") ) and dt_label_with_parent_compat_enabled("grove_btn_d3", "gpio-keys") extra_args: SHIELD=seeed_grove_base_v2;grove_btn_d3 + grove.base.v2.grove_btn.gpio.d3.inv: + depends_on: arduino_gpio + filter: ( dt_nodelabel_enabled("grove_d3_header") or + dt_nodelabel_enabled("grove_d2_header") ) and + dt_label_with_parent_compat_enabled("grove_btn_d3", "gpio-keys") + extra_args: SHIELD=seeed_grove_base_v2;grove_btn_d3_inv grove.base.v1.grove_btn.gpio.d3: depends_on: arduino_gpio filter: ( dt_nodelabel_enabled("grove_d3_header") or dt_nodelabel_enabled("grove_d2_header") ) and dt_label_with_parent_compat_enabled("grove_btn_d3", "gpio-keys") extra_args: SHIELD=seeed_grove_base_v1;grove_btn_d3 + grove.base.v1.grove_btn.gpio.d3.inv: + depends_on: arduino_gpio + filter: ( dt_nodelabel_enabled("grove_d3_header") or + dt_nodelabel_enabled("grove_d2_header") ) and + dt_label_with_parent_compat_enabled("grove_btn_d3", "gpio-keys") + extra_args: SHIELD=seeed_grove_base_v1;grove_btn_d3_inv grove.base.v2.grove_btn.gpio.d4: depends_on: arduino_gpio filter: ( dt_nodelabel_enabled("grove_d4_header") or dt_nodelabel_enabled("grove_d3_header") ) and dt_label_with_parent_compat_enabled("grove_btn_d4", "gpio-keys") extra_args: SHIELD=seeed_grove_base_v2;grove_btn_d4 + grove.base.v2.grove_btn.gpio.d4.inv: + depends_on: arduino_gpio + filter: ( dt_nodelabel_enabled("grove_d4_header") or + dt_nodelabel_enabled("grove_d3_header") ) and + dt_label_with_parent_compat_enabled("grove_btn_d4", "gpio-keys") + extra_args: SHIELD=seeed_grove_base_v2;grove_btn_d4_inv grove.base.v1.grove_btn.gpio.d4: depends_on: arduino_gpio filter: ( dt_nodelabel_enabled("grove_d4_header") or dt_nodelabel_enabled("grove_d3_header") ) and dt_label_with_parent_compat_enabled("grove_btn_d4", "gpio-keys") extra_args: SHIELD=seeed_grove_base_v1;grove_btn_d4 + grove.base.v1.grove_btn.gpio.d4.inv: + depends_on: arduino_gpio + filter: ( dt_nodelabel_enabled("grove_d4_header") or + dt_nodelabel_enabled("grove_d3_header") ) and + dt_label_with_parent_compat_enabled("grove_btn_d4", "gpio-keys") + extra_args: SHIELD=seeed_grove_base_v1;grove_btn_d4_inv grove.base.v2.grove_btn.gpio.d5: depends_on: arduino_gpio filter: ( dt_nodelabel_enabled("grove_d5_header") or dt_nodelabel_enabled("grove_d4_header") ) and dt_label_with_parent_compat_enabled("grove_btn_d5", "gpio-keys") extra_args: SHIELD=seeed_grove_base_v2;grove_btn_d5 + grove.base.v2.grove_btn.gpio.d5.inv: + depends_on: arduino_gpio + filter: ( dt_nodelabel_enabled("grove_d5_header") or + dt_nodelabel_enabled("grove_d4_header") ) and + dt_label_with_parent_compat_enabled("grove_btn_d5", "gpio-keys") + extra_args: SHIELD=seeed_grove_base_v2;grove_btn_d5_inv grove.base.v1.grove_btn.gpio.d5: depends_on: arduino_gpio filter: ( dt_nodelabel_enabled("grove_d5_header") or dt_nodelabel_enabled("grove_d4_header") ) and dt_label_with_parent_compat_enabled("grove_btn_d5", "gpio-keys") extra_args: SHIELD=seeed_grove_base_v1;grove_btn_d5 + grove.base.v1.grove_btn.gpio.d5.inv: + depends_on: arduino_gpio + filter: ( dt_nodelabel_enabled("grove_d5_header") or + dt_nodelabel_enabled("grove_d4_header") ) and + dt_label_with_parent_compat_enabled("grove_btn_d5", "gpio-keys") + extra_args: SHIELD=seeed_grove_base_v1;grove_btn_d5_inv grove.base.v2.grove_btn.gpio.d6: depends_on: arduino_gpio filter: ( dt_nodelabel_enabled("grove_d6_header") or @@ -135,6 +207,15 @@ tests: platform_exclude: - pan1781_evb - pan1782_evb + grove.base.v2.grove_btn.gpio.d6.inv: + depends_on: arduino_gpio + filter: ( dt_nodelabel_enabled("grove_d6_header") or + dt_nodelabel_enabled("grove_d5_header") ) and + dt_label_with_parent_compat_enabled("grove_btn_d6", "gpio-keys") + extra_args: SHIELD=seeed_grove_base_v2;grove_btn_d6_inv + platform_exclude: + - pan1781_evb + - pan1782_evb grove.base.v1.grove_btn.gpio.d6: depends_on: arduino_gpio filter: ( dt_nodelabel_enabled("grove_d6_header") or @@ -144,6 +225,15 @@ tests: platform_exclude: - pan1781_evb - pan1782_evb + grove.base.v1.grove_btn.gpio.d6.inv: + depends_on: arduino_gpio + filter: ( dt_nodelabel_enabled("grove_d6_header") or + dt_nodelabel_enabled("grove_d5_header") ) and + dt_label_with_parent_compat_enabled("grove_btn_d6", "gpio-keys") + extra_args: SHIELD=seeed_grove_base_v1;grove_btn_d6_inv + platform_exclude: + - pan1781_evb + - pan1782_evb grove.base.v2.grove_btn.gpio.d7: depends_on: arduino_gpio filter: ( dt_nodelabel_enabled("grove_d7_header") or @@ -153,6 +243,15 @@ tests: platform_exclude: - pan1781_evb - pan1782_evb + grove.base.v2.grove_btn.gpio.d7.inv: + depends_on: arduino_gpio + filter: ( dt_nodelabel_enabled("grove_d7_header") or + dt_nodelabel_enabled("grove_d6_header") ) and + dt_label_with_parent_compat_enabled("grove_btn_d7", "gpio-keys") + extra_args: SHIELD=seeed_grove_base_v2;grove_btn_d7_inv + platform_exclude: + - pan1781_evb + - pan1782_evb grove.base.v1.grove_btn.gpio.d7: depends_on: arduino_gpio filter: ( dt_nodelabel_enabled("grove_d7_header") or @@ -162,6 +261,15 @@ tests: platform_exclude: - pan1781_evb - pan1782_evb + grove.base.v1.grove_btn.gpio.d7.inv: + depends_on: arduino_gpio + filter: ( dt_nodelabel_enabled("grove_d7_header") or + dt_nodelabel_enabled("grove_d6_header") ) and + dt_label_with_parent_compat_enabled("grove_btn_d7", "gpio-keys") + extra_args: SHIELD=seeed_grove_base_v1;grove_btn_d7_inv + platform_exclude: + - pan1781_evb + - pan1782_evb grove.base.v2.grove_btn.gpio.d8: depends_on: arduino_gpio filter: ( dt_nodelabel_enabled("grove_d8_header") or @@ -171,6 +279,15 @@ tests: platform_exclude: - pan1781_evb - pan1782_evb + grove.base.v2.grove_btn.gpio.d8.inv: + depends_on: arduino_gpio + filter: ( dt_nodelabel_enabled("grove_d8_header") or + dt_nodelabel_enabled("grove_d7_header") ) and + dt_label_with_parent_compat_enabled("grove_btn_d8", "gpio-keys") + extra_args: SHIELD=seeed_grove_base_v2;grove_btn_d8_inv + platform_exclude: + - pan1781_evb + - pan1782_evb grove.base.v1.grove_btn.gpio.d8: depends_on: arduino_gpio filter: ( dt_nodelabel_enabled("grove_d8_header") or @@ -180,6 +297,15 @@ tests: platform_exclude: - pan1781_evb - pan1782_evb + grove.base.v1.grove_btn.gpio.d8.inv: + depends_on: arduino_gpio + filter: ( dt_nodelabel_enabled("grove_d8_header") or + dt_nodelabel_enabled("grove_d7_header") ) and + dt_label_with_parent_compat_enabled("grove_btn_d8", "gpio-keys") + extra_args: SHIELD=seeed_grove_base_v1;grove_btn_d8_inv + platform_exclude: + - pan1781_evb + - pan1782_evb grove.base.v2.grove_btn.gpio.d9: depends_on: arduino_gpio filter: dt_nodelabel_enabled("grove_d8_header") and @@ -188,6 +314,14 @@ tests: platform_exclude: - pan1781_evb - pan1782_evb + grove.base.v2.grove_btn.gpio.d9.inv: + depends_on: arduino_gpio + filter: dt_nodelabel_enabled("grove_d8_header") and + dt_label_with_parent_compat_enabled("grove_btn_d9", "gpio-keys") + extra_args: SHIELD=seeed_grove_base_v2;grove_btn_d9_inv + platform_exclude: + - pan1781_evb + - pan1782_evb grove.base.v1.grove_btn.gpio.d9: depends_on: arduino_gpio filter: ( dt_nodelabel_enabled("grove_d9_header") or @@ -197,34 +331,71 @@ tests: platform_exclude: - pan1781_evb - pan1782_evb + grove.base.v1.grove_btn.gpio.d9.inv: + depends_on: arduino_gpio + filter: ( dt_nodelabel_enabled("grove_d9_header") or + dt_nodelabel_enabled("grove_d8_header") ) and + dt_label_with_parent_compat_enabled("grove_btn_d9", "gpio-keys") + extra_args: SHIELD=seeed_grove_base_v1;grove_btn_d9_inv + platform_exclude: + - pan1781_evb + - pan1782_evb # grove.base.v2.grove_btn.gpio.d10 + # grove.base.v2.grove_btn.gpio.d10.inv grove.base.v1.grove_btn.gpio.d10: depends_on: arduino_gpio filter: ( dt_nodelabel_enabled("grove_d10_header") or dt_nodelabel_enabled("grove_d9_header") ) and dt_label_with_parent_compat_enabled("grove_btn_d10", "gpio-keys") extra_args: SHIELD=seeed_grove_base_v1;grove_btn_d10 + grove.base.v1.grove_btn.gpio.d10.inv: + depends_on: arduino_gpio + filter: ( dt_nodelabel_enabled("grove_d10_header") or + dt_nodelabel_enabled("grove_d9_header") ) and + dt_label_with_parent_compat_enabled("grove_btn_d10", "gpio-keys") + extra_args: SHIELD=seeed_grove_base_v1;grove_btn_d10_inv # grove.base.v2.grove_btn.gpio.d11 + # grove.base.v2.grove_btn.gpio.d11.inv grove.base.v1.grove_btn.gpio.d11: depends_on: arduino_gpio filter: ( dt_nodelabel_enabled("grove_d11_header") or dt_nodelabel_enabled("grove_d10_header") ) and dt_label_with_parent_compat_enabled("grove_btn_d11", "gpio-keys") extra_args: SHIELD=seeed_grove_base_v1;grove_btn_d11 + grove.base.v1.grove_btn.gpio.d11.inv: + depends_on: arduino_gpio + filter: ( dt_nodelabel_enabled("grove_d11_header") or + dt_nodelabel_enabled("grove_d10_header") ) and + dt_label_with_parent_compat_enabled("grove_btn_d11", "gpio-keys") + extra_args: SHIELD=seeed_grove_base_v1;grove_btn_d11_inv # grove.base.v2.grove_btn.gpio.d12 + # grove.base.v2.grove_btn.gpio.d12.inv grove.base.v1.grove_btn.gpio.d12: depends_on: arduino_gpio filter: ( dt_nodelabel_enabled("grove_d12_header") or dt_nodelabel_enabled("grove_d11_header") ) and dt_label_with_parent_compat_enabled("grove_btn_d12", "gpio-keys") extra_args: SHIELD=seeed_grove_base_v1;grove_btn_d12 + grove.base.v1.grove_btn.gpio.d12.inv: + depends_on: arduino_gpio + filter: ( dt_nodelabel_enabled("grove_d12_header") or + dt_nodelabel_enabled("grove_d11_header") ) and + dt_label_with_parent_compat_enabled("grove_btn_d12", "gpio-keys") + extra_args: SHIELD=seeed_grove_base_v1;grove_btn_d12_inv # grove.base.v2.grove_btn.gpio.d13 + # grove.base.v2.grove_btn.gpio.d13.inv grove.base.v1.grove_btn.gpio.d13: depends_on: arduino_gpio filter: ( dt_nodelabel_enabled("grove_d13_header") or dt_nodelabel_enabled("grove_d12_header") ) and dt_label_with_parent_compat_enabled("grove_btn_d13", "gpio-keys") extra_args: SHIELD=seeed_grove_base_v1;grove_btn_d13 + grove.base.v1.grove_btn.gpio.d13.inv: + depends_on: arduino_gpio + filter: ( dt_nodelabel_enabled("grove_d13_header") or + dt_nodelabel_enabled("grove_d12_header") ) and + dt_label_with_parent_compat_enabled("grove_btn_d13", "gpio-keys") + extra_args: SHIELD=seeed_grove_base_v1;grove_btn_d13_inv grove.base.v2.grove_btn.gpio.d14: depends_on: arduino_gpio filter: dt_nodelabel_enabled("grove_a0_header") and @@ -234,6 +405,15 @@ tests: - frdm_kw41z - hifive1 - hifive1@B + grove.base.v2.grove_btn.gpio.d14.inv: + depends_on: arduino_gpio + filter: dt_nodelabel_enabled("grove_a0_header") and + dt_label_with_parent_compat_enabled("grove_btn_d14", "gpio-keys") + extra_args: SHIELD=seeed_grove_base_v2;grove_btn_d14_inv + platform_exclude: + - frdm_kw41z + - hifive1 + - hifive1@B grove.base.v1.grove_btn.gpio.d14: depends_on: arduino_gpio filter: dt_nodelabel_enabled("grove_a0_header") and @@ -243,18 +423,39 @@ tests: - frdm_kw41z - hifive1 - hifive1@B + grove.base.v1.grove_btn.gpio.d14.inv: + depends_on: arduino_gpio + filter: dt_nodelabel_enabled("grove_a0_header") and + dt_label_with_parent_compat_enabled("grove_btn_d14", "gpio-keys") + extra_args: SHIELD=seeed_grove_base_v1;grove_btn_d14_inv + platform_exclude: + - frdm_kw41z + - hifive1 + - hifive1@B grove.base.v2.grove_btn.gpio.d15: depends_on: arduino_gpio filter: ( dt_nodelabel_enabled("grove_a1_header") or dt_nodelabel_enabled("grove_a0_header") ) and dt_label_with_parent_compat_enabled("grove_btn_d15", "gpio-keys") extra_args: SHIELD=seeed_grove_base_v2;grove_btn_d15 + grove.base.v2.grove_btn.gpio.d15.inv: + depends_on: arduino_gpio + filter: ( dt_nodelabel_enabled("grove_a1_header") or + dt_nodelabel_enabled("grove_a0_header") ) and + dt_label_with_parent_compat_enabled("grove_btn_d15", "gpio-keys") + extra_args: SHIELD=seeed_grove_base_v2;grove_btn_d15_inv grove.base.v1.grove_btn.gpio.d15: depends_on: arduino_gpio filter: ( dt_nodelabel_enabled("grove_a1_header") or dt_nodelabel_enabled("grove_a0_header") ) and dt_label_with_parent_compat_enabled("grove_btn_d15", "gpio-keys") extra_args: SHIELD=seeed_grove_base_v1;grove_btn_d15 + grove.base.v1.grove_btn.gpio.d15.inv: + depends_on: arduino_gpio + filter: ( dt_nodelabel_enabled("grove_a1_header") or + dt_nodelabel_enabled("grove_a0_header") ) and + dt_label_with_parent_compat_enabled("grove_btn_d15", "gpio-keys") + extra_args: SHIELD=seeed_grove_base_v1;grove_btn_d15_inv grove.base.v2.grove_btn.gpio.d16: depends_on: arduino_gpio filter: ( dt_nodelabel_enabled("grove_a2_header") or @@ -263,6 +464,14 @@ tests: extra_args: SHIELD=seeed_grove_base_v2;grove_btn_d16 platform_exclude: - stm32mp157c_dk2 + grove.base.v2.grove_btn.gpio.d16.inv: + depends_on: arduino_gpio + filter: ( dt_nodelabel_enabled("grove_a2_header") or + dt_nodelabel_enabled("grove_a1_header") ) and + dt_label_with_parent_compat_enabled("grove_btn_d16", "gpio-keys") + extra_args: SHIELD=seeed_grove_base_v2;grove_btn_d16_inv + platform_exclude: + - stm32mp157c_dk2 grove.base.v1.grove_btn.gpio.d16: depends_on: arduino_gpio filter: ( dt_nodelabel_enabled("grove_a2_header") or @@ -271,6 +480,14 @@ tests: extra_args: SHIELD=seeed_grove_base_v1;grove_btn_d16 platform_exclude: - stm32mp157c_dk2 + grove.base.v1.grove_btn.gpio.d16.inv: + depends_on: arduino_gpio + filter: ( dt_nodelabel_enabled("grove_a2_header") or + dt_nodelabel_enabled("grove_a1_header") ) and + dt_label_with_parent_compat_enabled("grove_btn_d16", "gpio-keys") + extra_args: SHIELD=seeed_grove_base_v1;grove_btn_d16_inv + platform_exclude: + - stm32mp157c_dk2 grove.base.v2.grove_btn.gpio.d17: depends_on: arduino_gpio filter: ( dt_nodelabel_enabled("grove_a3_header") or @@ -280,6 +497,15 @@ tests: platform_exclude: - lpcxpresso55s16 - stm32mp157c_dk2 + grove.base.v2.grove_btn.gpio.d17.inv: + depends_on: arduino_gpio + filter: ( dt_nodelabel_enabled("grove_a3_header") or + dt_nodelabel_enabled("grove_a2_header") ) and + dt_label_with_parent_compat_enabled("grove_btn_d17", "gpio-keys") + extra_args: SHIELD=seeed_grove_base_v2;grove_btn_d17_inv + platform_exclude: + - lpcxpresso55s16 + - stm32mp157c_dk2 grove.base.v1.grove_btn.gpio.d17: depends_on: arduino_gpio filter: ( dt_nodelabel_enabled("grove_a3_header") or @@ -289,6 +515,15 @@ tests: platform_exclude: - lpcxpresso55s16 - stm32mp157c_dk2 + grove.base.v1.grove_btn.gpio.d17.inv: + depends_on: arduino_gpio + filter: ( dt_nodelabel_enabled("grove_a3_header") or + dt_nodelabel_enabled("grove_a2_header") ) and + dt_label_with_parent_compat_enabled("grove_btn_d17", "gpio-keys") + extra_args: SHIELD=seeed_grove_base_v1;grove_btn_d17_inv + platform_exclude: + - lpcxpresso55s16 + - stm32mp157c_dk2 grove.base.v2.grove_btn.gpio.d18: depends_on: arduino_gpio filter: ( dt_nodelabel_enabled("grove_a4_header") or @@ -299,6 +534,16 @@ tests: platform_exclude: - pan1781_evb - pan1782_evb + grove.base.v2.grove_btn.gpio.d18.inv: + depends_on: arduino_gpio + filter: ( dt_nodelabel_enabled("grove_a4_header") or + dt_nodelabel_enabled("grove_a3_header") or + dt_nodelabel_enabled("grove_i2c_header") ) and + dt_label_with_parent_compat_enabled("grove_btn_d18", "gpio-keys") + extra_args: SHIELD=seeed_grove_base_v2;grove_btn_d18_inv + platform_exclude: + - pan1781_evb + - pan1782_evb grove.base.v1.grove_btn.gpio.d18: depends_on: arduino_gpio filter: ( dt_nodelabel_enabled("grove_a4_header") or @@ -309,6 +554,16 @@ tests: platform_exclude: - pan1781_evb - pan1782_evb + grove.base.v1.grove_btn.gpio.d18.inv: + depends_on: arduino_gpio + filter: ( dt_nodelabel_enabled("grove_a4_header") or + dt_nodelabel_enabled("grove_a3_header") or + dt_nodelabel_enabled("grove_i2c_header") ) and + dt_label_with_parent_compat_enabled("grove_btn_d18", "gpio-keys") + extra_args: SHIELD=seeed_grove_base_v1;grove_btn_d18_inv + platform_exclude: + - pan1781_evb + - pan1782_evb grove.base.v2.grove_btn.gpio.d19: depends_on: arduino_gpio filter: (dt_nodelabel_enabled("grove_a4_header") or @@ -319,6 +574,16 @@ tests: - frdm_kw41z - pan1781_evb - pan1782_evb + grove.base.v2.grove_btn.gpio.d19.inv: + depends_on: arduino_gpio + filter: (dt_nodelabel_enabled("grove_a4_header") or + dt_nodelabel_enabled("grove_i2c_header") ) and + dt_label_with_parent_compat_enabled("grove_btn_d19", "gpio-keys") + extra_args: SHIELD=seeed_grove_base_v2;grove_btn_d19_inv + platform_exclude: + - frdm_kw41z + - pan1781_evb + - pan1782_evb grove.base.v1.grove_btn.gpio.d19: depends_on: arduino_gpio filter: (dt_nodelabel_enabled("grove_a4_header") or @@ -329,6 +594,16 @@ tests: - frdm_kw41z - pan1781_evb - pan1782_evb + grove.base.v1.grove_btn.gpio.d19.inv: + depends_on: arduino_gpio + filter: (dt_nodelabel_enabled("grove_a4_header") or + dt_nodelabel_enabled("grove_i2c_header") ) and + dt_label_with_parent_compat_enabled("grove_btn_d19", "gpio-keys") + extra_args: SHIELD=seeed_grove_base_v1;grove_btn_d19_inv + platform_exclude: + - frdm_kw41z + - pan1781_evb + - pan1782_evb # # Grove Button by simple GPIO on Grove Shield for Seeeduino XIAO # @@ -337,24 +612,47 @@ tests: filter: dt_nodelabel_enabled("grove_d0_header") and dt_label_with_parent_compat_enabled("grove_btn_d0", "gpio-keys") extra_args: SHIELD=seeed_grove_xiao_v1;grove_btn_d0 + grove.xiao.v1.grove_btn.gpio.d0.inv: + depends_on: xiao_gpio + filter: dt_nodelabel_enabled("grove_d0_header") and + dt_label_with_parent_compat_enabled("grove_btn_d0", "gpio-keys") + extra_args: SHIELD=seeed_grove_xiao_v1;grove_btn_d0_inv grove.xiao.v1.grove_btn.gpio.d1: depends_on: xiao_gpio filter: ( dt_nodelabel_enabled("grove_d1_header") or dt_nodelabel_enabled("grove_d0_header") ) and dt_label_with_parent_compat_enabled("grove_btn_d1", "gpio-keys") extra_args: SHIELD=seeed_grove_xiao_v1;grove_btn_d1 + grove.xiao.v1.grove_btn.gpio.d1.inv: + depends_on: xiao_gpio + filter: ( dt_nodelabel_enabled("grove_d1_header") or + dt_nodelabel_enabled("grove_d0_header") ) and + dt_label_with_parent_compat_enabled("grove_btn_d1", "gpio-keys") + extra_args: SHIELD=seeed_grove_xiao_v1;grove_btn_d1_inv grove.xiao.v1.grove_btn.gpio.d2: depends_on: xiao_gpio filter: ( dt_nodelabel_enabled("grove_d2_header") or dt_nodelabel_enabled("grove_d1_header") ) and dt_label_with_parent_compat_enabled("grove_btn_d2", "gpio-keys") extra_args: SHIELD=seeed_grove_xiao_v1;grove_btn_d2 + grove.xiao.v1.grove_btn.gpio.d2.inv: + depends_on: xiao_gpio + filter: ( dt_nodelabel_enabled("grove_d2_header") or + dt_nodelabel_enabled("grove_d1_header") ) and + dt_label_with_parent_compat_enabled("grove_btn_d2", "gpio-keys") + extra_args: SHIELD=seeed_grove_xiao_v1;grove_btn_d2_inv grove.xiao.v1.grove_btn.gpio.d3: depends_on: xiao_gpio filter: ( dt_nodelabel_enabled("grove_d3_header") or dt_nodelabel_enabled("grove_d2_header") ) and dt_label_with_parent_compat_enabled("grove_btn_d3", "gpio-keys") extra_args: SHIELD=seeed_grove_xiao_v1;grove_btn_d3 + grove.xiao.v1.grove_btn.gpio.d3.inv: + depends_on: xiao_gpio + filter: ( dt_nodelabel_enabled("grove_d3_header") or + dt_nodelabel_enabled("grove_d2_header") ) and + dt_label_with_parent_compat_enabled("grove_btn_d3", "gpio-keys") + extra_args: SHIELD=seeed_grove_xiao_v1;grove_btn_d3_inv grove.xiao.v1.grove_btn.gpio.d4: depends_on: xiao_gpio filter: ( dt_nodelabel_enabled("grove_d4_header") or @@ -362,6 +660,13 @@ tests: dt_nodelabel_enabled("grove_i2c_header") and dt_label_with_parent_compat_enabled("grove_btn_d4", "gpio-keys") extra_args: SHIELD=seeed_grove_xiao_v1;grove_btn_d4 + grove.xiao.v1.grove_btn.gpio.d4.inv: + depends_on: xiao_gpio + filter: ( dt_nodelabel_enabled("grove_d4_header") or + dt_nodelabel_enabled("grove_d5_header") ) and + dt_nodelabel_enabled("grove_i2c_header") and + dt_label_with_parent_compat_enabled("grove_btn_d4", "gpio-keys") + extra_args: SHIELD=seeed_grove_xiao_v1;grove_btn_d4_inv grove.xiao.v1.grove_btn.gpio.d5: depends_on: xiao_gpio filter: ( dt_nodelabel_enabled("grove_d5_header") or @@ -369,6 +674,13 @@ tests: dt_nodelabel_enabled("grove_i2c_header") and dt_label_with_parent_compat_enabled("grove_btn_d5", "gpio-keys") extra_args: SHIELD=seeed_grove_xiao_v1;grove_btn_d5 + grove.xiao.v1.grove_btn.gpio.d5.inv: + depends_on: xiao_gpio + filter: ( dt_nodelabel_enabled("grove_d5_header") or + dt_nodelabel_enabled("grove_d4_header") ) and + dt_nodelabel_enabled("grove_i2c_header") and + dt_label_with_parent_compat_enabled("grove_btn_d5", "gpio-keys") + extra_args: SHIELD=seeed_grove_xiao_v1;grove_btn_d5_inv grove.xiao.v1.grove_btn.gpio.d6: depends_on: xiao_gpio filter: ( dt_nodelabel_enabled("grove_d6_header") or @@ -376,6 +688,13 @@ tests: dt_nodelabel_enabled("grove_uart_header") and dt_label_with_parent_compat_enabled("grove_btn_d6", "gpio-keys") extra_args: SHIELD=seeed_grove_xiao_v1;grove_btn_d6 + grove.xiao.v1.grove_btn.gpio.d6.inv: + depends_on: xiao_gpio + filter: ( dt_nodelabel_enabled("grove_d6_header") or + dt_nodelabel_enabled("grove_d7_header") ) and + dt_nodelabel_enabled("grove_uart_header") and + dt_label_with_parent_compat_enabled("grove_btn_d6", "gpio-keys") + extra_args: SHIELD=seeed_grove_xiao_v1;grove_btn_d6_inv grove.xiao.v1.grove_btn.gpio.d7: depends_on: xiao_gpio filter: ( dt_nodelabel_enabled("grove_d7_header") or @@ -383,23 +702,47 @@ tests: dt_nodelabel_enabled("grove_uart_header") and dt_label_with_parent_compat_enabled("grove_btn_d7", "gpio-keys") extra_args: SHIELD=seeed_grove_xiao_v1;grove_btn_d7 + grove.xiao.v1.grove_btn.gpio.d7.inv: + depends_on: xiao_gpio + filter: ( dt_nodelabel_enabled("grove_d7_header") or + dt_nodelabel_enabled("grove_d6_header") ) and + dt_nodelabel_enabled("grove_uart_header") and + dt_label_with_parent_compat_enabled("grove_btn_d7", "gpio-keys") + extra_args: SHIELD=seeed_grove_xiao_v1;grove_btn_d7_inv grove.xiao.v1.grove_btn.gpio.d8: depends_on: xiao_gpio filter: dt_nodelabel_enabled("grove_d8_header") and dt_label_with_parent_compat_enabled("grove_btn_d8", "gpio-keys") extra_args: SHIELD=seeed_grove_xiao_v1;grove_btn_d8 + grove.xiao.v1.grove_btn.gpio.d8.inv: + depends_on: xiao_gpio + filter: dt_nodelabel_enabled("grove_d8_header") and + dt_label_with_parent_compat_enabled("grove_btn_d8", "gpio-keys") + extra_args: SHIELD=seeed_grove_xiao_v1;grove_btn_d8_inv grove.xiao.v1.grove_btn.gpio.d9: depends_on: xiao_gpio filter: ( dt_nodelabel_enabled("grove_d9_header") or dt_nodelabel_enabled("grove_d8_header") ) and dt_label_with_parent_compat_enabled("grove_btn_d9", "gpio-keys") extra_args: SHIELD=seeed_grove_xiao_v1;grove_btn_d9 + grove.xiao.v1.grove_btn.gpio.d9.inv: + depends_on: xiao_gpio + filter: ( dt_nodelabel_enabled("grove_d9_header") or + dt_nodelabel_enabled("grove_d8_header") ) and + dt_label_with_parent_compat_enabled("grove_btn_d9", "gpio-keys") + extra_args: SHIELD=seeed_grove_xiao_v1;grove_btn_d9_inv grove.xiao.v1.grove_btn.gpio.d10: depends_on: xiao_gpio filter: ( dt_nodelabel_enabled("grove_d10_header") or dt_nodelabel_enabled("grove_d9_header") ) and dt_label_with_parent_compat_enabled("grove_btn_d10", "gpio-keys") extra_args: SHIELD=seeed_grove_xiao_v1;grove_btn_d10 + grove.xiao.v1.grove_btn.gpio.d10.inv: + depends_on: xiao_gpio + filter: ( dt_nodelabel_enabled("grove_d10_header") or + dt_nodelabel_enabled("grove_d9_header") ) and + dt_label_with_parent_compat_enabled("grove_btn_d10", "gpio-keys") + extra_args: SHIELD=seeed_grove_xiao_v1;grove_btn_d10_inv # # Grove Button by simple GPIO on Grove Shield for Pi Pico # @@ -409,29 +752,57 @@ tests: dt_nodelabel_enabled("grove_uart0_header") and dt_label_with_parent_compat_enabled("grove_btn_d0", "gpio-keys") extra_args: SHIELD=seeed_grove_rpipico_v1;grove_btn_d0 + grove.rpipico.v1.grove_btn.gpio.d0.inv: + depends_on: pico_gpio + filter: dt_nodelabel_enabled("grove_d1_header") and + dt_nodelabel_enabled("grove_uart0_header") and + dt_label_with_parent_compat_enabled("grove_btn_d0", "gpio-keys") + extra_args: SHIELD=seeed_grove_rpipico_v1;grove_btn_d0_inv grove.rpipico.v1.grove_btn.gpio.d1: depends_on: pico_gpio filter: dt_nodelabel_enabled("grove_d1_header") and dt_nodelabel_enabled("grove_uart0_header") and dt_label_with_parent_compat_enabled("grove_btn_d1", "gpio-keys") extra_args: SHIELD=seeed_grove_rpipico_v1;grove_btn_d1 + grove.rpipico.v1.grove_btn.gpio.d1.inv: + depends_on: pico_gpio + filter: dt_nodelabel_enabled("grove_d1_header") and + dt_nodelabel_enabled("grove_uart0_header") and + dt_label_with_parent_compat_enabled("grove_btn_d1", "gpio-keys") + extra_args: SHIELD=seeed_grove_rpipico_v1;grove_btn_d1_inv grove.rpipico.v1.grove_btn.gpio.d2: depends_on: pico_gpio filter: dt_nodelabel_enabled("generic_spi_header") and dt_label_with_parent_compat_enabled("grove_btn_d2", "gpio-keys") extra_args: SHIELD=seeed_grove_rpipico_v1;grove_btn_d2 + grove.rpipico.v1.grove_btn.gpio.d2.inv: + depends_on: pico_gpio + filter: dt_nodelabel_enabled("generic_spi_header") and + dt_label_with_parent_compat_enabled("grove_btn_d2", "gpio-keys") + extra_args: SHIELD=seeed_grove_rpipico_v1;grove_btn_d2_inv grove.rpipico.v1.grove_btn.gpio.d3: depends_on: pico_gpio filter: dt_nodelabel_enabled("generic_spi_header") and dt_label_with_parent_compat_enabled("grove_btn_d3", "gpio-keys") extra_args: SHIELD=seeed_grove_rpipico_v1;grove_btn_d3 + grove.rpipico.v1.grove_btn.gpio.d3.inv: + depends_on: pico_gpio + filter: dt_nodelabel_enabled("generic_spi_header") and + dt_label_with_parent_compat_enabled("grove_btn_d3", "gpio-keys") + extra_args: SHIELD=seeed_grove_rpipico_v1;grove_btn_d3_inv grove.rpipico.v1.grove_btn.gpio.d4: depends_on: pico_gpio filter: dt_nodelabel_enabled("grove_d5_header") and dt_nodelabel_enabled("grove_uart1_header") and dt_nodelabel_enabled("generic_spi_header") and dt_label_with_parent_compat_enabled("grove_btn_d4", "gpio-keys") - extra_args: SHIELD=seeed_grove_rpipico_v1;grove_btn_d4 + grove.rpipico.v1.grove_btn.gpio.d4.inv: + depends_on: pico_gpio + filter: dt_nodelabel_enabled("grove_d5_header") and + dt_nodelabel_enabled("grove_uart1_header") and + dt_nodelabel_enabled("generic_spi_header") and + dt_label_with_parent_compat_enabled("grove_btn_d4", "gpio-keys") + extra_args: SHIELD=seeed_grove_rpipico_v1;grove_btn_d4_inv grove.rpipico.v1.grove_btn.gpio.d5: depends_on: pico_gpio filter: dt_nodelabel_enabled("grove_d5_header") and @@ -439,36 +810,73 @@ tests: dt_nodelabel_enabled("generic_spi_header") and dt_label_with_parent_compat_enabled("grove_btn_d5", "gpio-keys") extra_args: SHIELD=seeed_grove_rpipico_v1;grove_btn_d5 + grove.rpipico.v1.grove_btn.gpio.d5.inv: + depends_on: pico_gpio + filter: dt_nodelabel_enabled("grove_d5_header") and + dt_nodelabel_enabled("grove_uart1_header") and + dt_nodelabel_enabled("generic_spi_header") and + dt_label_with_parent_compat_enabled("grove_btn_d5", "gpio-keys") + extra_args: SHIELD=seeed_grove_rpipico_v1;grove_btn_d5_inv grove.rpipico.v1.grove_btn.gpio.d6: depends_on: pico_gpio filter: dt_nodelabel_enabled("grove_d7_header") and dt_nodelabel_enabled("grove_i2c1_header") and dt_label_with_parent_compat_enabled("grove_btn_d6", "gpio-keys") extra_args: SHIELD=seeed_grove_rpipico_v1;grove_btn_d6 + grove.rpipico.v1.grove_btn.gpio.d6.inv: + depends_on: pico_gpio + filter: dt_nodelabel_enabled("grove_d7_header") and + dt_nodelabel_enabled("grove_i2c1_header") and + dt_label_with_parent_compat_enabled("grove_btn_d6", "gpio-keys") + extra_args: SHIELD=seeed_grove_rpipico_v1;grove_btn_d6_inv grove.rpipico.v1.grove_btn.gpio.d7: depends_on: pico_gpio filter: dt_nodelabel_enabled("grove_d7_header") and dt_nodelabel_enabled("grove_i2c1_header") and dt_label_with_parent_compat_enabled("grove_btn_d7", "gpio-keys") extra_args: SHIELD=seeed_grove_rpipico_v1;grove_btn_d7 + grove.rpipico.v1.grove_btn.gpio.d7.inv: + depends_on: pico_gpio + filter: dt_nodelabel_enabled("grove_d7_header") and + dt_nodelabel_enabled("grove_i2c1_header") and + dt_label_with_parent_compat_enabled("grove_btn_d7", "gpio-keys") + extra_args: SHIELD=seeed_grove_rpipico_v1;grove_btn_d7_inv grove.rpipico.v1.grove_btn.gpio.d8: depends_on: pico_gpio filter: dt_nodelabel_enabled("grove_d9_header") and dt_nodelabel_enabled("grove_i2c0_header") and dt_label_with_parent_compat_enabled("grove_btn_d8", "gpio-keys") extra_args: SHIELD=seeed_grove_rpipico_v1;grove_btn_d8 + grove.rpipico.v1.grove_btn.gpio.d8.inv: + depends_on: pico_gpio + filter: dt_nodelabel_enabled("grove_d9_header") and + dt_nodelabel_enabled("grove_i2c0_header") and + dt_label_with_parent_compat_enabled("grove_btn_d8", "gpio-keys") + extra_args: SHIELD=seeed_grove_rpipico_v1;grove_btn_d8_inv grove.rpipico.v1.grove_btn.gpio.d9: depends_on: pico_gpio filter: dt_nodelabel_enabled("grove_d9_header") and dt_nodelabel_enabled("grove_i2c0_header") and dt_label_with_parent_compat_enabled("grove_btn_d9", "gpio-keys") extra_args: SHIELD=seeed_grove_rpipico_v1;grove_btn_d9 + grove.rpipico.v1.grove_btn.gpio.d9.inv: + depends_on: pico_gpio + filter: dt_nodelabel_enabled("grove_d9_header") and + dt_nodelabel_enabled("grove_i2c0_header") and + dt_label_with_parent_compat_enabled("grove_btn_d9", "gpio-keys") + extra_args: SHIELD=seeed_grove_rpipico_v1;grove_btn_d9_inv # grove.rpipico.v1.grove_btn.gpio.d10 + # grove.rpipico.v1.grove_btn.gpio.d10.inv # grove.rpipico.v1.grove_btn.gpio.d11 + # grove.rpipico.v1.grove_btn.gpio.d11.inv # grove.rpipico.v1.grove_btn.gpio.d12 + # grove.rpipico.v1.grove_btn.gpio.d12.inv # grove.rpipico.v1.grove_btn.gpio.d13 + # grove.rpipico.v1.grove_btn.gpio.d13.inv # grove.rpipico.v1.grove_btn.gpio.d14 + # grove.rpipico.v1.grove_btn.gpio.d14.inv # grove.rpipico.v1.grove_btn.gpio.d15 + # grove.rpipico.v1.grove_btn.gpio.d15.inv grove.rpipico.v1.grove_btn.gpio.d16: depends_on: pico_gpio filter: dt_nodelabel_enabled("grove_d16_header") and @@ -480,6 +888,17 @@ tests: - waveshare_rp2040_lcd_0_96 - waveshare_rp2040_plus - waveshare_rp2040_plus@16mb + grove.rpipico.v1.grove_btn.gpio.d16.inv: + depends_on: pico_gpio + filter: dt_nodelabel_enabled("grove_d16_header") and + dt_label_with_parent_compat_enabled("grove_btn_d16", "gpio-keys") + extra_args: SHIELD=seeed_grove_rpipico_v1;grove_btn_d16_inv + platform_allow: + - rpi_pico + - rpi_pico/rp2040/w + - waveshare_rp2040_lcd_0_96 + - waveshare_rp2040_plus + - waveshare_rp2040_plus@16mb grove.rpipico.v1.grove_btn.gpio.d17: depends_on: pico_gpio filter: dt_nodelabel_enabled("grove_d16_header") and @@ -491,6 +910,17 @@ tests: - waveshare_rp2040_lcd_0_96 - waveshare_rp2040_plus - waveshare_rp2040_plus@16mb + grove.rpipico.v1.grove_btn.gpio.d17.inv: + depends_on: pico_gpio + filter: dt_nodelabel_enabled("grove_d16_header") and + dt_label_with_parent_compat_enabled("grove_btn_d17", "gpio-keys") + extra_args: SHIELD=seeed_grove_rpipico_v1;grove_btn_d17_inv + platform_allow: + - rpi_pico + - rpi_pico/rp2040/w + - waveshare_rp2040_lcd_0_96 + - waveshare_rp2040_plus + - waveshare_rp2040_plus@16mb grove.rpipico.v1.grove_btn.gpio.d18: depends_on: pico_gpio filter: dt_nodelabel_enabled("grove_d18_header") and @@ -502,6 +932,17 @@ tests: - waveshare_rp2040_lcd_0_96 - waveshare_rp2040_plus - waveshare_rp2040_plus@16mb + grove.rpipico.v1.grove_btn.gpio.d18.inv: + depends_on: pico_gpio + filter: dt_nodelabel_enabled("grove_d18_header") and + dt_label_with_parent_compat_enabled("grove_btn_d18", "gpio-keys") + extra_args: SHIELD=seeed_grove_rpipico_v1;grove_btn_d18_inv + platform_allow: + - rpi_pico + - rpi_pico/rp2040/w + - waveshare_rp2040_lcd_0_96 + - waveshare_rp2040_plus + - waveshare_rp2040_plus@16mb grove.rpipico.v1.grove_btn.gpio.d19: depends_on: pico_gpio filter: dt_nodelabel_enabled("grove_d18_header") and @@ -513,6 +954,17 @@ tests: - waveshare_rp2040_lcd_0_96 - waveshare_rp2040_plus - waveshare_rp2040_plus@16mb + grove.rpipico.v1.grove_btn.gpio.d19.inv: + depends_on: pico_gpio + filter: dt_nodelabel_enabled("grove_d18_header") and + dt_label_with_parent_compat_enabled("grove_btn_d19", "gpio-keys") + extra_args: SHIELD=seeed_grove_rpipico_v1;grove_btn_d19_inv + platform_allow: + - rpi_pico + - rpi_pico/rp2040/w + - waveshare_rp2040_lcd_0_96 + - waveshare_rp2040_plus + - waveshare_rp2040_plus@16mb grove.rpipico.v1.grove_btn.gpio.d20: depends_on: pico_gpio filter: dt_nodelabel_enabled("grove_d20_header") and @@ -524,6 +976,17 @@ tests: - waveshare_rp2040_lcd_0_96 - waveshare_rp2040_plus - waveshare_rp2040_plus@16mb + grove.rpipico.v1.grove_btn.gpio.d20.inv: + depends_on: pico_gpio + filter: dt_nodelabel_enabled("grove_d20_header") and + dt_label_with_parent_compat_enabled("grove_btn_d20", "gpio-keys") + extra_args: SHIELD=seeed_grove_rpipico_v1;grove_btn_d20_inv + platform_allow: + - rpi_pico + - rpi_pico/rp2040/w + - waveshare_rp2040_lcd_0_96 + - waveshare_rp2040_plus + - waveshare_rp2040_plus@16mb grove.rpipico.v1.grove_btn.gpio.d21: depends_on: pico_gpio filter: dt_nodelabel_enabled("grove_d20_header") and @@ -535,16 +998,37 @@ tests: - waveshare_rp2040_lcd_0_96 - waveshare_rp2040_plus - waveshare_rp2040_plus@16mb + grove.rpipico.v1.grove_btn.gpio.d21.inv: + depends_on: pico_gpio + filter: dt_nodelabel_enabled("grove_d20_header") and + dt_label_with_parent_compat_enabled("grove_btn_d21", "gpio-keys") + extra_args: SHIELD=seeed_grove_rpipico_v1;grove_btn_d21_inv + platform_allow: + - rpi_pico + - rpi_pico/rp2040/w + - waveshare_rp2040_lcd_0_96 + - waveshare_rp2040_plus + - waveshare_rp2040_plus@16mb # grove.rpipico.v1.grove_btn.gpio.d22 + # grove.rpipico.v1.grove_btn.gpio.d22.inv # grove.rpipico.v1.grove_btn.gpio.d23 + # grove.rpipico.v1.grove_btn.gpio.d23.inv # grove.rpipico.v1.grove_btn.gpio.d24 + # grove.rpipico.v1.grove_btn.gpio.d24.inv # grove.rpipico.v1.grove_btn.gpio.d25 + # grove.rpipico.v1.grove_btn.gpio.d25.inv grove.rpipico.v1.grove_btn.gpio.d26: depends_on: pico_gpio filter: ( dt_nodelabel_enabled("grove_a0_header") or dt_nodelabel_enabled("grove_d26_header") ) and dt_label_with_parent_compat_enabled("grove_btn_d26", "gpio-keys") extra_args: SHIELD=seeed_grove_rpipico_v1;grove_btn_d26 + grove.rpipico.v1.grove_btn.gpio.d26.inv: + depends_on: pico_gpio + filter: ( dt_nodelabel_enabled("grove_a0_header") or + dt_nodelabel_enabled("grove_d26_header") ) and + dt_label_with_parent_compat_enabled("grove_btn_d26", "gpio-keys") + extra_args: SHIELD=seeed_grove_rpipico_v1;grove_btn_d26_inv grove.rpipico.v1.grove_btn.gpio.d27: depends_on: pico_gpio filter: ( dt_nodelabel_enabled("grove_a1_header") or @@ -552,6 +1036,13 @@ tests: dt_nodelabel_enabled("grove_d27_header") ) and dt_label_with_parent_compat_enabled("grove_btn_d27", "gpio-keys") extra_args: SHIELD=seeed_grove_rpipico_v1;grove_btn_d27 + grove.rpipico.v1.grove_btn.gpio.d27.inv: + depends_on: pico_gpio + filter: ( dt_nodelabel_enabled("grove_a1_header") or + dt_nodelabel_enabled("grove_a0_header") or + dt_nodelabel_enabled("grove_d27_header") ) and + dt_label_with_parent_compat_enabled("grove_btn_d27", "gpio-keys") + extra_args: SHIELD=seeed_grove_rpipico_v1;grove_btn_d27_inv grove.rpipico.v1.grove_btn.gpio.d28: depends_on: pico_gpio filter: ( dt_nodelabel_enabled("grove_a2_header") or @@ -559,6 +1050,13 @@ tests: dt_nodelabel_enabled("grove_d28_header") ) and dt_label_with_parent_compat_enabled("grove_btn_d28", "gpio-keys") extra_args: SHIELD=seeed_grove_rpipico_v1;grove_btn_d28 + grove.rpipico.v1.grove_btn.gpio.d28.inv: + depends_on: pico_gpio + filter: ( dt_nodelabel_enabled("grove_a2_header") or + dt_nodelabel_enabled("grove_a1_header") or + dt_nodelabel_enabled("grove_d28_header") ) and + dt_label_with_parent_compat_enabled("grove_btn_d28", "gpio-keys") + extra_args: SHIELD=seeed_grove_rpipico_v1;grove_btn_d28_inv # # Grove Button by simple GPIO on Grove Connectors # @@ -568,6 +1066,12 @@ tests: dt_nodelabel_enabled("grove_uart_header") ) and dt_label_with_parent_compat_enabled("grove_btn_d0", "gpio-keys") extra_args: SHIELD=grove_btn_d0 + grove.connectors.grove_btn.gpio.d0.inv: + depends_on: grove_gpio + filter: ( dt_nodelabel_enabled("grove_d0_header") or + dt_nodelabel_enabled("grove_uart_header") ) and + dt_label_with_parent_compat_enabled("grove_btn_d0", "gpio-keys") + extra_args: SHIELD=grove_btn_d0_inv grove.connectors.grove_btn.gpio.d1: depends_on: grove_gpio filter: ( dt_nodelabel_enabled("grove_d1_header") or @@ -575,6 +1079,13 @@ tests: dt_nodelabel_enabled("grove_uart_header") ) and dt_label_with_parent_compat_enabled("grove_btn_d1", "gpio-keys") extra_args: SHIELD=grove_btn_d1 + grove.connectors.grove_btn.gpio.d1.inv: + depends_on: grove_gpio + filter: ( dt_nodelabel_enabled("grove_d1_header") or + dt_nodelabel_enabled("grove_d0_header") or + dt_nodelabel_enabled("grove_uart_header") ) and + dt_label_with_parent_compat_enabled("grove_btn_d1", "gpio-keys") + extra_args: SHIELD=grove_btn_d1_inv grove.connectors.grove_btn.gpio.d2: depends_on: grove_gpio filter: ( dt_nodelabel_enabled("grove_d2_header") or @@ -584,6 +1095,15 @@ tests: platform_allow: - cytron_maker_pi_rp2040 - seeeduino_lotus + grove.connectors.grove_btn.gpio.d2.inv: + depends_on: grove_gpio + filter: ( dt_nodelabel_enabled("grove_d2_header") or + dt_nodelabel_enabled("grove_d1_header") ) and + dt_label_with_parent_compat_enabled("grove_btn_d2", "gpio-keys") + extra_args: SHIELD=grove_btn_d2_inv + platform_allow: + - cytron_maker_pi_rp2040 + - seeeduino_lotus grove.connectors.grove_btn.gpio.d3: depends_on: grove_gpio filter: ( dt_nodelabel_enabled("grove_d3_header") or @@ -593,6 +1113,15 @@ tests: platform_allow: - cytron_maker_pi_rp2040 - seeeduino_lotus + grove.connectors.grove_btn.gpio.d3.inv: + depends_on: grove_gpio + filter: ( dt_nodelabel_enabled("grove_d3_header") or + dt_nodelabel_enabled("grove_d2_header") ) and + dt_label_with_parent_compat_enabled("grove_btn_d3", "gpio-keys") + extra_args: SHIELD=grove_btn_d3_inv + platform_allow: + - cytron_maker_pi_rp2040 + - seeeduino_lotus grove.connectors.grove_btn.gpio.d4: depends_on: grove_gpio filter: ( dt_nodelabel_enabled("grove_d4_header") or @@ -602,6 +1131,15 @@ tests: platform_allow: - cytron_maker_pi_rp2040 - seeeduino_lotus + grove.connectors.grove_btn.gpio.d4.inv: + depends_on: grove_gpio + filter: ( dt_nodelabel_enabled("grove_d4_header") or + dt_nodelabel_enabled("grove_d3_header") ) and + dt_label_with_parent_compat_enabled("grove_btn_d4", "gpio-keys") + extra_args: SHIELD=grove_btn_d4_inv + platform_allow: + - cytron_maker_pi_rp2040 + - seeeduino_lotus grove.connectors.grove_btn.gpio.d5: depends_on: grove_gpio filter: ( dt_nodelabel_enabled("grove_d5_header") or @@ -611,6 +1149,15 @@ tests: platform_allow: - cytron_maker_pi_rp2040 - seeeduino_lotus + grove.connectors.grove_btn.gpio.d5.inv: + depends_on: grove_gpio + filter: ( dt_nodelabel_enabled("grove_d5_header") or + dt_nodelabel_enabled("grove_d4_header") ) and + dt_label_with_parent_compat_enabled("grove_btn_d5", "gpio-keys") + extra_args: SHIELD=grove_btn_d5_inv + platform_allow: + - cytron_maker_pi_rp2040 + - seeeduino_lotus grove.connectors.grove_btn.gpio.d6: depends_on: grove_gpio filter: ( dt_nodelabel_enabled("grove_d6_header") or @@ -620,6 +1167,15 @@ tests: platform_allow: - cytron_maker_pi_rp2040 - seeeduino_lotus + grove.connectors.grove_btn.gpio.d6.inv: + depends_on: grove_gpio + filter: ( dt_nodelabel_enabled("grove_d6_header") or + dt_nodelabel_enabled("grove_d5_header") ) and + dt_label_with_parent_compat_enabled("grove_btn_d6", "gpio-keys") + extra_args: SHIELD=grove_btn_d6_inv + platform_allow: + - cytron_maker_pi_rp2040 + - seeeduino_lotus grove.connectors.grove_btn.gpio.d7: depends_on: grove_gpio filter: ( dt_nodelabel_enabled("grove_d7_header") or @@ -629,6 +1185,15 @@ tests: platform_allow: - cytron_maker_pi_rp2040 - seeeduino_lotus + grove.connectors.grove_btn.gpio.d7.inv: + depends_on: grove_gpio + filter: ( dt_nodelabel_enabled("grove_d7_header") or + dt_nodelabel_enabled("grove_d6_header") ) and + dt_label_with_parent_compat_enabled("grove_btn_d7", "gpio-keys") + extra_args: SHIELD=grove_btn_d7_inv + platform_allow: + - cytron_maker_pi_rp2040 + - seeeduino_lotus grove.connectors.grove_btn.gpio.d8: depends_on: grove_gpio filter: ( dt_nodelabel_enabled("grove_d8_header") or @@ -637,6 +1202,14 @@ tests: extra_args: SHIELD=grove_btn_d8 platform_allow: - seeeduino_lotus + grove.connectors.grove_btn.gpio.d8.inv: + depends_on: grove_gpio + filter: ( dt_nodelabel_enabled("grove_d8_header") or + dt_nodelabel_enabled("grove_d7_header") ) and + dt_label_with_parent_compat_enabled("grove_btn_d8", "gpio-keys") + extra_args: SHIELD=grove_btn_d8_inv + platform_allow: + - seeeduino_lotus grove.connectors.grove_btn.gpio.d9: depends_on: grove_gpio filter: ( dt_nodelabel_enabled("grove_d9_header") or @@ -644,6 +1217,13 @@ tests: dt_label_with_parent_compat_enabled("grove_btn_d9", "gpio-keys") extra_args: SHIELD=grove_btn_d9 skip: true + grove.connectors.grove_btn.gpio.d9.inv: + depends_on: grove_gpio + filter: ( dt_nodelabel_enabled("grove_d9_header") or + dt_nodelabel_enabled("grove_d8_header") ) and + dt_label_with_parent_compat_enabled("grove_btn_d9", "gpio-keys") + extra_args: SHIELD=grove_btn_d9_inv + skip: true grove.connectors.grove_btn.gpio.d10: depends_on: grove_gpio filter: ( dt_nodelabel_enabled("grove_d10_header") or @@ -651,6 +1231,13 @@ tests: dt_label_with_parent_compat_enabled("grove_btn_d10", "gpio-keys") extra_args: SHIELD=grove_btn_d10 skip: true + grove.connectors.grove_btn.gpio.d10.inv: + depends_on: grove_gpio + filter: ( dt_nodelabel_enabled("grove_d10_header") or + dt_nodelabel_enabled("grove_d9_header") ) and + dt_label_with_parent_compat_enabled("grove_btn_d10", "gpio-keys") + extra_args: SHIELD=grove_btn_d10_inv + skip: true grove.connectors.grove_btn.gpio.d11: depends_on: grove_gpio filter: ( dt_nodelabel_enabled("grove_d11_header") or @@ -658,6 +1245,13 @@ tests: dt_label_with_parent_compat_enabled("grove_btn_d11", "gpio-keys") extra_args: SHIELD=grove_btn_d11 skip: true + grove.connectors.grove_btn.gpio.d11.inv: + depends_on: grove_gpio + filter: ( dt_nodelabel_enabled("grove_d11_header") or + dt_nodelabel_enabled("grove_d10_header") ) and + dt_label_with_parent_compat_enabled("grove_btn_d11", "gpio-keys") + extra_args: SHIELD=grove_btn_d11_inv + skip: true grove.connectors.grove_btn.gpio.d12: depends_on: grove_gpio filter: ( dt_nodelabel_enabled("grove_d12_header") or @@ -665,6 +1259,13 @@ tests: dt_label_with_parent_compat_enabled("grove_btn_d12", "gpio-keys") extra_args: SHIELD=grove_btn_d12 skip: true + grove.connectors.grove_btn.gpio.d12.inv: + depends_on: grove_gpio + filter: ( dt_nodelabel_enabled("grove_d12_header") or + dt_nodelabel_enabled("grove_d11_header") ) and + dt_label_with_parent_compat_enabled("grove_btn_d12", "gpio-keys") + extra_args: SHIELD=grove_btn_d12_inv + skip: true grove.connectors.grove_btn.gpio.d13: depends_on: grove_gpio filter: ( dt_nodelabel_enabled("grove_d13_header") or @@ -672,6 +1273,13 @@ tests: dt_label_with_parent_compat_enabled("grove_btn_d13", "gpio-keys") extra_args: SHIELD=grove_btn_d13 skip: true + grove.connectors.grove_btn.gpio.d13.inv: + depends_on: grove_gpio + filter: ( dt_nodelabel_enabled("grove_d13_header") or + dt_nodelabel_enabled("grove_d12_header") ) and + dt_label_with_parent_compat_enabled("grove_btn_d13", "gpio-keys") + extra_args: SHIELD=grove_btn_d13_inv + skip: true grove.connectors.grove_btn.gpio.d14: depends_on: grove_gpio filter: ( dt_nodelabel_enabled("grove_d14_header") or @@ -682,6 +1290,16 @@ tests: platform_allow: - cytron_maker_nano_rp2040 - seeeduino_lotus + grove.connectors.grove_btn.gpio.d14.inv: + depends_on: grove_gpio + filter: ( dt_nodelabel_enabled("grove_d14_header") or + dt_nodelabel_enabled("grove_d13_header") or + dt_nodelabel_enabled("grove_a0_header") ) and + dt_label_with_parent_compat_enabled("grove_btn_d14", "gpio-keys") + extra_args: SHIELD=grove_btn_d14_inv + platform_allow: + - cytron_maker_nano_rp2040 + - seeeduino_lotus grove.connectors.grove_btn.gpio.d15: depends_on: grove_gpio filter: ( dt_nodelabel_enabled("grove_d15_header") or @@ -693,6 +1311,17 @@ tests: platform_allow: - cytron_maker_nano_rp2040 - seeeduino_lotus + grove.connectors.grove_btn.gpio.d15.inv: + depends_on: grove_gpio + filter: ( dt_nodelabel_enabled("grove_d15_header") or + dt_nodelabel_enabled("grove_d14_header") or + dt_nodelabel_enabled("grove_a1_header") or + dt_nodelabel_enabled("grove_a0_header") ) and + dt_label_with_parent_compat_enabled("grove_btn_d15", "gpio-keys") + extra_args: SHIELD=grove_btn_d15_inv + platform_allow: + - cytron_maker_nano_rp2040 + - seeeduino_lotus grove.connectors.grove_btn.gpio.d16: depends_on: grove_gpio filter: ( dt_nodelabel_enabled("grove_d16_header") or @@ -704,6 +1333,17 @@ tests: platform_allow: - cytron_maker_pi_rp2040 - seeeduino_lotus + grove.connectors.grove_btn.gpio.d16.inv: + depends_on: grove_gpio + filter: ( dt_nodelabel_enabled("grove_d16_header") or + dt_nodelabel_enabled("grove_d15_header") or + dt_nodelabel_enabled("grove_a2_header") or + dt_nodelabel_enabled("grove_a1_header") ) and + dt_label_with_parent_compat_enabled("grove_btn_d16", "gpio-keys") + extra_args: SHIELD=grove_btn_d16_inv + platform_allow: + - cytron_maker_pi_rp2040 + - seeeduino_lotus grove.connectors.grove_btn.gpio.d17: depends_on: grove_gpio filter: ( dt_nodelabel_enabled("grove_d17_header") or @@ -715,6 +1355,17 @@ tests: platform_allow: - cytron_maker_pi_rp2040 - seeeduino_lotus + grove.connectors.grove_btn.gpio.d17.inv: + depends_on: grove_gpio + filter: ( dt_nodelabel_enabled("grove_d17_header") or + dt_nodelabel_enabled("grove_d16_header") or + dt_nodelabel_enabled("grove_a3_header") or + dt_nodelabel_enabled("grove_a2_header") ) and + dt_label_with_parent_compat_enabled("grove_btn_d17", "gpio-keys") + extra_args: SHIELD=grove_btn_d17_inv + platform_allow: + - cytron_maker_pi_rp2040 + - seeeduino_lotus grove.connectors.grove_btn.gpio.d18: depends_on: grove_gpio filter: ( dt_nodelabel_enabled("grove_d18_header") or @@ -722,6 +1373,13 @@ tests: dt_nodelabel_enabled("grove_a4_header") ) and dt_label_with_parent_compat_enabled("grove_btn_d18", "gpio-keys") extra_args: SHIELD=grove_btn_d18 + grove.connectors.grove_btn.gpio.d18.inv: + depends_on: grove_gpio + filter: ( dt_nodelabel_enabled("grove_d18_header") or + dt_nodelabel_enabled("grove_i2c_header") or + dt_nodelabel_enabled("grove_a4_header") ) and + dt_label_with_parent_compat_enabled("grove_btn_d18", "gpio-keys") + extra_args: SHIELD=grove_btn_d18_inv grove.connectors.grove_btn.gpio.d19: depends_on: grove_gpio filter: ( dt_nodelabel_enabled("grove_d19_header") or @@ -729,6 +1387,13 @@ tests: dt_nodelabel_enabled("grove_a5_header") ) and dt_label_with_parent_compat_enabled("grove_btn_d19", "gpio-keys") extra_args: SHIELD=grove_btn_d19 + grove.connectors.grove_btn.gpio.d19.inv: + depends_on: grove_gpio + filter: ( dt_nodelabel_enabled("grove_d19_header") or + dt_nodelabel_enabled("grove_i2c_header") or + dt_nodelabel_enabled("grove_a5_header") ) and + dt_label_with_parent_compat_enabled("grove_btn_d19", "gpio-keys") + extra_args: SHIELD=grove_btn_d19_inv grove.connectors.grove_btn.gpio.d20: depends_on: grove_gpio filter: ( dt_nodelabel_enabled("grove_d20_header") or @@ -736,6 +1401,13 @@ tests: dt_label_with_parent_compat_enabled("grove_btn_d20", "gpio-keys") extra_args: SHIELD=grove_btn_d20 skip: true + grove.connectors.grove_btn.gpio.d20.inv: + depends_on: grove_gpio + filter: ( dt_nodelabel_enabled("grove_d20_header") or + dt_nodelabel_enabled("grove_a6_header") ) and + dt_label_with_parent_compat_enabled("grove_btn_d20", "gpio-keys") + extra_args: SHIELD=grove_btn_d20_inv + skip: true grove.connectors.grove_btn.gpio.d21: depends_on: grove_gpio filter: ( dt_nodelabel_enabled("grove_d21_header") or @@ -743,6 +1415,13 @@ tests: dt_label_with_parent_compat_enabled("grove_btn_d21", "gpio-keys") extra_args: SHIELD=grove_btn_d21 skip: true + grove.connectors.grove_btn.gpio.d21.inv: + depends_on: grove_gpio + filter: ( dt_nodelabel_enabled("grove_d21_header") or + dt_nodelabel_enabled("grove_d20_header") ) and + dt_label_with_parent_compat_enabled("grove_btn_d21", "gpio-keys") + extra_args: SHIELD=grove_btn_d21_inv + skip: true grove.connectors.grove_btn.gpio.d22: depends_on: grove_gpio filter: ( dt_nodelabel_enabled("grove_d22_header") or @@ -750,6 +1429,13 @@ tests: dt_label_with_parent_compat_enabled("grove_btn_d22", "gpio-keys") extra_args: SHIELD=grove_btn_d22 skip: true + grove.connectors.grove_btn.gpio.d22.inv: + depends_on: grove_gpio + filter: ( dt_nodelabel_enabled("grove_d22_header") or + dt_nodelabel_enabled("grove_d21_header") ) and + dt_label_with_parent_compat_enabled("grove_btn_d22", "gpio-keys") + extra_args: SHIELD=grove_btn_d22_inv + skip: true grove.connectors.grove_btn.gpio.d23: depends_on: grove_gpio filter: ( dt_nodelabel_enabled("grove_d23_header") or @@ -757,6 +1443,13 @@ tests: dt_label_with_parent_compat_enabled("grove_btn_d23", "gpio-keys") extra_args: SHIELD=grove_btn_d23 skip: true + grove.connectors.grove_btn.gpio.d23.inv: + depends_on: grove_gpio + filter: ( dt_nodelabel_enabled("grove_d23_header") or + dt_nodelabel_enabled("grove_d22_header") ) and + dt_label_with_parent_compat_enabled("grove_btn_d23", "gpio-keys") + extra_args: SHIELD=grove_btn_d23_inv + skip: true grove.connectors.grove_btn.gpio.d24: depends_on: grove_gpio filter: ( dt_nodelabel_enabled("grove_d24_header") or @@ -764,6 +1457,13 @@ tests: dt_label_with_parent_compat_enabled("grove_btn_d24", "gpio-keys") extra_args: SHIELD=grove_btn_d24 skip: true + grove.connectors.grove_btn.gpio.d24.inv: + depends_on: grove_gpio + filter: ( dt_nodelabel_enabled("grove_d24_header") or + dt_nodelabel_enabled("grove_d23_header") ) and + dt_label_with_parent_compat_enabled("grove_btn_d24", "gpio-keys") + extra_args: SHIELD=grove_btn_d24_inv + skip: true grove.connectors.grove_btn.gpio.d25: depends_on: grove_gpio filter: ( dt_nodelabel_enabled("grove_d25_header") or @@ -771,6 +1471,13 @@ tests: dt_label_with_parent_compat_enabled("grove_btn_d25", "gpio-keys") extra_args: SHIELD=grove_btn_d25 skip: true + grove.connectors.grove_btn.gpio.d25.inv: + depends_on: grove_gpio + filter: ( dt_nodelabel_enabled("grove_d25_header") or + dt_nodelabel_enabled("grove_d24_header") ) and + dt_label_with_parent_compat_enabled("grove_btn_d25", "gpio-keys") + extra_args: SHIELD=grove_btn_d25_inv + skip: true grove.connectors.grove_btn.gpio.d26: depends_on: grove_gpio filter: ( dt_nodelabel_enabled("grove_d26_header") or @@ -779,6 +1486,14 @@ tests: extra_args: SHIELD=grove_btn_d26 platform_allow: - cytron_maker_pi_rp2040 + grove.connectors.grove_btn.gpio.d26.inv: + depends_on: grove_gpio + filter: ( dt_nodelabel_enabled("grove_d26_header") or + dt_nodelabel_enabled("grove_d25_header") ) and + dt_label_with_parent_compat_enabled("grove_btn_d26", "gpio-keys") + extra_args: SHIELD=grove_btn_d26_inv + platform_allow: + - cytron_maker_pi_rp2040 grove.connectors.grove_btn.gpio.d27: depends_on: grove_gpio filter: ( dt_nodelabel_enabled("grove_d27_header") or @@ -787,6 +1502,14 @@ tests: extra_args: SHIELD=grove_btn_d27 platform_allow: - cytron_maker_pi_rp2040 + grove.connectors.grove_btn.gpio.d27.inv: + depends_on: grove_gpio + filter: ( dt_nodelabel_enabled("grove_d27_header") or + dt_nodelabel_enabled("grove_d26_header") ) and + dt_label_with_parent_compat_enabled("grove_btn_d27", "gpio-keys") + extra_args: SHIELD=grove_btn_d27_inv + platform_allow: + - cytron_maker_pi_rp2040 grove.connectors.grove_btn.gpio.d28: depends_on: grove_gpio filter: ( dt_nodelabel_enabled("grove_d28_header") or @@ -795,6 +1518,14 @@ tests: extra_args: SHIELD=grove_btn_d28 platform_allow: - cytron_maker_pi_rp2040 + grove.connectors.grove_btn.gpio.d28.inv: + depends_on: grove_gpio + filter: ( dt_nodelabel_enabled("grove_d28_header") or + dt_nodelabel_enabled("grove_d27_header") ) and + dt_label_with_parent_compat_enabled("grove_btn_d28", "gpio-keys") + extra_args: SHIELD=grove_btn_d28_inv + platform_allow: + - cytron_maker_pi_rp2040 grove.connectors.grove_btn.gpio.d29: depends_on: grove_gpio filter: ( dt_nodelabel_enabled("grove_d29_header") or @@ -802,6 +1533,13 @@ tests: dt_label_with_parent_compat_enabled("grove_btn_d29", "gpio-keys") extra_args: SHIELD=grove_btn_d29 skip: true + grove.connectors.grove_btn.gpio.d29.inv: + depends_on: grove_gpio + filter: ( dt_nodelabel_enabled("grove_d29_header") or + dt_nodelabel_enabled("grove_d28_header") ) and + dt_label_with_parent_compat_enabled("grove_btn_d29", "gpio-keys") + extra_args: SHIELD=grove_btn_d29_inv + skip: true grove.connectors.grove_btn.gpio.d30: depends_on: grove_gpio filter: ( dt_nodelabel_enabled("grove_d30_header") or @@ -809,6 +1547,13 @@ tests: dt_label_with_parent_compat_enabled("grove_btn_d30", "gpio-keys") extra_args: SHIELD=grove_btn_d30 skip: true + grove.connectors.grove_btn.gpio.d30.inv: + depends_on: grove_gpio + filter: ( dt_nodelabel_enabled("grove_d30_header") or + dt_nodelabel_enabled("grove_d29_header") ) and + dt_label_with_parent_compat_enabled("grove_btn_d30", "gpio-keys") + extra_args: SHIELD=grove_btn_d30_inv + skip: true grove.connectors.grove_btn.gpio.d31: depends_on: grove_gpio filter: ( dt_nodelabel_enabled("grove_d31_header") or @@ -816,3 +1561,10 @@ tests: dt_label_with_parent_compat_enabled("grove_btn_d31", "gpio-keys") extra_args: SHIELD=grove_btn_d31 skip: true + grove.connectors.grove_btn.gpio.d31.inv: + depends_on: grove_gpio + filter: ( dt_nodelabel_enabled("grove_d31_header") or + dt_nodelabel_enabled("grove_d30_header") ) and + dt_label_with_parent_compat_enabled("grove_btn_d31", "gpio-keys") + extra_args: SHIELD=grove_btn_d31_inv + skip: true From 5a4778cfeb1c5190598e188ef03e7b07c1d37fb4 Mon Sep 17 00:00:00 2001 From: Stephan Linz Date: Mon, 25 Nov 2024 07:12:24 +0100 Subject: [PATCH 7/7] release: add draft notes for upcoming 4.0.0 Add new supported Grove Button and LED Shields: - Grove Dual Button V1.0 (Sep 2019) - Grove LED Button V1.0 (Jun 2018) Add GitHub issue #277. Signed-off-by: Stephan Linz --- doc/bridle/releases/release-notes-4.0.0.rst | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/doc/bridle/releases/release-notes-4.0.0.rst b/doc/bridle/releases/release-notes-4.0.0.rst index 8837d22155..50cf15c700 100644 --- a/doc/bridle/releases/release-notes-4.0.0.rst +++ b/doc/bridle/releases/release-notes-4.0.0.rst @@ -185,6 +185,17 @@ Change log :kconfig:option:`CONFIG_GPIO_PCA9555` to :kconfig:option:`CONFIG_GPIO_PCA9555_REGRST` +* Add more shields: + + * *Grove Button Shields*: + + * **Grove Dual Button V1.0 (Sep 2019)** by Seeed Studio + * **Grove LED Button V1.0 (Jun 2018)** by Seeed Studio + + * *Grove LED Shields*: + + * **Grove LED Button V1.0 (Jun 2018)** by Seeed Studio + The following sections provide detailed lists of changes by component. * PROJECT UPDATE to `Zephyr Project`_ v4.0 @@ -246,6 +257,7 @@ Issue Related Items These GitHub issues were addressed since project bootstrapping: +* :github:`277` - [HW] Grove Dual and LED Button Module as Shield * :github:`275` - [BUG] Lost Bridle's document version selector * :github:`274` - [FCR] Bump to Zephyr v4.0 * :github:`272` - [BUG] build all Bridle samples test runs into ``devicetree error``