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:
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: