commit b8ca98fab871ff1caa91c11a3a0b7a438bab892c
parent 4731c7585589dce6b8ecad490b62ddfc08df838a
Author: dsp56300 <dsp56300@users.noreply.github.com>
Date: Sat, 14 May 2022 20:15:01 +0200
midi packet implementation WIP
Diffstat:
3 files changed, 49 insertions(+), 7 deletions(-)
diff --git a/source/jucePluginLib/midipacket.cpp b/source/jucePluginLib/midipacket.cpp
@@ -1,5 +1,38 @@
#include "midipacket.h"
+#include "../dsp56300/source/dsp56kEmu/logging.h"
+
namespace pluginLib
{
+ bool MidiPacket::create(std::vector<uint8_t>& _dst, std::map<MidiDataType, uint8_t>& _data) const
+ {
+ _dst.reserve(size());
+
+ for(size_t i=0; i<size(); ++i)
+ {
+ const auto& b = m_bytes[i];
+ switch (b.type)
+ {
+ case MidiDataType::Null:
+ _dst.push_back(0);
+ break;
+ case MidiDataType::Byte:
+ _dst.push_back(b.byte);
+ break;
+ default:
+ {
+ const auto it = _data.find(b.type);
+
+ if(it == _data.end())
+ {
+ LOG("Failed to find data of type " << static_cast<int>(b.type) << " to fill byte " << i << " of midi packet");
+ return false;
+ }
+
+ _dst.push_back(it->second);
+ }
+ }
+ }
+ return true;
+ }
}
diff --git a/source/jucePluginLib/midipacket.h b/source/jucePluginLib/midipacket.h
@@ -1,6 +1,7 @@
#pragma once
#include <cstdint>
+#include <map>
#include <string>
#include <vector>
@@ -34,6 +35,15 @@ namespace pluginLib
uint32_t checksumInitValue = 0;
};
- std::vector<MidiByte> bytes;
+ MidiPacket() = default;
+ explicit MidiPacket(std::vector<MidiByte>&& bytes) : m_bytes(std::move(bytes)) {}
+
+ const std::vector<MidiByte>& bytes() { return m_bytes; }
+ size_t size() const { return m_bytes.size(); }
+
+ bool create(std::vector<uint8_t>& _dst, std::map<MidiDataType, uint8_t>& _data) const;
+
+ private:
+ std::vector<MidiByte> m_bytes;
};
}
diff --git a/source/jucePluginLib/parameterdescriptions.cpp b/source/jucePluginLib/parameterdescriptions.cpp
@@ -406,19 +406,18 @@ namespace pluginLib
bytes.push_back(byte);
}
- MidiPacket packet;
- packet.bytes = bytes;
+ MidiPacket packet(std::move(bytes));
// post-read validation
- for(size_t i=0; i<packet.bytes.size(); ++i)
+ for(size_t i=0; i<packet.bytes().size(); ++i)
{
- const auto& p = packet.bytes[i];
+ const auto& p = packet.bytes()[i];
if(p.type == MidiDataType::Checksum)
{
- if(p.checksumFirstIndex >= (packet.bytes.size()-1) || p.checksumLastIndex >= (packet.bytes.size()-1))
+ if(p.checksumFirstIndex >= (packet.size()-1) || p.checksumLastIndex >= (packet.size()-1))
{
- _errors << "specified checksum range " << p.checksumFirstIndex << "-" << p.checksumLastIndex << " is out of range 0-" << packet.bytes.size() << i << std::endl;
+ _errors << "specified checksum range " << p.checksumFirstIndex << "-" << p.checksumLastIndex << " is out of range 0-" << packet.size() << i << std::endl;
return;
}
}