commit 355a8a1b2a2c7f4af5fff0c3c7c243a53c26bdf7
parent 94643828a02a8efcda2319fef944012e3b553cd1
Author: dsp56300 <dsp56300@users.noreply.github.com>
Date: Wed, 4 Dec 2024 21:17:43 +0100
update checksums after applying modifications
Diffstat:
7 files changed, 17 insertions(+), 7 deletions(-)
diff --git a/source/mqJucePlugin/mqPatchManager.cpp b/source/mqJucePlugin/mqPatchManager.cpp
@@ -99,6 +99,8 @@ namespace mqJucePlugin
result[mqLib::IdxSingleBank] = static_cast<uint8_t>(bank);
result[mqLib::IdxSingleProgram] = static_cast<uint8_t>(program);
+ mqLib::State::updateChecksum(result);
+
return result;
}
diff --git a/source/mqLib/mqstate.h b/source/mqLib/mqstate.h
@@ -95,8 +95,6 @@ namespace mqLib
static void createSequencerMultiData(std::vector<uint8_t>& _data);
- private:
-
template<size_t Size> static bool append(SysEx& _dst, const std::array<uint8_t, Size>& _src)
{
if(!isValid(_src))
@@ -128,6 +126,8 @@ namespace mqLib
return true;
}
+ private:
+
bool parseSingleDump(const SysEx& _data);
bool parseMultiDump(const SysEx& _data);
bool parseDrumDump(const SysEx& _data);
diff --git a/source/virusJucePlugin/PatchManager.cpp b/source/virusJucePlugin/PatchManager.cpp
@@ -252,6 +252,11 @@ namespace genericVirusUI
result[249 + 11] = val0;
result[249 + 12] = val1;
+ result[265] = virusLib::Microcontroller::calcChecksum(result, 267 - 2);
+
+ if (result.size() > 267)
+ result[result.size() - 2] = virusLib::Microcontroller::calcChecksum(result, result.size() - 2);
+
return result;
}
diff --git a/source/virusLib/microcontroller.cpp b/source/virusLib/microcontroller.cpp
@@ -1244,11 +1244,11 @@ PresetVersion Microcontroller::getPresetVersion(const uint8_t v)
return A;
}
-uint8_t Microcontroller::calcChecksum(const std::vector<uint8_t>& _data, const size_t _offset)
+uint8_t Microcontroller::calcChecksum(const std::vector<uint8_t>& _data, const size_t _offset, const size_t _count/* = std::numeric_limits<size_t>::max()*/)
{
uint8_t cs = 0;
- for (size_t i = _offset; i < _data.size(); ++i)
+ for (size_t i = _offset; i < std::min(_data.size(), _count); ++i)
cs += _data[i];
return cs & 0x7f;
diff --git a/source/virusLib/microcontroller.h b/source/virusLib/microcontroller.h
@@ -8,6 +8,7 @@
#include <list>
#include <mutex>
+#include <limits>
#include "hdi08List.h"
#include "hdi08MidiQueue.h"
@@ -56,7 +57,7 @@ public:
static PresetVersion getPresetVersion(const TPreset& _preset);
static PresetVersion getPresetVersion(uint8_t _versionCode);
- static uint8_t calcChecksum(const std::vector<uint8_t>& _data, size_t _offset = 5);
+ static uint8_t calcChecksum(const std::vector<uint8_t>& _data, size_t _offset = 5, size_t _count = std::numeric_limits<size_t>::max());
bool dspHasBooted() const;
diff --git a/source/xtJucePlugin/xtPatchManager.cpp b/source/xtJucePlugin/xtPatchManager.cpp
@@ -136,6 +136,8 @@ namespace xtJucePlugin
_result[xt::SysexIndex::IdxSingleBank ] = static_cast<uint8_t>(bank);
_result[xt::SysexIndex::IdxSingleProgram] = static_cast<uint8_t>(program);
+ xt::State::updateChecksum(_result, wLib::IdxCommand);
+
return true;
};
diff --git a/source/xtLib/xtState.h b/source/xtLib/xtState.h
@@ -110,8 +110,6 @@ namespace xt
static SysexCommand getCommand(const SysEx& _data);
- private:
-
template<size_t Size> static bool append(SysEx& _dst, const std::array<uint8_t, Size>& _src, uint32_t _checksumStartIndex)
{
if(!isValid(_src))
@@ -135,6 +133,8 @@ namespace xt
return true;
}
+ private:
+
bool parseSingleDump(const SysEx& _data);
bool parseMultiDump(const SysEx& _data);
bool parseGlobalDump(const SysEx& _data);