/*
LUFA Library
- Copyright (C) Dean Camera, 2013.
+ Copyright (C) Dean Camera, 2015.
dean [at] fourwalledcubicle [dot] com
www.lufa-lib.org
*/
/*
- Copyright 2013 Dean Camera (dean [at] fourwalledcubicle [dot] com)
+ Copyright 2015 Dean Camera (dean [at] fourwalledcubicle [dot] com)
Permission to use, copy, modify, distribute, and sell this
software and its documentation for any purpose is hereby granted
/** \ingroup Group_USBClassMIDI
* \defgroup Group_USBClassMIDICommon Common Class Definitions
*
- * \section Sec_ModDescription Module Description
+ * \section Sec_USBClassMIDICommon_ModDescription Module Description
* Constants, Types and Enum definitions that are common to both Device and Host modes for the USB
* MIDI Class.
*
#endif
/* Macros: */
- /** \name MIDI Command Values */
+ /** \name MIDI Command Values
+ * See http://www.midi.org/techspecs/midimessages.php for more information.
+ */
//@{
- /** MIDI command for a note on (activation) event. */
- #define MIDI_COMMAND_NOTE_ON 0x90
+ /** MIDI command for System Exclusive (SysEx) single event that has one byte of data total. */
+ #define MIDI_COMMAND_SYSEX_1BYTE MIDI_COMMAND_SYSEX_END_1BYTE
+
+ /** MIDI command for System Exclusive (SysEx) single event that has two bytes of data total. */
+ #define MIDI_COMMAND_SYSEX_2BYTE 0x20
+
+ /** MIDI command for System Exclusive (SysEx) single event that has three bytes of data total. */
+ #define MIDI_COMMAND_SYSEX_3BYTE 0x30
+
+ /** MIDI command for System Exclusive (SysEx) stream event that has at least four bytes of data total. */
+ #define MIDI_COMMAND_SYSEX_START_3BYTE 0x40
+
+ /** MIDI command for System Exclusive (SysEx) stream event terminator with one remaining data byte. */
+ #define MIDI_COMMAND_SYSEX_END_1BYTE 0x50
+
+ /** MIDI command for System Exclusive (SysEx) stream event terminator with two remaining data bytes. */
+ #define MIDI_COMMAND_SYSEX_END_2BYTE 0x60
+
+ /** MIDI command for System Exclusive (SysEx) stream event terminator with three remaining data bytes. */
+ #define MIDI_COMMAND_SYSEX_END_3BYTE 0x70
/** MIDI command for a note off (deactivation) event. */
- #define MIDI_COMMAND_NOTE_OFF 0x80
+ #define MIDI_COMMAND_NOTE_OFF 0x80
+
+ /** MIDI command for a note on (activation) event. */
+ #define MIDI_COMMAND_NOTE_ON 0x90
+
+ /** MIDI command for a note pressure change event. */
+ #define MIDI_COMMAND_NOTE_PRESSURE 0xA0
+
+ /** MIDI command for a control change event. */
+ #define MIDI_COMMAND_CONTROL_CHANGE 0xB0
+
+ /** MIDI command for a control change event. */
+ #define MIDI_COMMAND_PROGRAM_CHANGE 0xC0
+
+ /** MIDI command for a channel pressure change event. */
+ #define MIDI_COMMAND_CHANNEL_PRESSURE 0xD0
+
+ /** MIDI command for a pitch change event. */
+ #define MIDI_COMMAND_PITCH_WHEEL_CHANGE 0xE0
//@}
/** Standard key press velocity value used for all note events. */
- #define MIDI_STANDARD_VELOCITY 64
+ #define MIDI_STANDARD_VELOCITY 64
/** Convenience macro. MIDI channels are numbered from 1-10 (natural numbers) however the logical channel
* addresses are zero-indexed. This converts a natural MIDI channel number into the logical channel address.
*
* \return Constructed MIDI channel ID.
*/
- #define MIDI_CHANNEL(channel) ((channel) - 1)
-
+ #define MIDI_CHANNEL(channel) ((channel) - 1)
+
/** Constructs a MIDI event ID from a given MIDI command and a virtual MIDI cable index. This can then be
* used to create and decode \ref MIDI_EventPacket_t MIDI event packets.
*
*
* \return Constructed MIDI event ID.
*/
- #define MIDI_EVENT(virtualcable, command) ((virtualcable << 4) | (command >> 4))
+ #define MIDI_EVENT(virtualcable, command) (((virtualcable) << 4) | ((command) >> 4))
/* Enums: */
/** Enum for the possible MIDI jack types in a MIDI device jack descriptor. */
uint16_t AudioSpecification; /**< Binary coded decimal value, indicating the supported Audio Class
* specification version.
+ *
+ * \see \ref VERSION_BCD() utility macro.
*/
uint16_t TotalLength; /**< Total length of the Audio class-specific descriptors, including this descriptor. */
} ATTR_PACKED USB_MIDI_Descriptor_AudioInterface_AS_t;
uint8_t bDescriptorSubtype; /**< Sub type value used to distinguish between audio class-specific descriptors. */
- uint16_t bcdMSC; /**< Binary coded decimal value, indicating the supported MIDI Class specification version. */
+ uint16_t bcdMSC; /**< Binary coded decimal value, indicating the supported MIDI Class specification version.
+ *
+ * \see \ref VERSION_BCD() utility macro.
+ */
uint16_t wTotalLength; /**< Total length of the Audio class-specific descriptors, including this descriptor. */
} ATTR_PACKED USB_MIDI_StdDescriptor_AudioInterface_AS_t;
*/
typedef struct
{
- uint8_t Event; /**< MIDI event type, constructed with the \ref MIDI_EVENT() macro. */
+ uint8_t Event; /**< MIDI event type, constructed with the \ref MIDI_EVENT() macro. */
uint8_t Data1; /**< First byte of data in the MIDI event. */
uint8_t Data2; /**< Second byte of data in the MIDI event. */