Skip to content

Commit 9ba2256

Browse files
committed
x
1 parent 3086485 commit 9ba2256

File tree

3 files changed

+21
-72
lines changed

3 files changed

+21
-72
lines changed

cores/arduino/Arduino.h

Lines changed: 1 addition & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -23,68 +23,14 @@
2323
DT_FOREACH_PROP_ELEM_VARGS(DT_PATH(zephyr_user), gpio_ports, ZARD_ACCUM_NGPIOS, \
2424
DT_PHANDLE_BY_IDX(n, p, i)) \
2525
DT_PHA_BY_IDX(n, p, i, pin)
26-
#define DIGITAL_PIN_EXISTS(n, p, i, dev, num) \
27-
(((dev == DT_REG_ADDR(DT_PHANDLE_BY_IDX(n, p, i))) && \
28-
(num == DT_PHA_BY_IDX(n, p, i, pin))) \
29-
? 1 \
30-
: 0)
31-
32-
/* Check all pins are defined only once */
33-
#define DIGITAL_PIN_CHECK_UNIQUE(i, _) \
34-
((DT_FOREACH_PROP_ELEM_SEP_VARGS( \
35-
DT_PATH(zephyr_user), digital_pin_gpios, DIGITAL_PIN_EXISTS, (+), \
36-
DT_REG_ADDR(DT_PHANDLE_BY_IDX(DT_PATH(zephyr_user), digital_pin_gpios, i)), \
37-
DT_PHA_BY_IDX(DT_PATH(zephyr_user), digital_pin_gpios, i, pin))) == 1)
38-
39-
#if !LISTIFY(DT_PROP_LEN(DT_PATH(zephyr_user), digital_pin_gpios), DIGITAL_PIN_CHECK_UNIQUE, (&&))
40-
#error "digital_pin_gpios has duplicate definition"
41-
#endif
42-
43-
#undef DIGITAL_PIN_CHECK_UNIQUE
4426

4527
#ifndef LED_BUILTIN
46-
47-
/* Return the index of it if matched, oterwise return 0 */
48-
#define LED_BUILTIN_INDEX_BY_REG_AND_PINNUM(n, p, i, dev, num) \
49-
(DIGITAL_PIN_EXISTS(n, p, i, dev, num) ? i : 0)
50-
51-
/* Only matched pin returns non-zero value, so the sum is matched pin's index */
52-
#define DIGITAL_PIN_GPIOS_FIND_PIN(dev, pin) \
53-
DT_FOREACH_PROP_ELEM_SEP_VARGS(DT_PATH(zephyr_user), digital_pin_gpios, \
54-
LED_BUILTIN_INDEX_BY_REG_AND_PINNUM, (+), dev, pin)
55-
5628
#if DT_NODE_HAS_PROP(DT_PATH(zephyr_user), builtin_led_gpios) && \
5729
(DT_PROP_LEN(DT_PATH(zephyr_user), builtin_led_gpios) > 0)
5830
#define LED_BUILTIN ZARD_GLOBAL_GPIO_NUM(DT_PATH(zephyr_user), builtin_led_gpios, 0)
59-
60-
#if !(DT_FOREACH_PROP_ELEM_SEP_VARGS( \
61-
DT_PATH(zephyr_user), digital_pin_gpios, DIGITAL_PIN_EXISTS, (+), \
62-
DT_REG_ADDR(DT_PHANDLE_BY_IDX(DT_PATH(zephyr_user), builtin_led_gpios, 0)), \
63-
DT_PHA_BY_IDX(DT_PATH(zephyr_user), builtin_led_gpios, 0, pin)) > 0)
64-
#warning "pin not found in digital_pin_gpios"
65-
#else
66-
#define LED_BUILTIN \
67-
DIGITAL_PIN_GPIOS_FIND_PIN( \
68-
DT_REG_ADDR(DT_PHANDLE_BY_IDX(DT_PATH(zephyr_user), builtin_led_gpios, 0)), \
69-
DT_PHA_BY_IDX(DT_PATH(zephyr_user), builtin_led_gpios, 0, pin))
70-
#endif
71-
72-
/* If digital-pin-gpios is not defined, tries to use the led0 alias */
7331
#elif DT_NODE_EXISTS(DT_ALIAS(led0))
74-
75-
#if !(DT_FOREACH_PROP_ELEM_SEP_VARGS(DT_PATH(zephyr_user), digital_pin_gpios, DIGITAL_PIN_EXISTS, \
76-
(+), DT_REG_ADDR(DT_PHANDLE_BY_IDX(DT_ALIAS(led0), gpios, 0)), \
77-
DT_PHA_BY_IDX(DT_ALIAS(led0), gpios, 0, pin)) > 0)
78-
#warning "pin not found in digital_pin_gpios"
79-
#else
80-
//#define LED_BUILTIN ZARD_GLOBAL_GPIO_NUM(DT_ALIAS(led0), gpios, 0)
81-
#define LED_BUILTIN \
82-
DIGITAL_PIN_GPIOS_FIND_PIN(DT_REG_ADDR(DT_PHANDLE_BY_IDX(DT_ALIAS(led0), gpios, 0)), \
83-
DT_PHA_BY_IDX(DT_ALIAS(led0), gpios, 0, pin))
32+
#define LED_BUILTIN ZARD_GLOBAL_GPIO_NUM(DT_ALIAS(led0), gpios, 0)
8433
#endif
85-
86-
#endif // builtin_led_gpios
87-
8834
#endif // LED_BUILTIN
8935

9036
#define DN_ENUMS(n, p, i) D##i = i

cores/arduino/zephyrCommon.cpp

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -140,10 +140,10 @@ struct gpio_port_callback *find_gpio_port_callback(const struct device *dev)
140140

141141
void setInterruptHandler(pin_size_t pinNumber, voidFuncPtr func)
142142
{
143-
struct gpio_port_callback *pcb = find_gpio_port_callback(arduino_pins[pinNumber].port);
143+
struct gpio_port_callback *pcb = find_gpio_port_callback(local_gpio_port(pinNumber));
144144

145145
if (pcb) {
146-
pcb->handlers[BIT(arduino_pins[pinNumber].pin)].handler = func;
146+
pcb->handlers[BIT(local_gpio_pin(pinNumber))].handler = func;
147147
}
148148
}
149149

@@ -229,26 +229,26 @@ void yield(void) {
229229
*/
230230
void pinMode(pin_size_t pinNumber, PinMode pinMode) {
231231
if (pinMode == INPUT) { // input mode
232-
gpio_pin_configure_dt(&arduino_pins[pinNumber],
232+
global_gpio_pin_configure(pinNumber,
233233
GPIO_INPUT | GPIO_ACTIVE_HIGH);
234234
} else if (pinMode == INPUT_PULLUP) { // input with internal pull-up
235-
gpio_pin_configure_dt(&arduino_pins[pinNumber],
235+
global_gpio_pin_configure(pinNumber,
236236
GPIO_INPUT | GPIO_PULL_UP | GPIO_ACTIVE_HIGH);
237237
} else if (pinMode == INPUT_PULLDOWN) { // input with internal pull-down
238-
gpio_pin_configure_dt(&arduino_pins[pinNumber],
238+
global_gpio_pin_configure(pinNumber,
239239
GPIO_INPUT | GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH);
240240
} else if (pinMode == OUTPUT) { // output mode
241-
gpio_pin_configure_dt(&arduino_pins[pinNumber],
241+
global_gpio_pin_configure(pinNumber,
242242
GPIO_OUTPUT_LOW | GPIO_ACTIVE_HIGH);
243243
}
244244
}
245245

246246
void digitalWrite(pin_size_t pinNumber, PinStatus status) {
247-
gpio_pin_set_dt(&arduino_pins[pinNumber], status);
247+
gpio_pin_set(local_gpio_port(pinNumber), local_gpio_pin(pinNumber), status);
248248
}
249249

250250
PinStatus digitalRead(pin_size_t pinNumber) {
251-
return (gpio_pin_get_dt(&arduino_pins[pinNumber]) == 1) ? HIGH : LOW;
251+
return (gpio_pin_get(local_gpio_port(pinNumber), local_gpio_pin(pinNumber)) == 1) ? HIGH : LOW;
252252
}
253253

254254
struct pin_timer {
@@ -415,16 +415,16 @@ void attachInterrupt(pin_size_t pinNumber, voidFuncPtr callback, PinStatus pinSt
415415
return;
416416
}
417417

418-
pcb = find_gpio_port_callback(arduino_pins[pinNumber].port);
418+
pcb = find_gpio_port_callback(local_gpio_port(pinNumber));
419419
__ASSERT(pcb != nullptr, "gpio_port_callback not found");
420420

421-
pcb->pins |= BIT(arduino_pins[pinNumber].pin);
421+
pcb->pins |= BIT(local_gpio_pin(pinNumber));
422422
setInterruptHandler(pinNumber, callback);
423423
enableInterrupt(pinNumber);
424424

425-
gpio_pin_interrupt_configure(arduino_pins[pinNumber].port, arduino_pins[pinNumber].pin, intmode);
425+
gpio_pin_interrupt_configure(local_gpio_port(pinNumber), local_gpio_pin(pinNumber), intmode);
426426
gpio_init_callback(&pcb->callback, handleGpioCallback, pcb->pins);
427-
gpio_add_callback(arduino_pins[pinNumber].port, &pcb->callback);
427+
gpio_add_callback(local_gpio_port(pinNumber), &pcb->callback);
428428
}
429429

430430
void detachInterrupt(pin_size_t pinNumber)
@@ -496,18 +496,18 @@ unsigned long pulseIn(pin_size_t pinNumber, uint8_t state, unsigned long timeout
496496
#endif // CONFIG_GPIO_GET_DIRECTION
497497

498498
void enableInterrupt(pin_size_t pinNumber) {
499-
struct gpio_port_callback *pcb = find_gpio_port_callback(arduino_pins[pinNumber].port);
499+
struct gpio_port_callback *pcb = find_gpio_port_callback(local_gpio_port(pinNumber));
500500

501501
if (pcb) {
502-
pcb->handlers[BIT(arduino_pins[pinNumber].pin)].enabled = true;
502+
pcb->handlers[BIT(local_gpio_pin(pinNumber))].enabled = true;
503503
}
504504
}
505505

506506
void disableInterrupt(pin_size_t pinNumber) {
507-
struct gpio_port_callback *pcb = find_gpio_port_callback(arduino_pins[pinNumber].port);
507+
struct gpio_port_callback *pcb = find_gpio_port_callback(local_gpio_port(pinNumber));
508508

509509
if (pcb) {
510-
pcb->handlers[BIT(arduino_pins[pinNumber].pin)].enabled = false;
510+
pcb->handlers[BIT(local_gpio_pin(pinNumber))].enabled = false;
511511
}
512512
}
513513

@@ -527,7 +527,7 @@ void noInterrupts(void) {
527527

528528
int digitalPinToInterrupt(pin_size_t pin) {
529529
struct gpio_port_callback *pcb =
530-
find_gpio_port_callback(arduino_pins[pin].port);
530+
find_gpio_port_callback(local_gpio_port(pin));
531531

532532
return (pcb) ? pin : -1;
533533
}
@@ -537,5 +537,6 @@ int digitalPinToInterrupt(pin_size_t pin) {
537537
#define PRINT_PIN(p, _) printf(STRINGIFY(Dx(p)) ":%d:%p:%d - " STRINGIFY(DXx(p)) ":%d:%p:%d\n", Dx(p), arduino_pins[Dx(p)].port, arduino_pins[Dx(p)].pin, DXx(p), local_gpio_port(DXx(p)), local_gpio_pin(DXx(p)));
538538

539539
void debug_dump(void) {
540+
int x = LED_BUILTIN;
540541
LISTIFY(DT_PROP_LEN(DT_PATH(zephyr_user), digital_pin_gpios), PRINT_PIN, ());
541542
}

samples/hello_arduino/prj.conf

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
11
CONFIG_ARDUINO_API=y
2+
CONFIG_PWM=y
3+
CONFIG_ADC=y

0 commit comments

Comments
 (0)