Browse Source

BLOCKS: Allow factory reset commands

tags/2021-05-28
tommaisey Tom Poole 7 years ago
parent
commit
82019acae7
7 changed files with 383 additions and 430 deletions
  1. +19
    -34
      modules/juce_blocks_basics/blocks/juce_BlockConfigManager.h
  2. +5
    -0
      modules/juce_blocks_basics/juce_blocks_basics.cpp
  3. +0
    -1
      modules/juce_blocks_basics/juce_blocks_basics.h
  4. +3
    -1
      modules/juce_blocks_basics/littlefoot/juce_LittleFootRemoteHeap.h
  5. +2
    -2
      modules/juce_blocks_basics/protocol/juce_HostPacketBuilder.h
  6. +0
    -23
      modules/juce_blocks_basics/protocol/juce_HostPacketDecoder.h
  7. +354
    -369
      modules/juce_blocks_basics/topology/juce_PhysicalTopologySource.cpp

+ 19
- 34
modules/juce_blocks_basics/blocks/juce_BlockConfigManager.h 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

+ 5
- 0
modules/juce_blocks_basics/juce_blocks_basics.cpp 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"


+ 0
- 1
modules/juce_blocks_basics/juce_blocks_basics.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

+ 3
- 1
modules/juce_blocks_basics/littlefoot/juce_LittleFootRemoteHeap.h 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 };


+ 2
- 2
modules/juce_blocks_basics/protocol/juce_HostPacketBuilder.h 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;
}


+ 0
- 23
modules/juce_blocks_basics/protocol/juce_HostPacketDecoder.h 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)


+ 354
- 369
modules/juce_blocks_basics/topology/juce_PhysicalTopologySource.cpp
File diff suppressed because it is too large
View File


Loading…
Cancel
Save