From da91482b7df06f67fb07352e0fdcbde04e7909e4 Mon Sep 17 00:00:00 2001 From: SG Date: Thu, 18 Feb 2021 11:22:13 +1000 Subject: [PATCH] One wire slave: fix presence timing, disable irq early (#348) --- lib/onewire/one_wire_slave.cpp | 5 ++--- lib/onewire/one_wire_timings.h | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/lib/onewire/one_wire_slave.cpp b/lib/onewire/one_wire_slave.cpp index 51e0b0e6..0da51318 100644 --- a/lib/onewire/one_wire_slave.cpp +++ b/lib/onewire/one_wire_slave.cpp @@ -256,24 +256,23 @@ bool OneWireSlave::bus_start(void) { if(device == nullptr) { result = false; } else { + __disable_irq(); pin_init_opendrain_in_isr_ctx(); error = OneWireSlaveError::NO_ERROR; if(show_presence()) { - __disable_irq(); - // TODO think about multiple command cycles receive_and_process_cmd(); result = (error == OneWireSlaveError::NO_ERROR || error == OneWireSlaveError::INCORRECT_ONEWIRE_CMD); - __enable_irq(); } else { result = false; } pin_init_interrupt_in_isr_ctx(); + __enable_irq(); } return result; diff --git a/lib/onewire/one_wire_timings.h b/lib/onewire/one_wire_timings.h index b5290077..7ef30a0e 100644 --- a/lib/onewire/one_wire_timings.h +++ b/lib/onewire/one_wire_timings.h @@ -41,7 +41,7 @@ public: constexpr static const OneWiteTimeType RESET_MAX = 960; constexpr static const OneWiteTimeType PRESENCE_TIMEOUT = 20; - constexpr static const OneWiteTimeType PRESENCE_MIN = 160; + constexpr static const OneWiteTimeType PRESENCE_MIN = 100; constexpr static const OneWiteTimeType PRESENCE_MAX = 480; constexpr static const OneWiteTimeType MSG_HIGH_TIMEOUT = 15000;