From 4afd63184ddae2a558c634fcca8e4f9223c39e88 Mon Sep 17 00:00:00 2001
From: lumapu <lp@lufami.de>
Date: Sat, 9 Dec 2023 15:01:23 +0100
Subject: [PATCH] 0.8.16 * fix crash if NRF is not enabled

---
 src/CHANGES.md   |  3 +++
 src/defines.h    |  2 +-
 src/hm/hmRadio.h | 19 ++++++++++---------
 3 files changed, 14 insertions(+), 10 deletions(-)

diff --git a/src/CHANGES.md b/src/CHANGES.md
index d77355df..7186a436 100644
--- a/src/CHANGES.md
+++ b/src/CHANGES.md
@@ -1,5 +1,8 @@
 # Development Changes
 
+## 0.8.16 - 2023-12-09
+* fix crash if NRF is not enabled
+
 ## 0.8.15 - 2023-12-09
 * added support for opendtufusion fusion ethernet shield #886
 * fixed range of HMS / HMT frequencies to 863 to 870 MHz #1238
diff --git a/src/defines.h b/src/defines.h
index ade86df4..9d35b9be 100644
--- a/src/defines.h
+++ b/src/defines.h
@@ -13,7 +13,7 @@
 //-------------------------------------
 #define VERSION_MAJOR       0
 #define VERSION_MINOR       8
-#define VERSION_PATCH       15
+#define VERSION_PATCH       16
 
 //-------------------------------------
 typedef struct {
diff --git a/src/hm/hmRadio.h b/src/hm/hmRadio.h
index 4a43914e..e227efe1 100644
--- a/src/hm/hmRadio.h
+++ b/src/hm/hmRadio.h
@@ -35,16 +35,17 @@ class HmRadio : public Radio {
         HmRadio() {
             mDtuSn   = DTU_SN;
             mIrqRcvd = false;
+            mNrf24.reset(new RF24(CE_PIN, CS_PIN, SPI_SPEED));
         }
         ~HmRadio() {}
 
         void setup(bool *serialDebug, bool *privacyMode, bool *printWholeTrace, uint8_t irq = IRQ_PIN, uint8_t ce = CE_PIN, uint8_t cs = CS_PIN, uint8_t sclk = SCLK_PIN, uint8_t mosi = MOSI_PIN, uint8_t miso = MISO_PIN) {
             DPRINTLN(DBG_VERBOSE, F("hmRadio.h:setup"));
+
             #if defined(CONFIG_IDF_TARGET_ESP32S3) && defined(ETHERNET)
+            // replace object
             mNrfHal.init(mosi, miso, sclk, cs, ce);
-            mNrf24 = new RF24(&mNrfHal);
-            #else
-            mNrf24 = new RF24(CE_PIN, CS_PIN, SPI_SPEED);
+            mNrf24.reset(new RF24(&mNrfHal));
             #endif
             pinMode(irq, INPUT_PULLUP);
 
@@ -70,22 +71,22 @@ class HmRadio : public Radio {
                     //
                 #else
                     #if CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3
-                        mSpi = new SPIClass(HSPI);
+                        mSpi.reset(new SPIClass(HSPI));
                     #else
-                        mSpi = new SPIClass(VSPI);
+                        mSpi.reset(new SPIClass(VSPI));
                     #endif
                     mSpi->begin(sclk, miso, mosi, cs);
                 #endif
             #else
                 //the old ESP82xx cannot freely place their SPI pins
-                mSpi = new SPIClass();
+                mSpi.reset(new SPIClass());
                 mSpi->begin();
             #endif
 
             #if defined(CONFIG_IDF_TARGET_ESP32S3)
                 mNrf24->begin();
             #else
-                mNrf24->begin(mSpi, ce, cs);
+                mNrf24->begin(mSpi.get(), ce, cs);
             #endif
             mNrf24->setRetries(3, 15); // 3*250us + 250us and 15 loops -> 15ms
 
@@ -353,8 +354,8 @@ class HmRadio : public Radio {
         bool    mGotLastMsg = false;
         uint32_t mMillis;
 
-        SPIClass* mSpi;
-        RF24 *mNrf24;
+        std::unique_ptr<SPIClass> mSpi;
+        std::unique_ptr<RF24> mNrf24;
         #if defined(CONFIG_IDF_TARGET_ESP32S3) && defined(ETHERNET)
         nrfHal mNrfHal;
         #endif