@@ -487,3 +487,59 @@ int digitalPinToInterrupt(pin_size_t pin) {
487487
488488 return (pcb) ? pin : -1 ;
489489}
490+
491+ int xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx;
492+
493+ struct gpio_port_num {
494+ const struct device *port;
495+ uint16_t pin;
496+ };
497+
498+ #include < zephyr/sys/util_macro.h>
499+
500+ #define ALPHA_0 a
501+ #define ALPHA_1 b
502+ #define ALPHA_2 c
503+ #define ALPHA_3 d
504+ #define ALPHA_4 e
505+ #define ALPHA_5 f
506+ #define ALPHA_6 g
507+ #define ALPHA_7 h
508+ #define ALPHA_8 i
509+ #define ALPHA_9 j
510+ #define ALPHA_10 k
511+ #define ALPHA_11 l
512+ #define ALPHA_12 m
513+ #define ALPHA_13 n
514+ #define ALPHA_14 o
515+ #define ALPHA_15 p
516+ #define PORT_ALPHA_N (n ) UTIL_CAT(port, UTIL_CAT(ALPHA_, n))
517+
518+ #define NODES (i, label_from_n ) \
519+ COND_CODE_1 (DT_NODE_EXISTS(DT_NODELABEL(label_from_n(i))), (DT_NODELABEL(label_from_n(i)),), ())
520+
521+ #define DO_DROP_TAIL (N, ...) GET_ARGS_FIRST_N(N, __VA_ARGS__)
522+ #define DROP_TAIL (...) DO_DROP_TAIL(UTIL_DEC(NUM_VA_ARGS(__VA_ARGS__)), __VA_ARGS__)
523+
524+ #define DO_GET_ARGS_FIRST_N (N, ...) GET_ARGS_FIRST_N(N, __VA_ARGS__)
525+ #define EXPAND_ARGS (...) UTIL_EXPAND __VA_ARGS__
526+
527+ #define NGPIOS (x ) DT_PROP(x, ngpios)
528+ #define ADDX (...) LISTIFY(NUM_VA_ARGS(__VA_ARGS__), NGPIOS, (+), __VA_ARGS__)
529+
530+ #define FX (i, x, arg ) {DEVICE_DT_GET (x), ADDX (EXPAND_ARGS (arg))}
531+ #define XXX (...) { FOR_EACH_IDX_FIXED_ARG (FX, (,), (__VA_ARGS__), __VA_ARGS__) }
532+
533+ #define LIST_PORT_ALPHA (n ) LISTIFY(n, NODES, (), PORT_ALPHA_N) 0
534+
535+ constexpr struct gpio_port_num portx[] = XXX(DROP_TAIL(LIST_PORT_ALPHA(16 )));
536+
537+ #define FFF (i, x, fa ) i, DO_GET_ARGS_FIRST_N(UTIL_INC(i), EXPAND_ARGS(fa)),,
538+ FOR_EACH_IDX_FIXED_ARG (FFF, (,), (a, b, c, d), 1, 2, 3, 4)
539+
540+ // #if NUM_VA_ARGS(LISTIFY(16, PORT_ALPHA_NODES, ()) 0) != 1
541+ int hoge;
542+ // #endif
543+
544+
545+
0 commit comments