From 96b6e8a079b9f3ce9f173c979cd973dd3944f282 Mon Sep 17 00:00:00 2001 From: Ayush Singh Date: Sat, 8 Jun 2024 16:24:45 +0530 Subject: [PATCH] zephyrCommon: Implement pulseIn - A basic sync implementation Signed-off-by: Ayush Singh --- cores/arduino/zephyrCommon.cpp | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/cores/arduino/zephyrCommon.cpp b/cores/arduino/zephyrCommon.cpp index 219d3cda..0abbe0b0 100644 --- a/cores/arduino/zephyrCommon.cpp +++ b/cores/arduino/zephyrCommon.cpp @@ -328,3 +328,28 @@ void detachInterrupt(pin_size_t pinNumber) { setInterruptHandler(pinNumber, nullptr); } + +unsigned long pulseIn(pin_size_t pinNumber, uint8_t state, unsigned long timeout) { + const struct gpio_dt_spec *spec = &arduino_pins[pinNumber]; + int64_t start, end, delta; + + if (!gpio_is_ready_dt(spec)) { + return 0; + } + + if (!gpio_pin_is_input_dt(spec)) { + return 0; + } + + + while(gpio_pin_get_dt(spec) == state); + while(gpio_pin_get_dt(spec) != state); + + start = k_uptime_ticks(); + while(gpio_pin_get_dt(spec) == state); + end = k_uptime_ticks(); + + delta = k_ticks_to_us_floor64(end) - k_ticks_to_us_floor64(start); + + return (unsigned long)delta; +}