LMMS
Loading...
Searching...
No Matches
juce_UMPDispatcher.h
Go to the documentation of this file.
1/*
2 ==============================================================================
3
4 This file is part of the JUCE library.
5 Copyright (c) 2022 - Raw Material Software Limited
6
7 JUCE is an open source library subject to commercial or open-source
8 licensing.
9
10 The code included in this file is provided under the terms of the ISC license
11 http://www.isc.org/downloads/software-support-policy/isc-license. Permission
12 To use, copy, modify, and/or distribute this software for any purpose with or
13 without fee is hereby granted provided that the above copyright notice and
14 this permission notice appear in all copies.
15
16 JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
17 EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
18 DISCLAIMED.
19
20 ==============================================================================
21*/
22
23#ifndef DOXYGEN
24
25namespace juce
26{
28{
29
37{
38public:
40 void reset() { currentPacketLen = 0; }
41
48 template <typename PacketCallbackFunction>
49 void dispatch (const uint32_t* begin,
50 const uint32_t* end,
51 double timeStamp,
52 PacketCallbackFunction&& callback)
53 {
54 std::for_each (begin, end, [&] (uint32_t word)
55 {
57
59 {
60 callback (View (nextPacket.data()), timeStamp);
62 }
63 });
64 }
65
66private:
67 std::array<uint32_t, 4> nextPacket;
68 size_t currentPacketLen = 0;
69};
70
71//==============================================================================
80{
81public:
87 explicit BytestreamToUMPDispatcher (PacketProtocol pp, int storageSize)
88 : concatenator (storageSize),
90 {}
91
92 void reset()
93 {
94 concatenator.reset();
95 converter.reset();
96 }
97
105 template <typename PacketCallbackFunction>
106 void dispatch (const uint8_t* begin,
107 const uint8_t* end,
108 double timestamp,
109 PacketCallbackFunction&& callback)
110 {
111 using CallbackPtr = decltype (std::addressof (callback));
112
113 #if JUCE_MINGW
114 #define JUCE_MINGW_HIDDEN_VISIBILITY __attribute__ ((visibility ("hidden")))
115 #else
116 #define JUCE_MINGW_HIDDEN_VISIBILITY
117 #endif
118
119 struct JUCE_MINGW_HIDDEN_VISIBILITY Callback
120 {
121 Callback (BytestreamToUMPDispatcher& d, CallbackPtr c)
122 : dispatch (d), callbackPtr (c) {}
123
124 void handleIncomingMidiMessage (void*, const MidiMessage& msg) const
125 {
126 Conversion::toMidi1 (msg, [&] (const View& view)
127 {
128 dispatch.converter.convert (view, *callbackPtr);
129 });
130 }
131
132 void handlePartialSysexMessage (void*, const uint8_t*, int, double) const {}
133
135 CallbackPtr callbackPtr = nullptr;
136 };
137
138 #undef JUCE_MINGW_HIDDEN_VISIBILITY
139
140 Callback inputCallback { *this, &callback };
141 concatenator.pushMidiData (begin, int (end - begin), timestamp, (void*) nullptr, inputCallback);
142 }
143
144private:
147};
148
149//==============================================================================
158{
159public:
164 explicit ToBytestreamDispatcher (int storageSize)
165 : converter (storageSize) {}
166
168 void reset()
169 {
170 dispatcher.reset();
171 converter.reset();
172 }
173
182 template <typename BytestreamMessageCallback>
183 void dispatch (const uint32_t* begin,
184 const uint32_t* end,
185 double timestamp,
186 BytestreamMessageCallback&& callback)
187 {
188 dispatcher.dispatch (begin, end, timestamp, [&] (const View& view, double time)
189 {
190 converter.convert (view, time, callback);
191 });
192 }
193
194private:
197};
198
199}
200}
201
202#endif
Definition juce_MidiDataConcatenator.h:34
Definition juce_MidiMessage.h:35
void reset()
Definition juce_UMPDispatcher.h:92
GenericUMPConverter converter
Definition juce_UMPDispatcher.h:146
void dispatch(const uint8_t *begin, const uint8_t *end, double timestamp, PacketCallbackFunction &&callback)
Definition juce_UMPDispatcher.h:106
MidiDataConcatenator concatenator
Definition juce_UMPDispatcher.h:145
BytestreamToUMPDispatcher(PacketProtocol pp, int storageSize)
Definition juce_UMPDispatcher.h:87
Definition juce_UMPDispatcher.h:37
void dispatch(const uint32_t *begin, const uint32_t *end, double timeStamp, PacketCallbackFunction &&callback)
Definition juce_UMPDispatcher.h:49
void reset()
Definition juce_UMPDispatcher.h:40
size_t currentPacketLen
Definition juce_UMPDispatcher.h:68
std::array< uint32_t, 4 > nextPacket
Definition juce_UMPDispatcher.h:67
Definition juce_UMPConverters.h:90
ToBytestreamConverter converter
Definition juce_UMPDispatcher.h:196
ToBytestreamDispatcher(int storageSize)
Definition juce_UMPDispatcher.h:164
Dispatcher dispatcher
Definition juce_UMPDispatcher.h:195
void dispatch(const uint32_t *begin, const uint32_t *end, double timestamp, BytestreamMessageCallback &&callback)
Definition juce_UMPDispatcher.h:183
void reset()
Definition juce_UMPDispatcher.h:168
Definition juce_UMPView.h:46
unsigned d
Definition inflate.c:940
#define JUCE_MINGW_HIDDEN_VISIBILITY
unsigned int uint32_t
Definition mid.cpp:100
unsigned char uint8_t
Definition mid.cpp:98
const char * msg
Definition missing_descriptor.c:20
Definition juce_UMP_test.cpp:26
PacketProtocol
Definition juce_UMPProtocols.h:32
Definition carla_juce.cpp:31
RangedDirectoryIterator end(const RangedDirectoryIterator &)
Definition juce_RangedDirectoryIterator.h:184
RangedDirectoryIterator begin(const RangedDirectoryIterator &it)
Definition juce_RangedDirectoryIterator.h:179
short word
Definition private.h:22
static void toMidi1(const MidiMessage &m, PacketCallbackFunction &&callback)
Definition juce_UMPConversion.h:43
Definition juce_UMPConverters.h:143
static uint32_t getNumWordsForMessageType(uint32_t)
Definition juce_UMPUtils.cpp:28
RECT const char void(* callback)(const char *droppath))) SWELL_API_DEFINE(BOOL
Definition swell-functions.h:1004
return c
Definition crypt.c:175
char * pp
Definition unix.c:513