gearmulator

Emulation of classic VA synths of the late 90s/2000s that are based on Motorola 56300 family DSPs
Log | Files | Refs | Submodules | README | LICENSE

commit e1b61fd5c00ad641e225101309131dda56861abc
parent 7ec5c687eff73f3dd841117f9dcfbe2ae8064224
Author: dsp56300 <dsp56300@users.noreply.github.com>
Date:   Thu, 19 May 2022 18:20:52 +0200

optionally ignore checksum errors when parsing midi packet

Diffstat:
Msource/jucePluginLib/midipacket.cpp | 9+++++----
Msource/jucePluginLib/midipacket.h | 4++--
2 files changed, 7 insertions(+), 6 deletions(-)

diff --git a/source/jucePluginLib/midipacket.cpp b/source/jucePluginLib/midipacket.cpp @@ -106,7 +106,7 @@ namespace pluginLib return create(_dst, _data, {}); } - bool MidiPacket::parse(Data& _data, ParamValues& _parameterValues, const ParameterDescriptions& _parameters, const Sysex& _src) const + bool MidiPacket::parse(Data& _data, ParamValues& _parameterValues, const ParameterDescriptions& _parameters, const Sysex& _src, bool _ignoreChecksumErrors/* = true*/) const { if(_src.size() != size()) return false; @@ -135,8 +135,9 @@ namespace pluginLib if(checksum != s) { - LOG("Packet checksum error, calculated " << std::hex << checksum << " but data contains " << s); - return false; + LOG("Packet checksum error, calculated " << std::hex << static_cast<int>(checksum) << " but data contains " << static_cast<int>(s)); + if(!_ignoreChecksumErrors) + return false; } } continue; @@ -192,7 +193,7 @@ namespace pluginLib return true; } - uint8_t MidiPacket::calcChecksum(const MidiDataDefinition& _d, Sysex& _src) + uint8_t MidiPacket::calcChecksum(const MidiDataDefinition& _d, const Sysex& _src) { auto checksum = _d.checksumInitValue; diff --git a/source/jucePluginLib/midipacket.h b/source/jucePluginLib/midipacket.h @@ -51,7 +51,7 @@ namespace pluginLib using ParamIndices = std::set<ParamIndex>; using ParamValues = std::map<ParamIndex, uint8_t>; // part, index => value using NamedParamValues = std::map<std::pair<uint8_t,std::string>, uint8_t>; // part, name => value - using Sysex = const std::vector<uint8_t>; + using Sysex = std::vector<uint8_t>; MidiPacket() = default; explicit MidiPacket(std::string _name, std::vector<MidiDataDefinition>&& _bytes); @@ -61,7 +61,7 @@ namespace pluginLib bool create(std::vector<uint8_t>& _dst, const Data& _data, const NamedParamValues& _paramValues) const; bool create(std::vector<uint8_t>& _dst, const Data& _data) const; - bool parse(Data& _data, ParamValues& _parameterValues, const ParameterDescriptions& _parameters, Sysex& _src) const; + bool parse(Data& _data, ParamValues& _parameterValues, const ParameterDescriptions& _parameters, const Sysex& _src, bool _ignoreChecksumErrors = true) const; bool getParameterIndices(ParamIndices& _indices, const ParameterDescriptions& _parameters) const; private: