@@ -202,12 +202,18 @@ PinStatus digitalRead(pin_size_t pinNumber) {
202
202
}
203
203
204
204
struct k_timer arduino_pin_timers[ARRAY_SIZE(arduino_pins)];
205
+ struct k_timer arduino_pin_timers_timeout[ARRAY_SIZE(arduino_pins)];
205
206
206
207
void tone_expiry_cb (struct k_timer *timer) {
207
208
const struct gpio_dt_spec *spec = (gpio_dt_spec*)k_timer_user_data_get (timer);
208
209
gpio_pin_toggle_dt (spec);
209
210
}
210
211
212
+ void tone_timeout_cb (struct k_timer *timer) {
213
+ pin_size_t pinNumber = (pin_size_t )(uintptr_t )k_timer_user_data_get (timer);
214
+ noTone (pinNumber);
215
+ }
216
+
211
217
void tone (pin_size_t pinNumber, unsigned int frequency, unsigned long duration) {
212
218
struct k_timer *timer = &arduino_pin_timers[pinNumber];
213
219
const struct gpio_dt_spec *spec = &arduino_pins[pinNumber];
@@ -217,6 +223,13 @@ void tone(pin_size_t pinNumber, unsigned int frequency, unsigned long duration)
217
223
k_timer_user_data_set (timer, (void *)spec);
218
224
gpio_pin_set_dt (spec, 1 );
219
225
k_timer_start (timer, timeout, timeout);
226
+
227
+ if (duration > 0 ) {
228
+ timer = &arduino_pin_timers_timeout[pinNumber];
229
+ k_timer_init (timer, tone_timeout_cb, NULL );
230
+ k_timer_user_data_set (timer, (void *)(uintptr_t )pinNumber);
231
+ k_timer_start (timer, K_MSEC (duration), K_NO_WAIT);
232
+ }
220
233
}
221
234
222
235
void noTone (pin_size_t pinNumber) {
0 commit comments