Browse Source

BLOCKS: Avoided some unnecessary topology change messages

tags/2021-05-28
jules 7 years ago
parent
commit
926891e8cb
3 changed files with 50 additions and 16 deletions
  1. +2
    -2
      modules/juce_blocks_basics/protocol/juce_BlocksProtocolDefinitions.h
  2. +43
    -11
      modules/juce_blocks_basics/protocol/juce_HostPacketDecoder.h
  3. +5
    -3
      modules/juce_blocks_basics/topology/juce_PhysicalTopologySource.cpp

+ 2
- 2
modules/juce_blocks_basics/protocol/juce_BlocksProtocolDefinitions.h View File

@@ -51,8 +51,8 @@ enum class MessageFromDevice
firmwareUpdateACK = 0x03,
deviceTopologyExtend = 0x04,
deviceTopologyEnd = 0x05,
deviceVersionList = 0x06,
deviceNameList = 0x07,
deviceVersion = 0x06,
deviceName = 0x07,
touchStart = 0x10,
touchMove = 0x11,


+ 43
- 11
modules/juce_blocks_basics/protocol/juce_HostPacketDecoder.h View File

@@ -49,29 +49,61 @@ struct HostPacketDecoder
auto packetTimestamp = reader.read<PacketTimestamp>();
deviceIndex &= 63; // top bit is used as a direction indicator
while (processNextMessage (handler, reader, deviceIndex, packetTimestamp))
{}
bool topologyChanged = false;
for (;;)
{
auto nextMessageType = getMessageType (reader);
if (nextMessageType == 0)
break;
topologyChanged |= messageIncludesTopologyChange (nextMessageType);
if (! processNextMessage (handler, reader, (MessageFromDevice) nextMessageType, deviceIndex, packetTimestamp))
break;
}
if (topologyChanged)
handler.notifyDetectorTopologyChanged();
}
}
static bool processNextMessage (Handler& handler, Packed7BitArrayReader& reader,
TopologyIndex deviceIndex, PacketTimestamp packetTimestamp)
static uint32 getMessageType (Packed7BitArrayReader& reader)
{
if (reader.getRemainingBits() < MessageType::bits)
return false;
return 0;
auto messageType = reader.read<MessageType>().get();
if (messageType == 0)
return false;
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)
{
switch (messageType)
{
case MessageFromDevice::deviceTopology: return handleTopology (handler, reader, true);
case MessageFromDevice::deviceTopologyExtend: return handleTopology (handler, reader, false);
case MessageFromDevice::deviceTopologyEnd: return handleTopologyEnd (handler, reader);
case MessageFromDevice::deviceVersionList: return handleVersion (handler, reader);
case MessageFromDevice::deviceNameList: return handleName (handler, reader);
case MessageFromDevice::deviceVersion: return handleVersion (handler, reader);
case MessageFromDevice::deviceName: return handleName (handler, reader);
case MessageFromDevice::touchStart: return handleTouch (handler, reader, deviceIndex, packetTimestamp, true, false);
case MessageFromDevice::touchMove: return handleTouch (handler, reader, deviceIndex, packetTimestamp, false, false);
case MessageFromDevice::touchEnd: return handleTouch (handler, reader, deviceIndex, packetTimestamp, false, true);


+ 5
- 3
modules/juce_blocks_basics/topology/juce_PhysicalTopologySource.cpp View File

@@ -535,7 +535,6 @@ struct PhysicalTopologySource::Internal
currentDeviceInfo = getArrayOfDeviceInfo (incomingTopologyDevices);
currentDeviceConnections = getArrayOfConnections (incomingTopologyConnections);
currentTopologyDevices = incomingTopologyDevices;
detector.handleTopologyChange();
lastTopologyReceiveTime = juce::Time::getCurrentTime();
blockPings.clear();
@@ -550,12 +549,16 @@ struct PhysicalTopologySource::Internal
if (memcmp (currentDeviceInfo.getReference (i).version.version, version.version.version, sizeof (version.version)))
{
currentDeviceInfo.getReference(i).version = version.version;
detector.handleTopologyChange();
}
}
}
}
void notifyDetectorTopologyChanged()
{
detector.handleTopologyChange();
}
void handleName (BlocksProtocol::DeviceName name)
{
for (auto i = 0; i < currentDeviceInfo.size(); ++i)
@@ -565,7 +568,6 @@ struct PhysicalTopologySource::Internal
if (memcmp (currentDeviceInfo.getReference (i).name.name, name.name.name, sizeof (name.name)))
{
currentDeviceInfo.getReference (i).name = name.name;
detector.handleTopologyChange();
}
}
}


Loading…
Cancel
Save