1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-01-15 00:24:19 +00:00

BLOCKS: Allow factory reset commands

This commit is contained in:
tommaisey 2018-11-07 16:32:29 +00:00 committed by Tom Poole
parent faf8742a6c
commit 82019acae7
7 changed files with 418 additions and 465 deletions

View file

@ -267,50 +267,22 @@ struct BlockConfigManager
// Set Block Configuration
void setBlockConfig (ConfigItemId item, int32 value)
{
HostPacketBuilder<32> packet;
packet.writePacketSysexHeaderBytes (deviceIndex);
packet.addConfigSetMessage (item, value);
packet.writePacketSysexFooter();
if (deviceConnection != nullptr)
deviceConnection->sendMessageToDevice (packet.getData(), (size_t) packet.size());
buildAndSendPacket ([item, value] (HostPacketBuilder<32>& p) { p.addConfigSetMessage (item, value); });
}
void requestBlockConfig (ConfigItemId item)
{
HostPacketBuilder<32> packet;
packet.writePacketSysexHeaderBytes (deviceIndex);
packet.addRequestMessage (item);
packet.writePacketSysexFooter();
if (deviceConnection != nullptr)
deviceConnection->sendMessageToDevice(packet.getData(), (size_t) packet.size());
buildAndSendPacket ([item] (HostPacketBuilder<32>& p) { p.addRequestMessage (item); });
}
void requestFactoryConfigSync()
{
HostPacketBuilder<32> packet;
packet.writePacketSysexHeaderBytes(deviceIndex);
packet.addRequestFactorySyncMessage();
packet.writePacketSysexFooter();
if (deviceConnection != nullptr)
deviceConnection->sendMessageToDevice(packet.getData(), (size_t) packet.size());
buildAndSendPacket ([] (HostPacketBuilder<32>& p) { p.addRequestFactorySyncMessage(); });
}
void requestUserConfigSync()
{
HostPacketBuilder<32> packet;
packet.writePacketSysexHeaderBytes(deviceIndex);
packet.addRequestUserSyncMessage();
packet.writePacketSysexFooter();
if (deviceConnection != nullptr)
deviceConnection->sendMessageToDevice(packet.getData(), (size_t) packet.size());
buildAndSendPacket ([] (HostPacketBuilder<32>& p) { p.addRequestUserSyncMessage(); });
}
void handleConfigUpdateMessage (int32 item, int32 value, int32 min, int32 max)
@ -349,8 +321,21 @@ private:
return false;
}
TopologyIndex deviceIndex;
PhysicalTopologySource::DeviceConnection* deviceConnection;
template<typename PacketBuildFn>
void buildAndSendPacket (PacketBuildFn buildFn)
{
if (deviceConnection == nullptr)
return;
HostPacketBuilder<32> packet;
packet.writePacketSysexHeaderBytes (deviceIndex);
buildFn (packet);
packet.writePacketSysexFooter();
deviceConnection->sendMessageToDevice (packet.getData(), (size_t) packet.size());
}
TopologyIndex deviceIndex {};
PhysicalTopologySource::DeviceConnection* deviceConnection {};
};
} // namespace juce

View file

@ -28,6 +28,11 @@
#endif
#else
namespace juce
{
#include "littlefoot/juce_LittleFootRemoteHeap.h"
}
#include "protocol/juce_BitPackingUtilities.h"
#include "protocol/juce_BlocksProtocolDefinitions.h"
#include "protocol/juce_HostPacketDecoder.h"

View file

@ -84,7 +84,6 @@ namespace juce
{
#include "littlefoot/juce_LittleFootRunner.h"
#include "littlefoot/juce_LittleFootCompiler.h"
#include "littlefoot/juce_LittleFootRemoteHeap.h"
}
#endif

View file

@ -20,6 +20,8 @@
==============================================================================
*/
#define JUCE_DUMP_LITTLEFOOT_HEAP_STATUS 0
namespace littlefoot
{
@ -264,7 +266,7 @@ private:
void dumpStatus()
{
#if DUMP_LITTLEFOOT_HEAP_STATUS
#if JUCE_DUMP_LITTLEFOOT_HEAP_STATUS
int differences = 0;
constexpr int diffLen = 50;
char areas[diffLen + 1] = { 0 };

View file

@ -281,7 +281,7 @@ struct HostPacketBuilder
if (! data.hasCapacity (MessageType::bits))
return false;
writeMessageType(MessageFromHost::factoryReset);
writeMessageType (MessageFromHost::factoryReset);
return true;
}
@ -290,7 +290,7 @@ struct HostPacketBuilder
if (! data.hasCapacity (MessageType::bits))
return false;
writeMessageType(MessageFromHost::blockReset);
writeMessageType (MessageFromHost::blockReset);
return true;
}

View file

@ -49,8 +49,6 @@ struct HostPacketDecoder
auto packetTimestamp = reader.read<PacketTimestamp>();
deviceIndex &= 63; // top bit is used as a direction indicator
bool topologyChanged = false;
for (;;)
{
auto nextMessageType = getMessageType (reader);
@ -58,14 +56,9 @@ struct HostPacketDecoder
if (nextMessageType == 0)
break;
topologyChanged |= messageIncludesTopologyChange (nextMessageType);
if (! processNextMessage (handler, reader, (MessageFromDevice) nextMessageType, deviceIndex, packetTimestamp))
break;
}
if (topologyChanged)
handler.notifyDetectorTopologyChanged();
}
}
@ -77,22 +70,6 @@ struct HostPacketDecoder
return reader.read<MessageType>().get();
}
static bool messageIncludesTopologyChange (uint32 messageType)
{
switch ((MessageFromDevice) messageType)
{
case MessageFromDevice::deviceTopology:
case MessageFromDevice::deviceTopologyExtend:
case MessageFromDevice::deviceTopologyEnd:
case MessageFromDevice::deviceVersion:
case MessageFromDevice::deviceName:
return true;
default:
return false;
}
}
static bool processNextMessage (Handler& handler, Packed7BitArrayReader& reader,
MessageFromDevice messageType, TopologyIndex deviceIndex,
PacketTimestamp packetTimestamp)