7
7
#include < Arduino.h>
8
8
#include " zephyrInternal.h"
9
9
10
+
10
11
namespace {
11
12
12
13
struct device gpio0;
@@ -17,47 +18,40 @@ static constexpr uint32_t pins[] = {16u, 32u}; // exclusive-upper
17
18
static constexpr size_t NUM_PORTS = sizeof (gpios) / sizeof (gpios[0 ]);
18
19
19
20
20
- constexpr pin_size_t local_gpio_pin (int ) {
21
- return 0 ;
22
- }
23
-
24
21
/* グローバル → gpio* を探す */
25
- constexpr const struct device *
26
- local_gpio_port_recursive (size_t pin, const struct device *const *ctrl,
22
+ constexpr const struct device * local_gpio_port_recursive (pin_size_t pin, const struct device *const *ctrl,
27
23
const uint32_t *end, size_t n) {
28
24
return (n == 0 ) ? nullptr
29
25
: (pin < end[0 ]) ? ctrl[0 ]
30
26
: local_gpio_port_recursive (pin, ctrl + 1 , end + 1 , n - 1 );
31
27
}
32
28
33
- constexpr const struct device *local_gpio_port (size_t pin ) {
34
- return local_gpio_port_recursive (pin , gpios, pins, NUM_PORTS);
29
+ constexpr const struct device *local_gpio_port (pin_size_t gpin ) {
30
+ return local_gpio_port_recursive (gpin , gpios, pins, NUM_PORTS);
35
31
}
36
32
37
33
/* ポートインデックスを取得(見つからなければ size_t(-1)) */
38
- constexpr size_t port_index_recursive (const struct device *target,
34
+ constexpr pin_size_t port_index_recursive (const struct device *target,
39
35
const struct device *const *table,
40
- size_t idx, size_t n) {
36
+ pin_size_t idx, size_t n) {
41
37
return (n == 0 ) ? size_t (-1 )
42
38
: (target == table[0 ])
43
39
? idx
44
40
: port_index_recursive (target, table + 1 , idx + 1 , n - 1 );
45
41
}
46
42
47
- pin_size_t global_gpio_pin (const struct device *port, size_t local_pin) noexcept {
48
- size_t pidx = port_index_recursive (port, gpios, 0 , NUM_PORTS);
49
- size_t base = (pidx == 0 ) ? 0 : pins[pidx - 1 ];
50
- size_t width = pins[pidx] - base;
43
+ constexpr pin_size_t local_gpio_pin (pin_size_t gpin) {
44
+ return gpin - pins[port_index_recursive (local_gpio_port (gpin), gpios, 0 , NUM_PORTS)];
45
+ }
51
46
52
- return ((local_pin < width) ? base + local_pin : size_t (-1 ));
47
+ constexpr pin_size_t global_gpio_pin (const struct device *lport, pin_size_t lpin) noexcept {
48
+ return pins[port_index_recursive (lport, gpios, 0 , NUM_PORTS)] + lpin;
53
49
}
54
50
55
51
constexpr uint32_t local_gpio_dt_flags (int ) {
56
52
return 0 ;
57
53
}
58
54
59
-
60
-
61
55
template <class N , class Head > constexpr const N max_in_list (const N max, const Head &head)
62
56
{
63
57
return (max >= head) ? max : head;
0 commit comments