diff --git a/Demos/Device/ClassDriver/MIDI/MIDI.c b/Demos/Device/ClassDriver/MIDI/MIDI.c index c6b2b053d7f7fa129d8e035ce8a3d8c990942139..0b94c05f25924ea414ea4560842d3125dd98972a 100644 --- a/Demos/Device/ClassDriver/MIDI/MIDI.c +++ b/Demos/Device/ClassDriver/MIDI/MIDI.c @@ -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. */ diff --git a/Demos/Device/ClassDriver/MIDI/MIDI.h b/Demos/Device/ClassDriver/MIDI/MIDI.h index 4dbfbf4c9a1ebd954e6e25c0b14f784f0e2ebea7..25b88671f75de9522281be2d1f3667ca84b76dc0 100644 --- a/Demos/Device/ClassDriver/MIDI/MIDI.h +++ b/Demos/Device/ClassDriver/MIDI/MIDI.h @@ -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); diff --git a/Demos/Device/ClassDriver/MIDI/makefile b/Demos/Device/ClassDriver/MIDI/makefile index 1bd01e002a9944390aec64de308bb676f36051ca..5f3640203387a2b27a0f4e2defb2351a1d3d9320 100644 --- a/Demos/Device/ClassDriver/MIDI/makefile +++ b/Demos/Device/ClassDriver/MIDI/makefile @@ -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