7
7
#include < Arduino.h>
8
8
#include " zephyrInternal.h"
9
9
10
-
11
10
namespace {
12
11
struct gpio_dt_spec local_gpio_dt (int ) {
13
12
struct gpio_dt_spec sp = {0 };
@@ -26,10 +25,6 @@ constexpr pin_size_t global_gpio_pin(struct device* port, int pin) {
26
25
return pin;
27
26
}
28
27
29
- static const uint32_t xpins[] = {16u , 32u }; // exclusive-upper
30
- static const int port_num = sizeof (xpins) / sizeof (xpins[0 ]);
31
- static const int pin_num = 32u ;
32
-
33
28
template <class N , class Head > constexpr const N max_in_list (const N max, const Head &head)
34
29
{
35
30
return (max >= head) ? max : head;
@@ -59,7 +54,7 @@ struct gpio_port_callback {
59
54
struct arduino_callback handlers[max_ngpios];
60
55
gpio_port_pins_t pins;
61
56
const struct device *dev;
62
- } port_callback[port_num ] = {0 };
57
+ } port_callback[GPIO_PORT_NUMS ] = {0 };
63
58
64
59
struct gpio_port_callback *find_gpio_port_callback (const struct device *dev)
65
60
{
@@ -185,39 +180,37 @@ void yield(void) {
185
180
* A high physical level will be interpreted as value 1
186
181
*/
187
182
void pinMode (pin_size_t pinNumber, PinMode pinMode) {
188
- const gpio_dt_spec spec = local_gpio_dt (pinNumber);
189
183
if (pinMode == INPUT) { // input mode
190
- gpio_pin_configure_dt (&spec, GPIO_INPUT | GPIO_ACTIVE_HIGH);
184
+ gpio_pin_configure (local_gpio_port (pinNumber), local_gpio_pin (pinNumber),
185
+ GPIO_INPUT | GPIO_ACTIVE_HIGH);
191
186
} else if (pinMode == INPUT_PULLUP) { // input with internal pull-up
192
- gpio_pin_configure_dt (&spec, GPIO_INPUT | GPIO_PULL_UP | GPIO_ACTIVE_HIGH);
187
+ gpio_pin_configure (local_gpio_port (pinNumber), local_gpio_pin (pinNumber),
188
+ GPIO_INPUT | GPIO_PULL_UP | GPIO_ACTIVE_HIGH);
193
189
} else if (pinMode == INPUT_PULLDOWN) { // input with internal pull-down
194
- gpio_pin_configure_dt (&spec, GPIO_INPUT | GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH);
190
+ gpio_pin_configure (local_gpio_port (pinNumber), local_gpio_pin (pinNumber),
191
+ GPIO_INPUT | GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH);
195
192
} else if (pinMode == OUTPUT) { // output mode
196
- gpio_pin_configure_dt (&spec, GPIO_OUTPUT_LOW | GPIO_ACTIVE_HIGH);
193
+ gpio_pin_configure (local_gpio_port (pinNumber), local_gpio_pin (pinNumber),
194
+ GPIO_OUTPUT_LOW | GPIO_ACTIVE_HIGH);
197
195
}
198
196
}
199
197
200
198
void digitalWrite (pin_size_t pinNumber, PinStatus status) {
201
- const gpio_dt_spec spec = local_gpio_dt (pinNumber);
202
- gpio_pin_set_dt (&spec, status);
199
+ gpio_pin_set (local_gpio_port (pinNumber), local_gpio_pin (pinNumber), status);
203
200
}
204
201
205
202
PinStatus digitalRead (pin_size_t pinNumber) {
206
- const gpio_dt_spec spec = local_gpio_dt (pinNumber);
207
- return (gpio_pin_get_dt (&spec) == 1 ) ? HIGH : LOW;
203
+ return (gpio_pin_get (local_gpio_port (pinNumber), local_gpio_pin (pinNumber)) == 1 ) ? HIGH : LOW;
208
204
}
209
205
210
- struct k_timer arduino_pin_timers[GPIO_PIN_NUMS];
211
- struct k_timer arduino_pin_timers_timeout[GPIO_PIN_NUMS];
212
-
213
206
void tone_expiry_cb (struct k_timer *timer) {
214
- const struct gpio_dt_spec *spec = (gpio_dt_spec *)k_timer_user_data_get (timer);
215
- gpio_pin_toggle_dt (spec );
207
+ struct pin_timer * pt = (struct pin_timer *)k_timer_user_data_get (timer);
208
+ gpio_pin_toggle (pt-> gpio , pt-> pin );
216
209
}
217
210
218
211
void tone_timeout_cb (struct k_timer *timer) {
219
- pin_size_t pinNumber = (pin_size_t )( uintptr_t )k_timer_user_data_get (timer);
220
- noTone (pinNumber );
212
+ struct pin_timer * pt = (struct pin_timer * )k_timer_user_data_get (timer);
213
+ noTone (global_gpio_pin (pt-> gpio , pt-> pin ) );
221
214
}
222
215
223
216
void tone (pin_size_t pinNumber, unsigned int frequency, unsigned long duration) {
@@ -228,7 +221,7 @@ void tone(pin_size_t pinNumber, unsigned int frequency, unsigned long duration)
228
221
pinMode (pinNumber, OUTPUT);
229
222
230
223
if (frequency == 0 ) {
231
- gpio_pin_set_dt (&spec , 0 );
224
+ gpio_pin_set ( local_gpio_port (pinNumber), local_gpio_pin (pinNumber) , 0 );
232
225
return ;
233
226
}
234
227
@@ -410,31 +403,30 @@ long random(long max) {
410
403
unsigned long pulseIn (pin_size_t pinNumber, uint8_t state, unsigned long timeout) {
411
404
struct k_timer timer;
412
405
int64_t start, end, delta = 0 ;
413
- const struct gpio_dt_spec spec = local_gpio_dt (pinNumber);
414
406
415
407
k_timer_init (&timer, NULL , NULL );
416
408
k_timer_start (&timer, K_MSEC (timeout), K_NO_WAIT);
417
409
418
- if (!gpio_is_ready_dt (&spec )) {
410
+ if (!device_is_ready ( local_gpio_port (pinNumber) )) {
419
411
goto cleanup;
420
412
}
421
413
422
- if (!gpio_pin_is_input_dt (&spec )) {
414
+ if (!device_is_ready ( local_gpio_port (pinNumber) )) {
423
415
goto cleanup;
424
416
}
425
417
426
- while (gpio_pin_get_dt (&spec ) == state && k_timer_status_get (&timer) == 0 );
418
+ while (gpio_pin_get ( local_gpio_port (pinNumber), local_gpio_pin (pinNumber) ) == state && k_timer_status_get (&timer) == 0 );
427
419
if (k_timer_status_get (&timer) > 0 ) {
428
420
goto cleanup;
429
421
}
430
422
431
- while (gpio_pin_get_dt (&spec ) != state && k_timer_status_get (&timer) == 0 );
423
+ while (gpio_pin_get ( local_gpio_port (pinNumber), local_gpio_pin (pinNumber) ) != state && k_timer_status_get (&timer) == 0 );
432
424
if (k_timer_status_get (&timer) > 0 ) {
433
425
goto cleanup;
434
426
}
435
427
436
428
start = k_uptime_ticks ();
437
- while (gpio_pin_get_dt (&spec ) == state && k_timer_status_get (&timer) == 0 );
429
+ while (gpio_pin_get ( local_gpio_port (pinNumber), local_gpio_pin (pinNumber) ) == state && k_timer_status_get (&timer) == 0 );
438
430
if (k_timer_status_get (&timer) > 0 ) {
439
431
goto cleanup;
440
432
}
0 commit comments