Skip to content

Commit

Permalink
Fix recursive template based code
Browse files Browse the repository at this point in the history
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++
  • Loading branch information
MCUdude committed Oct 8, 2020
1 parent 1d768a4 commit 4453c9a
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 19 deletions.
20 changes: 10 additions & 10 deletions src/SigmaDSP.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -884,16 +884,6 @@ void SigmaDSP::muteDAC(bool mute)
}


template <typename Address, typename Data1, typename... DataN>
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
Expand Down Expand Up @@ -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()
Expand Down
27 changes: 18 additions & 9 deletions src/SigmaDSP.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 <typename Address, typename Data1, typename... DataN>
//void safeload_write(const Address &address, const Data1 &data1, const DataN &...dataN);

template <typename Address, typename Data1, typename... DataN>
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);
Expand Down

0 comments on commit 4453c9a

Please sign in to comment.