Added incomplete MIDIToneGenerator project.
[pub/USBasp.git] / Demos / Device / LowLevel / MIDI / MIDI.c
index 4dfb9b7..edfc56f 100644 (file)
@@ -1,21 +1,21 @@
 /*\r
              LUFA Library\r
 /*\r
              LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
+     Copyright (C) Dean Camera, 2010.\r
               \r
   dean [at] fourwalledcubicle [dot] com\r
       www.fourwalledcubicle.com\r
 */\r
 \r
 /*\r
               \r
   dean [at] fourwalledcubicle [dot] com\r
       www.fourwalledcubicle.com\r
 */\r
 \r
 /*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
+  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, distribute, and sell this \r
+  software and its documentation for any purpose is hereby granted\r
+  without fee, provided that the above copyright notice appear in \r
+  all copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting \r
+  documentation, and that the name of the author not be used in \r
+  advertising or publicity pertaining to distribution of the \r
   software without specific, written prior permission.\r
 \r
   The author disclaim all warranties with regard to this\r
   software without specific, written prior permission.\r
 \r
   The author disclaim all warranties with regard to this\r
@@ -37,7 +37,7 @@
 #include "MIDI.h"\r
 \r
 /** Main program entry point. This routine configures the hardware required by the application, then\r
 #include "MIDI.h"\r
 \r
 /** Main program entry point. This routine configures the hardware required by the application, then\r
- *  starts the scheduler to run the application tasks.\r
+ *  enters a loop to run the application tasks in sequence.\r
  */\r
 int main(void)\r
 {\r
  */\r
 int main(void)\r
 {\r
@@ -190,7 +190,27 @@ void MIDI_Task(void)
        /* Select the MIDI OUT stream */\r
        Endpoint_SelectEndpoint(MIDI_STREAM_OUT_EPNUM);\r
 \r
        /* Select the MIDI OUT stream */\r
        Endpoint_SelectEndpoint(MIDI_STREAM_OUT_EPNUM);\r
 \r
-       /* Check if endpoint is ready to be read from, if so discard its (unused) data */\r
+       /* Check if a MIDI command has been received */\r
        if (Endpoint_IsOUTReceived())\r
        if (Endpoint_IsOUTReceived())\r
-         Endpoint_ClearOUT();\r
+       {\r
+               USB_MIDI_EventPacket_t MIDIEvent;\r
+                       \r
+               /* Read the MIDI event packet from the endpoint */\r
+               Endpoint_Read_Stream_LE(&MIDIEvent, sizeof(MIDIEvent));\r
+       \r
+               /* Check to see if the sent command is a note on message with a non-zero velocity */\r
+               if ((MIDIEvent.Command == (MIDI_COMMAND_NOTE_ON >> 4)) && (MIDIEvent.Data3 > 0))\r
+               {\r
+                       /* Change LEDs depending on the pitch of the sent note */\r
+                       LEDs_SetAllLEDs(MIDIEvent.Data2 > 64 ? LEDS_LED1 : LEDS_LED2);\r
+               }\r
+               else\r
+               {\r
+                       /* Turn off all LEDs in response to non Note On messages */\r
+                       LEDs_SetAllLEDs(LEDS_NO_LEDS);\r
+               }\r
+       \r
+               /* Clear the endpoint ready for new packet */\r
+               Endpoint_ClearOUT();\r
+       }\r
 }\r
 }\r