1+ /* ****************************************************************/ /* *
2+ * \file MackieControl.h
3+ * \brief A compact Mackie Control library on JUCE.
4+ *
5+ * \author WuChang
6+ 7+ * \date July 2023
8+ * \version 1.0.0
9+ * \license MIT License
10+ *********************************************************************/
11+
112#pragma once
213
314#include < JuceHeader.h>
415
516namespace mackieControl {
17+ /* *
18+ * Mackie Control messages via MIDI system exclusive message.
19+ */
620 enum class SysExMessage : uint8_t {
721 DeviceQuery = 0 ,
822 HostConnectionQuery,
@@ -24,6 +38,9 @@ namespace mackieControl {
2438 AllLEDsOff,
2539 Reset
2640 };
41+ /* *
42+ * Valid Mackie Control messages via MIDI system exclusive message.
43+ */
2744 constinit auto validSysExMessage = std::to_array({
2845 SysExMessage::DeviceQuery,
2946 SysExMessage::HostConnectionQuery,
@@ -45,26 +62,47 @@ namespace mackieControl {
4562 SysExMessage::AllLEDsOff,
4663 SysExMessage::Reset
4764 });
65+ /* *
66+ * Check if the message is valid.
67+ */
4868 constexpr bool isValidSysExMessage (SysExMessage mes) {
4969 return std::find (validSysExMessage.begin (), validSysExMessage.end (), mes) != validSysExMessage.end (); }
70+ /* *
71+ * Check if the message is valid.
72+ */
5073 constexpr bool isValidSysExMessage (int mes) {
5174 return isValidSysExMessage (static_cast <SysExMessage>(mes)); }
5275
76+ /* *
77+ * Mackie Control messages via MIDI note message velocity data.
78+ */
5379 enum class VelocityMessage : uint8_t {
5480 Off = 0 ,
5581 Flashing,
5682 On = 127
5783 };
84+ /* *
85+ * Valid Mackie Control messages via MIDI note message velocity data.
86+ */
5887 constinit auto validVelocityMessage = std::to_array({
5988 VelocityMessage::Off,
6089 VelocityMessage::Flashing,
6190 VelocityMessage::On
6291 });
92+ /* *
93+ * Check if the message is valid.
94+ */
6395 constexpr bool isValidVelocityMessage (VelocityMessage mes) {
6496 return std::find (validVelocityMessage.begin (), validVelocityMessage.end (), mes) != validVelocityMessage.end (); }
97+ /* *
98+ * Check if the message is valid.
99+ */
65100 constexpr bool isValidVelocityMessage (int mes) {
66101 return isValidVelocityMessage (static_cast <VelocityMessage>(mes)); }
67102
103+ /* *
104+ * Mackie Control messages via MIDI note message note number data.
105+ */
68106 enum class NoteMessage {
69107 RECRDYCh1, RECRDYCh2, RECRDYCh3, RECRDYCh4, RECRDYCh5, RECRDYCh6, RECRDYCh7, RECRDYCh8,
70108 SOLOCh1, SOLOCh2, SOLOCh3, SOLOCh4, SOLOCh5, SOLOCh6, SOLOCh7, SOLOCh8,
@@ -104,6 +142,9 @@ namespace mackieControl {
104142 RUDESOLOLIGHT,
105143 Relayclick
106144 };
145+ /* *
146+ * Valid Mackie Control messages via MIDI note message note number data.
147+ */
107148 constinit auto validNoteMessage = std::to_array({
108149 NoteMessage::RECRDYCh1, NoteMessage::RECRDYCh2, NoteMessage::RECRDYCh3, NoteMessage::RECRDYCh4,
109150 NoteMessage::RECRDYCh5, NoteMessage::RECRDYCh6, NoteMessage::RECRDYCh7, NoteMessage::RECRDYCh8,
@@ -157,11 +198,20 @@ namespace mackieControl {
157198 NoteMessage::RUDESOLOLIGHT,
158199 NoteMessage::Relayclick
159200 });
201+ /* *
202+ * Check if the message is valid.
203+ */
160204 constexpr bool isValidNoteMessage (NoteMessage mes) {
161205 return std::find (validNoteMessage.begin (), validNoteMessage.end (), mes) != validNoteMessage.end (); }
206+ /* *
207+ * Check if the message is valid.
208+ */
162209 constexpr bool isValidNoteMessage (int mes) {
163210 return isValidNoteMessage (static_cast <NoteMessage>(mes)); }
164211
212+ /* *
213+ * Mackie Control messages via MIDI controller message controller number data.
214+ */
165215 enum class CCMessage {
166216 VPot1 = 16 , VPot2, VPot3, VPot4, VPot5, VPot6, VPot7, VPot8,
167217 ExternalController = 46 ,
@@ -173,6 +223,9 @@ namespace mackieControl {
173223 TimeCodeBBTDisplay9, TimeCodeBBTDisplay10,
174224 Assignment7SegmentDisplay1, Assignment7SegmentDisplay2, Assignment7SegmentDisplay3
175225 };
226+ /* *
227+ * Valid Mackie Control messages via MIDI controller message controller number data.
228+ */
176229 constinit auto validCCMessage = std::to_array({
177230 CCMessage::VPot1, CCMessage::VPot2, CCMessage::VPot3, CCMessage::VPot4,
178231 CCMessage::VPot5, CCMessage::VPot6, CCMessage::VPot7, CCMessage::VPot8,
@@ -188,61 +241,190 @@ namespace mackieControl {
188241 CCMessage::Assignment7SegmentDisplay1, CCMessage::Assignment7SegmentDisplay2,
189242 CCMessage::Assignment7SegmentDisplay3
190243 });
244+ /* *
245+ * Check if the message is valid.
246+ */
191247 constexpr bool isValidCCMessage (CCMessage mes) {
192248 return std::find (validCCMessage.begin (), validCCMessage.end (), mes) != validCCMessage.end (); }
249+ /* *
250+ * Check if the message is valid.
251+ */
193252 constexpr bool isValidCCMessage (int mes) {
194253 return isValidCCMessage (static_cast <CCMessage>(mes)); }
195254
255+ /* *
256+ * Rotation direction of wheel messages.
257+ */
196258 enum class WheelType {
197259 CW, CCW
198260 };
199261
262+ /* *
263+ * LED ring mode of V-Pot on Mackie Control devices.
264+ */
200265 enum class VPotLEDRingMode {
201266 SingleDotMode,
202267 BoostCutMode,
203268 WrapMode,
204269 SpreadMode
205270 };
206271
272+ /* *
273+ * Mackie Control Message class.
274+ */
207275 class Message final {
208276 public:
277+ /* *
278+ * Create an empty Mackie Control message. An empty message is an invalid Mackie Control message.
279+ */
209280 Message () = default ;
281+ /* *
282+ * Create a Mackie Control message from a MIDI message.
283+ */
210284 explicit Message (const juce::MidiMessage& midiMessage);
211285
286+ /* *
287+ * Create a copy of another message.
288+ */
212289 explicit Message (const Message& message);
290+ /* *
291+ * Move constructor.
292+ */
213293 explicit Message (Message&& message) noexcept ;
214294
295+ /* *
296+ * Copy this message from another one.
297+ */
215298 Message& operator =(const Message& message);
299+ /* *
300+ * Move assignment operator.
301+ */
216302 Message& operator =(Message&& message) noexcept ;
217303
304+ /* *
305+ * Copy this message from a MIDI message.
306+ */
218307 Message& operator =(const juce::MidiMessage& message);
308+ /* *
309+ * Convert this message to MIDI message.
310+ */
219311 juce::MidiMessage toMidi () const ;
220312
313+ /* *
314+ * Check if this message is a valid Mackie Control message via MIDI system exclusive message.
315+ */
221316 bool isSysEx () const ;
317+ /* *
318+ * Check if this message is a valid Mackie Control message via MIDI note message.
319+ */
222320 bool isNote () const ;
321+ /* *
322+ * Check if this message is a valid Mackie Control message via MIDI controller message.
323+ */
223324 bool isCC () const ;
325+ /* *
326+ * Check if this message is a valid Mackie Control message via MIDI pitch wheel message.
327+ */
224328 bool isPitchWheel () const ;
329+ /* *
330+ * Check if this message is a valid Mackie Control message via MIDI channel pressure message.
331+ */
225332 bool isChannelPressure () const ;
226333
334+ /* *
335+ * Check if this message is a valid Mackie Control message.
336+ */
227337 bool isMackieControl () const ;
228338
339+ /* *
340+ * Get the type of Mackie Control message via MIDI system exclusive message.
341+ * \return Message Type
342+ */
229343 std::tuple<SysExMessage> getSysExData () const ;
344+ /* *
345+ * Get the Host Connection Query message data.
346+ * \return Serial Number, Challenge Code
347+ */
230348 std::tuple<std::array<uint8_t , 7 >, uint32_t > getHostConnectionQueryData () const ;
349+ /* *
350+ * Get the Host Connection Reply message data.
351+ * \return Serial Number, Response Code
352+ */
231353 std::tuple<std::array<uint8_t , 7 >, uint32_t > getHostConnectionReplyData () const ;
354+ /* *
355+ * Get the Host Connection Confirmation message data.
356+ * \return Serial Number
357+ */
232358 std::tuple<std::array<uint8_t , 7 >> getHostConnectionConfirmationData () const ;
359+ /* *
360+ * Get the Host Connection Error message data.
361+ * \return Serial Number
362+ */
233363 std::tuple<std::array<uint8_t , 7 >> getHostConnectionErrorData () const ;
364+ /* *
365+ * Get the LCD Back Light Saver message data.
366+ * \return Back Light On/Off, Timeout
367+ */
234368 std::tuple<uint8_t , uint8_t > getLCDBackLightSaverData () const ;
369+ /* *
370+ * Get the Touchless Movable Faders message data.
371+ * \return Touch On/Off
372+ */
235373 std::tuple<uint8_t > getTouchlessMovableFadersData () const ;
374+ /* *
375+ * Get the Fader Touch Sensitivity message data.
376+ * \return Channel Number, Value
377+ */
236378 std::tuple<uint8_t , uint8_t > getFaderTouchSensitivityData () const ;
379+ /* *
380+ * Get the Time Code/BBT Display message data.
381+ * \return Data Pointer, Data Size
382+ */
237383 std::tuple<const uint8_t *, int > getTimeCodeBBTDisplayData () const ;
384+ /* *
385+ * Get the Assignment 7-Segment Display message data.
386+ * \return Data
387+ */
238388 std::tuple<std::array<uint8_t , 2 >> getAssignment7SegmentDisplayData () const ;
389+ /* *
390+ * Get the LCD message data.
391+ * \return Line Place, Data Pointer, Data Size
392+ */
239393 std::tuple<uint8_t , const char *, int > getLCDData () const ;
394+ /* *
395+ * Get the Version Reply message data.
396+ * \return Value Pointer, Value Size
397+ */
240398 std::tuple<const char *, int > getVersionReplyData () const ;
399+ /* *
400+ * Get the Channel Meter Mode message data.
401+ * \return Channel Number, Mode
402+ */
241403 std::tuple<uint8_t , uint8_t > getChannelMeterModeData () const ;
404+ /* *
405+ * Get the Global LCD Meter Mode message data.
406+ * \return Horizontal/Vertical Mode
407+ */
242408 std::tuple<uint8_t > getGlobalLCDMeterModeData () const ;
409+ /* *
410+ * Get the type of Mackie Control message via MIDI note message.
411+ * \return Message Type, Message On/Off Type
412+ */
243413 std::tuple<NoteMessage, VelocityMessage> getNoteData () const ;
414+ /* *
415+ * Get the type of Mackie Control message via MIDI controller message.
416+ * \return Message Type, Value
417+ */
244418 std::tuple<CCMessage, int > getCCData () const ;
419+ /* *
420+ * Get the type of Mackie Control message via MIDI pitch wheel message.
421+ * \return Channel Number, Fader Value
422+ */
245423 std::tuple<int , int > getPitchWheelData () const ;
424+ /* *
425+ * Get the type of Mackie Control message via MIDI channel pressure message.
426+ * \return Meter Channel Number, Meter Value
427+ */
246428 std::tuple<int , int > getChannelPressureData () const ;
247429
248430 public:
0 commit comments