Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Erik Strand
lufa
Commits
8aec4fce
Commit
8aec4fce
authored
Dec 11, 2018
by
Erik Strand
Browse files
Modify the MIDI example to work for my board
parent
9c802777
Changes
3
Hide whitespace changes
Inline
Side-by-side
Demos/Device/ClassDriver/MIDI/MIDI.c
View file @
8aec4fce
...
...
@@ -68,20 +68,54 @@ int main(void)
{
SetupHardware
();
LEDs_SetAllLEDs
(
LEDMASK_USB_NOTREADY
);
//LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);
PORTC
.
DIRSET
=
(
1
<<
5
)
|
(
1u
<<
6
)
|
(
1u
<<
7
);
PORTC
.
OUTSET
=
(
1
<<
5
)
|
(
1u
<<
6
)
|
(
1u
<<
7
);
GlobalInterruptEnable
();
uint32_t
count
=
0
;
bool
on
=
false
;
uint8_t
channel
=
MIDI_CHANNEL
(
1
);
uint8_t
command
=
0
;
uint8_t
pitch
=
60
;
uint8_t
velocity
=
100
;
for
(;;)
{
CheckJoystickMovement
();
if
(
++
count
==
50000
)
{
count
=
0
;
PORTC
.
OUTTGL
=
(
1
<<
5
);
if
(
on
)
{
command
=
MIDI_COMMAND_NOTE_OFF
;
}
else
{
command
=
MIDI_COMMAND_NOTE_ON
;
}
on
=
!
on
;
MIDI_EventPacket_t
MIDIEvent
=
(
MIDI_EventPacket_t
)
{
.
Event
=
MIDI_EVENT
(
0
,
command
),
.
Data1
=
command
|
channel
,
.
Data2
=
pitch
,
.
Data3
=
velocity
,
};
MIDI_Device_SendEventPacket
(
&
Keyboard_MIDI_Interface
,
&
MIDIEvent
);
MIDI_Device_Flush
(
&
Keyboard_MIDI_Interface
);
}
MIDI_EventPacket_t
ReceivedMIDIEvent
;
while
(
MIDI_Device_ReceiveEventPacket
(
&
Keyboard_MIDI_Interface
,
&
ReceivedMIDIEvent
))
{
if
((
ReceivedMIDIEvent
.
Event
==
MIDI_EVENT
(
0
,
MIDI_COMMAND_NOTE_ON
))
&&
(
ReceivedMIDIEvent
.
Data3
>
0
))
LEDs_SetAllLEDs
(
ReceivedMIDIEvent
.
Data2
>
64
?
LEDS_LED1
:
LEDS_LED2
);
else
LEDs_SetAllLEDs
(
LEDS_NO_LEDS
);
//
if ((ReceivedMIDIEvent.Event == MIDI_EVENT(0, MIDI_COMMAND_NOTE_ON)) && (ReceivedMIDIEvent.Data3 > 0))
//
LEDs_SetAllLEDs(ReceivedMIDIEvent.Data2 > 64 ? LEDS_LED1 : LEDS_LED2);
//
else
//
LEDs_SetAllLEDs(LEDS_NO_LEDS);
}
MIDI_Device_USBTask
(
&
Keyboard_MIDI_Interface
);
...
...
@@ -109,30 +143,37 @@ void SetupHardware(void)
XMEGACLK_StartDFLL
(
CLOCK_SRC_INT_RC32MHZ
,
DFLL_REF_INT_USBSOF
,
F_USB
);
PMIC
.
CTRL
=
PMIC_LOLVLEN_bm
|
PMIC_MEDLVLEN_bm
|
PMIC_HILVLEN_bm
;
#endif
/* Hardware Initialization */
Joystick_Init
();
LEDs_Init
();
Buttons_Init
();
//
Joystick_Init();
//
LEDs_Init();
//
Buttons_Init();
USB_Init
();
}
/** Checks for changes in the position of the board joystick, sending MIDI events to the host upon each change. */
void
CheckJoystickMovement
(
void
)
void
CheckJoystickMovement
(
bool
on
)
{
static
uint8_t
PrevJoystickStatus
;
uint8_t
MIDICommand
=
0
;
uint8_t
MIDIPitch
;
/* Get current joystick mask, XOR with previous to detect joystick changes */
uint8_t
JoystickStatus
=
Joystick_GetStatus
();
uint8_t
JoystickChanges
=
(
JoystickStatus
^
PrevJoystickStatus
);
// Get current joystick mask, XOR with previous to detect joystick changes
//uint8_t JoystickStatus = Joystick_GetStatus();
//uint8_t JoystickChanges = (JoystickStatus ^ PrevJoystickStatus);
// Get board button status - if pressed use channel 10 (percussion), otherwise use channel 1
//uint8_t Channel = ((Buttons_GetStatus() & BUTTONS_BUTTON1) ? MIDI_CHANNEL(10) : MIDI_CHANNEL(1));
uint8_t
Channel
=
MIDI_CHANNEL
(
1
);
/* Get board button status - if pressed use channel 10 (percussion), otherwise use channel 1 */
uint8_t
Channel
=
((
Buttons_GetStatus
()
&
BUTTONS_BUTTON1
)
?
MIDI_CHANNEL
(
10
)
:
MIDI_CHANNEL
(
1
));
MIDICommand
=
on
?
MIDI_COMMAND_NOTE_ON
:
MIDI_COMMAND_NOTE_OFF
;
//MIDICommand = MIDI_COMMAND_NOTE_ON;
MIDIPitch
=
0x3C
;
/*
if (JoystickChanges & JOY_LEFT)
{
MIDICommand = ((JoystickStatus & JOY_LEFT)? MIDI_COMMAND_NOTE_ON : MIDI_COMMAND_NOTE_OFF);
...
...
@@ -162,6 +203,7 @@ void CheckJoystickMovement(void)
MIDICommand = ((JoystickStatus & JOY_PRESS)? MIDI_COMMAND_NOTE_ON : MIDI_COMMAND_NOTE_OFF);
MIDIPitch = 0x3B;
}
*/
if
(
MIDICommand
)
{
...
...
@@ -178,19 +220,19 @@ void CheckJoystickMovement(void)
MIDI_Device_Flush
(
&
Keyboard_MIDI_Interface
);
}
PrevJoystickStatus
=
JoystickStatus
;
//
PrevJoystickStatus = JoystickStatus;
}
/** Event handler for the library USB Connection event. */
void
EVENT_USB_Device_Connect
(
void
)
{
LEDs_SetAllLEDs
(
LEDMASK_USB_ENUMERATING
);
//
LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);
}
/** Event handler for the library USB Disconnection event. */
void
EVENT_USB_Device_Disconnect
(
void
)
{
LEDs_SetAllLEDs
(
LEDMASK_USB_NOTREADY
);
//
LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);
}
/** Event handler for the library USB Configuration Changed event. */
...
...
@@ -200,7 +242,7 @@ void EVENT_USB_Device_ConfigurationChanged(void)
ConfigSuccess
&=
MIDI_Device_ConfigureEndpoints
(
&
Keyboard_MIDI_Interface
);
LEDs_SetAllLEDs
(
ConfigSuccess
?
LEDMASK_USB_READY
:
LEDMASK_USB_ERROR
);
//
LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR);
}
/** Event handler for the library USB Control Request reception event. */
...
...
Demos/Device/ClassDriver/MIDI/MIDI.h
View file @
8aec4fce
...
...
@@ -46,9 +46,9 @@
#include "Descriptors.h"
#include <LUFA/Drivers/Board/LEDs.h>
#include <LUFA/Drivers/Board/Joystick.h>
#include <LUFA/Drivers/Board/Buttons.h>
//
#include <LUFA/Drivers/Board/LEDs.h>
//
#include <LUFA/Drivers/Board/Joystick.h>
//
#include <LUFA/Drivers/Board/Buttons.h>
#include <LUFA/Drivers/USB/USB.h>
#include <LUFA/Platform/Platform.h>
...
...
@@ -67,7 +67,7 @@
/* Function Prototypes: */
void
SetupHardware
(
void
);
void
CheckJoystickMovement
(
void
);
void
CheckJoystickMovement
(
bool
on
);
void
EVENT_USB_Device_Connect
(
void
);
void
EVENT_USB_Device_Disconnect
(
void
);
...
...
Demos/Device/ClassDriver/MIDI/makefile
View file @
8aec4fce
...
...
@@ -10,11 +10,14 @@
# --------------------------------------
# Run "make help" for target help.
# Can program XMEGA boards with
# avrdude -p x128a4u -P usb -c atmelice_pdi -U flash:w:MIDI.hex
MCU
=
at90usb1287
ARCH
=
AVR8
BOARD
=
USBKEY
F_CPU
=
8000000
MCU
=
atxmega128a4u
ARCH
=
XMEGA
BOARD
=
BOARD_USER
F_CPU
=
48000000
F_USB
=
$(F_CPU)
OPTIMIZATION
=
s
TARGET
=
MIDI
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment