@@ -89,6 +89,172 @@ namespace mackieControl {
8989 return message.toMidi ();
9090 }
9191
92+ Message Message::createDeviceQuery () {
93+ uint8_t bytes[5 ] = {};
94+ bytes[4 ] = static_cast <uint8_t >(SysExMessage::DeviceQuery);
95+
96+ return Message{ juce::MidiMessage::createSysExMessage (bytes, sizeof (bytes)) };
97+ }
98+
99+ Message Message::createHostConnectionQuery (uint8_t serialNum[7 ], uint32_t challengeCode) {
100+ uint8_t bytes[5 + 7 + sizeof (challengeCode)] = {};
101+ bytes[4 ] = static_cast <uint8_t >(SysExMessage::HostConnectionQuery);
102+ std::memcpy (&bytes[5 ], serialNum, 7 );
103+ std::memcpy (&bytes[5 + 7 ], &challengeCode, sizeof (challengeCode));
104+
105+ return Message{ juce::MidiMessage::createSysExMessage (bytes, sizeof (bytes)) };
106+ }
107+
108+ Message Message::createHostConnectionReply (uint8_t serialNum[7 ], uint32_t responseCode) {
109+ uint8_t bytes[5 + 7 + sizeof (responseCode)] = {};
110+ bytes[4 ] = static_cast <uint8_t >(SysExMessage::HostConnectionReply);
111+ std::memcpy (&bytes[5 ], serialNum, 7 );
112+ std::memcpy (&bytes[5 + 7 ], &responseCode, sizeof (responseCode));
113+
114+ return Message{ juce::MidiMessage::createSysExMessage (bytes, sizeof (bytes)) };
115+ }
116+
117+ Message Message::createHostConnectionConfirmation (uint8_t serialNum[7 ]) {
118+ uint8_t bytes[5 + 7 ] = {};
119+ bytes[4 ] = static_cast <uint8_t >(SysExMessage::HostConnectionConfirmation);
120+ std::memcpy (&bytes[5 ], serialNum, 7 );
121+
122+ return Message{ juce::MidiMessage::createSysExMessage (bytes, sizeof (bytes)) };
123+ }
124+
125+ Message Message::createHostConnectionError (uint8_t serialNum[7 ]) {
126+ uint8_t bytes[5 + 7 ] = {};
127+ bytes[4 ] = static_cast <uint8_t >(SysExMessage::HostConnectionError);
128+ std::memcpy (&bytes[5 ], serialNum, 7 );
129+
130+ return Message{ juce::MidiMessage::createSysExMessage (bytes, sizeof (bytes)) };
131+ }
132+
133+ Message Message::createLCDBackLightSaver (uint8_t state, uint8_t timeout) {
134+ if (state > 0 ) {
135+ uint8_t bytes[5 + 2 ] = {};
136+ bytes[4 ] = static_cast <uint8_t >(SysExMessage::LCDBackLightSaver);
137+ bytes[5 ] = state;
138+ bytes[6 ] = timeout;
139+
140+ return Message{ juce::MidiMessage::createSysExMessage (bytes, sizeof (bytes)) };
141+ }
142+
143+ uint8_t bytes[5 + 1 ] = {};
144+ bytes[4 ] = static_cast <uint8_t >(SysExMessage::LCDBackLightSaver);
145+ bytes[5 ] = state;
146+
147+ return Message{ juce::MidiMessage::createSysExMessage (bytes, sizeof (bytes)) };
148+ }
149+
150+ Message Message::createTouchlessMovableFaders (uint8_t state) {
151+ uint8_t bytes[5 + 1 ] = {};
152+ bytes[4 ] = static_cast <uint8_t >(SysExMessage::TouchlessMovableFaders);
153+ bytes[5 ] = state;
154+
155+ return Message{ juce::MidiMessage::createSysExMessage (bytes, sizeof (bytes)) };
156+ }
157+
158+ Message Message::createFaderTouchSensitivity (uint8_t channelNumber, uint8_t value) {
159+ uint8_t bytes[5 + 2 ] = {};
160+ bytes[4 ] = static_cast <uint8_t >(SysExMessage::FaderTouchSensitivity);
161+ bytes[5 ] = channelNumber;
162+ bytes[6 ] = value;
163+
164+ return Message{ juce::MidiMessage::createSysExMessage (bytes, sizeof (bytes)) };
165+ }
166+
167+ Message Message::createGoOffline () {
168+ uint8_t bytes[5 ] = {};
169+ bytes[4 ] = static_cast <uint8_t >(SysExMessage::GoOffline);
170+
171+ return Message{ juce::MidiMessage::createSysExMessage (bytes, sizeof (bytes)) };
172+ }
173+
174+ Message Message::createTimeCodeBBTDisplay (uint8_t * data, int size) {
175+ int byteSize = 5 + 1 + size + 1 ;
176+ auto bytes = std::unique_ptr<uint8_t []>(new uint8_t [byteSize]());
177+
178+ bytes[4 ] = static_cast <uint8_t >(SysExMessage::TimeCodeBBTDisplay);
179+ std::memcpy (&bytes[6 ], data, size);
180+
181+ return Message{ juce::MidiMessage::createSysExMessage (bytes.get (), byteSize) };
182+ }
183+
184+ Message Message::createAssignment7SegmentDisplay (uint8_t data[2 ]) {
185+ uint8_t bytes[5 + 1 + 2 ] = {};
186+ bytes[4 ] = static_cast <uint8_t >(SysExMessage::Assignment7SegmentDisplay);
187+ std::memcpy (&bytes[6 ], data, 2 );
188+
189+ return Message{ juce::MidiMessage::createSysExMessage (bytes, sizeof (bytes)) };
190+ }
191+
192+ Message Message::createLCD (uint8_t place, char * data, int size) {
193+ int byteSize = 5 + 1 + size;
194+ auto bytes = std::unique_ptr<uint8_t []>(new uint8_t [byteSize]());
195+
196+ bytes[4 ] = static_cast <uint8_t >(SysExMessage::LCD);
197+ bytes[5 ] = place;
198+ std::memcpy (&bytes[6 ], data, size);
199+
200+ return Message{ juce::MidiMessage::createSysExMessage (bytes.get (), byteSize) };
201+ }
202+
203+ Message Message::createVersionRequest () {
204+ uint8_t bytes[5 ] = {};
205+ bytes[4 ] = static_cast <uint8_t >(SysExMessage::VersionRequest);
206+
207+ return Message{ juce::MidiMessage::createSysExMessage (bytes, sizeof (bytes)) };
208+ }
209+
210+ Message Message::createVersionReply (char * data, int size) {
211+ int byteSize = 5 + 1 + size;
212+ auto bytes = std::unique_ptr<uint8_t []>(new uint8_t [byteSize]());
213+
214+ bytes[4 ] = static_cast <uint8_t >(SysExMessage::VersionReply);
215+ std::memcpy (&bytes[6 ], data, size);
216+
217+ return Message{ juce::MidiMessage::createSysExMessage (bytes.get (), byteSize) };
218+ }
219+
220+ Message Message::createChannelMeterMode (uint8_t channelNumber, uint8_t mode) {
221+ uint8_t bytes[5 + 2 ] = {};
222+ bytes[4 ] = static_cast <uint8_t >(SysExMessage::ChannelMeterMode);
223+ bytes[5 ] = channelNumber;
224+ bytes[6 ] = mode;
225+
226+ return Message{ juce::MidiMessage::createSysExMessage (bytes, sizeof (bytes)) };
227+ }
228+
229+ Message Message::createGlobalLCDMeterMode (uint8_t mode) {
230+ uint8_t bytes[5 + 1 ] = {};
231+ bytes[4 ] = static_cast <uint8_t >(SysExMessage::GlobalLCDMeterMode);
232+ bytes[5 ] = mode;
233+
234+ return Message{ juce::MidiMessage::createSysExMessage (bytes, sizeof (bytes)) };
235+ }
236+
237+ Message Message::createAllFaderstoMinimum () {
238+ uint8_t bytes[5 ] = {};
239+ bytes[4 ] = static_cast <uint8_t >(SysExMessage::AllFaderstoMinimum);
240+
241+ return Message{ juce::MidiMessage::createSysExMessage (bytes, sizeof (bytes)) };
242+ }
243+
244+ Message Message::createAllLEDsOff () {
245+ uint8_t bytes[5 ] = {};
246+ bytes[4 ] = static_cast <uint8_t >(SysExMessage::AllLEDsOff);
247+
248+ return Message{ juce::MidiMessage::createSysExMessage (bytes, sizeof (bytes)) };
249+ }
250+
251+ Message Message::createReset () {
252+ uint8_t bytes[5 ] = {};
253+ bytes[4 ] = static_cast <uint8_t >(SysExMessage::Reset);
254+
255+ return Message{ juce::MidiMessage::createSysExMessage (bytes, sizeof (bytes)) };
256+ }
257+
92258 Message Message::createNote (NoteMessage type, VelocityMessage vel) {
93259 return Message{ juce::MidiMessage::noteOn (1 , static_cast <int >(type), static_cast <uint8_t >(vel)) };
94260 }
@@ -104,4 +270,37 @@ namespace mackieControl {
104270 Message Message::createChannelPressure (int channel, int value) {
105271 return Message{ juce::MidiMessage::channelPressureChange (1 , (channel - 1 ) * 16 + value) };
106272 }
273+
274+ uint8_t Message::charToMackie (char c) {
275+ if (c >= ' a' && c <= ' z' ) { return static_cast <uint8_t >((c - ' a' ) + 1 ); }
276+ else if (c >= ' A' && c <= ' Z' ) { return static_cast <uint8_t >((c - ' A' ) + 1 ); }
277+ else if (c >= ' 0' && c <= ' 9' ) { return static_cast <uint8_t >((c - ' 0' ) + 0x30 ); }
278+
279+ return 0x20 ;
280+ }
281+
282+ uint8_t Message::toLCDPlace (bool lowerLine, uint8_t index) {
283+ return (lowerLine ? 56Ui8 : 0Ui8) + index;
284+ }
285+
286+ uint8_t Message::toChannelMeterMode (
287+ bool signalLEDEnabled, bool peakHoldDisplayEnabled, bool LCDLevelMeterEnabled) {
288+ return (static_cast <uint8_t >(signalLEDEnabled) << 0 )
289+ + (static_cast <uint8_t >(peakHoldDisplayEnabled) << 1 )
290+ + (static_cast <uint8_t >(LCDLevelMeterEnabled) << 2 );
291+ }
292+
293+ int Message::toVPotValue (WheelType type, int ticks) {
294+ return static_cast <int >(type) * 64 + ticks;
295+ }
296+
297+ int Message::toVPotLEDRingValue (bool centerLEDOn, VPotLEDRingMode mode, int value) {
298+ return static_cast <int >(centerLEDOn) * 64
299+ + static_cast <int >(mode) * 16
300+ + value;
301+ }
302+
303+ int Message::toJogWheelValue (WheelType type, int ticks) {
304+ return static_cast <int >(type) * 64 + ticks;
305+ }
107306}
0 commit comments