Skip to content

Commit 24d68d0

Browse files
Add comments
1 parent 502be7b commit 24d68d0

File tree

2 files changed

+193
-0
lines changed

2 files changed

+193
-0
lines changed

src/MackieControl.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,14 @@
1+
/*****************************************************************//**
2+
* \file MackieControl.cpp
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
#include "MackieControl.h"
213

314
namespace mackieControl {

src/MackieControl.h

Lines changed: 182 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,22 @@
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

516
namespace 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

Comments
 (0)