From 7aa7d7e0b80b97a8d95d962cfbd4f19e55702397 Mon Sep 17 00:00:00 2001 From: TOKITA Hiroshi Date: Tue, 20 Sep 2022 07:44:21 +0900 Subject: [PATCH] variants: Add common digital pin definition The digitalPins enumeration, arduino_pins array, and contents of these are determined by d[N]_gpios declaration in dts. Interlock the declaration with the dts definition. - Automatically calculate digitalPin enumeration and arduino_pins array from devicetree configuration. - LED digital pin definition read from 'leds' node in devicetree. Append it to enumeration and pins array. - static struct gpio_dt_spec d0, d1, ... declaration seem bit redundant. Declare as array of gpio_dt_spec. Signed-off-by: TOKITA Hiroshi --- cores/arduino/zephyrCommon.cpp | 12 +-- .../arduino_mkrzero/arduino_mkrzero_pinmap.h | 78 ------------------- .../arduino_nano_33_ble_pinmap.h | 70 ----------------- .../arduino_nano_33_ble_sense_pinmap.h | 70 ----------------- .../arduino_nano_33_iot_pinmap.h | 70 ----------------- .../nrf52840dk_nrf52840_pinmap.h | 78 ------------------- variants/variants.h | 30 +++++++ 7 files changed, 36 insertions(+), 372 deletions(-) diff --git a/cores/arduino/zephyrCommon.cpp b/cores/arduino/zephyrCommon.cpp index 94b58674..70973131 100644 --- a/cores/arduino/zephyrCommon.cpp +++ b/cores/arduino/zephyrCommon.cpp @@ -17,26 +17,26 @@ void yield(void) { */ void pinMode(pin_size_t pinNumber, PinMode pinMode) { if (pinMode == INPUT) { // input mode - gpio_pin_configure_dt(arduino_pins[pinNumber], + gpio_pin_configure_dt(&arduino_pins[pinNumber], GPIO_INPUT | GPIO_ACTIVE_HIGH); } else if (pinMode == INPUT_PULLUP) { // input with internal pull-up - gpio_pin_configure_dt(arduino_pins[pinNumber], + gpio_pin_configure_dt(&arduino_pins[pinNumber], GPIO_INPUT | GPIO_PULL_UP | GPIO_ACTIVE_HIGH); } else if (pinMode == INPUT_PULLDOWN) { // input with internal pull-down - gpio_pin_configure_dt(arduino_pins[pinNumber], + gpio_pin_configure_dt(&arduino_pins[pinNumber], GPIO_INPUT | GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH); } else if (pinMode == OUTPUT) { // output mode - gpio_pin_configure_dt(arduino_pins[pinNumber], + gpio_pin_configure_dt(&arduino_pins[pinNumber], GPIO_OUTPUT_LOW | GPIO_ACTIVE_HIGH); } } void digitalWrite(pin_size_t pinNumber, PinStatus status) { - gpio_pin_set_dt(arduino_pins[pinNumber], status); + gpio_pin_set_dt(&arduino_pins[pinNumber], status); } PinStatus digitalRead(pin_size_t pinNumber) { - return (gpio_pin_get_dt(arduino_pins[pinNumber]) == 1) ? HIGH : LOW; + return (gpio_pin_get_dt(&arduino_pins[pinNumber]) == 1) ? HIGH : LOW; } void delay(unsigned long ms) { k_sleep(K_MSEC(ms)); } diff --git a/variants/arduino_mkrzero/arduino_mkrzero_pinmap.h b/variants/arduino_mkrzero/arduino_mkrzero_pinmap.h index ac1407ac..a8bc14ed 100644 --- a/variants/arduino_mkrzero/arduino_mkrzero_pinmap.h +++ b/variants/arduino_mkrzero/arduino_mkrzero_pinmap.h @@ -10,83 +10,5 @@ #include #define LED_BUILTIN 22 -#define LED0_NODE DT_ALIAS(led0) - -static struct gpio_dt_spec d0 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d0_gpios); -static struct gpio_dt_spec d1 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d1_gpios); -static struct gpio_dt_spec d2 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d2_gpios); -static struct gpio_dt_spec d3 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d3_gpios); -static struct gpio_dt_spec d4 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d4_gpios); -static struct gpio_dt_spec d5 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d5_gpios); -static struct gpio_dt_spec d6 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d6_gpios); -static struct gpio_dt_spec d7 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d7_gpios); -static struct gpio_dt_spec d8 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d8_gpios); -static struct gpio_dt_spec d9 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d9_gpios); -static struct gpio_dt_spec d10 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d10_gpios); -static struct gpio_dt_spec d11 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d11_gpios); -static struct gpio_dt_spec d12 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d12_gpios); -static struct gpio_dt_spec d13 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d13_gpios); -static struct gpio_dt_spec d14 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d13_gpios); -static struct gpio_dt_spec d15 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d15_gpios); -static struct gpio_dt_spec d16 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d16_gpios); -static struct gpio_dt_spec d17 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d17_gpios); -static struct gpio_dt_spec d18 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d18_gpios); -static struct gpio_dt_spec d19 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d19_gpios); -static struct gpio_dt_spec d20 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d20_gpios); -static struct gpio_dt_spec d21 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d21_gpios); -static struct gpio_dt_spec led_builtin = GPIO_DT_SPEC_GET(LED0_NODE, gpios); - -static struct gpio_dt_spec *arduino_pins[23] = { - &d0, &d1, &d2, &d3, &d4, &d5, &d6, &d7, - &d8, &d9, &d10, &d11, &d12, &d13, &d14, &d15, - &d16, &d17, &d18, &d19, &d20, &d21, &led_builtin}; - -enum digitalPins { - D0, - D1, - D2, - D3, - D4, - D5, - D6, - D7, - D8, - D9, - D10, - D11, - D12, - D13, - D14, - D15, - D16, - D17, - D18, - D19, - D20, - D21, - LED -}; const static struct device *i2c_dev = DEVICE_DT_GET(DT_NODELABEL(sercom0)); diff --git a/variants/arduino_nano_33_ble/arduino_nano_33_ble_pinmap.h b/variants/arduino_nano_33_ble/arduino_nano_33_ble_pinmap.h index de31116e..b2ff6427 100644 --- a/variants/arduino_nano_33_ble/arduino_nano_33_ble_pinmap.h +++ b/variants/arduino_nano_33_ble/arduino_nano_33_ble_pinmap.h @@ -13,74 +13,4 @@ #define LED_BUILTIN 13 -static struct gpio_dt_spec d0 = GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d0_gpios); -static struct gpio_dt_spec d1 = GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d1_gpios); -static struct gpio_dt_spec d2 = GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d2_gpios); -static struct gpio_dt_spec d3 = GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d3_gpios); -static struct gpio_dt_spec d4 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d4_gpios); -static struct gpio_dt_spec d5 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d5_gpios); -static struct gpio_dt_spec d6 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d6_gpios); -static struct gpio_dt_spec d7 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d7_gpios); -static struct gpio_dt_spec d8 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d8_gpios); -static struct gpio_dt_spec d9 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d9_gpios); -static struct gpio_dt_spec d10 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d10_gpios); -static struct gpio_dt_spec d11 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d11_gpios); -static struct gpio_dt_spec d12 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d12_gpios); -static struct gpio_dt_spec d13 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d13_gpios); -static struct gpio_dt_spec d14 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d13_gpios); -static struct gpio_dt_spec d15 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d15_gpios); -static struct gpio_dt_spec d16 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d16_gpios); -static struct gpio_dt_spec d17 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d17_gpios); -static struct gpio_dt_spec d18 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d18_gpios); -static struct gpio_dt_spec d19 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d19_gpios); -static struct gpio_dt_spec d20 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d20_gpios); -static struct gpio_dt_spec d21 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d21_gpios); - -static struct gpio_dt_spec *arduino_pins[22] = { - &d0, &d1, &d2, &d3, &d4, &d5, &d6, &d7, &d8, &d9, &d10, - &d11, &d12, &d13, &d14, &d15, &d16, &d17, &d18, &d19, &d20, &d21}; - -enum digitalPins { - D0, - D1, - D2, - D3, - D4, - D5, - D6, - D7, - D8, - D9, - D10, - D11, - D12, - D13, - D14, - D15, - D16, - D17, - D18, - D19, - D20, - D21 -}; - const static struct device *i2c_dev = DEVICE_DT_GET(DT_NODELABEL(i2c0)); \ No newline at end of file diff --git a/variants/arduino_nano_33_ble_sense/arduino_nano_33_ble_sense_pinmap.h b/variants/arduino_nano_33_ble_sense/arduino_nano_33_ble_sense_pinmap.h index de31116e..b2ff6427 100644 --- a/variants/arduino_nano_33_ble_sense/arduino_nano_33_ble_sense_pinmap.h +++ b/variants/arduino_nano_33_ble_sense/arduino_nano_33_ble_sense_pinmap.h @@ -13,74 +13,4 @@ #define LED_BUILTIN 13 -static struct gpio_dt_spec d0 = GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d0_gpios); -static struct gpio_dt_spec d1 = GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d1_gpios); -static struct gpio_dt_spec d2 = GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d2_gpios); -static struct gpio_dt_spec d3 = GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d3_gpios); -static struct gpio_dt_spec d4 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d4_gpios); -static struct gpio_dt_spec d5 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d5_gpios); -static struct gpio_dt_spec d6 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d6_gpios); -static struct gpio_dt_spec d7 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d7_gpios); -static struct gpio_dt_spec d8 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d8_gpios); -static struct gpio_dt_spec d9 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d9_gpios); -static struct gpio_dt_spec d10 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d10_gpios); -static struct gpio_dt_spec d11 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d11_gpios); -static struct gpio_dt_spec d12 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d12_gpios); -static struct gpio_dt_spec d13 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d13_gpios); -static struct gpio_dt_spec d14 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d13_gpios); -static struct gpio_dt_spec d15 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d15_gpios); -static struct gpio_dt_spec d16 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d16_gpios); -static struct gpio_dt_spec d17 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d17_gpios); -static struct gpio_dt_spec d18 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d18_gpios); -static struct gpio_dt_spec d19 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d19_gpios); -static struct gpio_dt_spec d20 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d20_gpios); -static struct gpio_dt_spec d21 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d21_gpios); - -static struct gpio_dt_spec *arduino_pins[22] = { - &d0, &d1, &d2, &d3, &d4, &d5, &d6, &d7, &d8, &d9, &d10, - &d11, &d12, &d13, &d14, &d15, &d16, &d17, &d18, &d19, &d20, &d21}; - -enum digitalPins { - D0, - D1, - D2, - D3, - D4, - D5, - D6, - D7, - D8, - D9, - D10, - D11, - D12, - D13, - D14, - D15, - D16, - D17, - D18, - D19, - D20, - D21 -}; - const static struct device *i2c_dev = DEVICE_DT_GET(DT_NODELABEL(i2c0)); \ No newline at end of file diff --git a/variants/arduino_nano_33_iot/arduino_nano_33_iot_pinmap.h b/variants/arduino_nano_33_iot/arduino_nano_33_iot_pinmap.h index d6ab980b..df000a96 100644 --- a/variants/arduino_nano_33_iot/arduino_nano_33_iot_pinmap.h +++ b/variants/arduino_nano_33_iot/arduino_nano_33_iot_pinmap.h @@ -13,75 +13,5 @@ #define LED_BUILTIN 13 -static struct gpio_dt_spec d0 = GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d0_gpios); -static struct gpio_dt_spec d1 = GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d1_gpios); -static struct gpio_dt_spec d2 = GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d2_gpios); -static struct gpio_dt_spec d3 = GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d3_gpios); -static struct gpio_dt_spec d4 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d4_gpios); -static struct gpio_dt_spec d5 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d5_gpios); -static struct gpio_dt_spec d6 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d6_gpios); -static struct gpio_dt_spec d7 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d7_gpios); -static struct gpio_dt_spec d8 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d8_gpios); -static struct gpio_dt_spec d9 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d9_gpios); -static struct gpio_dt_spec d10 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d10_gpios); -static struct gpio_dt_spec d11 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d11_gpios); -static struct gpio_dt_spec d12 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d12_gpios); -static struct gpio_dt_spec d13 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d13_gpios); -static struct gpio_dt_spec d14 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d13_gpios); -static struct gpio_dt_spec d15 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d15_gpios); -static struct gpio_dt_spec d16 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d16_gpios); -static struct gpio_dt_spec d17 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d17_gpios); -static struct gpio_dt_spec d18 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d18_gpios); -static struct gpio_dt_spec d19 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d19_gpios); -static struct gpio_dt_spec d20 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d20_gpios); -static struct gpio_dt_spec d21 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d21_gpios); - -static struct gpio_dt_spec *arduino_pins[22] = { - &d0, &d1, &d2, &d3, &d4, &d5, &d6, &d7, &d8, &d9, &d10, - &d11, &d12, &d13, &d14, &d15, &d16, &d17, &d18, &d19, &d20, &d21}; - -enum digitalPins { - D0, - D1, - D2, - D3, - D4, - D5, - D6, - D7, - D8, - D9, - D10, - D11, - D12, - D13, - D14, - D15, - D16, - D17, - D18, - D19, - D20, - D21 -}; - const static struct device *i2c_dev = DEVICE_DT_GET(DT_NODELABEL(arduino_nano_i2c)); diff --git a/variants/nrf52840dk_nrf52840/nrf52840dk_nrf52840_pinmap.h b/variants/nrf52840dk_nrf52840/nrf52840dk_nrf52840_pinmap.h index 9324974a..f7fbd316 100644 --- a/variants/nrf52840dk_nrf52840/nrf52840dk_nrf52840_pinmap.h +++ b/variants/nrf52840dk_nrf52840/nrf52840dk_nrf52840_pinmap.h @@ -13,84 +13,6 @@ #define LED_BUILTIN 22 -static struct gpio_dt_spec d0 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d0_gpios); -static struct gpio_dt_spec d1 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d1_gpios); -static struct gpio_dt_spec d2 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d2_gpios); -static struct gpio_dt_spec d3 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d3_gpios); -static struct gpio_dt_spec d4 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d4_gpios); -static struct gpio_dt_spec d5 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d5_gpios); -static struct gpio_dt_spec d6 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d6_gpios); -static struct gpio_dt_spec d7 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d7_gpios); -static struct gpio_dt_spec d8 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d8_gpios); -static struct gpio_dt_spec d9 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d9_gpios); -static struct gpio_dt_spec d10 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d10_gpios); -static struct gpio_dt_spec d11 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d11_gpios); -static struct gpio_dt_spec d12 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d12_gpios); -static struct gpio_dt_spec d13 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d13_gpios); -static struct gpio_dt_spec d14 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d13_gpios); -static struct gpio_dt_spec d15 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d15_gpios); -static struct gpio_dt_spec d16 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d16_gpios); -static struct gpio_dt_spec d17 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d17_gpios); -static struct gpio_dt_spec d18 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d18_gpios); -static struct gpio_dt_spec d19 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d19_gpios); -static struct gpio_dt_spec d20 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d20_gpios); -static struct gpio_dt_spec d21 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d21_gpios); -static struct gpio_dt_spec d22 = - GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d22_gpios); /* LED0 */ - -static struct gpio_dt_spec *arduino_pins[23] = { - &d0, &d1, &d2, &d3, &d4, &d5, &d6, &d7, &d8, &d9, &d10, - &d11, &d12, &d13, &d14, &d15, &d16, &d17, &d18, &d19, &d20, &d21, - &d22}; - -enum digitalPins { - D0, - D1, - D2, - D3, - D4, - D5, - D6, - D7, - D8, - D9, - D10, - D11, - D12, - D13, - D14, - D15, - D16, - D17, - D18, - D19, - D20, - D21, - D22 /* LED0 */ -}; - const static struct device *i2c_dev = DEVICE_DT_GET(DT_NODELABEL(arduino_i2c)); #endif diff --git a/variants/variants.h b/variants/variants.h index 765cdd0f..25b0da61 100644 --- a/variants/variants.h +++ b/variants/variants.h @@ -1,3 +1,7 @@ +/* SPDX-License-Identifier: Apache-2.0 */ + +#pragma once + #ifdef CONFIG_BOARD_ARDUINO_NANO_33_BLE #include #endif // CONFIG_BOARD_ARDUINO_NANO_33_BLE @@ -14,3 +18,29 @@ #include "arduino_mkrzero_pinmap.h" #endif // CONFIG_BOARD_ARDUINO_MKRZERO +#define MAX_DIGITAL_PINS 255 + +#define DN_ENUMS(n, _) COND_CODE_1(DT_NODE_HAS_PROP(DT_PATH(zephyr_user), \ + d ## n ## _gpios), (D ## n ,), ()) + +#define LABEL_UPPER_TOKEN_COMMA(nodeid) DT_STRING_UPPER_TOKEN(nodeid, label), + +/* + * expand as + * enum digitalPins { D0, D1, ... LED... NUM_OF_DIGITAL_PINS }; + */ +enum digitalPins { LISTIFY(MAX_DIGITAL_PINS, DN_ENUMS, ()) + DT_FOREACH_CHILD(DT_PATH(leds), LABEL_UPPER_TOKEN_COMMA) + NUM_OF_DIGITAL_PINS }; + + +#define NUMBERED_GPIO_DT_SPEC(n, _) \ + COND_CODE_1(DT_NODE_HAS_PROP(DT_PATH(zephyr_user), d ## n ## _gpios), \ + (GPIO_DT_SPEC_GET(DT_PATH(zephyr_user), d ## n ## _gpios),), ()) + +#define LABELED_GPIO_DT_SPEC(nodeid) GPIO_DT_SPEC_GET_BY_IDX(nodeid, gpios, 0), + +static struct gpio_dt_spec arduino_pins[NUM_OF_DIGITAL_PINS] = { + LISTIFY(MAX_DIGITAL_PINS, NUMBERED_GPIO_DT_SPEC, ()) + DT_FOREACH_CHILD(DT_PATH(leds), LABELED_GPIO_DT_SPEC) +};