From 4453c9ad2e416cf882feccf59c6889ac344a0d03 Mon Sep 17 00:00:00 2001 From: MCUdude Date: Thu, 8 Oct 2020 19:20:55 +0200 Subject: [PATCH] Fix recursive template based code Move template code to header file, and move all functions to cpp file. This has to be done in order to compile with PlatformIO, which follows ISO C++ --- src/SigmaDSP.cpp | 20 ++++++++++---------- src/SigmaDSP.h | 27 ++++++++++++++++++--------- 2 files changed, 28 insertions(+), 19 deletions(-) diff --git a/src/SigmaDSP.cpp b/src/SigmaDSP.cpp index 15fc83d..3129500 100644 --- a/src/SigmaDSP.cpp +++ b/src/SigmaDSP.cpp @@ -884,16 +884,6 @@ void SigmaDSP::muteDAC(bool mute) } -template -void SigmaDSP::safeload_write(const Address &address, const Data1 &data1, const DataN &...dataN) -{ - // Store passed address - _dspRegAddr = address; - - safeload_write_wrapper(data1, dataN...); -} - - /*************************************** Function: safeload_writeRegister() Purpose: Writes 5 bytes of data to the parameter memory of the DSP, the first byte is 0x00 @@ -945,6 +935,16 @@ void SigmaDSP::safeload_writeRegister(uint16_t memoryAddress, float data, bool f safeload_writeRegister(memoryAddress, dataArray, finished); } +#if defined(ARDUINO_ARCH_ESP8266) || defined(ARDUINO_ARCH_ESP32) + void SigmaDSP::safeload_writeRegister(uint16_t memoryAddress, int16_t data, bool finished) { safeload_writeRegister(memoryAddress, (int32_t)data, finished); } +#else + void SigmaDSP::safeload_writeRegister(uint16_t memoryAddress, int data, bool finished) { safeload_writeRegister(memoryAddress, (int32_t)data, finished); } +#endif +void SigmaDSP::safeload_writeRegister(uint16_t memoryAddress, uint32_t data, bool finished) { safeload_writeRegister(memoryAddress, (int32_t)data, finished); } +void SigmaDSP::safeload_writeRegister(uint16_t memoryAddress, uint16_t data, bool finished) { safeload_writeRegister(memoryAddress, (int32_t)data, finished); } +void SigmaDSP::safeload_writeRegister(uint16_t memoryAddress, uint8_t data, bool finished) { safeload_writeRegister(memoryAddress, (int32_t)data, finished); } +void SigmaDSP::safeload_writeRegister(uint16_t memoryAddress, double data, bool finished) { safeload_writeRegister(memoryAddress, (float)data, finished); } + /*************************************** Function: writeRegister() diff --git a/src/SigmaDSP.h b/src/SigmaDSP.h index ddca06b..aa74781 100644 --- a/src/SigmaDSP.h +++ b/src/SigmaDSP.h @@ -135,20 +135,29 @@ class SigmaDSP // Template wrapper for safeload_writeRegister // Handles both int 28.0 and float 5.23 formatted parameters // Usage: safeload_write(uint16_t startMemoryAddress, data1, data2, ..., dataN); + //template + //void safeload_write(const Address &address, const Data1 &data1, const DataN &...dataN); + template - void safeload_write(const Address &address, const Data1 &data1, const DataN &...dataN); + void safeload_write(const Address &address, const Data1 &data1, const DataN &...dataN) + { + // Store passed address + _dspRegAddr = address; + safeload_write_wrapper(data1, dataN...); + } - void safeload_writeRegister(uint16_t memoryAddress, uint8_t *data, bool finished); - void safeload_writeRegister(uint16_t memoryAddress, int32_t data, bool finished); - void safeload_writeRegister(uint16_t memoryAddress, float data, bool finished); + void safeload_writeRegister(uint16_t memoryAddress, uint8_t *data, bool finished); + void safeload_writeRegister(uint16_t memoryAddress, int32_t data, bool finished); + void safeload_writeRegister(uint16_t memoryAddress, float data, bool finished); #if defined(ARDUINO_ARCH_ESP8266) || defined(ARDUINO_ARCH_ESP32) - void safeload_writeRegister(uint16_t memoryAddress, int16_t data, bool finished) { safeload_writeRegister(memoryAddress, (int32_t)data, finished); } + void safeload_writeRegister(uint16_t memoryAddress, int16_t data, bool finished); #else - void safeload_writeRegister(uint16_t memoryAddress, int data, bool finished) { safeload_writeRegister(memoryAddress, (int32_t)data, finished); } + void safeload_writeRegister(uint16_t memoryAddress, int data, bool finished); #endif - void safeload_writeRegister(uint16_t memoryAddress, uint16_t data, bool finished) { safeload_writeRegister(memoryAddress, (int32_t)data, finished); } - void safeload_writeRegister(uint16_t memoryAddress, uint8_t data, bool finished) { safeload_writeRegister(memoryAddress, (int32_t)data, finished); } - void safeload_writeRegister(uint16_t memoryAddress, double data, bool finished) { safeload_writeRegister(memoryAddress, (float)data, finished); } + void safeload_writeRegister(uint16_t memoryAddress, uint32_t data, bool finished); + void safeload_writeRegister(uint16_t memoryAddress, uint16_t data, bool finished); + void safeload_writeRegister(uint16_t memoryAddress, uint8_t data, bool finished); + void safeload_writeRegister(uint16_t memoryAddress, double data, bool finished); void writeRegister(uint16_t memoryAddress, uint8_t length, uint8_t *data); void writeRegister(uint16_t memoryAddress, uint8_t length, const uint8_t *data); void writeRegisterBlock(uint16_t memoryAddress, uint16_t length, const uint8_t *data, uint8_t registerSize);